refactor(sales): 优化无源入库和售后入库业务日期生成逻辑

- 修改了 PassiveWarehouseReceiptToC 和 SoSaleReturnPluginInitializerToC 类中的业务日期生成逻辑
- 增加了对交易成功时间的判断,以确定最终的业务日期
- 优化了异常处理和错误日志记录
- 更新了相关测试用例
This commit is contained in:
liuy 2025-08-12 09:54:37 +08:00
parent 1e4d0c8e8c
commit 0011e45611
4 changed files with 60 additions and 16 deletions

View File

@ -1500,6 +1500,9 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
/** /**
* 2025 3 12 15:53:27 * 2025 3 12 15:53:27
* 生成业务日期关联时间,只能取关联时间否则会存在跨月问题 * 生成业务日期关联时间,只能取关联时间否则会存在跨月问题
* 2025年8月12日09:39:33 代码调整成
* "1.无源入库单没有交易成功时间"则取关联时间
* "2.关联时间早于交易成功时间"则取交易成功时间
* *
* @author liuyang * @author liuyang
*/ */
@ -1508,17 +1511,35 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
if (header != null && header.getReceiptCode() != null) { if (header != null && header.getReceiptCode() != null) {
code = header.getReceiptCode(); code = header.getReceiptCode();
} }
HeaderDetailsDto headerDetailsDto = header.getHeaderDetailsDto();
Assert.notNull(headerDetailsDto, "售后入库单对应的销售订单不能为空! 无源入库单编码:{}", code);
Assert.notNull(headerDetailsDto.getHeader(), "售后入库单对应的销售订单不能为空! 无源入库单编码:{}", code);
if (header != null && header.getRelatedAt() != null) { if (header != null && header.getRelatedAt() != null) {
String closedAt = header.getRelatedAt(); String relatedAt = header.getRelatedAt();
String businessFormat = null; String relatedAtDateStr = null;
String tradeSuccessAtDateStr = null;
try { try {
Date dbill = DateUtil.parse(closedAt); Date relatedAtDate = DateUtil.parse(relatedAt);
businessFormat = DateUtil.format(dbill, "yyyy-MM-dd"); relatedAtDateStr = DateUtil.format(relatedAtDate, "yyyy-MM-dd");
} catch (Exception e) {
logger.error("业务日期生成失败relatedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); if (headerDetailsDto.getHeader().getTradeSuccessAt() != null && !"".equals(headerDetailsDto.getHeader().getTradeSuccessAt())) {
Assert.state(false, "业务日期生成失败closedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); Date tradeSuccessAtDate = DateUtil.parse(headerDetailsDto.getHeader().getTradeSuccessAt());
tradeSuccessAtDateStr = DateUtil.format(tradeSuccessAtDate, "yyyy-MM-dd");
if ((relatedAtDate.before(tradeSuccessAtDate) || relatedAtDate.equals(tradeSuccessAtDate))) {
//满足"2.关联时间早于交易成功时间"
return tradeSuccessAtDateStr;
} }
return businessFormat; }
//满足"1.无源入库单没有交易成功时间"
return relatedAtDateStr;
} catch (Exception e) {
logger.error("时间日期解析异常:{} O 无源入库单号:{}", e.getMessage(), code);
Assert.state(false, "时间日期解析异常:{} O 无源入库单号:{}", e.getMessage(), code);
}
return null;
} else { } else {
logger.error("业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); logger.error("业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code);
Assert.state(false, "业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); Assert.state(false, "业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code);

View File

@ -1444,28 +1444,51 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
/** /**
* 2024年8月9日 15:43:13 * 2024年8月9日 15:43:13
* 生成业务日期入库时间还是取结束收货时间 * 生成业务日期入库时间还是取结束收货时间
* <p>
* 2025年8月12日09:05:05 代码调整成
* "1.售后入库单没有交易成功时间"则取关单时间
* "2.关单时间早于交易成功时间"则取交易成功时间
* *
* @author liuyang * @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"); // header.setClosedAt("2024-11-29 10:00:12");
String code = null; String code = null;
if (header != null && header.getCode() != null) { if (header != null && header.getCode() != null) {
code = header.getCode(); 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) { if (header != null && header.getClosedAt() != null) {
//TOC以出库日期作为业务日期 //TOC以出库日期作为业务日期
String closedAt = header.getClosedAt(); String closedAt = header.getClosedAt();
String businessFormat = null; String closedAtDateStr = null;
String tradeSuccessAtDateStr = null;
try { try {
Date dbill = DateUtil.parse(closedAt); Date closedAtDate = DateUtil.parse(closedAt);
businessFormat = DateUtil.format(dbill, "yyyy-MM-dd"); closedAtDateStr = DateUtil.format(closedAtDate, "yyyy-MM-dd");
} catch (Exception e) {
logger.error("业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号{}", e.getMessage(), code); if (headerDetailsDto.getHeader().getTradeSuccessAt() != null && !"".equals(headerDetailsDto.getHeader().getTradeSuccessAt())) {
Assert.state(false, "业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号{}", e.getMessage(), code); Date tradeSuccessAtDate = DateUtil.parse(headerDetailsDto.getHeader().getTradeSuccessAt());
tradeSuccessAtDateStr = DateUtil.format(tradeSuccessAtDate, "yyyy-MM-dd");
if ((closedAtDate.before(tradeSuccessAtDate) || closedAtDate.equals(tradeSuccessAtDate))) {
//满足"2.关单时间早于交易成功时间"
return tradeSuccessAtDateStr;
} }
return businessFormat; }
//满足"1.售后入库单没有交易成功时间"
return closedAtDateStr;
} catch (Exception e) {
logger.error("时间日期解析异常:{} O售后入库单号{}", e.getMessage(), code);
Assert.state(false, "时间日期解析异常:{} O售后入库单号{}", e.getMessage(), code);
}
return null;
} else { } else {
logger.error("业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code); logger.error("业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code);
Assert.state(false, "业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code); Assert.state(false, "业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code);

View File

@ -37,7 +37,7 @@ public class PassiveWarehouseReceiptToCTest {
//情况二 //情况二
// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "tran"); // passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "tran");
//情况三 //情况三
passiveWarehouseReceiptToC.startImplementByCode("RH20250731000613", "tran"); passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "stock");
// passiveWarehouseReceiptToC.startImplementByCode("RH20250723000754", "tran"); // passiveWarehouseReceiptToC.startImplementByCode("RH20250723000754", "tran");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -69,7 +69,7 @@ public class SoSaleReturnPluginInitializerToCTest {
try { try {
// soSaleReturnPluginInitializerToC.startImplementByTradeTime("2025-04-28 00:00:00", "2025-04-28 23:59:59", "0"); // 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"); // soSaleReturnPluginInitializerToC.startImplementStockByTime("2025-01-31 00:00:00", "2025-01-31 23:59:59", "0");