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