假期修改

This commit is contained in:
cwchen 2025-02-20 16:36:23 +08:00
parent 5459f64093
commit 0b4ecffeec
8 changed files with 224 additions and 14 deletions

View File

@ -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<EvectionBean> 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<LeaveReportingBean> 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<HolidayBean> 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<HolidayBean> 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<HolidayBean> 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<LeaveReportingBean> 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<EvectionBean> 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<EvectionBean> 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);

View File

@ -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<Map<String,Object>>
* @author cwchen
* @date 2025/2/20 15:44
*/
List<Map<String, Object>> verifyDate(EvectionBean bean);
}

View File

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

View File

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

View File

@ -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<Map<String, Object>> list = dao.verifyDate(bean);
if(CollectionUtils.isNotEmpty(list)){
StringBuilder sb = new StringBuilder();
Map<String, Object> 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;
}
}
}

View File

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

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.boot.manager.manager.dao.VerifyDateDao">
<!--判断请假、轮休、出差、外出 日期是否出现重叠-->
<select id="verifyDate" resultType="java.util.Map">
SELECT leave_type AS leaveType,
`type`,
DATE_FORMAT(leave_start_date, '%Y-%m-%d') AS leaveStartDate,
DATE_FORMAT(leave_end_date, '%Y-%m-%d') AS leaveEndDate,
leave_start_interval AS leaveStartInterval,
leave_end_interval AS leaveEndInterval,
user_name AS userName
FROM leave_apply_wechat
WHERE user_id = #{userId} AND is_active = '1'
AND (DATE_FORMAT(leave_start_date, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{leaveStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{leaveEndDate}, '%Y-%m-%d')) OR
(DATE_FORMAT(leave_end_date, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{leaveStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{leaveEndDate}, '%Y-%m-%d'))
</select>
</mapper>

View File

@ -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>
<insert id="insertLeaveReporting">
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')
</insert>
<update id="updateUser">
@ -86,13 +86,14 @@
is_agree = #{isAgree},
location = #{location},
host_user_id = #{hostUserId},
remark = #{remark}
remark = #{remark},
is_update = '1',
</set>
where uuid = #{uuid}
</update>
<update id="deleteHolidayById">
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}
</update>
<update id="editHoliday">
@ -124,7 +125,8 @@
location = #{location},
host_user_id = #{hostUserId},
host_user_name = #{hostUserName},
remark = #{remark}
remark = #{remark},
is_update = '1'
</set>
where uuid = #{uuid}
</update>
@ -156,13 +158,14 @@
location = #{location},
host_user_id = #{hostUserId},
host_user_name = #{hostUserName},
remark = #{remark}
remark = #{remark},
is_update = '1'
</set>
where leave_form_id = #{uuid}
</update>
<update id="deleteEvectionById">
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}
</update>
<select id="getById" resultType="com.bonus.boot.manager.manager.entity.UserDto">
@ -471,5 +474,19 @@
WHERE la.is_active = '1'
and la.uuid = #{uuId}
</select>
<!--判断数据是否处于同步状态,若处于同步状态则禁止操作-->
<select id="dataIsSync" resultType="java.lang.Integer">
SELECT is_sync AS isSync
FROM leave_apply_wechat
<where>
<if test="type == 1">
AND leave_form_id = #{uuid}
</if>
<if test="type == 2">
AND `uuid` = #{uuid}
</if>
</where>
LIMIT 1
</select>
</mapper>