From 0011e456117b46f2ae2a3d39386935b91d678b22 Mon Sep 17 00:00:00 2001 From: liuy <37787198+LiuyCodes@users.noreply.github.com> Date: Tue, 12 Aug 2025 09:54:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor(sales):=20=E4=BC=98=E5=8C=96=E6=97=A0?= =?UTF-8?q?=E6=BA=90=E5=85=A5=E5=BA=93=E5=92=8C=E5=94=AE=E5=90=8E=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E4=B8=9A=E5=8A=A1=E6=97=A5=E6=9C=9F=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改了 PassiveWarehouseReceiptToC 和 SoSaleReturnPluginInitializerToC 类中的业务日期生成逻辑 - 增加了对交易成功时间的判断,以确定最终的业务日期 - 优化了异常处理和错误日志记录 - 更新了相关测试用例 --- .../sales/PassiveWarehouseReceiptToC.java | 35 ++++++++++++++---- .../SoSaleReturnPluginInitializerToC.java | 37 +++++++++++++++---- .../sales/PassiveWarehouseReceiptToCTest.java | 2 +- .../SoSaleReturnPluginInitializerToCTest.java | 2 +- 4 files changed, 60 insertions(+), 16 deletions(-) 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 4a5c987e..1864d173 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 @@ -1500,6 +1500,9 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { /** * 2025 年 3 月 12 日 15:53:27 * 生成业务日期:取「关联时间」,只能取关联时间,否则会存在跨月问题 + * 2025年8月12日09:39:33 代码调整成 + * "1.无源入库单没有交易成功时间",则取关联时间 + * "2.关联时间早于交易成功时间",则取交易成功时间 * * @author liuyang */ @@ -1508,17 +1511,35 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { if (header != null && header.getReceiptCode() != null) { code = header.getReceiptCode(); } + + HeaderDetailsDto headerDetailsDto = header.getHeaderDetailsDto(); + Assert.notNull(headerDetailsDto, "售后入库单对应的销售订单不能为空! 无源入库单编码:{}", code); + Assert.notNull(headerDetailsDto.getHeader(), "售后入库单对应的销售订单不能为空! 无源入库单编码:{}", code); + if (header != null && header.getRelatedAt() != null) { - String closedAt = header.getRelatedAt(); - String businessFormat = null; + String relatedAt = header.getRelatedAt(); + String relatedAtDateStr = null; + String tradeSuccessAtDateStr = null; try { - Date dbill = DateUtil.parse(closedAt); - businessFormat = DateUtil.format(dbill, "yyyy-MM-dd"); + Date relatedAtDate = DateUtil.parse(relatedAt); + relatedAtDateStr = DateUtil.format(relatedAtDate, "yyyy-MM-dd"); + + if (headerDetailsDto.getHeader().getTradeSuccessAt() != null && !"".equals(headerDetailsDto.getHeader().getTradeSuccessAt())) { + Date tradeSuccessAtDate = DateUtil.parse(headerDetailsDto.getHeader().getTradeSuccessAt()); + tradeSuccessAtDateStr = DateUtil.format(tradeSuccessAtDate, "yyyy-MM-dd"); + + if ((relatedAtDate.before(tradeSuccessAtDate) || relatedAtDate.equals(tradeSuccessAtDate))) { + //满足"2.关联时间早于交易成功时间" + return tradeSuccessAtDateStr; + } + } + //满足"1.无源入库单没有交易成功时间" + return relatedAtDateStr; } catch (Exception e) { - logger.error("业务日期生成失败relatedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); - Assert.state(false, "业务日期生成失败closedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); + logger.error("时间日期解析异常:{} O 无源入库单号:{}", e.getMessage(), code); + Assert.state(false, "时间日期解析异常:{} O 无源入库单号:{}", e.getMessage(), code); } - return businessFormat; + return null; } else { logger.error("业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); Assert.state(false, "业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java index 53dd3d1e..5ff3dc6e 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java @@ -1444,28 +1444,51 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity { /** * 2024年8月9日 15:43:13 * 生成业务日期:取「入库时间」、还是取「结束收货时间」 + *

+ * 2025年8月12日09:05:05 代码调整成 + * "1.售后入库单没有交易成功时间",则取关单时间 + * "2.关单时间早于交易成功时间",则取交易成功时间 * * @author liuyang */ - private String createGenerateBusinessDate(StockinOrderSearchResponse.StockinOrder.StockinH header) { + private String createGenerateBusinessDate(StockinOrderSearchResponse.StockinOrder.StockinH header) throws Exception { //测试 // header.setClosedAt("2024-11-29 10:00:12"); String code = null; if (header != null && header.getCode() != null) { code = header.getCode(); } + + //OFS销售订单 + com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto headerDetailsDto = header.getHeaderDetailsDto(); + Assert.notNull(headerDetailsDto, "售后入库单对应的销售订单不能为空! 售后入库单编码:{}", code); + Assert.notNull(headerDetailsDto.getHeader(), "售后入库单对应的销售订单不能为空! 售后入库单编码:{}", code); + if (header != null && header.getClosedAt() != null) { //TOC以出库日期作为业务日期 String closedAt = header.getClosedAt(); - String businessFormat = null; + String closedAtDateStr = null; + String tradeSuccessAtDateStr = null; try { - Date dbill = DateUtil.parse(closedAt); - businessFormat = DateUtil.format(dbill, "yyyy-MM-dd"); + Date closedAtDate = DateUtil.parse(closedAt); + closedAtDateStr = DateUtil.format(closedAtDate, "yyyy-MM-dd"); + + if (headerDetailsDto.getHeader().getTradeSuccessAt() != null && !"".equals(headerDetailsDto.getHeader().getTradeSuccessAt())) { + Date tradeSuccessAtDate = DateUtil.parse(headerDetailsDto.getHeader().getTradeSuccessAt()); + tradeSuccessAtDateStr = DateUtil.format(tradeSuccessAtDate, "yyyy-MM-dd"); + + if ((closedAtDate.before(tradeSuccessAtDate) || closedAtDate.equals(tradeSuccessAtDate))) { + //满足"2.关单时间早于交易成功时间" + return tradeSuccessAtDateStr; + } + } + //满足"1.售后入库单没有交易成功时间" + return closedAtDateStr; } catch (Exception e) { - logger.error("业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号:{}", e.getMessage(), code); - Assert.state(false, "业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号:{}", e.getMessage(), code); + logger.error("时间日期解析异常:{} O售后入库单号:{}", e.getMessage(), code); + Assert.state(false, "时间日期解析异常:{} O售后入库单号:{}", e.getMessage(), code); } - return businessFormat; + return null; } else { logger.error("业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code); Assert.state(false, "业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code); 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 7d1463ec..d1337b8e 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 @@ -37,7 +37,7 @@ public class PassiveWarehouseReceiptToCTest { //情况二 // passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "tran"); //情况三 - passiveWarehouseReceiptToC.startImplementByCode("RH20250731000613", "tran"); + passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "stock"); // passiveWarehouseReceiptToC.startImplementByCode("RH20250723000754", "tran"); } catch (Exception e) { e.printStackTrace(); diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToCTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToCTest.java index aba52399..2be0b0c3 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToCTest.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToCTest.java @@ -69,7 +69,7 @@ public class SoSaleReturnPluginInitializerToCTest { try { // soSaleReturnPluginInitializerToC.startImplementByTradeTime("2025-04-28 00:00:00", "2025-04-28 23:59:59", "0"); - soSaleReturnPluginInitializerToC.startImplementByCode("LETS-RE2025072800000594", "tran"); + soSaleReturnPluginInitializerToC.startImplementByCode("LETS-RE2025072800000594", "stock"); // soSaleReturnPluginInitializerToC.startImplementStockByTime("2025-01-31 00:00:00", "2025-01-31 23:59:59", "0");