From 6437bdc301a3738b3e6f3be9913a41a45d9f96d9 Mon Sep 17 00:00:00 2001 From: 青城 <1662047068@qq.com> Date: 星期四, 10 七月 2025 17:06:27 +0800 Subject: [PATCH] 协调审批 --- src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 128 ++++++++ src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java | 99 ++++++ src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java | 18 + src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java | 15 + src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java | 23 + src/main/resources/mapper/approve/ApproveLogMapper.xml | 21 + src/main/java/com/ruoyi/approve/service/IApproveProcessService.java | 37 ++ src/main/java/com/ruoyi/approve/pojo/ApproveLog.java | 57 +++ src/main/resources/mapper/approve/ApproveProcessMapper.xml | 30 ++ src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java | 74 ++++ src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java | 18 + src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java | 20 + src/main/resources/mapper/approve/ApproveNodeMapper.xml | 24 + src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java | 72 ++++ src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java | 105 +++++++ src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java | 47 +++ src/main/java/com/ruoyi/approve/pojo/ApproveNode.java | 78 +++++ src/main/resources/application.yml | 2 src/main/java/com/ruoyi/approve/service/IApproveNodeService.java | 18 + 19 files changed, 885 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java new file mode 100644 index 0000000..a4d815e --- /dev/null +++ b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java @@ -0,0 +1,47 @@ +package com.ruoyi.approve.controller; + +import com.ruoyi.approve.pojo.ApproveNode; +import com.ruoyi.approve.service.IApproveNodeService; +import com.ruoyi.framework.web.domain.AjaxResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/approveNode") +public class ApproveNodeController { + @Autowired + private IApproveNodeService approveNodeService; + + /** + * 娴佺▼鐘舵�佽鎯� + * @param id 娴佺▼瀹℃壒id approve_id + * @return + */ + @GetMapping("/details") + public AjaxResult details(@PathVariable String id) { + return AjaxResult.success(approveNodeService.details(id)); + } + + /** + * 瀹℃壒鑺傜偣 + * @param approveNode + * @return + */ + @PostMapping("/updateApproveNode") + public AjaxResult updateApproveNode(@RequestBody ApproveNode approveNode) { + approveNodeService.updateApproveNode(approveNode); + return AjaxResult.success(); + } + + /** + * 鍒濆鍖栧鎵硅妭鐐� + * @param id + * @return + */ + @PostMapping("/init") + public AjaxResult init(String id) { + approveNodeService.initApproveNodes(id); + return AjaxResult.success(); + } + +} diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java b/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java new file mode 100644 index 0000000..25fd122 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java @@ -0,0 +1,105 @@ +package com.ruoyi.approve.controller; + +import com.ruoyi.approve.service.IApproveProcessService; +import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; +import com.ruoyi.approve.vo.ApproveProcessVO; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.security.LoginUser; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.project.system.domain.SysDept; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/approveProcess") +public class ApproveProcessController { + + @GetMapping("/test") + public AjaxResult test() { + System.out.println(1111); + return AjaxResult.success("娴嬭瘯"); + } + + + @Autowired + private IApproveProcessService approveProcessService; + /**銆� + * 鑾峰彇閮ㄩ棬鍒楄〃 + * @return + */ + @GetMapping("/getDept") + public AjaxResult getDept() { + Long userId = SecurityUtils.getUserId(); + LoginUser user = SecurityUtils.getLoginUser(); + Long[] deptIds = SecurityUtils.getDeptId(); + + List<SysDept> sysDeptList = approveProcessService.selectDeptListByDeptIds(deptIds); + return AjaxResult.success(sysDeptList); + } + + /** + * 娣诲姞瀹℃壒 + * @param approveProcessVO + * @return + */ + @PostMapping("/add") + public AjaxResult add(@RequestBody ApproveProcessVO approveProcessVO) { + if (approveProcessVO == null) { + return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖"); + } + + approveProcessService.addApprove(approveProcessVO); + return AjaxResult.success("娣诲姞鎴愬姛"); + } + + /** + * 瀹℃壒璇︽儏 + * @param approveGetAndUpdateVo + * @return + */ + @GetMapping("/get") + public AjaxResult get(@RequestBody ApproveGetAndUpdateVo approveGetAndUpdateVo){ + if (approveGetAndUpdateVo.getId() == null || approveGetAndUpdateVo.getId().isEmpty()) { + return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖"); + } + return AjaxResult.success(approveProcessService.getApproveById(approveGetAndUpdateVo.getId())); + } + + /** + * 鏇存柊瀹℃壒 + * @param approveGetAndUpdateVo + * @return + */ + @PostMapping("/update") + public AjaxResult update(@RequestBody ApproveGetAndUpdateVo approveGetAndUpdateVo) { + if (approveGetAndUpdateVo == null) { + return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖"); + } + approveProcessService.updateByApproveId(approveGetAndUpdateVo); + return AjaxResult.success("鎿嶄綔鎴愬姛"); + } + /** + * 鑾峰彇瀹℃壒鍒楄〃 + * @return + */ + @GetMapping("/list") + public AjaxResult list() { + return AjaxResult.success(approveProcessService.listAll()); + } + + /** + * 鍒犻櫎瀹℃壒 + * @param ids + * @return + */ + @PostMapping("/deleteIds") + public AjaxResult deleteIds(@RequestBody Long[] ids) { + if (ids == null || ids.length == 0) { + return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖"); + } + approveProcessService.delApprove(ids); + return AjaxResult.success("鎿嶄綔鎴愬姛"); + } +} diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java new file mode 100644 index 0000000..3218ed6 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.approve.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.approve.pojo.ApproveLog; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author Administrator +* @description 閽堝琛ㄣ�恆pprove_log(瀹℃壒鏃ュ織琛�)銆戠殑鏁版嵁搴撴搷浣淢apper +* @createDate 2025-07-07 14:47:01 +* @Entity com.ruoyi.approve.pojo.ApproveLog +*/ +@Mapper +public interface ApproveLogMapper extends BaseMapper<ApproveLog> { + +} + + + + diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java new file mode 100644 index 0000000..648d04a --- /dev/null +++ b/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.approve.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.approve.pojo.ApproveNode; + +/** +* @author Administrator +* @description 閽堝琛ㄣ�恆pprove_node(瀹℃壒鑺傜偣琛�)銆戠殑鏁版嵁搴撴搷浣淢apper +* @createDate 2025-07-08 16:50:15 +* @Entity com.ruoyi.approve.pojo.ApproveNode +*/ +public interface ApproveNodeMapper extends BaseMapper<ApproveNode> { + +} + + + + diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java new file mode 100644 index 0000000..ce1b362 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.approve.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.approve.pojo.ApproveProcess; + +/** +* @author Administrator +* @description 閽堝琛ㄣ�恆pprove_process(瀹℃壒娴佺▼琛�)銆戠殑鏁版嵁搴撴搷浣淢apper +* @createDate 2025-07-08 16:44:05 +* @Entity com.ruoyi.approve.pojo.ApproveProcess +*/ +public interface ApproveProcessMapper extends BaseMapper<ApproveProcess> { + +} + + + + diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveLog.java b/src/main/java/com/ruoyi/approve/pojo/ApproveLog.java new file mode 100644 index 0000000..8952e0d --- /dev/null +++ b/src/main/java/com/ruoyi/approve/pojo/ApproveLog.java @@ -0,0 +1,57 @@ +package com.ruoyi.approve.pojo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 瀹℃壒鏃ュ織琛� + * @TableName approve_log + */ +@Data +@TableName("approve_log") +public class ApproveLog implements Serializable { + private static final long serialVersionUID = 1L; + /** + * + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 瀹℃壒id + */ + private Long approveId; + + /** + * 瀹℃壒鑺傜偣椤哄簭 + */ + private Integer approveNodeOrder; + + /** + * 瀹℃壒浜篿d + */ + private Long approveUser; + + /** + * 瀹℃壒鏃堕棿 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date approveTime; + + /** + * 瀹℃壒鐘舵�� + */ + private Integer approveStatus; + + /** + * 瀹℃壒澶囨敞 + */ + private String approveRemark; + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java new file mode 100644 index 0000000..de3a255 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java @@ -0,0 +1,78 @@ +package com.ruoyi.approve.pojo; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +/** + * 瀹℃壒鑺傜偣琛� + * @TableName approve_node + */ +@Data +public class ApproveNode implements Serializable { + /** + * + */ + private Long id; + + /** + * 瀹℃壒id + */ + private Long approveProcessId; + + /** + * 瀹℃壒鑺傜偣椤哄簭 + */ + private Integer approveNodeOrder; + + /** + * 瀹℃壒鑺傜偣鐢ㄦ埛鍚嶅瓧 + */ + private String approveNodeUser; + + /** + * 瀹℃壒鑺傜偣鏃堕棿 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date approveNodeTime; + + /** + * 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳锛堥粯璁や负0锛� + */ + private Integer approveNodeStatus; + + @TableField(exist = false) + private Boolean isFirst; + + @TableField(exist = false) + private Boolean isLast; + + /** + * 绉熸埛id + */ + @TableField(fill = FieldFill.INSERT) + private Long tenantId; + + /** + * 鍒犻櫎鏍囪:0姝e父锛�1鍒犻櫎 + */ + private Integer deleteFlag; + + /** + * 瀹℃壒鑺傜偣鎷掔粷鍘熷洜 + */ + private String approveNodeReason; + + /** + * 瀹℃壒鑺傜偣澶囨敞 + */ + private String approveNodeRemark; + + private static final long serialVersionUID = 1L; + + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java new file mode 100644 index 0000000..58cdddb --- /dev/null +++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java @@ -0,0 +1,99 @@ +package com.ruoyi.approve.pojo; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +/** + * 瀹℃壒娴佺▼琛� + * @TableName approve_process + */ +@Data +@TableName("approve_process") +public class ApproveProcess implements Serializable { + /** + * + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 瀹℃壒id + */ + private String approveId; + + /** + * 鐢宠浜篿d + */ + private Long approveUser; + + /** + * 鐢宠閮ㄩ棬id + */ + private Long approveDeptId; + + /** + * 鐢宠閮ㄩ棬鍚嶇О + */ + private String approveDeptName; + + /** + * 鐢宠鐢ㄦ埛ids + */ + private String approveUserIds; + + /** + * 鐢宠鐢ㄦ埛鍚嶇О + */ + private String approveUserNames; + + /** + * 鐢宠鍘熷洜 + */ + private String approveReason; + + /** + * 鐢宠鏃ユ湡 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date approveTime; + + /** + * 瀹℃壒瀹屾垚鏃堕棿 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date approveOverTime; + + /** + * 瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 + */ + private Integer approveStatus; + + /** + * 瀹℃壒鏄惁鍒犻櫎锛�0姝e父锛�1鍒犻櫎 + */ + private Integer approveDelete; + + /** + * 绉熸埛id + */ + @TableField(fill = FieldFill.INSERT) + private Long tenantId; + + /** + * 瀹℃壒绫诲瀷 + */ + private Integer approveType; + + /** + * 瀹℃壒澶囨敞 + */ + private String approveRemark; + + private static final long serialVersionUID = 1L; + + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java new file mode 100644 index 0000000..14ff91f --- /dev/null +++ b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java @@ -0,0 +1,18 @@ +package com.ruoyi.approve.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.approve.pojo.ApproveNode; + +import java.util.List; + +public interface IApproveNodeService extends IService<ApproveNode> { + + void initApproveNodes(String id); + /** + * 璇︽儏 + * @param id + */ + List<ApproveNode> details(String id); + + void updateApproveNode(ApproveNode approveNode); +} diff --git a/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java b/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java new file mode 100644 index 0000000..5ed770d --- /dev/null +++ b/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java @@ -0,0 +1,37 @@ +package com.ruoyi.approve.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.approve.pojo.ApproveNode; +import com.ruoyi.approve.pojo.ApproveProcess; +import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; +import com.ruoyi.approve.vo.ApproveProcessVO; +import com.ruoyi.project.system.domain.SysDept; + +import java.util.List; + +public interface IApproveProcessService extends IService<ApproveProcess> { + /** + * 娣诲姞瀹℃壒娴佺▼ + * @param approveProcessVO 瀹℃壒娴佺▼VO瀵硅薄 + */ + void addApprove(ApproveProcessVO approveProcessVO); + /** + * 鏍规嵁閮ㄩ棬id鏌ヨ閮ㄩ棬淇℃伅 + * @param deptIds 閮ㄩ棬ID鏁扮粍 + */ + List<SysDept> selectDeptListByDeptIds(Long[] deptIds); + + List<ApproveProcess> listAll(); + + void delApprove(Long[] ids); + + void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo); + + ApproveProcess getApproveById(String id); + + /** + * 瀹℃壒鐘舵�佹洿鏂� + * @param approveNode + */ + void updateApproveProcessStatus(ApproveNode approveNode); +} diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java new file mode 100644 index 0000000..1bc54ed --- /dev/null +++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java @@ -0,0 +1,74 @@ +package com.ruoyi.approve.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.approve.mapper.ApproveNodeMapper; +import com.ruoyi.approve.pojo.ApproveNode; +import com.ruoyi.approve.pojo.ApproveProcess; +import com.ruoyi.approve.service.IApproveNodeService; +import com.ruoyi.approve.service.IApproveProcessService; +import com.ruoyi.common.utils.SecurityUtils; +import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ApproveNodeServiceImpl extends ServiceImpl<ApproveNodeMapper, ApproveNode> implements IApproveNodeService { + + @Autowired + private ApproveNodeMapper approveNodeMapper; + @Autowired + private IApproveProcessService approveProcessService; + + + @Override + public void initApproveNodes(String id) { + //绉熸埛id + Long tenantId = SecurityUtils.getLoginUser().getTenantId(); + + ApproveProcess approve = approveProcessService.getApproveById(id); + String[] names = approve.getApproveUserNames().split(","); + Long approveId = approve.getId(); + for (int i = 0; i < names.length; i++) { + ApproveNode approveNode = new ApproveNode(); + approveNode.setApproveProcessId(approveId); + approveNode.setApproveNodeOrder(i +1); + approveNode.setApproveNodeUser(names[i]); + approveNode.setApproveNodeTime(new Date()); + approveNode.setApproveNodeStatus(0); + approveNode.setTenantId(tenantId); + approveNode.setDeleteFlag(0); + approveNodeMapper.insert(approveNode); + } + } + + @Override + public List<ApproveNode> details(String id) { + ApproveProcess approve = approveProcessService.getApproveById(id); + Long approveId = approve.getId(); + + LambdaQueryWrapper<ApproveNode> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ApproveNode::getApproveProcessId, approveId); + List<ApproveNode> list = list(queryWrapper); + // 鎸夌収 approveNodeOrder 瀛楁鍗囧簭鎺掑簭 + list.sort(Comparator.comparingInt(ApproveNode::getApproveNodeOrder)); + return list; + } + + @Override + public void updateApproveNode(ApproveNode approveNode) { + approveProcessService.updateApproveProcessStatus(approveNode); + + approveNode.setApproveNodeTime(new Date()); + + approveNodeMapper.updateById(approveNode); + } + +} diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java new file mode 100644 index 0000000..322a498 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java @@ -0,0 +1,128 @@ +package com.ruoyi.approve.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.approve.mapper.ApproveProcessMapper; +import com.ruoyi.approve.pojo.ApproveNode; +import com.ruoyi.approve.pojo.ApproveProcess; +import com.ruoyi.approve.service.IApproveNodeService; +import com.ruoyi.approve.service.IApproveProcessService; +import com.ruoyi.approve.utils.DailyRedisCounter; +import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; +import com.ruoyi.approve.vo.ApproveProcessVO; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.project.system.domain.SysDept; +import com.ruoyi.project.system.mapper.SysDeptMapper; +import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ApproveProcessServiceImpl extends ServiceImpl<ApproveProcessMapper, ApproveProcess> implements IApproveProcessService { + private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); + + private final StringRedisTemplate redisTemplate; + + private final DailyRedisCounter dailyRedisCounter; + + private final SysDeptMapper sysDeptMapper; + private final IApproveNodeService approveNodeService; + + @Override + public void addApprove(ApproveProcessVO approveProcessVO) { + Long userId = SecurityUtils.getUserId(); + //绉熸埛id + Long tenantId = SecurityUtils.getLoginUser().getTenantId(); + + String today = LocalDate.now().format(DATE_FORMAT); + Long approveId = dailyRedisCounter.incrementAndGet("approveId"); + String formattedCount = String.format("%03d", approveId); + //娴佺▼ ID + String approveID = today + formattedCount; + + ApproveProcess approveProcess = new ApproveProcess(); + approveProcess.setApproveId(approveID); + approveProcess.setApproveUser(userId); + approveProcess.setApproveDeptName(approveProcessVO.getDeptName()); + approveProcess.setApproveUserNames(approveProcessVO.getApproverNames()); + approveProcess.setApproveTime(new Date()); + approveProcess.setApproveReason(approveProcessVO.getApproveReason()); + approveProcess.setApproveOverTime(null); + approveProcess.setApproveStatus(0); + approveProcess.setApproveDelete(0); + approveProcess.setTenantId(tenantId); + + save(approveProcess); + //鍒濆鍖栧鎵硅妭鐐� + approveNodeService.initApproveNodes(approveID); + } + + @Override + public List<SysDept> selectDeptListByDeptIds(Long[] deptIds) { + List<SysDept> sysDeptList =new ArrayList<SysDept>(); + for (Long deptId : deptIds) { + SysDept sysDept = sysDeptMapper.selectDeptById(deptId); + sysDeptList.add(sysDept); + } + return sysDeptList; + } + + @Override + public List<ApproveProcess> listAll() { + LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ApproveProcess::getApproveDelete, 0); + return list(queryWrapper); + } + + @Override + public void delApprove(Long[] ids) { + for (Long id : ids) { + LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ApproveProcess::getApproveId, id); + update(queryWrapper); + } + } + + @Override + public ApproveProcess getApproveById(String id) { + LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ApproveProcess::getApproveId, id); + queryWrapper.eq(ApproveProcess::getApproveDelete, 0); + return getOne(queryWrapper); + } + + @Override + public void updateApproveProcessStatus(ApproveNode approveNode) { + ApproveProcess approveProcess = getById(approveNode.getApproveProcessId()); + if(approveNode.getIsFirst()){ + if(approveNode.getApproveNodeStatus() == 1){ + approveProcess.setApproveStatus(1); + } + } + if(approveNode.getIsLast()){ + if(approveNode.getApproveNodeStatus() == 1){ + approveProcess.setApproveStatus(2); + } + } + + } + + @Override + public void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo) { + ApproveProcess approve = getApproveById(approveGetAndUpdateVo.getId()); + approve.setApproveReason(approveGetAndUpdateVo.getApproveReason()); + updateById(approve); + } + + +} diff --git a/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java b/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java new file mode 100644 index 0000000..eec0e4a --- /dev/null +++ b/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java @@ -0,0 +1,72 @@ +package com.ruoyi.approve.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.TimeUnit; + + +//鍩轰簬redis鐨勪竴涓瘡鏃ヨ鏁板櫒 +@Component +public class DailyRedisCounter { + private static final String KEY_PREFIX = "daily_counter:"; + private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); + private final StringRedisTemplate redisTemplate; + + public DailyRedisCounter(StringRedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勬暟鍊硷紝骞惰嚜澧�1 + * @param counterName 璁℃暟鍣ㄥ悕绉帮紙渚嬪锛歭ogin_count銆乷rder_count锛� + * @return 浠婃棩鑷鍚庣殑璁℃暟鍊� + */ + public long incrementAndGet(String counterName) { + String key = getKey(counterName); + long count = redisTemplate.opsForValue().increment(key, 1); + + // 浠呭湪绗竴娆¤缃椂璁剧疆杩囨湡鏃堕棿锛堥伩鍏嶉噸澶嶈缃級 + if (count == 1) { + long secondsUntilMidnight = calculateSecondsUntilMidnight(); + redisTemplate.expire(key, secondsUntilMidnight, TimeUnit.SECONDS); + } + + return count; + } + + /** + * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勫綋鍓嶆暟鍊� + * @param counterName 璁℃暟鍣ㄥ悕绉� + * @return 浠婃棩褰撳墠璁℃暟鍊硷紝鑻ヤ笉瀛樺湪鍒欒繑鍥�0 + */ + public long getCurrentCount(String counterName) { + String key = getKey(counterName); + String value = redisTemplate.opsForValue().get(key); + return value != null ? Long.parseLong(value) : 0; + } + + /** + * 璁$畻璺濈娆℃棩鍑屾櫒鐨勭鏁� + */ + private long calculateSecondsUntilMidnight() { + LocalDate tomorrow = LocalDate.now().plusDays(1); + LocalDate midnight = tomorrow.atStartOfDay().toLocalDate(); + return java.time.Duration.between( + LocalDate.now().atTime(23, 59, 59), + midnight.atTime(0, 0, 0) + ).getSeconds() + 1; + } + + /** + * 鐢熸垚Redis閿� + */ + private String getKey(String counterName) { + String today = LocalDate.now().format(DATE_FORMAT); + return KEY_PREFIX + counterName + ":" + today; + } +} diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java b/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java new file mode 100644 index 0000000..bd9ebd9 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java @@ -0,0 +1,15 @@ +package com.ruoyi.approve.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ApproveGetAndUpdateVo { + //瀹℃壒id + @NotBlank(message = "娴佺▼缂栧彿涓嶈兘涓虹┖") + private String id; + //鐢宠浜嬬敱 + @NotBlank(message = "鐢宠浜嬬敱涓嶈兘涓虹┖") + private String approveReason; +} diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java new file mode 100644 index 0000000..5835645 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java @@ -0,0 +1,23 @@ +package com.ruoyi.approve.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ApproveProcessVO { + + //閮ㄩ棬id + // private Long deptId; + //閮ㄩ棬鍚嶇О + @NotBlank(message = "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖") + private String deptName; + //瀹℃壒浜� ids + // private String approverIds; + //瀹℃壒浜哄悕绉� + @NotBlank(message = "瀹℃壒浜轰笉鑳戒负绌�") + private String approverNames; + //瀹℃壒浜嬬敱 + @NotBlank(message = "11") + private String approveReason; +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index a987879..f4a6083 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -83,7 +83,7 @@ # 鏁版嵁搴撶储寮� database: 0 # 瀵嗙爜 - password: + password: root2022! # password: 123456 # 杩炴帴瓒呮椂鏃堕棿 diff --git a/src/main/resources/mapper/approve/ApproveLogMapper.xml b/src/main/resources/mapper/approve/ApproveLogMapper.xml new file mode 100644 index 0000000..e47dbbc --- /dev/null +++ b/src/main/resources/mapper/approve/ApproveLogMapper.xml @@ -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.ruoyi.approve.mapper.ApproveLogMapper"> + + <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveLog"> + <id property="id" column="id" /> + <result property="approveId" column="approve_id" /> + <result property="approveNodeOrder" column="approve_node_order" /> + <result property="approveUser" column="approve_user" /> + <result property="approveTime" column="approve_time" /> + <result property="approveStatus" column="approve_status" /> + <result property="approveRemark" column="approve_remark" /> + </resultMap> + + <sql id="Base_Column_List"> + id,approve_id,approve_node_order,approve_user,approve_time,approve_status, + approve_remark + </sql> +</mapper> diff --git a/src/main/resources/mapper/approve/ApproveNodeMapper.xml b/src/main/resources/mapper/approve/ApproveNodeMapper.xml new file mode 100644 index 0000000..d5863ed --- /dev/null +++ b/src/main/resources/mapper/approve/ApproveNodeMapper.xml @@ -0,0 +1,24 @@ +<?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.ruoyi.approve.mapper.ApproveNodeMapper"> + + <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveNode"> + <id property="id" column="id" /> + <result property="approveProcessId" column="approve_process_id" /> + <result property="approveNodeOrder" column="approve_node_order" /> + <result property="approveNodeUser" column="approve_node_user" /> + <result property="approveNodeTime" column="approve_node_time" /> + <result property="approveNodeStatus" column="approve_node_status" /> + <result property="tenantId" column="tenant_id" /> + <result property="deleteFlag" column="delete_flag" /> + <result property="approveNodeReason" column="approve_node_reason" /> + <result property="approveNodeRemark" column="approve_node_remark" /> + </resultMap> + + <sql id="Base_Column_List"> + id,approve_process_id,approve_node_order,approve_node_user,approve_node_time,approve_node_status, + tenant_id,delete_flag,approve_node_reason,approve_node_remark + </sql> +</mapper> diff --git a/src/main/resources/mapper/approve/ApproveProcessMapper.xml b/src/main/resources/mapper/approve/ApproveProcessMapper.xml new file mode 100644 index 0000000..da0d5f7 --- /dev/null +++ b/src/main/resources/mapper/approve/ApproveProcessMapper.xml @@ -0,0 +1,30 @@ +<?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.ruoyi.approve.mapper.ApproveProcessMapper"> + + <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveProcess"> + <id property="id" column="id" /> + <result property="approveId" column="approve_id" /> + <result property="approveUser" column="approve_user" /> + <result property="approveDeptId" column="approve_dept_id" /> + <result property="approveDeptName" column="approve_dept_name" /> + <result property="approveUserIds" column="approve_user_ids" /> + <result property="approveUserNames" column="approve_user_names" /> + <result property="approveReason" column="approve_reason" /> + <result property="approveTime" column="approve_time" /> + <result property="approveOverTime" column="approve_over_time" /> + <result property="approveStatus" column="approve_status" /> + <result property="approveDelete" column="approve_delete" /> + <result property="tenantId" column="tenant_id" /> + <result property="approveType" column="approve_type" /> + <result property="approveRemark" column="approve_remark" /> + </resultMap> + + <sql id="Base_Column_List"> + id,approve_id,approve_user,approve_dept_id,approve_dept_name,approve_user_ids, + approve_user_names,approve_reason,approve_time,approve_over_time,approve_status, + approve_delete,tenant_id,approve_type,approve_remark + </sql> +</mapper> -- Gitblit v1.9.3