From 7c3423327993995766e93a24cc1529e6fa7d01d8 Mon Sep 17 00:00:00 2001 From: lSun <15893999301@qq.com> Date: Fri, 27 Dec 2024 00:25:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E9=9A=94?= =?UTF-8?q?=E7=A6=BB=EF=BC=8Cbug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lSun <15893999301@qq.com> --- .../com/bonus/system/api/domain/SysUser.java | 2 + .../bonus/system/att/dao/OrgChangeDao.java | 2 + .../att/service/OrgChangeServiceImpl.java | 4 + .../com/bonus/system/att/tasks/AttTasks.java | 6 +- .../bonus/system/att/tasks/WechatTasks.java | 4 +- .../system/att/utils/IpAndPathConfig.java | 2 +- .../basic/controller/SysUserController.java | 3 + .../bonus/system/basic/dao/SysUserMapper.java | 8 ++ .../service/impl/SysUserServiceImpl.java | 110 +++++++++++++++++- .../holiday/service/HolidayServiceImpl.java | 6 +- .../mapper/att/AttSourceDataMapper.xml | 2 +- .../resources/mapper/att/OrgChangeMapper.xml | 4 + .../resources/mapper/att/WechatPushMapper.xml | 4 +- .../resources/mapper/basic/SysUserMapper.xml | 20 ++++ .../wechat/WechatLeaveReportingMapper.xml | 4 +- .../resources/mapper/wechat/WechatMapper.xml | 8 +- 16 files changed, 169 insertions(+), 20 deletions(-) diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java index 4f0499a..a2729b6 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java @@ -178,4 +178,6 @@ public class SysUser extends BaseEntity { */ private String roleType; private String orgListId; + + private List orgListIds; } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/OrgChangeDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/OrgChangeDao.java index e63a0f3..5d600e9 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/OrgChangeDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/OrgChangeDao.java @@ -70,4 +70,6 @@ public interface OrgChangeDao { void updateAttGroupByUserId(OrgChangeBean item); void updateOrgChangeIsApply(OrgChangeBean item); + + void updateOrgByUserIdAndOldOrgId(OrgChangeBean o); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/OrgChangeServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/OrgChangeServiceImpl.java index 61b2366..950c796 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/OrgChangeServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/OrgChangeServiceImpl.java @@ -92,6 +92,10 @@ public class OrgChangeServiceImpl implements OrgChangeService { } i = orgChangeDao.orgChangeCheck(o); + if ("1".equals(o.getIsCheck())) { + orgChangeDao.updateOrgByUserIdAndOldOrgId(o); +// orgChangeDao.updateOrgByUserId(o); + } } return i; } 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 53194e3..8f9104d 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 @@ -59,8 +59,8 @@ public class AttTasks { private static final int THREAD_POOL_SIZE = 5; // 线程池大小 private volatile boolean executed = false; // 标志位,表示任务是否已经执行过 - // @Scheduled(cron = "0 0/10 * * * ?") - @Scheduled(initialDelay = 6000, fixedDelay = 60000 * 10) +// @Scheduled(cron = "0 0/10 * * * ?") + @Scheduled(initialDelay = 60000, fixedDelay = 60000 * 10) @Async public void getAttTasks() { log.info("--------考勤定时器开启------"); @@ -72,7 +72,7 @@ public class AttTasks { /** * 历史考勤数据 */ - @Scheduled(initialDelay = 60000 * 4,fixedDelay = 60000 * 30) +// @Scheduled(initialDelay = 60000 * 4,fixedDelay = 60000 * 30) @Async public void getHisAttTasks() { log.info("--------考勤定时器开启------"); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java index e1514e7..b47fea5 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/WechatTasks.java @@ -76,8 +76,8 @@ public class WechatTasks { /** * 人员基础数据同步定时器 */ - @Scheduled(cron = "0 0/10 * * * ?") -// @Scheduled(initialDelay = 6000,fixedDelay = 60000 * 10) +// @Scheduled(cron = "0 0/10 * * * ?") + @Scheduled(initialDelay = 60000,fixedDelay = 60000 * 10) @Async public void pushPersonTask() { log.info("--------人员基础数据同步定时器开启------"); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/utils/IpAndPathConfig.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/utils/IpAndPathConfig.java index 642cb02..28f5d7c 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/utils/IpAndPathConfig.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/utils/IpAndPathConfig.java @@ -14,7 +14,7 @@ public class IpAndPathConfig { */ // @Value("${environment}") // public static String environment; - public static String environment = "test"; + public static String environment = "prod"; /** * 小程序相关 diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysUserController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysUserController.java index aca7082..28cf88d 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysUserController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysUserController.java @@ -177,6 +177,9 @@ public class SysUserController extends BaseController { return error("修改用户'" + user.getUserName() + "'失败,用户名已存在"); } user.setUpdateBy(String.valueOf(SecurityUtils.getLoginUser().getSysUser().getUserId())); + + // 修改leave_apply中的org_id + return toAjax(userService.updateUser(user)); } catch (Exception e) { logger.error(e.toString(),e); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysUserMapper.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysUserMapper.java index e6feada..0306aba 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysUserMapper.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysUserMapper.java @@ -5,12 +5,14 @@ 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.att.entity.OrgChangeBean; +import com.bonus.system.basic.domain.SysOrg; import com.bonus.system.basic.domain.SysUserOrg; import com.bonus.system.basic.domain.SysUserPost; import com.bonus.system.basic.domain.SysUserRole; import com.bonus.system.holiday.entity.HolidayKeyBean; import org.apache.ibatis.annotations.Mapper; import com.bonus.system.api.domain.SysUser; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -234,4 +236,10 @@ public interface SysUserMapper String getUserIdList(String userIdList); List getManagerList(Long userId); + + void updateOrgIdByUserId(SysUser users); + + void updateOrgIdByUserIdWithOutSame(@Param("user") SysUser users); + + SysOrg findOrgByOrgId(SysUser users); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysUserServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysUserServiceImpl.java index 6d8acbe..cb4c84a 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysUserServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysUserServiceImpl.java @@ -15,6 +15,7 @@ import com.bonus.system.api.domain.SysRole; import com.bonus.system.api.model.LoginUser; import com.bonus.system.att.entity.OrgChangeBean; import com.bonus.system.att.service.OrgChangeService; +import com.bonus.system.basic.domain.SysOrg; import com.bonus.system.basic.domain.SysUserOrg; import com.bonus.system.basic.domain.SysUserPost; import com.bonus.system.basic.domain.SysUserRole; @@ -324,13 +325,118 @@ public class SysUserServiceImpl implements SysUserService } userMapper.deleteUserOrgByUserId(userId); insertUserOrg(user); - return userMapper.updateUser(user); + //处理人员组织变更,休假/外出/等审批组织 + dealOrgUserLeave(orgIdsByUserId,user); + return userMapper.updateUser(user); } catch (Exception e) { - log.error(e.toString(),e); + log.error(e.toString(),e); return 0; } } + private static Map> compareMaps(Map A, Map B) { + Set allKeys = new HashSet<>(A.keySet()); + allKeys.addAll(B.keySet()); + Map> map = new HashMap<>(); + List orgIds = new ArrayList<>(); + List sameList = new ArrayList<>(); + for (Long key : allKeys) { + Long valueA = A.get(key); + Long valueB = B.get(key); + if (valueA == null) { + orgIds.add(valueB); + System.out.println("Key " + key + " is added in B with value " + valueB); + } else if (valueB == null) { + System.out.println("Key " + key + " is removed from A"); + } else if (!valueA.equals(valueB)) { + orgIds.add(valueB); + System.out.println("Key " + key + ": Changed from " + valueA + " to " + valueB); + } else if (valueA.equals(valueB)) { + sameList.add(valueB); + System.out.println("Key " + key + ": no Changed from " + valueA + " to " + valueB); + } + } + map.put("same",sameList); + map.put("notSame",orgIds); + return map; + } + + private static boolean compareSameMaps(Map A, Map B) { + Set allKeys = new HashSet<>(A.keySet()); + allKeys.addAll(B.keySet()); + List orgIds = new ArrayList<>(); + for (Long key : allKeys) { + Long valueA = A.get(key); + Long valueB = B.get(key); + if (valueA == null) { + System.out.println("Key " + key + " is added in B with value " + valueB); + } else if (valueB == null) { + System.out.println("Key " + key + " is removed from A"); + } else if (!valueA.equals(valueB)) { + System.out.println("Key " + key + ": Changed from " + valueA + " to " + valueB); + } else if (valueA.equals(valueB)) { + orgIds.add(valueB); + System.out.println("Key " + key + ": no Changed from " + valueA + " to " + valueB); + } + } + if(!orgIds.isEmpty() && orgIds.size() == A.size()){ + return true; + } + return false; + } + + private static Map arrayToMapUsingElementToList(Long[] array) { + Map map = new HashMap<>(); + for (int i = 0; i < array.length; i++) { + // 这里我们简单地使用元素自身作为值 + map.put(array[i], array[i]); + } + return map; + } + + /** + * 处理用户退出组织时的逻辑 + * 当用户退出组织时,需要更新或处理与该用户相关的组织信息 + * 此方法旨在根据用户ID获取其相关的组织ID列表,并执行相应的处理逻辑 + * + * @param orgIdsByUserId 用户相关的组织ID列表,表示该用户属于哪些组织 + * @param user 退出组织的用户信息,包含用户ID等必要数据 + */ + private void dealOrgUserLeave(Long[] orgIdsByUserId, SysUser user) { + + //比较老旧组织的是否发生改变 + + Map oldOrgArray = arrayToMapUsingElementToList(orgIdsByUserId); + Map newOrgArray = arrayToMapUsingElementToList(user.getOrgIds()); + boolean isSame = compareSameMaps(oldOrgArray, newOrgArray); + if(isSame){ + //无变化集合 + }else{ + //有变化的集合 + Map> map = compareMaps(oldOrgArray, newOrgArray); + if(user.getOrgIds().length == 1){ + //A -> B,AB -> A,AB -> C + SysUser users = new SysUser(); + users.setUserId(user.getUserId()); + users.setOrgId(user.getOrgIds()[0] + ""); + SysOrg orgBean = userMapper.findOrgByOrgId(users); + users.setOrgName(orgBean.getOrgName()); + userMapper.updateOrgIdByUserId(users); + }else{ + //A -> BC,AB -> AC,AB -> CD + List sameList = map.get("same"); + List notSameList = map.get("notSame"); + SysUser users = new SysUser(); + users.setUserId(user.getUserId()); + users.setOrgId(notSameList.get(0) + ""); + users.setOrgListIds(sameList); + SysOrg orgBean = userMapper.findOrgByOrgId(users); + users.setOrgName(orgBean.getOrgName()); + userMapper.updateOrgIdByUserIdWithOutSame(users); + } + } + } + public static boolean containsOrgId(Long[] orgIds, Long orgId) { // 将数组转换为 List return Arrays.asList(orgIds).contains(orgId); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/service/HolidayServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/service/HolidayServiceImpl.java index 915f024..32b6c6d 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/service/HolidayServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/service/HolidayServiceImpl.java @@ -204,13 +204,13 @@ public class HolidayServiceImpl implements HolidayService { } else if (ownStatus.contains(o.getExamineStatus())) { o.setUpdateUserId(updateUserId); } - i = holidayDao.changeHolidayStatus(o); - if (i > 0 && examineStatus.contains(o.getExamineStatus())) { + i = holidayDao.changeHolidayStatus(o); + if (i > 0 && examineStatus.contains(o.getExamineStatus())) { //获取提交请假的人 List userList =holidayDao.getUserIdById(o.getId()); // 将 List 转换为数组 if(!userList.isEmpty()){ - if (userList.size() > 1) { // 检查是否有多个元素 + if (userList.size() > 1) { // 检查是否有多个元素 // 如果有多个元素,检查并移除值为1的元素 while (userList.contains(updateUserId)) { userList.remove(Long.valueOf(updateUserId)); 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 90a0922..bd1062d 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 @@ -127,7 +127,7 @@ attendance_date as attCurrentDay, attendance_time as attCurrentTime, CASE attendance_type WHEN '上班' THEN 1 ELSE 2 END as attType, '0' as attAddress, lon as attLon, lat as attLat, '1' as dataSource - from gz_cloud_test.fc_sup_attendance sup + from gz_cloud.fc_sup_attendance sup where sup.attendance_date >= #{pushDate} diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/OrgChangeMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/OrgChangeMapper.xml index 0601b5d..1aaf25a 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/OrgChangeMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/OrgChangeMapper.xml @@ -128,4 +128,8 @@ update org_change set is_apply = #{isApply} where id = #{id} + + UPDATE leave_apply SET org_id = #{newOrgId},org_name = #{newOrgName} + WHERE user_id = #{userId} and org_id = #{oldOrgId} + \ No newline at end of file diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/WechatPushMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/WechatPushMapper.xml index 3ed2399..6448d1e 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/WechatPushMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/WechatPushMapper.xml @@ -33,7 +33,7 @@ - replace INTO gz_cloud_test.fc_sup_attendance ( + replace INTO gz_cloud.fc_sup_attendance ( name, id_number, org_id, @@ -164,7 +164,7 @@ If(PROJECT_ID is null,0,PROJECT_ID) AS proId, If(ORG_ID is null,0,ORG_ID) AS orgId FROM - gz_cloud_test.bm_sup_attend_history + gz_cloud.bm_sup_attend_history WHERE ID_NUMBER = #{idNumber} limit 1 diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysUserMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysUserMapper.xml index 3d5475e..20d50f7 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysUserMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysUserMapper.xml @@ -98,6 +98,21 @@ where user_id = #{userId} and org_id = #{oldOrgId}; + + UPDATE leave_apply SET org_id = #{orgId},org_name = #{orgName} + WHERE user_id = #{userId} + + + UPDATE leave_apply SET org_id = #{user.orgId},org_name = #{user.orgName} + WHERE user_id = #{user.userId} + + and org_id not in + + #{id} + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatLeaveReportingMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatLeaveReportingMapper.xml index c786f0c..46f62fd 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatLeaveReportingMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatLeaveReportingMapper.xml @@ -38,9 +38,9 @@ and date_format(l.leave_end_date,'%y%m%d') <= date_format(#{params.params.endTime},'%y%m%d') - + and l.org_id in ( - + #{item} ) diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatMapper.xml index 99208a4..c9d5fb0 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/wechat/WechatMapper.xml @@ -28,12 +28,12 @@ WHERE ad.is_active = '1' AND ad.data_source = '3' AND sd.dict_value IN ('1', '2', '4', '7', '8', '9', '10', '19') - - AND su.user_name like concat('%', #{userName}, '%') + + AND su.user_name like concat('%', #{bean.userName}, '%') - - AND ad.att_current_day BETWEEN #{startDate} AND #{endDate} + + AND ad.att_current_day BETWEEN #{bean.startDate} AND #{bean.endDate}