refactor(sales): 优化无源退货入库处理逻辑
-移除测试用的固定会员 ID - 调整无源入库单保存逻辑,先保存所有数据再过滤 - 优化无源入库单明细行匹配售后订单明细行的逻辑 - 修改不匹配时的处理方式,避免抛出异常 - 调整实退金额计算逻辑,不匹配时返回 0 - 更新测试代码,启用新的处理逻辑
This commit is contained in:
parent
865922f78b
commit
ed01825501
|
@ -1328,8 +1328,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity {
|
|||
}
|
||||
HeaderDto header1 = saleOrderMessageDto.getData().get(0).getHeader();
|
||||
String memberId = header1.getMemberId();
|
||||
//TODO 测试
|
||||
memberId = "GYS00002";
|
||||
// memberId = "GYS00002";
|
||||
Assert.notNull(memberId, "TOB销售订单(OFS)表头会员id不能为空,否则无法匹配U8C客商档案!");
|
||||
Assert.state(!"".equals(memberId.trim()), "TOB销售订单(OFS)表头会员id不能为空,否则无法匹配U8C客商档案!");
|
||||
|
||||
|
|
|
@ -400,10 +400,10 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
private void getSetStock(List<PassiveStorageResponse.Data> returnGoodHeaderDetailsDataDtoArrayList) throws Exception {
|
||||
LOCK1.lock();
|
||||
try {
|
||||
//保存到mysql底表
|
||||
batchInsert(returnGoodHeaderDetailsDataDtoArrayList);
|
||||
//过滤成功的数据
|
||||
List<PassiveStorageResponse.Data> data = filterDataStock(returnGoodHeaderDetailsDataDtoArrayList);
|
||||
//保存到mysql底表
|
||||
batchInsert(data);
|
||||
//执行推送主逻辑
|
||||
implementStock(data);
|
||||
} catch (Exception e) {
|
||||
|
@ -730,7 +730,7 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
Assert.notNull(passiveStorageResponseList, "passiveStorageResponseList不能为空");
|
||||
logger.info("TOC无源件退货入库:{} 行需要进行数据转换", passiveStorageResponseList.size());
|
||||
|
||||
if (passiveStorageResponseList != null && passiveStorageResponseList.size() > 0) {
|
||||
if (passiveStorageResponseList.size() > 0) {
|
||||
try {
|
||||
// 查询基本档案
|
||||
String sceneType = "stock";
|
||||
|
@ -861,7 +861,11 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
// saleorderRequestChildrenDto.setNoriginalcurnetprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税净价
|
||||
// saleorderRequestChildrenDto.setNoriginalcurprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税单价
|
||||
// saleorderRequestChildrenDto.setNoriginalcursummny("-" + noriginalcursummny.stripTrailingZeros().toPlainString());//价税合计
|
||||
saleorderRequestChildrenDto.setNoriginalcursummny("-" + passiveStorageSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//价税合计 新逻辑
|
||||
if (isblargessflag) {
|
||||
saleorderRequestChildrenDto.setNoriginalcursummny("0");//价税合计 新逻辑
|
||||
} else {
|
||||
saleorderRequestChildrenDto.setNoriginalcursummny("-" + passiveStorageSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//价税合计 新逻辑
|
||||
}
|
||||
// saleorderRequestChildrenDto.setNoriginalcurtaxmny("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//税额
|
||||
// saleorderRequestChildrenDto.setNoriginalcurtaxnetprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税净价
|
||||
// saleorderRequestChildrenDto.setNoriginalcurtaxprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税单价
|
||||
|
@ -2153,9 +2157,6 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
BdInvbasdocEntity bdInvbasdocEntity = passiveStorageSonDetailsDto.getBdInvbasdocEntity();//存货基本档案
|
||||
BdInvmandocEntity bdInvmandocEntity = passiveStorageSonDetailsDto.getBdInvmandocEntity();//存货管理档案
|
||||
|
||||
//根据OFS售后入库单明细行,查找匹配OFS售后订单明细行
|
||||
RerturnGoodsOrderSearchDetails ofsOrderDetail = findOfsOrderDetail(details, passiveStorageSonDetailsDto);
|
||||
|
||||
String totalAmount = null;
|
||||
StringBuffer calculationFormulaStr = new StringBuffer();
|
||||
if (isCheckShopChoose) {
|
||||
|
@ -2191,10 +2192,20 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
// }
|
||||
|
||||
//把无源入库单明细行关联对应的售后订单明细行的优惠金额,带入到无源入库单明细行
|
||||
passiveStorageSonDetailsDto.setPlatformDiscounts(ofsOrderDetail.getPlatformDiscounts());
|
||||
passiveStorageSonDetailsDto.setMerchantDiscounts(ofsOrderDetail.getMerchantDiscounts());
|
||||
passiveStorageSonDetailsDto.setExpertDiscounts(ofsOrderDetail.getExpertDiscounts());
|
||||
passiveStorageSonDetailsDto.setPayDiscounts(ofsOrderDetail.getPayDiscounts());
|
||||
//根据OFS售后入库单明细行,查找匹配OFS售后订单明细行
|
||||
//2025年4月18日11:03:56 如果无源入库明细行无法匹配售后订单明细行,则入库时的优惠金额全部为0
|
||||
RerturnGoodsOrderSearchDetails ofsOrderDetail = findOfsOrderDetail(details, passiveStorageSonDetailsDto);
|
||||
if (ofsOrderDetail != null) {
|
||||
passiveStorageSonDetailsDto.setPlatformDiscounts(ofsOrderDetail.getPlatformDiscounts());
|
||||
passiveStorageSonDetailsDto.setMerchantDiscounts(ofsOrderDetail.getMerchantDiscounts());
|
||||
passiveStorageSonDetailsDto.setExpertDiscounts(ofsOrderDetail.getExpertDiscounts());
|
||||
passiveStorageSonDetailsDto.setPayDiscounts(ofsOrderDetail.getPayDiscounts());
|
||||
} else {
|
||||
passiveStorageSonDetailsDto.setPlatformDiscounts("0");
|
||||
passiveStorageSonDetailsDto.setMerchantDiscounts("0");
|
||||
passiveStorageSonDetailsDto.setExpertDiscounts("0");
|
||||
passiveStorageSonDetailsDto.setPayDiscounts("0");
|
||||
}
|
||||
}
|
||||
|
||||
PassiveStorageSonDetailsDto passiveStorageSonDetailsDto = sonDetailsDtoList.get(0);
|
||||
|
@ -3514,7 +3525,7 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
}
|
||||
}
|
||||
// Assert.state(false, "根据OFS售后入库单明细行,无法查找OFS售后订单明细行 来源明细行主键:{} 来源单据主键:{}", goodsRertunSonDetailsDto.getRefOrderDetailId(), goodsRertunSonDetailsDto.getRefOrderId());
|
||||
Assert.state(false, "无源入库单明细行存货 sku:{} 名称:{} 无法匹配售后订单明细行 sku", goodsRertunSonDetailsDto.getSkuCode(), goodsRertunSonDetailsDto.getSkuName());
|
||||
// Assert.state(false, "无源入库单明细行存货 sku:{} 名称:{} 无法匹配售后订单明细行 sku", goodsRertunSonDetailsDto.getSkuCode(), goodsRertunSonDetailsDto.getSkuName());
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -3650,32 +3661,37 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
|
|||
}
|
||||
}
|
||||
}
|
||||
Assert.notNull(targetDetails, "根据OFS无源入库单单细行(sku匹配)无法匹配售后订单明细行", passiveStorageSonDetailsDto.getSkuCode());
|
||||
// Assert.notNull(targetDetails, "根据OFS无源入库单单细行(sku匹配)无法匹配售后订单明细行", passiveStorageSonDetailsDto.getSkuCode());
|
||||
|
||||
//售后订单明细行-退货金额
|
||||
String totalAmount = targetDetails.getTotalAmount();//实退金额
|
||||
Assert.notNull(totalAmount, "售后订单:{} 存货明细行:{} 退货金额不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
Assert.state(!"".equals(totalAmount), "售后订单:{} 存货明细行:{} 退货金额不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
//售后订单明细行-请求数量
|
||||
//实退数量存在可能为0的情况,如果用退货金额/实退数量可能会抛出异常
|
||||
String requestQty = targetDetails.getRequestQty();//请求数量
|
||||
Assert.notNull(requestQty, "售后订单:{} 存货明细行:{} 请求数量不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
Assert.state(!"".equals(requestQty), "售后订单:{} 存货明细行:{} 请求数量不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
if (targetDetails != null) {
|
||||
//售后订单明细行-退货金额
|
||||
String totalAmount = targetDetails.getTotalAmount();//实退金额
|
||||
Assert.notNull(totalAmount, "售后订单:{} 存货明细行:{} 退货金额不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
Assert.state(!"".equals(totalAmount), "售后订单:{} 存货明细行:{} 退货金额不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
//售后订单明细行-请求数量
|
||||
//实退数量存在可能为0的情况,如果用退货金额/实退数量可能会抛出异常
|
||||
String requestQty = targetDetails.getRequestQty();//请求数量
|
||||
Assert.notNull(requestQty, "售后订单:{} 存货明细行:{} 请求数量不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
Assert.state(!"".equals(requestQty), "售后订单:{} 存货明细行:{} 请求数量不能为空!", header.getCode(), targetDetails.getSkuCode());
|
||||
|
||||
String quantity = passiveStorageSonDetailsDto.getQuantity();
|
||||
Assert.notNull(quantity, "无源入库单:{} sku:{} 实退数量不能为空", passiveStorageSonDetailsDto.getQuantity(), passiveStorageSonDetailsDto.getSkuName());
|
||||
Assert.state(!"".equals(quantity), "无源入库单:{} sku:{} 实退数量不能为空", passiveStorageSonDetailsDto.getQuantity(), passiveStorageSonDetailsDto.getSkuName());
|
||||
if ("0".equals(new BigDecimal(quantity).stripTrailingZeros().toPlainString())) {
|
||||
Assert.state(false, "无源入库单:{} sku:{} 实退数量不能为0!", passiveStorageSonDetailsDto.getQuantity(), passiveStorageSonDetailsDto.getSkuName());
|
||||
String quantity = passiveStorageSonDetailsDto.getQuantity();
|
||||
Assert.notNull(quantity, "无源入库单:{} sku:{} 实退数量不能为空", passiveStorageSonDetailsDto.getQuantity(), passiveStorageSonDetailsDto.getSkuName());
|
||||
Assert.state(!"".equals(quantity), "无源入库单:{} sku:{} 实退数量不能为空", passiveStorageSonDetailsDto.getQuantity(), passiveStorageSonDetailsDto.getSkuName());
|
||||
if ("0".equals(new BigDecimal(quantity).stripTrailingZeros().toPlainString())) {
|
||||
Assert.state(false, "无源入库单:{} sku:{} 实退数量不能为0!", passiveStorageSonDetailsDto.getQuantity(), passiveStorageSonDetailsDto.getSkuName());
|
||||
}
|
||||
|
||||
//O含税单价=通过退货金额/请求数量
|
||||
BigDecimal unitPriceIncludingTax = new BigDecimal(totalAmount).divide(new BigDecimal(requestQty), 20, BigDecimal.ROUND_HALF_UP);
|
||||
//实退金额=O含税单价*(O售后入库单)实退数量
|
||||
BigDecimal actualRefundAmount = unitPriceIncludingTax.multiply(new BigDecimal(quantity)).setScale(4, BigDecimal.ROUND_HALF_UP);
|
||||
String format = StrUtil.format("{}/{}*{}", totalAmount, requestQty, quantity);
|
||||
calculationFormulaStr.append(format);
|
||||
return actualRefundAmount.stripTrailingZeros().toPlainString();
|
||||
} else {
|
||||
//2025年4月18日11:06:04 如果无源入库单明细行无法匹配售后订单明细行,则金额为0即可
|
||||
return "0";
|
||||
}
|
||||
|
||||
//O含税单价=通过退货金额/请求数量
|
||||
BigDecimal unitPriceIncludingTax = new BigDecimal(totalAmount).divide(new BigDecimal(requestQty), 20, BigDecimal.ROUND_HALF_UP);
|
||||
//实退金额=O含税单价*(O售后入库单)实退数量
|
||||
BigDecimal actualRefundAmount = unitPriceIncludingTax.multiply(new BigDecimal(quantity)).setScale(4, BigDecimal.ROUND_HALF_UP);
|
||||
String format = StrUtil.format("{}/{}*{}", totalAmount, requestQty, quantity);
|
||||
calculationFormulaStr.append(format);
|
||||
return actualRefundAmount.stripTrailingZeros().toPlainString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -30,9 +30,9 @@ public class PassiveWarehouseReceiptToCTest {
|
|||
//测试O无源件入库
|
||||
// passiveWarehouseReceiptToC.startImplementStockByTime("2025-03-11 22:27:02", "2025-03-11 22:27:02");
|
||||
//测试O无源生成红字应收
|
||||
// passiveWarehouseReceiptToC.startImplementByTradeTime("2025-03-11 22:27:02", "2025-03-11 22:27:02");
|
||||
passiveWarehouseReceiptToC.startImplementStockByTime("2025-04-07 13:10:01", "2025-04-07 13:10:01");
|
||||
|
||||
passiveWarehouseReceiptToC.startImplementByCode("RH20250226000177", "tran");
|
||||
// passiveWarehouseReceiptToC.startImplementByCode("RH20250403000841", "stock");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue