fix(purchase): 优化代理采购退货处理逻辑

- 新增对渠道品牌采购退货的异常处理- 修复普通采购退货的业务流程查询逻辑
- 优化采购订单类型的判断和处理
This commit is contained in:
liuy 2025-09-05 14:30:31 +08:00
parent 1c960030d0
commit d8660b9e40
4 changed files with 118 additions and 18 deletions

View File

@ -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<BdBusitypeEntity> 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());

View File

@ -1669,6 +1669,9 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) {
try {
//合并SKU,把数量累加起来
detailsSkuMergeNumAccumulate(passiveStorageResponseDataList);
//查询OFS无源入库单对应的售后订单并关联无源无源入库单对象
List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchData = queryBatchAfterSalesOrder(passiveStorageResponseDataList);
findAfterSalesOrder(rerturnGoodsOrderSearchData, passiveStorageResponseDataList);
@ -4334,6 +4337,20 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> 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,7 +5032,8 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
/**
* 判断红字应收单
*/
private boolean filterJfbbjeIncludingTax(List<ArapDjzbVO.Childrenn> childrennArrayList) {
private boolean filterJfbbjeIncludingTax(List<ArapDjzbVO.Childrenn> childrennArrayList) throws Exception {
try {
// 处理空列表或null视为"全部为0"返回false
if (childrennArrayList == null || childrennArrayList.isEmpty()) {
return false;
@ -5033,6 +5051,10 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
}
}
return false;
} catch (Exception e) {
logger.error("判断红字应收单异常", e);
throw new RuntimeException("判断红字应收单异常 " + e.getMessage());
}
}
/**
@ -5080,4 +5102,54 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
// }
// });
// }
/**
* 把相同的明细行合并数量累加
*
* @param passiveStorageResponseDataList 需要处理的数据列表
*/
public void detailsSkuMergeNumAccumulate(List<PassiveStorageResponse.Data> passiveStorageResponseDataList) {
if (passiveStorageResponseDataList == null) {
return;
}
try {
for (PassiveStorageResponse.Data data : passiveStorageResponseDataList) {
List<PassiveStorageResponse.Details> originalDetails = data.getDetails();
if (originalDetails == null || originalDetails.isEmpty()) {
continue;
}
Map<String, PassiveStorageResponse.Details> 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<PassiveStorageResponse.Details> mergedList = new ArrayList<>(mergedMap.values());
data.setDetails(mergedList);
}
} catch (Exception e) {
logger.error("detailsSkuMergeNumAccumulate方法抛出异常", e);
throw new RuntimeException("处理明细合并时发生未知错误", e);
}
}
}

View File

@ -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();
}

View File

@ -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();
}