feat(sales): 重构销售退货单优惠金额计算逻辑
-移除不必要的日志输出 - 优化实退金额计算方法,考虑各种优惠类型 - 新增累加优惠金额功能,用于后续传给U8C - 在RerturnGoodsOrderSearchDetails中添加平台优惠、商家优惠、达人优惠和支付优惠字段
This commit is contained in:
parent
74b9e1314b
commit
879b05d2ac
|
@ -1718,7 +1718,7 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
|
|||
accumulatedDiscountAmountDef(sonDetailsDtoList);
|
||||
|
||||
//累加各类优惠
|
||||
logger.info("{}个明细行发生了合并!", sonDetailsDtoList.size());
|
||||
// logger.info("{}个明细行发生了合并!", sonDetailsDtoList.size());
|
||||
return sonDetailsDto;
|
||||
} else {
|
||||
logger.error("sonDetailsDtoList集合是空的!");
|
||||
|
@ -3356,7 +3356,7 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
|
|||
}
|
||||
|
||||
/**
|
||||
* 累加优惠金额,放在自定义项里
|
||||
* 累加优惠金额,放在自定义项里最后传给U8C
|
||||
*
|
||||
* @param sonDetailsDtoList OFS销售出库单明细行(按纬度汇总好的)
|
||||
* @author liuyang
|
||||
|
|
|
@ -1110,7 +1110,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
|
|||
List<com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto> headerDetailsDtos = queryBatchOfsOrder(returnGoodHeaderDetailsDataDtoList1);
|
||||
findOfsOrder(headerDetailsDtos, returnGoodHeaderDetailsDataDtoList1);
|
||||
//计算OFS销售订单优惠金额分摊到明细行
|
||||
ofsOrderAfterSalesAmountAllocationUtil.batchTocSalesAmountAllocation(rerturnGoodsOrderSearchData);
|
||||
// ofsOrderAfterSalesAmountAllocationUtil.batchTocSalesAmountAllocation(rerturnGoodsOrderSearchData);
|
||||
//初始化公司档案对照关系
|
||||
Map<String, String> comparisonCompanyArchives = queryU8CEntityUtil.queryBdDefDocByPkDefDocAll();
|
||||
|
||||
|
@ -1502,8 +1502,9 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
|
|||
String totalAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, goodsRertunSonDetailsDto, mapList);
|
||||
if (totalAmount == null) {
|
||||
//取O实退金额
|
||||
RerturnGoodsOrderSearchDetails afterSalesOrder = findAfterSalesOrderV2(goodsRertunSonDetailsDto, rerturnGoodsOrderSearchData);
|
||||
totalAmount = afterSalesOrder.getTotalAmount();
|
||||
// RerturnGoodsOrderSearchDetails afterSalesOrder = findAfterSalesOrderV2(goodsRertunSonDetailsDto, rerturnGoodsOrderSearchData);
|
||||
// totalAmount = afterSalesOrder.getTotalAmount();
|
||||
totalAmount = accumulatedDiscounts(goodsRertunSonDetailsDto, rerturnGoodsOrderSearchData);
|
||||
}
|
||||
|
||||
//实付金额/实发数量
|
||||
|
@ -1520,9 +1521,10 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
|
|||
goodsRertunSonDetailsDto.setGroupTotalPayAmount(groupTotalPayAmount);
|
||||
|
||||
//累加优惠金额
|
||||
accumulationDiscountAmount(sonDetailsDtoList);
|
||||
// accumulationDiscountAmount(sonDetailsDtoList);
|
||||
accumulatedDiscountAmountDef(sonDetailsDtoList);
|
||||
|
||||
logger.info("TOB{}个明细行发生了合并!", sonDetailsDtoList.size());
|
||||
// logger.info("TOB{}个明细行发生了合并!", sonDetailsDtoList.size());
|
||||
return goodsRertunSonDetailsDto;
|
||||
} else {
|
||||
logger.info("sonDetailsDtoList集合是空的!");
|
||||
|
@ -2573,4 +2575,150 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
|
|||
}
|
||||
return totalPayAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 累加应收金额=实退金额+达人优惠+支付优惠+平台优惠
|
||||
*
|
||||
* @param goodsRertunSonDetailsDto OFS售后入库单明细行
|
||||
* @param rerturnGoodsOrderSearchData OFS售后订单
|
||||
* @author liuyang
|
||||
*/
|
||||
private String accumulatedDiscounts(GoodsRertunSonDetailsDto goodsRertunSonDetailsDto, RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData) throws Exception {
|
||||
Assert.notNull(goodsRertunSonDetailsDto, "goodsRertunSonDetailsDto OFS售后入库单明细行不能为空!");
|
||||
Assert.notNull(rerturnGoodsOrderSearchData, "rerturnGoodsOrderSearchData OFS售后订单不能为空!");
|
||||
|
||||
//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());
|
||||
//通过退货金额/请求数量=含税单价
|
||||
BigDecimal unitPriceIncludingTax = new BigDecimal(totalAmount).divide(new BigDecimal(requestQty), 20, BigDecimal.ROUND_HALF_UP);
|
||||
//含税单价*(O售后入库单)实退数量=实退金额
|
||||
BigDecimal actualRefundAmount = unitPriceIncludingTax.multiply(new BigDecimal(requestQty)).setScale(4, BigDecimal.ROUND_HALF_UP);
|
||||
//出库对应的实退=含税单价(actualRefundAmount)*出库单实退数量
|
||||
String receivedQty = goodsRertunSonDetailsDto.getReceivedQty();
|
||||
Assert.notNull(receivedQty, "售后入库单号:{} 售后入库单明细行主键:{} 实收数量不能为空receivedQty!", header1.getCode(), goodsRertunSonDetailsDto.getId());
|
||||
BigDecimal actualRefundAmountBigDecimal = new BigDecimal(receivedQty).multiply(actualRefundAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
|
||||
//商家优惠:不处理!!!仅保存
|
||||
String merchantDiscounts = targetDetails.getMerchantDiscounts();
|
||||
//达人优惠
|
||||
String expertDiscounts = targetDetails.getExpertDiscounts();
|
||||
//支付优惠
|
||||
String payDiscounts = targetDetails.getPayDiscounts();
|
||||
//平台优惠
|
||||
String platformDiscounts = targetDetails.getPlatformDiscounts();
|
||||
|
||||
BigDecimal totalBigDecimal = new BigDecimal("0");//相加总和
|
||||
BigDecimal totalPayAmountBigDecimal = new BigDecimal("0");//实退金额
|
||||
BigDecimal expertDiscountsBigDecimal = new BigDecimal("0");//达人优惠
|
||||
BigDecimal payDiscountsBigDecimal = new BigDecimal("0");//支付优惠
|
||||
BigDecimal platformDiscountsBigDecimal = new BigDecimal("0");//平台优惠
|
||||
|
||||
if (actualRefundAmountBigDecimal != null) {
|
||||
totalPayAmountBigDecimal = actualRefundAmountBigDecimal;
|
||||
}
|
||||
if (expertDiscounts != null && !"".equals(expertDiscounts)) {
|
||||
expertDiscountsBigDecimal = new BigDecimal(expertDiscounts);
|
||||
}
|
||||
if (payDiscounts != null && !"".equals(payDiscounts)) {
|
||||
payDiscountsBigDecimal = new BigDecimal(payDiscounts);
|
||||
}
|
||||
if (platformDiscounts != null && !"".equals(platformDiscounts)) {
|
||||
platformDiscountsBigDecimal = new BigDecimal(platformDiscounts);
|
||||
}
|
||||
|
||||
//总和累加
|
||||
totalBigDecimal = totalBigDecimal.add(totalPayAmountBigDecimal);
|
||||
totalBigDecimal = totalBigDecimal.add(expertDiscountsBigDecimal);
|
||||
totalBigDecimal = totalBigDecimal.add(payDiscountsBigDecimal);
|
||||
totalBigDecimal = totalBigDecimal.add(platformDiscountsBigDecimal);
|
||||
return totalBigDecimal.stripTrailingZeros().toPlainString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 累加优惠金额,放在自定义项里最后传给U8C
|
||||
*
|
||||
* @param sonDetailsDtoList OFS售后入库单明细行List集合(按纬度汇总好的)
|
||||
* @author liuyang
|
||||
*/
|
||||
private void accumulatedDiscountAmountDef(List<GoodsRertunSonDetailsDto> sonDetailsDtoList) {
|
||||
Assert.notNull(sonDetailsDtoList, "sonDetailsDtoList不能为空");
|
||||
|
||||
if (sonDetailsDtoList.size() > 0) {
|
||||
BigDecimal platformDiscountsBigDecimal = new BigDecimal("0");//平台
|
||||
BigDecimal merchantDiscountsBigDecimal = new BigDecimal("0");//商家
|
||||
BigDecimal expertDiscountsBigDecimal = new BigDecimal("0");//达人
|
||||
BigDecimal payDiscountsBigDecimal = new BigDecimal("0");//支付
|
||||
for (int i = 0; i < sonDetailsDtoList.size(); i++) {
|
||||
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = sonDetailsDtoList.get(i);
|
||||
StockinOrderSearchResponse.StockinOrder.StockinH header = goodsRertunSonDetailsDto.getHeader();//O售后入库单表头
|
||||
RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = header.getRerturnGoodsOrderSearchData();//OFS售后订单
|
||||
|
||||
Assert.notNull(rerturnGoodsOrderSearchData, "O售后订单不能为空 O售后入库单编码:{}", header.getCode());
|
||||
List<RerturnGoodsOrderSearchDetails> details = rerturnGoodsOrderSearchData.getDetails();//OFS售后订单明细行
|
||||
if (details != null && details.size() > 0) {
|
||||
for (int j = 0; j < details.size(); j++) {
|
||||
RerturnGoodsOrderSearchDetails rerturnGoodsOrderSearchDetails = details.get(j);
|
||||
if (goodsRertunSonDetailsDto.getRefOrderDetailId() != null && rerturnGoodsOrderSearchDetails.getId() != null) {
|
||||
if (goodsRertunSonDetailsDto.getRefOrderDetailId().equals(rerturnGoodsOrderSearchDetails.getId())) {
|
||||
//累加优惠
|
||||
String platformDiscounts = rerturnGoodsOrderSearchDetails.getPlatformDiscounts();
|
||||
String merchantDiscounts = rerturnGoodsOrderSearchDetails.getMerchantDiscounts();
|
||||
String expertDiscounts = rerturnGoodsOrderSearchDetails.getExpertDiscounts();
|
||||
String payDiscounts = rerturnGoodsOrderSearchDetails.getPayDiscounts();
|
||||
|
||||
if (platformDiscounts == null || "".equals(platformDiscounts.trim())) {
|
||||
platformDiscounts = "0";
|
||||
}
|
||||
if (merchantDiscounts == null || "".equals(merchantDiscounts.trim())) {
|
||||
merchantDiscounts = "0";
|
||||
}
|
||||
if (expertDiscounts == null || "".equals(expertDiscounts.trim())) {
|
||||
expertDiscounts = "0";
|
||||
}
|
||||
if (payDiscounts == null || "".equals(payDiscounts.trim())) {
|
||||
payDiscounts = "0";
|
||||
}
|
||||
|
||||
platformDiscountsBigDecimal = platformDiscountsBigDecimal.add(new BigDecimal(platformDiscounts));
|
||||
merchantDiscountsBigDecimal = merchantDiscountsBigDecimal.add(new BigDecimal(merchantDiscounts));
|
||||
expertDiscountsBigDecimal = expertDiscountsBigDecimal.add(new BigDecimal(expertDiscounts));
|
||||
payDiscountsBigDecimal = payDiscountsBigDecimal.add(new BigDecimal(payDiscounts));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sonDetailsDtoList.get(0).setVdef4(platformDiscountsBigDecimal);
|
||||
sonDetailsDtoList.get(0).setVdef5(payDiscountsBigDecimal);
|
||||
sonDetailsDtoList.get(0).setVdef6(expertDiscountsBigDecimal);
|
||||
sonDetailsDtoList.get(0).setVdef7(merchantDiscountsBigDecimal);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -65,4 +65,13 @@ public class RerturnGoodsOrderSearchDetails {
|
|||
private BigDecimal shareTargetExpertDiscounts;
|
||||
//分摊支付优惠
|
||||
private BigDecimal shareTargetPayDiscounts;
|
||||
|
||||
//平台优惠
|
||||
private String platformDiscounts;
|
||||
//商家优惠
|
||||
private String merchantDiscounts;
|
||||
//达人优惠
|
||||
private String expertDiscounts;
|
||||
//支付优惠
|
||||
private String payDiscounts;
|
||||
}
|
Loading…
Reference in New Issue