|
|
@@ -2,16 +2,17 @@ package com.xjrsoft.module.attendance.service.impl;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
+import com.google.gson.JsonParser;
|
|
|
import com.xjrsoft.common.enums.DeleteMark;
|
|
|
+import com.xjrsoft.common.enums.EnabledMark;
|
|
|
import com.xjrsoft.common.exception.MyException;
|
|
|
import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
-import com.xjrsoft.module.attendance.dto.AddAttendanceRuleCategoryDto;
|
|
|
-import com.xjrsoft.module.attendance.dto.AddAttendanceUserRelationDto;
|
|
|
-import com.xjrsoft.module.attendance.dto.UpdateAttendanceRuleCategoryDto;
|
|
|
+import com.xjrsoft.module.attendance.dto.*;
|
|
|
import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
|
|
|
import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
|
|
|
import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
|
|
|
@@ -21,6 +22,8 @@ import com.xjrsoft.module.attendance.mapper.AttendanceUserRelationMapper;
|
|
|
import com.xjrsoft.module.attendance.service.IAttendanceRuleCategoryService;
|
|
|
import com.xjrsoft.module.attendance.vo.AttendanceRuleDetailsUserVo;
|
|
|
import com.xjrsoft.module.attendance.vo.TimeRangeVo;
|
|
|
+import com.xjrsoft.module.base.entity.BaseClass;
|
|
|
+import com.xjrsoft.module.base.service.IBaseClassService;
|
|
|
import com.xjrsoft.module.concat.service.IXjrUserService;
|
|
|
import com.xjrsoft.module.organization.entity.UserDeptRelation;
|
|
|
import com.xjrsoft.module.student.entity.BaseStudent;
|
|
|
@@ -52,6 +55,7 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
|
|
|
private final AttendanceRuleDetailsMapper detailsMapper;
|
|
|
private final AttendanceUserRelationMapper relationMapper;
|
|
|
private final IXjrUserService xjrUserService;
|
|
|
+ private final IBaseClassService baseClassService;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
@@ -67,6 +71,160 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
|
|
|
AttendanceRuleCategory attendanceRuleCategory = BeanUtil.toBean(dto, AttendanceRuleCategory.class);
|
|
|
attendanceRuleCategory.setUserRelation(JsonUtil.toJsonString(dto.getAttendanceUserRelationList()));
|
|
|
|
|
|
+ List<XjrUser> insertList = new ArrayList<>();
|
|
|
+ List<Long> classIds=new ArrayList<>();
|
|
|
+ if (attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 2) {
|
|
|
+ if (attendanceRuleCategory.getAttendanceRange() == 1) {
|
|
|
+ //首先判断是否已经存在一个全体教职工的考勤规则
|
|
|
+ Integer existCount = categoryMapper.getExistCount(dto);
|
|
|
+ if (existCount > 0) {
|
|
|
+ throw new MyException("已存在一个全体教职工的考勤规则,无法添加");
|
|
|
+ }
|
|
|
+ List<XjrUser> userList = xjrUserService.list(
|
|
|
+ new MPJLambdaWrapper<XjrUser>()
|
|
|
+ .select(XjrUser::getId)
|
|
|
+ .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 (AddAttendanceUserRelationDto relation : dto.getAttendanceUserRelationList()) {
|
|
|
+ if (relation.getDeptId() != null) {
|
|
|
+ deptIds.add(relation.getDeptId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ for (AddAttendanceUserRelationDto relation : dto.getAttendanceUserRelationList()) {
|
|
|
+ if (relation.getUserId() != null) {
|
|
|
+ userIds.add(relation.getUserId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<XjrUser> userList = xjrUserService.list(
|
|
|
+ new MPJLambdaWrapper<XjrUser>()
|
|
|
+ .select(XjrUser::getId)
|
|
|
+ .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>().distinct()
|
|
|
+ .select(XjrUser::getId)
|
|
|
+ .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getUserId, XjrUser::getId)
|
|
|
+ .leftJoin(AttendanceRuleCategory.class, AttendanceRuleCategory::getId, AttendanceUserRelation::getAttendanceRuleCategoryId)
|
|
|
+ .eq(AttendanceUserRelation::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(AttendanceUserRelation::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .in(!relationUserIds.isEmpty(), AttendanceUserRelation::getUserId, relationUserIds)
|
|
|
+ .apply("(( '"+dto.getStartDate()+"' BETWEEN t2.start_date AND t2.end_date) OR ( '"+dto.getEndDate()+"' BETWEEN t2.start_date AND t2.end_date))")
|
|
|
+ );
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ } else if (attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 3) {//学生 学生存班级ID
|
|
|
+ if (attendanceRuleCategory.getAttendanceRange() == 1) {
|
|
|
+ //首先判断是否已经存在一个全体学生的考勤规则
|
|
|
+ Integer existCount = categoryMapper.getExistCount(dto);
|
|
|
+ if (existCount > 0) {
|
|
|
+ throw new MyException("已存在一个全体学生的考勤规则,无法添加");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BaseClass> classList = baseClassService.list(
|
|
|
+ new MPJLambdaWrapper<BaseClass>()
|
|
|
+ .select(BaseClass::getId)
|
|
|
+ .eq(BaseClass::getDeleteMark,DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(BaseClass::getIsGraduate,1)
|
|
|
+ );
|
|
|
+
|
|
|
+ classIds=classList.stream().map(BaseClass::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ } else if (attendanceRuleCategory.getAttendanceRange() == 2) {
|
|
|
+ for (AddAttendanceUserRelationDto relation : dto.getAttendanceUserRelationList()) {
|
|
|
+ if (relation.getClassId() != null) {
|
|
|
+ classIds.add(relation.getClassId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<BaseClass> relations = baseClassService.list(
|
|
|
+ new MPJLambdaWrapper<BaseClass>().distinct()
|
|
|
+ .select(BaseClass::getId)
|
|
|
+ .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseClass.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getClassId, XjrUser::getId)
|
|
|
+ .leftJoin(AttendanceRuleCategory.class, AttendanceRuleCategory::getId, AttendanceUserRelation::getAttendanceRuleCategoryId)
|
|
|
+ .eq(AttendanceUserRelation::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(AttendanceUserRelation::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .eq(AttendanceRuleCategory::getStduyStatus, dto.getStduyStatus())
|
|
|
+ .in(!classIds.isEmpty(), AttendanceUserRelation::getClassId, classIds)
|
|
|
+ .apply("(( '"+dto.getStartDate()+"' BETWEEN t2.start_date AND t2.end_date) OR ( '"+dto.getEndDate()+"' BETWEEN t2.start_date AND t2.end_date))")
|
|
|
+ );
|
|
|
+ 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 + "】已绑定其他考勤规则,无法修改");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ attendanceRuleCategory.setCreateDate(new Date());
|
|
|
+ categoryMapper.insert(attendanceRuleCategory);
|
|
|
+ for (AttendanceRuleDetails attendanceRuleDetails : attendanceRuleCategory.getAttendanceRuleDetailsList()) {
|
|
|
+ attendanceRuleDetails.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
|
|
|
+ detailsMapper.insert(attendanceRuleDetails);
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (Long classId : classIds) {
|
|
|
+ AttendanceUserRelation relation = new AttendanceUserRelation();
|
|
|
+ relation.setCreateDate(new Date());
|
|
|
+ relation.setCreateUserId(StpUtil.getLoginIdAsLong());
|
|
|
+ relation.setClassId(classId);
|
|
|
+ relation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
|
|
|
+ relationMapper.insert(relation);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Boolean addOld(AddAttendanceRuleCategoryDto dto) {
|
|
|
+ List<AttendanceRuleCategory> defaultShowRuleCategories = this.list(
|
|
|
+ new QueryWrapper<AttendanceRuleCategory>().lambda()
|
|
|
+ .eq(AttendanceRuleCategory::getIsDefaultShow, 1)
|
|
|
+ );
|
|
|
+ if(!defaultShowRuleCategories.isEmpty() && dto.getIsDefaultShow() != null && dto.getIsDefaultShow() == 1){
|
|
|
+ throw new MyException("已存在一个默认显示的规则,无法再次添加");
|
|
|
+ }
|
|
|
+ AttendanceRuleCategory attendanceRuleCategory = BeanUtil.toBean(dto, AttendanceRuleCategory.class);
|
|
|
+ attendanceRuleCategory.setUserRelation(JsonUtil.toJsonString(dto.getAttendanceUserRelationList()));
|
|
|
+
|
|
|
List<XjrUser> insertList = new ArrayList<>();
|
|
|
if (attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 2) {
|
|
|
if (attendanceRuleCategory.getAttendanceRange() == 1) {
|
|
|
@@ -237,6 +395,219 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ categoryMapper.updateById(attendanceRuleCategory);
|
|
|
+ //********************************* AttendanceRuleDetails 增删改 开始 *******************************************/
|
|
|
+ {
|
|
|
+ // 查出所有子级的id
|
|
|
+ List<AttendanceRuleDetails> attendanceRuleDetailsList = detailsMapper.selectList(Wrappers.lambdaQuery(AttendanceRuleDetails.class).eq(AttendanceRuleDetails::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceRuleDetails::getId));
|
|
|
+ List<Long> attendanceRuleDetailsIds = attendanceRuleDetailsList.stream().map(AttendanceRuleDetails::getId).collect(Collectors.toList());
|
|
|
+ //原有子表单 没有被删除的主键
|
|
|
+ List<Long> attendanceRuleDetailsOldIds = attendanceRuleCategory.getAttendanceRuleDetailsList().stream().map(AttendanceRuleDetails::getId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ //找到需要删除的id
|
|
|
+ List<Long> attendanceRuleDetailsRemoveIds = attendanceRuleDetailsIds.stream().filter(item -> !attendanceRuleDetailsOldIds.contains(item)).collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (AttendanceRuleDetails attendanceRuleDetails : attendanceRuleCategory.getAttendanceRuleDetailsList()) {
|
|
|
+ //如果不等于空则修改
|
|
|
+ if (attendanceRuleDetails.getId() != null) {
|
|
|
+ detailsMapper.updateById(attendanceRuleDetails);
|
|
|
+ }
|
|
|
+ //如果等于空 则新增
|
|
|
+ else {
|
|
|
+ //已经不存在的id 删除
|
|
|
+ attendanceRuleDetails.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
|
|
|
+ detailsMapper.insert(attendanceRuleDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //已经不存在的id 删除
|
|
|
+ if (!attendanceRuleDetailsRemoveIds.isEmpty()) {
|
|
|
+ detailsMapper.deleteBatchIds(attendanceRuleDetailsRemoveIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //********************************* AttendanceRuleDetails 增删改 结束 *******************************************/
|
|
|
+
|
|
|
+ //********************************* AttendanceUserRelation 增删改 开始 *******************************************/
|
|
|
+ List<XjrUser> insertList = new ArrayList<>();
|
|
|
+ List<Long> classIds=new ArrayList<>();
|
|
|
+ if (attendanceRuleCategory.getRoleId() != null && attendanceRuleCategory.getRoleId() == 2) {
|
|
|
+ if (attendanceRuleCategory.getAttendanceRange() == 1) {
|
|
|
+ List<XjrUser> userList = xjrUserService.list(
|
|
|
+ new MPJLambdaWrapper<XjrUser>()
|
|
|
+ .select(XjrUser::getId)
|
|
|
+ .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 (AddAttendanceUserRelationDto relation : dto.getAttendanceUserRelationList()) {
|
|
|
+ if (relation.getDeptId() != null) {
|
|
|
+ deptIds.add(relation.getDeptId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ for (AddAttendanceUserRelationDto relation : dto.getAttendanceUserRelationList()) {
|
|
|
+ if (relation.getUserId() != null) {
|
|
|
+ userIds.add(relation.getUserId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<XjrUser> userList = new ArrayList<>();
|
|
|
+ if (!deptIds.isEmpty()) {
|
|
|
+ List<XjrUser> deptUserList = xjrUserService.list(
|
|
|
+ new MPJLambdaWrapper<XjrUser>()
|
|
|
+ .select(XjrUser::getId)
|
|
|
+ .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(UserDeptRelation::getDeptId, deptIds)
|
|
|
+ );
|
|
|
+ userList.addAll(deptUserList);
|
|
|
+ }
|
|
|
+ if (!userIds.isEmpty()) {
|
|
|
+ userList.addAll(xjrUserService.listByIds(userIds));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //查询这部分人中是否已经有人有规则了
|
|
|
+ List<Long> relationUserIds = userList.stream().map(XjrUser::getId).collect(Collectors.toList());
|
|
|
+ if (!relationUserIds.isEmpty()) {
|
|
|
+ List<XjrUser> relations = xjrUserService.list(
|
|
|
+ new MPJLambdaWrapper<XjrUser>()
|
|
|
+ .select(XjrUser::getId)
|
|
|
+ .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getUserId, XjrUser::getId)
|
|
|
+ .leftJoin(AttendanceRuleCategory.class, AttendanceRuleCategory::getId, AttendanceUserRelation::getAttendanceRuleCategoryId)
|
|
|
+ .eq(AttendanceUserRelation::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(AttendanceUserRelation::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .eq(AttendanceRuleCategory::getStduyStatus, dto.getStduyStatus())
|
|
|
+ .in(AttendanceUserRelation::getUserId, relationUserIds)
|
|
|
+ .ne(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId())
|
|
|
+ .apply("(( '"+dto.getStartDate()+"' BETWEEN t2.start_date AND t2.end_date) OR ( '"+dto.getEndDate()+"' BETWEEN t2.start_date AND t2.end_date))")
|
|
|
+ );
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ } 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<BaseClass> classList = baseClassService.list(
|
|
|
+ new MPJLambdaWrapper<BaseClass>()
|
|
|
+ .select(BaseClass::getId)
|
|
|
+ .eq(BaseClass::getDeleteMark,DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(BaseClass::getIsGraduate,1)
|
|
|
+ );
|
|
|
+
|
|
|
+ classIds=classList.stream().map(BaseClass::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ } else if (attendanceRuleCategory.getAttendanceRange() == 2) {
|
|
|
+ for (AddAttendanceUserRelationDto relation : dto.getAttendanceUserRelationList()) {
|
|
|
+ if (relation.getClassId() != null) {
|
|
|
+ classIds.add(relation.getClassId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!classIds.isEmpty()) {
|
|
|
+
|
|
|
+ List<BaseClass> relations = baseClassService.list(
|
|
|
+ new MPJLambdaWrapper<BaseClass>().distinct()
|
|
|
+ .select(BaseClass::getId)
|
|
|
+ .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseClass.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getClassId, XjrUser::getId)
|
|
|
+ .leftJoin(AttendanceRuleCategory.class, AttendanceRuleCategory::getId, AttendanceUserRelation::getAttendanceRuleCategoryId)
|
|
|
+ .eq(AttendanceUserRelation::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(AttendanceUserRelation::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .eq(AttendanceRuleCategory::getStduyStatus, dto.getStduyStatus())
|
|
|
+ .in( AttendanceUserRelation::getClassId, classIds)
|
|
|
+ .ne(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId())
|
|
|
+ .apply("(( '"+dto.getStartDate()+"' BETWEEN t2.start_date AND t2.end_date) OR ( '"+dto.getEndDate()+"' BETWEEN t2.start_date AND t2.end_date))")
|
|
|
+ );
|
|
|
+
|
|
|
+ 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 + "】已绑定其他考勤规则,无法修改");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //先清空原来的全体教职工数据,再重新添加
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Long classId : classIds) {
|
|
|
+ AttendanceUserRelation relation = new AttendanceUserRelation();
|
|
|
+ relation.setCreateDate(new Date());
|
|
|
+ relation.setCreateUserId(StpUtil.getLoginIdAsLong());
|
|
|
+ relation.setClassId(classId);
|
|
|
+ relation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
|
|
|
+ relationMapper.insert(relation);
|
|
|
+ }
|
|
|
+ //********************************* AttendanceUserRelation 增删改 结束 *******************************************/
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Boolean updateOld(UpdateAttendanceRuleCategoryDto dto) {
|
|
|
+ List<AttendanceRuleCategory> defaultShowRuleCategories = this.list(
|
|
|
+ new QueryWrapper<AttendanceRuleCategory>().lambda()
|
|
|
+ .eq(AttendanceRuleCategory::getIsDefaultShow, 1)
|
|
|
+ .ne(AttendanceRuleCategory::getId, dto.getId())
|
|
|
+ );
|
|
|
+ if(!defaultShowRuleCategories.isEmpty() && dto.getIsDefaultShow() != null && dto.getIsDefaultShow() == 1){
|
|
|
+ throw new MyException("已存在一个默认显示的规则,无法再次添加");
|
|
|
+ }
|
|
|
+ AttendanceRuleCategory attendanceRuleCategory = BeanUtil.toBean(dto, AttendanceRuleCategory.class);
|
|
|
+ attendanceRuleCategory.setUserRelation(JsonUtil.toJsonString(dto.getAttendanceUserRelationList()));
|
|
|
+ if (attendanceRuleCategory.getAttendanceRange() == 1) {
|
|
|
+ Integer count = categoryMapper.getExistCountNEId(dto);
|
|
|
+ if (count > 0) {
|
|
|
+ if (attendanceRuleCategory.getRoleId() == 2) {
|
|
|
+ throw new MyException("已存在一个全体教职工的考勤规则,无法修改");
|
|
|
+ } else if (attendanceRuleCategory.getRoleId() == 3) {
|
|
|
+ throw new MyException("已存在一个全体学生的考勤规则,无法修改");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
categoryMapper.updateById(attendanceRuleCategory);
|
|
|
//********************************* AttendanceRuleDetails 增删改 开始 *******************************************/
|
|
|
{
|
|
|
@@ -429,6 +800,22 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean copy(CopyAttendanceRuleCategoryDto dto) {
|
|
|
+ AttendanceRuleCategory attendanceRuleCategory = this.getByIdDeep(dto.getId());
|
|
|
+
|
|
|
+ AddAttendanceRuleCategoryDto addAttendanceRuleCategoryDto = BeanUtil.toBean(attendanceRuleCategory, AddAttendanceRuleCategoryDto.class);
|
|
|
+ addAttendanceRuleCategoryDto.setName(dto.getName());
|
|
|
+ addAttendanceRuleCategoryDto.setStartDate(dto.getStartDate());
|
|
|
+ addAttendanceRuleCategoryDto.setEndDate(dto.getEndDate());
|
|
|
+
|
|
|
+ addAttendanceRuleCategoryDto.setAttendanceRuleDetailsList(BeanUtil.copyToList(attendanceRuleCategory.getAttendanceRuleDetailsList(), AddAttendanceRuleDetailsDto.class));
|
|
|
+ addAttendanceRuleCategoryDto.setAttendanceUserRelationList(JSONObject.parseArray(attendanceRuleCategory.getUserRelation(), AddAttendanceUserRelationDto.class));
|
|
|
+
|
|
|
+ return add(addAttendanceRuleCategoryDto);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean delete(List<Long> ids) {
|