Ver Fonte

fix:用户推送记录只保留一条更改

caozixuan há 3 anos atrás
pai
commit
01b7f5f593

+ 2 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachStudentController.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.api;
 
+import com.alibaba.fastjson.JSON;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.params.TeachStudentBatchParam;
@@ -54,10 +55,10 @@ public class TeachStudentController {
     @RequestMapping(value = "/create", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
     public Result createTeachStudent(@Valid @RequestBody TeachStudentParams teachStudentParams, BindingResult bindingResult) throws IllegalAccessException {
-        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SystemConstant.verifyDBFields(teachStudentParams, teachStudentParams.getClass());
         return ResultUtil.ok(teachStudentService.createTeachStudent(teachStudentParams.getStudentName(), teachStudentParams.getStudentCode(), teachStudentParams.getTeachClazzId(), requestUser));
     }

+ 33 - 10
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/PushUserTrackServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.params.UserPushParam;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.PushUserTrack;
 import com.qmth.teachcloud.common.entity.SysPrivilege;
 import com.qmth.teachcloud.common.entity.SysRolePrivilege;
@@ -63,11 +64,26 @@ public class PushUserTrackServiceImpl extends ServiceImpl<PushUserTrackMapper, P
             Set<Long> priIds = sysRolePrivilegeList.stream().map(SysRolePrivilege::getPrivilegeId).collect(Collectors.toSet());
             if (priIds.size() > 0) {
                 PushUserTrack markerTrack = new PushUserTrack();
+                PushUserTrack headerTrack = new PushUserTrack();
+                // 直接查轨迹表的数据
+                List<PushUserTrack> specialUserTrack = this.list(new QueryWrapper<PushUserTrack>().lambda().eq(PushUserTrack::getUserId, userId));
+                if (specialUserTrack.size() > 0){
+                    List<PushUserTrack> markerTrackList = specialUserTrack.stream().filter(e -> SpecialPrivilegeEnum.MARKER.equals(e.getIdentify())).sorted(Comparator.comparing(PushUserTrack::getCreateTime).reversed()).limit(1).collect(Collectors.toList());
+                    List<PushUserTrack> headerTrackList = specialUserTrack.stream().filter(e -> SpecialPrivilegeEnum.SUBJECT_HEADER.equals(e.getIdentify())).sorted(Comparator.comparing(PushUserTrack::getCreateTime).reversed()).limit(1).collect(Collectors.toList());
+                    if (markerTrackList.size() == 1){
+                        markerTrack = markerTrackList.get(0);
+                    }
+                    if (headerTrackList.size() == 1){
+                        headerTrack = headerTrackList.get(0);
+                    }
+
+                }
+
                 markerTrack.setUserId(userId);
                 markerTrack.setSchoolId(currentUser.getSchoolId());
                 markerTrack.setIdentify(SpecialPrivilegeEnum.MARKER);
 
-                PushUserTrack headerTrack = new PushUserTrack();
+
                 headerTrack.setUserId(userId);
                 headerTrack.setSchoolId(currentUser.getSchoolId());
                 headerTrack.setIdentify(SpecialPrivilegeEnum.SUBJECT_HEADER);
@@ -120,11 +136,6 @@ public class PushUserTrackServiceImpl extends ServiceImpl<PushUserTrackMapper, P
                         List<PushUserTrack> specialUserCheck = this.list(new QueryWrapper<PushUserTrack>().lambda().eq(PushUserTrack::getUserId, userId));
                         if (specialUserCheck.size() > 0) {
                             // 该用户是特殊用户(就算现在不是曾经也是过)
-                            List<PushUserTrack> markerCheckList = specialUserCheck.stream().filter(e -> SpecialPrivilegeEnum.MARKER.equals(e.getIdentify())).sorted(Comparator.comparing(PushUserTrack::getCreateTime).reversed()).limit(1).collect(Collectors.toList());
-                            List<PushUserTrack> headerCheckList = specialUserCheck.stream().filter(e -> SpecialPrivilegeEnum.SUBJECT_HEADER.equals(e.getIdentify())).sorted(Comparator.comparing(PushUserTrack::getCreateTime).reversed()).limit(1).collect(Collectors.toList());
-                            if (markerCheckList.size() == 0 || headerCheckList.size() == 0) {
-                                throw ExceptionResultEnum.ERROR.exception("用户轨迹表数据异常");
-                            }
                             markerTrack.setOperate(UserPushTrackEnum.UNBIND);
                             headerTrack.setOperate(UserPushTrackEnum.UNBIND);
                         } else {
@@ -135,14 +146,26 @@ public class PushUserTrackServiceImpl extends ServiceImpl<PushUserTrackMapper, P
                     }
                 }
                 if (Objects.nonNull(markerTrack)) {
-                    markerTrack.insertInfo(requestUserId);
+                    if (SystemConstant.longNotNull(markerTrack.getId())){
+                        // 更新
+                        markerTrack.updateInfo(requestUserId);
+                    }else {
+                        // 新增
+                        markerTrack.insertInfo(requestUserId);
+                    }
                     pushUserTrackList.add(markerTrack);
-                    this.save(markerTrack);
+                    this.saveOrUpdate(markerTrack);
                 }
                 if (Objects.nonNull(headerTrack)) {
-                    headerTrack.insertInfo(requestUserId);
+                    if (SystemConstant.longNotNull(headerTrack.getId())){
+                        // 更新
+                        headerTrack.updateInfo(requestUserId);
+                    }else {
+                        // 新增
+                        headerTrack.insertInfo(requestUserId);
+                    }
                     pushUserTrackList.add(headerTrack);
-                    this.save(headerTrack);
+                    this.saveOrUpdate(headerTrack);
                 }
             }
         }

+ 32 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRoleServiceImpl.java

@@ -319,17 +319,41 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                     // 该用户除掉正要更改的角色所属的权限外其他角色所属权限的特殊权限枚举
                     SpecialPrivilegeEnum otherRoleSpecialPrivilegeEnum = sysUserService.findUserSpecialPrivilegeByRoleIdSet(roleIdSet);
 
+                    PushUserTrack markerTrack = new PushUserTrack();
+                    PushUserTrack headerTrack = new PushUserTrack();
+                    List<PushUserTrack> specialUserTrack = pushUserTrackService.list(new QueryWrapper<PushUserTrack>().lambda().eq(PushUserTrack::getUserId, sysUser.getId()));
+                    if (specialUserTrack.size() > 0){
+                        List<PushUserTrack> markerTrackList = specialUserTrack.stream().filter(e -> SpecialPrivilegeEnum.MARKER.equals(e.getIdentify())).sorted(Comparator.comparing(PushUserTrack::getCreateTime).reversed()).limit(1).collect(Collectors.toList());
+                        List<PushUserTrack> headerTrackList = specialUserTrack.stream().filter(e -> SpecialPrivilegeEnum.SUBJECT_HEADER.equals(e.getIdentify())).sorted(Comparator.comparing(PushUserTrack::getCreateTime).reversed()).limit(1).collect(Collectors.toList());
+                        if (markerTrackList.size() == 1){
+                            markerTrack = markerTrackList.get(0);
+                        }
+                        if (headerTrackList.size() == 1){
+                            headerTrack = headerTrackList.get(0);
+                        }
+                    }
+
                     // 更新轨迹数据
                     // 评卷员身份轨迹记录
-                    PushUserTrack markerTrack = new PushUserTrack();
-                    markerTrack.insertInfo(requestUser.getId());
+                    if (SystemConstant.longNotNull(markerTrack.getId())){
+                        // 更新
+                        markerTrack.updateInfo(requestUser.getId());
+                    }else {
+                        // 新增
+                        markerTrack.insertInfo(requestUser.getId());
+                    }
                     markerTrack.setUserId(sysUser.getId());
                     markerTrack.setSchoolId(sysUser.getSchoolId());
                     markerTrack.setIdentify(SpecialPrivilegeEnum.MARKER);
 
                     // 科组长身份轨迹记录
-                    PushUserTrack headerTrack = new PushUserTrack();
-                    headerTrack.insertInfo(requestUser.getId());
+                    if (SystemConstant.longNotNull(markerTrack.getId())){
+                        // 更新
+                        headerTrack.updateInfo(requestUser.getId());
+                    }else {
+                        // 新增
+                        headerTrack.insertInfo(requestUser.getId());
+                    }
                     headerTrack.setUserId(sysUser.getId());
                     headerTrack.setSchoolId(sysUser.getSchoolId());
                     headerTrack.setIdentify(SpecialPrivilegeEnum.SUBJECT_HEADER);
@@ -340,13 +364,13 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                         if (!SpecialPrivilegeEnum.MARKER.equals(otherRoleSpecialPrivilegeEnum) && !SpecialPrivilegeEnum.COMPOSITE.equals(otherRoleSpecialPrivilegeEnum)) {
                             // 该用户其他的角色也不包含评卷员权限 -> 评卷员角色解绑
                             markerTrack.setOperate(UserPushTrackEnum.UNBIND);
-                            pushUserTrackService.save(markerTrack);
+                            pushUserTrackService.saveOrUpdate(markerTrack);
                         }
                     } else if (!dbPrivilege.contains(markerId) && upPrivilege.contains(markerId)) {
                         // 更新新增了评卷员权限
                         if (enable) {
                             markerTrack.setOperate(UserPushTrackEnum.BIND);
-                            pushUserTrackService.save(markerTrack);
+                            pushUserTrackService.saveOrUpdate(markerTrack);
                         }
                     }
                     // 科组长判断
@@ -355,13 +379,13 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                         if (!SpecialPrivilegeEnum.SUBJECT_HEADER.equals(otherRoleSpecialPrivilegeEnum) && !SpecialPrivilegeEnum.COMPOSITE.equals(otherRoleSpecialPrivilegeEnum)) {
                             // 该用户其他的角色也不包含科组长权限 -> 科组长角色解绑
                             headerTrack.setOperate(UserPushTrackEnum.UNBIND);
-                            pushUserTrackService.save(headerTrack);
+                            pushUserTrackService.saveOrUpdate(headerTrack);
                         }
                     } else if (!dbPrivilege.contains(subjectHeaderId) && upPrivilege.contains(subjectHeaderId)) {
                         // 更新新增了科组长权限
                         if (enable) {
                             headerTrack.setOperate(UserPushTrackEnum.BIND);
-                            pushUserTrackService.save(headerTrack);
+                            pushUserTrackService.saveOrUpdate(headerTrack);
                         }
                     }
                 }