## 加购满3赠3,满4不赠,满6贈6;

This commit is contained in:
cabbage 2025-07-31 15:13:45 +08:00
parent bd01d15284
commit 837ceb2129
8 changed files with 95 additions and 53 deletions

View File

@ -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<SaOrderItems> 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<SaOrderItems> getSaOrderItems(CuMember cuMember, SaOrderExt saOrder, OrderParam orderParam) {
// 当前国家
@ -212,7 +199,7 @@ public class SaOrderHandle {
// 获取汇率
CurrencyDTO currency = iCurrencyServiceApi.getCurrency(pkCountry).getData();
// 商品编号 + sku主键 + 数量
// 商品编号 + sku主键 + 数量处理赠品
List<BdWaresDetailExt> 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<Integer> specialPostageList = bdWaresSpecialPostageService.querySpecialPostagePkWares(pkCountry);
List<Integer> specialPostageList = iBdWaresSpecialPostageService.querySpecialPostagePkWares(pkCountry);
List<SaOrderItems> saOrderItemsList = new ArrayList<>();
// 邮费map
@ -425,12 +412,13 @@ public class SaOrderHandle {
// 查找所有商品
List<BdWaresDetailExt> bdWaresDetailExtList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(orderParam.getOrderItemsParams())) {
List<BdWaresDetailExt> waresDetailExtList = bdWaresDetailService.queryWaresDetailByCondition(orderParam.getSpecialArea(), orderParam.getTransType(), orderParam.getOrderItemsParams());
List<BdWaresDetailExt> waresDetailExtList = iBdWaresDetailService.queryWaresDetailByCondition(orderParam.getSpecialArea(), orderParam.getTransType(), orderParam.getOrderItemsParams());
setWaresRange(orderParam.getSpecialArea(), waresDetailExtList, cuMember, orderTypeExtend);
if (waresDetailExtList.size() > 0) {
bdWaresDetailExtList.addAll(waresDetailExtList);
}
}
// 活动赠品 赠送封装
List<BdWaresDetailExt> newWaresDetailExtList = iActivityService.generateActivityGiftWaresAchieve(orderParam.getSpecialArea(), orderParam.getPkSettleCountry(), bdWaresDetailExtList,
orderParam.getParent(), cuMember);
@ -478,7 +466,7 @@ public class SaOrderHandle {
if (specsSkuList.size() == 0) {
return;
}
List<BdWaresRange> bdWaresRangeList = bdWaresRangeService.querySkuWaresRangeByCondition(cuMember.getPkSettleCountry(), rangeType, level, specsSkuList);
List<BdWaresRange> 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<SaOrderItems> saOrderItemsList) {
if (ESpecialArea.REGISTER_AREA.getValue() == orderParam.getSpecialArea()
|| ESpecialArea.UPGRADE_AREA.getValue() == orderParam.getSpecialArea()) {
// key:商品IDvalue:购买数量
Map<Integer, Integer> tmpMap = new HashMap<>();
// 加赠订单明细
List<SaOrderItems> 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);
}
}
}
}
}

View File

@ -982,8 +982,9 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
saOrderExt.setOrderType(EOrderType.REPURCHASE_ORDER.getValue());
saOrderExt.setOrderTypeExtend(orderParam.getOrderTypeExtend());
}
// 封装订单明细 -- 处理邮费
// 封装订单明细 -- 处理邮费活动赠品
saOrderHandle.packSaOrderItems(cuMember, saOrderExt, orderParam);
// 第二次封装订单根据明细表计算订单主表金额业绩,处理明细仓库
// key为产品id
List<Integer> productIdList = new ArrayList<>();

View File

@ -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;

View File

@ -36,6 +36,7 @@
<result column="PK_PRODUCT_BAS" property="pkProductBas"/>
<result column="PK_UNIT" property="pkUnit"/>
<result column="SKU_CODE" property="skuCode"/>
<result column="is_maker_gift" property="isMakerGift"/>
<collection property="waresSpecsList" ofType="com.hzs.common.domain.sale.ext.WaresSpecsExt">
<result column="PK_SPECS_TYPE" property="pkSpecsType"/>
<result column="PK_SPECS" property="pkSpecs"/>
@ -45,8 +46,9 @@
<select id="queryWaresDetailByCondition" resultMap="BdWaresDetailExt">
<foreach collection="orderItemsParams" item="item" index="index" separator=" union all ">
select bd.pk_id,bs.pk_id pk_wares_specs_sku,bw.is_free_mail,be.pk_land_postage,
be.pk_air_postage,be.pk_ocean_postage,bw.pk_id pk_wares,be.is_maker_gift,be.pre_sale_status,
select bd.pk_id,bs.pk_id pk_wares_specs_sku,bw.is_free_mail,
be.pk_land_postage, be.pk_air_postage, be.pk_ocean_postage,
bw.pk_id pk_wares, be.is_maker_gift, be.pre_sale_status,
be.pk_special_currency,bw.wares_code, bw.wares_name, bd.is_gift is_gift,
bd.pk_product,bs.price,bs.achieve,bp.pk_supplier,bp.shipping_channel,bp.product_code,
bs.ass_achieve,b.specs_name,b.specs_name_id

View File

@ -88,7 +88,7 @@
<!-- 根据条件查询商品信息 -->
<select id="queryWaresByCondition" resultMap="BaseResultMap">
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,

View File

@ -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;
}

View File

@ -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;
}

View File

@ -181,4 +181,9 @@ public class BdWaresExt extends BdWares {
*/
private Integer pkSpecialCurrency;
/**
* 商品类型1=普通商品,2=188商品3=加购商品 -- EWaresType
*/
private Integer isMakerGift;
}