瀏覽代碼

微信小程序登录

tanzhongran 3 年之前
父節點
當前提交
611fb5bbcc

+ 4 - 11
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/LoginController.java

@@ -4,9 +4,9 @@ import com.abi.qms.platform.annotation.PassToken;
 import com.abi.qms.platform.dto.req.LoginReq;
 import com.abi.qms.platform.dto.req.ResetPasswordReq;
 import com.abi.qms.platform.dto.req.UpdatePasswordReq;
+import com.abi.qms.platform.dto.res.LoginActivateRes;
 import com.abi.qms.platform.dto.res.LoginRes;
 import com.abi.qms.platform.service.LoginService;
-import com.abi.task.common.annotation.IgnoreToken;
 import com.abi.task.common.api.base.BaseResponse;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -34,21 +34,14 @@ public class LoginController {
     @Autowired
     private LoginService loginService;
 
-    /**
-     * 登录
-     *
-     * @param req
-     * @return
-     */
     @PostMapping("login")
-    @ApiOperation("登录")
+    @ApiOperation("登录QMS")
     @PassToken
-    public BaseResponse loginQms(@Validated @RequestBody LoginReq req) {
-        LoginRes login = loginService.login(req);
+    public BaseResponse<LoginRes> loginConsole(@Validated @RequestBody LoginReq req) {
+        LoginRes login = loginService.loginConsole(req);
         return BaseResponse.create(login);
     }
 
-
     @ApiOperation("重置密码")
     @PostMapping("resetPassword")
     public BaseResponse resetPassword(@Validated @RequestBody ResetPasswordReq req) throws Exception {

+ 52 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/wx/LoginController.java

@@ -0,0 +1,52 @@
+package com.abi.qms.platform.controller.wx;
+
+import com.abi.qms.platform.annotation.PassToken;
+import com.abi.qms.platform.dto.req.LoginReq;
+import com.abi.qms.platform.dto.req.ResetPasswordReq;
+import com.abi.qms.platform.dto.req.UpdatePasswordReq;
+import com.abi.qms.platform.dto.res.LoginActivateRes;
+import com.abi.qms.platform.dto.res.LoginRes;
+import com.abi.qms.platform.service.LoginService;
+import com.abi.task.common.api.base.BaseResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+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;
+
+/**
+ * <p>
+ * 登录
+ * </p>
+ *
+ * @author Andy.Tan
+ */
+@Slf4j
+@RestController
+@RequestMapping("wx/login")
+@Api(tags = "登录")
+public class LoginController {
+
+    @Autowired
+    private LoginService loginService;
+
+    @PostMapping("loginActivate")
+    @ApiOperation("登录激活小程序")
+    @PassToken
+    public BaseResponse<LoginActivateRes> loginActivate(@Validated @RequestBody LoginReq req) {
+        LoginActivateRes login = loginService.loginActivate(req);
+        return BaseResponse.create(login);
+    }
+}
+
+
+
+
+
+
+
+

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/wx/WxQrPackageController.java

@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @Slf4j
 @RestController
-@RequestMapping("/wxQrPackage")
+@RequestMapping("wx/qrPackage")
 @Api(tags = "码包管理")
 public class WxQrPackageController {
 

+ 48 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/enums/ActivateMiniAppRoleResourceEnum.java

@@ -0,0 +1,48 @@
+package com.abi.qms.platform.dao.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * 激活小程序权限
+ * @Author AndyTan
+ */
+@Getter
+@AllArgsConstructor
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum ActivateMiniAppRoleResourceEnum {
+
+	//激活小程序权限: 1-主账号 2-子账号
+	MAIN(1,"主账号"),
+	SUB(2,"子账号");
+
+	@EnumValue
+	private Integer code;
+	private String name;
+
+	private static final Set<ActivateMiniAppRoleResourceEnum> ALL = EnumSet.allOf(ActivateMiniAppRoleResourceEnum.class);
+
+    public static String getName(Integer code) {
+        return ALL.stream()
+                .filter(o -> o.code.equals(code))
+                .map(o -> o.getName())
+                .findAny().orElse(null);
+    }
+
+    public static Integer getCode(String name) {
+        return ALL.stream()
+                .filter(o -> o.name.equals(name))
+                .map(o -> o.getCode())
+                .findAny().orElse(null);
+    }
+
+	public boolean is(Integer code){
+		return getCode().equals(code);
+	}
+
+}

+ 4 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/CreateRoleReq.java

@@ -30,4 +30,8 @@ public class CreateRoleReq implements Serializable {
     @ApiModelProperty(value = "资源列表")
     private List<String> resourceCodeList;
 
+    @NotNull
+    @ApiModelProperty(value = "激活小程序资源列表(里面只会有2种code: 1-主账号 2-子账号)")
+    private List<Integer> activateMiniAppResourceCodeList;
+
 }

+ 0 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/LoginReq.java

@@ -23,6 +23,4 @@ public class LoginReq implements Serializable {
   @ApiModelProperty("密码")
   private String password;
 
-
-
 }

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateRoleReq.java

@@ -30,5 +30,8 @@ public class UpdateRoleReq implements Serializable {
   @ApiModelProperty(value = "资源列表")
   private List<String> resourceCodeList;
 
+  @NotNull
+  @ApiModelProperty(value = "激活小程序资源列表(里面只会有2种code: 1-主账号 2-子账号)")
+  private List<Integer> activateMiniAppResourceCodeList;
 
 }

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetRoleInfoRes.java

@@ -35,4 +35,7 @@ public class GetRoleInfoRes implements Serializable {
   @ApiModelProperty("资源code列表")
   List<String> resourceCodeList;
 
+  @ApiModelProperty(value = "激活小程序资源列表(里面只会有2种code: 1-主账号 2-子账号)")
+  private List<Integer> activateMiniAppResourceCodeList;
+
 }

+ 32 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/LoginActivateRes.java

@@ -0,0 +1,32 @@
+package com.abi.qms.platform.dto.res;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author:Andy.Tan
+ * @Description: 登录激活小程序出参
+ */
+@Data
+@ApiModel
+@Builder
+public class LoginActivateRes implements Serializable {
+
+  @ApiModelProperty("token")
+  private String token;
+
+  @ApiModelProperty("id")
+  private Long id;
+
+  @ApiModelProperty("是否主账号 1-是 0-不是(不是主账号就是子账号)")
+  private Integer isMainAccount;
+
+  @ApiModelProperty("啤酒厂id")
+  private Long factoryId;
+
+}

+ 9 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/LoginService.java

@@ -6,6 +6,7 @@ import com.abi.qms.platform.dto.req.LoginReq;
 import com.abi.qms.platform.dto.req.ResetPasswordReq;
 import com.abi.qms.platform.dto.req.TokenReq;
 import com.abi.qms.platform.dto.req.UpdatePasswordReq;
+import com.abi.qms.platform.dto.res.LoginActivateRes;
 import com.abi.qms.platform.dto.res.LoginRes;
 
 /**
@@ -22,7 +23,14 @@ public interface LoginService {
      * @param req
      * @return
      */
-    LoginRes login(LoginReq req);
+    LoginRes loginConsole(LoginReq req);
+
+    /**
+     * 登录激活小程序
+     * @param req
+     * @return
+     */
+    LoginActivateRes loginActivate(LoginReq req);
 
     /**
      *重置密码

+ 9 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/RoleManagerService.java

@@ -2,6 +2,7 @@ package com.abi.qms.platform.service;
 
 
 import com.abi.qms.platform.dao.entity.UserRole;
+import com.abi.qms.platform.dao.entity.UserRoleDetail;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.*;
 
@@ -37,6 +38,14 @@ public interface RoleManagerService {
      */
     GetRoleInfoRes getRoleInfo(GetRoleInfoReq getRoleInfoReq) throws Exception;
 
+    /**
+     * 获取角色明细表信息(不是角色表)
+     * @param roleCode
+     * @return
+     * @throws Exception
+     */
+    UserRoleDetail getRoleDetail(String roleCode);
+
     /**
      * 查询角色列表
      * @param listRoleReq

+ 121 - 24
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/LoginServiceImpl.java

@@ -4,15 +4,20 @@ import cn.hutool.core.util.ObjectUtil;
 import com.abi.base.foundation.util.RedisClient;
 import com.abi.qms.platform.dao.entity.UserInfo;
 import com.abi.qms.platform.dao.entity.UserRole;
+import com.abi.qms.platform.dao.entity.UserRoleDetail;
+import com.abi.qms.platform.dao.enums.FactoryTypeEnum;
+import com.abi.qms.platform.dao.enums.TrueFalseEnum;
 import com.abi.qms.platform.dao.mapper.UserInfoMapper;
 import com.abi.qms.platform.dao.mapper.UserRoleMapper;
 import com.abi.qms.platform.dto.req.LoginReq;
 import com.abi.qms.platform.dto.req.ResetPasswordReq;
 import com.abi.qms.platform.dto.req.TokenReq;
 import com.abi.qms.platform.dto.req.UpdatePasswordReq;
+import com.abi.qms.platform.dto.res.LoginActivateRes;
 import com.abi.qms.platform.dto.res.LoginRes;
 import com.abi.qms.platform.infrastructure.util.UserUtil;
 import com.abi.qms.platform.service.LoginService;
+import com.abi.qms.platform.service.RoleManagerService;
 import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.utils.AESEncodeTwoUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -54,36 +59,128 @@ public class LoginServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> impl
     @Autowired
     private UserUtil userUtil;
 
+    @Autowired
+    private RoleManagerService roleManagerService;
+
+    /**
+     * 登录console
+     * @param req
+     * @return
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public LoginRes login(LoginReq req) {
-        UserInfo one = lambdaQuery().eq(UserInfo::getUserName, req.getUserName().trim()).eq(UserInfo::getPassword, req.getPassword()).eq(UserInfo::getIsEnable, 1).eq(UserInfo::getIsDelete, 0).select(UserInfo::getId).one();
-        if (Objects.nonNull(one)) {
-            UserInfo userInfo = userInfoMapper.selectById(one.getId());
-            QueryWrapper<UserRole> roleQueryWrapper = new QueryWrapper<>();
-            roleQueryWrapper.eq("role_code", userInfo.getRoleCode());
-            roleQueryWrapper.eq("is_delete", 0);
-            UserRole userRole = userRoleMapper.selectOne(roleQueryWrapper);
-            if (Objects.isNull(userRole)) {
-                throw new BusinessException("该用户的角色不存在");
-            }
-            userUtil.setUser(userInfo);
-            String token = getToken(userInfo);
-            String redisTokenKey = MessageFormat.format("{0}:{1}",TOKEN_KEY,token);
-            redisClient.set(redisTokenKey,true,2, TimeUnit.HOURS);
-            redisClient.set(TOKEN_KEY_USER_ID+userInfo.getId(),true,2,TimeUnit.DAYS);
-            LoginRes build = LoginRes.builder()
-                    .token(MessageFormat.format("Bearer {0}",token))
-                    .id(one.getId())
-                    .roleCode(userInfo.getRoleCode())
-                    .factoryId(userInfo.getFactoryId())
-                    .build();
-            return build;
-        } else {
+    public LoginRes loginConsole(LoginReq req) {
+        //1-查询用户并校验
+        UserInfo userInfo = getAndCheckUserByNameAndPasswd(req.getUserName(),req.getPassword());
+        //是否啤酒厂用户
+        if(FactoryTypeEnum.BEER.is(userInfo.getFactoryType())){
+            throw new BusinessException("啤酒厂用户不能登录console");
+        }
+
+        //是否异常数据没有角色
+        QueryWrapper<UserRole> roleQueryWrapper = new QueryWrapper<>();
+        roleQueryWrapper.eq("role_code", userInfo.getRoleCode());
+        roleQueryWrapper.eq("is_delete", 0);
+        UserRole userRole = userRoleMapper.selectOne(roleQueryWrapper);
+        if (Objects.isNull(userRole)) {
+            throw new BusinessException("该用户的角色不存在");
+        }
+
+        //2-存token
+        String token = createToken(userInfo);
+
+        //返回传参
+        LoginRes build = LoginRes.builder()
+                .token(MessageFormat.format("Bearer {0}",token))
+                .id(userInfo.getId())
+                .roleCode(userInfo.getRoleCode())
+                .factoryId(userInfo.getFactoryId())
+                .build();
+
+        return build;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public LoginActivateRes loginActivate(LoginReq req) {
+        //1-查询用户并校验
+        UserInfo userInfo = getAndCheckUserByNameAndPasswd(req.getUserName(),req.getPassword());
+        //是否啤酒厂用户
+        if(!FactoryTypeEnum.BEER.is(userInfo.getFactoryType())){
+            throw new BusinessException("非啤酒厂用户不能登录激活小程序");
+        }
+
+        //是否异常数据没有角色
+        QueryWrapper<UserRole> roleQueryWrapper = new QueryWrapper<>();
+        roleQueryWrapper.eq("role_code", userInfo.getRoleCode());
+        roleQueryWrapper.eq("is_delete", 0);
+        UserRole userRole = userRoleMapper.selectOne(roleQueryWrapper);
+        if (Objects.isNull(userRole)) {
+            throw new BusinessException("该用户的角色不存在");
+        }
+        //查询是否主子账号
+        UserRoleDetail roleDetail = roleManagerService.getRoleDetail(userRole.getRoleCode());
+        if(roleDetail==null
+                ||(!TrueFalseEnum.TRUE.is(roleDetail.getIsActivateMiniAppSubAccount())
+                 &&!TrueFalseEnum.TRUE.is(roleDetail.getIsActivateMiniAppMainAccount()))){
+            throw new BusinessException("该用户的角色不包含登录小程序权限");
+        }
+
+        //是否主账号
+        int isMainAccount = (TrueFalseEnum.TRUE.is(roleDetail.getIsActivateMiniAppMainAccount()))?1:0;
+
+        //2-存token
+        String token = createToken(userInfo);
+
+        //返回传参
+        LoginActivateRes build = LoginActivateRes.builder()
+                .token(MessageFormat.format("Bearer {0}",token))
+                .id(userInfo.getId())
+                .isMainAccount(isMainAccount)
+                .factoryId(userInfo.getFactoryId())
+                .build();
+
+        return build;
+    }
+
+
+    /**
+     * 查询用户并校验
+     * @param userName
+     * @param passWd
+     * @return
+     */
+    private UserInfo getAndCheckUserByNameAndPasswd(String userName,String passWd){
+        UserInfo userInfo = lambdaQuery()
+                .eq(UserInfo::getUserName, userName.trim())
+                .eq(UserInfo::getIsDelete, 0)
+                .select(UserInfo::getId).one();
+
+        //密码校验
+        if(userInfo==null || !passWd.equals(userInfo.getPassword())){
             throw new BusinessException("登录账号或密码错误");
         }
+        //是否启用
+        if(userInfo.getIsEnable()!=1){
+            throw new BusinessException("账号已禁用,请联系管理员");
+        }
+
+        return userInfo;
     }
 
+    /**
+     * 存token
+     * @param userInfo
+     * @return
+     */
+    private String createToken(UserInfo userInfo){
+        String token = getToken(userInfo);
+        String redisTokenKey = MessageFormat.format("{0}:{1}",TOKEN_KEY,token);
+        redisClient.set(redisTokenKey,true,2, TimeUnit.HOURS);
+        redisClient.set(TOKEN_KEY_USER_ID+userInfo.getId(),true,2,TimeUnit.DAYS);
+
+        return token;
+    }
 
     @Override
     public void resetPassword(ResetPasswordReq req) {

+ 72 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/RoleManagerServiceImpl.java

@@ -3,11 +3,11 @@ package com.abi.qms.platform.service.impl;
 import com.abi.qms.platform.dao.entity.UserInfo;
 import com.abi.qms.platform.dao.entity.UserResource;
 import com.abi.qms.platform.dao.entity.UserRole;
+import com.abi.qms.platform.dao.entity.UserRoleDetail;
+import com.abi.qms.platform.dao.enums.ActivateMiniAppRoleResourceEnum;
 import com.abi.qms.platform.dao.enums.RoleLevelEnum;
-import com.abi.qms.platform.dao.mapper.UserInfoMapper;
-import com.abi.qms.platform.dao.mapper.UserMappingRoleResourceMapper;
-import com.abi.qms.platform.dao.mapper.UserResourceMapper;
-import com.abi.qms.platform.dao.mapper.UserRoleMapper;
+import com.abi.qms.platform.dao.enums.TrueFalseEnum;
+import com.abi.qms.platform.dao.mapper.*;
 import com.abi.qms.platform.dao.vo.result.ListRoleVO;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.*;
@@ -20,6 +20,7 @@ import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.models.auth.In;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,9 +54,15 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Autowired
     private UserInfoMapper userInfoMapper;
 
+    @Autowired
+    private UserRoleDetailMapper userRoleDetailMapper;
+
     @Autowired
     private UserUtil userUtil;
 
+    @Autowired
+    private RoleManagerService roleManagerService;
+
     /**
      * 创建角色
      **/
@@ -91,9 +98,51 @@ public class RoleManagerServiceImpl implements RoleManagerService {
 
         //4-放入角色资源mapping
         userResourceService.saveUserResourceMapping(userRole.getRoleCode(),req.getResourceCodeList());
+
+        //5-保存角色detail扩展信息子表(为何设计子表?防止角色过渡臃肿,又必须实现产品提出的特殊需求如小程序主子账号)
+        List<Integer> miniList = req.getActivateMiniAppResourceCodeList();
+        int isMainAccount = miniList.contains(ActivateMiniAppRoleResourceEnum.MAIN.getCode())?1:0;
+        int isSubAccount = miniList.contains(ActivateMiniAppRoleResourceEnum.SUB.getCode())?1:0;
+        saveRoleDetail(userRole.getRoleCode(),isMainAccount,isSubAccount);
+
+    }
+
+    /**
+     * 保存角色明细表
+     * @param roleCode
+     * @param isMainAccount
+     * @param isSubAccount
+     */
+    private void saveRoleDetail(String roleCode,Integer isMainAccount,Integer isSubAccount){
+        //1-查询是否存在detail
+        UserRoleDetail roleDetail = roleManagerService.getRoleDetail(roleCode);
+
+        //2-不存在则新增
+        if(roleDetail==null){
+            roleDetail = new UserRoleDetail();
+            userRoleDetailMapper.insert(roleDetail);
+        }
+
+        //3-修改权限
+        roleDetail.setIsActivateMiniAppMainAccount(isMainAccount);
+        roleDetail.setIsActivateMiniAppSubAccount(isSubAccount);
+        userRoleDetailMapper.updateById(roleDetail);
     }
 
+    /**
+     * 获取角色明细
+     * @param roleCode
+     * @return
+     */
+    @Override
+    public UserRoleDetail getRoleDetail(String roleCode){
+        QueryWrapper<UserRoleDetail> roleDetailQw = new QueryWrapper<>();
+        roleDetailQw.eq("role_code",roleCode);
+        roleDetailQw.eq("is_delete",0);
+        UserRoleDetail roleDetail = userRoleDetailMapper.selectOne(roleDetailQw);
 
+        return roleDetail;
+    }
 
 
     /**
@@ -154,6 +203,12 @@ public class RoleManagerServiceImpl implements RoleManagerService {
 
         //3-放入角色资源mapping
         userResourceService.saveUserResourceMapping(userRole.getRoleCode(),req.getResourceCodeList());
+
+        //4-保存角色明细
+        List<Integer> miniList = req.getActivateMiniAppResourceCodeList();
+        int isMainAccount = miniList.contains(ActivateMiniAppRoleResourceEnum.MAIN.getCode())?1:0;
+        int isSubAccount = miniList.contains(ActivateMiniAppRoleResourceEnum.SUB.getCode())?1:0;
+        saveRoleDetail(userRole.getRoleCode(),isMainAccount,isSubAccount);
     }
 
     /**
@@ -168,9 +223,22 @@ public class RoleManagerServiceImpl implements RoleManagerService {
         //2-角色资源列表(仅最底层那一级别的资源)
         List<String> resourceCodeList = userResourceService.listResourceByRoleCode(userRole.getRoleCode());
 
+        //3-小程序的特殊“资源”列表
+        List<Integer> miniAppResourceCodeList = new ArrayList<>();
+        UserRoleDetail roleDetail = roleManagerService.getRoleDetail(userRole.getRoleCode());
+        if(roleDetail!=null){
+            if(TrueFalseEnum.TRUE.is(roleDetail.getIsActivateMiniAppMainAccount())){
+                miniAppResourceCodeList.add(ActivateMiniAppRoleResourceEnum.MAIN.getCode());
+            }
+            if(TrueFalseEnum.TRUE.is(roleDetail.getIsActivateMiniAppSubAccount())){
+                miniAppResourceCodeList.add(ActivateMiniAppRoleResourceEnum.SUB.getCode());
+            }
+        }
+
         //构造出参
         GetRoleInfoRes res = PojoConverterUtils.copy(userRole,GetRoleInfoRes.class);
         res.setResourceCodeList(resourceCodeList);
+        res.setActivateMiniAppResourceCodeList(miniAppResourceCodeList);
 
         return res;
     }