From f2e783ca6e47761e7daadbac193cf80474d35edd Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期一, 25 五月 2026 13:19:12 +0800
Subject: [PATCH] feat(approve): 重构审批流程配置功能

---
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java           |   97 ++----
 src/main/java/com/ruoyi/approve/mapper/ApproveProcessConfigNodeMapper.java            |   18 +
 src/main/resources/mapper/approve/ApproveProcessConfigNodeMapper.xml                  |   21 +
 src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java                              |   11 
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                                 |    2 
 src/main/java/com/ruoyi/approve/service/IApproveProcessService.java                   |    6 
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java |   48 +++
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java          |   17 
 src/main/java/com/ruoyi/approve/controller/ApproveProcessConfigNodeController.java    |   49 +++
 src/main/java/com/ruoyi/approve/service/ApproveProcessConfigNodeService.java          |   22 +
 src/main/resources/mapper/basic/CustomerPrivatePoolMapper.xml                         |  101 +++++++
 src/main/java/com/ruoyi/approve/bean/vo/ApproveGetAndUpdateVo.java                    |    3 
 src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java    |    1 
 src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java       |    4 
 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java              |  169 ++++++------
 src/main/java/com/ruoyi/approve/bean/dto/ApproveProcessConfigNodeDto.java             |   12 
 src/main/java/com/ruoyi/approve/utils/ApproveProcessConfigNodeUtils.java              |    9 
 src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java             |    2 
 src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java                         |    2 
 src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java              |    4 
 src/main/resources/application-dev.yml                                                |    6 
 src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessConfigNodeVo.java               |    9 
 src/main/java/com/ruoyi/approve/pojo/ApproveProcessConfigNode.java                    |  118 +++++++++
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java                  |   13 
 24 files changed, 565 insertions(+), 179 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/bean/dto/ApproveProcessConfigNodeDto.java b/src/main/java/com/ruoyi/approve/bean/dto/ApproveProcessConfigNodeDto.java
new file mode 100644
index 0000000..0d4c34a
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/bean/dto/ApproveProcessConfigNodeDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.approve.bean.dto;
+
+import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ApproveProcessConfigNodeDto  extends ApproveProcessConfigNode {
+
+    private List<ApproveProcessConfigNode>  approveProcessConfigNodes;
+}
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java b/src/main/java/com/ruoyi/approve/bean/vo/ApproveGetAndUpdateVo.java
similarity index 94%
rename from src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
rename to src/main/java/com/ruoyi/approve/bean/vo/ApproveGetAndUpdateVo.java
index db45394..2d38b66 100644
--- a/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
+++ b/src/main/java/com/ruoyi/approve/bean/vo/ApproveGetAndUpdateVo.java
@@ -1,7 +1,8 @@
-package com.ruoyi.approve.vo;
+package com.ruoyi.approve.bean.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
 import com.ruoyi.sales.pojo.CommonFile;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
diff --git a/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessConfigNodeVo.java b/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessConfigNodeVo.java
new file mode 100644
index 0000000..fb92c55
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessConfigNodeVo.java
@@ -0,0 +1,9 @@
+package com.ruoyi.approve.bean.vo;
+
+import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
+import lombok.Data;
+
+@Data
+public class ApproveProcessConfigNodeVo extends ApproveProcessConfigNode {
+
+}
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java b/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
similarity index 97%
rename from src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
rename to src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
index bf8edae..cff6d32 100644
--- a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
+++ b/src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
@@ -1,4 +1,4 @@
-package com.ruoyi.approve.vo;
+package com.ruoyi.approve.bean.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveProcessConfigNodeController.java b/src/main/java/com/ruoyi/approve/controller/ApproveProcessConfigNodeController.java
new file mode 100644
index 0000000..b837af6
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/controller/ApproveProcessConfigNodeController.java
@@ -0,0 +1,49 @@
+package com.ruoyi.approve.controller;
+
+import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
+import com.ruoyi.approve.service.ApproveProcessConfigNodeService;
+import com.ruoyi.framework.web.domain.R;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 瀹℃壒娴佺▼閰嶇疆鑺傜偣琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-23 10:21:41
+ */
+@RestController
+@RequestMapping("/approveProcessConfigNode")
+@AllArgsConstructor
+public class ApproveProcessConfigNodeController {
+
+    private final ApproveProcessConfigNodeService approveProcessConfigNodeService;
+
+
+    /**
+     *  鏌ヨ瀹℃壒涓嬮潰鐨勮妭鐐�
+     * @param type
+     * @return
+     */
+    @GetMapping("/list")
+    public R listNode(Integer type) {
+        return R.ok(approveProcessConfigNodeService.listNode(type));
+    }
+
+    /**
+     * 娣诲姞瀹℃壒鑺傜偣
+     * @param approveProcessConfigNodes
+     * @return
+     */
+    @ApiOperation("娣诲姞瀹℃壒鑺傜偣")
+    @PostMapping("/add")
+    public R addApproveProcessConfigNodes(@RequestBody List<ApproveProcessConfigNode> approveProcessConfigNodes) {
+        return R.ok(approveProcessConfigNodeService.addApproveProcessConfigNodes(approveProcessConfigNodes));
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java b/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
index 7554ff4..a56f6b1 100644
--- a/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
+++ b/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -5,8 +5,8 @@
 import com.ruoyi.account.pojo.AccountExpense;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.approve.service.IApproveProcessService;
-import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
-import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.security.LoginUser;
diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveProcessConfigNodeMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessConfigNodeMapper.java
new file mode 100644
index 0000000..5dbb393
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessConfigNodeMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.approve.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 瀹℃壒娴佺▼閰嶇疆鑺傜偣琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-23 10:21:41
+ */
+@Mapper
+public interface ApproveProcessConfigNodeMapper extends BaseMapper<ApproveProcessConfigNode> {
+
+}
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
index 11d5268..3eff8d7 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -1,11 +1,5 @@
 package com.ruoyi.approve.pojo;
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
@@ -15,6 +9,11 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 瀹℃壒娴佺▼琛�
  * @TableName approve_process
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcessConfigNode.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcessConfigNode.java
new file mode 100644
index 0000000..bcb3635
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcessConfigNode.java
@@ -0,0 +1,118 @@
+package com.ruoyi.approve.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 瀹℃壒娴佺▼閰嶇疆鑺傜偣琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-23 10:21:41
+ */
+@Getter
+@Setter
+@ToString
+@TableName("approve_process_config_node")
+@ApiModel(value = "ApproveProcessConfigNode瀵硅薄", description = "瀹℃壒娴佺▼閰嶇疆鑺傜偣琛�")
+public class ApproveProcessConfigNode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @ApiModelProperty("涓婚敭ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+
+
+    //  '瀹℃壒绫诲瀷锛�1鍏嚭绠$悊锛�2璇峰亣绠$悊锛�3鍑哄樊绠$悊锛�4鎶ラ攢绠$悊锛�5閲囪喘瀹℃壒锛�6鎶ヤ环瀹℃壒锛�7鍙戣揣瀹℃壒锛�8鍗遍櫓浣滀笟瀹℃壒',
+    @ApiModelProperty("瀹℃壒绫诲瀷锛�1鍏嚭绠$悊锛�2璇峰亣绠$悊锛�3鍑哄樊绠$悊锛�4鎶ラ攢绠$悊锛�5閲囪喘瀹℃壒锛�6鎶ヤ环瀹℃壒锛�7鍙戣揣瀹℃壒锛�8鍗遍櫓浣滀笟瀹℃壒")
+    private Integer approveType;
+    /**
+     * 鑺傜偣椤哄簭
+     */
+    @ApiModelProperty("鑺傜偣椤哄簭")
+    private Integer nodeOrder;
+
+
+    /**
+     * 瀹℃壒浜篒Ds锛堝涓敤閫楀彿鍒嗛殧锛�
+     */
+    @ApiModelProperty("瀹℃壒浜篒D")
+    private Long approverId;
+
+    /**
+     * 瀹℃壒浜哄悕绉�
+     */
+    @ApiModelProperty("瀹℃壒浜哄悕绉�")
+    private String approverName;
+
+
+    /**
+     * 瓒呮椂鏃堕暱锛堝皬鏃讹級
+     */
+    @ApiModelProperty("瓒呮椂鏃堕暱锛堝皬鏃讹級")
+    private Integer timeoutHours;
+
+    /**
+     * 绉熸埛ID
+     */
+    @ApiModelProperty("绉熸埛ID")
+    private Long tenantId;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛ID
+     */
+    @ApiModelProperty("鍒涘缓鐢ㄦ埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鐢ㄦ埛ID
+     */
+    @ApiModelProperty("淇敼鐢ㄦ埛ID")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 鍒犻櫎鏍囪锛�0姝e父锛�1鍒犻櫎
+     */
+    @ApiModelProperty("鍒犻櫎鏍囪锛�0姝e父锛�1鍒犻櫎")
+    private Boolean deleteFlag;
+
+    /**
+     * 閮ㄩ棬ID
+     */
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/approve/service/ApproveProcessConfigNodeService.java b/src/main/java/com/ruoyi/approve/service/ApproveProcessConfigNodeService.java
new file mode 100644
index 0000000..9eb0428
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/ApproveProcessConfigNodeService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.approve.service;
+
+import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo;
+import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 瀹℃壒娴佺▼閰嶇疆鑺傜偣琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-23 10:21:41
+ */
+public interface ApproveProcessConfigNodeService extends IService<ApproveProcessConfigNode> {
+
+    List<ApproveProcessConfigNodeVo> listNode(Integer type);
+
+    Boolean addApproveProcessConfigNodes(List<ApproveProcessConfigNode> approveProcessConfigNodes);
+}
diff --git a/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java b/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
index a951ff6..a71cb90 100644
--- a/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
+++ b/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
@@ -3,14 +3,12 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.approve.bean.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.project.system.domain.SysDept;
 
 import java.io.IOException;
-import java.text.ParseException;
 import java.util.List;
 
 public interface IApproveProcessService extends IService<ApproveProcess> {
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index 00a53f5..af042d4 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -13,7 +13,6 @@
 import com.ruoyi.approve.service.IApproveNodeService;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
 import com.ruoyi.device.pojo.DeviceRepair;
@@ -24,14 +23,24 @@
 import com.ruoyi.project.system.service.ISysNoticeService;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
-import com.ruoyi.purchase.service.impl.PurchaseLedgerServiceImpl;
-import com.ruoyi.sales.mapper.*;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.mapper.QualityInspectParamMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardParamMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import com.ruoyi.quality.pojo.QualityTestStandard;
+import com.ruoyi.quality.pojo.QualityTestStandardParam;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.mapper.SalesQuotationMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.pojo.SalesQuotation;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -43,44 +52,26 @@
 import java.util.List;
 
 @Service
-//@RequiredArgsConstructor
+@RequiredArgsConstructor
 public class ApproveNodeServiceImpl extends ServiceImpl<ApproveNodeMapper, ApproveNode> implements IApproveNodeService {
 
-    @Autowired
-    private  ApproveNodeMapper approveNodeMapper;
-    @Autowired
-    private ApproveProcessMapper approveProcessMapper;
-    @Autowired
-    private SysUserMapper sysUserMapper;
-
-    @Autowired
-    private TempFileServiceImpl tempFileService;
-    @Autowired
-    private  ISysNoticeService sysNoticeService;
-
-    @Autowired
-    private CommonFileMapper fileMapper;
-    @Autowired
-    private DeviceRepairMapper deviceRepairMapper;
-
-    @Autowired
-    private PurchaseLedgerMapper purchaseLedgerMapper;
-
-    @Autowired
-    private SalesQuotationMapper salesQuotationMapper;
-
-    @Autowired
-    private ShippingInfoMapper shippingInfoMapper;
-
-    @Autowired
-    private CommonFileServiceImpl commonFileService;
-    @Autowired
-    private StockUtils stockUtils;
-    @Autowired
-    private SalesLedgerProductMapper salesLedgerProductMapper;
-
-    @Autowired
-    private PurchaseLedgerServiceImpl purchaseLedgerServiceImpl;
+    private final ApproveNodeMapper approveNodeMapper;
+    private final ApproveProcessMapper approveProcessMapper;
+    private final SysUserMapper sysUserMapper;
+    private final TempFileServiceImpl tempFileService;
+    private final ISysNoticeService sysNoticeService;
+    private final CommonFileMapper fileMapper;
+    private final DeviceRepairMapper deviceRepairMapper;
+    private final PurchaseLedgerMapper purchaseLedgerMapper;
+    private final SalesQuotationMapper salesQuotationMapper;
+    private final ShippingInfoMapper shippingInfoMapper;
+    private final CommonFileServiceImpl commonFileService;
+    private final StockUtils stockUtils;
+    private final SalesLedgerProductMapper salesLedgerProductMapper;
+    private final QualityInspectMapper qualityInspectMapper;
+    private final QualityTestStandardMapper qualityTestStandardMapper;
+    private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
+    private final QualityInspectParamMapper qualityInspectParamMapper;
 
 
     public ApproveProcess getApproveById(String id) {
@@ -94,7 +85,7 @@
     }
 
     @Override
-    public void initApproveNodes(String approveUserIds,String approveID,Long tenantId) {
+    public void initApproveNodes(String approveUserIds, String approveID, Long tenantId) {
         Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
         String[] names = approveUserIds.split(",");
         for (int i = 0; i < names.length; i++) {
@@ -102,7 +93,7 @@
             if (sysUser == null) continue;
             ApproveNode approveNode = new ApproveNode();
             approveNode.setApproveProcessId(approveID);
-            approveNode.setApproveNodeOrder(i +1);
+            approveNode.setApproveNodeOrder(i + 1);
             approveNode.setApproveNodeUser(sysUser.getNickName());
             approveNode.setApproveNodeUserId(sysUser.getUserId());
             approveNode.setApproveNodeTime(new Date());
@@ -132,17 +123,17 @@
 //                .eq(ApproveProcess::getApproveStatus, 0)
                 .last("limit 1");
         ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
-        if(approveProcess != null && approveProcess.getApproveStatus() == 3){
+        if (approveProcess != null && approveProcess.getApproveStatus() == 3) {
             return list;
         }
         for (ApproveNode approveNode : list) {
             List<CommonFile> commonFiles = fileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                     .eq(CommonFile::getCommonId, approveNode.getId())
                     .eq(CommonFile::getType, FileNameType.ApproveNode.getValue()));
-            if(!CollectionUtils.isEmpty(commonFiles)){
+            if (!CollectionUtils.isEmpty(commonFiles)) {
                 approveNode.setUrl(commonFiles.get(0).getUrl());
             }
-            if(approveNode.getApproveNodeStatus() == 1){
+            if (approveNode.getApproveNodeStatus() == 1) {
                 continue;
             }
             approveNode.setIsShen(true);
@@ -151,13 +142,13 @@
         return list;
     }
 
-    public void updateApproveProcessStatus(ApproveNode approveNode,Integer status) throws IOException {
+    public void updateApproveProcessStatus(ApproveNode approveNode, Integer status) throws IOException {
         LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
         approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())
                 .eq(ApproveProcess::getApproveDelete, 0)
                 .last("limit 1");
         ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
-        if(approveProcess == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
+        if (approveProcess == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
         LambdaQueryWrapper<ApproveNode> approveNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
         approveNodeLambdaQueryWrapper.eq(ApproveNode::getApproveProcessId, approveNode.getApproveProcessId())
                 .eq(ApproveNode::getApproveNodeOrder, approveNode.getApproveNodeOrder() + 1)
@@ -166,33 +157,21 @@
                 .last("limit 1");
         ApproveNode approveNode1 = approveNodeMapper.selectOne(approveNodeLambdaQueryWrapper);
         approveProcess.setApproveStatus(status);
-        if(approveNode1 != null){
+        if (approveNode1 != null) {
             approveProcess.setApproveUserCurrentId(approveNode1.getApproveNodeUserId());
             approveProcess.setApproveUserCurrentName(approveNode1.getApproveNodeUser());
         }
-        if(approveProcess.getApproveStatus().equals(2) || approveProcess.getApproveStatus().equals(3) || approveProcess.getApproveStatus().equals(4)){
+        if (approveProcess.getApproveStatus().equals(2) || approveProcess.getApproveStatus().equals(3) || approveProcess.getApproveStatus().equals(4)) {
             approveProcess.setApproveOverTime(new Date());
         }
         approveProcessMapper.updateById(approveProcess);
 
-        DeviceRepair deviceRepair = deviceRepairMapper.selectById(approveProcess.getDeviceRepairId());
-        if(ObjectUtils.isNotNull(deviceRepair)) {
-            if(approveProcess.getApproveStatus().equals(2)){
-                // 鍚屾剰
-                deviceRepair.setStatus(1);
-            }else if(approveProcess.getApproveStatus().equals(3)){
-                // 鎷掔粷
-                deviceRepair.setStatus(2);
-            }
-            deviceRepairMapper.updateById(deviceRepair);
-        }
-
         //閲囪喘瀹℃牳
-        if(approveProcess.getApproveType().equals(5)){
+        if (approveProcess.getApproveType().equals(5)) {
             PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
                     .eq(PurchaseLedger::getPurchaseContractNumber, approveProcess.getApproveReason())
                     .last("limit 1"));
-            if(purchaseLedger != null) {
+            if (purchaseLedger != null) {
                 if (status.equals(2)) {
                     // 鍚屾剰
                     purchaseLedger.setApprovalStatus(3);
@@ -201,8 +180,8 @@
                     for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
                         // 璐ㄦ
                         if (salesLedgerProduct.getIsChecked()) {
-                            purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct);
-                        }else {
+                            addQualityInspect(purchaseLedger, salesLedgerProduct);
+                        } else {
                             //鐩存帴鍏ュ簱
                             stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId());
                         }
@@ -218,33 +197,33 @@
             }
         }
         // 閿�鍞姤浠风姸鎬佷慨鏀�
-        if(approveProcess.getApproveType().equals(6)){
+        if (approveProcess.getApproveType().equals(6)) {
             SalesQuotation salesQuote = salesQuotationMapper.selectOne(new LambdaQueryWrapper<SalesQuotation>()
                     .eq(SalesQuotation::getQuotationNo, approveProcess.getApproveReason())
                     .last("limit 1"));
             // 鍚屾剰
-            if(status.equals(2) && salesQuote != null){
+            if (status.equals(2) && salesQuote != null) {
                 salesQuote.setStatus("閫氳繃");
-            }else if(status.equals(3) && salesQuote != null){
+            } else if (status.equals(3) && salesQuote != null) {
                 salesQuote.setStatus("鎷掔粷");
-            }else if(status.equals(1) && salesQuote != null){
+            } else if (status.equals(1) && salesQuote != null) {
                 salesQuote.setStatus("瀹℃牳涓�");
             }
             salesQuotationMapper.updateById(salesQuote);
         }
         // 鍑哄簱瀹℃壒淇敼
-        if(approveProcess.getApproveType().equals(7)){
+        if (approveProcess.getApproveType().equals(7)) {
             String[] split = approveProcess.getApproveReason().split(":");
             ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
                     .eq(ShippingInfo::getShippingNo, split[1])
                     .orderByDesc(ShippingInfo::getCreateTime)
                     .last("limit 1"));
-            if(shippingInfo != null){
-                if(status.equals(2)){
+            if (shippingInfo != null) {
+                if (status.equals(2)) {
                     shippingInfo.setStatus("瀹℃牳閫氳繃");
-                }else if(status.equals(3)){
+                } else if (status.equals(3)) {
                     shippingInfo.setStatus("瀹℃牳鎷掔粷");
-                }else if(status.equals(1)){
+                } else if (status.equals(1)) {
                     shippingInfo.setStatus("瀹℃牳涓�");
                 }
                 shippingInfoMapper.updateById(shippingInfo);
@@ -252,7 +231,7 @@
 
         }
         // 缁戝畾闄勪欢
-        if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){
+        if (!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1) {
             tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue());
         }
     }
@@ -260,21 +239,21 @@
     @Override
     public void updateApproveNode(ApproveNode approveNode) throws IOException {
         // 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳
-        switch (approveNode.getApproveNodeStatus()){
+        switch (approveNode.getApproveNodeStatus()) {
             case 1:
                 updateApproveProcessStatus(approveNode, Boolean.TRUE.equals(approveNode.getIsLast()) ? 2 : 1);
                 /*娑堟伅閫氱煡*/
                 Integer nodeOrder = approveNode.getApproveNodeOrder();
                 ApproveProcess approveProcess = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
                         .eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())).get(0);
-                if (approveProcess.getApproveUserIds().split(",").length > nodeOrder){
+                if (approveProcess.getApproveUserIds().split(",").length > nodeOrder) {
                     String id = approveProcess.getApproveUserIds().split(",")[nodeOrder];
-                    if (approveProcess.getApproveType()==8){
+                    if (approveProcess.getApproveType() == 8) {
                         sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                                 approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                                 Arrays.asList(Long.valueOf(id)),
                                 "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
-                    }else {
+                    } else {
                         sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                                 approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
                                 Arrays.asList(Long.valueOf(id)),
@@ -307,8 +286,8 @@
     }
 
     //瀹℃壒绫诲瀷鑾峰彇(涓庡墠绔〉闈㈠搴�)
-    private String approveProcessType(Integer approveType){
-        switch (approveType){
+    private String approveProcessType(Integer approveType) {
+        switch (approveType) {
             case 1:
                 return "鍏嚭绠$悊";
             case 2:
@@ -329,4 +308,32 @@
         return null;
     }
 
+    private void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) {
+        QualityInspect qualityInspect = new QualityInspect();
+        qualityInspect.setInspectType(0);
+        qualityInspect.setSupplier(purchaseLedger.getSupplierName());
+        qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
+        qualityInspect.setProductId(saleProduct.getProductId());
+        qualityInspect.setProductName(saleProduct.getProductCategory());
+        qualityInspect.setModel(saleProduct.getSpecificationModel());
+        qualityInspect.setProductModelId(saleProduct.getProductModelId());
+        qualityInspect.setUnit(saleProduct.getUnit());
+        qualityInspect.setQuantity(saleProduct.getQuantity());
+        qualityInspectMapper.insert(qualityInspect);
+        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
+        if (qualityTestStandard.size()>0){
+            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
+            qualityInspectMapper.updateById(qualityInspect);
+            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+                            .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
+                    .forEach(qualityTestStandardParam -> {
+                        QualityInspectParam param = new QualityInspectParam();
+                        com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param);
+                        param.setId(null);
+                        param.setInspectId(qualityInspect.getId());
+                        qualityInspectParamMapper.insert(param);
+                    });
+        }
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java
new file mode 100644
index 0000000..5d55842
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java
@@ -0,0 +1,48 @@
+package com.ruoyi.approve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo;
+import com.ruoyi.approve.mapper.ApproveProcessConfigNodeMapper;
+import com.ruoyi.approve.pojo.ApproveProcessConfigNode;
+import com.ruoyi.approve.service.ApproveProcessConfigNodeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 瀹℃壒娴佺▼閰嶇疆鑺傜偣琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-23 10:21:41
+ */
+@Service
+@RequiredArgsConstructor
+public class ApproveProcessConfigNodeServiceImpl extends ServiceImpl<ApproveProcessConfigNodeMapper, ApproveProcessConfigNode> implements ApproveProcessConfigNodeService {
+
+    private final ApproveProcessConfigNodeMapper approveProcessConfigNodeMapper;
+    @Override
+    public List<ApproveProcessConfigNodeVo> listNode(Integer type) {
+        List<ApproveProcessConfigNode> approveProcessConfigNodes = approveProcessConfigNodeMapper.selectList(new QueryWrapper<ApproveProcessConfigNode>().lambda().eq(ApproveProcessConfigNode::getApproveType, type).orderByAsc(ApproveProcessConfigNode::getNodeOrder));
+        return approveProcessConfigNodes.stream()
+                .map(node -> {
+                    ApproveProcessConfigNodeVo vo = new ApproveProcessConfigNodeVo();
+                    BeanUtils.copyProperties(node, vo);
+                    return vo;
+                })
+                .collect(java.util.stream.Collectors.toList());
+    }
+
+    @Override
+    public Boolean addApproveProcessConfigNodes(List<ApproveProcessConfigNode> approveProcessConfigNodes) {
+        //鍒犻櫎鏃ф暟鎹�
+        approveProcessConfigNodeMapper.delete(new QueryWrapper<ApproveProcessConfigNode>().lambda().eq(ApproveProcessConfigNode::getApproveType, approveProcessConfigNodes.get(0).getApproveType()));
+        //鏂板 鏁版嵁
+        approveProcessConfigNodes.forEach(approveProcessConfigNodeMapper::insert);
+        return true;
+    }
+}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index 48ffd86..951f898 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -6,15 +6,16 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.approve.mapper.ApproveNodeMapper;
 import com.ruoyi.approve.mapper.ApproveProcessMapper;
 import com.ruoyi.approve.pojo.ApproveNode;
 import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.ApproveProcessConfigNodeService;
 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.enums.FileNameType;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -32,63 +33,46 @@
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
-import lombok.AllArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
-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 org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.io.IOException;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
-//@RequiredArgsConstructor
+@RequiredArgsConstructor
 public class ApproveProcessServiceImpl extends ServiceImpl<ApproveProcessMapper, ApproveProcess> implements IApproveProcessService {
     private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
 
-    @Autowired
-    private  StringRedisTemplate redisTemplate;
-    @Autowired
-    private  DailyRedisCounter dailyRedisCounter;
-    @Autowired
-    private  SysDeptMapper sysDeptMapper;
-    @Autowired
-    private  IApproveNodeService approveNodeService;
-    @Autowired
-    private  SysUserMapper sysUserMapper;
-    @Autowired
-    private  ApproveProcessMapper approveProcessMapper;
-    @Autowired
-    private  TempFileServiceImpl tempFileService;
-    @Autowired
-    private  CommonFileMapper commonFileMapper;
-    @Autowired
-    private  CommonFileServiceImpl commonFileService;
-    @Autowired
-    private  ISysNoticeService sysNoticeService;
+    private final SysDeptMapper sysDeptMapper;
+    private final IApproveNodeService approveNodeService;
+    private final SysUserMapper sysUserMapper;
+    private final ApproveProcessMapper approveProcessMapper;
+    private final TempFileServiceImpl tempFileService;
+    private final CommonFileMapper commonFileMapper;
+    private final CommonFileServiceImpl commonFileService;
+    private final ISysNoticeService sysNoticeService;
+    private final PurchaseLedgerMapper purchaseLedgerMapper;
+    private final ShippingInfoMapper shippingInfoMapper;
+    private final ApproveNodeMapper approveNodeMapper;
+    private final ApproveProcessConfigNodeService approveProcessConfigNodeService;
 
     @Override
     public void addApprove(ApproveProcessVO approveProcessVO) throws Exception {
-        SysUser sysUser = sysUserMapper.selectUserById(approveProcessVO.getApproveUser());
-        SysDept sysDept = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId());
-        String[] split = approveProcessVO.getApproveUserIds().split(",");
-        List<Long> longList = Arrays.stream(split)
-                .map(Long::valueOf)  // 灏嗘瘡涓� String 杞崲涓� Long
+        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+        SysDept sysDept = sysDeptMapper.selectDeptById(SecurityUtils.getLoginUser().getCurrentDeptId());
+        List<ApproveProcessConfigNodeVo> list = approveProcessConfigNodeService.listNode( approveProcessVO.getApproveType());
+        List<Long> nodeIds = list.stream()
+                .map(ApproveProcessConfigNodeVo::getApproverId)
                 .collect(Collectors.toList());
-        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(longList);
+        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(nodeIds);
         if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
         if (sysDept == null) throw new RuntimeException("閮ㄩ棬涓嶅瓨鍦�");
         if (sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
@@ -101,12 +85,13 @@
         ApproveProcess approveProcess = new ApproveProcess();
         String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "","approve_id");
         approveProcess.setApproveId(no);
-        approveProcess.setApproveUser(approveProcessVO.getApproveUser());
+        approveProcess.setApproveUser(sysUser.getUserId());
         approveProcess.setApproveUserName(sysUser.getNickName());
-        approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
+        approveProcess.setApproveDeptId(sysDept.getDeptId());
+        approveProcess.setApproveUserIds(nodeIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
         approveProcess.setApproveDeptName(sysDept.getDeptName());
         approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
-        approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime()));
+        approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? new Date(): dateFormat.parse(approveProcessVO.getApproveTime()));
         approveProcess.setApproveReason(approveProcessVO.getApproveReason());
         approveProcess.setDeviceRepairId(approveProcessVO.getDeviceRepairId());
         approveProcess.setMaintenancePrice(approveProcessVO.getMaintenancePrice());
@@ -118,11 +103,10 @@
         approveProcess.setApproveType(approveProcessVO.getApproveType());
         approveProcess.setCreateTime(LocalDateTime.now());
         approveProcess.setTenantId(approveProcessVO.getApproveDeptId());
-        approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
-        approveProcess.setApproveUserCurrentId(longList.get(0));
+        approveProcess.setApproveUserCurrentId(nodeIds.get(0));
         approveProcess.setApproveUserCurrentName(sysUsers
                 .stream()
-                .filter(SysUser -> SysUser.getUserId().equals(longList.get(0)))
+                .filter(SysUser -> SysUser.getUserId().equals(nodeIds.get(0)))
                 .collect(Collectors.toList())
                 .get(0)
                 .getNickName());
@@ -134,20 +118,23 @@
         }
         save(approveProcess);
         //鍒濆鍖栧鎵硅妭鐐�
-        approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(), no, approveProcessVO.getApproveDeptId());
+        String nodeIdStr = nodeIds.stream()
+                .map(String::valueOf)
+                .collect(Collectors.joining(","));
+        approveNodeService.initApproveNodes(nodeIdStr, no, approveProcessVO.getApproveDeptId());
         // 闄勪欢缁戝畾
         tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
         /*娑堟伅閫氱煡*/
-        String id = approveProcessVO.getApproveUserIds().split(",")[0];
+        Long id = nodeIds.get(0);
         if (approveProcess.getApproveType()==8){
             sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                     approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
-                    Arrays.asList(Long.valueOf(id)),
+                    Collections.singletonList(id),
                     "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
         }else {
             sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
                     approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
-                    Arrays.asList(Long.valueOf(id)),
+                    Collections.singletonList(id),
                     "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
         }
     }
@@ -161,12 +148,6 @@
         }
         return sysDeptList;
     }
-
-    @Autowired
-    private PurchaseLedgerMapper purchaseLedgerMapper;
-
-    @Autowired
-    private ShippingInfoMapper shippingInfoMapper;
 
     @Override
     public IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess) {
@@ -305,8 +286,6 @@
         return one;
     }
 
-    @Autowired
-    private ApproveNodeMapper approveNodeMapper;
 
     // 鎶ヤ环瀹℃壒缂栬緫瀹℃牳浜�
     public void updateApproveUser(ApproveGetAndUpdateVo approveGetAndUpdateVo) {
@@ -315,7 +294,7 @@
                 .eq(ApproveProcess::getApproveReason, approveGetAndUpdateVo.getApproveReason())
                 .last("limit 1");
         ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
-        if (approveProcess == null) throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
+        if (approveProcess == null) throw new RuntimeException("鈥�");
         String[] split = approveGetAndUpdateVo.getApproveUserIds().split(",");
         if (split.length == 0) {
             throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
diff --git a/src/main/java/com/ruoyi/approve/utils/ApproveProcessConfigNodeUtils.java b/src/main/java/com/ruoyi/approve/utils/ApproveProcessConfigNodeUtils.java
new file mode 100644
index 0000000..4ae03e6
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/utils/ApproveProcessConfigNodeUtils.java
@@ -0,0 +1,9 @@
+package com.ruoyi.approve.utils;
+
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+public class ApproveProcessConfigNodeUtils {
+
+
+}
diff --git a/src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java b/src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
index e5c05ed..636130a 100644
--- a/src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
+++ b/src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
@@ -3,7 +3,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
diff --git a/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java b/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java
index 04f37b6..929d25e 100644
--- a/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java
+++ b/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java
@@ -20,7 +20,7 @@
 
 /**
  * 鑷畾涔夐��鍑哄鐞嗙被 杩斿洖鎴愬姛
- * 
+ *
  * @author ruoyi
  */
 @Configuration
@@ -31,7 +31,7 @@
 
     /**
      * 閫�鍑哄鐞�
-     * 
+     *
      * @return
      */
     @Override
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index b23148a..ab53367 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -13,7 +13,7 @@
 import com.ruoyi.account.service.AccountIncomeService;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.basic.mapper.ProductMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.mapper.SupplierManageMapper;
@@ -171,15 +171,23 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
-
+        PurchaseLedger purchaseLedger = new PurchaseLedger();
         SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
         //褰曞叆浜�
         SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
+        if (ObjectUtils.isNotEmpty(sysUser)) {
+            purchaseLedger.setRecorderName(sysUser.getNickName());
+            purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
+        }else {
+            purchaseLedger.setRecorderName(SecurityUtils.getLoginUser().getNickName());
+            SysUser sysUser1 = userMapper.selectUserById(SecurityUtils.getUserId());
+            purchaseLedger.setPhoneNumber(sysUser1.getPhonenumber());
+        }
 
         SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId());
 
         // DTO杞珽ntity
-        PurchaseLedger purchaseLedger = new PurchaseLedger();
+
         BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
         LoginUser loginUser = SecurityUtils.getLoginUser();
         if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
@@ -189,8 +197,7 @@
         purchaseLedger.setSalesLedgerId(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getId() : -1);
         purchaseLedger.setSupplierName(supplierManage.getSupplierName());
         purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
-        purchaseLedger.setRecorderName(sysUser.getNickName());
-        purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
+
         purchaseLedger.setApprovalStatus(1);
         // 3. 鏂板鎴栨洿鏂颁富琛�
         if (purchaseLedger.getId() == null) {
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index eed5ffa..5e8b26b 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -1,12 +1,9 @@
 package com.ruoyi.sales.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.approve.mapper.ApproveProcessMapper;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.approve.vo.ApproveProcessVO;
-import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -15,22 +12,14 @@
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.other.service.impl.TempFileServiceImpl;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.ShippingInfoDto;
-import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
-import com.ruoyi.sales.pojo.SalesLedger;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.sales.pojo.ShipmentApproval;
 import com.ruoyi.sales.pojo.ShippingInfo;
-import com.ruoyi.sales.service.ISalesLedgerProductService;
-import com.ruoyi.sales.service.ISalesLedgerService;
 import com.ruoyi.sales.service.ShippingInfoService;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
index 10f4df8..2921463 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -8,7 +8,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Customer;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 1ad20a0..1277642 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -74,9 +74,9 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3300/product-inventory-management-jghg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
-        password: 123456
+        password: root
       # 浠庡簱鏁版嵁婧�
       slave:
         # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
@@ -154,7 +154,7 @@
     database: 0
     # 瀵嗙爜
     #    password: root2022!
-    password:
+    password: 123456
 
     # 杩炴帴瓒呮椂鏃堕棿
     timeout: 10s
diff --git a/src/main/resources/mapper/approve/ApproveProcessConfigNodeMapper.xml b/src/main/resources/mapper/approve/ApproveProcessConfigNodeMapper.xml
new file mode 100644
index 0000000..7e88ba4
--- /dev/null
+++ b/src/main/resources/mapper/approve/ApproveProcessConfigNodeMapper.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.ApproveProcessConfigNodeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveProcessConfigNode">
+        <id column="id" property="id" />
+        <result column="node_order" property="nodeOrder" />
+        <result column="approver_type" property="approverType" />
+        <result column="is_required" property="isRequired" />
+        <result column="timeout_hours" property="timeoutHours" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/basic/CustomerPrivatePoolMapper.xml b/src/main/resources/mapper/basic/CustomerPrivatePoolMapper.xml
new file mode 100644
index 0000000..ded48d8
--- /dev/null
+++ b/src/main/resources/mapper/basic/CustomerPrivatePoolMapper.xml
@@ -0,0 +1,101 @@
+<?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.basic.mapper.CustomerPrivatePoolMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.CustomerPrivatePool">
+        <id column="id" property="id" />
+        <result column="customer_id" property="customerId" />
+        <result column="bound_id" property="boundId" />
+        <result column="create_user" property="createUser" />
+        <result column="update_user" property="updateUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+    <select id="listPage" resultType="com.ruoyi.basic.dto.CustomerPrivatePoolDto">
+        select cpp.id,
+        cpp.bound_id,
+        cpp.type,
+        coalesce(c.id, cp.id) as customer_id,
+        coalesce(c.customer_name, cp.customer_name) as customer_name,
+        coalesce(c.customer_type, cp.customer_type) as customer_type,
+        coalesce(c.taxpayer_identification_number, cp.taxpayer_identification_number) as taxpayer_identification_number,
+        coalesce(c.company_address, cp.company_address) as company_address,
+        coalesce(c.company_phone, cp.company_phone) as company_phone,
+        coalesce(c.contact_person, cp.contact_person) as contact_person,
+        coalesce(c.contact_phone, cp.contact_phone) as contact_phone,
+        coalesce(c.maintainer, cp.maintainer) as maintainer,
+        coalesce(c.maintenance_time, cp.maintenance_time) as maintenance_time,
+        coalesce(c.tenant_id, cp.tenant_id) as tenant_id,
+        coalesce(c.basic_bank_account, cp.basic_bank_account) as basic_bank_account,
+        coalesce(c.bank_account, cp.bank_account) as bank_account,
+        coalesce(c.bank_code, cp.bank_code) as bank_code
+        from customer_private_pool cpp
+        left join customer c on c.id = cpp.customer_id and cpp.type = 1
+        left join customer_private cp on cp.id = cpp.customer_id and cpp.type = 0
+        <where>
+            cpp.delete_flag = 0
+            <if test="c.customerName != null and c.customerName != ''">
+                and (c.customer_name like concat('%', #{c.customerName}, '%') or cp.customer_name like concat('%', #{c.customerName}, '%'))
+            </if>
+            <if test="c.customerType != null">
+                and c.customer_type = #{c.customerType}
+            </if>
+            <if test="c.bound_id != null">
+                and cpp.bound_id = #{c.boundId}
+            </if>
+
+        </where>
+        order by cpp.id desc
+    </select>
+    <select id="selectInfo" resultType="com.ruoyi.basic.dto.CustomerPrivatePoolDto">
+        select cpp.id,
+               cpp.bound_id,
+               cpp.type,
+               coalesce(c.id, cp.id) as customer_id,
+               coalesce(c.customer_name, cp.customer_name) as customer_name,
+               coalesce(c.customer_type, cp.customer_type) as customer_type,
+               coalesce(c.taxpayer_identification_number, cp.taxpayer_identification_number) as taxpayer_identification_number,
+               coalesce(c.company_address, cp.company_address) as company_address,
+               coalesce(c.company_phone, cp.company_phone) as company_phone,
+               coalesce(c.contact_person, cp.contact_person) as contact_person,
+               coalesce(c.contact_phone, cp.contact_phone) as contact_phone,
+               coalesce(c.maintainer, cp.maintainer) as maintainer,
+               coalesce(c.maintenance_time, cp.maintenance_time) as maintenance_time,
+               coalesce(c.tenant_id, cp.tenant_id) as tenant_id,
+               coalesce(c.basic_bank_account, cp.basic_bank_account) as basic_bank_account,
+               coalesce(c.bank_account, cp.bank_account) as bank_account,
+               coalesce(c.bank_code, cp.bank_code) as bank_code
+        from customer_private_pool cpp
+                 left join customer c on c.id = cpp.customer_id and cpp.type = 1
+                 left join customer_private cp on cp.id = cpp.customer_id and cpp.type = 0
+        <where>
+            <if test="id != null">
+                and cpp.id = #{id}
+            </if>
+        </where>
+    </select>
+    <select id="selectInfos" resultType="com.ruoyi.basic.dto.CustomerPrivatePoolDto">
+        select cpp.id,
+               cpp.bound_id,
+               cpp.type,
+               coalesce(c.id, cp.id) as customer_id,
+               coalesce(c.customer_name, cp.customer_name) as customer_name,
+               coalesce(c.customer_type, cp.customer_type) as customer_type,
+               coalesce(c.taxpayer_identification_number, cp.taxpayer_identification_number) as taxpayer_identification_number,
+               coalesce(c.company_address, cp.company_address) as company_address,
+               coalesce(c.company_phone, cp.company_phone) as company_phone,
+               coalesce(c.contact_person, cp.contact_person) as contact_person,
+               coalesce(c.contact_phone, cp.contact_phone) as contact_phone,
+               coalesce(c.maintainer, cp.maintainer) as maintainer,
+               coalesce(c.maintenance_time, cp.maintenance_time) as maintenance_time,
+               coalesce(c.tenant_id, cp.tenant_id) as tenant_id,
+               coalesce(c.basic_bank_account, cp.basic_bank_account) as basic_bank_account,
+               coalesce(c.bank_account, cp.bank_account) as bank_account,
+               coalesce(c.bank_code, cp.bank_code) as bank_code
+        from customer_private_pool cpp
+                 left join customer c on c.id = cpp.customer_id and cpp.type = 1
+                 left join customer_private cp on cp.id = cpp.customer_id and cpp.type = 0
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 71ad49f..7ccd14a 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -10,7 +10,7 @@
         WHERE sales_contract_no LIKE CONCAT('%',#{datePart},'%')
     </select>
     <select id="getSalesNo" resultType="com.ruoyi.sales.pojo.SalesLedger">
-        
+
     </select>
 
     <select id="selectSalesLedgerList" resultType="com.ruoyi.sales.pojo.SalesLedger">

--
Gitblit v1.9.3