From 837ceb2129334559ce54ecf02017554c514407ba Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Thu, 31 Jul 2025 15:13:45 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E5=8A=A0=E8=B4=AD=E6=BB=A13=E8=B5=A03?= =?UTF-8?q?=EF=BC=8C=E6=BB=A14=E4=B8=8D=E8=B5=A0=EF=BC=8C=E6=BB=A16?= =?UTF-8?q?=E8=B4=886=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/service/impl/SaOrderHandle.java | 104 ++++++++++++------ .../service/impl/SaOrderServiceImpl.java | 3 +- .../com/hzs/sale/shopping/vo/WaresItemVo.java | 16 --- .../mapper/sale/wares/BdWaresDetailMapper.xml | 6 +- .../mapper/sale/wares/BdWaresMapper.xml | 2 +- .../core/constant/MagicNumberConstants.java | 5 + .../domain/sale/ext/BdWaresDetailExt.java | 7 +- .../common/domain/sale/ext/BdWaresExt.java | 5 + 8 files changed, 95 insertions(+), 53 deletions(-) diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderHandle.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderHandle.java index e0f56a9b..0be1ee19 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderHandle.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderHandle.java @@ -1,5 +1,6 @@ package com.hzs.sale.order.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import com.hzs.activity.base.service.IActivityService; import com.hzs.common.core.constant.*; @@ -83,35 +84,18 @@ public class SaOrderHandle { private IBdPostageAreaService iBdPostageAreaService; @Autowired private IBdPostageFailAreaService iBdPostageFailAreaService; - - private IBdProductService bdProductService; - private IBdWaresDetailService bdWaresDetailService; - private IBdWaresRangeService bdWaresRangeService; - private IBdWaresSpecialPostageService bdWaresSpecialPostageService; + @Autowired + private IBdProductService iBdProductService; + @Autowired + private IBdWaresDetailService iBdWaresDetailService; + @Autowired + private IBdWaresRangeService iBdWaresRangeService; + @Autowired + private IBdWaresSpecialPostageService iBdWaresSpecialPostageService; @Autowired private RedisService redisService; - @Autowired - public void setBdWaresRangeService(IBdWaresRangeService bdWaresRangeService) { - this.bdWaresRangeService = bdWaresRangeService; - } - - @Autowired - public void setBdProductService(IBdProductService bdProductService) { - this.bdProductService = bdProductService; - } - - @Autowired - public void setBdWaresDetailService(IBdWaresDetailService bdWaresDetailService) { - this.bdWaresDetailService = bdWaresDetailService; - } - - @Autowired - public void setBdWaresSpecialPostageService(IBdWaresSpecialPostageService bdWaresSpecialPostageService) { - this.bdWaresSpecialPostageService = bdWaresSpecialPostageService; - } - /** * @param orderParam 需要保存的会员基本信息 * @param centerMember 报单中心会员编号 @@ -182,6 +166,8 @@ public class SaOrderHandle { List saOrderItemsList; try { saOrderItemsList = getSaOrderItems(cuMember, saOrder, orderParam); + // 处理加购赠送 + this.handleAddPurchaseGift(orderParam, saOrderItemsList); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); @@ -201,10 +187,11 @@ public class SaOrderHandle { } /** + * 计算邮费 + * * @param cuMember 会员 * @param saOrder 主表 * @param orderParam 参数 - * 计算邮费 */ private List getSaOrderItems(CuMember cuMember, SaOrderExt saOrder, OrderParam orderParam) { // 当前国家 @@ -212,7 +199,7 @@ public class SaOrderHandle { // 获取汇率 CurrencyDTO currency = iCurrencyServiceApi.getCurrency(pkCountry).getData(); - // 商品编号 + sku主键 + 数量 + // 商品编号 + sku主键 + 数量(处理赠品) List bdWaresDetailExtList = getWaresDetailExtList(orderParam, cuMember, null != saOrder ? saOrder.getOrderTypeExtend() : null); if (CollectionUtil.isEmpty(bdWaresDetailExtList)) { throw new RuntimeException("没有找到商品,请刷新重试!"); @@ -221,7 +208,7 @@ public class SaOrderHandle { // 包邮邮费合计 BigDecimal resultPostage = BigDecimal.ZERO; // 特殊邮费模板 -- 2023.10.27 指定特殊邮费模板不走写死的300包邮逻辑 - List specialPostageList = bdWaresSpecialPostageService.querySpecialPostagePkWares(pkCountry); + List specialPostageList = iBdWaresSpecialPostageService.querySpecialPostagePkWares(pkCountry); List saOrderItemsList = new ArrayList<>(); // 邮费map @@ -425,12 +412,13 @@ public class SaOrderHandle { // 查找所有商品 List bdWaresDetailExtList = new ArrayList<>(); if (CollectionUtil.isNotEmpty(orderParam.getOrderItemsParams())) { - List waresDetailExtList = bdWaresDetailService.queryWaresDetailByCondition(orderParam.getSpecialArea(), orderParam.getTransType(), orderParam.getOrderItemsParams()); + List waresDetailExtList = iBdWaresDetailService.queryWaresDetailByCondition(orderParam.getSpecialArea(), orderParam.getTransType(), orderParam.getOrderItemsParams()); setWaresRange(orderParam.getSpecialArea(), waresDetailExtList, cuMember, orderTypeExtend); if (waresDetailExtList.size() > 0) { bdWaresDetailExtList.addAll(waresDetailExtList); } } + // 活动赠品 赠送封装 List newWaresDetailExtList = iActivityService.generateActivityGiftWaresAchieve(orderParam.getSpecialArea(), orderParam.getPkSettleCountry(), bdWaresDetailExtList, orderParam.getParent(), cuMember); @@ -478,7 +466,7 @@ public class SaOrderHandle { if (specsSkuList.size() == 0) { return; } - List bdWaresRangeList = bdWaresRangeService.querySkuWaresRangeByCondition(cuMember.getPkSettleCountry(), rangeType, level, specsSkuList); + List bdWaresRangeList = iBdWaresRangeService.querySkuWaresRangeByCondition(cuMember.getPkSettleCountry(), rangeType, level, specsSkuList); bdWaresRangeList.forEach(bdWaresRange -> { String key = bdWaresRange.getPkWaresDetail().toString() + bdWaresRange.getPkWaresSpecsSku(); if (waresDetailExtMap.containsKey(key)) { @@ -514,7 +502,7 @@ public class SaOrderHandle { // 计算商品价格 for (SaOrderItems saOrderItems : postageOrderItemsList) { // 根据产品获得产品 - BdProduct product = bdProductService.getProduct(saOrderItems.getPkProduct()); + BdProduct product = iBdProductService.getProduct(saOrderItems.getPkProduct()); amount = amount.add(saOrderItems.getPrice().multiply(BigDecimal.valueOf(saOrderItems.getQuantity()))); weight = weight.add(product.getPostageWeight().multiply(BigDecimal.valueOf(saOrderItems.getQuantity()))); @@ -661,6 +649,7 @@ public class SaOrderHandle { .pkSupplier(waresDetailExt.getPkSupplier()) .skuCode(CommonUtil.createSkuCode(waresDetailExt.getProductCode(), waresDetailExt.getSpecsNameId())) .wareCode(waresDetailExt.getWaresCode()) + .isMakerGift(waresDetailExt.getIsMakerGift()) .build(); if (saOrderItems.getIsGift() != null && EYesNo.YES.getIntValue() == saOrderItems.getIsGift()) { saOrderItems.setPrice(BigDecimal.ZERO); @@ -876,4 +865,57 @@ public class SaOrderHandle { return iGradeServiceApi.queryGradeConfigByCondition(pkCountry, pkGrade).getData(); } + /** + * 处理加购赠送 + * + * @param orderParam + * @param saOrderItemsList + */ + private void handleAddPurchaseGift(OrderParam orderParam, List saOrderItemsList) { + if (ESpecialArea.REGISTER_AREA.getValue() == orderParam.getSpecialArea() + || ESpecialArea.UPGRADE_AREA.getValue() == orderParam.getSpecialArea()) { + // key:商品ID,value:购买数量 + Map tmpMap = new HashMap<>(); + // 加赠订单明细 + List tmpItemsList = new ArrayList<>(); + // 赠品的商品ID,如果出现多个加购,只赠送第一个商品 + Integer tmpPkWares = null; + for (SaOrderItems saOrderItems : saOrderItemsList) { + if (EWaresType.ADD_PURCHASE.getValue().equals(saOrderItems.getIsMakerGift())) { + tmpMap.put(saOrderItems.getPkWares(), saOrderItems.getWaresQuantity()); + + if (null == tmpPkWares + || saOrderItems.getPkWares().equals(tmpPkWares)) { + tmpPkWares = saOrderItems.getPkWares(); + tmpItemsList.add(BeanUtil.copyProperties(saOrderItems, SaOrderItems.class)); + } + } + } + if (tmpMap.size() > 0) { + // 加购商品数量 + Integer addPurchase = 0; + // 赠品的商品ID,如果出现多个加购,只赠送第一个商品 + for (Integer key : tmpMap.keySet()) { + addPurchase += tmpMap.get(key); + } + // 加购了几个3 + int tmpInt = addPurchase / MagicNumberConstants.ADD_PURCHASE_GIFT; + if (0 != tmpInt) { + // 赠送数量 + int tmpWaresQuantity = MagicNumberConstants.ADD_PURCHASE_GIFT * tmpInt; + for (SaOrderItems saOrderItems : tmpItemsList) { + saOrderItems.setIsGift(EYesNo.YES.getIntValue()); + saOrderItems.setPrice(BigDecimal.ZERO); + saOrderItems.setAchievement(BigDecimal.ZERO); + saOrderItems.setAssAchievement(BigDecimal.ZERO); + saOrderItems.setQuantity(saOrderItems.getQuantity() / saOrderItems.getWaresQuantity() * tmpWaresQuantity); + saOrderItems.setWaresQuantity(tmpWaresQuantity); + } + // 加赠追加到赠品里面 + saOrderItemsList.addAll(tmpItemsList); + } + } + } + } + } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java index c2f64a17..d8ff677b 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java @@ -982,8 +982,9 @@ public class SaOrderServiceImpl extends ServiceImpl impl saOrderExt.setOrderType(EOrderType.REPURCHASE_ORDER.getValue()); saOrderExt.setOrderTypeExtend(orderParam.getOrderTypeExtend()); } - // 封装订单明细 -- 处理邮费 + // 封装订单明细 -- 处理邮费、活动赠品 saOrderHandle.packSaOrderItems(cuMember, saOrderExt, orderParam); + // 第二次封装订单,根据明细表计算订单主表金额、业绩,处理明细仓库 // key为产品id List productIdList = new ArrayList<>(); diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/shopping/vo/WaresItemVo.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/shopping/vo/WaresItemVo.java index 8fb34d72..3644ab1c 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/shopping/vo/WaresItemVo.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/shopping/vo/WaresItemVo.java @@ -1,11 +1,4 @@ package com.hzs.sale.shopping.vo; -/** - * @Description: - * @Author: yuhui - * @Time: 2023/3/20 14:03 - * @Classname: WaresItemVo - * @PackageName: com.hzs.sale.shopping.vo - */ import com.hzs.common.core.annotation.BigDecimalFormat; import lombok.AllArgsConstructor; @@ -16,14 +9,6 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.List; -/** - *@BelongsProject: hzs_cloud - *@BelongsPackage: com.hzs.sale.shopping.vo - *@Author: yh - *@CreateTime: 2023-03-20 14:03 - *@Description: TODO - *@Version: 1.0 - */ @Data @Builder @AllArgsConstructor @@ -64,7 +49,6 @@ public class WaresItemVo { private BigDecimal achieve; /** * bv - * */ @BigDecimalFormat private BigDecimal assAchieve; diff --git a/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresDetailMapper.xml b/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresDetailMapper.xml index 8c009c31..4fd04a80 100644 --- a/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresDetailMapper.xml +++ b/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresDetailMapper.xml @@ -36,6 +36,7 @@ + @@ -45,8 +46,9 @@ select bw.PK_COUNTRY, bw.PK_ID, be.pk_id PK_WARES_EXTEND, - be.IS_MAKER_GIFT, bw.WARES_CODE, bw.WARES_NAME, PK_TRANSACTION, + be.is_maker_gift, bw.WARES_CODE, bw.WARES_NAME, PK_TRANSACTION, PK_AREA_CLASSIFY, COVER1, COVER2, COVER3, COVER4, COVER5, COVER6, DETAILS_TYPE, bw.WARES_PRICE, bw.WARES_ACHIEVE, diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/MagicNumberConstants.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/MagicNumberConstants.java index 9ae17a6a..3e4c7952 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/MagicNumberConstants.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/MagicNumberConstants.java @@ -109,4 +109,9 @@ public class MagicNumberConstants { */ public static final BigDecimal BONUS_POINT_20 = new BigDecimal("0.05"); + /** + * 加购赠送基数 + */ + public static final Integer ADD_PURCHASE_GIFT = 3; + } diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresDetailExt.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresDetailExt.java index 59fe3c82..9a569e8b 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresDetailExt.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresDetailExt.java @@ -1,6 +1,5 @@ package com.hzs.common.domain.sale.ext; -import com.baomidou.mybatisplus.annotation.TableField; import com.hzs.common.domain.sale.wares.BdWaresDetail; import lombok.*; @@ -124,7 +123,6 @@ public class BdWaresDetailExt extends BdWaresDetail { */ private Integer pkProductBas; - /** * 单位 */ @@ -132,4 +130,9 @@ public class BdWaresDetailExt extends BdWaresDetail { private String skuCode; + /** + * 商品类型(1=普通商品,2=188商品,3=加购商品) -- EWaresType + */ + private Integer isMakerGift; + } diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresExt.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresExt.java index e6be0d6d..2225c310 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresExt.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/ext/BdWaresExt.java @@ -181,4 +181,9 @@ public class BdWaresExt extends BdWares { */ private Integer pkSpecialCurrency; + /** + * 商品类型(1=普通商品,2=188商品,3=加购商品) -- EWaresType + */ + private Integer isMakerGift; + }