Forráskód Böngészése

修改时增加验证逻辑

dzx 1 éve
szülő
commit
fc20582c25

+ 147 - 22
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceRuleCategoryServiceImpl.java

@@ -8,8 +8,6 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.app.entity.AppFuncDesign;
-import com.xjrsoft.module.app.vo.AppFuncDesignPageVo;
 import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
 import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
 import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
@@ -206,6 +204,22 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean update(AttendanceRuleCategory attendanceRuleCategory) {
+        if(attendanceRuleCategory.getAttendanceRange() == 1){
+            Long count = categoryMapper.selectCount(
+                new QueryWrapper<AttendanceRuleCategory>().lambda()
+                .eq(AttendanceRuleCategory::getRoleId, attendanceRuleCategory.getRoleId())
+                .eq(AttendanceRuleCategory::getDeleteMark, DeleteMark.NODELETE.getCode())
+                .ne(AttendanceRuleCategory::getId, attendanceRuleCategory.getId())
+            );
+            if(count > 0){
+                if(attendanceRuleCategory.getRoleId() == 2){
+                    throw new MyException("已存在一个全体教职工的考勤规则,无法修改");
+                }else if(attendanceRuleCategory.getRoleId() == 3){
+                    throw new MyException("已存在一个全体学生的考勤规则,无法修改");
+                }
+            }
+        }
+
         categoryMapper.updateById(attendanceRuleCategory);
         //********************************* AttendanceRuleDetails  增删改  开始 *******************************************/
         {
@@ -237,32 +251,143 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
         //********************************* AttendanceRuleDetails  增删改  结束 *******************************************/
 
         //********************************* AttendanceUserRelation  增删改  开始 *******************************************/
-        {
-            // 查出所有子级的id
-            List<AttendanceUserRelation> attendanceUserRelationList = relationMapper.selectList(Wrappers.lambdaQuery(AttendanceUserRelation.class).eq(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceUserRelation::getId));
-            List<Long> attendanceUserRelationIds = attendanceUserRelationList.stream().map(AttendanceUserRelation::getId).collect(Collectors.toList());
-            //原有子表单 没有被删除的主键
-            List<Long> attendanceUserRelationOldIds = attendanceRuleCategory.getAttendanceUserRelationList().stream().map(AttendanceUserRelation::getId).filter(Objects::nonNull).collect(Collectors.toList());
-            //找到需要删除的id
-            List<Long> attendanceUserRelationRemoveIds = attendanceUserRelationIds.stream().filter(item -> !attendanceUserRelationOldIds.contains(item)).collect(Collectors.toList());
+        List<XjrUser> insertList = new ArrayList<>();
+        if(attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 2){
+            if(attendanceRuleCategory.getAttendanceRange() == 1){
+                List<XjrUser> userList = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                    .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                    .eq(BaseTeacher::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+                insertList.addAll(userList);
+            }else if(attendanceRuleCategory.getAttendanceRange() == 2){
+                List<Long> deptIds = new ArrayList<>();
+                for (AttendanceUserRelation relation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+                    if(relation.getDeptId() != null){
+                        deptIds.add(relation.getDeptId());
+                    }
+                }
+                List<Long> userIds = new ArrayList<>();
+                for (AttendanceUserRelation relation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+                    if(relation.getUserId() != null){
+                        userIds.add(relation.getUserId());
+                    }
+                }
 
-            for (AttendanceUserRelation attendanceUserRelation : attendanceRuleCategory.getAttendanceUserRelationList()) {
-                //如果不等于空则修改
-                if (attendanceUserRelation.getId() != null) {
-                    relationMapper.updateById(attendanceUserRelation);
+                List<XjrUser> userList = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                    .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                    .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
+                    .eq(BaseTeacher::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .in(!deptIds.isEmpty(), UserDeptRelation::getDeptId, deptIds)
+                    .in(!userIds.isEmpty(), XjrUser::getId, userIds)
+                );
+                //查询这部分人中是否已经有人有规则了
+                List<Long> relationUserIds = userList.stream().map(XjrUser::getId).collect(Collectors.toList());
+                List<XjrUser> relations = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                    .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getUserId, XjrUser::getId)
+                    .eq(AttendanceUserRelation::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .in(AttendanceUserRelation::getUserId, relationUserIds)
+                    .ne(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId())
+                );
+                String peopleName = "";
+                for (int i = 0; i < relations.size(); i ++){
+                    if(i > 0){
+                        peopleName += ",";
+                    }
+                    peopleName += relations.get(i).getName();
                 }
-                //如果等于空 则新增
-                else {
-                    //已经不存在的id 删除
-                    attendanceUserRelation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
-                    relationMapper.insert(attendanceUserRelation);
+                if(!relations.isEmpty()){
+                    throw new MyException("以下教职工:【" + peopleName + "】已绑定其他考勤规则,无法添加");
                 }
+                insertList.addAll(userList);
             }
-            //已经不存在的id 删除
-            if(attendanceUserRelationRemoveIds.size() > 0){
-                relationMapper.deleteBatchIds(attendanceUserRelationRemoveIds);
+        }else if(attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 3){//学生
+            if(attendanceRuleCategory.getAttendanceRange() == 1){
+                //首先判断是否已经存在一个全体学生的考勤规则
+                Long count = categoryMapper.selectCount(
+                    new QueryWrapper<AttendanceRuleCategory>()
+                    .lambda()
+                    .eq(AttendanceRuleCategory::getRoleId, attendanceRuleCategory.getRoleId())
+                    .eq(AttendanceRuleCategory::getAttendanceRange, attendanceRuleCategory.getAttendanceRange())
+                    .eq(AttendanceRuleCategory::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+                if(count > 0){
+                    throw new MyException("已存在一个全体学生的考勤规则,无法修改");
+                }
+                List<XjrUser> userList = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                    .leftJoin(BaseStudent.class, BaseStudent::getUserId, XjrUser::getId)
+                    .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+                insertList.addAll(userList);
+            }else if(attendanceRuleCategory.getAttendanceRange() == 2){
+                List<Long> classIds = new ArrayList<>();
+                for (AttendanceUserRelation relation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+                    if(relation.getClassId() != null){
+                        classIds.add(relation.getClassId());
+                    }
+                }
+                List<Long> userIds = new ArrayList<>();
+                for (AttendanceUserRelation relation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+                    if(relation.getUserId() != null){
+                        userIds.add(relation.getUserId());
+                    }
+                }
+
+                List<XjrUser> userList = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                    .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
+                    .eq(BaseStudentSchoolRoll::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .in(!classIds.isEmpty(), BaseStudentSchoolRoll::getClassId, classIds)
+                    .in(!userIds.isEmpty(), XjrUser::getId, userIds)
+                );
+                //查询这部分人中是否已经有人有规则了
+                List<Long> relationUserIds = userList.stream().map(XjrUser::getId).collect(Collectors.toList());
+                List<XjrUser> relations = xjrUserService.list(
+                    new MPJLambdaWrapper<XjrUser>()
+                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                    .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getUserId, XjrUser::getId)
+                    .eq(AttendanceUserRelation::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .in(AttendanceUserRelation::getUserId, relationUserIds)
+                    .ne(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId())
+                );
+                String peopleName = "";
+                for (int i = 0; i < relations.size(); i ++){
+                    if(i > 0){
+                        peopleName += ",";
+                    }
+                    peopleName += relations.get(i).getName();
+                }
+                if(!relations.isEmpty()){
+                    throw new MyException("以下学生:【" + peopleName + "】已绑定其他考勤规则,无法修改");
+                }
+                insertList.addAll(userList);
             }
         }
+        //先清空原来的全体教职工数据,再重新添加
+        relationMapper.delete(
+            Wrappers.lambdaQuery(AttendanceUserRelation.class)
+            .eq(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId())
+        );
+        for (XjrUser user : insertList) {
+            AttendanceUserRelation relation = new AttendanceUserRelation();
+            relation.setCreateDate(new Date());
+            relation.setCreateUserId(StpUtil.getLoginIdAsLong());
+            relation.setUserId(user.getId());
+            relation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
+            relationMapper.insert(relation);
+        }
         //********************************* AttendanceUserRelation  增删改  结束 *******************************************/
 
         return true;