From ad7cbfd8fd19fcce4345a4907c1f059a34c2869b Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 11 十二月 2025 15:49:15 +0800
Subject: [PATCH] 工作台

---
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java |  107 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 101 insertions(+), 6 deletions(-)

diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index c39400e..4cfafc5 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -16,6 +16,8 @@
 import com.ycl.common.core.domain.entity.SysRole;
 import com.ycl.common.core.domain.entity.SysUser;
 import com.ycl.common.enums.FlowComment;
+import com.ycl.common.enums.business.AuditHistoryEnum;
+import com.ycl.common.enums.business.AuditTypeEnum;
 import com.ycl.common.enums.business.ProcessLogEventTypeEnum;
 import com.ycl.common.enums.business.TaskStatusEnum;
 import com.ycl.common.exception.CustomException;
@@ -29,6 +31,7 @@
 import com.ycl.domain.entity.ProcessLog;
 import com.ycl.domain.entity.ProjectProcess;
 import com.ycl.domain.entity.SysForm;
+import com.ycl.domain.form.AuditHistoryForm;
 import com.ycl.domain.form.EditFinishedTaskForm;
 import com.ycl.domain.json.RejectData;
 import com.ycl.domain.query.ProcessLogQuery;
@@ -111,7 +114,7 @@
     private final ProcessLogService processLogService;
     private final ApplicationEventPublisher publisher;
     private final ProjectProcessMapper projectProcessMapper;
-
+    private final AuditHistoryService auditHistoryService;
     @Value("${targetIp}")
     private String targetIp;
 
@@ -136,6 +139,21 @@
             taskService.setAssignee(taskVo.getTaskId(), userId.toString());
             taskService.complete(taskVo.getTaskId(), taskVo.getVariables());
         }
+        ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper)
+                .eq(ProjectProcess::getProcessInsId, task.getProcessInstanceId())
+                .eq(ProjectProcess::getProcessDefId, task.getProcessDefinitionId())
+                .one();
+        AuditHistoryForm auditHistoryForm =
+                buildForm(task.getId(),
+                        task.getTaskDefinitionKey(),
+                        null,
+                        SecurityUtils.getDeptId() + "",
+                        AuditTypeEnum.Review.name(),
+                        projectProcess.getProjectId(),
+                        "t_project_info",
+                        task.getName()
+                );
+        auditHistoryService.add(auditHistoryForm);
         return AjaxResult.success();
     }
 
@@ -175,6 +193,7 @@
             }
         }
         taskService.addComment(taskId, task.getProcessInstanceId(), FlowComment.SUBMIT.getType(), "瀹屾垚鎻愪氦");
+        //鍒ゆ柇鏄惁鏄娲句换鍔�
         if (DelegationState.PENDING.equals(task.getDelegationState())) {
             taskService.resolveTask(taskId, newV);
         } else {
@@ -194,9 +213,45 @@
                     ProcessLogEventTypeEnum.FINISHED,
                     null));
         }
+        //淇濆瓨鏃ュ織
+        AuditHistoryForm auditHistoryForm =
+                buildForm(taskId,
+                task.getTaskDefinitionKey(),
+                null,
+                SecurityUtils.getDeptId() + "",
+                AuditTypeEnum.Submit.name(),
+                projectProcess.getProjectId(),
+                "t_project_info",
+                task.getName()
+        );
+        auditHistoryService.add(auditHistoryForm);
+
         return AjaxResult.success("鎻愪氦鎴愬姛");
     }
+    public AuditHistoryForm buildForm(
+            String taskId,
+            String taskDefinitionKey,
+            String viewer,
+            String commitDept,
+            String auditType,
+            String businessKey,
+            String businessTable,
+            String content) {
+        AuditHistoryForm auditHistoryForm = new AuditHistoryForm();
+        auditHistoryForm.setTaskId(taskId);
+        auditHistoryForm.setTaskDefinitionKey(taskDefinitionKey);
+        auditHistoryForm.setViewer(viewer);
+        auditHistoryForm.setCommitDept(commitDept);
+        auditHistoryForm.setAuditType(auditType);
+        auditHistoryForm.setBusinessKey(businessKey);
+        auditHistoryForm.setBusinessTable(businessTable);
+        auditHistoryForm.setContent(content);
 
+        // 5. 鐗规畩瀛楁榛樿鍊硷細isRead 榛樿涓� 锛堟湭璇伙級
+        auditHistoryForm.setIsRead(AuditHistoryEnum.UN_READ.name());
+
+        return auditHistoryForm;
+    }
 
     /**
      * 瀹圭己琛ヤ氦
@@ -498,6 +553,21 @@
                 task.getName(),
                 ProcessLogEventTypeEnum.REJECT,
                 new RejectData(flowTaskVo.getComment())));
+
+        //淇濆瓨鏃ュ織
+        AuditHistoryForm auditHistoryForm =
+                buildForm(task.getId(),
+                        task.getTaskDefinitionKey(),
+                        null,
+                        SecurityUtils.getDeptId() + "",
+                        AuditTypeEnum.Submit.name(),
+                        projectProcess.getProjectId(),
+                        "t_project_info",
+                        task.getName()
+                );
+        auditHistoryService.add(auditHistoryForm);
+
+
     }
 
     /**
@@ -687,12 +757,24 @@
     @Transactional(rollbackFor = Exception.class)
     public void assignTask(FlowTaskVo flowTaskVo) {
         // 鐩存帴杞淳灏卞彲浠ヨ鐩栨帀涔嬪墠鐨�
+        log.info("flowTaskVo:{}",flowTaskVo);
         taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getAssignee());
 //        // 鍒犻櫎鎸囨淳浜洪噸鏂版寚娲�
 //        taskService.deleteCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee());
 //        taskService.addCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee());
 //        // 濡傛灉瑕佹煡璇㈣浆缁欎粬浜哄鐞嗙殑浠诲姟锛屽彲浠ュ悓鏃跺皢OWNER杩涜璁剧疆锛�
 //        taskService.setOwner(flowTaskVo.getTaskId(), flowTaskVo.getAssignee());
+
+//        AuditHistoryForm auditHistoryForm =
+//                buildForm(flowTaskVo.getTaskId(),
+//                        task.getTaskDefinitionKey(),
+//                        null,
+//                        SecurityUtils.getDeptId() + "",
+//                        AuditTypeEnum.Submit.name(),
+//                        projectProcess.getProjectId(),
+//                        "t_project_info",
+//                        task.getName()
+//                );
 
     }
 
@@ -1513,7 +1595,7 @@
 
     /**
      * 娴佺▼鑺傜偣琛ㄥ崟
-     *
+     * 鐐瑰嚮鍔炵悊杩涘叆
      * @param taskId 娴佺▼浠诲姟缂栧彿
      * @return
      */
@@ -1627,7 +1709,9 @@
 
     @Override
     public AjaxResult detail(String processInsId, String taskId) {
+        //鏌ヨ杩愯鏃舵祦绋嬪疄渚嬶紙鍚祦绋嬪彉閲忥級
         ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().includeProcessVariables().processInstanceId(processInsId).singleResult();
+        log.info("鎵撳嵃杩愯鏃�:{}",processInstance);
         // 娴佺▼鍙橀噺
         Map<String, Object> parameters = new HashMap<>();
         if (Objects.isNull(processInstance)) {
@@ -1637,7 +1721,7 @@
             if (Objects.isNull(historicProcessInstance)) {
                 throw new RuntimeException("娴佺▼涓嶅瓨鍦�");
             }
-
+            //娴佺▼鏈粨鏉� 鏌ヨ娴佺▼宸插畬鎴愮殑缁撶偣浠诲姟
             List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
                     .taskId(taskId)
                     .finished()
@@ -1648,7 +1732,9 @@
             if (CollectionUtils.isNotEmpty(hisTasks) && Objects.isNull(hisTasks.get(0))) {
                 throw new RuntimeException("璇ヤ换鍔′笉瀛樺湪");
             }
+            //鑾峰緱鏈�鏂扮殑浠诲姟鑺傜偣
             HistoricTaskInstance hisTask = hisTasks.get(0);
+            //鑾峰緱鍙傛暟
             parameters = historicProcessInstance.getProcessVariables();
             List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters,
                     hisTask.getFormKey(),
@@ -1657,12 +1743,14 @@
                     hisTask.getTaskDefinitionKey(),
                     Boolean.TRUE, Boolean.TRUE);
             List<FormDetailVO> dataList = new ArrayList<>(2);
+            // 鎸夋墽琛屾祦ID鍒嗙粍鍓嶇疆鑺傜偣
             Map<String, List<FormDetailVO>> map = new HashMap<>(2);
             beforeNodes.stream().forEach(node -> {
                 if (node.getCurrent()) {
                     node.setTaskId(taskId);
                     dataList.add(node);
                 } else {
+                    //鍓嶇疆鑺傜偣锛氭煡璇㈠搴旂殑鏈�鏂板巻鍙蹭换鍔�
                     List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
                             .processInstanceId(hisTask.getProcessInstanceId())
                             .finished()
@@ -1670,6 +1758,7 @@
                             .orderByTaskCreateTime()
                             .desc()
                             .list();
+
                     if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
                         node.setTaskId(beforeTasks.get(0).getId());
                         List<FormDetailVO> l = map.get(beforeTasks.get(0));
@@ -1689,7 +1778,9 @@
             }
             List<DoFormDetailVO> vos = dataList.stream().map(node -> {
                 if (node.getCurrent()) {
+                    // 璋冪敤鏃ュ織鏈嶅姟锛屾煡璇㈣浠诲姟鏄惁澶勪簬鎸傝捣鐘舵�侊紙浼犲叆浠诲姟ID鍜屾祦绋嬪疄渚婭D锛�
                     if (processLogService.taskIsHangup(taskId, hisTask.getProcessInstanceId())) {
+                        //鑻ユ寕璧凤紝缁欒妭鐐硅缃�滄寕璧封�濈姸鎬侊紙鍓嶇浼氬睍绀烘寕璧锋爣璇嗭級
                         node.setTaskStatus(TaskStatusEnum.HANGUP);
                     }
                 }
@@ -1812,16 +1903,19 @@
 
         // 杩欓噷鍙渶瑕佹煡鑷韩浠ュ強涓婁竴涓妭鐐�(濡傛灉骞惰鐨勬湁澶氫釜)鐨勮〃鍗曟暟鎹�
         List<FormDetailVO> beforeNodes = taskCommonService.getBeforeNodeDefInfo(processDefId, processDefKey, sysFormService, Boolean.TRUE);
+        // 闈炲綋鍓嶈妭鐐� 鎴� 闇�瑕佸綋鍓嶈妭鐐规暟鎹�
         List<String> beforeNodeDefIds = beforeNodes.stream().filter(item -> !item.getCurrent() || currentNeedData).map(FormDetailVO::getBeforeNodeDefId).collect(Collectors.toList());
 
         // 澶勭悊姣忎釜琛ㄥ崟鐨勬暟鎹�
         for (FormDetailVO formDetailVO : beforeNodes) {
+            // 璺宠繃鈥滃綋鍓嶈妭鐐逛笖涓嶉渶瑕佸叾鏁版嵁鈥濈殑鍦烘櫙 骞朵笖 currentNeedData涓嶉渶瑕佸綋鍓嶈妭鐐规暟鎹殑鎯呭喌
             if (formDetailVO.getCurrent() && !currentNeedData) {
                 // 褰撳墠鑺傜偣鐨勮〃鍗曚篃瑕佸鐞唅p闂
                 continue;  // 璺宠繃褰撳墠鑺傜偣锛屽洜涓哄綋鍓嶈妭鐐瑰湪鑾峰彇鍓嶇疆鑺傜偣鏃跺凡缁忚缃繃浜�(浣嗚〃鍗曟暟鎹病鏈夌粰)
             }
 
             Map<String, Object> newP = new HashMap<>();
+            // 瀛樺偍褰撳墠鑺傜偣鐨勮〃鍗曟暟鎹�
             if (CollectionUtils.isNotEmpty(beforeNodeDefIds)) {
                 for (String key : parameters.keySet()) {
                     // 杩囨护鎷垮埌鐩爣琛ㄥ崟鏁版嵁锛屽皢鐩爣琛ㄥ崟鏁版嵁鏀惧埌鏂癿ap涓�
@@ -1834,7 +1928,7 @@
                     }
                 }
             }
-
+            //鑾峰緱鍓嶇疆鑺傜偣瀹氫箟id锛屽嵆浠诲姟key
             Object form = newP.get(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY);
             if (Objects.nonNull(form)) {
                 JSONObject formJson = JSONObject.parseObject(JSON.toJSONString(form));
@@ -1853,11 +1947,12 @@
                             options.put("uploadURL", String.format("http://%s:10076/common/upload", this.targetIp));
                         }
                     }
-
+                    // 鏇存柊琛ㄥ崟缁撴瀯锛堝凡澶勭悊绂佺敤鍜屼笂浼犲湴鍧�锛�
                     formJson.put(ProcessConstants.WIDGET_LIST, oldFields);
                     newP.put(ProcessConstants.TASK_FORM_KEY, formJson);
+                    // 鍒犻櫎鍘熷鐨勨�滆妭鐐笽D&TASK_FORM_KEY鈥濋敭锛堥伩鍏嶅啑浣欙級
                     newP.remove(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY);
-                    // 澶勭悊宸茬粡涓婁紶鐨勬枃浠剁殑ip鍦板潃
+                    // 宸蹭笂浼犳枃浠剁殑璁块棶IP鍦板潃锛堝墠绔瑙�/涓嬭浇鏃舵寚鍚戞纭湴鍧�锛�
                     for (String s : newP.keySet()) {
                         if (ProcessConstants.TASK_FORM_KEY.equals(s)) {
                             continue;

--
Gitblit v1.8.0