fix(sales): 优化售后无源入库单生成红字应收单的逻辑

- 增加对合并后金额为 0 的判断,避免传递无效数据到 U8C
- 移除税率计算相关代码,简化逻辑
- 新增 filterForSale 方法,过滤掉售中节点的售后订单- 更新测试用例,使用实际订单编号进行测试
This commit is contained in:
liuy 2025-03-28 16:04:56 +08:00
parent 84a04f0fdc
commit 08720c627f
7 changed files with 128 additions and 92 deletions

View File

@ -1018,29 +1018,36 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
//根据存货基础档案编码查询当前存货的税率
BdTaxitemsEntity bdTaxitemsEntity1 = value.get(0).getBdTaxitemsEntity();
String tax = null;//税率
BigDecimal noriginalcurmny = null;//无税金额
BigDecimal noriginalcurtaxmny = null;//税额
try {
tax = new BigDecimal(bdTaxitemsEntity1.getTaxratio()).divide(new BigDecimal(100), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
noriginalcurmny = passiveStorageSonDetailsDto.getGroupTotalPayAmount().divide(new BigDecimal(1).add(new BigDecimal(tax)), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
noriginalcurtaxmny = passiveStorageSonDetailsDto.getGroupTotalPayAmount().subtract(noriginalcurmny).setScale(2, BigDecimal.ROUND_HALF_UP);
} catch (Exception e) {
logger.error("金额计算失败", e);
Assert.state(false, "金额计算失败 跑出异常:{}", e.getMessage());
//如果合并后的金额为0则不传到U8C
Assert.notNull(passiveStorageSonDetailsDto.getGroupTotalPayAmount(), "passiveStorageSonDetailsDto.getGroupTotalPayAmount()不能为空!");
BigDecimal groupTotalPayAmount = passiveStorageSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP);
if ("0".equals(groupTotalPayAmount.stripTrailingZeros().toPlainString())) {
continue;
}
// String tax = null;//税率
// BigDecimal noriginalcurmny = null;//无税金额
// BigDecimal noriginalcurtaxmny = null;//税额
// try {
// tax = new BigDecimal(bdTaxitemsEntity1.getTaxratio()).divide(new BigDecimal(100), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
// noriginalcurmny = groupTotalPayAmount.divide(new BigDecimal(1).add(new BigDecimal(tax)), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
// noriginalcurtaxmny = groupTotalPayAmount.subtract(noriginalcurmny).setScale(2, BigDecimal.ROUND_HALF_UP);
// } catch (Exception e) {
// logger.error("金额计算失败", e);
// Assert.state(false, "金额计算失败 跑出异常:{}", e.getMessage());
// }
//组装应收单表体
List<ArapDjzbVO.Childrenn> pushScenarioType = new ArrayList<>();
ArapDjzbVO.Childrenn arapDjzbVOChildrenn = new ArapDjzbVO.Childrenn();
pushScenarioType.add(arapDjzbVOChildrenn);
arapDjzbVOChildrenn.setCinventoryid(bdInvbasdocEntity.getInvcode());//存货管理档案
arapDjzbVOChildrenn.setJfbbje("-" + passiveStorageSonDetailsDto.getGroupTotalPayAmount());//借方本币金额
arapDjzbVOChildrenn.setJfybje("-" + passiveStorageSonDetailsDto.getGroupTotalPayAmount());//借方原币金额
arapDjzbVOChildrenn.setJfbbsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
arapDjzbVOChildrenn.setJfybsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
arapDjzbVOChildrenn.setWbfbbje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额
arapDjzbVOChildrenn.setJfybwsje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方原币无税金额
arapDjzbVOChildrenn.setJfbbje("-" + groupTotalPayAmount.stripTrailingZeros().toPlainString());//借方本币金额
arapDjzbVOChildrenn.setJfybje("-" + groupTotalPayAmount.stripTrailingZeros().toPlainString());//借方原币金额
// arapDjzbVOChildrenn.setJfbbsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
// arapDjzbVOChildrenn.setJfybsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
// arapDjzbVOChildrenn.setWbfbbje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额
// arapDjzbVOChildrenn.setJfybwsje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方原币无税金额
//退货没有邮费金额已经向万万确认
//平台优惠
@ -1237,6 +1244,7 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
findAfterSalesOrder(rerturnGoodsOrderSearchData, passiveStorageResponseDataList);
if ("tran".equals(sceneType)) {
passiveStorageResponseDataList = filterAfterSalesOrder(passiveStorageResponseDataList);
passiveStorageResponseDataList = filterForSale(passiveStorageResponseDataList);
}
//查询OFS售后订单对应的OFS销售订单
@ -1261,6 +1269,11 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
Assert.notNull(rerturnGoodsOrderSearchData1, "无法关联到OFS售后订单 售后无源入库单:{}", header.getReceiptCode().trim());
RerturnGoodsOrderSearchHeader header2 = rerturnGoodsOrderSearchData1.getHeader();
List<RerturnGoodsOrderSearchDetails> details2 = rerturnGoodsOrderSearchData1.getDetails();
//测试3个要传给u8c的优惠金额
// details2.get(0).setPlatformDiscounts("1.12");
// details2.get(0).setExpertDiscounts("0.543");
// details2.get(0).setMerchantDiscounts("4.54");
//用于抛出异常时记录交易成功时间
// transactionDate = header2.getRefundedAt();
@ -2442,7 +2455,7 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
Assert.notNull(passiveStorageResponseDataDtoArrayList, "returnGoodHeaderDetailsDataDtoArrayList不能为空");
List<PassiveStorageResponse.Data> passiveStorageResponseData = new ArrayList<>();
if (ofsPassiveorderDetailEntityList != null && passiveStorageResponseDataDtoArrayList != null && ofsPassiveorderDetailEntityList.size() > 0) {
if (ofsPassiveorderDetailEntityList != null && passiveStorageResponseDataDtoArrayList != null) {
List<OfsPassiveorderDetailEntity> collect = ofsPassiveorderDetailEntityList.stream().map(obj -> {
if (obj.getNewstate2() == null) {
obj.setNewstate2("");
@ -3095,4 +3108,36 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity {
}
return filteredList;
}
/**
* 如果无源入库单对应的售后订单状态为售中节点则过滤掉不传递
*
* @param passiveStorageResponseDataList 无源入库单
* @throws Exception 抛出可能的异常
* @author liuyang
*/
public List<PassiveStorageResponse.Data> filterForSale(List<PassiveStorageResponse.Data> passiveStorageResponseDataList) throws Exception {
List<PassiveStorageResponse.Data> filteredList = null;
if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) {
filteredList = passiveStorageResponseDataList.stream().filter(stockinOrder -> {
PassiveStorageResponse.Header header = stockinOrder.getHeader();
if (header == null) {
// 如果 StockinH 为空保留该对象
return true;
}
RerturnGoodsOrderSearchData returnData = header.getRerturnGoodsOrderSearchData();
if (returnData == null || returnData.getHeader() == null) {
// 如果 RerturnGoodsOrderSearchData 为空保留该对象
return true;
}
if (returnData.getHeader().getReturnNode() == null) {
// 如果 RerturnGoodsOrderSearchData 为空保留该对象
return true;
}
// 检查 returnNode 是否不等于 200若不等于则保留
return !"200".equals(returnData.getHeader().getReturnNode().trim());
}).collect(Collectors.toList());
}
return filteredList;
}
}

View File

@ -100,7 +100,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
// return "OFS售后入库单(TOC)生成U8C红字销售订单";
return "OFS售后入库单(TOC)生成U8C红字销售订单或应收单";
}
@Override
public String getPluginLabel() {
// return "OFS售后入库单(TOC)生成U8C红字销售订单";
@ -1187,13 +1187,20 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
// }
// saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
//如果合并后的金额为0则不传到U8C
Assert.notNull(goodsRertunSonDetailsDto.getGroupTotalPayAmount(), "goodsRertunSonDetailsDto.getGroupTotalPayAmount()不能为空!");
BigDecimal groupTotalPayAmount = goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP);
if ("0".equals(groupTotalPayAmount.stripTrailingZeros().toPlainString())) {
continue;
}
//修改为生成红字应收单表体
List<ArapDjzbVO.Childrenn> childrennArrayList = new ArrayList<>();
ArapDjzbVO.Childrenn arapDjzbVOChildrenn = new ArapDjzbVO.Childrenn();
childrennArrayList.add(arapDjzbVOChildrenn);
arapDjzbVOChildrenn.setCinventoryid(bdInvbasdocEntity.getInvcode());//存货管理档案
arapDjzbVOChildrenn.setJfbbje("-" + goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//借方本币金额
arapDjzbVOChildrenn.setJfybje("-" + goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//借方原币金额
arapDjzbVOChildrenn.setJfbbje("-" + groupTotalPayAmount.stripTrailingZeros().toPlainString());//借方本币金额
arapDjzbVOChildrenn.setJfybje("-" + groupTotalPayAmount.stripTrailingZeros().toPlainString());//借方原币金额
// arapDjzbVOChildrenn.setJfbbsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
// arapDjzbVOChildrenn.setJfybsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
// arapDjzbVOChildrenn.setWbfbbje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额

View File

@ -189,69 +189,16 @@ public class QueryAdditionUtil {
Assert.notNull(bdInvbasdocEntity1, "bdInvbasdocEntity1不能为空");
Assert.notNull(noriginalcursummny, "noriginalcursummny不能为空");
//如果size=0则不正常
// if (pushScenarioType.size() > 0) {
// ArapDjzbVO.Childrenn childrenn = pushScenarioType.get(0);
//拷贝SaleorderRequestChildrenDto对象
ArapDjzbVO.Childrenn arapDjzbVOChildrenn = new ArapDjzbVO.Childrenn();
// BeanUtil.copyPropertiesV2(childrenn, arapDjzbVOChildrenn);
//修改存货数量税率价税合计优惠金额设置为0
//存货id存货编码
arapDjzbVOChildrenn.setCinventoryid(bdInvbasdocEntity1.getInvcode());
String tax = null;//税率
BigDecimal noriginalcurmny = null;//无税金额
BigDecimal noriginalcurtaxmny = null;//税额
try {
tax = new BigDecimal(bdTaxitemsEntity.getTaxratio()).divide(new BigDecimal(100), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
noriginalcurmny = noriginalcursummny.divide(new BigDecimal(1).add(new BigDecimal(tax)), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
noriginalcurtaxmny = noriginalcursummny.subtract(noriginalcurmny).setScale(2, BigDecimal.ROUND_HALF_UP);
} catch (Exception e) {
logger.error("金额计算失败", e);
Assert.state(false, "金额计算失败 异常:{}", e.getMessage());
}
//金额计算
arapDjzbVOChildrenn.setJfbbje(noriginalcursummny.stripTrailingZeros().toPlainString());//借方本币金额
arapDjzbVOChildrenn.setJfybje(noriginalcursummny.stripTrailingZeros().toPlainString());//借方原币金额
arapDjzbVOChildrenn.setJfbbsj(noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
arapDjzbVOChildrenn.setJfybsj(noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
arapDjzbVOChildrenn.setWbfbbje(noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额
arapDjzbVOChildrenn.setJfybwsje(noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方原币无税金额
//2025年2月17日 10:37:37 如果四舍五入保留2位后如果为0则不推送U8C处理0.0033保留2位为0的问题
//和李佳妮还有丽知-山海沟通确定的
if (!"0".equals(noriginalcursummny.setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString())) {
pushScenarioType.add(arapDjzbVOChildrenn);
if ("0".equals(noriginalcursummny.setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString())) {
return;
} else {
noriginalcursummny = noriginalcursummny.setScale(2, BigDecimal.ROUND_HALF_UP);
}
// }
}
/**
* 增加平台运费优惠金额这些存货一起保存进U8C销售订单
*
* @param bdInvmandocEntity1 存货管理档案
* @param bdInvbasdocEntity1 存货基本档案
* @param pushScenarioType 需要推送给U8C红字应收单明细行表体
* @param noriginalcursummny 价税合计(只能传金额)
* @param bdTaxitemsEntity 存货对应的税率
* @author liuyang
*/
public void additionalV3(List<ArapDjzbVO.Childrenn> pushScenarioType, BdInvmandocEntity bdInvmandocEntity1, BdInvbasdocEntity bdInvbasdocEntity1, BigDecimal noriginalcursummny, BdTaxitemsEntity bdTaxitemsEntity) {
Assert.notNull(pushScenarioType, "pushScenarioType不能为空");
Assert.notNull(bdInvmandocEntity1, "bdInvmandocEntity1不能为空");
Assert.notNull(bdInvbasdocEntity1, "bdInvbasdocEntity1不能为空");
Assert.notNull(noriginalcursummny, "noriginalcursummny不能为空");
//如果size=0则不正常
// if (pushScenarioType.size() > 0) {
// ArapDjzbVO.Childrenn childrenn = pushScenarioType.get(0);
//拷贝SaleorderRequestChildrenDto对象
ArapDjzbVO.Childrenn arapDjzbVOChildrenn = new ArapDjzbVO.Childrenn();
// BeanUtil.copyPropertiesV2(childrenn, arapDjzbVOChildrenn);
//修改存货数量税率价税合计优惠金额设置为0
//存货id存货编码
@ -272,16 +219,50 @@ public class QueryAdditionUtil {
//金额计算
arapDjzbVOChildrenn.setJfbbje(noriginalcursummny.stripTrailingZeros().toPlainString());//借方本币金额
arapDjzbVOChildrenn.setJfybje(noriginalcursummny.stripTrailingZeros().toPlainString());//借方原币金额
//解决0.03 优惠金额 / (1+0.06 税率) = 0.03已经和妮姐确认通过传递应收单到U8C税额和无税金额U8C会自动算出来所以这里就不传了
// arapDjzbVOChildrenn.setJfbbsj(noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
// arapDjzbVOChildrenn.setJfybsj(noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
// arapDjzbVOChildrenn.setWbfbbje(noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额
// arapDjzbVOChildrenn.setJfybwsje(noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方原币无税金额
pushScenarioType.add(arapDjzbVOChildrenn);
}
/**
* 增加平台运费优惠金额这些存货一起保存进U8C销售订单
*
* @param bdInvmandocEntity1 存货管理档案
* @param bdInvbasdocEntity1 存货基本档案
* @param pushScenarioType 需要推送给U8C红字应收单明细行表体
* @param noriginalcursummny 价税合计(只能传金额)
* @param bdTaxitemsEntity 存货对应的税率
* @author liuyang
*/
public void additionalV3(List<ArapDjzbVO.Childrenn> pushScenarioType, BdInvmandocEntity bdInvmandocEntity1, BdInvbasdocEntity bdInvbasdocEntity1, BigDecimal noriginalcursummny, BdTaxitemsEntity bdTaxitemsEntity) {
Assert.notNull(pushScenarioType, "pushScenarioType不能为空");
Assert.notNull(bdInvmandocEntity1, "bdInvmandocEntity1不能为空");
Assert.notNull(bdInvbasdocEntity1, "bdInvbasdocEntity1不能为空");
Assert.notNull(noriginalcursummny, "noriginalcursummny不能为空");
//2025年2月17日 10:37:37 如果四舍五入保留2位后如果为0则不推送U8C处理0.0033保留2位为0的问题
//和李佳妮还有丽知-山海沟通确定的
if (!"0".equals(noriginalcursummny.setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString())) {
pushScenarioType.add(arapDjzbVOChildrenn);
if ("0".equals(noriginalcursummny.setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString())) {
return;
} else {
noriginalcursummny = noriginalcursummny.setScale(2, BigDecimal.ROUND_HALF_UP);
}
// }
//拷贝SaleorderRequestChildrenDto对象
ArapDjzbVO.Childrenn arapDjzbVOChildrenn = new ArapDjzbVO.Childrenn();
//修改存货数量税率价税合计优惠金额设置为0
//存货id存货编码
arapDjzbVOChildrenn.setCinventoryid(bdInvbasdocEntity1.getInvcode());
//金额计算
arapDjzbVOChildrenn.setJfbbje(noriginalcursummny.stripTrailingZeros().toPlainString());//借方本币金额
arapDjzbVOChildrenn.setJfybje(noriginalcursummny.stripTrailingZeros().toPlainString());//借方原币金额
// arapDjzbVOChildrenn.setJfbbsj(noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
// arapDjzbVOChildrenn.setJfybsj(noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
// arapDjzbVOChildrenn.setWbfbbje(noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额
// arapDjzbVOChildrenn.setJfybwsje(noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方原币无税金额
pushScenarioType.add(arapDjzbVOChildrenn);
}
}

View File

@ -28,11 +28,11 @@ public class PassiveWarehouseReceiptToCTest {
public void startImplementStockByTime() {
try {
//测试O无源件入库
passiveWarehouseReceiptToC.startImplementStockByTime("2025-03-11 22:27:02", "2025-03-11 22:27:02");
// 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.startImplementByCode("1111", "stock");
passiveWarehouseReceiptToC.startImplementByCode("RH20250226000177", "tran");
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -96,8 +96,8 @@ class SoSaleOutPluginInitializerToCTest {
// soSaleOutPluginInitializerToC.splitDateAndPush(computingTime, "tran");
// String s = "LETS-SH2024073100000004";
// soSaleOutPluginInitializerToC.startImplementStockByCode(s, "stock");
String s = "LETS-SH2025032200027982";
soSaleOutPluginInitializerToC.startImplementStockByCode(s, "stock");
// soSaleOutPluginInitializerToC.startImplementStockByTime("2024-09-24 16:35:43","2024-09-24 16:35:45");
@ -139,9 +139,9 @@ class SoSaleOutPluginInitializerToCTest {
// soSaleOutPluginInitializerToC.startImplementStockByCode("LETS-SH2025012300026949", "tran");
String processName = "TOC确认收入";
BdBusitypeEntity bdBusitypeEntity = queryBdBusitypeUtil.queryBdBusitype(processName);
System.out.println(bdBusitypeEntity.getPkBusitype());
// String processName = "TOC确认收入";
// BdBusitypeEntity bdBusitypeEntity = queryBdBusitypeUtil.queryBdBusitype(processName);
// System.out.println(bdBusitypeEntity.getPkBusitype());
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -37,12 +37,12 @@ public class SoSaleReturnPluginInitializerToCTest {
// soSaleReturnPluginInitializerToC.startImplement(null, null);
try {
//带优惠金额场景
// String code = "LETS-RE2025030100000112";
// soSaleReturnPluginInitializerToC.startImplementByCode(code, "tran");
String code = "LETS-RE2025030100000112";
soSaleReturnPluginInitializerToC.startImplementByCode(code, "tran");
//无优惠金额场景
String code = "LETS-RE2025031900000002";
soSaleReturnPluginInitializerToC.startImplementByCode(code, "tran");
// String code = "LETS-RE2025031900000002";
// soSaleReturnPluginInitializerToC.startImplementByCode(code, "tran");
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -72,7 +72,10 @@ public class QueryU8CEntityUtilTest {
// String aaa = "9279";
// queryU8CEntityUtil.getFuzzyQueryCustomers(aaa);
queryU8CEntityUtil.queryBdDefDocByPkDefDocAll();
// queryU8CEntityUtil.queryBdDefDocByPkDefDocAll();
queryU8CEntityUtil.queryU8cPoOrderOperationFlow("DLCG");
} catch (Exception e) {
e.printStackTrace();
}