yangdamao 2 лет назад
Родитель
Сommit
ecdb7534a8
34 измененных файлов с 790 добавлено и 220 удалено
  1. 77 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/mall/TopGoodsCategoryController.java
  2. 69 0
      zhongzheng-admin-store/pom.xml
  3. 2 2
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/category/GoodsCategoryController.java
  4. 137 0
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/common/CaptchaController.java
  5. 92 0
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/store/StoreController.java
  6. 83 6
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/LoginController.java
  7. 4 4
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/StoreMenuController.java
  8. 3 4
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/StoreRoleController.java
  9. 8 8
      zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/StoreUserController.java
  10. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/store/StoreUser.java
  11. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/StoreLoginUser.java
  12. 20 2
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SecurityUtils.java
  13. 3 3
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/aspectj/LogAspect.java
  14. 12 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  15. 2 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/filter/JwtAuthenticationTokenFilter.java
  16. 54 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/handle/StoreLogoutSuccessHandlerImpl.java
  17. 119 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreLoginService.java
  18. 11 11
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreTokenService.java
  19. 2 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreUserDetailsServiceImpl.java
  20. 7 7
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreUserServiceImpl.java
  21. 0 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopSysLoginService.java
  22. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCategoryBo.java
  23. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCategoryQueryBo.java
  24. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsCategoryMapper.java
  25. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsCategoryService.java
  26. 43 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsCategoryServiceImpl.java
  27. 3 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/store/service/impl/StoreMenuServiceImpl.java
  28. 0 146
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/entity/ClientLoginStoreUser.java
  29. 14 1
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCategoryMapper.xml
  30. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/store/StoreMenuMapper.xml
  31. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/store/StoreRoleMapper.xml
  32. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/store/StoreRoleMenuMapper.xml
  33. 4 4
      zhongzheng-system/src/main/resources/mapper/modules/store/StoreUserMapper.xml
  34. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/store/StoreUserRoleMapper.xml

+ 77 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/mall/TopGoodsCategoryController.java

@@ -0,0 +1,77 @@
+package com.zhongzheng.controller.mall;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.goods.bo.GoodsCategoryBo;
+import com.zhongzheng.modules.goods.bo.GoodsCategoryQueryBo;
+import com.zhongzheng.modules.goods.service.IGoodsCategoryService;
+import com.zhongzheng.modules.goods.vo.GoodsCategoryVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品类目Controller
+ *
+ * @date
+ */
+@Api(value = "商品类目控制器", tags = {"商品类目管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/mall/goods/category")
+public class TopGoodsCategoryController extends BaseController {
+
+    private final IGoodsCategoryService iGoodsCategoryService;
+
+    /**
+     * 查询类目列表
+     */
+    @ApiOperation("查询类目列表")
+    @GetMapping("/list")
+    public TableDataInfo<GoodsCategoryVo> list(GoodsCategoryQueryBo bo) {
+        startPage();
+        List<GoodsCategoryVo> list = iGoodsCategoryService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增
+     */
+    @ApiOperation("新增类目")
+    @PostMapping("/save")
+    public AjaxResult<Void> saveCategory(@RequestBody GoodsCategoryBo bo) {
+        return toAjax(iGoodsCategoryService.saveCategory(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改
+     */
+    @ApiOperation("修改类目")
+    @PostMapping("/update")
+    public AjaxResult<Void> updateCategory(@RequestBody GoodsCategoryBo bo) {
+        return toAjax(iGoodsCategoryService.updateCategory(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量删除
+     */
+    @ApiOperation("批量删除类目")
+    @PostMapping("/batch/del")
+    public AjaxResult<Void> batchDelCategory(@RequestBody List<Long> ids) {
+        return toAjax(iGoodsCategoryService.batchDelCategory(ids) ? 1 : 0);
+    }
+
+    /**
+     * 类目树
+     */
+    @ApiOperation("类目树")
+    @GetMapping("/tree")
+    public AjaxResult<List<GoodsCategoryVo>> categoryTree(GoodsCategoryQueryBo bo) {
+        return AjaxResult.success(iGoodsCategoryService.categoryTree(bo));
+    }
+}

+ 69 - 0
zhongzheng-admin-store/pom.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>zhongzheng</artifactId>
+        <groupId>com.zhongzheng</groupId>
+        <version>3.4.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>zhongzheng-admin-store</artifactId>
+
+    <dependencies>
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 表示依赖不会传递 -->
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-framework</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 2 - 2
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/category/GoodsCategoryController.java

@@ -71,7 +71,7 @@ public class GoodsCategoryController extends BaseController {
      */
     @ApiOperation("类目树")
     @GetMapping("/tree")
-    public AjaxResult<List<GoodsCategoryVo>> categoryTree() {
-        return AjaxResult.success(iGoodsCategoryService.categoryTree());
+    public AjaxResult<List<GoodsCategoryVo>> categoryTree(GoodsCategoryQueryBo bo) {
+        return AjaxResult.success(iGoodsCategoryService.categoryTree(bo));
     }
 }

+ 137 - 0
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/common/CaptchaController.java

@@ -0,0 +1,137 @@
+package com.zhongzheng.controller.common;
+
+import cn.hutool.captcha.AbstractCaptcha;
+import cn.hutool.captcha.CircleCaptcha;
+import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.captcha.ShearCaptcha;
+import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.captcha.generator.MathGenerator;
+import cn.hutool.captcha.generator.RandomGenerator;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.github.xiaoymin.knife4j.annotations.DynamicParameter;
+import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.redis.RedisCache;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 验证码操作处理
+ *
+ * @author hjl
+ */
+@Api(tags ="系统操作管理")
+@ApiSupport(order = 1)
+@RestController
+public class CaptchaController {
+
+	// 圆圈干扰验证码
+	@Resource(name = "CircleCaptcha")
+	private CircleCaptcha circleCaptcha;
+	// 线段干扰的验证码
+	@Resource(name = "LineCaptcha")
+	private LineCaptcha lineCaptcha;
+	// 扭曲干扰验证码
+	@Resource(name = "ShearCaptcha")
+	private ShearCaptcha shearCaptcha;
+
+	@Autowired
+	private RedisCache redisCache;
+
+	// 验证码类型
+	@Value("${captcha.captchaType}")
+	private String captchaType;
+	// 验证码类别
+	@Value("${captcha.captchaCategory}")
+	private String captchaCategory;
+	// 数字验证码位数
+	@Value("${captcha.captchaNumberLength}")
+	private int numberLength;
+	// 字符验证码长度
+	@Value("${captcha.captchaCharLength}")
+	private int charLength;
+
+	/**
+	 * 生成验证码
+	 */
+	@ApiOperation("获取验证码")
+	@DynamicResponseParameters(name = "CodeMapModel",properties = {
+			@DynamicParameter(name = "uuid",value = "验证码uuid"),
+			@DynamicParameter(name = "img",value = "验证码图片base64"),
+	})
+	@GetMapping("/captchaImage")
+	public AjaxResult getCode() {
+		// 保存验证码信息
+		String uuid = IdUtil.simpleUUID();
+		String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+		String code = null;
+		// 生成验证码
+		CodeGenerator codeGenerator;
+		AbstractCaptcha captcha;
+		switch (captchaType) {
+			case "math":
+				codeGenerator = new MathGenerator(numberLength);
+				break;
+			case "char":
+				codeGenerator = new RandomGenerator(charLength);
+				break;
+			default:
+				throw new IllegalArgumentException("验证码类型异常");
+		}
+		switch (captchaCategory) {
+			case "line":
+				captcha = lineCaptcha;
+				break;
+			case "circle":
+				captcha = circleCaptcha;
+				break;
+			case "shear":
+				captcha = shearCaptcha;
+				break;
+			default:
+				throw new IllegalArgumentException("验证码类别异常");
+		}
+		captcha.setGenerator(codeGenerator);
+		captcha.createCode();
+		if ("math".equals(captchaType)) {
+			code = getCodeResult(captcha.getCode());
+		} else if ("char".equals(captchaType)) {
+			code = captcha.getCode();
+		}
+		redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+		Map<String,Object> map = new HashMap();
+		map.put("uuid", uuid);
+		map.put("img", captcha.getImageBase64());
+		return AjaxResult.success(map);
+	}
+
+	private String getCodeResult(String capStr) {
+		int a = Convert.toInt(StrUtil.sub(capStr, 0, numberLength).trim());
+		char operator = capStr.charAt(numberLength);
+		int b = Convert.toInt(StrUtil.sub(capStr, numberLength + 1, numberLength + 1 + numberLength).trim());
+		switch (operator) {
+			case '*':
+				return a * b + "";
+			case '+':
+				return a + b + "";
+			case '-':
+				return a - b + "";
+			default:
+				return "";
+		}
+	}
+
+}

+ 92 - 0
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/store/StoreController.java

@@ -0,0 +1,92 @@
+package com.zhongzheng.controller.store;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.modules.top.mall.bo.TopStoreAddBo;
+import com.zhongzheng.modules.top.mall.bo.TopStoreEditBo;
+import com.zhongzheng.modules.top.mall.bo.TopStoreQueryBo;
+import com.zhongzheng.modules.top.mall.service.ITopStoreService;
+import com.zhongzheng.modules.top.mall.vo.TopStoreVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商户店铺管理Controller
+ *
+ * @author hjl
+ * @date 2023-05-18
+ */
+@Api(value = "商户店铺管理控制器", tags = {"商户店铺管理管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/store")
+public class StoreController extends BaseController {
+
+    private final ITopStoreService iTopStoreService;
+
+    /**
+     * 查询商户店铺管理列表
+     */
+    @ApiOperation("查询商户店铺管理列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopStoreVo> list(TopStoreQueryBo bo) {
+        startPage();
+        List<TopStoreVo> list = iTopStoreService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取商户店铺管理详细信息
+     */
+    @ApiOperation("获取商户店铺管理详细信息")
+    @PreAuthorize("@ss.hasPermi('system:store:query')")
+    @GetMapping("/{storeId}")
+    public AjaxResult<TopStoreVo> getInfo(@PathVariable("storeId" ) Long storeId) {
+        return AjaxResult.success(iTopStoreService.queryById(storeId));
+    }
+
+    /**
+     * 新增商户店铺管理
+     */
+    @ApiOperation("新增商户店铺管理")
+    @PreAuthorize("@ss.hasPermi('system:store:add')")
+    @Log(title = "商户店铺管理", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopStoreAddBo bo) {
+        return toAjax(iTopStoreService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改商户店铺管理
+     */
+    @ApiOperation("修改商户店铺管理")
+    @PreAuthorize("@ss.hasPermi('system:store:edit')")
+    @Log(title = "商户店铺管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopStoreEditBo bo) {
+        return toAjax(iTopStoreService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+
+
+
+    @ApiOperation("店铺批量删除")
+    @PreAuthorize("@ss.hasPermi('system:store:edit')")
+    @Log(title = "商户批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/batchRemove")
+    public AjaxResult<Void> batchRemove(@RequestBody TopStoreEditBo bo) {
+        return toAjax(iTopStoreService.batchRemove(bo) ? 1 : 0);
+    }
+
+}

+ 83 - 6
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/LoginController.java

@@ -1,20 +1,33 @@
 package com.zhongzheng.controller.system;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.store.StoreMenu;
+import com.zhongzheng.common.core.domain.entity.store.StoreUser;
+import com.zhongzheng.common.core.domain.model.LoginBody;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.StoreLoginService;
+import com.zhongzheng.framework.web.service.StorePermissionService;
+import com.zhongzheng.framework.web.service.StoreTokenService;
+import com.zhongzheng.modules.store.service.IStoreMenuService;
 import com.zhongzheng.modules.store.service.IStoreUserService;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.system.vo.SysTenantVo;
 import com.zhongzheng.modules.user.bo.UserAppAccountLoginBo;
 import com.zhongzheng.modules.user.bo.UserAppSmsLoginBo;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 客户端用户Controller
@@ -25,11 +38,15 @@ import java.util.Map;
 @Api(value = "短信控制器", tags = {"登录控制器"})
 @RequiredArgsConstructor(onConstructor_ = @Autowired)
 @RestController
-@RequestMapping("/app/store/common")
+@RequestMapping()
 public class LoginController extends BaseController {
 
     private final IStoreUserService iUserService;
-
+    private final StoreTokenService tokenService;
+    private final StorePermissionService permissionService;
+    private final ISysTenantService tenantService;
+    private final StoreLoginService storeLoginService;
+    private final IStoreMenuService storeMenuService;
 
     @ApiOperation("短信登录")
     @PostMapping("/sms_login")
@@ -44,4 +61,64 @@ public class LoginController extends BaseController {
         Map<String,Object> map = iUserService.accountLogin(bo);
         return AjaxResult.success(map);
     }
+
+    /**
+     * 登录方法
+     *
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @ApiOperation("登录")
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = storeLoginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
+    /**
+     * 获取路由信息
+     *
+     * @return 路由信息
+     */
+    @ApiOperation("路由菜单信息")
+    @GetMapping("/getRouters")
+    public AjaxResult getRouters()
+    {
+        StoreLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        // 用户信息
+        StoreUser user = loginUser.getUser();
+        List<StoreMenu> menus = storeMenuService.selectMenuTreeByUserId(user.getUserId());
+        return AjaxResult.success(storeMenuService.buildMenus(menus));
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+    @ApiOperation("登录用户信息")
+    @GetMapping("/getInfo")
+    public AjaxResult getInfo()
+    {
+        StoreLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        StoreUser user = iUserService.getOne(new LambdaQueryWrapper<StoreUser>()
+                .eq(StoreUser::getUserId, loginUser.getUser().getUserId()).last("limit 1"));
+        // 角色集合
+        Set<String> roles = permissionService.getRolePermission(user);
+        // 权限集合
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenantVo sysTenantVo = tenantService.queryById(Long.parseLong(tenantId));
+        Map<String,Object> map = new HashMap<>();
+        map.put("user", user);
+        map.put("roles", roles);
+        map.put("permissions", permissions);
+        map.put("tenant", sysTenantVo);
+        return AjaxResult.success(map);
+    }
 }

+ 4 - 4
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/StoreMenuController.java

@@ -13,7 +13,7 @@ import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.StoreTokenService;
 import com.zhongzheng.modules.store.service.IStoreMenuService;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -46,7 +46,7 @@ public class StoreMenuController extends BaseController {
     @GetMapping("/list")
     public AjaxResult list(StoreMenu menu)
     {
-        ClientLoginStoreUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        StoreLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         Long userId = loginUser.getUser().getUserId();
         List<StoreMenu> menus = storeMenuService.selectMenuList(menu, userId);
         return AjaxResult.success(menus);
@@ -70,7 +70,7 @@ public class StoreMenuController extends BaseController {
     @GetMapping("/treeselect")
     public AjaxResult treeselect(StoreMenu menu)
     {
-        ClientLoginStoreUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        StoreLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         Long userId = loginUser.getUser().getUserId();
         List<StoreMenu> menus = storeMenuService.selectMenuList(menu, userId);
         return AjaxResult.success(storeMenuService.buildMenuTreeSelect(menus));
@@ -83,7 +83,7 @@ public class StoreMenuController extends BaseController {
     @GetMapping(value = "/roleMenuTreeselect/{roleId}")
     public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
     {
-        ClientLoginStoreUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        StoreLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         List<StoreMenu> menus = storeMenuService.selectMenuList(loginUser.getUser().getUserId());
         AjaxResult ajax = AjaxResult.success();
         ajax.put("checkedKeys", storeMenuService.selectMenuListByRoleId(roleId));

+ 3 - 4
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/StoreRoleController.java

@@ -7,6 +7,7 @@ import com.zhongzheng.common.constant.UserConstants;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.entity.store.StoreRole;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.utils.SecurityUtils;
@@ -15,7 +16,6 @@ import com.zhongzheng.framework.web.service.StorePermissionService;
 import com.zhongzheng.framework.web.service.StoreTokenService;
 import com.zhongzheng.modules.store.service.IStoreRoleService;
 import com.zhongzheng.modules.store.service.IStoreUserService;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -104,15 +104,14 @@ public class StoreRoleController extends BaseController {
             return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
         }
         role.setUpdateBy(SecurityUtils.getUsername());
-
         if (storeRoleService.updateRole(role) > 0)
         {
             // 更新缓存用户权限
-            ClientLoginStoreUser loginUser = storeTokenService.getLoginUser(ServletUtils.getRequest());
+            StoreLoginUser loginUser = storeTokenService.getLoginUser(ServletUtils.getRequest());
             if (Validator.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
             {
                 loginUser.setPermissions(storePermissionService.getMenuPermission(loginUser.getUser()));
-                loginUser.setUser(storeUserService.selectUserByUserName(loginUser.getUser().getUserAccount()));
+                loginUser.setUser(storeUserService.selectUserByUserName(loginUser.getUser().getUserName()));
                 storeTokenService.setLoginUser(loginUser);
             }
             return AjaxResult.success();

+ 8 - 8
zhongzheng-admin-store/src/main/java/com/zhongzheng/controller/system/StoreUserController.java

@@ -19,7 +19,7 @@ import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.framework.web.service.StoreTokenService;
 import com.zhongzheng.modules.store.service.IStoreRoleService;
 import com.zhongzheng.modules.store.service.IStoreUserService;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -100,14 +100,14 @@ public class StoreUserController extends BaseController {
     @PostMapping
     public AjaxResult add(@Validated @RequestBody StoreUser user)
     {
-        if (UserConstants.NOT_UNIQUE.equals(storeUserService.checkUserNameUnique(user.getUserAccount())))
+        if (UserConstants.NOT_UNIQUE.equals(storeUserService.checkUserNameUnique(user.getUserName())))
         {
-            return AjaxResult.error("新增用户'" + user.getUserAccount() + "'失败,登录账号已存在");
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
         }
         else if (Validator.isNotEmpty(user.getTelphone())
                 && UserConstants.NOT_UNIQUE.equals(storeUserService.checkPhoneUnique(user)))
         {
-            return AjaxResult.error("新增用户'" + user.getUserAccount() + "'失败,手机号码已存在");
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
         }
         if(!ToolsUtils.verifPwd(user.getPassword())){
             throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
@@ -132,7 +132,7 @@ public class StoreUserController extends BaseController {
         }
         StoreUser user = BeanUtil.toBean(bo, StoreUser.class);
         storeUserService.checkUserAllowed(user);
-        ClientLoginStoreUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        StoreLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         if(!loginUser.getUser().isAdmin()&& !loginUser.getUser().getUserId().equals(user.getUserId())){
             return AjaxResult.error("您无权限修改本信息");
         }
@@ -140,7 +140,7 @@ public class StoreUserController extends BaseController {
         if (Validator.isNotEmpty(user.getTelphone())
                 && UserConstants.NOT_UNIQUE.equals(storeUserService.checkPhoneUnique(user)))
         {
-            return AjaxResult.error("修改用户'" + user.getUserAccount() + "'失败,手机号码已存在");
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
         }
         if(Validator.isNotEmpty(user.getPassword())){
             //重置密码
@@ -152,7 +152,7 @@ public class StoreUserController extends BaseController {
                 {
                     // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
                     authentication = authenticationManager
-                            .authenticate(new UsernamePasswordAuthenticationToken(loginUser.getUser().getUserAccount(), bo.getOldPassword()));
+                            .authenticate(new UsernamePasswordAuthenticationToken(loginUser.getUser().getUserName(), bo.getOldPassword()));
                 }
                 catch (Exception e)
                 {
@@ -167,7 +167,7 @@ public class StoreUserController extends BaseController {
         }
         int result = storeUserService.updateUser(user);
         if(result>0){
-            StoreUser newUser = storeUserService.selectUserByUserName(loginUser.getUser().getUserAccount());
+            StoreUser newUser = storeUserService.selectUserByUserName(loginUser.getUser().getUserName());
             //同个用户ID则更新用户信息,admin操作其他用户则不更新
             if(newUser.getUserId().equals(loginUser.getUser().getUserId())){
                 // 更新缓存用户

+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/store/StoreUser.java

@@ -29,7 +29,7 @@ private static final long serialVersionUID=1L;
     @TableId(value = "user_id")
     private Long userId;
     /** 账号 */
-    private String userAccount;
+    private String userName;
     /** 昵称 */
     private String nickname;
     /** 真实姓名 */

+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/StoreLoginUser.java

@@ -86,7 +86,7 @@ public class StoreLoginUser implements UserDetails
     @Override
     public String getUsername()
     {
-        return user.getUserAccount();
+        return user.getUserName();
     }
 
     /**

+ 20 - 2
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SecurityUtils.java

@@ -1,13 +1,14 @@
 package com.zhongzheng.common.utils;
 
 import cn.hutool.http.HttpStatus;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.exception.CustomException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import com.zhongzheng.common.core.domain.model.LoginUser;
-import com.zhongzheng.common.exception.CustomException;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
@@ -27,9 +28,12 @@ public class SecurityUtils
     @Value("${mybatis-plus.tenant.enabled-tenant}")
     private Integer enabledTenant;
 
+    public static Integer InEnabledTenant;
+
     @PostConstruct
     public void getEnvironment(){
         EnabledTenant = this.enabledTenant == 1 || this.enabledTenant == 3;
+        InEnabledTenant = this.enabledTenant;
     }
     /**
      * 获取用户账户
@@ -39,6 +43,7 @@ public class SecurityUtils
         try
         {
             if(EnabledTenant){
+                if (InEnabledTenant == 3) return getStoreLoginUser().getUsername();
                 return getLoginUser().getUsername();
             }else{
                 return getTopLoginUser().getUsername();
@@ -77,6 +82,18 @@ public class SecurityUtils
         }
     }
 
+    public static StoreLoginUser getStoreLoginUser()
+    {
+        try
+        {
+            return (StoreLoginUser) getAuthentication().getPrincipal();
+        }
+        catch (Exception e)
+        {
+            throw new CustomException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED);
+        }
+    }
+
     /**
      * 获取Authentication
      */
@@ -135,4 +152,5 @@ public class SecurityUtils
         return user != null && "admin".equals(user.getUser().getUserName());
         //   return userId != null && 1L == userId;
     }
+
 }

+ 3 - 3
zhongzheng-framework/src/main/java/com/zhongzheng/framework/aspectj/LogAspect.java

@@ -21,7 +21,7 @@ import com.zhongzheng.framework.web.service.TokenService;
 import com.zhongzheng.framework.web.service.TopTokenService;
 import com.zhongzheng.framework.web.service.WxTokenService;
 import com.zhongzheng.modules.system.domain.SysOperLog;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.Signature;
@@ -123,10 +123,10 @@ public class LogAspect
                 }
                 //客户端
                 if(applicationName.equals("zhongzheng_store")){
-                    ClientLoginStoreUser  loginUser = SpringUtils.getBean(StoreTokenService.class).getLoginUser(ServletUtils.getRequest());
+                    StoreLoginUser  loginUser = SpringUtils.getBean(StoreTokenService.class).getLoginUser(ServletUtils.getRequest());
                     if (loginUser != null)
                     {
-                        username = loginUser.getUser().getUserAccount();
+                        username = loginUser.getUser().getUserName();
                     }
                     return ;
                 }

+ 12 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -3,6 +3,7 @@ package com.zhongzheng.framework.config;
 import com.zhongzheng.framework.security.filter.JwtAuthenticationTokenFilter;
 import com.zhongzheng.framework.security.handle.AuthenticationEntryPointImpl;
 import com.zhongzheng.framework.security.handle.LogoutSuccessHandlerImpl;
+import com.zhongzheng.framework.security.handle.StoreLogoutSuccessHandlerImpl;
 import com.zhongzheng.framework.security.handle.TopLogoutSuccessHandlerImpl;
 import com.zhongzheng.framework.web.service.StoreUserDetailsServiceImpl;
 import com.zhongzheng.framework.web.service.TopUserDetailsServiceImpl;
@@ -67,6 +68,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
     @Lazy
     private TopLogoutSuccessHandlerImpl topLogoutSuccessHandlerImpl;
 
+    /**
+     * 退出处理类
+     */
+    @Autowired
+    @Lazy
+    private StoreLogoutSuccessHandlerImpl storeLogoutSuccessHandlerImpl;
+
     /**
      * token认证过滤器
      */
@@ -169,10 +177,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .anyRequest().authenticated()
                 .and()
                 .headers().frameOptions().disable();
-        if(enabledTenant == 1 || enabledTenant == 3){
+        if(enabledTenant == 1){
             //开启多租户
             httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
-        }else{
+        }else if(enabledTenant == 3){
+            httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(storeLogoutSuccessHandlerImpl);
+        }else {
             httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(topLogoutSuccessHandlerImpl);
         }
 

+ 2 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -8,7 +8,7 @@ import com.zhongzheng.framework.web.service.StoreTokenService;
 import com.zhongzheng.framework.web.service.TokenService;
 import com.zhongzheng.framework.web.service.TopTokenService;
 import com.zhongzheng.framework.web.service.WxTokenService;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -64,7 +64,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
                     SecurityContextHolder.getContext().setAuthentication(authenticationToken);
                 }
             }else if (StringUtils.isNoneEmpty(storeToken)){
-                ClientLoginStoreUser clientLoginUser = storeTokenService.getLoginUser(request);
+                StoreLoginUser clientLoginUser = storeTokenService.getLoginUser(request);
                 if(clientLoginUser!=null){
                     storeTokenService.verifyToken(clientLoginUser);
                     UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(clientLoginUser, null,null);

+ 54 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/handle/StoreLogoutSuccessHandlerImpl.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.framework.security.handle;
+
+import cn.hutool.core.lang.Validator;
+import cn.hutool.http.HttpStatus;
+import com.alibaba.fastjson.JSON;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.manager.AsyncManager;
+import com.zhongzheng.framework.manager.factory.AsyncFactory;
+import com.zhongzheng.framework.web.service.StoreTokenService;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 自定义退出处理类 返回成功
+ * 
+ * @author zhongzheng
+ */
+@Configuration
+public class StoreLogoutSuccessHandlerImpl implements LogoutSuccessHandler
+{
+    @Autowired
+    private StoreTokenService tokenService;
+
+    /**
+     * 退出处理
+     * 
+     * @return
+     */
+    @Override
+    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
+            throws IOException, ServletException
+    {
+            StoreLoginUser loginUser = tokenService.getLoginUser(request);
+            if (Validator.isNotNull(loginUser))
+            {
+                String userName = loginUser.getUsername();
+                // 删除用户缓存记录
+                tokenService.delLoginUser(loginUser.getToken());
+                // 记录用户退出日志
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"));
+            }
+        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.HTTP_OK, "退出成功")));
+    }
+}

+ 119 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreLoginService.java

@@ -0,0 +1,119 @@
+package com.zhongzheng.framework.web.service;
+
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.exception.user.CaptchaException;
+import com.zhongzheng.common.exception.user.CaptchaExpireException;
+import com.zhongzheng.common.exception.user.UserPasswordNotMatchException;
+import com.zhongzheng.common.utils.AES;
+import com.zhongzheng.common.utils.MessageUtils;
+import com.zhongzheng.framework.manager.AsyncManager;
+import com.zhongzheng.framework.manager.factory.AsyncFactory;
+import com.zhongzheng.modules.store.service.IStoreUserService;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+
+/**
+ * 登录校验方法
+ *
+ * @author zhongzheng
+ */
+@Component
+public class StoreLoginService
+{
+    @Autowired
+    private StoreTokenService tokenService;
+
+    @Resource
+    private AuthenticationManager authenticationManager;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @Autowired
+    private IStoreUserService storeUserService;
+
+    private static Logger log = LoggerFactory.getLogger(StoreLoginService.class);
+
+    /**
+     * 登录验证
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @param code 验证码
+     * @param uuid 唯一标识
+     * @return 结果
+     */
+    public String login(String username, String password, String code, String uuid)
+    {
+        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+        String captcha = redisCache.getCacheObject(verifyKey);
+        redisCache.deleteObject(verifyKey);
+        if (captcha == null)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+            throw new CaptchaExpireException();
+        }
+        if (!code.equalsIgnoreCase(captcha))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+            throw new CaptchaException();
+        }
+        // 用户验证
+        Authentication authentication = null;
+        try
+        {
+            String rsaPrivate = null;
+            try {
+                InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config/pri.key");
+                rsaPrivate = AES.getStringByInputStream_1(certStream);
+                certStream.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+
+            }
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            if(password.length()>20){
+                password = AES.decrypt(password,rsaPrivate);
+            }
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager
+                    .authenticate(new UsernamePasswordAuthenticationToken(username, password));
+        }
+        catch (Exception e)
+        {
+            if (e instanceof BadCredentialsException)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
+            else
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new CustomException(e.getMessage());
+            }
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        StoreLoginUser loginUser = (StoreLoginUser) authentication.getPrincipal();
+        // 生成token
+        return tokenService.createToken(loginUser);
+    }
+
+   /* public String wx_login(String username)
+    {
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        // 生成token
+        return tokenService.createToken(loginUser);
+    }*/
+}

+ 11 - 11
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreTokenService.java

@@ -11,7 +11,7 @@ import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ip.AddressUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.modules.store.service.IStoreUserService;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
@@ -62,7 +62,7 @@ public class StoreTokenService
      *
      * @return 用户信息
      */
-    public ClientLoginStoreUser getLoginUser(HttpServletRequest request)
+    public StoreLoginUser getLoginUser(HttpServletRequest request)
     {
         //测试用户
         String test_token = request.getHeader("X-Auth-Token");
@@ -77,16 +77,16 @@ public class StoreTokenService
             // 解析对应的权限以及用户信息
             String uuid = (String) claims.get(Constants.STORE_LOGIN_USER_KEY);
             String userKey = getTokenKey(uuid);
-            ClientLoginStoreUser user = redisCache.getCacheObject(userKey);
+            StoreLoginUser user = redisCache.getCacheObject(userKey);
             return user;
         }
         return null;
     }
 
-    private ClientLoginStoreUser getTestUser(){
+    private StoreLoginUser getTestUser(){
         String unionId = "oQ2yp56PgQ-PfwN4vxTZhR5eTpzk";
         StoreUser user = iUserService.queryByUnionId(unionId);
-        ClientLoginStoreUser loginUser = new ClientLoginStoreUser();
+        StoreLoginUser loginUser = new StoreLoginUser();
         loginUser.setUser(user);
         loginUser.setExpireTime(System.currentTimeMillis()+200);
         return loginUser;
@@ -95,7 +95,7 @@ public class StoreTokenService
     /**
      * 设置用户身份信息
      */
-    public void setLoginUser(ClientLoginStoreUser loginUser)
+    public void setLoginUser(StoreLoginUser loginUser)
     {
         if (Validator.isNotNull(loginUser) && Validator.isNotEmpty(loginUser.getToken()))
         {
@@ -121,9 +121,9 @@ public class StoreTokenService
      * @param loginUser 用户信息
      * @return 令牌
      */
-    public String createToken(ClientLoginStoreUser loginUser)
+    public String createToken(StoreLoginUser loginUser)
     {
-        String token = IdUtil.simpleUUID()+loginUser.getUser().getUserAccount();
+        String token = IdUtil.simpleUUID()+loginUser.getUser().getUserName();
         loginUser.setToken(token);
         setUserAgent(loginUser);
         refreshToken(loginUser);
@@ -138,7 +138,7 @@ public class StoreTokenService
      * @param loginUser
      * @return 令牌
      */
-    public void verifyToken(ClientLoginStoreUser loginUser)
+    public void verifyToken(StoreLoginUser loginUser)
     {
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
@@ -153,7 +153,7 @@ public class StoreTokenService
      *
      * @param loginUser 登录信息
      */
-    public void refreshToken(ClientLoginStoreUser loginUser)
+    public void refreshToken(StoreLoginUser loginUser)
     {
         loginUser.setLoginTime(System.currentTimeMillis());
         loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
@@ -167,7 +167,7 @@ public class StoreTokenService
      *
      * @param loginUser 登录信息
      */
-    public void setUserAgent(ClientLoginStoreUser loginUser)
+    public void setUserAgent(StoreLoginUser loginUser)
     {
         UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
         String ip = IpUtils.getIpAddr(ServletUtils.getRequest());

+ 2 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreUserDetailsServiceImpl.java

@@ -5,7 +5,7 @@ import com.zhongzheng.common.core.domain.entity.store.StoreUser;
 import com.zhongzheng.common.enums.UserStatus;
 import com.zhongzheng.common.exception.BaseException;
 import com.zhongzheng.modules.store.service.IStoreUserService;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,7 +57,7 @@ public class StoreUserDetailsServiceImpl implements UserDetailsService
 
     public UserDetails createLoginUser(StoreUser user)
     {
-        return new ClientLoginStoreUser(user, permissionService.getMenuPermission(user));
+        return new StoreLoginUser(user, permissionService.getMenuPermission(user));
     }
 
 

+ 7 - 7
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/StoreUserServiceImpl.java

@@ -23,7 +23,7 @@ import com.zhongzheng.modules.store.service.IStoreRoleService;
 import com.zhongzheng.modules.store.service.IStoreUserService;
 import com.zhongzheng.modules.user.bo.UserAppAccountLoginBo;
 import com.zhongzheng.modules.user.bo.UserAppSmsLoginBo;
-import com.zhongzheng.modules.user.entity.ClientLoginStoreUser;
+import com.zhongzheng.common.core.domain.model.StoreLoginUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -81,7 +81,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
 
     @Override
     public String checkUserNameUnique(String userName) {
-        int count = count(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getUserAccount, userName).ne(StoreUser::getStatus, -1).last("limit 1"));
+        int count = count(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getUserName, userName).ne(StoreUser::getStatus, -1).last("limit 1"));
         if (count > 0) {
             return UserConstants.NOT_UNIQUE;
         }
@@ -201,11 +201,11 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
-        ClientLoginStoreUser loginUser = new ClientLoginStoreUser();
+        StoreLoginUser loginUser = new StoreLoginUser();
         loginUser.setUser(user);
         Map<String,Object> map = new HashMap<>();
         map.put(Constants.TOKEN,storeTokenService.createToken(loginUser));
-        map.put("user_account",user.getUserAccount());
+        map.put("user_account",user.getUserName());
         map.put("full_info",Validator.isEmpty(user.getIdCard())?false:true); //是否完善身份信息
         return map;
     }
@@ -221,7 +221,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
                 .or()
                 .eq(StoreUser::getIdCard,EncryptHandler.encrypt(bo.getAccount()))
                 .or()
-                .eq(StoreUser::getUserAccount,bo.getAccount()));
+                .eq(StoreUser::getUserName,bo.getAccount()));
         StoreUser user = getOne(queryWrapper);
         if(Validator.isEmpty(user)){
             throw new CustomException("登录信息错误");
@@ -248,11 +248,11 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
         {
             throw new BaseException("登录信息错误");
         }
-        ClientLoginStoreUser loginUser = new ClientLoginStoreUser();
+        StoreLoginUser loginUser = new StoreLoginUser();
         loginUser.setUser(user);
         Map<String,Object> map = new HashMap<>();
         map.put(Constants.TOKEN,storeTokenService.createToken(loginUser));
-        map.put("user_account",user.getUserAccount());
+        map.put("user_account",user.getUserName());
         map.put("full_info",Validator.isEmpty(user.getIdCard())?false:true); //是否完善身份信息
         return map;
     }

+ 0 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopSysLoginService.java

@@ -57,7 +57,6 @@ public class TopSysLoginService
      */
     public String login(String username, String password, String code, String uuid)
     {
-        log.info("解密前password = "+password);
         String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
         String captcha = redisCache.getCacheObject(verifyKey);
         redisCache.deleteObject(verifyKey);
@@ -88,7 +87,6 @@ public class TopSysLoginService
             if(password.length()>20){
                 password = AES.decrypt(password,rsaPrivate);
             }
-            log.info("解密后password = "+password);
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager
                     .authenticate(new UsernamePasswordAuthenticationToken(username, password));

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCategoryBo.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 【请填写功能名称】对象 goods_spec
@@ -39,5 +40,9 @@ private static final long serialVersionUID=1L;
     @ApiModelProperty("")
     private Long tenantId;
     @ApiModelProperty("店铺ID")
+    private Long storeId;
+    @ApiModelProperty("商户ID")
     private Long merId;
+
+    private List<Integer> statusList;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCategoryQueryBo.java

@@ -33,6 +33,12 @@ public class GoodsCategoryQueryBo implements Serializable {
     /** 类目名称 */
     @ApiModelProperty("类目名称")
     private String categoryName;
+    @ApiModelProperty("店铺ID")
+    private Long storeId;
+    @ApiModelProperty("商户ID")
+    private Long merId;
+    @ApiModelProperty("机构ID")
+    private Long tenantId;
 
     private List<Integer> statusList;
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsCategoryMapper.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.goods.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.goods.bo.GoodsCategoryQueryBo;
+import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsCategory;
 import com.zhongzheng.modules.goods.vo.GoodsCategoryVo;
 
@@ -10,4 +11,6 @@ import java.util.List;
 public interface GoodsCategoryMapper extends BaseMapper<GoodsCategory> {
 
     List<GoodsCategoryVo> queryList(GoodsCategoryQueryBo bo);
+
+    List<Goods> getGoodsListByCategoryId(Long categoryId);
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsCategoryService.java

@@ -18,6 +18,6 @@ public interface IGoodsCategoryService extends IService<GoodsCategory> {
 
     boolean batchDelCategory(List<Long> ids);
 
-    List<GoodsCategoryVo> categoryTree();
+    List<GoodsCategoryVo> categoryTree(GoodsCategoryQueryBo bo);
 
 }

+ 43 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsCategoryServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.goods.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -8,11 +9,13 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.goods.bo.GoodsCategoryBo;
 import com.zhongzheng.modules.goods.bo.GoodsCategoryQueryBo;
+import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsCategory;
 import com.zhongzheng.modules.goods.mapper.GoodsCategoryMapper;
 import com.zhongzheng.modules.goods.service.IGoodsCategoryService;
 import com.zhongzheng.modules.goods.vo.GoodsCategoryVo;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
@@ -55,6 +58,7 @@ public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, G
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean saveCategory(GoodsCategoryBo bo) {
         validEntity(bo);
         GoodsCategory goodsCategory = BeanUtil.toBean(bo, GoodsCategory.class);
@@ -64,6 +68,7 @@ public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, G
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean updateCategory(GoodsCategoryBo bo) {
         validEntity(bo);
         GoodsCategory categoryCategory = getById(bo.getCategoryId());
@@ -80,16 +85,50 @@ public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, G
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean batchDelCategory(List<Long> ids) {
-        //todo 删除校验
-        List<GoodsCategory> categoryList = listByIds(ids);
+        // 删除校验
+        List<GoodsCategory> categoryList = validDelete(ids);
         categoryList.forEach(x -> x.setStatus(-1));
         return updateBatchById(categoryList);
     }
 
+    private List<GoodsCategory> validDelete(List<Long> ids) {
+        List<GoodsCategory> result = new ArrayList<>();
+        List<GoodsCategory> categoryList = listByIds(ids);
+        if (CollectionUtils.isEmpty(categoryList)){
+            throw new CustomException("类目获取失败");
+        }
+        result.addAll(categoryList);
+        categoryList.forEach(item -> {
+            //是否存在商品关联
+            List<Goods> goodsList = baseMapper.getGoodsListByCategoryId(item.getCategoryId());
+            if (CollectionUtil.isNotEmpty(goodsList)){
+                throw new CustomException(String.format("【%s】类目存在商品关联,请勿删除!",item.getCategoryName()));
+            }
+            categoryValidChildren(item,result);
+        });
+        return result;
+    }
+
+    private void categoryValidChildren(GoodsCategory item,List<GoodsCategory> result) {
+        List<GoodsCategory> list = list(new LambdaQueryWrapper<GoodsCategory>().eq(GoodsCategory::getParentId, item.getCategoryId()));
+        if (CollectionUtils.isEmpty(list)){
+            return;
+        }
+        result.addAll(list);
+        list.forEach(categoryVo -> {
+            //是否存在商品关联
+            List<Goods> goodsList = baseMapper.getGoodsListByCategoryId(categoryVo.getCategoryId());
+            if (CollectionUtil.isNotEmpty(goodsList)){
+                throw new CustomException(String.format("【%s】类目存在商品关联,请勿删除!",categoryVo.getCategoryName()));
+            }
+            categoryValidChildren(categoryVo,result);
+        });
+    }
+
     @Override
-    public List<GoodsCategoryVo> categoryTree() {
-        GoodsCategoryQueryBo bo = new GoodsCategoryQueryBo();
+    public List<GoodsCategoryVo> categoryTree(GoodsCategoryQueryBo bo) {
         bo.setParentId(0);//父ID
         bo.setStatusList(Arrays.asList(1));
         List<GoodsCategoryVo> categoryVos = baseMapper.queryList(bo);

+ 3 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/store/service/impl/StoreMenuServiceImpl.java

@@ -9,7 +9,6 @@ import com.zhongzheng.common.core.domain.entity.store.StoreMenu;
 import com.zhongzheng.common.core.domain.entity.store.StoreRole;
 import com.zhongzheng.common.core.domain.entity.store.StoreRoleMenu;
 import com.zhongzheng.common.core.domain.entity.store.StoreUser;
-import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.modules.store.mapper.StoreMenuMapper;
 import com.zhongzheng.modules.store.mapper.StoreRoleMapper;
 import com.zhongzheng.modules.store.mapper.StoreRoleMenuMapper;
@@ -107,7 +106,8 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
     @Override
     public List<StoreMenu> selectMenuTreeByUserId(Long userId) {
         List<StoreMenu> menus = null;
-        if (SecurityUtils.isTopAdmin(userId)) {
+        StoreUser user = storeUserService.getById(userId);
+        if (user.isAdmin()) {
             menus = baseMapper.selectMenuTreeAll();
         } else {
             menus = baseMapper.selectMenuTreeByUserId(userId);
@@ -317,7 +317,7 @@ public class StoreMenuServiceImpl extends ServiceImpl<StoreMenuMapper, StoreMenu
         String routerPath = menu.getPath();
         // 非外链并且是一级目录(类型为目录)
         if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
-                && UserConstants.NO_FRAME.equals(menu.getIsFrame())) {
+                && UserConstants.NO_FRAME.equals(menu.getIsFrame().toString())) {
             routerPath = "/" + menu.getPath();
         }
         // 非外链并且是一级目录(类型为菜单)

+ 0 - 146
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/entity/ClientLoginStoreUser.java

@@ -1,146 +0,0 @@
-package com.zhongzheng.modules.user.entity;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.zhongzheng.common.core.domain.entity.store.StoreUser;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetails;
-
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * 登录用户身份权限
- *
- * @author zhongzheng
- */
-
-@Data
-@NoArgsConstructor
-@Accessors(chain = true)
-public class ClientLoginStoreUser implements UserDetails
-{
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 用户唯一标识
-     */
-    private String token;
-
-    /**
-     * 登录时间
-     */
-    private Long loginTime;
-
-    /**
-     * 过期时间
-     */
-    private Long expireTime;
-
-    /**
-     * 登录IP地址
-     */
-    private String ipaddr;
-
-    /**
-     * 登录地点
-     */
-    private String loginLocation;
-
-    /**
-     * 浏览器类型
-     */
-    private String browser;
-
-    /**
-     * 操作系统
-     */
-    private String os;
-
-    /**
-     * 权限列表
-     */
-    private Set<String> permissions;
-
-
-    /**
-     * 用户信息
-     */
-    private StoreUser user;
-
-
-
-    public ClientLoginStoreUser(StoreUser user, Set<String> permissions)
-    {
-        this.user = user;
-        this.permissions = permissions;
-    }
-
-    @JsonIgnore
-    @Override
-    public String getPassword()
-    {
-        return user.getPassword();
-    }
-
-    @Override
-    public String getUsername()
-    {
-        return user.getUserAccount();
-    }
-
-    /**
-     * 账户是否未过期,过期无法验证
-     */
-    @JsonIgnore
-    @Override
-    public boolean isAccountNonExpired()
-    {
-        return true;
-    }
-
-    /**
-     * 指定用户是否解锁,锁定的用户无法进行身份验证
-     *
-     * @return
-     */
-    @JsonIgnore
-    @Override
-    public boolean isAccountNonLocked()
-    {
-        return true;
-    }
-
-    /**
-     * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
-     *
-     * @return
-     */
-    @JsonIgnore
-    @Override
-    public boolean isCredentialsNonExpired()
-    {
-        return true;
-    }
-
-    /**
-     * 是否可用 ,禁用的用户不能身份验证
-     *
-     * @return
-     */
-    @JsonIgnore
-    @Override
-    public boolean isEnabled()
-    {
-        return true;
-    }
-
-    @Override
-    public Collection<? extends GrantedAuthority> getAuthorities()
-    {
-        return null;
-    }
-
-}

+ 14 - 1
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCategoryMapper.xml

@@ -6,12 +6,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="queryList" parameterType="com.zhongzheng.modules.goods.bo.GoodsCategoryQueryBo" resultType="com.zhongzheng.modules.goods.vo.GoodsCategoryVo">
         select * from goods_category where 1=1
-        <if test="parentId != null and parentId != ''">
+        <if test="parentId != null">
             AND parent_id = #{parentId}
         </if>
         <if test="categoryName != null and categoryName != ''">
             AND category_name like concat('%', #{categoryName}, '%')
         </if>
+        <if test="storeId != null and storeId != ''">
+            AND store_id like concat('%', #{storeId}, '%')
+        </if>
+        <if test="merId != null and merId != ''">
+            AND mer_id like concat('%', #{merId}, '%')
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id like concat('%', #{tenantId}, '%')
+        </if>
         <if test="statusList != null and statusList.size()!=0 ">
             AND status in
             <foreach collection="statusList" item="item" index="index" open="(" close=")" separator=",">
@@ -20,4 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="getGoodsListByCategoryId" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.goods.domain.Goods">
+        SELECT * FROM goods WHERE `status` = 1 AND INSTR(category_ids,#{categoryId}) > 0
+    </select>
+
 </mapper>

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/store/StoreMenuMapper.xml

@@ -24,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
         <result property="remark" column="remark"/>
         <result property="storeId" column="store_id"/>
-        <result property="companyId" column="company_id"/>
+        <result property="merId" column="mer_id"/>
     </resultMap>
 
     <select id="selectMenuListByUserId" parameterType="com.zhongzheng.common.core.domain.entity.store.StoreMenu" resultMap="StoreMenuResult">

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/store/StoreRoleMapper.xml

@@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
         <result property="remark" column="remark"/>
         <result property="storeId" column="store_id"/>
-        <result property="companyId" column="company_id"/>
+        <result property="merId" column="mer_id"/>
     </resultMap>
 
     <sql id="selectRoleVo">

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/store/StoreRoleMenuMapper.xml

@@ -8,7 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="roleId" column="role_id"/>
         <result property="menuId" column="menu_id"/>
         <result property="storeId" column="store_id"/>
-        <result property="companyId" column="company_id"/>
+        <result property="merId" column="mer_id"/>
     </resultMap>
 
 

+ 4 - 4
zhongzheng-system/src/main/resources/mapper/modules/store/StoreUserMapper.xml

@@ -6,7 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <resultMap type="com.zhongzheng.common.core.domain.entity.store.StoreUser" id="StoreUserResult">
         <result property="userId" column="user_id"/>
-        <result property="userAccount" column="user_account"/>
+        <result property="userName" column="user_name"/>
         <result property="nickname" column="nickname"/>
         <result property="realname" column="realname"/>
         <result property="sex" column="sex"/>
@@ -19,13 +19,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
         <result property="status" column="status"/>
         <result property="storeId" column="store_id"/>
-        <result property="companyId" column="company_id"/>
+        <result property="merId" column="mer_id"/>
     </resultMap>
 
 
     <select id="selectUserByUserName" parameterType="String" resultMap="StoreUserResult">
-        select * from store_user
-        where (u.user_account = #{userName} or u.telphone = #{userName,typeHandler=com.zhongzheng.common.type.EncryptHandler} or u.id_card = #{userName,typeHandler=com.zhongzheng.common.type.EncryptHandler}) and u.`status` != -1
+        select * from store_user u
+        where (u.user_name = #{userName} or u.telphone = #{userName,typeHandler=com.zhongzheng.common.type.EncryptHandler} or u.id_card = #{userName,typeHandler=com.zhongzheng.common.type.EncryptHandler}) and u.`status` != -1
     </select>
 
     <select id="selectUserList" parameterType="com.zhongzheng.common.core.domain.entity.store.StoreUser" resultType="com.zhongzheng.common.core.domain.entity.store.StoreUser">

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/store/StoreUserRoleMapper.xml

@@ -8,7 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="userId" column="user_id"/>
         <result property="roleId" column="role_id"/>
         <result property="storeId" column="store_id"/>
-        <result property="companyId" column="company_id"/>
+        <result property="merId" column="mer_id"/>
     </resultMap>