diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java index ea27d31d..cebdb7e6 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java @@ -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 diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java index 9deeb654..12b40714 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java @@ -1110,7 +1110,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity { List headerDetailsDtos = queryBatchOfsOrder(returnGoodHeaderDetailsDataDtoList1); findOfsOrder(headerDetailsDtos, returnGoodHeaderDetailsDataDtoList1); //计算OFS销售订单优惠金额分摊到明细行 - ofsOrderAfterSalesAmountAllocationUtil.batchTocSalesAmountAllocation(rerturnGoodsOrderSearchData); +// ofsOrderAfterSalesAmountAllocationUtil.batchTocSalesAmountAllocation(rerturnGoodsOrderSearchData); //初始化公司档案对照关系 Map 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 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 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 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); + } + } } \ No newline at end of file diff --git a/service/src/main/java/com/hzya/frame/ttxofs/dto/returngoodordersearch/RerturnGoodsOrderSearchDetails.java b/service/src/main/java/com/hzya/frame/ttxofs/dto/returngoodordersearch/RerturnGoodsOrderSearchDetails.java index 3964695c..59d62934 100755 --- a/service/src/main/java/com/hzya/frame/ttxofs/dto/returngoodordersearch/RerturnGoodsOrderSearchDetails.java +++ b/service/src/main/java/com/hzya/frame/ttxofs/dto/returngoodordersearch/RerturnGoodsOrderSearchDetails.java @@ -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; } \ No newline at end of file