|
|
@@ -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;
|