Browse Source

feat(order): 搭赠通案对接订单;

master
Yen 4 weeks ago
parent
commit
3dee6b2d07
  1. 1
      cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java
  2. 22
      cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/so/OmsGoodsPromotionQuery.java
  3. 18
      cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsGoodsPromotionVo.java
  4. 10
      cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java
  5. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSkuMapper.java
  6. 17
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/OmsPromotionGiftController.java
  7. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java
  8. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItem.java
  9. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderModifyParam.java
  10. 6
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/OmsPromotionGiftService.java
  11. 76
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsPromotionGiftServiceImpl.java
  12. 47
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderServiceImpl.java
  13. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java
  14. 21
      cms-modules/cms-system/src/main/resources/mapper/goods/GoodsSkuMapper.xml
  15. 6
      cms-modules/cms-system/src/main/resources/mapper/oms/OmsPromotionGiftItemMapper.xml
  16. 2
      cms-modules/cms-system/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml
  17. 10
      cms-modules/cms-system/src/test/java/com/qs/TestStringSub.java

1
cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java

@ -28,6 +28,7 @@ public class CodeGenUtil {
OmsOrder("OmsOrder"),
Verification("verification"),
VerificationBatch("verificationBatch"),
PromotionGift("PromotionGift"),
Policy("policy"),
Budget("Budget"),
BudgetChange("BudgetChange"),

22
cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/so/OmsGoodsPromotionQuery.java

@ -0,0 +1,22 @@
package com.qs.serve.modules.oms.entity.so;
import lombok.Data;
import java.util.List;
import java.util.Set;
/**
* @author YenHex
* @since 2025/6/20
*/
@Data
public class OmsGoodsPromotionQuery {
/**
* 客户ID
*/
private String customerId;
private Set<String> skuIds;
}

18
cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsGoodsPromotionVo.java

@ -0,0 +1,18 @@
package com.qs.serve.modules.oms.entity.vo;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2025/6/20
*/
@Data
public class OmsGoodsPromotionVo {
private String skuId;
private List<OmsPromotionGiftItemVo> promotions;
}

10
cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java

@ -4,6 +4,7 @@ import com.qs.serve.modules.oms.entity.OmsPromotionGiftGoods;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@ -52,4 +53,13 @@ public class OmsPromotionGiftItemVo {
List<OmsPromotionGiftGoods> goodsList;
/** 通案标题 */
private String giftTitle;
/** 通案编码 */
private String giftCode;
/** 搭赠说明 */
private String explainText;
}

2
cms-modules/cms-system/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSkuMapper.java

@ -28,6 +28,8 @@ public interface GoodsSkuMapper extends BaseMapper<GoodsSku> {
List<String> getBelongStringList();
GoodSkuVo getSkuVoById(@Param("skuId") String skuId);
/**
* 查询vo
* @param goodsSku

17
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/OmsPromotionGiftController.java

@ -10,6 +10,9 @@ import com.qs.serve.framework.base.model.PageVo;
import com.qs.serve.framework.base.model.R;
import com.qs.serve.modules.oms.entity.OmsPromotionGift;
import com.qs.serve.modules.oms.entity.bo.OmsPromotionGiftBo;
import com.qs.serve.modules.oms.entity.so.OmsGoodsPromotionQuery;
import com.qs.serve.modules.oms.entity.vo.OmsGoodsPromotionVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftItemVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftVo;
import com.qs.serve.modules.oms.service.OmsPromotionGiftOptionsService;
import com.qs.serve.modules.oms.service.OmsPromotionGiftService;
@ -34,14 +37,24 @@ public class OmsPromotionGiftController {
private OmsPromotionGiftService omsPromotionGiftService;
private OmsPromotionGiftOptionsService omsPromotionGiftOptionsService;
/**
* 获取商品的搭赠方案
* @param query
* @return
*/
@PostMapping("/getGoodsPromotions")
public R<List<OmsGoodsPromotionVo>> getGoodsPromotions(@RequestBody OmsGoodsPromotionQuery query){
return R.ok(omsPromotionGiftService.getGoodsPromotions(query));
}
/**
* 获取客户所有搭赠方案
* @param customerId
* @return
*/
@GetMapping("/getCustomerPgList/{customerId}")
public R<?> getCustomerPgList(@PathVariable("customerId") String customerId){
return R.ok(omsPromotionGiftService.getItemList(customerId));
public R<List<OmsPromotionGiftItemVo>> getCustomerPgList(@PathVariable("customerId") String customerId){
return R.ok(omsPromotionGiftService.getCustomerItemList(customerId));
}
/**

2
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java

@ -41,7 +41,7 @@ public class OmsSaleOrder implements Serializable {
@TableField(condition = SqlCondition.LIKE)
private String orderSn;
/** 订单类型:0->普通订单;1->赠品;2->试吃品;3->临期品 */
/** 订单类型:0->普通订单;1->赠品;2->试吃品;3->临期品;4->包材销售 */
private Integer orderType;
private String orderSource;

3
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItem.java

@ -37,6 +37,9 @@ public class OmsSaleOrderItem implements Serializable {
@Length(max = 32,message = "订单sn长度不能超过32字")
private String orderSn;
/** 搭赠ItemId */
private Long giftItemId;
/** 商品id */
private Long spuId;

3
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderModifyParam.java

@ -83,6 +83,9 @@ public class OmsOrderModifyParam {
/** SkuId(H5) */
private Long skuId;
/** 搭赠ItemId */
private Long giftItemId;
/** 数量 */
private Integer quantity;

6
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/OmsPromotionGiftService.java

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.oms.entity.OmsPromotionGift;
import com.qs.serve.modules.oms.entity.OmsPromotionGiftItem;
import com.qs.serve.modules.oms.entity.bo.OmsPromotionGiftBo;
import com.qs.serve.modules.oms.entity.so.OmsGoodsPromotionQuery;
import com.qs.serve.modules.oms.entity.vo.OmsGoodsPromotionVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftItemVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftVo;
@ -16,7 +18,9 @@ import java.util.List;
*/
public interface OmsPromotionGiftService extends IService<OmsPromotionGift> {
List<OmsPromotionGiftItemVo> getItemList(String id);
List<OmsGoodsPromotionVo> getGoodsPromotions(OmsGoodsPromotionQuery query);
List<OmsPromotionGiftItemVo> getCustomerItemList(String id);
OmsPromotionGiftVo getDetailVo(String id);

76
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsPromotionGiftServiceImpl.java

@ -9,15 +9,20 @@ import com.qs.serve.common.consts.CommonValue;
import com.qs.serve.common.exception.Assert;
import com.qs.serve.common.utils.CopierUtil;
import com.qs.serve.framework.base.util.CollectionUtil;
import com.qs.serve.framework.redis.utils.CodeGenUtil;
import com.qs.serve.modules.bms.entity.BmsSubject;
import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.mapper.BmsSubjectMapper;
import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.goods.entity.dto.GoodsTargetInfo;
import com.qs.serve.modules.goods.entity.dto.TbsCenterDto;
import com.qs.serve.modules.goods.entity.vo.GoodSkuVo;
import com.qs.serve.modules.goods.mapper.GoodsSkuMapper;
import com.qs.serve.modules.goods.service.GoodsApplicationService;
import com.qs.serve.modules.oms.entity.*;
import com.qs.serve.modules.oms.entity.bo.*;
import com.qs.serve.modules.oms.entity.so.OmsGoodsPromotionQuery;
import com.qs.serve.modules.oms.entity.vo.OmsGoodsPromotionVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftItemVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftSubjectVo;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftVo;
@ -36,10 +41,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -64,9 +66,64 @@ public class OmsPromotionGiftServiceImpl extends ServiceImpl<OmsPromotionGiftMap
private OmsPromotionGiftScopeMapper omsPromotionGiftScopeMapper;
private OmsPromotionGiftItemMapper omsPromotionGiftItemMapper;
private OmsPromotionGiftGoodsMapper omsPromotionGiftGoodsMapper;
private GoodsSkuMapper goodsSkuMapper;
@Override
public List<OmsPromotionGiftItemVo> getItemList(String id) {
public List<OmsGoodsPromotionVo> getGoodsPromotions(OmsGoodsPromotionQuery query) {
// 用户可使用的搭赠
List<OmsPromotionGiftItemVo> customerItemList = this.getCustomerItemList(query.getCustomerId());
// key:skuId value:itemList
Map<String,List<OmsPromotionGiftItemVo>> skuIdGetItemListMap = new HashMap<>();
for (String skuId : query.getSkuIds()) {
GoodSkuVo skuVo = goodsSkuMapper.getSkuVoById(skuId);
for (OmsPromotionGiftItemVo itemVo : customerItemList) {
if (itemVo.getGoodsType().equals("sku")){
if (itemVo.getGoodsId().equals(skuVo.getId())){
addItemToSkuMap(skuIdGetItemListMap, skuId, itemVo);
}
}else if (itemVo.getGoodsType().equals("spu")){
if (itemVo.getGoodsId().equals(skuVo.getSpuId())){
addItemToSkuMap(skuIdGetItemListMap, skuId, itemVo);
}
}else if (itemVo.getGoodsType().equals("series")){
if (itemVo.getGoodsCode().equals(skuVo.getSeriesCode())){
addItemToSkuMap(skuIdGetItemListMap, skuId, itemVo);
}
}else if (itemVo.getGoodsType().equals("category")){
if (itemVo.getGoodsCode().equals(skuVo.getCategoryCode())){
addItemToSkuMap(skuIdGetItemListMap, skuId, itemVo);
}
}else if (itemVo.getGoodsType().equals("brand")){
if (itemVo.getGoodsCode().equals(skuVo.getBrandCode())){
addItemToSkuMap(skuIdGetItemListMap, skuId, itemVo);
}
}
}
}
List<OmsGoodsPromotionVo> resultList = new ArrayList<>();
for (String skuId : skuIdGetItemListMap.keySet()) {
OmsGoodsPromotionVo promotionVo = new OmsGoodsPromotionVo();
promotionVo.setSkuId(skuId);
promotionVo.setPromotions(skuIdGetItemListMap.get(skuId));
resultList.add(promotionVo);
}
return resultList;
}
private void addItemToSkuMap(final Map<String, List<OmsPromotionGiftItemVo>> skuIdGetItemListMap,
String skuId,
OmsPromotionGiftItemVo itemVo) {
List<OmsPromotionGiftItemVo> list = skuIdGetItemListMap.get(skuId);
if (list == null){
list = new ArrayList<>();
}
list.add(itemVo);
skuIdGetItemListMap.put(skuId,list);
}
@Override
public List<OmsPromotionGiftItemVo> getCustomerItemList(String id) {
BmsSupplier supplier = bmsSupplierService.getById(id);
List<String> bizIds = supplier.listBizRegionIds();
List<String> saleIds = supplier.listSaleRegionIds();
@ -76,16 +133,15 @@ public class OmsPromotionGiftServiceImpl extends ServiceImpl<OmsPromotionGiftMap
if (CollUtil.isEmpty(itemList)){
return new ArrayList<>();
}
Set<Long> giftItemIds = itemList.stream().map(OmsPromotionGiftItemVo::getId).collect(Collectors.toSet());
QueryWrapper listByGiftIdQw = new QueryWrapper();
listByGiftIdQw.eq("gift_id",id);
listByGiftIdQw.in("gift_item_id",giftItemIds);
List<OmsPromotionGiftGoods> goodsList = omsPromotionGiftGoodsMapper.selectList(listByGiftIdQw);
Map<Long,List<OmsPromotionGiftGoods>> goodsMap = goodsList.stream()
.collect(Collectors.groupingBy(OmsPromotionGiftGoods::getGiftItemId));
for (OmsPromotionGiftItemVo item : itemList) {
item.setGoodsList(goodsMap.get(item
.getId()));
item.setGoodsList(goodsMap.get(item.getId()));
}
return itemList;
}
@ -165,7 +221,7 @@ public class OmsPromotionGiftServiceImpl extends ServiceImpl<OmsPromotionGiftMap
OmsPromotionGift gift = CopierUtil.copy(giftBo,new OmsPromotionGift());
if (!isUpdate){
gift.setGiftCode("DEV"+IdUtil.getSnowflake().nextIdStr());
gift.setGiftCode("PG"+ CodeGenUtil.generate(CodeGenUtil.SourceKey.PromotionGift));
gift.setUserId(sysUser.getId());
gift.setUserCode(sysUser.getCode());
gift.setUserName(sysUser.getName());

47
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderServiceImpl.java

@ -38,6 +38,7 @@ import com.qs.serve.modules.oms.entity.dto.OmsSaleOrderChange;
import com.qs.serve.modules.oms.entity.dto.ShoppingCartsCheckResult;
import com.qs.serve.modules.oms.entity.vo.OmsConfirmOrderResult;
import com.qs.serve.modules.oms.entity.vo.OmsPlanResult;
import com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftItemVo;
import com.qs.serve.modules.oms.entity.vo.OmsSpuAssesInfo;
import com.qs.serve.modules.oms.mapper.OmsSaleOrderMapper;
import com.qs.serve.modules.oms.mapper.OmsSeaTankMapper;
@ -63,6 +64,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
@ -81,6 +83,8 @@ import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.*;
@AllArgsConstructor
public class OmsSaleOrderServiceImpl extends ServiceImpl<OmsSaleOrderMapper, OmsSaleOrder> implements OmsSaleOrderService {
private OmsPromotionGiftService omsPromotionGiftService;
private GoodsSkuMapper goodsSkuMapper;
private GoodsSkuService goodsSkuService;
private GoodsSpuService goodsSpuService;
@ -1412,6 +1416,49 @@ public class OmsSaleOrderServiceImpl extends ServiceImpl<OmsSaleOrderMapper, Oms
if (bmsRegion == null) {
Assert.throwEx("客户档案[" + supplier.getCode() + "]缺失销售区域数据,请联系管理员");
}
// 校验订单的搭赠方案,并生成赠品列表
Map<Long,List<OmsSaleOrderItem>> itemMap = orderItemList.stream().filter(a->a.getGiftItemId() != null)
.collect(Collectors.groupingBy(OmsSaleOrderItem::getGiftItemId));
if (CollUtil.isNotEmpty(itemMap.keySet())){
List<OmsPromotionGiftItemVo> giftItemVos = omsPromotionGiftService.getCustomerItemList(omsOrder.getSupplierId()+"");
for (Long key : itemMap.keySet()) {
// 同搭赠案明细分组
List<OmsSaleOrderItem> items = itemMap.get(key);
// 命中的搭赠案明细
OmsPromotionGiftItemVo currentItem = null;
for (OmsPromotionGiftItemVo itemVo : giftItemVos) {
if (itemVo.getId().equals(key)){
currentItem = itemVo;
}
}
if (currentItem == null){
Assert.throwEx("没有找到匹配的搭赠案明细:"+items.get(0).getSpuTitle());
}
// 满足数量
int meetQty = 0;
// 搭赠数量
int giftQty = 0;
for (OmsSaleOrderItem item : items) {
meetQty = item.getQuantity() + meetQty;
}
if (meetQty >= currentItem.getMinPurchaseQty()){
//giftQty = meetQty / currentItem.getMeetQty() * currentItem.getGiftQty();
giftQty = new BigDecimal(meetQty)
.multiply(new BigDecimal(currentItem.getGiftQty()))
.divide(new BigDecimal(currentItem.getMeetQty()),0, RoundingMode.HALF_UP).intValue();
}else {
Assert.throwEx("未能满足起订数量,不能选中:"+currentItem.getGiftTitle());
}
// // 加载默认赠送的商品
// if (CollUtil.isNotEmpty(currentItem.getGoodsList())){}
// 生成搭赠订单
}
}
//更新最新的用户特殊价格
this.updateCusPrice(omsOrder.getSupplierCode(), orderItemList);

3
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java

@ -221,6 +221,9 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService
Map<String,List<SysPostUser>> postMap = postUserList.stream().collect(Collectors.groupingBy(SysPostUser::getUserId));
List<CtpAffairVo> result = new ArrayList<>();
for (CtpAffair ctpAffair : ctpAffairs) {
if (StringUtils.isNotEmpty(ctpAffair.getComment())&&ctpAffair.getComment().contains("同意说明:")){
ctpAffair.setComment(ctpAffair.getComment().replace("同意说明:",""));
}
CtpAffairVo ctpAffairVo = new CtpAffairVo();
ctpAffairVo.setAffairInfo(ctpAffair);
//2已发

21
cms-modules/cms-system/src/main/resources/mapper/goods/GoodsSkuMapper.xml

@ -140,6 +140,27 @@
<result property="spuCode" column="spu_code"/>
</resultMap>
<select id="getSkuVoById" resultType="com.qs.serve.modules.goods.entity.vo.GoodSkuVo" resultMap="skuVoResultMap">
SELECT
`goods_spu`.`name`,
`goods_spu`.`spu_code`,
`goods_spu`.`shelf`,
cate1.`name` as brandName,
cate2.`name` as categoryName,
cate3.`name` as seriesName,
cate1.`code` as brandCode,
cate2.`code` as categoryCode,
cate3.`code` as seriesCode,
<include refid="goodsSkuSql"/>
FROM `goods_sku` `goods_sku`
LEFT JOIN `goods_spu` ON `goods_sku`.`spu_id` = `goods_spu`.id
left join goods_category cate1 on goods_spu.category_first = cate1.id
left join goods_category cate2 on goods_spu.category_second = cate2.id
left join goods_category cate3 on goods_spu.category_third = cate3.id
where `goods_sku`.`del_flag` = 0 and `goods_spu`.`del_flag` = 0 and `goods_sku`.`id` = #{skuId}
</select>
<select id="selectSkuVo" parameterType="com.qs.serve.modules.goods.entity.GoodsSku" resultMap="skuVoResultMap">
SELECT
`goods_spu`.`name`,

6
cms-modules/cms-system/src/main/resources/mapper/oms/OmsPromotionGiftItemMapper.xml

@ -28,7 +28,11 @@
oms_promotion_gift_item.`goods_flag` </sql>
<select id="listCustomerItems" resultType="com.qs.serve.modules.oms.entity.vo.OmsPromotionGiftItemVo">
select t1.*
select t1.*,
t2.gift_title,
t2.gift_code,
t2.explain_text
from oms_promotion_gift_item t1
left join oms_promotion_gift t2
on t1.gift_id = t2.id

2
cms-modules/cms-system/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml

@ -60,7 +60,7 @@
AND tsib.end_date &gt;= #{query.actEndDate}
AND ( tb.condition_flag =0 or (
tbc.del_flag = 0 AND
tbc.del_flag = 0 AND tbc.stop_match_flag = 0 and
<foreach collection="query.queryGoodsGroups" item="item" index="i" open="(" close=")" separator="or">(
tbc.target_type=#{item.targetType} and tbc.target_id = #{item.targetId} )
</foreach>

10
cms-modules/cms-system/src/test/java/com/qs/TestStringSub.java

@ -1,5 +1,7 @@
package com.qs;
import cn.hutool.core.util.IdUtil;
/**
* @author YenHex
* @since 2025/5/28
@ -7,9 +9,11 @@ package com.qs;
public class TestStringSub {
public static void main(String[] args) {
String str = "1234567890";
str = str.substring(0,5)+"...";
System.out.println(str);
Long num1 = IdUtil.getSnowflakeNextId();
Long num2 = 1932974066041286656L;
System.out.println((num1-num2+"").length());
}
}

Loading…
Cancel
Save