zero 1 年間 前
コミット
ee1302e174

+ 3 - 102
src/main/java/com/example/xiaoshiweixinback/business/exception/ExceptionEnum.java

@@ -7,111 +7,12 @@ public enum ExceptionEnum {
     SYSTEM_ERROR("999999", "系统异常"),
     PARAMETER_VERIFICATION_ERROR("000001", "数据参数校验异常"),
     PHONE_FORMAT_ERROR("000002","手机号格式错误"),
-    TOKEN_INVALID("000003","token无效"),
-    LANGUAGE_CODE_NULL("000004","languageCode不能为空"),
-    LANGUAGES_CODE_INVALID("000005","languageCode无效"),
-    VERIFICATION_CODE_INVALID("10001","当前验证码失效,请重新获取"),
     CODE_WRONG("10002","验证码错误"),
 
-    EXCEL_READ_ERROR("10016","excel有错误,请先处理"),
-    INIT_GENERICITY_BEAN_ERROR("10003","泛型实例化异常"),
-    THE_PHONE_CANNOT_BE_EMPTY("10004","手机号不能为空"),
-    THE_STUDENT_IS_NOT_EXIST("10005","该学生不存在"),
-    THE_CODE_IS_NOT_NULL("10006","验证码不能为空"),
-    OPERATIONS_ARE_TOO_FREQUENT("10007","操作频繁"),
-    THE_STUDENT_HAS_EXIST("10008","很抱歉,该实名身份已被其他用户关联"),
-    ID_CARD_FORMAT_ERROR("10009","身份证格式错误"),
-    THE_RELATIONSHIP_ALREADY_ASSOCIATED("10010","您的孩子已经和您关联"),
-    DO_NOT_FIT_STUDENT_REQUIRE("10011","很抱歉,您不符合学员要求"),
-    THE_USER_IS_EXIST("10012","该用户已实名"),
-    REAL_NAME_AND_ID_CARD_NOT_MATCH("10013", "实名认证失败,请核对姓名与证件号码"),
-    PLEASE_CONTACT_YOUR_CHILD_FIRST("10014", "请先关联你的孩子"),
-    WX_REQUEST_EXCEPTION("10015","微信请求异常"),
-    WX_OPEN_ID_TOKEN_NOT_VALID("10016","openIdToken无效"),
-
-
-    USER_NOT_REAL_NAME("10020","未实名用户无法查看订单"),
-    TOURIST_DOES_NOT_HAVE_ORDER("10021","游客无法查看订单"),
-
-
-    /*海外学校端 400000-600000*/
-    SCHOOL_ACCOUNT_NOT_EXIST("400001","账号不存在"),
-    SCHOOL_PASSWORD_INVALID("400002","密码错误"),
-
-    /*后台管理  600000-900000*/
-    SYNC_HRS7_ERROR("600001","连接其他业务系统失败"),
-    REQUEST_WAS_ABORTED("600002","请求失败"),
-    THE_STUDENT_IS_EXIST("600003","该学员已存在"),
-    THE_RECORD_METHOD_MUST_TO_BE_MANUAL("600004", "记录方式必须为手工记录"),
-    THE_CUSTODIAN_HAS_RELATED_USER("600005", "该家长已经关联过用户,不可重复"),
-    THE_CUSTODIAN_HAS_EXISTED("600005", "家长已存在"),
-    PROPERTY_VALUE_ALREADY_EXIST("600006","可选项已存在"),
-    MANAGE_USER_EXIST("600007","手机号已经存在"),
-    MANAGE_POSITION_CODE_EXIST("600008","职位code已经存在"),
-    MANAGE_POSITION_EXIST("600009","职位已经存在"),
-    MANAGE_ROLE_EXIST("600009","角色已经存在"),
-    MANAGE_ROLE_CODE_EXIST("600010","角色code已经存在"),
-    MANAGE_RESOURCE_CODE_EXIST("600011","权限code已经存在"),
-    MANAGE_MENU_LIMIT("600012","菜单层级超出限制"),
-    MANAGE_RESOURCE_HAVE_CHILD("600013","资源存在子级资源,无法删除"),
-    MANAGE_USER_ACCOUNT_NOT_EXIST("600014","账号不存在"),
-    MANAGE_USER_FORBIDDEN("600015","账号已被封禁"),
-    MANAGE_USER_PASSWORD_ERROR("600016","密码错误"),
-    ACCOUNT_NOT_EXIST("600014", "账号不存在,请联系管理员开通账号"),
-    //产品相关
-    PRODUCT_DOES_NOT_HAVE_FAT_NODE("600050", "产品未配置流程大节点"),
-    PRODUCT_DOES_NOT_HAVE_SMALL_NODE("600051", "产品未配置流程小节点"),
-    SMALL_NODE_NOT_EXIST("600052", "节点不存在"),
-    ORDER_DOES_NOT_HAVE_NODE("600053", "订单没有节点"),
-    ORDER_NOT_EXIST("600054", "订单不存在"),
-    PAY_CAN_NOT_CLOSE("600055", "缴费单无法关闭,请检查缴费单状态"),
-    AMOUNT_CAN_NOT_LESS_THAN_ZERO("600056", "金额不可小于0"),
-    ORDER_TREATY_REAPEATABLE_INITIATE("600057","同类型合同不可重复发起"),
-    TREATY_ALREADY_SIGNED("600058","合同未签订,不可审核"),
-    TREATY_ALREADY_PASS("600059","合同已经审核,不可取消"),
-    TREATY_NOT_EXIST("600060","合同不存在"),
-    APP_NEWS_NOT_EXIST("600061","app信息不存在"),
-    PROCESS_NOT_EXIST("600062","流程不存在"),
-    PROCESS_IS_OVER("600063","流程已结束"),
-    PROCESS_CAN_NOT_RETURN_BACK("600064","流程不可回退到指定节点"),
-    NODE_CAN_NOT_REFUSE("600065","节点不可驳回"),
-    PROCESS_PARAM_NOT_VALID("600066","发起流程参数无效"),
-    DATA_NOT_ALL_COMPLETE("600067","有资料未确认,无法通过流程"),
-    REPEATED_INITIATION("600068","请勿重复发起流程"),
-    ORDER_CANT_CANCEL("600069","存在未完成缴费单或者未完成流程,订单不可关闭"),
-    POPUP_ALREADY_EXIST("600070","弹窗已经存在"),
-    STUDENT_STATUS_CANT_CHANGE("600071","学员状态不可更改"),
-    STUDENT_ORDER_REPEAT("600072","请勿重复添加同一订单"),
-    ROOT_ALREADY_EXIST("600073","服务机构下已有管理员"),
-    PHONE_ALREADY_EXIST("600074","手机号重复"),
-
-    /*文件服务*/
-    UPLOAD_IMAGE_TYPE_ERROR("900010","上传图片格式错误!"),
-    FILE_TOO_BIG("900011","上传文件大小不能超过100M"),
-    FILE_NO_HAVE_NAME("900012","未传文件名或文件名为空"),
-    REMOTE_FILE_READ_ERROR("900020","远程文件读取失败"),
 
-    /*海外用工端*/
-    ENTERPRISE_ACCOUNT_NOT_EXIST("700001","账号不存在"),
-    ENTERPRISE_PASSWORD_INVALID("700002","密码错误"),
-    WX_APPLY_ACCESS_TOKEN_ERROR("800001", "获取微信token失败"),
-    WX_PHONE_REQUIRE_ERROR("800001", "获取手机号失败"),
-
-    ALREADY_REAL_NAMED("1000001", "用户已实名,无法获取此积分"),
-    HAS_CONSULT_WITH_VOCATION_TEACHER_JOB("1000002", "已经咨询过职业导师"),
-    POINT_JOB_NOT_EXISTS("1000003", "积分任务不存在"),
-
-
-    /*学员池*/
-    STUDENT_POOL_ALREADY_EXISTS("1000004", "学员池已存在"),
-    STUDENT_IMPORT_FILE_HAS_NO_DATA("1000005", "文件无数据"),
-    TEMPLATE_FILE_FORMAT_ERROR("1000006", "文件格式错误"),
-    CANT_IMPORT_EMPTY("1000007", "不能导入空文件"),
-
-    /*服务机构*/
-    SERVICE_ORG_ALREADY_EXISTS("2000001", "服务机构已存在"),
-
-    CRM_USER_DO_NOT_LOGIN("2000021", "CRM用户未登录");
+    INIT_GENERICITY_BEAN_ERROR("10003","泛型实例化异常"),
+    THE_PHONE_CANNOT_BE_EXIST("10004","手机号已存在"),
+    THE_CODE_IS_NOT_NULL("10006","验证码不能为空");
 
     private String code;// 异常代码
     private String message;// 异常信息

+ 2 - 0
src/main/java/com/example/xiaoshiweixinback/domain/Person.java

@@ -66,4 +66,6 @@ public class Person extends BaseEntity<Person> {
      */
     private Date createTime;
 
+    private String openId;
+
 }

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/entity/vo/person/LoginByWxVO.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 @Data
 public class LoginByWxVO {
+    private Integer id;
 
     private String userName;
 
@@ -21,5 +22,5 @@ public class LoginByWxVO {
 
     private String token;
 
-    private Boolean ifFirst;
+    private Boolean ifFirst = false;
 }

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/entity/vo/person/LoginVO.java

@@ -20,5 +20,5 @@ public class LoginVO {
 
     private String token;
 
-    private Boolean ifFirst;
+    private Boolean ifFirst = false;
 }

+ 60 - 24
src/main/java/com/example/xiaoshiweixinback/service/LoginService.java

@@ -5,6 +5,7 @@ import cn.hutool.captcha.CaptchaUtil;
 import cn.hutool.captcha.CircleCaptcha;
 import cn.hutool.core.img.ImgUtil;
 import cn.hutool.crypto.SecureUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.example.xiaoshiweixinback.business.common.Response;
 import com.example.xiaoshiweixinback.business.common.base.RedisConf;
@@ -64,7 +65,12 @@ public class LoginService {
             if (ToolUtil.isEmpty(codeObj)) {
                 throw new BusinessException(ExceptionEnum.CODE_WRONG);
             }
+
             //校验验证码
+            if (ToolUtil.isEmpty(dto.getPhoneCode())) {
+                throw new BusinessException(ExceptionEnum.THE_CODE_IS_NOT_NULL);
+            }
+
             if (!ToolUtil.equals(codeObj.toString(), dto.getPhoneCode())) {
                 throw new BusinessException(ExceptionEnum.CODE_WRONG);
             }
@@ -92,6 +98,7 @@ public class LoginService {
 
             loginVO.setId(person.getId());
             loginVO.setPhone(person.getPhoneNum());
+            loginVO.setIfFirst(true);
         } else {
             BeanUtil.copy(person, loginVO);
         }
@@ -112,6 +119,9 @@ public class LoginService {
      */
     public LoginByWxVO loginByWeChat(LoginByWxDTO wxDTO) throws Exception {
         String code = wxDTO.getCode();
+        String encryptedData = wxDTO.getEncryptedData();
+        String iv = wxDTO.getIv();
+
         //返回数据
         LoginByWxVO wxVO = new LoginByWxVO();
         String appId = environment.getProperty("weChat.appId");
@@ -125,35 +135,53 @@ public class LoginService {
         String result = RequestManager.getInstance().requestPostBySynWithForm("https://api.weixin.qq.com/sns/jscode2session", map);
         Jscode2SessionWo jscode2SessionWo = ResponseManager.parseObject(result, Jscode2SessionWo.class);
         if (ToolUtil.isNotEmpty(jscode2SessionWo)) {
-            //2.查询数据表
-//            personMapper.selectOne(new LambdaQueryWrapper<Person>()
-//            .eq(Person::getPhoneNum,))
-            if (ToolUtil.isNotEmpty("")) {
-//                wxLoginDTO.setOpenId();
-                wxVO.setToken(this.getToken());
-            } else {
-                // 3. 解密用户数据
-//                String decryptedData = decrypt(encryptedData, jscode2SessionWo.getSession_key(), iv);
+            // 2. 解密用户数据
+            String decryptedData = decrypt(encryptedData, jscode2SessionWo.getSession_key(), iv);
 
-                // 4. 获取用户手机号(需要用户授权)
-                String phoneNumber = "";
-//                JSONObject userData = JSONObject.parseObject(decryptedData);
-//                if (ToolUtil.isNotEmpty(userData) && userData.containsKey("purePhoneNumber")) {
-//                    phoneNumber = userData.getString("purePhoneNumber");
-//                }
+            // 3. 获取用户手机号(需要用户授权)
+            String phoneNumber = "";
+            String name = "";
+            String fileGuid = "";
+            JSONObject userData = JSONObject.parseObject(decryptedData);
+            if (ToolUtil.isNotEmpty(userData) && userData.containsKey("purePhoneNumber")) {
+                phoneNumber = userData.getString("purePhoneNumber");
+            }
+            if (ToolUtil.isNotEmpty(userData) && userData.containsKey("nickname")) {
+                name = userData.getString("nickname");
+            }
+            if (ToolUtil.isNotEmpty(userData) && userData.containsKey("avatarUrl")) {
+                fileGuid = userData.getString("avatarUrl");
+            }
 
-                if (jscode2SessionWo.getOpenid() != null) {
-                    //添加用户表中
-                    wxVO.setOpenId(jscode2SessionWo.getOpenid());
-                    wxVO.setToken(this.getToken());
+            // 4.查询数据表
+            Person person = personMapper.selectOne(new LambdaQueryWrapper<Person>()
+                    .eq(Person::getOpenId, jscode2SessionWo.getOpenid()));
+            if (ToolUtil.isNotEmpty(person)) {
+                BeanUtil.copy(person,wxVO);
+            } else {
+                //添加用户表中
+                person = personMapper.selectOne(new LambdaQueryWrapper<Person>()
+                        .eq(Person::getPhoneNum, phoneNumber));
+                if (ToolUtil.isNotEmpty(person)) {
+                    person.setOpenId(jscode2SessionWo.getOpenid());
+                    person.updateById();
                 } else {
-                    throw new BusinessException(ExceptionEnum.SYSTEM_ERROR);
+                    person = new Person();
+                    person.setName(name);
+                    person.setFileGuid(fileGuid);
+                    person.setPhoneNum(phoneNumber);
+                    person.setOpenId(jscode2SessionWo.getOpenid());
+                    person.insert();
+
+                    wxVO.setIfFirst(true);
                 }
+                wxVO.setOpenId(jscode2SessionWo.getOpenid());
+                wxVO.setPhone(phoneNumber);
+                wxVO.setName(name);
+                wxVO.setFileGuid(fileGuid);
             }
-        }
-
-        if (ToolUtil.isNotEmpty(wxVO.getOpenId())) {
-
+            wxVO.setToken(this.getToken());
+            redisService.set(AppCacheKeyUtil.getUserIdToken(wxVO.getId()),wxVO.getToken());
         }
         return wxVO;
     }
@@ -204,6 +232,14 @@ public class LoginService {
         if (!RegexUtil.isPhoneLegal(vo.getPhoneNum())) {
             throw new BusinessException(ExceptionEnum.PHONE_FORMAT_ERROR);
         }
+        long count = personMapper.selectCount(new LambdaQueryWrapper<Person>()
+                .eq(Person::getPhoneNum, vo.getPhoneNum()));
+        if (count > 0) {
+            throw new BusinessException(ExceptionEnum.THE_PHONE_CANNOT_BE_EXIST);
+        }
+        Person person = personMapper.selectById(vo.getId());
+        BeanUtil.copy(vo, person);
+        person.updateById();
         return true;
     }
 

+ 5 - 1
src/main/resources/application-dev.yml

@@ -67,4 +67,8 @@ PCSUrl: http://localhost:8871
 OPSUrl: http://139.224.24.90:5001
 PASUrl: http://localhost:8877
 FMSUrl: http://localhost:8801
-FileSource: 1
+FileSource: 1
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537

+ 5 - 1
src/main/resources/application-dev1.yml

@@ -67,4 +67,8 @@ PCSUrl: http://localhost:8871
 OPSUrl: http://139.224.24.90:5001
 PASUrl: http://localhost:8877
 FMSUrl: http://localhost:8801
-FileSource: 3
+FileSource: 3
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537

+ 5 - 1
src/main/resources/application-prodNetIn.yml

@@ -33,4 +33,8 @@ OPSUrl: http://139.224.24.90:5001
 PASUrl: http://localhost:8877
 RMSUrl: http://localhost:8872
 FMSUrl: http://localhost:8801
-FileSource: 3
+FileSource: 3
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537

+ 5 - 1
src/main/resources/application-prodNetOut.yml

@@ -31,4 +31,8 @@ OPSUrl: http://139.224.24.90:5001
 PASUrl: http://localhost:8877
 RMSUrl: http://localhost:8872
 FMSUrl: http://localhost:8801
-FileSource: 3
+FileSource: 3
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537

+ 5 - 1
src/main/resources/application-testNetIn.yml

@@ -67,4 +67,8 @@ PCSUrl: http://localhost:8880
 OPSUrl: http://139.224.24.90:5001
 PASUrl: http://localhost:8880
 FMSUrl: http://localhost:8885
-FileSource: 3
+FileSource: 3
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537

+ 5 - 1
src/main/resources/application-testNetOut.yml

@@ -23,4 +23,8 @@ spring:
         login-password: 123456
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
-authorUrl: http://localhost:8871
+authorUrl: http://localhost:8871
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537

+ 4 - 0
src/main/resources/application.yml

@@ -46,3 +46,7 @@ mybatis-plus:
     cache-enabled: false
   mapper-locations: classpath:mapper/*.xml
 queueName: emailProd.queue
+
+WeChat:
+  appId: wxaefb842bd0b93ff0
+  appSecret: 89fe0fb96472548d48f63b2f5c956537