refactor(sales): 重构 TOC 售后退款流程- 修改插件名称和标签,增加红字销售订单或应收单功能

- 更新业务流程名称,从 "TOC 售后完成" 改为 "TOC 销售退款"
- 优化计算逻辑,支持按实退金额计算
- 新增红字应收单推送接口和相关数据处理方法
- 重构原有的销售订单生成逻辑,适应新的退款流程
This commit is contained in:
liuy 2025-03-21 16:53:09 +08:00
parent fc441b4b1f
commit b0f2b4fe11
5 changed files with 3635 additions and 123 deletions

View File

@ -97,12 +97,14 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
@Override
public String getPluginName() {
return "OFS售后入库单(TOC)生成U8C红字销售订单";
// return "OFS售后入库单(TOC)生成U8C红字销售订单";
return "OFS售后入库单(TOC)生成U8C红字销售订单或应收单";
}
@Override
public String getPluginLabel() {
return "OFS售后入库单(TOC)生成U8C红字销售订单";
// return "OFS售后入库单(TOC)生成U8C红字销售订单";
return "OFS售后入库单(TOC)生成U8C红字销售订单或应收单";
}
@Override
@ -316,9 +318,10 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
if (ProfilesActiveConstant.FILTER_COMPANY.contains(header.getCompanyCode().trim())) {
return true;
}
if (sceneType.equals("tran") && (header.getClosedAt() == null || "".equals(header.getClosedAt().trim()))) {
return true;
}
//2025 3 20 18:25:25 改为生成红字应收单不过滤先退款后退款的场景
// if (sceneType.equals("tran") && (header.getClosedAt() == null || "".equals(header.getClosedAt().trim()))) {
// return true;
// }
}
return false;
}
@ -797,7 +800,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
Boolean isCheckShopChoose = balanceUnitPriceUtil.checkOfsShop(header.getStoreCode());
//把汇总好的出库单明细行合并成一行
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = groupMergeDetailedRows(oldValue, isCheckShopChoose);
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = groupMergeDetailedRows(oldValue, isCheckShopChoose, sceneType);
//存货管理档案取发货公司的存货管理档案
BdInvmandocEntity bdInvmandocEntity = oldValue.get(0).getBdInvmandocEntity();
//存货基础档案
@ -1036,51 +1039,71 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
String generateBusinessDate = createSuccessFulTradeDate(header);
SaleorderRequestDto saleorderRequestDto = new SaleorderRequestDto();
SaleorderRequestParentDto saleorderRequestParentDto = new SaleorderRequestParentDto();
saleorderRequestParentDto.setDbilldate(generateBusinessDate);//单据日期
saleorderRequestParentDto.setBretinvflag("Y");//退货标记
saleorderRequestParentDto.setCbiztype(bdBusitypeEntity.getPkBusitype());//业务流程
saleorderRequestParentDto.setCcalbodyid(bdCalbodyEntity.getPkCalbody());//库存组织
saleorderRequestParentDto.setCcustomerid(bdCumandocEntity.getPkCumandoc());//客户=开票单位=收货单位=表体收货单位=收货单位
saleorderRequestParentDto.setCdeptid(bdDeptdocEntity.getPkDeptdoc());//部门
saleorderRequestParentDto.setCemployeeid(null);//业务员
saleorderRequestParentDto.setCoperatorid(OverallConstant.getOverAllValue("u8cApiZdrPK"));//制单人
saleorderRequestParentDto.setCreceiptcorpid(bdCumandocEntity.getPkCumandoc());//开票单位
saleorderRequestParentDto.setCreceiptcustomerid(bdCumandocEntity.getPkCumandoc());//收货单位
saleorderRequestParentDto.setCsalecorpid(bdSalestruEntity.getCsalestruid());//销售组织
saleorderRequestParentDto.setCwarehouseid(bdStordocEntity.getPkStordoc());//仓库
saleorderRequestParentDto.setDapprovedate(generateBusinessDate);//审核日期
saleorderRequestParentDto.setNdiscountrate("100.000000");//整单折扣
saleorderRequestParentDto.setPk_corp(bdCorpEntity.getPkCorp());//公司id
//汇总单号=汇总维度
saleorderRequestParentDto.setVdef18(keyGroup);
//平台
saleorderRequestParentDto.setPk_defdoc2(platformArchives.getPkDefdoc());
saleorderRequestParentDto.setVdef2(platformArchives.getDocname());
saleorderRequestParentDto.setVdef17(ProfilesActiveConstant.sourceSystem1);//来源系统
// SaleorderRequestParentDto saleorderRequestParentDto = new SaleorderRequestParentDto();
// saleorderRequestParentDto.setDbilldate(generateBusinessDate);//单据日期
// saleorderRequestParentDto.setBretinvflag("Y");//退货标记
// saleorderRequestParentDto.setCbiztype(bdBusitypeEntity.getPkBusitype());//业务流程
// saleorderRequestParentDto.setCcalbodyid(bdCalbodyEntity.getPkCalbody());//库存组织
// saleorderRequestParentDto.setCcustomerid(bdCumandocEntity.getPkCumandoc());//客户=开票单位=收货单位=表体收货单位=收货单位
// saleorderRequestParentDto.setCdeptid(bdDeptdocEntity.getPkDeptdoc());//部门
// saleorderRequestParentDto.setCemployeeid(null);//业务员
// saleorderRequestParentDto.setCoperatorid(OverallConstant.getOverAllValue("u8cApiZdrPK"));//制单人
// saleorderRequestParentDto.setCreceiptcorpid(bdCumandocEntity.getPkCumandoc());//开票单位
// saleorderRequestParentDto.setCreceiptcustomerid(bdCumandocEntity.getPkCumandoc());//收货单位
// saleorderRequestParentDto.setCsalecorpid(bdSalestruEntity.getCsalestruid());//销售组织
// saleorderRequestParentDto.setCwarehouseid(bdStordocEntity.getPkStordoc());//仓库
// saleorderRequestParentDto.setDapprovedate(generateBusinessDate);//审核日期
// saleorderRequestParentDto.setNdiscountrate("100.000000");//整单折扣
// saleorderRequestParentDto.setPk_corp(bdCorpEntity.getPkCorp());//公司id
// //汇总单号=汇总维度
// saleorderRequestParentDto.setVdef18(keyGroup);
// //平台
// saleorderRequestParentDto.setPk_defdoc2(platformArchives.getPkDefdoc());
// saleorderRequestParentDto.setVdef2(platformArchives.getDocname());
// saleorderRequestParentDto.setVdef17(ProfilesActiveConstant.sourceSystem1);//来源系统
//
// //收发类别
// saleorderRequestParentDto.setPk_defdoc3(bdRdclEntity.getPkRdcl());
// saleorderRequestParentDto.setVdef3(bdRdclEntity.getRdname());
//
// //2024年8月8日 17:17:58 店铺档案自定义项1先不传后续维护好之后再传!
// //店铺
// saleorderRequestParentDto.setPk_defdoc1(shopArchives.getPkDefdoc());
// saleorderRequestParentDto.setVdef1(shopArchives.getDocname());
//
// //单据红字标识
// saleorderRequestParentDto.setPk_defdoc16(OverallConstant.getOverAllValue("u8c自定义项档案-单据红字标识-Y主键"));
// saleorderRequestParentDto.setVdef16(OverallConstant.getOverAllValue("u8c自定义项档案-单据红字标识-Y名称"));
//
// saleorderRequestDto.setParentvo(saleorderRequestParentDto);
//改为红字应收单表头
//组装应收单表头
ArapDjzbVO.Parentt parentVo = new ArapDjzbVO.Parentt();
parentVo.setDjrq(generateBusinessDate);//单据日期
parentVo.setDwbm(bdCorpEntity.getUnitcode());//公司
parentVo.setLrr(OverallConstant.getOverAllValue("u8cApiZdrCode"));//录入人
parentVo.setWldx("0");//往来对象标识 固定为客户
parentVo.setDeptid(bdDeptdocEntity.getDeptcode());//部门
parentVo.setShr(OverallConstant.getOverAllValue("u8cApiZdrCode"));//审批人
parentVo.setShrq(generateBusinessDate);//审核日期
parentVo.setDjlxbm("D0");//单据类型编码
parentVo.setXslxbm(bdBusitypeEntity.getBusicode());//业务流程
parentVo.setFeinvstatus("0");//开票状态
parentVo.setHbbm(bdCubasdocEntity.getCustcode());//客商主键
parentVo.setZyx1(shopArchives.getDoccode());//店铺档案
parentVo.setZyx2(platformArchives.getDoccode());//来源平台
parentVo.setZyx3(bdRdclEntity.getRdcode());//收发类别
parentVo.setZyx16("1");//单据红字标识
parentVo.setZyx17(ProfilesActiveConstant.sourceSystem1);//来源系统
parentVo.setZyx18(keyGroup);//汇总维度
//收发类别
saleorderRequestParentDto.setPk_defdoc3(bdRdclEntity.getPkRdcl());
saleorderRequestParentDto.setVdef3(bdRdclEntity.getRdname());
//2024年8月8日 17:17:58 店铺档案自定义项1先不传后续维护好之后再传!
//店铺
saleorderRequestParentDto.setPk_defdoc1(shopArchives.getPkDefdoc());
saleorderRequestParentDto.setVdef1(shopArchives.getDocname());
//单据红字标识
saleorderRequestParentDto.setPk_defdoc16(OverallConstant.getOverAllValue("u8c自定义项档案-单据红字标识-Y主键"));
saleorderRequestParentDto.setVdef16(OverallConstant.getOverAllValue("u8c自定义项档案-单据红字标识-Y名称"));
saleorderRequestDto.setParentvo(saleorderRequestParentDto);
List<SaleorderRequestChildrenDto> saleorderRequestChildrenDtoList = new ArrayList<>();
saleorderRequestDto.setChildrenvo(saleorderRequestChildrenDtoList);
// List<SaleorderRequestChildrenDto> saleorderRequestChildrenDtoList = new ArrayList<>();
// saleorderRequestDto.setChildrenvo(saleorderRequestChildrenDtoList);
//验证是否为指定的店铺如果为true则取结存价
Boolean isCheckShopChoose = balanceUnitPriceUtil.checkOfsShop(header.getStoreCode());
//把汇总好的出库单明细行合并成一行
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = groupMergeDetailedRows(oldValue, isCheckShopChoose);
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = groupMergeDetailedRows(oldValue, isCheckShopChoose, sceneType);
//存货管理档案取发货公司的存货管理档案
BdInvmandocEntity bdInvmandocEntity = oldValue.get(0).getBdInvmandocEntity();
@ -1111,58 +1134,70 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
// }
//判断是否为赠品
Boolean isblargessflag = false;
if ("0".equals(goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString())) {
isblargessflag = true;
}
// Boolean isblargessflag = false;
// if ("0".equals(goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString())) {
// isblargessflag = true;
// }
SaleorderRequestChildrenDto saleorderRequestChildrenDto = new SaleorderRequestChildrenDto();
saleorderRequestChildrenDto.setBlargessflag(isblargessflag);//是否赠品
saleorderRequestChildrenDto.setCadvisecalbodyid(bdCalbodyEntity.getPkCalbody());//发货库存组织
saleorderRequestChildrenDto.setCbodywarehouseid(bdStordocEntity.getPkStordoc());//发货仓库
saleorderRequestChildrenDto.setCconsigncorpid(deliverGoodsCorp.getPkCorp());//发货公司
saleorderRequestChildrenDto.setCcurrencytypeid("00010000000000000001");//币种
saleorderRequestChildrenDto.setCinventoryid(bdInvmandocEntity.getPkInvmandoc());//存货id
saleorderRequestChildrenDto.setCreceiptcorpid(bdCumandocEntity.getPkCumandoc());//收货单位
saleorderRequestChildrenDto.setDconsigndate(generateBusinessDate);//计划发货日期
saleorderRequestChildrenDto.setDdeliverdate(generateBusinessDate);// 要求收货日期
saleorderRequestChildrenDto.setNexchangeotobrate("1.00000000");//折本汇率
saleorderRequestChildrenDto.setNitemdiscountrate("100.000000");//单品折扣
saleorderRequestChildrenDto.setNnumber("-" + goodsRertunSonDetailsDto.getGroupShipQty().stripTrailingZeros().toPlainString());//数量
saleorderRequestChildrenDto.setNoriginalcurdiscountmny("0");//折扣额
// saleorderRequestChildrenDto.setNoriginalcurmny("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//无税金额
// saleorderRequestChildrenDto.setNoriginalcurnetprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税净价
// saleorderRequestChildrenDto.setNoriginalcurprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税单价
// saleorderRequestChildrenDto.setNoriginalcursummny("-" + noriginalcursummny.stripTrailingZeros().toPlainString());//价税合计
saleorderRequestChildrenDto.setNoriginalcursummny("-" + goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//价税合计 新逻辑
// saleorderRequestChildrenDto.setNoriginalcurtaxmny("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//税额
// saleorderRequestChildrenDto.setNoriginalcurtaxnetprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税净价
// saleorderRequestChildrenDto.setNoriginalcurtaxprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税单价
// saleorderRequestChildrenDto.setNtaxrate(new BigDecimal(bdTaxitemsEntity1.getTaxratio()).stripTrailingZeros().toPlainString());//税率
// saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
// saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
//如果优惠金额为0则传0
if (!"0".equals(goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef4("-" + goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef4("0");
}
if (!"0".equals(goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef5("-" + goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef5("0");
}
if (!"0".equals(goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef6("-" + goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef6("0");
}
if (!"0".equals(goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef7("-" + goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef7("0");
}
saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
// SaleorderRequestChildrenDto saleorderRequestChildrenDto = new SaleorderRequestChildrenDto();
// saleorderRequestChildrenDto.setBlargessflag(isblargessflag);//是否赠品
// saleorderRequestChildrenDto.setCadvisecalbodyid(bdCalbodyEntity.getPkCalbody());//发货库存组织
// saleorderRequestChildrenDto.setCbodywarehouseid(bdStordocEntity.getPkStordoc());//发货仓库
// saleorderRequestChildrenDto.setCconsigncorpid(deliverGoodsCorp.getPkCorp());//发货公司
// saleorderRequestChildrenDto.setCcurrencytypeid("00010000000000000001");//币种
// saleorderRequestChildrenDto.setCinventoryid(bdInvmandocEntity.getPkInvmandoc());//存货id
// saleorderRequestChildrenDto.setCreceiptcorpid(bdCumandocEntity.getPkCumandoc());//收货单位
// saleorderRequestChildrenDto.setDconsigndate(generateBusinessDate);//计划发货日期
// saleorderRequestChildrenDto.setDdeliverdate(generateBusinessDate);// 要求收货日期
// saleorderRequestChildrenDto.setNexchangeotobrate("1.00000000");//折本汇率
// saleorderRequestChildrenDto.setNitemdiscountrate("100.000000");//单品折扣
// saleorderRequestChildrenDto.setNnumber("-" + goodsRertunSonDetailsDto.getGroupShipQty().stripTrailingZeros().toPlainString());//数量
// saleorderRequestChildrenDto.setNoriginalcurdiscountmny("0");//折扣额
//// saleorderRequestChildrenDto.setNoriginalcurmny("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//无税金额
//// saleorderRequestChildrenDto.setNoriginalcurnetprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税净价
//// saleorderRequestChildrenDto.setNoriginalcurprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税单价
//// saleorderRequestChildrenDto.setNoriginalcursummny("-" + noriginalcursummny.stripTrailingZeros().toPlainString());//价税合计
// saleorderRequestChildrenDto.setNoriginalcursummny("-" + goodsRertunSonDetailsDto.getGroupTotalPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//价税合计 新逻辑
//// saleorderRequestChildrenDto.setNoriginalcurtaxmny("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//税额
//// saleorderRequestChildrenDto.setNoriginalcurtaxnetprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税净价
//// saleorderRequestChildrenDto.setNoriginalcurtaxprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税单价
//// saleorderRequestChildrenDto.setNtaxrate(new BigDecimal(bdTaxitemsEntity1.getTaxratio()).stripTrailingZeros().toPlainString());//税率
//// saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
//// saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
// //如果优惠金额为0则传0
// if (!"0".equals(goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString())) {
// saleorderRequestChildrenDto.setVdef4("-" + goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString());
// } else {
// saleorderRequestChildrenDto.setVdef4("0");
// }
// if (!"0".equals(goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString())) {
// saleorderRequestChildrenDto.setVdef5("-" + goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString());
// } else {
// saleorderRequestChildrenDto.setVdef5("0");
// }
// if (!"0".equals(goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString())) {
// saleorderRequestChildrenDto.setVdef6("-" + goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString());
// } else {
// saleorderRequestChildrenDto.setVdef6("0");
// }
// if (!"0".equals(goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString())) {
// saleorderRequestChildrenDto.setVdef7("-" + goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString());
// } else {
// saleorderRequestChildrenDto.setVdef7("0");
// }
// saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
//修改为生成红字应收单表体
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.setJfbbsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方本币税金
// arapDjzbVOChildrenn.setJfybsj("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//借方原币税金
// arapDjzbVOChildrenn.setWbfbbje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方本币无税金额
// arapDjzbVOChildrenn.setJfybwsje("-" + noriginalcurtaxmny.stripTrailingZeros().toPlainString());//借方原币无税金额
//退货没有邮费金额已经向万万确认
//平台优惠
@ -1178,7 +1213,8 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
//补充平台优惠-存货
BigDecimal absAccumulatedPostage = vdef4.abs();
BigDecimal negativeValue = absAccumulatedPostage.negate();
queryAdditionUtil.additional(saleorderRequestChildrenDtoList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, "-1", bdTaxitemsEntity);
// queryAdditionUtil.additional(saleorderRequestChildrenDtoList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, "-1", bdTaxitemsEntity);
queryAdditionUtil.additionalV3(childrennArrayList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, bdTaxitemsEntity);
}
}
//达人优惠
@ -1194,7 +1230,8 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
//补充达人优惠-存货
BigDecimal absAccumulatedPostage = vdef6.abs();
BigDecimal negativeValue = absAccumulatedPostage.negate();
queryAdditionUtil.additional(saleorderRequestChildrenDtoList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, "-1", bdTaxitemsEntity);
// queryAdditionUtil.additional(saleorderRequestChildrenDtoList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, "-1", bdTaxitemsEntity);
queryAdditionUtil.additionalV3(childrennArrayList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, bdTaxitemsEntity);
}
}
//支付优惠
@ -1210,27 +1247,48 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
//补充支付优惠-存货
BigDecimal absAccumulatedPostage = vdef5.abs();
BigDecimal negativeValue = absAccumulatedPostage.negate();
queryAdditionUtil.additional(saleorderRequestChildrenDtoList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, "-1", bdTaxitemsEntity);
// queryAdditionUtil.additional(saleorderRequestChildrenDtoList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, "-1", bdTaxitemsEntity);
queryAdditionUtil.additionalV3(childrennArrayList, bdInvmandocEntity1, bdInvbasdocEntity1, negativeValue, bdTaxitemsEntity);
}
}
if (ProfilesActiveConstant.PUSH_SCENE_TYPE_1.equals(pushScenarioType) || ProfilesActiveConstant.PUSH_SCENE_TYPE_2.equals(pushScenarioType)) {
//推送U8C
List<SaleorderRequestDto> saleorderRequestDtoList = new ArrayList<>();
saleorderRequestDtoList.add(saleorderRequestDto);
Map<String, List<SaleorderRequestDto>> stringStringMap = new HashMap<>();
stringStringMap.put("saleorder", saleorderRequestDtoList);
SoSaleResultRootDto soSaleResultRootDto = sendU8CTOCOrder(JSON.toJSONString(stringStringMap));
String vreceiptcode = null;
String pk_corp = null;
String csaleid = null;
if (soSaleResultRootDto != null && soSaleResultRootDto.getParentvo() != null) {
vreceiptcode = soSaleResultRootDto.getParentvo().getVreceiptcode();
pk_corp = soSaleResultRootDto.getParentvo().getPk_corp();
csaleid = soSaleResultRootDto.getParentvo().getCsaleid();
//推送U8C生成红字应收单
// List<SaleorderRequestDto> saleorderRequestDtoList = new ArrayList<>();
// saleorderRequestDtoList.add(saleorderRequestDto);
// Map<String, List<SaleorderRequestDto>> stringStringMap = new HashMap<>();
// stringStringMap.put("saleorder", saleorderRequestDtoList);
// SoSaleResultRootDto soSaleResultRootDto = sendU8CTOCOrder(JSON.toJSONString(stringStringMap));
// String vreceiptcode = null;
// String pk_corp = null;
// String csaleid = null;
// if (soSaleResultRootDto != null && soSaleResultRootDto.getParentvo() != null) {
// vreceiptcode = soSaleResultRootDto.getParentvo().getVreceiptcode();
// pk_corp = soSaleResultRootDto.getParentvo().getPk_corp();
// csaleid = soSaleResultRootDto.getParentvo().getCsaleid();
// }
// logger.info("TOC销售订单编号{} 销售订单主键:{} 销售公司:{}", vreceiptcode, csaleid, pk_corp);
List<ArapDjzbVO> arapDjzbVOList = new ArrayList<>();
ArapDjzbVO arapDjzbVO = new ArapDjzbVO();
arapDjzbVO.setParentvo(parentVo);
arapDjzbVO.setChildren(childrennArrayList);
arapDjzbVOList.add(arapDjzbVO);
Map<String, List<ArapDjzbVO>> listMap = new HashMap<>();
listMap.put("djzbvo", arapDjzbVOList);
ArapDjzb arapDjzb = sendU8cRedReceivable(JSON.toJSONString(listMap));
String djbh = null;
String dwbm = null;
String vouchid = null;
if (arapDjzb != null && arapDjzb.getParentvo() != null) {
djbh = arapDjzb.getParentvo().getDjbh();
dwbm = arapDjzb.getParentvo().getDwbm();
vouchid = arapDjzb.getParentvo().getVouchid();
}
logger.info("TOC销售订单编号{} 销售订单主键:{} 销售公司:{}", vreceiptcode, csaleid, pk_corp);
updateSuccessOrFail2(oldValue, "Y", "success", vreceiptcode, csaleid);
logger.info("TOC红字应收单{} 销售订单主键:{} 销售公司:{}", djbh, vouchid, dwbm);
updateSuccessOrFail2(oldValue, "Y", "success", djbh, vouchid);
} else if (ProfilesActiveConstant.PUSH_SCENE_TYPE_0.equals(pushScenarioType)) {
//不推送U8C单据暂存
String vreceiptcode = "暂存";
@ -1748,7 +1806,8 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
private BdBusitypeEntity u8cOperationFlowV2() throws Exception {
//查询业务流程
//2024年8月6日 11:33:07 具体的业务流程名称还需要实施提供
String processName = "TOC售后完成";
// String processName = "TOC售后完成";
String processName = "TOC销售退款";
BdBusitypeEntity bdBusitypeEntity = queryBdBusitypeUtil.queryBdBusitype(processName);
Assert.notNull(bdBusitypeEntity, "根据业务流程名称({})没有查询到业务流程", processName);
return bdBusitypeEntity;
@ -1798,7 +1857,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
* @param isCheckShopChoose true取建议零售价false取实付金额
* @author liuyang
*/
private GoodsRertunSonDetailsDto groupMergeDetailedRows(List<GoodsRertunSonDetailsDto> sonDetailsDtoList, Boolean isCheckShopChoose) throws Exception {
private GoodsRertunSonDetailsDto groupMergeDetailedRows(List<GoodsRertunSonDetailsDto> sonDetailsDtoList, Boolean isCheckShopChoose, String sceneType) throws Exception {
Assert.notNull(sonDetailsDtoList, "sonDetailsDtoList不能为空");
Assert.notNull(isCheckShopChoose, "isCheckShopChoose不能为空");
// Assert.notNull(mapList, "mapLists不能为空");
@ -1828,8 +1887,13 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
//U8C存货基本档案-参考售价
totalAmount = getRefsaleprice(bdInvmandocEntity, bdInvbasdocEntity, calculationFormulaStr, goodsRertunSonDetailsDto, header);
} else {
//O实退
totalAmount = accumulatedDiscounts(goodsRertunSonDetailsDto, rerturnGoodsOrderSearchData, calculationFormulaStr);
if (sceneType.equals("tran")) {
//O实退金额
totalAmount = accumulatedDiscountsV2(goodsRertunSonDetailsDto, rerturnGoodsOrderSearchData, calculationFormulaStr);
} else {
//O实退金额/O请求数量*O实收数量
totalAmount = accumulatedDiscounts(goodsRertunSonDetailsDto, rerturnGoodsOrderSearchData, calculationFormulaStr);
}
}
//取对应的售后订单明细主要是取这个价格
@ -2950,6 +3014,70 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
return totalPayAmount;
}
/**
* 累加应收金额=实退金额+达人优惠+支付优惠+平台优惠
*
* @param goodsRertunSonDetailsDto OFS售后入库单明细行
* @param rerturnGoodsOrderSearchData OFS售后订单
* @param calculationFormulaStr 计算公式
* @author liuyang
*/
private String accumulatedDiscountsV2(GoodsRertunSonDetailsDto goodsRertunSonDetailsDto, RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData, StringBuffer calculationFormulaStr) throws Exception {
Assert.notNull(goodsRertunSonDetailsDto, "goodsRertunSonDetailsDto OFS售后入库单明细行不能为空");
Assert.notNull(rerturnGoodsOrderSearchData, "rerturnGoodsOrderSearchData OFS售后订单不能为空");
Assert.notNull(calculationFormulaStr, "calculationFormulaStr不能为空");
//O售后入库单表头
StockinOrderSearchResponse.StockinOrder.StockinH header1 = goodsRertunSonDetailsDto.getHeader();
//O售后订单表头+明细行
RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> details = rerturnGoodsOrderSearchData.getDetails();
//根据入库单明细匹配售后订单明细行
RerturnGoodsOrderSearchDetails targetDetails = null;
for (int i = 0; i < details.size(); i++) {
RerturnGoodsOrderSearchDetails rerturnGoodsOrderSearchDetails = details.get(i);
if (goodsRertunSonDetailsDto.getRefOrderDetailId() != null && rerturnGoodsOrderSearchDetails.getId() != null) {
if (rerturnGoodsOrderSearchDetails.getId().equals(goodsRertunSonDetailsDto.getRefOrderDetailId())) {
targetDetails = rerturnGoodsOrderSearchDetails;
}
}
}
Assert.notNull(targetDetails, "根据OFS售后入库单细行(refOrderDetailId)无法匹配售后订单明细行", goodsRertunSonDetailsDto.getRefOrderDetailId());
//售后订单明细行-退货金额
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());
//测试
// goodsRertunSonDetailsDto.setReceivedQty("1");
// String receivedQty = goodsRertunSonDetailsDto.getReceivedQty();
// Assert.notNull(receivedQty, "售后订单:{} 存货明细行:{} 请求数量不能为空!", header1.getCode(), goodsRertunSonDetailsDto.getId());
// Assert.state(!"".equals(receivedQty), header1.getCode(), goodsRertunSonDetailsDto.getId());
// if ("0".equals(new BigDecimal(receivedQty).stripTrailingZeros().toPlainString())) {
// Assert.state(false, "售后订单:{} 存货明细行:{} 实退数量不能为0", header1.getCode(), goodsRertunSonDetailsDto.getId());
// }
//O含税单价=通过退货金额/请求数量
// BigDecimal unitPriceIncludingTax = new BigDecimal(totalAmount).divide(new BigDecimal(requestQty), 20, BigDecimal.ROUND_HALF_UP);
//实退金额=O含税单价*O售后入库单这里保留 4 位小数的用途是便于暴露问题给后续方法后续方法会变成 2 位小数0.0034
// BigDecimal actualRefundAmount = unitPriceIncludingTax.multiply(new BigDecimal(receivedQty)).setScale(4, BigDecimal.ROUND_HALF_UP);
//出库对应的实退=含税单价(actualRefundAmount)*出库单实退数量
// BigDecimal actualRefundAmountBigDecimal = new BigDecimal(receivedQty).multiply(actualRefundAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
String format = StrUtil.format("{}", totalAmount);
calculationFormulaStr.append(format);
return totalAmount;
}
/**
* 累加应收金额=实退金额+达人优惠+支付优惠+平台优惠
*
@ -3265,4 +3393,59 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
}
return filteredList;
}
/**
* 2025 3 13 14:08:20
* 推送U8红字应收单方法
*
* @author liuyang
*/
public ArapDjzb sendU8cRedReceivable(String param) {
long startLong = System.currentTimeMillis();
logger.info("TOC推送开始推送参数" + param + ",U8C_URL:" + OverallConstant.getOverAllValue("u8c_url"));
String apiCode = "8000370069";
String result = HttpRequest.post(OverallConstant.getOverAllValue("u8c_url")).header("appId", OverallConstant.getOverAllValue("appId"))//头信息多个头信息多次调用此方法即可
.header("usercode", OverallConstant.getOverAllValue("u8cApiUsercodeCode")).header("password", OverallConstant.getOverAllValue("u8cApiPasswordCode")).header("system", OverallConstant.getOverAllValue("u8cApiSystemCode")).header("trantype", OverallConstant.getOverAllValue("u8cApiTrantypeCode")).header("apiCode", apiCode)//头信息多个头信息多次调用此方法即可
.header("publicKey", OverallConstant.getOverAllValue("publicKey"))//头信息多个头信息多次调用此方法即可
.header("secretKey", OverallConstant.getOverAllValue("secretKey"))//头信息多个头信息多次调用此方法即可
.body(param)//表单内容
.timeout(600000)//超时毫秒
.execute().body();
logger.info("TOC推送结束返回参数" + result);
long endLong = System.currentTimeMillis();
logger.info("TOC接口请求耗时" + (endLong - startLong));
JSONObject jsonObject = JSON.parseObject(result);
result = String.valueOf(jsonObject.get("attribute"));
boolean isSuccess = false;
ArapDjzb arapDjzb = null;
if (result != null && !"".equals(result)) {
ReusltStrDto reusltStrDto = JSON.parseObject(result, ReusltStrDto.class);
if ("success".equals(reusltStrDto.getStatus())) {
arapDjzb = resultDataHandle2(reusltStrDto.getData());
isSuccess = true;
}
}
if (!isSuccess) {
Assert.state(false, "TOC无源入库单生成红字应收单失败 接口返回结果:{}", result);
}
return arapDjzb;
}
private ArapDjzb resultDataHandle2(String resultData) {
try {
if (resultData != null && !"".equals(resultData)) {
if (resultData.contains("[")) {
resultData = resultData.substring(1, resultData.length() - 1);
}
return JSON.parseObject(resultData, ArapDjzb.class);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("解析返回参数失败的错误", e);
//如果解析失败记录原因但是不能影响结果的记录
}
return null;
}
}

View File

@ -228,4 +228,60 @@ public class QueryAdditionUtil {
}
// }
}
/**
* 增加平台运费优惠金额这些存货一起保存进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存货编码
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);
}
// }
}
}

View File

@ -89,7 +89,7 @@ public class SoSaleOutPluginInitializerToBTest {
// soSaleOutPluginInitializerToB.startImplementByStockTime("2024-10-31 14:48:41", "2024-10-31 14:48:41");
soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2025020600020284", "tran");
soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2025031200015584", "stock");
// soSaleOutPluginInitializerToB.startImplementByStockTime("2024-11-08 19:18:02", "2024-11-08 19:18:02");

View File

@ -36,7 +36,12 @@ public class SoSaleReturnPluginInitializerToCTest {
public void startImplement() {
// soSaleReturnPluginInitializerToC.startImplement(null, null);
try {
String code = "LETS-RE2025022000001336";
//带优惠金额场景
// String code = "LETS-RE2025030100000112";
// soSaleReturnPluginInitializerToC.startImplementByCode(code, "tran");
//无优惠金额场景
String code = "LETS-RE2025031900000002";
soSaleReturnPluginInitializerToC.startImplementByCode(code, "tran");
} catch (Exception e) {
e.printStackTrace();
@ -72,7 +77,7 @@ public class SoSaleReturnPluginInitializerToCTest {
// String s = soSaleReturnPluginInitializerToC.timeJudgment(header2);
// System.out.println(s);
soSaleReturnPluginInitializerToC.u8cOperationFlow();
// soSaleReturnPluginInitializerToC.u8cOperationFlow();
} catch (Exception e) {
e.printStackTrace();
}