From 68d4b9484a3d1874703d79d87f8015998213d9a8 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 12 一月 2026 14:35:00 +0800
Subject: [PATCH] 消息通知与协同审批联动

---
 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java      |   57 ++++++++++++++++--
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java   |   32 ++++++++++
 src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java                 |    2 
 src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java                      |    4 
 src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java              |    2 
 src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java |   21 +++---
 src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java         |   10 +-
 src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java                    |    2 
 8 files changed, 105 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java
index 648d04a..59cf69e 100644
--- a/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java
+++ b/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.approve.pojo.ApproveNode;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
 * @author Administrator
@@ -9,6 +10,7 @@
 * @createDate 2025-07-08 16:50:15
 * @Entity com.ruoyi.approve.pojo.ApproveNode
 */
+@Mapper
 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
index 32c6be0..bddde19 100644
--- a/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java
+++ b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.approve.pojo.ApproveProcess;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -12,6 +13,7 @@
 * @createDate 2025-07-08 16:44:05
 * @Entity com.ruoyi.approve.pojo.ApproveProcess
 */
+@Mapper
 public interface ApproveProcessMapper extends BaseMapper<ApproveProcess> {
 
     IPage<ApproveProcess> listPage(Page page,@Param("req") ApproveProcess approveProcess);
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
index 64177e8..e468919 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -24,7 +24,7 @@
 @ApiModel
 public class ApproveProcess{
     /**
-     * 
+     *
      */
     @TableId(type = IdType.AUTO)
     private Long id;
@@ -168,4 +168,4 @@
     private static final long serialVersionUID = 1L;
 
 
-}
\ No newline at end of file
+}
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 f5919de..09c94a7 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -2,12 +2,15 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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.IApproveNodeService;
+import com.ruoyi.approve.vo.ApproveProcessVO;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
@@ -15,6 +18,7 @@
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
 import com.ruoyi.sales.mapper.CommonFileMapper;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
@@ -25,6 +29,7 @@
 
 import java.io.IOException;
 import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
@@ -42,6 +47,8 @@
 
     @Autowired
     private TempFileServiceImpl tempFileService;
+    @Autowired
+    private  ISysNoticeService sysNoticeService;
 
     @Autowired
     private CommonFileMapper fileMapper;
@@ -146,15 +153,16 @@
         approveProcessMapper.updateById(approveProcess);
 
         DeviceRepair deviceRepair = deviceRepairMapper.selectById(approveProcess.getDeviceRepairId());
-        if(deviceRepair == null) throw new RuntimeException("璁惧鎶ヤ慨涓嶅瓨鍦�");
-        if(approveProcess.getApproveStatus().equals(2)){
-            // 鍚屾剰
-            deviceRepair.setStatus(1);
-        }else if(approveProcess.getApproveStatus().equals(3)){
-            // 鎷掔粷
-            deviceRepair.setStatus(2);
+        if(ObjectUtils.isNotNull(deviceRepair)) {
+            if(approveProcess.getApproveStatus().equals(2)){
+                // 鍚屾剰
+                deviceRepair.setStatus(1);
+            }else if(approveProcess.getApproveStatus().equals(3)){
+                // 鎷掔粷
+                deviceRepair.setStatus(2);
+            }
+            deviceRepairMapper.updateById(deviceRepair);
         }
-        deviceRepairMapper.updateById(deviceRepair);
         // 缁戝畾闄勪欢
         if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){
             tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue());
@@ -167,6 +175,18 @@
         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){
+                    String id = approveProcess.getApproveUserIds().split(",")[nodeOrder];
+                    sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
+                            approveNode.getApproveProcessId()+"娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+                            Arrays.asList(Long.valueOf(id)),
+                            approveNode.getTenantId(),
+                            "/collaborativeApproval/approvalProcess?approveType="+approveProcess.getApproveType()+"&approveId="+approveNode.getApproveProcessId());
+                }
                 break;
             case 2:
                 updateApproveProcessStatus(approveNode, 3);
@@ -186,4 +206,25 @@
         update(queryWrapper);
     }
 
+    //瀹℃壒绫诲瀷鑾峰彇(涓庡墠绔〉闈㈠搴�)
+    private String approveProcessType(Integer approveType){
+        switch (approveType){
+            case 1:
+                return "鍏嚭绠$悊";
+            case 2:
+                return "璇峰亣绠$悊";
+            case 3:
+                return "鍑哄樊绠$悊";
+            case 4:
+                return "鎶ラ攢绠$悊";
+            case 5:
+                return "閲囪喘瀹℃壒";
+            case 6:
+                return "鎶ヤ环瀹℃壒";
+            case 7:
+                return "鍑哄簱瀹℃壒";
+        }
+        return null;
+    }
+
 }
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 404d594..e7478a9 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -22,6 +22,7 @@
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
 import com.ruoyi.sales.mapper.CommonFileMapper;
 import com.ruoyi.sales.pojo.CommonFile;
 import lombok.AllArgsConstructor;
@@ -61,6 +62,7 @@
     private final ApproveProcessMapper approveProcessMapper;
     private final TempFileServiceImpl tempFileService;
     private final CommonFileMapper commonFileMapper;
+    private final ISysNoticeService sysNoticeService;
 
     @Override
     public void addApprove(ApproveProcessVO approveProcessVO) throws  Exception {
@@ -116,6 +118,13 @@
         approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(),approveID,approveProcessVO.getApproveDeptId());
         // 闄勪欢缁戝畾
         tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
+        /*娑堟伅閫氱煡*/
+        String id = approveProcessVO.getApproveUserIds().split(",")[0];
+        sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcessVO.getApproveType()),
+                approveID+"娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+                Arrays.asList(Long.valueOf(id)),
+                approveProcessVO.getApproveDeptId(),
+                "/collaborativeApproval/approvalProcess?approveType="+approveProcessVO.getApproveType()+"&approveId="+approveID);
     }
 
     @Override
@@ -224,4 +233,27 @@
     }
 
 
+    //瀹℃壒绫诲瀷鑾峰彇(涓庡墠绔〉闈㈠搴�)
+    private String approveProcessType(Integer approveType){
+        switch (approveType){
+            case 1:
+                return "鍏嚭绠$悊";
+            case 2:
+                return "璇峰亣绠$悊";
+            case 3:
+                return "鍑哄樊绠$悊";
+            case 4:
+                return "鎶ラ攢绠$悊";
+            case 5:
+                return "閲囪喘瀹℃壒";
+            case 6:
+                return "鎶ヤ环瀹℃壒";
+            case 7:
+                return "鍑哄簱瀹℃壒";
+        }
+        return null;
+    }
+
+
+
 }
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java b/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
index 8415fba..917d9aa 100644
--- a/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
+++ b/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
@@ -73,7 +73,7 @@
      * @param needPushRoles 鍙戦�佺殑瑙掕壊
      * @param jumpPath 璺宠浆鍦板潃
      */
-    void simpleNoticeByRoles(final String title, final String message, final List<String> needPushRoles,
+    void simpleNoticeByRoles(final String title, final String message, final Long tenantId,final List<String> needPushRoles,
                                       final String jumpPath);
 
     /**
@@ -83,17 +83,17 @@
      * @param needPerms 鍙戦�佺殑鏉冮檺鑰� 宸插寘鍚笂绾�
      * @param jumpPath 璺宠浆鍦板潃
      */
-    void simpleNoticeByPerms(final String title, final String message, final List<String> needPerms,
+    void simpleNoticeByPerms(final String title, final String message, final Long tenantId,final List<String> needPerms,
                                       final String jumpPath);
 
     /**
      * 閫氳繃鎸囧畾浜哄彂閫佹彁閱�
      * @param title 鏍囬
      * @param message 娑堟伅
+     * @param tenantId 绉熸埛id
      * @param jumpPath 璺宠浆鍦板潃
      */
-    void simpleNoticeByUser(final String title, final String message, Long consigneeId,
-                             final String jumpPath);
+    void simpleNoticeByUser(final String title, final String message, final List<Long> consigneeId, final Long tenantId, final String jumpPath);
 
     /**
      * 閫氳繃鎵�鏈変汉 鍙戦�佹彁閱�
@@ -101,7 +101,7 @@
      * @param message 娑堟伅
      * @param jumpPath 璺宠浆鍦板潃
      */
-    void simpleNoticeAll(final String title, final String message, final String jumpPath);
+    void simpleNoticeAll(final String title, final String message,final Long tenantId,final String jumpPath);
 
     void insertBatch(final List<SysNotice> notices);
 }
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
index f600e91..79a5750 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
@@ -126,7 +126,7 @@
     }
 
     @Override
-    public void simpleNoticeByRoles(final String title, String message, List<String> needPushRoles,
+    public void simpleNoticeByRoles(final String title, String message, Long tenantId, List<String> needPushRoles,
                                              final String jumpPath) {
         Long userId = SecurityUtils.getUserId();
         if (StrUtil.isBlank(message) || CollectionUtils.isEmpty(needPushRoles)) {
@@ -136,34 +136,34 @@
         rolesWithAdmin.add("绠$悊鍛�");
         List<SysNotice> collect = rolesWithAdmin.stream()
                 .flatMap(it -> userMapper.getUserByRole(it).stream())
-                .map(it -> convertSysNotice(title, message, it, jumpPath, userId))
+                .map(it -> convertSysNotice(title, message, it,tenantId, jumpPath, userId))
                 .collect(Collectors.toList());
         sysNoticeService.insertBatch(collect);
     }
 
     @Override
-    public void simpleNoticeByPerms(String title, String message, List<String> needPerms,
+    public void simpleNoticeByPerms(String title, String message, Long tenantId, List<String> needPerms,
                                              String jumpPath) {
         Long userId = SecurityUtils.getLoginUser().getUserId();
         if (StrUtil.isBlank(message) || CollectionUtils.isEmpty(needPerms)) {
             return;
         }
-        List<SysNotice> collect = userMapper.getUserByPerms(needPerms).stream().map(it -> convertSysNotice(title, message, it, jumpPath,  userId)).collect(Collectors.toList());
+        List<SysNotice> collect = userMapper.getUserByPerms(needPerms).stream().map(it -> convertSysNotice(title, message, it,tenantId, jumpPath,  userId)).collect(Collectors.toList());
         sysNoticeService.insertBatch(collect);
     }
 
     @Override
-    public void simpleNoticeByUser(String title, String message, Long consigneeId,
+    public void simpleNoticeByUser(String title, String message,  List<Long> consigneeId, Long tenantId,
                                     String jumpPath) {
         Long userId = SecurityUtils.getLoginUser().getUserId();
-        SysNotice sysNotice = convertSysNotice(title, message, consigneeId, jumpPath, userId);
-        sysNoticeService.save(sysNotice);
+        List<SysNotice> sysNotices = consigneeId.stream().map(it -> convertSysNotice(title, message, it,tenantId, jumpPath, userId)).collect(Collectors.toList());
+        sysNoticeService.saveBatch(sysNotices);
     }
 
     @Override
-    public void simpleNoticeAll(String title, String message, String jumpPath) {
+    public void simpleNoticeAll(String title, String message,  Long tenantId,String jumpPath) {
         Long userId = SecurityUtils.getLoginUser().getUserId();
-        List<SysNotice> collect = userMapper.selectList(null).stream().map(it -> convertSysNotice(title, message, it.getUserId(), jumpPath,  userId)).collect(Collectors.toList());
+        List<SysNotice> collect = userMapper.selectList(null).stream().map(it -> convertSysNotice(title, message, it.getUserId(),tenantId, jumpPath,  userId)).collect(Collectors.toList());
         sysNoticeService.saveBatch(collect);
     }
 
@@ -179,7 +179,7 @@
 
     }
 
-    private SysNotice convertSysNotice(String title,String message,Long consigneeId,String jumpPath,Long currentUserId) {
+    private SysNotice convertSysNotice(String title,String message,Long consigneeId, Long tenantId,String jumpPath,Long currentUserId) {
         SysNotice sysNotice = new SysNotice();
         sysNotice.setNoticeType("1");
         sysNotice.setNoticeTitle(title);//鏍囬
@@ -188,6 +188,7 @@
         sysNotice.setConsigneeId(consigneeId);
         sysNotice.setSenderId(currentUserId);
         sysNotice.setJumpPath(jumpPath);
+        sysNotice.setTenantId(tenantId);
         return sysNotice;
     }
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java b/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java
index fa2fc39..69de996 100644
--- a/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/CommonFileMapper.java
@@ -3,6 +3,8 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.sales.pojo.CommonFile;
+import org.apache.ibatis.annotations.Mapper;
 
+@Mapper
 public interface CommonFileMapper extends BaseMapper<CommonFile> {
 }

--
Gitblit v1.9.3