From a6cd5119052c3c9f77b41c5d4017e0b7b0077ba0 Mon Sep 17 00:00:00 2001 From: fl <3098731433@qq.com> Date: Mon, 20 Jan 2025 13:41:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=B7=BB=E5=8A=A0=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bonus/system/att/dao/AttGroupDao.java | 2 + .../system/att/dao/AttSourceDataDao.java | 8 +- .../bonus/system/att/entity/AttGroupBean.java | 10 +++ .../att/service/AttGroupServiceImpl.java | 74 ++++++++++++++++--- .../com/bonus/system/att/tasks/AttTasks.java | 7 +- .../com/bonus/system/att/tasks/MsgTasks.java | 49 ++++++++++++ .../system/basic/dao/SysNoticeMapper.java | 5 ++ .../basic/service/SysNoticeService.java | 5 ++ .../service/impl/SysNoticeServiceImpl.java | 11 +++ .../resources/mapper/att/AttGroupMapper.xml | 14 +++- .../mapper/att/AttSourceDataMapper.xml | 44 +++-------- .../mapper/basic/SysNoticeMapper.xml | 29 ++++++++ 12 files changed, 203 insertions(+), 55 deletions(-) diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttGroupDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttGroupDao.java index 1aba5d9..959dae5 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttGroupDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttGroupDao.java @@ -77,6 +77,8 @@ public interface AttGroupDao { */ void deleteAttGroupRelationPerson(Long groupId); + void deleteAttGroupPersonByUserId(List delList); + /** * 修改考勤组 * @param bean 参数 diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java index 71f6c62..8b027c4 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java @@ -30,7 +30,7 @@ public interface AttSourceDataDao { * 查出绑定考勤组的所有人员 * @return list bean */ - List getAllPerson(); + List getAllPerson(String pushDate); /** * 新增到考勤数据表 @@ -136,12 +136,6 @@ public interface AttSourceDataDao { */ List getLeaveData(); - /** - * 查出最近三天没有进出的人员考勤记录 - * @return list bean - */ - List getSourceAttNoInOutData(); - void updateHisData(String date); void delHisData(String date); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttGroupBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttGroupBean.java index 31f8753..297596f 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttGroupBean.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttGroupBean.java @@ -130,6 +130,16 @@ public class AttGroupBean { */ private PersonAttWorkDayBean attWorkDayBean; + /** + * 用户编号 + */ + private Long userId; + + /** + * 时间 + */ + private String currentDay; + public AttGroupBean(Long groupId, String attDay, String toWorkTime, String offWorkTime, Long todayClockNum, Long lateMinute, Long leaveMinute, Long absenteeismLateMinute, Long absenteeismLeaveMinute, diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttGroupServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttGroupServiceImpl.java index 2449e6f..a4c2566 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttGroupServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttGroupServiceImpl.java @@ -12,10 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -108,17 +105,74 @@ public class AttGroupServiceImpl implements AttGroupService { if (i > 0) { //新增考勤组设置表 int j = attGroupDao.updateAttGroupSetting(bean); - //删除考勤组绑定人员 - attGroupDao.deleteAttGroupRelationPerson(bean.getGroupId()); - //新增考勤组绑定人员表 - int x = attGroupDao.insertAttGroupPerson(checkOrgAllList); - if (j > 0 && (x == bean.getCheckOrgList().size())) { - result = 1; + +// //删除考勤组绑定人员 +// attGroupDao.deleteAttGroupRelationPerson(bean.getGroupId()); +// //新增考勤组绑定人员表 +// int x = attGroupDao.insertAttGroupPerson(checkOrgAllList); +// if (j > 0 && (x == bean.getCheckOrgList().size())) { +// result = 1; +// } + //代码逻辑修改,改为增量更新 + //1.先去查目前考勤组有哪些人员 + List checkOrgList = attGroupDao.selectAttGroupUserById(bean.getGroupId()); + //2.比较新的人员与目前考勤组人员做对比,如果目前考勤组人员独有,则删除,如果新选人员独有,则新增,两个都有,则不动 + //2.1对比人员,生成各自的list + Map> stringListMap = compareByUserId(checkOrgAllList, checkOrgList); + List addList = stringListMap.get("onlyInList1"); + List delList = stringListMap.get("onlyInList2"); + //2.2 删除人员,新增人员 + if (!delList.isEmpty()) { + //删除考勤组绑定人员 + attGroupDao.deleteAttGroupPersonByUserId(delList); } + if (!addList.isEmpty()) { + //添加考勤组绑定人员 + attGroupDao.insertAttGroupPerson(addList); + } + return 1; } return result; } + public Map> compareByUserId( + List list1, + List list2) { + + // 创建 userId 到 AttGroupCheckOrgBean 的映射 + Map map1 = new HashMap<>(); + for (AttGroupCheckOrgBean bean : list1) { + map1.put(bean.getUserId(), bean); + } + + Map map2 = new HashMap<>(); + for (AttGroupCheckOrgBean bean : list2) { + map2.put(bean.getUserId(), bean); + } + // 存储结果 + Map> resultMap = new HashMap<>(); + resultMap.put("onlyInList1", new ArrayList<>()); + resultMap.put("onlyInList2", new ArrayList<>()); + resultMap.put("intersection", new ArrayList<>()); + // 计算交集和差集 + Set allKeys = new HashSet<>(map1.keySet()); + allKeys.addAll(map2.keySet()); + for (String key : allKeys) { + if (map1.containsKey(key) && map2.containsKey(key)) { + // 交集 + resultMap.get("intersection").add(map1.get(key)); + } else if (map1.containsKey(key)) { + // 仅存在于list1中 + resultMap.get("onlyInList1").add(map1.get(key)); + } else if (map2.containsKey(key)) { + // 仅存在于list2中 + resultMap.get("onlyInList2").add(map2.get(key)); + } + } + return resultMap; + } + + private List dealWithOrgUser(AttGroupBean bean, Long bean1) { //只有部门的将部门变成部门下所有人(去除掉其他考勤组选的人) List checkOrgAllList = bean.getCheckOrgList(); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java index e7b5121..e0c2697 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java @@ -64,7 +64,7 @@ public class AttTasks { private volatile boolean executed = false; // 标志位,表示任务是否已经执行过 // @Scheduled(cron = "0 0/10 * * * ?") - @Scheduled(initialDelay = 60000, fixedDelay = 60000 * 10) +// @Scheduled(initialDelay = 60000, fixedDelay = 60000 * 10) @Async public void getAttTasks() { log.info("--------考勤定时器开启------"); @@ -142,7 +142,7 @@ public class AttTasks { */ private void pushAttData(String pushDate, int pushType) { //获取黔送云的考勤数据 - getQsyAttendanceData(pushDate, pushType); +// getQsyAttendanceData(pushDate, pushType); //获取考勤机中的考勤数据 getMachineAttendanceData(pushDate, pushType); // //查出每一个考勤组的应出勤天数以及考勤组的规则 @@ -383,7 +383,8 @@ public class AttTasks { */ private void insertAttData(List groupList, String pushDate, int pushType) { //获取所有的用户 - List listPerson = attSourceDataDao.getAllPerson(); + // 2025-01-17 添加时间,查出每个人在对应时间存在的考勤组 + List listPerson = attSourceDataDao.getAllPerson(pushDate); if (!listPerson.isEmpty()) { listPerson.forEach(v -> { groupList.stream() diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/MsgTasks.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/MsgTasks.java index 27aa5cf..ed32c8b 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/MsgTasks.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/MsgTasks.java @@ -23,6 +23,9 @@ import org.springframework.scheduling.annotation.Scheduled; import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -150,4 +153,50 @@ public class MsgTasks { log.info("--------轮休临时外出异常推送定时器开启------"); } + + /** + * 考勤设置历史时间消息推送 + *每天早七晚十一 + */ +// @Scheduled(cron = "0 10 0,7,10 * * ?") + @Scheduled(initialDelay = 6000 * 2,fixedDelay = 60000 * 30) + @Async + public void getAttSettingHistoryTask(){ + log.info("--------考勤设置历史时间消息推送定时器开启------"); + String startDate = "2024-10-01"; + String endDate = "2025-01-20"; + List dateList = getStrDateListBetween(startDate, endDate); + if(dateList.isEmpty()){ + dateList.add(DateUtil.today()); + } + for (String s : dateList) { + List attList = noticeService.getAttSettingHistoryDate(s); + noticeService.insertAttSettingHistoryData(attList); + } + log.info("--------考勤设置历史时间消息推送定时器开启------"); + } + + public static List getStrDateListBetween(String startDateString, String endDateString) { + List dateList = new ArrayList<>(); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + try { + // 解析开始日期和结束日期 + Date startDate = dateFormat.parse(startDateString); + Date endDate = dateFormat.parse(endDateString); + // 创建 Calendar 实例并设置为开始日期 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + // 循环直到当前日期超过结束日期 + while (!calendar.getTime().after(endDate)) { + // 将日期格式化为字符串,并添加到列表中 + dateList.add(dateFormat.format(calendar.getTime())); + // 将日期加一天 + calendar.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (ParseException ignored) { + } + return dateList; + } + + } \ No newline at end of file diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysNoticeMapper.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysNoticeMapper.java index 28485a7..1373da7 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysNoticeMapper.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysNoticeMapper.java @@ -4,6 +4,7 @@ import com.bonus.system.api.domain.MapVo; import com.bonus.system.api.domain.SysDictData; import com.bonus.system.api.domain.SysRole; import com.bonus.system.api.domain.SysUser; +import com.bonus.system.att.entity.AttGroupBean; import com.bonus.system.basic.domain.SysNotice; import com.bonus.system.basic.domain.SysUserOrg; import com.bonus.system.basic.domain.SysUserPost; @@ -65,4 +66,8 @@ public interface SysNoticeMapper List getAttUserIdByOrgId(List orgList); int delNotice(SysNotice bean); + + List getAttSettingHistoryDate(String currentDay); + + void insertAttSettingHistoryData(List attList); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysNoticeService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysNoticeService.java index ce66c27..0dc2dbc 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysNoticeService.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysNoticeService.java @@ -2,6 +2,7 @@ package com.bonus.system.basic.service; import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.system.att.entity.AttGroupBean; import com.bonus.system.basic.domain.SysNotice; import org.apache.ibatis.annotations.Param; @@ -61,4 +62,8 @@ public interface SysNoticeService { * @param bean */ AjaxResult delNotice(SysNotice bean); + + List getAttSettingHistoryDate(String s); + + void insertAttSettingHistoryData(List attList); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysNoticeServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysNoticeServiceImpl.java index 38e1a7e..a906ae0 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysNoticeServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysNoticeServiceImpl.java @@ -2,6 +2,7 @@ package com.bonus.system.basic.service.impl; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.system.att.entity.AttGroupBean; import com.bonus.system.basic.dao.SysNoticeMapper; import com.bonus.system.basic.domain.SysNotice; import com.bonus.system.basic.domain.SysUserRole; @@ -102,4 +103,14 @@ public class SysNoticeServiceImpl implements SysNoticeService return AjaxResult.error(); } } + + @Override + public List getAttSettingHistoryDate(String currentDay) { + return noticeMapper.getAttSettingHistoryDate(currentDay); + } + + @Override + public void insertAttSettingHistoryData(List attList) { + noticeMapper.insertAttSettingHistoryData(attList); + } } diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttGroupMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttGroupMapper.xml index 7c777f5..aae95ce 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttGroupMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttGroupMapper.xml @@ -104,7 +104,7 @@ set is_active = 0 where group_id = #{groupId}; update att_group_person_relation - set is_active = 0 + set is_active = 0,expiring_time = now() where group_id = #{groupId}; @@ -114,6 +114,14 @@ where group_id = #{groupId}; + + + update att_group_person_relation + set is_active = 0,expiring_time = now() + where user_id = #{params.userId}; + + + insert into att_group(group_name, att_type, create_user_id) values (#{groupName}, #{attType}, #{createUserId}); @@ -150,10 +158,10 @@ - insert into att_group_person_relation(group_id, org_id, user_id) + insert into att_group_person_relation(group_id, org_id, user_id, effective_time) values - (#{params.groupId}, #{params.orgId}, #{params.userId}) + (#{params.groupId}, #{params.orgId}, #{params.userId}, now()) diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml index 88ef64e..91a9797 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml @@ -159,19 +159,15 @@ - - + \ No newline at end of file