Bläddra i källkod

微信绑定用户重构

大数据与最优化研究所 8 månader sedan
förälder
incheckning
dcd75701cc

+ 1 - 1
src/main/java/com/xjrsoft/module/oa/controller/NewsController.java

@@ -81,7 +81,7 @@ public class NewsController {
 
     @GetMapping("/manage-box")
     @ApiOperation(value = "获取管理新闻分页")
-    @XjrLog(value = "获取管理新闻分页")
+    @XjrLog(value = "获取管理新闻分页", saveRequestData = false)
     public RT<PageOutput<NewsPageVo>> manageBox(NewsPageDto dto) {
         IPage<NewsPageVo> page = newsService.manageBox(dto);
         PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);

+ 11 - 4
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -716,18 +716,25 @@ public class UserController {
         return R.error("该用户不存在!");
     }
 
+//    @PostMapping("/bind-openid")
+//    @ApiOperation(value = "绑定微信 Openid")
+//    @XjrLog(value = "绑定微信 Openid", saveResponseData = true)
+//    public R bindOpenid(@RequestBody BindOpenidDto dto) {
+//        return R.ok(userService.bindOpenid(dto));
+//    }
+
     @PostMapping("/bind-openid")
     @ApiOperation(value = "绑定微信 Openid")
     @XjrLog(value = "绑定微信 Openid", saveResponseData = true)
-    public R bindOpenid(@RequestBody BindOpenidDto dto) {
-        return R.ok(userService.bindOpenid(dto));
+    public RT<BindOpenidVo> bindOpenid(@RequestBody BindOpenidDto dto) {
+        return RT.ok(userService.bindOpenid(dto));
     }
 
     @GetMapping("/unbind-openid")
     @ApiOperation(value = "取消绑定微信 UnionId")
     @XjrLog(value = "取消绑定微信 UnionId", saveResponseData = true)
-    public R unbindOpenid(@RequestParam Long id) {
-        return R.ok(userService.unbindOpenid(id));
+    public R unbindOpenid(@RequestParam UnbindOpenidDto dto) {
+        return R.ok(userService.unbindOpenid(dto));
     }
 
     @PostMapping("/register")

+ 17 - 0
src/main/java/com/xjrsoft/module/organization/dto/UnbindOpenidDto.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.organization.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class UnbindOpenidDto {
+
+    private Long id;
+
+    private String openid;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    private String code;
+}

+ 4 - 2
src/main/java/com/xjrsoft/module/organization/service/IUserService.java

@@ -49,14 +49,16 @@ public interface IUserService extends MPJBaseService<User> {
      * @param dto
      * @return
      */
-    boolean bindOpenid(BindOpenidDto dto);
+//    boolean bindOpenid(BindOpenidDto dto);
+    BindOpenidVo bindOpenid(BindOpenidDto dto);
 
     /**
      * 取消绑定微信 UnionId
      *
      * @return
      */
-    boolean unbindOpenid(Long id);
+//    boolean unbindOpenid(Long id);
+    boolean unbindOpenid(UnbindOpenidDto dto);
 
     /**
      * 批量获取用户信息

+ 68 - 16
src/main/java/com/xjrsoft/module/organization/service/impl/UserServiceImpl.java

@@ -23,6 +23,7 @@ import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.sms.SmsCtcc;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
@@ -48,6 +49,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
@@ -79,6 +81,8 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
 
     private HikvisionDataMapper hikvisionDataMapper;
 
+    private SmsCtcc smsCtcc;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean add(AddUserDto dto) {
@@ -279,42 +283,90 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
     }
 
     @Override
-    public boolean bindOpenid(BindOpenidDto dto) {
-        User user = this.getOne(Wrappers.<User>query().lambda().select(User::getId, User::getOpenId, User::getUnionId).eq(User::getId, dto.getId()), false);
+    @Transactional(rollbackFor = Exception.class)
+//    public boolean bindOpenid(BindOpenidDto dto) {
+    public BindOpenidVo bindOpenid(BindOpenidDto dto) {
+        BindOpenidVo result = new BindOpenidVo();
+        result.setStatus(0);
+        User user = this.getOne(
+                Wrappers.<User>query().lambda()
+                        .select(User::getId, User::getUserName, User::getOpenId, User::getUnionId, User::getMobile)
+                        .eq(User::getId, dto.getId()), false);
         if (user != null) {
-            if (StrUtil.isNotBlank(user.getOpenId())) {
-                throw new MyException("该用户已经绑定微信");
+//            if (StrUtil.isNotBlank(user.getOpenId())) {
+//                throw new MyException("该用户已经绑定微信");
+//            }
+//            long count = this.count(Wrappers.<User>query().lambda().eq(User::getOpenId, dto.getOpenid()));
+//            if (count > 0) {
+//                throw new MyException("该用户已经绑定微信!");
+//            }
+            result.setUserId(user.getId().toString());
+            result.setName(user.getName());
+            result.setUserName(user.getUserName());
+            result.setMobile(user.getMobile());
+
+            if (StrUtil.isNotBlank(user.getOpenId()) && Objects.equals(user.getOpenId(), dto.getOpenid())) {
+                result.setStatus(1);
+                return result;
+            }
+
+            if (StrUtil.isNotBlank(user.getOpenId()) && !Objects.equals(user.getOpenId(), dto.getOpenid())) {
+                result.setStatus(2);
+                return result;
             }
-            long count = this.count(Wrappers.<User>query().lambda().eq(User::getOpenId, dto.getOpenid()));
-            if (count > 0) {
-                throw new MyException("该用户已经绑定微信!");
+
+            User openId2user = this.getOne(
+                    Wrappers.<User>query().lambda()
+                            .select(User::getId, User::getUserName, User::getOpenId, User::getUnionId, User::getMobile)
+                            .eq(User::getOpenId, dto.getOpenid()), false);
+
+            if (ObjectUtil.isNotEmpty(openId2user)) {
+                result.setUserId(user.getId().toString());
+                result.setName(user.getName());
+                result.setUserName(user.getUserName());
+                result.setMobile(user.getMobile());
+                result.setStatus(3);
+                return result;
             }
+
             User updateUser = new User();
             updateUser.setId(dto.getId());
             updateUser.setOpenId(dto.getOpenid());
             updateUser.setUnionId(dto.getUnionid());
-            boolean result = this.updateById(updateUser);
+//            boolean result = this.updateById(updateUser);
+            boolean flag = this.updateById(updateUser);
             // 用户绑定微信后,更新缓存
-            if (result) {
+            if (flag) {
+                result.setStatus(1);
                 CompletableFuture.runAsync(() -> {
                     List<User> list = list();
                     redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
                 });
             }
             return result;
-        } else {
-            long count = this.count(Wrappers.<User>query().lambda().eq(User::getOpenId, dto.getOpenid()));
-            if (count > 0) {
-                throw new MyException("该用户已经绑定微信!");
-            }
         }
+//        else {
+//            long count = this.count(Wrappers.<User>query().lambda().eq(User::getOpenId, dto.getOpenid()));
+//            if (count > 0) {
+//                throw new MyException("当前微信已经绑定其他用户!");
+//            }
+//        }
         throw new MyException("该用户不存在!");
     }
 
     @Override
-    public boolean unbindOpenid(Long id) {
+    @Transactional(rollbackFor = Exception.class)
+//    public boolean unbindOpenid(Long id) {
+    public boolean unbindOpenid(UnbindOpenidDto dto) {
+        // 验证手机验证码
+        boolean verifyResult = smsCtcc.captchaVerify(dto.getMobile(), dto.getCode());
+
+        if(!verifyResult){
+            throw new MyException("验证码错误");
+        }
+
         User updateUser = new User();
-        updateUser.setId(id);
+        updateUser.setId(dto.getId());
         updateUser.setOpenId("");
         updateUser.setUnionId("");
         boolean result = updateById(updateUser);

+ 33 - 0
src/main/java/com/xjrsoft/module/organization/vo/BindOpenidVo.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.organization.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @title: RoleListVo
+ * @Author tzx
+ * @Date: 2022/4/4 18:24
+ * @Version 1.0
+ */
+@Data
+public class BindOpenidVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    private String userId;
+
+    @ApiModelProperty("用户名")
+    private String userName;
+
+    @ApiModelProperty("名字")
+    private String name;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("修改状态,0:修改失败,1:修改成功,2:该用户已经绑定了其他微信,3:该微信已经绑定其他用户")
+    private Integer status;
+}

+ 1 - 1
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -99,7 +99,7 @@ public class ScheduleController {
     @GetMapping(value = "/course-table")
     @ApiOperation(value = "课表接口(PC端)")
     @SaCheckPermission("schedule:detail")
-    @XjrLog(value = "课表接口(PC端)", saveResponseData = true)
+    @XjrLog(value = "课表接口(PC端)", saveRequestData = false)
     public RT<CourseTableVo> courseInfo(CourseTableDto dto) {
         if (dto.getSemesterId() == null) {
             BaseSemester semester = semesterService.getCurrentSemester();

+ 1 - 1
src/main/java/com/xjrsoft/module/workflow/controller/WorkflowExecuteController.java

@@ -57,7 +57,7 @@ public class WorkflowExecuteController {
 
     @GetMapping("/approve-process-info")
     @ApiOperation(value = "审批流程所需要的信息")
-    @XjrLog(value = "审批流程所需要的信息", saveResponseData = true)
+    @XjrLog(value = "审批流程所需要的信息", saveRequestData = false, saveResponseData = false)
     public R approveProcessInfo(@RequestParam String taskId) {
         return R.ok(workflowExecuteService.getApproveProcessInfo(taskId));
     }

+ 1 - 1
src/main/resources/sqlScript/学生异动视图.sql

@@ -11,7 +11,7 @@ IF(t1.change_type = 'student_type',t1.after_data,NULL) AS newresourcecode,
 IF(t1.change_type = 'stduy_status',t1.after_data,NULL) AS newquartercode,
 t14.code AS newdeptcode,NULL AS newenteryear, NULL AS newleaveyear,NULL AS newratetypecode,
 IF(t1.change_type = 'archives_status',t1.after_data,NULL) AS newstate,
-t16.name AS operator,t1.create_date AS opertordate,t1.id AS pkfeeobjchange,t2.credential_number AS Personalid,t2.name AS Feeobjname,
+t16.name AS operator,DATE_FORMAT(t1.create_date, '%Y-%m-%d %H:%i:%s') AS opertordate,t1.id AS pkfeeobjchange,t2.credential_number AS Personalid,t2.name AS Feeobjname,
 t17.student_id AS Studentcode,NULL AS biztype,NULL AS delflag,NULL AS updateflag
 FROM student_change_record t1
 INNER JOIN xjr_user t2 ON t1.user_id = t2.id

+ 12 - 1
src/main/resources/sqlScript/院系视图和专业视图.sql

@@ -36,4 +36,15 @@ CREATE TABLE `test_cse_spec1`(
  `deptcode`  VARCHAR(40) DEFAULT NULL,
  `pk_crop`  CHAR(4) DEFAULT NULL,
  `remarks`  VARCHAR(50) DEFAULT NULL
-)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='VIEW'; 
+)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='VIEW';
+
+
+
+
+
+
+
+
+
+
+

+ 45 - 29
src/test/java/com/xjrsoft/module/job/BaseNewStudentTaskTest.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.job;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xjrsoft.XjrSoftApplication;
@@ -21,6 +22,8 @@ import com.xjrsoft.module.student.service.IBaseNewStudentService;
 import com.xjrsoft.module.student.service.IEnrollmentPlanService;
 import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
 import org.apache.commons.lang.StringUtils;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -62,12 +65,23 @@ class BaseNewStudentTaskTest {
     @Autowired
     private IBaseMajorSetService majorSetService;
 
+    @BeforeEach
+    void setUp() {
+        // 模拟用户登录
+        StpUtil.login(1000000000000000000L); // 假设用户ID为1
+    }
+
+    @AfterEach
+    void tearDown() {
+        // 清理会话
+        StpUtil.logout();
+    }
+
     @Test
     public void execute(){
         doExecute();
     }
-
-    void doExecute(){
+    void doExecute() {
         List<PbCseFeeobjupdate> dataList = cseFeeobjupdateService.list();
 
         String sql = "select distinct enteryear, userdef6 from pb_cse_feeobjupdate";
@@ -83,14 +97,14 @@ class BaseNewStudentTaskTest {
 
         Map<String, Long> planMap = new HashMap<>();
         //插入招生计划数据
-        gradeList.forEach((x)->{
+        gradeList.forEach((x) -> {
             EnrollmentPlan plan = new EnrollmentPlan();
             plan.setCreateDate(new Date());
             plan.setEnabledMark(EnabledMark.ENABLED.getCode());
             plan.setDeleteMark(DeleteMark.NODELETE.getCode());
-            if("1".equals(x.get("userdef6").toString())){
+            if ("1".equals(x.get("userdef6").toString())) {
                 plan.setEnrollType(EnrollTypeEnum.SPRING_ENROLLMENT.getCode());
-            }else if("2".equals(x.get("userdef6").toString())){
+            } else if ("2".equals(x.get("userdef6").toString())) {
                 plan.setEnrollType(EnrollTypeEnum.AUTUMN_ENROLLMENT.getCode());
             }
 
@@ -107,7 +121,7 @@ class BaseNewStudentTaskTest {
             planMap.put(x.get("enteryear").toString() + x.get("userdef6").toString(), oldPlanId);
 
             //判断是否已经存在,不存在就新增
-            if(oldPlanId == null){
+            if (oldPlanId == null) {
                 planService.save(plan);
                 planMap.put(x.get("enteryear").toString() + x.get("userdef6").toString(), plan.getId());
             }
@@ -125,7 +139,7 @@ class BaseNewStudentTaskTest {
                         .eq(BaseMajorSet::getDeleteMark, DeleteMark.NODELETE.getCode())
                         .eq(BaseMajorSet::getEnabledMark, EnabledMark.ENABLED.getCode())
         );
-        Map<String, Long> majorSetMap = majorSetList.stream().collect(Collectors.toMap(BaseMajorSet::getCode, BaseMajorSet::getId));
+        Map<String, Long> majorSetNameMap = majorSetList.stream().collect(Collectors.toMap(BaseMajorSet::getName, BaseMajorSet::getId));
 
         //循环攀宝的数据,准备更新到新生表中
         List<BaseNewStudent> updateList = new ArrayList<>();
@@ -133,20 +147,20 @@ class BaseNewStudentTaskTest {
         for (PbCseFeeobjupdate feeobjupdate : dataList) {
             BaseNewStudent existsNewStudent = existsNewStudentMap.get(feeobjupdate.getPersonalid());
 
-            if(existsNewStudent != null){
+            if (existsNewStudent != null) {
                 existsNewStudent.setName(feeobjupdate.getFeeobjname());
                 existsNewStudent.setPaymnystate(feeobjupdate.getPaymnystate());
                 existsNewStudent.setPrevious(feeobjupdate.getPrevious());
                 existsNewStudent.setProvince(feeobjupdate.getProvince());
                 existsNewStudent.setCity(feeobjupdate.getCity());
                 existsNewStudent.setMyarea(feeobjupdate.getMyarea());
-                if(StrUtil.isNotEmpty(feeobjupdate.getSg())){
-                    if(StringUtils.isNumeric(feeobjupdate.getSg())){
+                if (StrUtil.isNotEmpty(feeobjupdate.getSg())) {
+                    if (StringUtils.isNumeric(feeobjupdate.getSg())) {
                         existsNewStudent.setHeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getSg())));
                     }
                 }
-                if(StrUtil.isNotEmpty(feeobjupdate.getTz())){
-                    if(StringUtils.isNumeric(feeobjupdate.getTz())){
+                if (StrUtil.isNotEmpty(feeobjupdate.getTz())) {
+                    if (StringUtils.isNumeric(feeobjupdate.getTz())) {
                         existsNewStudent.setWeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getTz())));
                     }
                 }
@@ -156,12 +170,14 @@ class BaseNewStudentTaskTest {
                 existsNewStudent.setMobile(feeobjupdate.getTelephone());
                 existsNewStudent.setFamilyMobile(feeobjupdate.getJzlxdh());
                 existsNewStudent.setFamilyAddress(feeobjupdate.getAddress());
-                existsNewStudent.setFirstAmbition(majorSetMap.get(feeobjupdate.getSpeccode()));
-                existsNewStudent.setFirstAmbitionId(majorSetMap.get(feeobjupdate.getSpeccode()));
-                existsNewStudent.setSecondAmbition(majorSetMap.get(feeobjupdate.getZytjspec()));
-                existsNewStudent.setSecondAmbitionId(majorSetMap.get(feeobjupdate.getZytjspec()));
+                existsNewStudent.setFirstAmbition(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                existsNewStudent.setFirstAmbitionId(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                existsNewStudent.setSecondAmbition(majorSetNameMap.get(feeobjupdate.getZytjspec()));
+                existsNewStudent.setSecondAmbitionId(majorSetNameMap.get(feeobjupdate.getZytjspec()));
                 existsNewStudent.setGender(GenderDictionaryEnum.getCode(feeobjupdate.getSex()));
                 existsNewStudent.setModifyDate(new Date());
+                existsNewStudent.setStatus(0);
+                existsNewStudent.setIsCanBanding(1);
 
                 updateList.add(existsNewStudent);
                 continue;
@@ -169,7 +185,7 @@ class BaseNewStudentTaskTest {
 
             Long planId = planMap.get(feeobjupdate.getEnteryear() + feeobjupdate.getUserdef6());
             insertList.add(
-                    new BaseNewStudent(){{
+                    new BaseNewStudent() {{
                         setCredentialNumber(feeobjupdate.getPersonalid());
                         setName(feeobjupdate.getFeeobjname());
                         setPaymnystate(feeobjupdate.getPaymnystate());
@@ -177,41 +193,41 @@ class BaseNewStudentTaskTest {
                         setProvince(feeobjupdate.getProvince());
                         setCity(feeobjupdate.getCity());
                         setMyarea(feeobjupdate.getMyarea());
-                        if(StrUtil.isNotEmpty(feeobjupdate.getSg())){
-                            if(StringUtils.isNumeric(feeobjupdate.getSg())){
+                        if (StrUtil.isNotEmpty(feeobjupdate.getSg())) {
+                            if (StringUtils.isNumeric(feeobjupdate.getSg())) {
                                 setHeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getSg())));
                             }
                         }
-                        if(StrUtil.isNotEmpty(feeobjupdate.getTz())){
-                            if(StringUtils.isNumeric(feeobjupdate.getTz())){
+                        if (StrUtil.isNotEmpty(feeobjupdate.getTz())) {
+                            if (StringUtils.isNumeric(feeobjupdate.getTz())) {
                                 setWeight(BigDecimal.valueOf(Double.parseDouble(feeobjupdate.getTz())));
                             }
                         }
-
                         setGraduateSchool(feeobjupdate.getGraduations());
                         setStduyStatus(StudyStatusEnum.getCode(feeobjupdate.getQuartername()));
                         setSource(StudentTypeEnum.getCode(feeobjupdate.getResourcename()));
                         setMobile(feeobjupdate.getTelephone());
                         setFamilyMobile(feeobjupdate.getJzlxdh());
                         setFamilyAddress(feeobjupdate.getAddress());
-                        setFirstAmbition(majorSetMap.get(feeobjupdate.getSpeccode()));
-                        setFirstAmbitionId(majorSetMap.get(feeobjupdate.getSpeccode()));
-                        setSecondAmbition(majorSetMap.get(feeobjupdate.getZytjspec()));
-                        setSecondAmbitionId(majorSetMap.get(feeobjupdate.getZytjspec()));
+                        setFirstAmbition(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                        setFirstAmbitionId(majorSetNameMap.get(feeobjupdate.getSpecname()));
+                        setSecondAmbition(majorSetNameMap.get(feeobjupdate.getZytjspec()));
+                        setSecondAmbitionId(majorSetNameMap.get(feeobjupdate.getZytjspec()));
                         setGender(GenderDictionaryEnum.getCode(feeobjupdate.getSex()));
                         setEnrollmentPlanId(planId);
                         setCreateDate(new Date());
+                        setStatus(0);
+                        setIsCanBanding(1);
                     }}
             );
         }
 
-        if(!updateList.isEmpty()){
+        if (!updateList.isEmpty()) {
             newStudentService.updateBatchById(updateList);
         }
-        if(!insertList.isEmpty()){
+        if (!insertList.isEmpty()) {
             newStudentService.saveBatch(insertList);
         }
 
     }
-
 }

+ 1 - 0
src/test/java/com/xjrsoft/module/job/ExamScoreDataTaskTest.java

@@ -39,4 +39,5 @@ class ExamScoreDataTaskTest {
         //同步成绩
         dataUtil.studentScoreData(examListService, scoreService, courseService);
     }
+
 }