From 7e542750f61fface912e04993a10f9ec22f03384 Mon Sep 17 00:00:00 2001 From: paulGao Date: Fri, 8 Apr 2022 16:59:12 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BC=98=E6=83=A0=E5=88=B8=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=A3=80=E6=9F=A5=E4=BC=98=E6=83=A0=E5=88=B8?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E8=BF=87=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MemberCouponService.java | 7 ++++ .../serviceimpl/MemberCouponServiceImpl.java | 33 +++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java b/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java index a19fcd48..0d438b6a 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java @@ -125,6 +125,13 @@ public interface MemberCouponService extends IService { */ void cancellation(String memberId, String id); + /** + * 作废无效的会员优惠券 + * + * @return 是否操作成功 + */ + boolean expireInvalidMemberCoupon(String memberId); + /** * 关闭会员优惠券 * diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java index d46f606f..9cd0961e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java @@ -1,5 +1,6 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.cache.Cache; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -23,6 +24,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; @@ -108,7 +110,12 @@ public class MemberCouponServiceImpl extends ServiceImpl getMemberCoupons(MemberCouponSearchParams param, PageVO pageVo) { QueryWrapper queryWrapper = param.queryWrapper(); - return this.page(PageUtil.initPage(pageVo), queryWrapper); + Page page = this.page(PageUtil.initPage(pageVo), queryWrapper); + if (page.getRecords().stream().anyMatch(i -> i.getEndTime().before(new Date()))) { + this.expireInvalidMemberCoupon(param.getMemberId()); + return this.page(PageUtil.initPage(pageVo), queryWrapper); + } + return page; } /** @@ -119,7 +126,12 @@ public class MemberCouponServiceImpl extends ServiceImpl getMemberCoupons(MemberCouponSearchParams param) { - return this.list(param.queryWrapper()); + List list = this.list(param.queryWrapper()); + if (list.stream().anyMatch(i -> i.getEndTime().before(new Date()))) { + this.expireInvalidMemberCoupon(param.getMemberId()); + return this.list(param.queryWrapper()); + } + return list; } /** @@ -273,6 +285,23 @@ public class MemberCouponServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper() + .eq(CharSequenceUtil.isNotEmpty(memberId), MemberCoupon::getMemberId, memberId) + .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) + .le(MemberCoupon::getEndTime, new Date()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + return this.update(updateWrapper); + } + private void receiverCoupon(String couponId, String memberId, String memberName, Coupon coupon) { this.checkCouponLimit(couponId, memberId); MemberCoupon memberCoupon = new MemberCoupon(coupon); From 264a423444bc0ca1a2bc3d58507c7cbc78026ebf Mon Sep 17 00:00:00 2001 From: paulGao Date: Thu, 14 Apr 2022 09:09:22 +0800 Subject: [PATCH 2/5] remove invalid class --- .../test/promotion/PromotionPriceTest.java | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java diff --git a/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java b/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java deleted file mode 100644 index cfdafeb2..00000000 --- a/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.lili.test.promotion; - -import cn.lili.modules.promotion.entity.dos.BasePromotions; -import cn.lili.modules.promotion.service.PromotionGoodsService; -import cn.lili.modules.promotion.service.PromotionService; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.Map; - -/** - * @author paulG - * @since 2020/11/23 - **/ -@ExtendWith(SpringExtension.class) -@SpringBootTest -class PromotionPriceTest { - - @Autowired - private PromotionService promotionService; - - @Autowired - private PromotionGoodsService promotionGoodsServiceService; - - @Test - void testSeckillPrice() { - Map currentPromotion = promotionService.getCurrentPromotion(); - for (Map.Entry entry : currentPromotion.entrySet()) { - BasePromotions promotion = (BasePromotions) entry.getValue(); - System.out.println(entry.getKey() + "-" + promotion.getId()); - } - Assertions.assertTrue(true); - } - -} From 37c5ce541bac6e3f18e3dec979dd682ab7734b14 Mon Sep 17 00:00:00 2001 From: paulGao Date: Sun, 17 Apr 2022 21:46:34 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A5=BC=E5=B1=82?= =?UTF-8?q?=E8=A3=85=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../other/broadcast/StudioController.java | 4 +- .../modules/goods/service/StudioService.java | 2 +- .../goods/serviceimpl/StudioServiceImpl.java | 22 ++++++++-- .../promotion/service/PromotionService.java | 5 ++- .../serviceimpl/PromotionServiceImpl.java | 40 ++++--------------- .../broadcast/StudioManagerController.java | 2 +- .../promotion/PromotionManagerController.java | 5 ++- .../broadcast/StudioStoreController.java | 2 +- 8 files changed, 38 insertions(+), 44 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java index d161e5c1..1c03c9e9 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java +++ b/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -3,7 +3,7 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.goods.entity.dos.Studio; +import cn.lili.modules.goods.entity.vos.StudioVO; import cn.lili.modules.goods.service.StudioService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -35,7 +35,7 @@ public class StudioController { @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query", dataType = "String") }) @GetMapping - public ResultMessage> page(PageVO pageVO, Integer recommend, String status) { + public ResultMessage> page(PageVO pageVO, Integer recommend, String status) { return ResultUtil.data(studioService.studioList(pageVO, recommend, status)); } diff --git a/framework/src/main/java/cn/lili/modules/goods/service/StudioService.java b/framework/src/main/java/cn/lili/modules/goods/service/StudioService.java index 40d273af..906c3696 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/StudioService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/StudioService.java @@ -70,7 +70,7 @@ public interface StudioService extends IService { * @param status 直播间状态 * @return 直播间分页 */ - IPage studioList(PageVO pageVO, Integer recommend, String status); + IPage studioList(PageVO pageVO, Integer recommend, String status); /** * 修改直播间状态 diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/StudioServiceImpl.java index 4aed7636..abda74b1 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/StudioServiceImpl.java @@ -1,6 +1,7 @@ package cn.lili.modules.goods.serviceimpl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -32,12 +33,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -209,15 +213,27 @@ public class StudioServiceImpl extends ServiceImpl impleme } @Override - public IPage studioList(PageVO pageVO, Integer recommend, String status) { + public IPage studioList(PageVO pageVO, Integer recommend, String status) { QueryWrapper queryWrapper = new QueryWrapper() .eq(recommend != null, "recommend", true) - .eq(status != null, "status", status) + .eq(CharSequenceUtil.isNotEmpty(status), "status", status) .orderByDesc("create_time"); if (UserContext.getCurrentUser() != null && UserContext.getCurrentUser().getRole().equals(UserEnums.STORE)) { queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId()); } - return this.page(PageUtil.initPage(pageVO), queryWrapper); + Page page = this.page(PageUtil.initPage(pageVO), queryWrapper); + List records = page.getRecords(); + List studioVOS = new ArrayList<>(); + for (Studio record : records) { + StudioVO studioVO = new StudioVO(); + //获取直播间信息 + BeanUtil.copyProperties(record, studioVO); + //获取直播间商品信息 + studioVO.setCommodityList(commodityMapper.getCommodityByRoomId(studioVO.getRoomId())); + studioVOS.add(studioVO); + } + page.setRecords(studioVOS); + return page; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java index 85ad2a41..8f8b5819 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java @@ -1,5 +1,8 @@ package cn.lili.modules.promotion.service; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; + +import java.util.List; import java.util.Map; /** @@ -15,7 +18,7 @@ public interface PromotionService { * * @return 当前促销活动集合 */ - Map getCurrentPromotion(); + Map> getCurrentPromotion(); /** * 根据商品索引获取当前商品索引的所有促销活动信息 diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index f68b0506..b50c79ce 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -2,8 +2,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.modules.promotion.entity.dos.*; -import cn.lili.modules.promotion.entity.dto.search.FullDiscountSearchParams; -import cn.lili.modules.promotion.entity.dto.search.PintuanSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.service.*; @@ -16,6 +15,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 促销业务层实现 @@ -69,37 +69,11 @@ public class PromotionServiceImpl implements PromotionService { * @return 当前促销活动集合 */ @Override - public Map getCurrentPromotion() { - Map resultMap = new HashMap<>(16); - - SeckillSearchParams seckillSearchParams = new SeckillSearchParams(); - seckillSearchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); - //获取当前进行的秒杀活动活动 - List seckillList = seckillService.listFindAll(seckillSearchParams); - if (seckillList != null && !seckillList.isEmpty()) { - for (Seckill seckill : seckillList) { - resultMap.put(PromotionTypeEnum.SECKILL.name(), seckill); - } - } - FullDiscountSearchParams fullDiscountSearchParams = new FullDiscountSearchParams(); - fullDiscountSearchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); - //获取当前进行的满优惠活动 - List fullDiscountList = fullDiscountService.listFindAll(fullDiscountSearchParams); - if (fullDiscountList != null && !fullDiscountList.isEmpty()) { - for (FullDiscount fullDiscount : fullDiscountList) { - resultMap.put(PromotionTypeEnum.FULL_DISCOUNT.name(), fullDiscount); - } - } - PintuanSearchParams pintuanSearchParams = new PintuanSearchParams(); - pintuanSearchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); - //获取当前进行的拼团活动 - List pintuanList = pintuanService.listFindAll(pintuanSearchParams); - if (pintuanList != null && !pintuanList.isEmpty()) { - for (Pintuan pintuan : pintuanList) { - resultMap.put(PromotionTypeEnum.PINTUAN.name(), pintuan); - } - } - return resultMap; + public Map> getCurrentPromotion() { + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); + List promotionGoods = promotionGoodsService.listFindAll(searchParams); + return promotionGoods.stream().collect(Collectors.groupingBy(PromotionGoods::getPromotionType)); } /** diff --git a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java index fb514b84..584db8bf 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java @@ -36,7 +36,7 @@ public class StudioManagerController { @ApiOperation(value = "获取店铺直播间列表") @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query") @GetMapping - public ResultMessage> page(PageVO pageVO, String status) { + public ResultMessage> page(PageVO pageVO, String status) { return ResultUtil.data(studioService.studioList(pageVO, null, status)); } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java index 9afbb2b4..a4c9f59d 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; /** @@ -37,8 +38,8 @@ public class PromotionManagerController { @GetMapping("/current") @ApiOperation(value = "获取当前进行中的促销活动") - public ResultMessage> getCurrentPromotion() { - Map currentPromotion = promotionService.getCurrentPromotion(); + public ResultMessage>> getCurrentPromotion() { + Map> currentPromotion = promotionService.getCurrentPromotion(); return ResultUtil.data(currentPromotion); } diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java index 09999f03..efe697e3 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java @@ -38,7 +38,7 @@ public class StudioStoreController { @ApiOperation(value = "获取店铺直播间列表") @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query", dataType = "String") @GetMapping - public ResultMessage> page(PageVO pageVO, String status) { + public ResultMessage> page(PageVO pageVO, String status) { return ResultUtil.data(studioService.studioList(pageVO, null, status)); } From 0203630d6a315c6bf187fe3f8815d2a6bf345c73 Mon Sep 17 00:00:00 2001 From: paulGao Date: Wed, 20 Apr 2022 09:39:03 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E5=95=86=E5=93=81=E7=B4=A2=E5=BC=95=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/listener/GoodsMessageListener.java | 32 +++++++++++++++++++ .../event/GeneratorEsGoodsIndexEvent.java | 11 +++++-- .../GeneratorEsGoodsIndexListener.java | 5 ++- .../modules/goods/service/GoodsService.java | 11 +++++++ .../goods/service/GoodsSkuService.java | 9 ++++++ .../goods/serviceimpl/GoodsServiceImpl.java | 23 +++++++++++++ .../serviceimpl/GoodsSkuServiceImpl.java | 30 +++++++++++++++-- .../search/service/EsGoodsIndexService.java | 4 +-- .../serviceimpl/EsGoodsIndexServiceImpl.java | 19 +++++++---- .../cn/lili/rocketmq/tags/GoodsTagsEnum.java | 8 +++++ 10 files changed, 135 insertions(+), 17 deletions(-) diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index 558b7c30..45c1ea98 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -140,6 +140,14 @@ public class GoodsMessageListener implements RocketMQListener { log.error("生成商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); } break; + case GENERATOR_STORE_GOODS_INDEX: + try { + String storeId = new String(messageExt.getBody()); + this.updateGoodsIndex(storeId); + } catch (Exception e) { + log.error("生成店铺商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); + } + break; case UPDATE_GOODS_INDEX_PROMOTIONS: this.updateGoodsIndexPromotions(new String(messageExt.getBody())); break; @@ -220,6 +228,14 @@ public class GoodsMessageListener implements RocketMQListener { List skuIds = JSONUtil.toList(message, String.class); goodsCollectionService.deleteSkuCollection(skuIds); break; + case STORE_GOODS_DELETE: + try { + String storeId = new String(messageExt.getBody()); + goodsIndexService.deleteIndex(MapUtil.builder(new HashMap()).put("storeId", storeId).build()); + } catch (Exception e) { + log.error("删除店铺商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); + } + break; //商品评价 case GOODS_COMMENT_COMPLETE: MemberEvaluation memberEvaluation = JSONUtil.toBean(new String(messageExt.getBody()), MemberEvaluation.class); @@ -308,6 +324,22 @@ public class GoodsMessageListener implements RocketMQListener { goodsIndexService.updateBulkIndex(goodsIndices); } + + /** + * 更新商品索引根据店铺id + * + * @param storeId 店铺id + */ + private void updateGoodsIndex(String storeId) { + //如果商品通过审核&&并且已上架 + GoodsSearchParams searchParams = new GoodsSearchParams(); + searchParams.setStoreId(storeId); + for (Goods goods : this.goodsService.queryListByParams(searchParams)) { + this.updateGoodsIndex(goods); + } + + } + /** * 更新商品索引 * diff --git a/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java b/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java index ff5da90f..4088b5aa 100644 --- a/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java +++ b/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java @@ -10,10 +10,15 @@ import org.springframework.context.ApplicationEvent; @Data public class GeneratorEsGoodsIndexEvent extends ApplicationEvent { - private String goodsId; + private static final long serialVersionUID = -6206752641309458207L; - public GeneratorEsGoodsIndexEvent(Object source, String goodsId) { + private String id; + + private String tag; + + public GeneratorEsGoodsIndexEvent(Object source, String tag, String id) { super(source); - this.goodsId = goodsId; + this.tag = tag; + this.id = id; } } diff --git a/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java b/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java index 7c5b95ba..175e0b13 100644 --- a/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java +++ b/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java @@ -3,7 +3,6 @@ package cn.lili.modules.goods.listener; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.goods.event.GeneratorEsGoodsIndexEvent; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.GoodsTagsEnum; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -30,9 +29,9 @@ public class GeneratorEsGoodsIndexListener { @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void generatorEsGoodsIndex(GeneratorEsGoodsIndexEvent esGoodsIndexEvent) { - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(); + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + esGoodsIndexEvent.getTag(); //发送mq消息 - rocketMQTemplate.asyncSend(destination, esGoodsIndexEvent.getGoodsId(), RocketmqSendCallbackBuilder.commonCallback()); + rocketMQTemplate.asyncSend(destination, esGoodsIndexEvent.getId(), RocketmqSendCallbackBuilder.commonCallback()); } } diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java index 16ac93e4..d06a4344 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java @@ -112,6 +112,17 @@ public interface GoodsService extends IService { */ Boolean updateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason); + + /** + * 更新商品上架状态状态 + * + * @param storeId 店铺ID + * @param goodsStatusEnum 更新的商品状态 + * @param underReason 下架原因 + * @return 更新结果 + */ + Boolean updateGoodsMarketAbleByStoreId(String storeId, GoodsStatusEnum goodsStatusEnum, String underReason); + /** * 更新商品上架状态状态 * diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java index 40c25077..b723f936 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java @@ -151,6 +151,15 @@ public interface GoodsSkuService extends IService { */ void updateGoodsSkuStatus(Goods goods); + /** + * 更新商品sku状态根据店铺id + * + * @param storeId 店铺id + * @param marketEnable 市场启用状态 + * @param authFlag 审核状态 + */ + void updateGoodsSkuStatusByStoreId(String storeId, String marketEnable, String authFlag); + /** * 发送生成ES商品索引 * diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index ee8fe200..25792d2a 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -316,6 +316,29 @@ public class GoodsServiceImpl extends ServiceImpl implements return result; } + /** + * 更新商品上架状态状态 + * + * @param storeId 店铺ID + * @param goodsStatusEnum 更新的商品状态 + * @param underReason 下架原因 + * @return 更新结果 + */ + @Override + public Boolean updateGoodsMarketAbleByStoreId(String storeId, GoodsStatusEnum goodsStatusEnum, String underReason) { + boolean result; + + LambdaUpdateWrapper updateWrapper = this.getUpdateWrapperByStoreAuthority(); + updateWrapper.set(Goods::getMarketEnable, goodsStatusEnum.name()); + updateWrapper.set(Goods::getUnderMessage, underReason); + updateWrapper.eq(Goods::getStoreId, storeId); + result = this.update(updateWrapper); + + //修改规格商品 + this.goodsSkuService.updateGoodsSkuStatusByStoreId(storeId, goodsStatusEnum.name(), null); + return result; + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean managerUpdateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) { diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index f7a5932f..d960c34e 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -325,7 +325,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl i @Transactional(rollbackFor = Exception.class) public void updateGoodsSkuStatus(Goods goods) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(GoodsSku::getGoodsId, goods.getId()); + updateWrapper.eq(CharSequenceUtil.isNotEmpty(goods.getId()), GoodsSku::getGoodsId, goods.getId()); + updateWrapper.eq(CharSequenceUtil.isNotEmpty(goods.getStoreId()), GoodsSku::getStoreId, goods.getStoreId()); updateWrapper.set(GoodsSku::getMarketEnable, goods.getMarketEnable()); updateWrapper.set(GoodsSku::getAuthFlag, goods.getAuthFlag()); updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag()); @@ -342,6 +343,31 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } } + /** + * 更新商品sku状态根据店铺id + * + * @param storeId 店铺id + * @param marketEnable 市场启用状态 + * @param authFlag 审核状态 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateGoodsSkuStatusByStoreId(String storeId, String marketEnable, String authFlag) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(GoodsSku::getStoreId, storeId); + updateWrapper.set(CharSequenceUtil.isNotEmpty(marketEnable), GoodsSku::getMarketEnable, marketEnable); + updateWrapper.set(CharSequenceUtil.isNotEmpty(authFlag), GoodsSku::getAuthFlag, authFlag); + boolean update = this.update(updateWrapper); + if (Boolean.TRUE.equals(update)) { + if (GoodsStatusEnum.UPPER.name().equals(marketEnable)) { + applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("生成店铺商品", GoodsTagsEnum.GENERATOR_STORE_GOODS_INDEX.name(), storeId)); + } else if (GoodsStatusEnum.DOWN.name().equals(marketEnable)) { + cache.vagueDel(CachePrefix.GOODS_SKU.getPrefix()); + applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("删除店铺商品", GoodsTagsEnum.STORE_GOODS_DELETE.name(), storeId)); + } + } + } + @Override public List getGoodsSkuByIdFromCache(List ids) { List keys = new ArrayList<>(); @@ -563,7 +589,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i if (!GoodsStatusEnum.UPPER.name().equals(goods.getMarketEnable()) || !GoodsAuthEnum.PASS.name().equals(goods.getAuthFlag())) { return; } - applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("生成商品索引事件", goods.getId())); + applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("生成商品", GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(), goods.getId())); } /** diff --git a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java index 3adff571..e5a93839 100644 --- a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java +++ b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java @@ -71,9 +71,9 @@ public interface EsGoodsIndexService { /** * 删除索引 * - * @param goods 商品索引信息 + * @param queryFields 查询条件 (key 为字段,value为字段值) */ - void deleteIndex(EsGoodsIndex goods); + void deleteIndex(Map queryFields); /** * 删除索引 diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java index 8ae29f80..ee5f4a76 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java @@ -59,7 +59,6 @@ import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.stereotype.Service; -import org.springframework.util.ObjectUtils; import java.io.IOException; import java.lang.reflect.Field; @@ -287,13 +286,20 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } } + /** + * 删除索引 + * + * @param queryFields 查询条件 + */ @Override - public void deleteIndex(EsGoodsIndex goods) { - if (ObjectUtils.isEmpty(goods)) { - //如果对象为空,则删除全量 - goodsIndexRepository.deleteAll(); + public void deleteIndex(Map queryFields) { + NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + for (Map.Entry entry : queryFields.entrySet()) { + boolQueryBuilder.filter(QueryBuilders.termsQuery(entry.getKey(), entry.getValue())); } - goodsIndexRepository.delete(goods); + queryBuilder.withQuery(boolQueryBuilder); + this.restTemplate.delete(queryBuilder.build(), EsGoodsIndex.class); } /** @@ -316,7 +322,6 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); queryBuilder.withQuery(QueryBuilders.termsQuery("id", ids.toArray())); this.restTemplate.delete(queryBuilder.build(), EsGoodsIndex.class); - } @Override diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java index 651e4ce5..e34525de 100644 --- a/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java +++ b/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java @@ -10,6 +10,10 @@ public enum GoodsTagsEnum { * "生成商品索引" */ GENERATOR_GOODS_INDEX("生成商品索引"), + /** + * "生成店铺商品索引" + */ + GENERATOR_STORE_GOODS_INDEX("生成店铺商品索引"), /** * "更新商品索引" */ @@ -31,6 +35,10 @@ public enum GoodsTagsEnum { * "重置商品索引" */ RESET_GOODS_INDEX("重置商品索引"), + /** + * "删除店铺商品索引" + */ + STORE_GOODS_DELETE("删除店铺商品索引"), /** * "删除商品" */ From 9f965c4e567ee793fcf31478870c3a9cb03a287f Mon Sep 17 00:00:00 2001 From: paulGao Date: Thu, 21 Apr 2022 16:25:43 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=BB=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8F=96=E6=B6=88=E5=90=8E=E8=B5=A0=E5=93=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=B8=8D=E4=BC=9A=E5=8F=96=E6=B6=88=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82=E4=BC=98=E5=8C=96=E7=83=AD=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/event/impl/FullDiscountExecute.java | 11 +++++++++++ .../java/cn/lili/event/impl/StockUpdateExecute.java | 3 ++- .../search/serviceimpl/EsGoodsSearchServiceImpl.java | 6 +++++- .../hotwords/HotWordsManagerController.java | 9 ++++++++- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java index a3507d83..86a08cbb 100644 --- a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java @@ -19,6 +19,7 @@ import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dto.OrderMessage; +import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.order.service.OrderItemService; @@ -96,6 +97,15 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { if (orderMessage.getNewStatus().equals(OrderStatusEnum.PAID)) { log.debug("满减活动,订单状态操作 {}", CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()); renderGift(JSONUtil.toBean(cache.getString(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()), CartVO.class), orderMessage); + } else if (orderMessage.getNewStatus().equals(OrderStatusEnum.CANCELLED)) { + log.debug("满减活动,取消订单状态操作 {}", CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()); + OrderSearchParams searchParams = new OrderSearchParams(); + searchParams.setParentOrderSn(orderMessage.getOrderSn()); + searchParams.setOrderPromotionType(OrderPromotionTypeEnum.GIFT.name()); + List orders = orderService.queryListByParams(searchParams); + if (orders != null && !orders.isEmpty()) { + orderService.systemCancel(orders.get(0).getSn(),"主订单取消,赠送订单字段自动取消"); + } } } @@ -190,6 +200,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { BeanUtil.copyProperties(priceDetailDTO, order, "id"); //生成订单参数 order.setSn(SnowFlake.createStr("G")); + order.setParentOrderSn(originOrder.getSn()); order.setOrderPromotionType(OrderPromotionTypeEnum.GIFT.name()); order.setOrderStatus(OrderStatusEnum.UNPAID.name()); order.setPayStatus(PayStatusEnum.PAID.name()); diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index 77806014..e03d38c0 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * 库存扣减,他表示了订单状态是否出库成功 @@ -156,7 +157,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { * @param stocks */ private void checkStocks(List stocks, OrderDetailVO order) { - if (order.getOrderItems().size() == stocks.size()) { + if (!stocks.isEmpty() && order.getOrderItems().size() == stocks.size() && stocks.stream().anyMatch(Objects::nonNull)) { return; } initSkuCache(order.getOrderItems()); diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 63d53d13..bafc965d 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -130,7 +130,11 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { */ @Override public void deleteHotWords(String keywords) { - cache.zRemove(CachePrefix.HOT_WORD.getPrefix(), keywords); + if (CharSequenceUtil.isEmpty(keywords)) { + cache.vagueDel(CachePrefix.HOT_WORD.getPrefix()); + } else { + cache.zRemove(CachePrefix.HOT_WORD.getPrefix(), keywords); + } } @Override diff --git a/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java b/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java index ce4eb8d3..cf7a46d3 100644 --- a/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java @@ -37,11 +37,18 @@ public class HotWordsManagerController { return ResultUtil.success(); } - @ApiOperation(value = "设置热词") + @ApiOperation(value = "删除热词") @DeleteMapping("/{words}") public ResultMessage deleteWords(@PathVariable String words) { esGoodsSearchService.deleteHotWords(words); return ResultUtil.success(); } + @ApiOperation(value = "删除全部热词") + @DeleteMapping("") + public ResultMessage deleteWordsAll() { + esGoodsSearchService.deleteHotWords(null); + return ResultUtil.success(); + } + }