From 2b0b64182263d922b946ec898070e59b602382dc Mon Sep 17 00:00:00 2001
From: Bang Hu <hu_bang@hotmail.com>
Date: 星期四, 11 九月 2025 18:38:09 +0800
Subject: [PATCH] 交易审批多节点问题处理完善

---
 src/main/java/com/webmanage/service/impl/OrderInfoServiceImpl.java |  149 +++++++++++++++++++++++++++++++------------------
 1 files changed, 93 insertions(+), 56 deletions(-)

diff --git a/src/main/java/com/webmanage/service/impl/OrderInfoServiceImpl.java b/src/main/java/com/webmanage/service/impl/OrderInfoServiceImpl.java
index fed0d0e..b795344 100644
--- a/src/main/java/com/webmanage/service/impl/OrderInfoServiceImpl.java
+++ b/src/main/java/com/webmanage/service/impl/OrderInfoServiceImpl.java
@@ -214,11 +214,15 @@
                  .map(Object::toString)
                  .collect(Collectors.toList());
 
+        log.info("浠庡伐浣滄祦鏈嶅姟鑾峰彇鐨勫師濮嬫暟鎹�: {}", workFlowsList);
+        log.info("鎻愬彇鐨勫伐浣滄祦ID鍒楄〃: {}", workFlowIds);
+
         Map<String,String> workFlowIdAndTaskIdMap = workFlowsList.stream()
                 .filter(item -> item instanceof Map)
                 .map(item -> (Map<?, ?>) item).collect(Collectors.toMap(m -> m.get("processInstanceId").toString(), m -> m.get("taskId").toString(),(k1,k2) -> k2));
 
         // 鎵ц鍒嗛〉鏌ヨ
+        log.info("鎵ц寰呭鎵硅鍗曟煡璇紝宸ヤ綔娴両D鍒楄〃: {}, 璁㈠崟鐘舵��: {}, 浜у搧鍚嶇О: {}", workFlowIds, queryDTO.getOrderStatus(), queryDTO.getProductName());
         IPage<OrderInfo> result = baseMapper.selectPendingApprovalOrderPage(
             page, queryDTO.getOrderStatus(), queryDTO.getProductName(), queryDTO.getProviderName(),
             queryDTO.getOrderId(),
@@ -226,6 +230,7 @@
             queryDTO.getApplyTimeEnd() != null ? queryDTO.getApplyTimeEnd().toString() : null,
             queryDTO.getOrderBy(), queryDTO.getOrderDirection(), workFlowIds
         );
+        log.info("鏌ヨ缁撴灉鎬绘暟: {}, 褰撳墠椤佃褰曟暟: {}", result.getTotal(), result.getRecords().size());
 
         // 灏嗚鍗曚笌璇︽儏鑱旇〃灏佽鍒癡O
         List<OrderDetailVO> voList = result.getRecords().stream().map(order -> {
@@ -256,10 +261,10 @@
     public PageResult<OrderDetailVO> getPendingApprovalOrderPageWithProductConditions(OrderQueryDTO queryDTO) {
         // 鏍规嵁浜у搧鏉′欢鏌ヨ浜у搧ID鍒楄〃
         List<String> productIds = null;
-        if (StringUtils.hasText(queryDTO.getIndustryId()) || StringUtils.hasText(queryDTO.getUnitProjectId()) ||
+        if (StringUtils.hasText(queryDTO.getIndustryId()) || queryDTO.getUnitProjectId() != null ||
             StringUtils.hasText(queryDTO.getProductTypeId()) || StringUtils.hasText(queryDTO.getProductSubTypeId())) {
             productIds = reportResultSubmissionMapper.selectProductIdsByConditions(
-                queryDTO.getIndustryId(), queryDTO.getUnitProjectId(), 
+                queryDTO.getIndustryId(), queryDTO.getUnitProjectId(), queryDTO.getImportantDistrictId(),
                 queryDTO.getProductTypeId(), queryDTO.getProductSubTypeId()
             );
             
@@ -353,10 +358,10 @@
 
         // 鏍规嵁浜у搧鏉′欢鏌ヨ浜у搧ID鍒楄〃
         List<String> productIds = null;
-        if (StringUtils.hasText(queryDTO.getIndustryId()) || StringUtils.hasText(queryDTO.getUnitProjectId()) ||
+        if (StringUtils.hasText(queryDTO.getIndustryId())  || queryDTO.getUnitProjectId() != null ||
             StringUtils.hasText(queryDTO.getProductTypeId()) || StringUtils.hasText(queryDTO.getProductSubTypeId())) {
             productIds = reportResultSubmissionMapper.selectProductIdsByConditions(
-                queryDTO.getIndustryId(), queryDTO.getUnitProjectId(), 
+                queryDTO.getIndustryId(), queryDTO.getUnitProjectId(), queryDTO.getImportantDistrictId(),
                 queryDTO.getProductTypeId(), queryDTO.getProductSubTypeId()
             );
             
@@ -420,10 +425,10 @@
 
         // 鏍规嵁浜у搧鏉′欢鏌ヨ浜у搧ID鍒楄〃
         List<String> productIds = null;
-        if (StringUtils.hasText(queryDTO.getIndustryId()) || StringUtils.hasText(queryDTO.getUnitProjectId()) ||
+        if (StringUtils.hasText(queryDTO.getIndustryId()) || queryDTO.getUnitProjectId()!= null ||
             StringUtils.hasText(queryDTO.getProductTypeId()) || StringUtils.hasText(queryDTO.getProductSubTypeId())) {
             productIds = reportResultSubmissionMapper.selectProductIdsByConditions(
-                queryDTO.getIndustryId(), queryDTO.getUnitProjectId(), 
+                queryDTO.getIndustryId(), queryDTO.getUnitProjectId(), queryDTO.getImportantDistrictId(),
                 queryDTO.getProductTypeId(), queryDTO.getProductSubTypeId()
             );
             
@@ -677,7 +682,7 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean addOrderEvaluation(String orderId, Long evaluatorId, String evaluatorName, 
+    public boolean addOrderEvaluation(String orderId, String evaluatorId, String evaluatorName,
                                    String evaluatorType, String content, Integer rating, 
                                    Integer serviceRating, Integer qualityRating, Integer deliveryRating, 
                                    Boolean isAnonymous) {
@@ -981,31 +986,51 @@
             }
         }
 
-        // 鏇存柊璁㈠崟鐘舵�侊紙閫氳繃 -> 涓嬩竴涓紱椹冲洖 -> 涓婁竴涓級
+        // 鍏堣皟鐢ㄥ伐浣滄祦锛屽啀渚濇嵁缁撴灉鍐冲畾鏄惁娴佽浆璁㈠崟鐘舵��
         String currentStatus = orderInfo.getOrderStatus();
         if (!StringUtils.hasText(currentStatus)) {
             throw new BusinessException("璁㈠崟褰撳墠鐘舵�佷负绌�");
         }
         boolean isReject = orderApprovalDTO.getApprovalResult().contains("椹冲洖");
-        String targetStatus = isReject ? getPreviousOrderStatus(currentStatus) : getNextOrderStatus(currentStatus);
-        if (targetStatus == null) {
-            throw new BusinessException((isReject ? "宸叉槸鍒濆鐘舵�侊紝鏃犳硶鍥為��" : "宸叉槸鏈�缁堢姸鎬侊紝鏃犳硶缁х画娴佽浆"));
-        }
-        orderInfo.setOrderStatus(targetStatus);
-        orderInfo.setUpdatedAt(LocalDateTime.now());
 
-        int updated = this.baseMapper.updateById(orderInfo);
-        if (updated <= 0) {
-            throw new BusinessException("鏇存柊璁㈠崟鐘舵�佸け璐�");
-        }
-
-        log.info("璁㈠崟鐘舵�佹洿鏂版垚鍔燂紝璁㈠崟ID: {}, 浠� {} 鏇存柊涓� {}", orderInfo.getOrderId(), currentStatus, targetStatus);
         // 鏍规嵁瀹℃壒缁撴灉璋冪敤鎻愪氦鎴栭┏鍥炴帴鍙�
-        String comment = orderApprovalDTO.getApprovalResult().contains("椹冲洖") ? "瀹℃牳椹冲洖" : "瀹℃牳閫氳繃";
-        if ("瀹℃牳椹冲洖".equals(comment)) {
-            rejectWorkflowTask(orderApprovalDTO.getTaskId(), String.valueOf(orderApprovalDTO.getApproverId()), comment);
+        String comment = isReject ? "瀹℃牳椹冲洖" : "瀹℃牳閫氳繃";
+        boolean workflowEnded = false;
+        if (isReject) {
+            // 椹冲洖锛氳皟鐢ㄥ伐浣滄祦椹冲洖锛屽苟灏嗚鍗曠姸鎬佸洖閫�鍒颁笂涓�涓姸鎬�
+            rejectWorkflowTask(orderApprovalDTO.getTaskId(), String.valueOf(orderApprovalDTO.getApproverId()), orderApprovalDTO.getApprovalOpinion());
+            String previousStatus = getPreviousOrderStatus(currentStatus);
+            if (previousStatus == null) {
+                throw new BusinessException("宸叉槸鍒濆鐘舵�侊紝鏃犳硶鍥為��");
+            }
+            orderInfo.setOrderStatus(previousStatus);
+            orderInfo.setUpdatedAt(LocalDateTime.now());
+
+            int updated = this.baseMapper.updateById(orderInfo);
+            if (updated <= 0) {
+                throw new BusinessException("鏇存柊璁㈠崟鐘舵�佸け璐�");
+            }
+            log.info("璁㈠崟鐘舵�佸洖閫�鎴愬姛锛岃鍗旾D: {}, 浠� {} 鍥為��涓� {}", orderInfo.getOrderId(), currentStatus, previousStatus);
         } else {
-            completeWorkflowTask(orderApprovalDTO.getTaskId(), String.valueOf(orderApprovalDTO.getApproverId()), comment);
+            // 閫氳繃锛氳皟鐢ㄥ畬鎴愪换鍔★紝骞惰鍙栧伐浣滄祦鏄惁缁撴潫
+            workflowEnded = completeWorkflowTask(orderApprovalDTO.getTaskId(), String.valueOf(orderApprovalDTO.getApproverId()), orderApprovalDTO.getApprovalOpinion());
+            // 鎸夐渶娴佽浆璁㈠崟鐘舵�侊細浠呭綋鏄�氳繃涓斿伐浣滄祦宸茬粨鏉熸椂锛屾帹杩涘埌涓嬩竴涓姸鎬�
+            if (workflowEnded) {
+                String targetStatus = getNextOrderStatus(currentStatus);
+            if (targetStatus == null) {
+                        throw new BusinessException("宸叉槸鏈�缁堢姸鎬侊紝鏃犳硶缁х画娴佽浆");
+            }
+            orderInfo.setOrderStatus(targetStatus);
+            orderInfo.setUpdatedAt(LocalDateTime.now());
+
+            int updated = this.baseMapper.updateById(orderInfo);
+            if (updated <= 0) {
+                throw new BusinessException("鏇存柊璁㈠崟鐘舵�佸け璐�");
+            }
+            log.info("璁㈠崟鐘舵�佹洿鏂版垚鍔燂紝璁㈠崟ID: {}, 浠� {} 鏇存柊涓� {}", orderInfo.getOrderId(), currentStatus, targetStatus);
+            } else {
+                log.info("鏈帹杩涜鍗曠姸鎬侊紝鍘熷洜锛歩sReject={}, workflowEnded={}", isReject, workflowEnded);
+            }
         }
 
         log.info("瀹℃壒璁板綍娣诲姞鎴愬姛锛岃鍗旾D: {}, 瀹℃壒绫诲瀷: {}, 瀹℃壒缁撴灉: {}, 瀹℃壒浜�: {}, 瀹℃壒鎰忚: {}", 
@@ -1300,46 +1325,50 @@
         try {
             // 1. 鍒犻櫎璁㈠崟闄勪欢锛堝寘鎷琈inIO鏂囦欢鍜屾暟鎹簱璁板綍锛�
             log.info("寮�濮嬪垹闄よ鍗曢檮浠讹紝璁㈠崟ID: {}", orderId);
-            List<OrderAttachment> attachments = orderAttachmentMapper.selectByOrderId(orderId);
-            for (OrderAttachment attachment : attachments) {
-                try {
-                    // 鍒犻櫎MinIO涓殑鏂囦欢
-                    if (StringUtils.hasText(attachment.getObjectName())) {
-                        log.info("鍒犻櫎MinIO鏂囦欢锛屽璞″悕绉�: {}", attachment.getObjectName());
-                        minioService.deleteFile(attachment.getObjectName());
-                    }
-                    // 鍒犻櫎鏁版嵁搴撹褰�
-                    orderAttachmentMapper.deleteById(attachment.getId());
-                    log.info("鍒犻櫎闄勪欢璁板綍鎴愬姛锛岄檮浠禝D: {}", attachment.getId());
-                } catch (Exception e) {
-                    log.error("鍒犻櫎闄勪欢澶辫触锛岄檮浠禝D: {}, 閿欒: {}", attachment.getId(), e.getMessage());
-                    // 缁х画鍒犻櫎鍏朵粬闄勪欢锛屼笉涓柇鏁翠釜娴佺▼
-                }
-            }
+//            List<OrderAttachment> attachments = orderAttachmentMapper.selectByOrderId(orderId);
+//            for (OrderAttachment attachment : attachments) {
+//                try {
+//                    // 鍒犻櫎MinIO涓殑鏂囦欢
+//                    if (StringUtils.hasText(attachment.getObjectName())) {
+//                        log.info("鍒犻櫎MinIO鏂囦欢锛屽璞″悕绉�: {}", attachment.getObjectName());
+//                        minioService.deleteFile(attachment.getObjectName());
+//                    }
+//                    // 鍒犻櫎鏁版嵁搴撹褰�
+//                    orderAttachmentMapper.deleteById(attachment.getId());
+//                    log.info("鍒犻櫎闄勪欢璁板綍鎴愬姛锛岄檮浠禝D: {}", attachment.getId());
+//                } catch (Exception e) {
+//                    log.error("鍒犻櫎闄勪欢澶辫触锛岄檮浠禝D: {}, 閿欒: {}", attachment.getId(), e.getMessage());
+//                    // 缁х画鍒犻櫎鍏朵粬闄勪欢锛屼笉涓柇鏁翠釜娴佺▼
+//                }
+//            }
 
             // 2. 閫昏緫鍒犻櫎璁㈠崟璇︽儏
-            log.info("寮�濮嬮�昏緫鍒犻櫎璁㈠崟璇︽儏锛岃鍗旾D: {}", orderId);
+            // log.info("寮�濮嬮�昏緫鍒犻櫎璁㈠崟璇︽儏锛岃鍗旾D: {}", orderId);
             // 鍏堟煡璇㈣鍗曡鎯呭垪琛紝鐒跺悗閫愪釜閫昏緫鍒犻櫎
-            List<OrderDetail> orderDetails = orderDetailMapper.selectByOrderId(orderId);
-            int detailDeleted = 0;
-            for (OrderDetail detail : orderDetails) {
-                int result = orderDetailMapper.deleteById(detail.getId());
-                if (result > 0) {
-                    detailDeleted++;
-                }
-            }
-            log.info("閫昏緫鍒犻櫎璁㈠崟璇︽儏瀹屾垚锛屽奖鍝嶈鏁�: {}", detailDeleted);
+//            List<OrderDetail> orderDetails = orderDetailMapper.selectByOrderId(orderId);
+//            int detailDeleted = 0;
+//            for (OrderDetail detail : orderDetails) {
+//                int result = orderDetailMapper.deleteById(detail.getId());
+//                if (result > 0) {
+//                    detailDeleted++;
+//                }
+//            }
+//            log.info("閫昏緫鍒犻櫎璁㈠崟璇︽儏瀹屾垚锛屽奖鍝嶈鏁�: {}", detailDeleted);
 
             // 3. 鍒犻櫎璁㈠崟淇℃伅锛堥�昏緫鍒犻櫎锛�
-            log.info("寮�濮嬪垹闄よ鍗曚俊鎭紝璁㈠崟ID: {}", orderId);
-            int orderDeleted = this.baseMapper.deleteById(orderId);
-            log.info("鍒犻櫎璁㈠崟淇℃伅瀹屾垚锛屽奖鍝嶈鏁�: {}", orderDeleted);
+//            log.info("寮�濮嬪垹闄よ鍗曚俊鎭紝璁㈠崟ID: {}", orderId);
+//            int orderDeleted = this.baseMapper.deleteById(orderId);
+//            log.info("鍒犻櫎璁㈠崟淇℃伅瀹屾垚锛屽奖鍝嶈鏁�: {}", orderDeleted);
+            // 鏇存柊璁㈠崟鐘舵�佷负宸插畬鎴�
+            orderInfo.setOrderStatus("宸插彇娑�");
+            orderInfo.setUpdatedAt(LocalDateTime.now());
+            int orderDeleted = this.baseMapper.updateById(orderInfo);
 
             if (orderDeleted > 0) {
                 log.info("璁㈠崟鍙栨秷鎴愬姛锛岃鍗旾D: {}", orderId);
                 return true;
             } else {
-                log.error("鍒犻櫎璁㈠崟淇℃伅澶辫触锛屽奖鍝嶈鏁颁负0锛岃鍗旾D: {}", orderId);
+                log.error("鏇存柊璁㈠崟淇℃伅澶辫触锛屽奖鍝嶈鏁颁负0锛岃鍗旾D: {}", orderId);
                 throw new BusinessException("鍒犻櫎璁㈠崟淇℃伅澶辫触");
             }
         } catch (Exception e) {
@@ -1482,7 +1511,7 @@
      * @param userId 鐢ㄦ埛ID
      * @param comment 瀹℃壒鎰忚锛堝锛氬鏍搁�氳繃锛�
      */
-    private void completeWorkflowTask(String taskId, String userId, String comment) {
+    private boolean completeWorkflowTask(String taskId, String userId, String comment) {
         try {
             String url = workflowProperties.getProcess().getBaseUrl() + workflowProperties.getProcess().getCompleteUrl();
             Map<String, Object> params = new HashMap<>();
@@ -1511,7 +1540,15 @@
                 if (data == null) {
                     throw new BusinessException("宸ヤ綔娴佸畬鎴愪换鍔″け璐ワ紝杩斿洖鏁版嵁涓虹┖");
                 }
-                log.info("瀹屾垚宸ヤ綔娴佷换鍔℃垚鍔燂紝processinstId: {}", data.get("processinstId"));
+                Object isEndedObj = data.get("isEnded");
+                boolean isEnded = false;
+                if (isEndedObj instanceof Boolean) {
+                    isEnded = (Boolean) isEndedObj;
+                } else if (isEndedObj != null) {
+                    isEnded = "true".equalsIgnoreCase(String.valueOf(isEndedObj));
+                }
+                log.info("瀹屾垚宸ヤ綔娴佷换鍔℃垚鍔燂紝processinstId: {}, isEnded: {}", data.get("processinstId"), isEnded);
+                return isEnded;
             } else {
                 throw new BusinessException("宸ヤ綔娴佸畬鎴愪换鍔℃帴鍙h皟鐢ㄥけ璐ワ紝HTTP鐘舵��: " + response.getStatusCode());
             }

--
Gitblit v1.8.0