refactor(sales): 优化无源入库和售后入库业务日期生成逻辑
- 修改了 PassiveWarehouseReceiptToC 和 SoSaleReturnPluginInitializerToC 类中的业务日期生成逻辑 - 增加了对交易成功时间的判断,以确定最终的业务日期 - 优化了异常处理和错误日志记录 - 更新了相关测试用例
This commit is contained in:
parent
1e4d0c8e8c
commit
0011e45611
|
@ -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");
|
||||
} catch (Exception e) {
|
||||
logger.error("业务日期生成失败relatedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code);
|
||||
Assert.state(false, "业务日期生成失败closedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code);
|
||||
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;
|
||||
}
|
||||
return businessFormat;
|
||||
}
|
||||
//满足"1.无源入库单没有交易成功时间"
|
||||
return relatedAtDateStr;
|
||||
} catch (Exception e) {
|
||||
logger.error("时间日期解析异常:{} O 无源入库单号:{}", e.getMessage(), code);
|
||||
Assert.state(false, "时间日期解析异常:{} O 无源入库单号:{}", e.getMessage(), code);
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
logger.error("业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code);
|
||||
Assert.state(false, "业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code);
|
||||
|
|
|
@ -1444,28 +1444,51 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
|
|||
/**
|
||||
* 2024年8月9日 15:43:13
|
||||
* 生成业务日期:取「入库时间」、还是取「结束收货时间」
|
||||
* <p>
|
||||
* 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");
|
||||
} catch (Exception e) {
|
||||
logger.error("业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号:{}", e.getMessage(), code);
|
||||
Assert.state(false, "业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号:{}", e.getMessage(), code);
|
||||
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;
|
||||
}
|
||||
return businessFormat;
|
||||
}
|
||||
//满足"1.售后入库单没有交易成功时间"
|
||||
return closedAtDateStr;
|
||||
} catch (Exception e) {
|
||||
logger.error("时间日期解析异常:{} O售后入库单号:{}", e.getMessage(), code);
|
||||
Assert.state(false, "时间日期解析异常:{} O售后入库单号:{}", e.getMessage(), code);
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
logger.error("业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code);
|
||||
Assert.state(false, "业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
Loading…
Reference in New Issue