diff --git a/cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java b/cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java index d0c1a99..67472ee 100644 --- a/cms-framework/cms-framework-redis/src/main/java/com/qs/serve/framework/redis/utils/CodeGenUtil.java +++ b/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"), diff --git a/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/so/OmsGoodsPromotionQuery.java b/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/so/OmsGoodsPromotionQuery.java new file mode 100644 index 0000000..7d568c9 --- /dev/null +++ b/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 skuIds; + +} diff --git a/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsGoodsPromotionVo.java b/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsGoodsPromotionVo.java new file mode 100644 index 0000000..f619f1f --- /dev/null +++ b/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 promotions; + +} diff --git a/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java b/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java index e4459ab..f6b01dd 100644 --- a/cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java +++ b/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 goodsList; + /** 通案标题 */ + private String giftTitle; + + /** 通案编码 */ + private String giftCode; + + /** 搭赠说明 */ + private String explainText; + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSkuMapper.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSkuMapper.java index b1d968d..8a7c82f 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSkuMapper.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSkuMapper.java @@ -28,6 +28,8 @@ public interface GoodsSkuMapper extends BaseMapper { List getBelongStringList(); + GoodSkuVo getSkuVoById(@Param("skuId") String skuId); + /** * 查询vo * @param goodsSku diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/OmsPromotionGiftController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/OmsPromotionGiftController.java index afc8f1b..6987bc3 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/OmsPromotionGiftController.java +++ b/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> 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> getCustomerPgList(@PathVariable("customerId") String customerId){ + return R.ok(omsPromotionGiftService.getCustomerItemList(customerId)); } /** diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java index b826d8c..f168517 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java +++ b/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; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItem.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItem.java index 2e7aeff..388a5be 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItem.java +++ b/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; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderModifyParam.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderModifyParam.java index a998c5a..bbeabc5 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderModifyParam.java +++ b/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; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/OmsPromotionGiftService.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/OmsPromotionGiftService.java index 89adb1b..e520142 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/OmsPromotionGiftService.java +++ b/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 { - List getItemList(String id); + List getGoodsPromotions(OmsGoodsPromotionQuery query); + + List getCustomerItemList(String id); OmsPromotionGiftVo getDetailVo(String id); diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsPromotionGiftServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsPromotionGiftServiceImpl.java index bd4c75c..aa89f50 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsPromotionGiftServiceImpl.java +++ b/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 getItemList(String id) { + public List getGoodsPromotions(OmsGoodsPromotionQuery query) { + // 用户可使用的搭赠 + List customerItemList = this.getCustomerItemList(query.getCustomerId()); + + // key:skuId value:itemList + Map> 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 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> skuIdGetItemListMap, + String skuId, + OmsPromotionGiftItemVo itemVo) { + List list = skuIdGetItemListMap.get(skuId); + if (list == null){ + list = new ArrayList<>(); + } + list.add(itemVo); + skuIdGetItemListMap.put(skuId,list); + } + + @Override + public List getCustomerItemList(String id) { BmsSupplier supplier = bmsSupplierService.getById(id); List bizIds = supplier.listBizRegionIds(); List saleIds = supplier.listSaleRegionIds(); @@ -76,16 +133,15 @@ public class OmsPromotionGiftServiceImpl extends ServiceImpl(); } - + Set 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 goodsList = omsPromotionGiftGoodsMapper.selectList(listByGiftIdQw); Map> 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 implements OmsSaleOrderService { + private OmsPromotionGiftService omsPromotionGiftService; + private GoodsSkuMapper goodsSkuMapper; private GoodsSkuService goodsSkuService; private GoodsSpuService goodsSpuService; @@ -1412,6 +1416,49 @@ public class OmsSaleOrderServiceImpl extends ServiceImpl> itemMap = orderItemList.stream().filter(a->a.getGiftItemId() != null) + .collect(Collectors.groupingBy(OmsSaleOrderItem::getGiftItemId)); + if (CollUtil.isNotEmpty(itemMap.keySet())){ + List giftItemVos = omsPromotionGiftService.getCustomerItemList(omsOrder.getSupplierId()+""); + for (Long key : itemMap.keySet()) { + // 同搭赠案明细分组 + List 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); diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java index 726a1e2..325e360 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java +++ b/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> postMap = postUserList.stream().collect(Collectors.groupingBy(SysPostUser::getUserId)); List 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已发 diff --git a/cms-modules/cms-system/src/main/resources/mapper/goods/GoodsSkuMapper.xml b/cms-modules/cms-system/src/main/resources/mapper/goods/GoodsSkuMapper.xml index d6abc02..0001d22 100644 --- a/cms-modules/cms-system/src/main/resources/mapper/goods/GoodsSkuMapper.xml +++ b/cms-modules/cms-system/src/main/resources/mapper/goods/GoodsSkuMapper.xml @@ -140,6 +140,27 @@ + + + - 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 diff --git a/cms-modules/cms-system/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml b/cms-modules/cms-system/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml index 6a7d944..ea30d2a 100644 --- a/cms-modules/cms-system/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml +++ b/cms-modules/cms-system/src/main/resources/mapper/tbs/TbsBudgetMatchMapper.xml @@ -60,7 +60,7 @@ AND tsib.end_date >= #{query.actEndDate} AND ( tb.condition_flag =0 or ( - tbc.del_flag = 0 AND + tbc.del_flag = 0 AND tbc.stop_match_flag = 0 and ( tbc.target_type=#{item.targetType} and tbc.target_id = #{item.targetId} ) diff --git a/cms-modules/cms-system/src/test/java/com/qs/TestStringSub.java b/cms-modules/cms-system/src/test/java/com/qs/TestStringSub.java index 896febf..e9b4ef0 100644 --- a/cms-modules/cms-system/src/test/java/com/qs/TestStringSub.java +++ b/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()); + } }