## 加购满3赠3,满4不赠,满6贈6;
This commit is contained in:
parent
bd01d15284
commit
837ceb2129
|
@ -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:商品ID,value:购买数量
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<>();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
@ -181,4 +181,9 @@ public class BdWaresExt extends BdWares {
|
|||
*/
|
||||
private Integer pkSpecialCurrency;
|
||||
|
||||
/**
|
||||
* 商品类型(1=普通商品,2=188商品,3=加购商品) -- EWaresType
|
||||
*/
|
||||
private Integer isMakerGift;
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue