diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturn.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturn.java index f414581c..78366fdb 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturn.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturn.java @@ -112,6 +112,9 @@ public class ProxyPurchaseReturn extends PluginBaseEntity { @Autowired private QueryU8CEntityUtil queryU8CEntityUtil; + @Autowired + private IBdBusitypeDao iBdBusitypeDao; + @Override public void initialize() { logger.info(getPluginLabel() + "執行初始化方法initialize()"); @@ -486,7 +489,31 @@ public class ProxyPurchaseReturn extends PluginBaseEntity { //查询对应的U8C业务流程 // BdBusitypeEntity bdBusitypeEntity = queryU8CEntityUtil.queryU8cPoOrderRertunOperationFlow(ofsPoOrderData.getHeader().getPurchaseOrderType()); - BdBusitypeEntity bdBusitypeEntity = queryU8CEntityUtil.queryU8cPoOrderOperationFlow(ofsPoOrderData.getHeader().getPurchaseOrderType()); +// BdBusitypeEntity bdBusitypeEntity = queryU8CEntityUtil.queryU8cPoOrderOperationFlow(ofsPoOrderData.getHeader().getPurchaseOrderType()); + BdBusitypeEntity bdBusitypeEntity = null; + //如果是渠道品牌采购退货,则抛出异常 + if ("DLCG".equals(ofsPoOrderData.getHeader().getPurchaseOrderType())) { + Assert.state(false, "无法处理代理采购退货!"); + } else if ("CPCG".equals(ofsPoOrderData.getHeader().getPurchaseOrderType())) { + String pkGroup = "@@@@"; + String busicode = "ZZTH"; + BdBusitypeEntity bdBusitypeEntityQuery = new BdBusitypeEntity(); + bdBusitypeEntityQuery.setDataSourceCode("lets_u8c"); + bdBusitypeEntityQuery.setBusicode(busicode); + bdBusitypeEntityQuery.setPkCorp(pkGroup); + bdBusitypeEntityQuery.setDr(0); + List bdBusitypeEntityList = iBdBusitypeDao.query(bdBusitypeEntityQuery); + if (bdBusitypeEntityList == null || bdBusitypeEntityList.size() == 0) { + Assert.notNull(bdBusitypeEntity, "根据业务流程编码({})没有查询到业务流程!", busicode); + } else if (bdBusitypeEntityList.size() > 1) { + Assert.notNull(bdBusitypeEntity, "根据业务流程编码({})查询到多个业务流程!", busicode); + } else { + bdBusitypeEntity = bdBusitypeEntityList.get(0); + } + } else { + Assert.state(false, "无法识别的采购类型!{}", ofsPoOrderData.getHeader().getPurchaseOrderType()); + } + //查询对应的U8C收发类别 BdRdclEntity bdRdclEntity = queryU8CEntityUtil.queryU8cPoOrderRertunSendingReceivCategory(ofsPoOrderData.getHeader().getPurchaseOrderType()); diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java index d7b5bf4a..60fe0c25 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java @@ -1669,6 +1669,9 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) { try { + //合并SKU,把数量累加起来 + detailsSkuMergeNumAccumulate(passiveStorageResponseDataList); + //查询OFS无源入库单对应的售后订单,并关联无源无源入库单对象 List rerturnGoodsOrderSearchData = queryBatchAfterSalesOrder(passiveStorageResponseDataList); findAfterSalesOrder(rerturnGoodsOrderSearchData, passiveStorageResponseDataList); @@ -4334,6 +4337,20 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader(); List details = rerturnGoodsOrderSearchData.getDetails(); + //过滤掉实退金额为0的售后订单明细行 + details = details.stream().filter(detail -> { + String totalAmount = detail.getTotalAmount(); + if (totalAmount == null || totalAmount.trim().isEmpty()) { + return false; + } + try { + BigDecimal amount = new BigDecimal(totalAmount.trim()); + return amount.compareTo(BigDecimal.ZERO) != 0; + } catch (NumberFormatException e) { + return false; + } + }).collect(Collectors.toList()); + //根据「入库单明细」匹配「售后订单明细行」 RerturnGoodsOrderSearchDetails targetDetails = null; for (int i = 0; i < details.size(); i++) { @@ -5015,24 +5032,29 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { /** * 判断红字应收单 */ - private boolean filterJfbbjeIncludingTax(List childrennArrayList) { - // 处理空列表或null:视为"全部为0",返回false - if (childrennArrayList == null || childrennArrayList.isEmpty()) { - return false; - } - for (ArapDjzbVO.Childrenn dto : childrennArrayList) { - String jfbbje = dto.getJfbbje(); - if (jfbbje == null || jfbbje.isEmpty()) { - return true; + private boolean filterJfbbjeIncludingTax(List childrennArrayList) throws Exception { + try { + // 处理空列表或null:视为"全部为0",返回false + if (childrennArrayList == null || childrennArrayList.isEmpty()) { + return false; } + for (ArapDjzbVO.Childrenn dto : childrennArrayList) { + String jfbbje = dto.getJfbbje(); + if (jfbbje == null || jfbbje.isEmpty()) { + return true; + } - BigDecimal amount = new BigDecimal(jfbbje); - if (amount.compareTo(BigDecimal.ZERO) != 0) { - // 发现非0值,立即返回true - return true; + BigDecimal amount = new BigDecimal(jfbbje); + if (amount.compareTo(BigDecimal.ZERO) != 0) { + // 发现非0值,立即返回true + return true; + } } + return false; + } catch (Exception e) { + logger.error("判断红字应收单异常", e); + throw new RuntimeException("判断红字应收单异常 " + e.getMessage()); } - return false; } /** @@ -5080,4 +5102,54 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { // } // }); // } + + /** + * 把相同的明细行合并,数量累加 + * + * @param passiveStorageResponseDataList 需要处理的数据列表 + */ + public void detailsSkuMergeNumAccumulate(List passiveStorageResponseDataList) { + if (passiveStorageResponseDataList == null) { + return; + } + + try { + for (PassiveStorageResponse.Data data : passiveStorageResponseDataList) { + List originalDetails = data.getDetails(); + if (originalDetails == null || originalDetails.isEmpty()) { + continue; + } + + Map mergedMap = new LinkedHashMap<>(); + for (PassiveStorageResponse.Details detail : originalDetails) { + String skuCode = detail.getSkuCode(); + + if (mergedMap.containsKey(skuCode)) { + PassiveStorageResponse.Details existingDetail = mergedMap.get(skuCode); + + try { + // 将字符串数量转为数字进行计算 + BigDecimal existingQuantity = new BigDecimal(existingDetail.getQuantity() != null ? existingDetail.getQuantity() : "0"); + BigDecimal currentQuantity = new BigDecimal(detail.getQuantity() != null ? detail.getQuantity() : "0"); + + // 累加并更新数量 + BigDecimal newQuantity = existingQuantity.add(currentQuantity); + existingDetail.setQuantity(newQuantity.toString()); + + } catch (NumberFormatException e) { + logger.error("SKU [{}] 的 quantity 格式不正确,无法累加。明细ID: {}", skuCode, detail.getId(), e); + } + } else { + mergedMap.put(skuCode, detail); + } + } + + List mergedList = new ArrayList<>(mergedMap.values()); + data.setDetails(mergedList); + } + } catch (Exception e) { + logger.error("detailsSkuMergeNumAccumulate方法抛出异常", e); + throw new RuntimeException("处理明细合并时发生未知错误", e); + } + } } \ No newline at end of file diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturnTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturnTest.java index a78ecade..4cb4b793 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturnTest.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/purchase/ProxyPurchaseReturnTest.java @@ -34,7 +34,8 @@ public class ProxyPurchaseReturnTest { // proxyPurchaseReturn.startImplement("2024-09-24 13:49:15", "2024-09-24 13:49:17"); - proxyPurchaseReturn.startImplement("LETS-SH2025082100033246"); +// proxyPurchaseReturn.startImplement("LETS-SH2025082100033246"); + proxyPurchaseReturn.startImplement("LETS-SH2025090200029071"); } catch (Exception e) { e.printStackTrace(); } diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToCTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToCTest.java index 93842113..c0996a8d 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToCTest.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToCTest.java @@ -35,12 +35,12 @@ public class PassiveWarehouseReceiptToCTest { //情况一 // passiveWarehouseReceiptToC.startImplementByCode("RH20250722000231", "stock"); //情况二 - passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "tran"); +// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000579", "tran"); //情况三 // passiveWarehouseReceiptToC.startImplementByCode("RH20250731000613", "tran"); // passiveWarehouseReceiptToC.startImplementByCode("RH20250723000754", "tran"); -// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000017", "stock"); + passiveWarehouseReceiptToC.startImplementByCode("RH20250716000618", "stock"); } catch (Exception e) { e.printStackTrace(); }