From 0b4ecffeec43984121be22b344783c3dbc7a317d Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Thu, 20 Feb 2025 16:36:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=87=E6=9C=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/controller/WeChatController.java | 80 ++++++++++++++++++- .../manager/manager/dao/VerifyDateDao.java | 26 ++++++ .../boot/manager/manager/dao/WeChatDao.java | 11 +++ .../manager/service/WeChatService.java | 10 +++ .../service/impl/VerifyDateService.java | 45 +++++++++++ .../service/impl/WeChatServiceImpl.java | 10 ++- .../mappers/wechat/VerifyDateMapper.xml | 21 +++++ .../resources/mappers/wechat/WeChatMapper.xml | 35 +++++--- 8 files changed, 224 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/bonus/boot/manager/manager/dao/VerifyDateDao.java create mode 100644 src/main/java/com/bonus/boot/manager/manager/service/impl/VerifyDateService.java create mode 100644 src/main/resources/mappers/wechat/VerifyDateMapper.xml diff --git a/src/main/java/com/bonus/boot/manager/manager/controller/WeChatController.java b/src/main/java/com/bonus/boot/manager/manager/controller/WeChatController.java index 72396f1..11e13cc 100644 --- a/src/main/java/com/bonus/boot/manager/manager/controller/WeChatController.java +++ b/src/main/java/com/bonus/boot/manager/manager/controller/WeChatController.java @@ -7,21 +7,22 @@ import com.bonus.boot.manager.manager.entity.*; import com.bonus.boot.manager.manager.model.SysUser; import com.bonus.boot.manager.manager.service.UserService; import com.bonus.boot.manager.manager.service.WeChatService; +import com.bonus.boot.manager.manager.service.impl.VerifyDateService; import com.bonus.boot.manager.manager.utils.AjaxResult; import com.bonus.boot.manager.manager.utils.ServerResponse; +import com.bonus.boot.manager.manager.utils.StringUtils; import com.bonus.boot.manager.manager.utils.UserUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import javax.annotation.Resource; +import java.util.*; /** * 微信小程序接口 @@ -34,6 +35,9 @@ public class WeChatController { @Autowired private WeChatService service; + @Resource(name = "VerifyDateService") + private VerifyDateService verifyDateService; + @GetMapping("getSelectUserCurrent") public ServerResponse getSelectUserCurrent() { @@ -63,6 +67,14 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = EvectionBean.class) public ServerResponse addEvection(@Validated @RequestBody EncryptedReq data) { try{ + String[] travelersArr = data.getData().getTravelers().split(","); + for (String traveler : travelersArr) { + data.getData().setUserId(Long.valueOf(traveler)); + String result = verifyDateService.verifyDate(data.getData(),1); + if(StringUtils.isNotEmpty(result)){ + return ServerResponse.createErroe(result); + } + } int res = service.insertEvection(data.getData()); return ServerResponse.createSuccess(res); }catch (Exception e){ @@ -120,6 +132,12 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = LeaveReportingBean.class)//加解密统一管理 public ServerResponse addHoliday(@Validated @RequestBody EncryptedReq data) { try{ + EvectionBean bean = new EvectionBean(); + BeanUtils.copyProperties(data.getData(),bean); + String result = verifyDateService.verifyDate(bean,2); + if(StringUtils.isNotEmpty(result)){ + return ServerResponse.createErroe(result); + } int res = service.insertLeaveReporting(data.getData()); return ServerResponse.createSuccess(res); }catch (Exception e){ @@ -239,6 +257,12 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = HolidayBean.class)//加解密统一管理 public ServerResponse insertHoliday(@Validated @RequestBody EncryptedReq data) { try{ + EvectionBean bean = new EvectionBean(); + BeanUtils.copyProperties(data.getData(),bean); + String result = verifyDateService.verifyDate(bean,2); + if(StringUtils.isNotEmpty(result)){ + return ServerResponse.createErroe(result); + } int res = service.insertHoliday(data.getData()); return ServerResponse.createSuccess(res); }catch (Exception e){ @@ -255,6 +279,18 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = HolidayBean.class)//加解密统一管理 public ServerResponse updateHoliday(@Validated @RequestBody EncryptedReq data){ try { + EvectionBean bean = new EvectionBean(); + BeanUtils.copyProperties(data.getData(),bean); + // 判断数据是否处于同步状态,若处于同步状态则禁止操作 + Integer syncStatus = service.dataIsSync(bean,2); + if(Objects.equals(syncStatus,1)){ + return ServerResponse.createErroe("数据同步中,请勿执行修改操作"); + } + // 判断日期是否存在冲突 + String result = verifyDateService.verifyDate(bean,2); + if(StringUtils.isNotEmpty(result)){ + return ServerResponse.createErroe(result); + } return ServerResponse.createSuccess(service.updateHoliday(data.getData())); } catch (Exception e) { log.error(e.toString(),e); @@ -269,6 +305,13 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = HolidayBean.class)//加解密统一管理 public ServerResponse deleteHolidayById(@Validated @RequestBody EncryptedReq data){ try { + EvectionBean bean = new EvectionBean(); + BeanUtils.copyProperties(data.getData(),bean); + // 判断数据是否处于同步状态,若处于同步状态则禁止操作 + Integer syncStatus = service.dataIsSync(bean,2); + if(Objects.equals(syncStatus,1)){ + return ServerResponse.createErroe("数据同步中,请勿执行删除操作"); + } return ServerResponse.createSuccess(service.deleteHolidayById(data.getData())); } catch (Exception e) { log.error(e.toString(),e); @@ -284,6 +327,17 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = LeaveReportingBean.class)//加解密统一管理 public ServerResponse editHoliday(@Validated @RequestBody EncryptedReq data){ try { + EvectionBean bean = new EvectionBean(); + BeanUtils.copyProperties(data.getData(),bean); + // 判断数据是否处于同步状态,若处于同步状态则禁止操作 + Integer syncStatus = service.dataIsSync(bean,2); + if(Objects.equals(syncStatus,1)){ + return ServerResponse.createErroe("数据同步中,请勿执行修改操作"); + } + String result = verifyDateService.verifyDate(bean,2); + if(StringUtils.isNotEmpty(result)){ + return ServerResponse.createErroe(result); + } return ServerResponse.createSuccess(service.editHoliday(data.getData())); } catch (Exception e) { log.error(e.toString(),e); @@ -298,6 +352,19 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = EvectionBean.class)//加解密统一管理 public ServerResponse editEvection(@Validated @RequestBody EncryptedReq data){ try { + // 判断数据是否处于同步状态,若处于同步状态则禁止操作 + Integer syncStatus = service.dataIsSync(data.getData(),2); + if(Objects.equals(syncStatus,1)){ + return ServerResponse.createErroe("数据同步中,请勿执行修改操作"); + } + String[] travelersArr = data.getData().getTravelers().split(","); + for (String traveler : travelersArr) { + data.getData().setUserId(Long.valueOf(traveler)); + String result = verifyDateService.verifyDate(data.getData(),1); + if(StringUtils.isNotEmpty(result)){ + return ServerResponse.createErroe(result); + } + } return ServerResponse.createSuccess(service.editEvection(data.getData())); } catch (Exception e) { log.error(e.toString(),e); @@ -312,6 +379,11 @@ public class WeChatController { @DecryptAndVerify(decryptedClass = EvectionBean.class)//加解密统一管理 public ServerResponse deleteEvectionById(@Validated @RequestBody EncryptedReq data){ try { + // 判断数据是否处于同步状态,若处于同步状态则禁止操作 + Integer syncStatus = service.dataIsSync(data.getData(),1); + if(Objects.equals(syncStatus,1)){ + return ServerResponse.createErroe("数据同步中,请勿执行删除操作"); + } return ServerResponse.createSuccess(service.deleteEvectionById(data.getData())); } catch (Exception e) { log.error(e.toString(),e); diff --git a/src/main/java/com/bonus/boot/manager/manager/dao/VerifyDateDao.java b/src/main/java/com/bonus/boot/manager/manager/dao/VerifyDateDao.java new file mode 100644 index 0000000..664ccc2 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/manager/dao/VerifyDateDao.java @@ -0,0 +1,26 @@ +package com.bonus.boot.manager.manager.dao; + +import com.bonus.boot.manager.manager.entity.EvectionBean; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * @className:VerifyDateDao + * @author:cwchen + * @date:2025-02-20-14:48 + * @version:1.0 + * @description: + */ +@Repository(value = "VerifyDateDao") +public interface VerifyDateDao { + /** + * 判断请假、轮休、出差、外出 日期是否出现重叠 + * @param bean + * @return List> + * @author cwchen + * @date 2025/2/20 15:44 + */ + List> verifyDate(EvectionBean bean); +} diff --git a/src/main/java/com/bonus/boot/manager/manager/dao/WeChatDao.java b/src/main/java/com/bonus/boot/manager/manager/dao/WeChatDao.java index ed97199..b685090 100644 --- a/src/main/java/com/bonus/boot/manager/manager/dao/WeChatDao.java +++ b/src/main/java/com/bonus/boot/manager/manager/dao/WeChatDao.java @@ -6,6 +6,7 @@ import com.bonus.boot.manager.manager.model.SysUser; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Repository; import java.util.List; @@ -142,4 +143,14 @@ public interface WeChatDao { int editEvection(EvectionBean data); int deleteEvectionById(EvectionBean data); + + /** + * 判断数据是否处于同步状态,若处于同步状态则禁止操作 + * @param data + * @param type + * @return Integer + * @author cwchen + * @date 2025/2/20 14:09 + */ + Integer dataIsSync(@Param("params") EvectionBean data,@Param("type") int type); } diff --git a/src/main/java/com/bonus/boot/manager/manager/service/WeChatService.java b/src/main/java/com/bonus/boot/manager/manager/service/WeChatService.java index 9066004..847d704 100644 --- a/src/main/java/com/bonus/boot/manager/manager/service/WeChatService.java +++ b/src/main/java/com/bonus/boot/manager/manager/service/WeChatService.java @@ -120,4 +120,14 @@ public interface WeChatService { int editEvection(EvectionBean data); int deleteEvectionById(EvectionBean data); + + /** + * 判断数据是否处于同步状态,若处于同步状态则禁止操作 + * @param data + * @param type + * @return Integer + * @author cwchen + * @date 2025/2/20 14:07 + */ + Integer dataIsSync(EvectionBean data, int type); } diff --git a/src/main/java/com/bonus/boot/manager/manager/service/impl/VerifyDateService.java b/src/main/java/com/bonus/boot/manager/manager/service/impl/VerifyDateService.java new file mode 100644 index 0000000..c956c99 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/manager/service/impl/VerifyDateService.java @@ -0,0 +1,45 @@ +package com.bonus.boot.manager.manager.service.impl; + +import com.bonus.boot.manager.manager.dao.VerifyDateDao; +import com.bonus.boot.manager.manager.entity.EvectionBean; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @className:VerifyDateService + * @author:cwchen + * @date:2025-02-20-14:47 + * @version:1.0 + * @description:请假、轮休、出差、外出-判断日期是否重叠业务层 + */ +@Service(value = "VerifyDateService") +public class VerifyDateService { + + @Resource(name = "VerifyDateDao") + private VerifyDateDao dao; + + public String verifyDate(EvectionBean bean,int type) { + List> list = dao.verifyDate(bean); + if(CollectionUtils.isNotEmpty(list)){ + StringBuilder sb = new StringBuilder(); + Map dataMap = list.get(0); + // 冲突日期、冲突类型、姓名 + String prominentDate = dataMap.get("leaveStartDate") + "~" + dataMap.get("leaveEndDate"); + String leaveType = dataMap.get("leaveType").toString(); + String userName = dataMap.get("userName").toString(); + if(type == 1){ // 出差 + sb.append("出行人:").append(userName).append("出行日期与").append(leaveType).append("存在冲突日期").append("(").append(prominentDate).append(")"); + }else{ // 请假、轮休、外出 + sb.append("当前提交的申请日期与").append(leaveType).append("存在冲突日期").append("(").append(prominentDate).append(")"); + } + return sb.toString(); + }else{ + return null; + } + } +} diff --git a/src/main/java/com/bonus/boot/manager/manager/service/impl/WeChatServiceImpl.java b/src/main/java/com/bonus/boot/manager/manager/service/impl/WeChatServiceImpl.java index 6d22145..c816ff1 100644 --- a/src/main/java/com/bonus/boot/manager/manager/service/impl/WeChatServiceImpl.java +++ b/src/main/java/com/bonus/boot/manager/manager/service/impl/WeChatServiceImpl.java @@ -313,5 +313,13 @@ public class WeChatServiceImpl implements WeChatService { return passwordEncoder.encode(password); } - + @Override + public Integer dataIsSync(EvectionBean data, int type) { + try { + return dao.dataIsSync(data,type); + } catch (Exception e) { + log.error(e.toString(),e); + return null; + } + } } diff --git a/src/main/resources/mappers/wechat/VerifyDateMapper.xml b/src/main/resources/mappers/wechat/VerifyDateMapper.xml new file mode 100644 index 0000000..b86b12e --- /dev/null +++ b/src/main/resources/mappers/wechat/VerifyDateMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/src/main/resources/mappers/wechat/WeChatMapper.xml b/src/main/resources/mappers/wechat/WeChatMapper.xml index 631a3a0..14b5645 100644 --- a/src/main/resources/mappers/wechat/WeChatMapper.xml +++ b/src/main/resources/mappers/wechat/WeChatMapper.xml @@ -10,7 +10,7 @@ leave_end_interval, leave_duration, source, create_user_id, is_agree, location, host_user_id, host_user_name, remark - , leave_form_id, submit_id, examine_status, is_plateau, plateau_subsidy) + , leave_form_id, submit_id, examine_status, is_plateau, plateau_subsidy,is_update,is_sync) VALUES (#{uuid}, #{userId}, #{userName}, #{orgId}, #{orgName}, '出差', '出差', #{leaveReason}, #{leaveStartDate}, #{leaveStartInterval}, @@ -18,7 +18,7 @@ #{leaveEndInterval}, #{leaveDuration}, #{source}, #{createUserId}, #{isAgree}, #{location}, #{hostUserId}, #{hostUserName}, #{remark}, - #{leaveFormId}, #{createUserId}, '1', #{isPlateau}, #{plateauSubsidy}) + #{leaveFormId}, #{createUserId}, '1', #{isPlateau}, #{plateauSubsidy},'0','0') INSERT INTO leave_apply_wechat(uuid, user_id, user_name, org_id, org_name, leave_type, type, leave_reason, @@ -44,14 +44,14 @@ leave_end_date, leave_end_interval, leave_duration, source, create_user_id, is_agree, location, host_user_id, - host_user_name, remark, examine_status) + host_user_name, remark, examine_status,is_update,is_sync) VALUES (#{uuid}, #{userId}, #{userName}, #{orgId}, #{orgName}, #{leaveType}, #{type}, #{leaveReason}, #{leaveStartDate}, #{leaveStartInterval}, #{leaveEndDate}, #{leaveEndInterval}, #{leaveDuration}, #{source}, #{createUserId}, #{isAgree}, #{location}, #{hostUserId}, #{hostUserName}, - #{remark}, '0') + #{remark}, '0','0','0') @@ -86,13 +86,14 @@ is_agree = #{isAgree}, location = #{location}, host_user_id = #{hostUserId}, - remark = #{remark} + remark = #{remark}, + is_update = '1', where uuid = #{uuid} - update leave_apply_wechat SET is_active = '0' WHERE uuid = #{uuid} + update leave_apply_wechat SET is_active = '0',is_update = '1' WHERE uuid = #{uuid} @@ -124,7 +125,8 @@ location = #{location}, host_user_id = #{hostUserId}, host_user_name = #{hostUserName}, - remark = #{remark} + remark = #{remark}, + is_update = '1' where uuid = #{uuid} @@ -156,13 +158,14 @@ location = #{location}, host_user_id = #{hostUserId}, host_user_name = #{hostUserName}, - remark = #{remark} + remark = #{remark}, + is_update = '1' where leave_form_id = #{uuid} - update leave_apply_wechat SET is_active = '0' WHERE leave_form_id = #{uuid} + update leave_apply_wechat SET is_active = '0',is_update = '1' WHERE leave_form_id = #{uuid} + +