zero 11 maanden geleden
bovenliggende
commit
80cbf516c3

+ 8 - 5
PCS/src/main/java/cn/cslg/permission/common/GlobalException.java

@@ -6,6 +6,7 @@ import cn.cslg.permission.common.utils.ResponseEnum;
 import cn.cslg.permission.exception.XiaoShiException;
 import cn.dev33.satoken.exception.NotLoginException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
@@ -35,10 +36,12 @@ public class GlobalException {
 
     //小世异常
     @ExceptionHandler
-    public Response handlerXiaoShiException(XiaoShiException e) {
-        log.info("全局异常处理机制捕获到XiaoShiException,异常信息提示为:{}", e.getMessage());
-        return Response.fail(e.getMessage());
-
+    public String handlerXiaoShiException(XiaoShiException e) {
+        log.info("全局异常处理机制捕获到XiaoShiException,异常信息提示为:{}", e.getErrorCode() + "--" + e.getMessage());
+        if (StringUtils.isNotEmpty(e.getErrorCode())) {
+            return Response.error(Integer.parseInt(e.getErrorCode()), e.getErrorMessage());
+        } else {
+            return Response.error(e.getMessage());
+        }
     }
-
 }

+ 3 - 1
PCS/src/main/java/cn/cslg/permission/common/core/exception/GlobalExceptionHandler.java

@@ -2,9 +2,11 @@ package cn.cslg.permission.common.core.exception;
 
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.exception.XiaoShiException;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
 
 @ControllerAdvice
 public class GlobalExceptionHandler {
@@ -13,7 +15,7 @@ public class GlobalExceptionHandler {
     @ResponseBody
     public String  handleAllExceptions(XiaoShiException ex) {
         // 返回一个包含错误信息的 HTTP 响应
-        return Response.error(ex.getErrorCode(), ex.getErrorMessage());
+        return Response.error(Integer.parseInt(ex.getErrorCode()), ex.getErrorMessage());
     }
 
 }

+ 8 - 0
PCS/src/main/java/cn/cslg/permission/common/utils/Response.java

@@ -74,6 +74,14 @@ public class Response {
         return JsonUtils.objectToJson(response);
     }
 
+    public static String error(Integer code, String message) {
+        Response response = new Response();
+        response.setCode(code);
+        response.setData(Boolean.FALSE);
+        response.setMessage(message);
+        return JsonUtils.objectToJson(response);
+    }
+
     public Response(Integer code, String message) {
         this.code = code;
         this.message = message;

+ 6 - 2
PCS/src/main/java/cn/cslg/permission/controller/LoginController.java

@@ -6,9 +6,11 @@ import cn.cslg.permission.common.model.dto.EncryptionLoginDTO;
 import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
 import cn.cslg.permission.common.model.dto.SendCodeDTO;
 import cn.cslg.permission.common.model.vo.LoginVO;
+import cn.cslg.permission.common.model.vo.PhoneLoginVO;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.auth.checkAuth;
 import cn.cslg.permission.domain.ReSetPasswordDTO;
+import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.service.LoginService;
 import cn.dev33.satoken.stp.StpUtil;
 import io.swagger.v3.oas.annotations.Operation;
@@ -90,12 +92,14 @@ public class LoginController {
     @Operation(summary = "获取手机验证码")
     @PostMapping("/getPhoneCode")
     public String getPhoneCode(@RequestBody @Valid SendCodeDTO vo) {
-        return loginService.getPhoneCode(vo);
+        String result = loginService.getPhoneCode(vo);
+        return Response.success(result);
     }
 
     @Operation(summary = "手机号登录")
     @PostMapping(value = "/loginByPhone")
     public String loginByPhone(@Valid @RequestBody PhoneLoginDTO vo) throws Exception {
-        return loginService.loginByPhone(vo);
+        PhoneLoginVO loginVO = loginService.loginByPhone(vo);
+        return Response.success(loginVO);
     }
 }

+ 13 - 0
PCS/src/main/java/cn/cslg/permission/exception/ExceptionEnum.java

@@ -9,6 +9,19 @@ public enum ExceptionEnum {
     LOGIN_PASWORD_MISTAKE("403","密码错误"),
     LOGIN_ERROR("405","登录错误"),
     LOGIN_INVITE_ERROR("406","邀请码错误"),
+    THE_TOKEN_IS_INVALID("407", "token失效"),
+    THE_REQUEST_TIME_OVERTIME("408", "请求时间超时"),
+    THE_SIGN_IS_NOT_SAME("408", "请求SIGN不一致,重新检查"),
+    THE_MACHINE_CODE_IS_NULL("409", "机器码不可为空"),
+    DO_NOT_LOG_IN_TO_MORE_THAN_TWO_NEW_MACHINES_WITH_THE_SAME_ACCOUNT("410", "同一账号新机登录不可超过两个"),
+    THE_PHONE_FORMAT_ERROR("411","手机号格式错误"),
+    THE_PHONE_IS_NOT_EMPTY("412","手机号不可为空"),
+    THE_PHONE_CODE_IS_INVALID("413","手机验证码失效"),
+    THE_PHONE_CODE_IS_NOT_NULL("414","手机验证码不可为空"),
+    THE_PHONE_CODE_IS_INCONFORMITY("415","验证码不一致"),
+    THE_PERSONNEL_IS_NOT_EXIST("416","用户不存在"),
+    THE_PERSONNEL_IS_FORBIDDEN("417","该用户不可用"),
+    THE_VERSION_IS_NULL("418", "版本号不可为空"),
 
     PERMISSION_ERROR("601","无权限"),
     PERMISSION_NO_VIP("606","未开会员"),

+ 6 - 0
PCS/src/main/java/cn/cslg/permission/exception/XiaoShiException.java

@@ -20,6 +20,12 @@ public class XiaoShiException extends RuntimeException {
         this.errorMessage = errorMessage;
     }
 
+    public XiaoShiException(ExceptionEnum e) {
+        super(e.getMessage());
+        this.errorMessage = e.getMessage();
+        this.errorCode = e.getCode();
+    }
+
 
     public String getErrorCode() {
         return errorCode;

+ 22 - 20
PCS/src/main/java/cn/cslg/permission/service/LoginService.java

@@ -16,6 +16,8 @@ import cn.cslg.permission.domain.ReSetPasswordDTO;
 import cn.cslg.permission.domain.Tenant;
 import cn.cslg.permission.domain.associate.AssoFunctionModule;
 import cn.cslg.permission.domain.associate.AssoPersonnelMachine;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.FunctionMapper;
 import cn.cslg.permission.mapper.PersonnelMapper;
 import cn.cslg.permission.mapper.associate.AssoFunctionModuleMapper;
@@ -360,15 +362,15 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         long currentTimeSecond = System.currentTimeMillis() / 1000;
         final long second = currentTimeSecond - currentTimeMillis;
         if (second > 30) {
-            return Response.error(ResponseEnum.THE_REQUEST_TIME_OVERTIME);
+            throw new XiaoShiException(ExceptionEnum.THE_REQUEST_TIME_OVERTIME);
         }
         String appSecret = appKey + currentTimeMillis;
         String md5Sign = SecureUtil.md5(appSecret);
         if (Boolean.TRUE.equals(StringUtils.isEmpty(sign)) || !sign.equals(md5Sign)) {
-            return Response.error(ResponseEnum.THE_SIGN_IS_NOT_SAME);
+            throw new XiaoShiException(ExceptionEnum.THE_SIGN_IS_NOT_SAME);
         }
         if (Boolean.TRUE.equals(StringUtils.isEmpty(machineCode))) {
-            return Response.error(ResponseEnum.THE_MACHINE_CODE_IS_NULL);
+            throw new XiaoShiException(ExceptionEnum.THE_MACHINE_CODE_IS_NULL);
         }
         //用用户名查询人员信息
         LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
@@ -378,16 +380,16 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         final Integer personId = personnel.getId();
         //如果查不到 报错 用户名不存在
         if (ObjectUtils.isEmpty(personnel)) {
-            return Response.error(ResponseEnum.USERNAME_ERROR);
+            throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_NOT_EXIST);
         }
         if (personnel.getPersonnelStatus().equals(0)) {
-            return Response.error(ResponseEnum.THE_PERSONNEL_IS_FORBIDDEN);
+            throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_FORBIDDEN);
         }
         //校验密码是否正确
         boolean isPassword = personnel.getPersonnelPassword().equals(SecureUtil.md5(password));
         if (!isPassword) {
             //登录日志记录登录是否成功
-            return Response.error(ResponseEnum.PASSWORD_ERROR);
+            throw new XiaoShiException(ExceptionEnum.LOGIN_PASWORD_MISTAKE);
         }
         //人员信息中私钥或公钥为空则添加进去
         updatePersonnel(personnel.getPrivateKey(), personnel.getPublicKey(), personnel.getSymmetryKey(), personId);
@@ -397,7 +399,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
                 .eq(AssoPersonnelMachine::getPersonnelId, personId)
                 .ne(AssoPersonnelMachine::getMachineCode, SecureUtil.md5(machineCode)));
         if (machineList.size() > 1) {
-            return Response.error(ResponseEnum.DO_NOT_LOG_IN_TO_MORE_THAN_TWO_NEW_MACHINES_WITH_THE_SAME_ACCOUNT);
+            throw new XiaoShiException(ExceptionEnum.DO_NOT_LOG_IN_TO_MORE_THAN_TWO_NEW_MACHINES_WITH_THE_SAME_ACCOUNT);
         }
         boolean flag = addOrUpdatePersonnelMachine(machineCode, personnel);
         EncryptionLoginVO loginVO = new EncryptionLoginVO();
@@ -556,10 +558,10 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
     public String getPhoneCode(SendCodeDTO vo) {
         String res = "发送验证码失败";
         if (Boolean.TRUE.equals(StringUtils.isEmpty(vo.getPhoneNum()))) {
-            return Response.error(ResponseEnum.THE_PHONE_IS_NOT_EMPTY);
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_IS_NOT_EMPTY);
         }
         if (!RegexUtil.isPhoneLegal(vo.getPhoneNum())) {
-            return Response.error(ResponseEnum.THE_PHONE_FORMAT_ERROR);
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_FORMAT_ERROR);
         }
         if (StringUtils.isNotEmpty(vo.getPhoneNum())) {
             //生成验证码
@@ -581,7 +583,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
      * @return
      */
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public String loginByPhone(PhoneLoginDTO dto) throws Exception {
+    public PhoneLoginVO loginByPhone(PhoneLoginDTO dto) throws Exception {
         String machineCode = dto.getMachineCode();
         final String sign = dto.getSign();
         final String appKey = dto.getAppKey();
@@ -589,29 +591,29 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         long currentTimeSecond = System.currentTimeMillis() / 1000;
         final long second = currentTimeSecond - currentTimeMillis;
         if (second > 30) {
-            return Response.error(ResponseEnum.THE_REQUEST_TIME_OVERTIME);
+            throw new XiaoShiException(ExceptionEnum.THE_REQUEST_TIME_OVERTIME);
         }
         String appSecret = appKey + currentTimeMillis;
         String md5Sign = SecureUtil.md5(appSecret);
         if (Boolean.TRUE.equals(StringUtils.isEmpty(sign)) || !sign.equals(md5Sign)) {
-            return Response.error(ResponseEnum.THE_SIGN_IS_NOT_SAME);
+            throw new XiaoShiException(ExceptionEnum.THE_SIGN_IS_NOT_SAME);
         }
         if (Boolean.TRUE.equals(StringUtils.isEmpty(machineCode))) {
-            return Response.error(ResponseEnum.THE_MACHINE_CODE_IS_NULL);
+            throw new XiaoShiException(ExceptionEnum.THE_MACHINE_CODE_IS_NULL);
         }
         //获取缓存中验证码
         String code = redisUtil.get(LoginCacheKeyUtil.getLoginCaptcha(dto.getPhoneNum()));
         if (Boolean.TRUE.equals(StringUtils.isEmpty(code))) {
-            return Response.error(ResponseEnum.THE_PHONE_CODE_IS_INVALID);
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_CODE_IS_INVALID);
         }
 
         //校验验证码
         if (Boolean.TRUE.equals(StringUtils.isEmpty(dto.getPhoneCode()))) {
-            return Response.error(ResponseEnum.THE_PHONE_CODE_IS_NOT_NULL);
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_CODE_IS_NOT_NULL);
         }
 
         if (!org.apache.commons.lang3.StringUtils.equals(code, dto.getPhoneCode())) {
-            return Response.error(ResponseEnum.THE_PHONE_CODE_IS_INCONFORMITY);
+            throw new XiaoShiException(ExceptionEnum.THE_PHONE_CODE_IS_INCONFORMITY);
         }
         //校验验证码成功后使其失效
         redisUtil.delete(LoginCacheKeyUtil.getLoginCaptcha(dto.getPhoneNum()));
@@ -622,10 +624,10 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         }
         Personnel person = personnelMapper.selectOne(queryWrapper);
         if (org.apache.commons.lang3.ObjectUtils.isEmpty(person)) {
-            return Response.error(ResponseEnum.THE_PERSONNEL_IS_NOT_EXIST);
+            throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_NOT_EXIST);
         }
         if (person.getPersonnelStatus().equals(0)) {
-            return Response.error(ResponseEnum.THE_PERSONNEL_IS_FORBIDDEN);
+            throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_FORBIDDEN);
         }
         //人员信息中私钥或公钥为空则添加进去
         this.updatePersonnel(person.getPrivateKey(), person.getPublicKey(), person.getSymmetryKey(), person.getId());
@@ -634,7 +636,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
                 .eq(AssoPersonnelMachine::getPersonnelId, person.getId())
                 .ne(AssoPersonnelMachine::getMachineCode, SecureUtil.md5(machineCode)));
         if (machineList.size() > 1) {
-            return Response.error(ResponseEnum.DO_NOT_LOG_IN_TO_MORE_THAN_TWO_NEW_MACHINES_WITH_THE_SAME_ACCOUNT);
+            throw new XiaoShiException(ExceptionEnum.DO_NOT_LOG_IN_TO_MORE_THAN_TWO_NEW_MACHINES_WITH_THE_SAME_ACCOUNT);
         }
         addOrUpdatePersonnelMachine(machineCode, person);
         PhoneLoginVO loginVO = new PhoneLoginVO();
@@ -648,6 +650,6 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         //Sa-token 登录方法 登录后 生成Token 如果集成了Redis的话 会自动存入Redis
         StpUtil.login(person.getId());
         loginVO.setToken(StpUtil.getTokenValue());
-        return Response.success(loginVO);
+        return loginVO;
     }
 }

+ 5 - 4
PCS/src/test/java/cn/cslg/permission/EncryptionPersonTest.java

@@ -6,6 +6,7 @@ import cn.cslg.permission.common.model.dto.EncryptionLoginDTO;
 import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
 import cn.cslg.permission.common.model.dto.SendCodeDTO;
 import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.vo.PhoneLoginVO;
 import cn.cslg.permission.common.utils.RSAUtils;
 import cn.cslg.permission.service.LoginService;
 import cn.cslg.permission.service.PersonnelService;
@@ -90,7 +91,7 @@ public class EncryptionPersonTest {
     @Test
     public void getPhoneCode() {
         SendCodeDTO vo = new SendCodeDTO();
-        vo.setPhoneNum("15705220533");
+        vo.setPhoneNum("157052205331");
         String s = loginService.getPhoneCode(vo);
         System.out.println(s);
     }
@@ -99,7 +100,7 @@ public class EncryptionPersonTest {
     public void loginByPhone() throws Exception {
         PhoneLoginDTO vo = new PhoneLoginDTO();
         vo.setPhoneNum("15705220533");
-        vo.setPhoneCode("687897");
+        vo.setPhoneCode("948573");
         vo.setAppKey("4e95e3d926a2a4befa5d913acc0aa9f5");
         vo.setMachineCode("BFEBFBFF000A0654");
         final long timeMillis = System.currentTimeMillis();
@@ -107,7 +108,7 @@ public class EncryptionPersonTest {
         String appSecret = vo.getAppKey() + timeMillis / 1000;
         String md5Sign = SecureUtil.md5(appSecret);
         vo.setSign(md5Sign);
-        final String login = loginService.loginByPhone(vo);
-        System.out.println(login);
+        PhoneLoginVO loginVO = loginService.loginByPhone(vo);
+        System.out.println(loginVO);
     }
 }

+ 53 - 0
PCS/src/test/java/cn/cslg/permission/WritingAidTest.java

@@ -1,7 +1,10 @@
 package cn.cslg.permission;
 
 import cn.cslg.permission.common.model.dto.EncryptionLoginDTO;
+import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
+import cn.cslg.permission.common.model.dto.SendCodeDTO;
 import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.vo.PhoneLoginVO;
 import cn.hutool.crypto.SecureUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
@@ -97,4 +100,54 @@ public class WritingAidTest {
         String res = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
         System.out.println(res);
     }
+
+    @Test
+    public void getPhoneCodePCSTest2() throws IOException {
+        SendCodeDTO vo = new SendCodeDTO();
+        vo.setPhoneNum("15705220533");
+        String param = new Gson().toJson(vo);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url("http://47.116.194.135:8085" + "/api/permission/api/admin/getPhoneCode")
+                .post(requestBody)
+                .build();
+        String res = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+        System.out.println(res);
+    }
+
+    @Test
+    public void loginByPhonePCSTest2() throws IOException {
+        String appKey = "4e95e3d926a2a4befa5d913acc0aa9f5";
+        PhoneLoginDTO vo = new PhoneLoginDTO();
+        vo.setAppKey(appKey);
+        vo.setPhoneNum("15705220533");
+        vo.setPhoneCode("");
+        vo.setMachineCode("BFEBFBFF000A0654");
+        long currentTimeMillis = System.currentTimeMillis();
+        vo.setCurrentTimeMillis(currentTimeMillis);
+        String appSecret = appKey + currentTimeMillis / 1000;
+        //md5加密标识
+        String md5Sign = SecureUtil.md5(appSecret);
+        vo.setSign(md5Sign);
+        String param = new Gson().toJson(vo);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url("http://47.116.194.135:8085" + "/api/permission/api/admin/loginByPhone")
+                .post(requestBody)
+                .build();
+        String res = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+        System.out.println(res);
+        final PhoneLoginVO loginVO = com.alibaba.fastjson2.JSONObject.parseObject(res, PhoneLoginVO.class);
+        System.out.println(loginVO);
+    }
 }