修复OFS售后入库单优惠金额计算问题

- 在SoSaleReturnPluginInitializerToC类中添加累加优惠金额的方法
- 修改GoodsRertunSonDetailsDto类,增加优惠金额字段
- 在OfsOrderAfterSalesAmountAllocationUtil类中移除测试代码
-优化OfsOrderSaleAmountAllocationUtil类中的测试代码
This commit is contained in:
liuy 2024-10-11 15:34:23 +08:00
parent b3d244f415
commit bbba76de05
7 changed files with 159 additions and 11 deletions

View File

@ -1835,7 +1835,7 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
//单据红字标识
salesInvoiceHeadDto.setPk_defdoc16(OverallConstant.getOverAllValue("u8c自定义项档案-单据红字标识-N主键"));
salesInvoiceHeadDto.setVdef16(OverallConstant.getOverAllValue("u8c自定义项档案-单据红字标识-N名称"));
List<SalesInvoiceBodyDto> salesInvoiceBodyDtoList = new ArrayList<>();
for (int j = 0; j < details.size(); j++) {
DetailsDto detailsDto = details.get(j);

View File

@ -862,10 +862,10 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
//销售订单单据推送到u8c
//TODO 测试
if (true) {
continue;
}
//测试
// if (true) {
// continue;
// }
List<SaleorderRequestDto> saleorderRequestDtoList = new ArrayList<>();
saleorderRequestDtoList.add(saleorderRequestDto);

View File

@ -683,6 +683,27 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
saleorderRequestChildrenDto.setNtaxrate(new BigDecimal(bdTaxitemsEntity1.getTaxratio()).stripTrailingZeros().toPlainString());//税率
// saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
// saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
//如果优惠金额为0则传0
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef4("-" + goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef4("0");
}
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef5("-" + goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef5("0");
}
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef6("-" + goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef6("0");
}
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef7("-" + goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef7("0");
}
saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
//销售订单单据推送到u8c
@ -869,6 +890,27 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
saleorderRequestChildrenDto.setNtaxrate(new BigDecimal(bdTaxitemsEntity1.getTaxratio()).stripTrailingZeros().toPlainString());//税率
// saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
// saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
//如果优惠金额为0则传0
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef4("-" + goodsRertunSonDetailsDto.getVdef4().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef4("0");
}
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef5("-" + goodsRertunSonDetailsDto.getVdef5().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef5("0");
}
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef6("-" + goodsRertunSonDetailsDto.getVdef6().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef6("0");
}
if (goodsRertunSonDetailsDto != null && !"0".equals(goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString())) {
saleorderRequestChildrenDto.setVdef7("-" + goodsRertunSonDetailsDto.getVdef7().stripTrailingZeros().toPlainString());
} else {
saleorderRequestChildrenDto.setVdef7("0");
}
saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
//销售订单单据推送到u8c
@ -1376,6 +1418,10 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = sonDetailsDtoList.get(0);
goodsRertunSonDetailsDto.setGroupShipQty(groupShipQty);
goodsRertunSonDetailsDto.setGroupTotalPayAmount(groupTotalPayAmount);
//累加优惠金额
accumulationDiscountAmount(sonDetailsDtoList);
logger.info("TOB{}个明细行发生了合并!", sonDetailsDtoList.size());
return goodsRertunSonDetailsDto;
} else {
@ -2144,4 +2190,85 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
}
return dateRange;
}
/**
* 累加平台优惠
*
* @param sonDetailsDtoList OFS售后入库单
* @author liuyang
*/
private void accumulationDiscountAmount(List<GoodsRertunSonDetailsDto> sonDetailsDtoList) throws Exception {
Assert.notNull(sonDetailsDtoList, "sonDetailsDtoList不能为空");
if (sonDetailsDtoList.size() > 0) {
BigDecimal totalShareTargetPlatformDiscounts = new BigDecimal("0");
BigDecimal totalShareTargetMerchantDiscounts = new BigDecimal("0");
BigDecimal totalShareTargetExpertDiscounts = new BigDecimal("0");
BigDecimal totalShareTargetPayDiscounts = new BigDecimal("0");
for (int i = 0; i < sonDetailsDtoList.size(); i++) {
//OFS售后入库单表体
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = sonDetailsDtoList.get(i);
//OFS售后入库单表头
StockinOrderSearchResponse.StockinOrder.StockinH header1 = goodsRertunSonDetailsDto.getHeader();
Assert.notNull(header1, "OFS售后入库单表头不能为空");
//OFS售后订单
RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = header1.getRerturnGoodsOrderSearchData();
Assert.notNull(rerturnGoodsOrderSearchData, "通过OFS售后入库单号无法关联批量到OFS售后订单 OFS售后入库单编码{} OFS售后订单号{}", header1.getCode(), header1.getRefOrderCode());
RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> details = rerturnGoodsOrderSearchData.getDetails();
//四舍五入保留2位
RerturnGoodsOrderSearchDetails ofsOrderDetail = findOfsOrderDetail(details, goodsRertunSonDetailsDto);
if (ofsOrderDetail.getShareTargetPlatformDiscounts() != null) {
totalShareTargetPlatformDiscounts = totalShareTargetPlatformDiscounts.add(ofsOrderDetail.getShareTargetPlatformDiscounts());
}
if (ofsOrderDetail.getShareTargetMerchantDiscounts() != null) {
totalShareTargetMerchantDiscounts = totalShareTargetMerchantDiscounts.add(ofsOrderDetail.getShareTargetMerchantDiscounts());
}
if (ofsOrderDetail.getShareTargetExpertDiscounts() != null) {
totalShareTargetExpertDiscounts = totalShareTargetExpertDiscounts.add(ofsOrderDetail.getShareTargetExpertDiscounts());
}
if (ofsOrderDetail.getShareTargetPayDiscounts() != null) {
totalShareTargetPayDiscounts = totalShareTargetPayDiscounts.add(ofsOrderDetail.getShareTargetPayDiscounts());
}
logger.info("对应的售后入库单明细行主键:{}", goodsRertunSonDetailsDto.getId());
}
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = sonDetailsDtoList.get(0);
StockinOrderSearchResponse.StockinOrder.StockinH header = goodsRertunSonDetailsDto.getHeader();
goodsRertunSonDetailsDto.setVdef4(totalShareTargetPlatformDiscounts.setScale(2, BigDecimal.ROUND_HALF_UP));
goodsRertunSonDetailsDto.setVdef5(totalShareTargetMerchantDiscounts.setScale(2, BigDecimal.ROUND_HALF_UP));
goodsRertunSonDetailsDto.setVdef6(totalShareTargetExpertDiscounts.setScale(2, BigDecimal.ROUND_HALF_UP));
goodsRertunSonDetailsDto.setVdef7(totalShareTargetPayDiscounts.setScale(2, BigDecimal.ROUND_HALF_UP));
logger.info("售后入库明细主键:{} 售后入库单号:{} 最终汇总好的平台优惠:{}、支付优惠:{}、达人优惠:{}、商家优惠:{}", goodsRertunSonDetailsDto.getId(), header.getCode(), goodsRertunSonDetailsDto.getVdef4(), goodsRertunSonDetailsDto.getVdef5(), goodsRertunSonDetailsDto.getVdef6(), goodsRertunSonDetailsDto.getVdef7());
} else {
logger.info("accumulationDiscountAmount方法对应的sonDetailsDtoList.size为零");
}
}
/**
* 根据OFS售后入库单明细行查找匹配OFS售后订单明细行
*
* @param details OFS售后订单明细行
* @param goodsRertunSonDetailsDto OFS售后入库单明细对象
* @author liuyang
*/
private RerturnGoodsOrderSearchDetails findOfsOrderDetail(List<RerturnGoodsOrderSearchDetails> details, GoodsRertunSonDetailsDto goodsRertunSonDetailsDto) {
Assert.notNull(details, "details不能为空");
Assert.notNull(goodsRertunSonDetailsDto, "goodsRertunSonDetailsDto不能为空");
for (int i = 0; i < details.size(); i++) {
RerturnGoodsOrderSearchDetails rerturnGoodsOrderSearchDetails = details.get(i);
if (goodsRertunSonDetailsDto.getRefOrderDetailId() != null && rerturnGoodsOrderSearchDetails.getId() != null) {
if (goodsRertunSonDetailsDto.getRefOrderDetailId().equals(rerturnGoodsOrderSearchDetails.getId())) {
return rerturnGoodsOrderSearchDetails;
}
}
}
Assert.state(false, "根据OFS售后入库单明细行无法查找OFS售后订单明细行 来源明细行主键:{} 来源单据主键:{}", goodsRertunSonDetailsDto.getRefOrderDetailId(), goodsRertunSonDetailsDto.getRefOrderId());
return null;
}
}

View File

@ -119,4 +119,16 @@ public class GoodsRertunSonDetailsDto extends StockinOrderSearchResponse.Stockin
* 存货税率
*/
private BdTaxitemsEntity bdTaxitemsEntity;
//累加平台优惠
private BigDecimal vdef4;
//累加支付优惠
private BigDecimal vdef5;
//累加达人优惠
private BigDecimal vdef6;
//累加商家优惠
private BigDecimal vdef7;
}

View File

@ -58,8 +58,16 @@ public class OfsOrderAfterSalesAmountAllocationUtil {
* @author liuyang
*/
public void tocSalesAmountAllocation(RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData) throws Exception {
Assert.notNull(rerturnGoodsOrderSearchData, "rerturnGoodsOrderSearchData不能为空");
logger.info("==TOC退货金额分摊开始==");
//测试
// RerturnGoodsOrderSearchHeader header2 = rerturnGoodsOrderSearchData.getHeader();
// header2.setPlatformDiscounts("3.75");
// header2.setMerchantDiscounts("7.88");
// header2.setExpertDiscounts("4.22");
// header2.setPayDiscounts("1.96");
Assert.notNull(rerturnGoodsOrderSearchData, "OFS售后订单对象不能为空");
RerturnGoodsOrderSearchHeader header = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> detailsOld = rerturnGoodsOrderSearchData.getDetails();

View File

@ -57,12 +57,12 @@ public class OfsOrderSaleAmountAllocationUtil {
public void tocSalesAmountAllocation(com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto headerDetailsDto) throws Exception {
logger.info("==TOC销售金额分摊开始==");
//TODO 测试
HeaderDto header1 = headerDetailsDto.getHeader();
header1.setPlatformDiscounts("2.3");
header1.setMerchantDiscounts("4.9");
header1.setExpertDiscounts("1.2");
header1.setPayDiscounts("6.7");
//测试
// HeaderDto header1 = headerDetailsDto.getHeader();
// header1.setPlatformDiscounts("2.3");
// header1.setMerchantDiscounts("4.9");
// header1.setExpertDiscounts("1.2");
// header1.setPayDiscounts("6.7");
Assert.notNull(headerDetailsDto, "OFS销售订单对象不能为空");
HeaderDto header = headerDetailsDto.getHeader();

View File

@ -44,6 +44,7 @@ public class RerturnGoodsOrderSearchDetails {
private String createdBy;
private String lastUpdated;
private String lastUpdatedBy;
private String refOrderDetailId;
//分摊比例
private BigDecimal sharingRatio;