fix(purchase): 优化代理采购退货处理逻辑
- 新增对渠道品牌采购退货的异常处理- 修复普通采购退货的业务流程查询逻辑 - 优化采购订单类型的判断和处理
This commit is contained in:
parent
1c960030d0
commit
d8660b9e40
|
@ -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());
|
||||
|
||||
|
|
|
@ -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,24 +5032,29 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
/**
|
||||
* 判断红字应收单
|
||||
*/
|
||||
private boolean filterJfbbjeIncludingTax(List<ArapDjzbVO.Childrenn> 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<ArapDjzbVO.Childrenn> 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<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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue