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