fix(purchase): 优化代理采购退货处理逻辑
- 新增对渠道品牌采购退货的异常处理- 修复普通采购退货的业务流程查询逻辑 - 优化采购订单类型的判断和处理
This commit is contained in:
parent
1c960030d0
commit
d8660b9e40
|
@ -112,6 +112,9 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
|
||||||
@Autowired
|
@Autowired
|
||||||
private QueryU8CEntityUtil queryU8CEntityUtil;
|
private QueryU8CEntityUtil queryU8CEntityUtil;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IBdBusitypeDao iBdBusitypeDao;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
logger.info(getPluginLabel() + "執行初始化方法initialize()");
|
logger.info(getPluginLabel() + "執行初始化方法initialize()");
|
||||||
|
@ -486,7 +489,31 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
|
||||||
|
|
||||||
//查询对应的U8C业务流程
|
//查询对应的U8C业务流程
|
||||||
// BdBusitypeEntity bdBusitypeEntity = queryU8CEntityUtil.queryU8cPoOrderRertunOperationFlow(ofsPoOrderData.getHeader().getPurchaseOrderType());
|
// 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收发类别
|
//查询对应的U8C收发类别
|
||||||
BdRdclEntity bdRdclEntity = queryU8CEntityUtil.queryU8cPoOrderRertunSendingReceivCategory(ofsPoOrderData.getHeader().getPurchaseOrderType());
|
BdRdclEntity bdRdclEntity = queryU8CEntityUtil.queryU8cPoOrderRertunSendingReceivCategory(ofsPoOrderData.getHeader().getPurchaseOrderType());
|
||||||
|
|
||||||
|
|
|
@ -1669,6 +1669,9 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
||||||
|
|
||||||
if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) {
|
if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) {
|
||||||
try {
|
try {
|
||||||
|
//合并SKU,把数量累加起来
|
||||||
|
detailsSkuMergeNumAccumulate(passiveStorageResponseDataList);
|
||||||
|
|
||||||
//查询OFS无源入库单对应的售后订单,并关联无源无源入库单对象
|
//查询OFS无源入库单对应的售后订单,并关联无源无源入库单对象
|
||||||
List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchData = queryBatchAfterSalesOrder(passiveStorageResponseDataList);
|
List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchData = queryBatchAfterSalesOrder(passiveStorageResponseDataList);
|
||||||
findAfterSalesOrder(rerturnGoodsOrderSearchData, passiveStorageResponseDataList);
|
findAfterSalesOrder(rerturnGoodsOrderSearchData, passiveStorageResponseDataList);
|
||||||
|
@ -4334,6 +4337,20 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
||||||
RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader();
|
RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader();
|
||||||
List<RerturnGoodsOrderSearchDetails> details = rerturnGoodsOrderSearchData.getDetails();
|
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;
|
RerturnGoodsOrderSearchDetails targetDetails = null;
|
||||||
for (int i = 0; i < details.size(); i++) {
|
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
|
// 处理空列表或null:视为"全部为0",返回false
|
||||||
if (childrennArrayList == null || childrennArrayList.isEmpty()) {
|
if (childrennArrayList == null || childrennArrayList.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -5033,6 +5051,10 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -34,7 +34,8 @@ public class ProxyPurchaseReturnTest {
|
||||||
|
|
||||||
// proxyPurchaseReturn.startImplement("2024-09-24 13:49:15", "2024-09-24 13:49:17");
|
// 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) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,12 +35,12 @@ public class PassiveWarehouseReceiptToCTest {
|
||||||
//情况一
|
//情况一
|
||||||
// passiveWarehouseReceiptToC.startImplementByCode("RH20250722000231", "stock");
|
// passiveWarehouseReceiptToC.startImplementByCode("RH20250722000231", "stock");
|
||||||
//情况二
|
//情况二
|
||||||
passiveWarehouseReceiptToC.startImplementByCode("RH20250731000423", "tran");
|
// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000579", "tran");
|
||||||
//情况三
|
//情况三
|
||||||
// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000613", "tran");
|
// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000613", "tran");
|
||||||
// passiveWarehouseReceiptToC.startImplementByCode("RH20250723000754", "tran");
|
// passiveWarehouseReceiptToC.startImplementByCode("RH20250723000754", "tran");
|
||||||
|
|
||||||
// passiveWarehouseReceiptToC.startImplementByCode("RH20250731000017", "stock");
|
passiveWarehouseReceiptToC.startImplementByCode("RH20250716000618", "stock");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue