diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index 4b9f3053..8f9d2ed4 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -390,7 +390,7 @@ public class GoodsMessageListener implements RocketMQListener { } if (goodsIndex.getPromotionMap() == null || goodsIndex.getPromotionMap().isEmpty()) { - Map goodsCurrentPromotionMap = promotionService.getGoodsPromotionMap(goodsIndex); + Map goodsCurrentPromotionMap = promotionService.getGoodsSkuPromotionMap(goodsIndex.getStoreId(), goodsIndex.getId()); goodsIndex.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap)); } } diff --git a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java index 983fd87a..62fa3d08 100644 --- a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java @@ -5,7 +5,6 @@ import cn.lili.common.enums.SwitchEnum; import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.vo.MemberSearchVO; import cn.lili.modules.member.entity.vo.MemberVO; -import cn.lili.modules.member.mapper.MemberMapper; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.message.entity.dos.MemberMessage; import cn.lili.modules.message.entity.dos.Message; @@ -28,7 +27,6 @@ import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -42,11 +40,6 @@ import java.util.List; @RocketMQMessageListener(topic = "${lili.data.rocketmq.notice-send-topic}", consumerGroup = "${lili.data.rocketmq.notice-send-group}") public class NoticeSendMessageListener implements RocketMQListener { - /** - * 会员 - */ - @Resource - private MemberMapper memberMapper; /** * 短信 */ @@ -82,7 +75,7 @@ public class NoticeSendMessageListener implements RocketMQListener { //发送全部会员 if (smsReachDTO.getSmsRange().equals(RangeEnum.ALL.name())) { //获取所有会员的手机号 - List list = memberMapper.getAllMemberMobile(); + List list = memberService.getAllMemberMobile(); smsUtil.sendBatchSms(smsReachDTO.getSignName(), list, smsReachDTO.getMessageCode()); //判断为发送部分用户 } else { diff --git a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java index ad694aea..74dff93a 100644 --- a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java +++ b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java @@ -7,7 +7,6 @@ import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.owasp.html.HtmlPolicyBuilder; import org.owasp.html.PolicyFactory; -import org.owasp.html.Sanitizers; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; @@ -32,33 +31,6 @@ import java.util.Map; @Slf4j public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { - - /** - * xss过滤参数 - * - * @todo 这里的参数应该更智能些,例如iv,前端的参数包含这两个字母就会放过,这是有问题的 - */ - private static final String[] IGNORE_FIELD = { - "logo", - "url", - "photo", - "intro", - "content", - "name", - "image", - "encrypted", - "iv", - "mail", - "sell", - "id", - "price", - "prop", - "reply", - "profile", - "privateKey", - "wechatpay", - }; - //允许的标签 private static final String[] allowedTags = {"h1", "h2", "h3", "h4", "h5", "h6", "span", "strong", @@ -74,8 +46,10 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { "footer", "header", "hgroup", "section", "summary"}; //带有超链接的标签 - private static final String[] linkTags = {"img", "video", "source", "a", "iframe"}; + private static final String[] linkTags = {"img", "video", "source", "a", "iframe", "p"}; + //带有超链接的标签 + private static final String[] allowAttributes = {"style", "src", "href", "target", "width", "height"}; public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); @@ -284,19 +258,11 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { .allowElements(allowedTags) //内容标签转化为div .allowElements((elementName, attributes) -> "div", needTransformTags) - .allowAttributes("src", "href", "target", "width", "height").onElements(linkTags) - //校验链接中的是否为http -// .allowUrlProtocols("https") + .allowAttributes(allowAttributes).onElements(linkTags) + .allowStyling() .toFactory(); // basic prepackaged policies for links, tables, integers, images, styles, blocks - value = Sanitizers.FORMATTING - .and(Sanitizers.STYLES) - .and(Sanitizers.IMAGES) - .and(Sanitizers.LINKS) - .and(Sanitizers.BLOCKS) - .and(Sanitizers.TABLES) - .and(policy) - .sanitize(value); + value = policy.sanitize(value); } return HtmlUtil.unescape(value); } @@ -309,12 +275,6 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { * @return 参数值 */ private String filterXss(String name, String value) { -// if (CharSequenceUtil.containsAny(name.toLowerCase(Locale.ROOT), IGNORE_FIELD)) { -// // 忽略的处理,(过滤敏感字符) -// return value; -// } else { -// return cleanXSS(value); -// } return cleanXSS(value); } 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 c300a39b..40c25077 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 @@ -195,14 +195,6 @@ public interface GoodsSkuService extends IService { */ void updateGoodsSkuCommentNum(String skuId); - /** - * 更新商品sku促销价格 - * - * @param skuId skuId - * @param promotionPrice 促销价格 - */ - void updateGoodsSkuPromotion(String skuId, Double promotionPrice); - /** * 根据商品id获取全部skuId的集合 * 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 7f15c9c3..2cc0f9e4 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 @@ -28,7 +28,7 @@ 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.FootPrint; -import cn.lili.modules.member.entity.dos.MemberEvaluation; +import cn.lili.modules.member.entity.dto.EvaluationQueryParams; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; import cn.lili.modules.promotion.entity.dos.PromotionGoods; @@ -250,11 +250,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //获取当前商品的索引信息 EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId); if (goodsIndex == null) { - goodsIndex = goodsIndexService.getTempEsGoodsIndex(goodsSku, goodsVO.getGoodsParamsDTOList()); - - //发送mq消息 - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.RESET_GOODS_INDEX.name(); - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(Collections.singletonList(goodsIndex)), RocketmqSendCallbackBuilder.commonCallback()); + goodsIndex = goodsIndexService.getResetEsGoodsIndex(goodsSku, goodsVO.getGoodsParamsDTOList()); } //商品规格 @@ -502,12 +498,11 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //获取商品信息 GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId); - LambdaQueryWrapper goodEvaluationQueryWrapper = new LambdaQueryWrapper<>(); - goodEvaluationQueryWrapper.eq(MemberEvaluation::getSkuId, goodsSku.getId()); - goodEvaluationQueryWrapper.eq(MemberEvaluation::getGrade, EvaluationGradeEnum.GOOD.name()); - + EvaluationQueryParams queryParams = new EvaluationQueryParams(); + queryParams.setGrade(EvaluationGradeEnum.GOOD.name()); + queryParams.setSkuId(goodsSku.getId()); //好评数量 - long highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper); + long highPraiseNum = memberEvaluationService.getEvaluationCount(queryParams); //更新商品评价数量 goodsSku.setCommentNum(goodsSku.getCommentNum() != null ? goodsSku.getCommentNum() + 1 : 1); @@ -531,22 +526,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl i goodsService.updateGoodsCommentNum(goodsSku.getGoodsId()); } - /** - * 更新商品sku促销价格 - * - * @param skuId skuId - * @param promotionPrice 促销价格 - */ - @Override - public void updateGoodsSkuPromotion(String skuId, Double promotionPrice) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(GoodsSku::getId, skuId); - updateWrapper.set(GoodsSku::getPromotionPrice, promotionPrice); - updateWrapper.set(GoodsSku::getPromotionFlag, true); - this.update(updateWrapper); - cache.remove(GoodsSkuService.getCacheKeys(skuId)); - } - /** * 根据商品id获取全部skuId的集合 * diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java index 28fb21f8..90cbbdf7 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java @@ -1,12 +1,11 @@ package cn.lili.modules.member.entity.dto; -import cn.lili.common.security.context.UserContext; -import cn.lili.common.security.enums.UserEnums; -import cn.lili.common.utils.StringUtils; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.vo.PageVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; /** * 评价查询条件 @@ -14,13 +13,19 @@ import lombok.Data; * @author Bulbasaur * @since 2020/11/30 14:52 */ +@EqualsAndHashCode(callSuper = true) @Data public class EvaluationQueryParams extends PageVO { + @ApiModelProperty(value = "ID") + private String id; @ApiModelProperty(value = "买家ID") private String memberId; + @ApiModelProperty(value = "skuID") + private String skuId; + @ApiModelProperty(value = "会员名称") private String memberName; @@ -51,40 +56,42 @@ public class EvaluationQueryParams extends PageVO { @ApiModelProperty(value = "状态") private String status; - public EvaluationQueryParams() { - - } - public QueryWrapper queryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) { + if (CharSequenceUtil.isNotEmpty(id)) { + queryWrapper.eq("id", id); + } + if (CharSequenceUtil.isNotEmpty(startTime) && CharSequenceUtil.isNotEmpty(endTime)) { queryWrapper.between("create_time", startTime, endTime); } - if (StringUtils.isNotEmpty(grade)) { + if (CharSequenceUtil.isNotEmpty(grade)) { queryWrapper.eq("grade", grade); } - if (StringUtils.isNotEmpty(goodsName)) { + if (CharSequenceUtil.isNotEmpty(goodsName)) { queryWrapper.like("goods_name", goodsName); } - if (StringUtils.isNotEmpty(storeName)) { + if (CharSequenceUtil.isNotEmpty(storeName)) { queryWrapper.like("store_name", storeName); } - if (StringUtils.isNotEmpty(memberName)) { + if (CharSequenceUtil.isNotEmpty(memberName)) { queryWrapper.like("member_name", memberName); } - if (StringUtils.isNotEmpty(goodsId)) { + if (CharSequenceUtil.isNotEmpty(goodsId)) { queryWrapper.eq("goods_id", goodsId); } - if (StringUtils.isNotEmpty(storeId)) { + if (CharSequenceUtil.isNotEmpty(skuId)) { + queryWrapper.eq("sku_id", skuId); + } + if (CharSequenceUtil.isNotEmpty(storeId)) { queryWrapper.eq("store_id", storeId); } - if (StringUtils.isNotEmpty(memberId)) { + if (CharSequenceUtil.isNotEmpty(memberId)) { queryWrapper.eq("member_id", memberId); } - if (StringUtils.isNotEmpty(haveImage)) { + if (CharSequenceUtil.isNotEmpty(haveImage)) { queryWrapper.eq("have_image", haveImage); } - if (StringUtils.isNotEmpty(status)) { + if (CharSequenceUtil.isNotEmpty(status)) { queryWrapper.eq("status", status); } queryWrapper.eq("delete_flag", false); diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java index 44878063..1b600ce9 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java @@ -88,5 +88,26 @@ public interface MemberEvaluationService extends IService { */ EvaluationNumberVO getEvaluationNumber(String goodsId); + /** + * 获取今天新增的评价数量 + * + * @return 今日评价数量 + */ + long todayMemberEvaluation(); + + /** + * 获取等待回复评价数量 + * + * @return 等待回复评价数量 + */ + long getWaitReplyNum(); + + /** + * 统计商品评价数量 + * + * @param evaluationQueryParams 查询条件 + * @return 商品评价数量 + */ + long getEvaluationCount(EvaluationQueryParams evaluationQueryParams); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java index a4256c17..a93c18ad 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java @@ -220,4 +220,11 @@ public interface MemberService extends IService { * @param userEnums token角色类型 */ void logout(UserEnums userEnums); + + /** + * 获取所有会员的手机号 + * + * @return 所有会员的手机号 + */ + List getAllMemberMobile(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java index 36f6403c..4b6e1d91 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java @@ -1,11 +1,15 @@ package cn.lili.modules.member.serviceimpl; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.SwitchEnum; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; import cn.lili.common.sensitive.SensitiveWordsFilter; import cn.lili.common.utils.StringUtils; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -29,6 +33,7 @@ import cn.lili.modules.order.order.service.OrderService; import cn.lili.mybatis.util.PageUtil; 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.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -190,6 +195,31 @@ public class MemberEvaluationServiceImpl extends ServiceImpl().ge(MemberEvaluation::getCreateTime, DateUtil.beginOfDay(new DateTime()))); + } + + @Override + public long getWaitReplyNum() { + QueryWrapper queryWrapper = Wrappers.query(); + queryWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), + "store_id", UserContext.getCurrentUser().getStoreId()); + queryWrapper.eq("reply_status", false); + return this.count(queryWrapper); + } + + /** + * 统计商品评价数量 + * + * @param evaluationQueryParams 查询条件 + * @return 商品评价数量 + */ + @Override + public long getEvaluationCount(EvaluationQueryParams evaluationQueryParams) { + return this.count(evaluationQueryParams.queryWrapper()); + } + /** * 检测会员评价 * diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index 70625701..2ad6d5a8 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -585,6 +585,16 @@ public class MemberServiceImpl extends ServiceImpl impleme } } + /** + * 获取所有会员的手机号 + * + * @return 所有会员的手机号 + */ + @Override + public List getAllMemberMobile() { + return this.baseMapper.getAllMemberMobile(); + } + /** * 检测会员 * diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index bf975b0a..07736ea8 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -7,7 +7,6 @@ import cn.lili.cache.Cache; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; @@ -35,6 +34,7 @@ import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams; import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; @@ -47,11 +47,7 @@ import cn.lili.modules.promotion.service.PromotionGoodsService; 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.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.GoodsTagsEnum; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -115,16 +111,6 @@ public class CartServiceImpl implements CartService { */ @Autowired private KanjiaActivityService kanjiaActivityService; - /** - * rocketMq - */ - @Autowired - private RocketMQTemplate rocketMQTemplate; - /** - * rocketMq配置 - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; /** * 交易 */ @@ -517,12 +503,11 @@ public class CartServiceImpl implements CartService { CartTypeEnum cartTypeEnum = getCartType(way); TradeDTO tradeDTO = this.readDTO(cartTypeEnum); - MemberCoupon memberCoupon = - memberCouponService.getOne( - new LambdaQueryWrapper() - .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) - .eq(MemberCoupon::getMemberId, currentUser.getId()) - .eq(MemberCoupon::getId, couponId)); + MemberCouponSearchParams searchParams = new MemberCouponSearchParams(); + searchParams.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); + searchParams.setMemberId(currentUser.getId()); + searchParams.setId(couponId); + MemberCoupon memberCoupon = memberCouponService.getMemberCoupon(searchParams); if (memberCoupon == null) { throw new ServiceException(ResultCode.COUPON_EXPIRED); } @@ -564,11 +549,7 @@ public class CartServiceImpl implements CartService { EsGoodsIndex goodsIndex = goodsIndexService.findById(dataSku.getId()); if (goodsIndex == null) { GoodsVO goodsVO = this.goodsService.getGoodsVO(dataSku.getGoodsId()); - goodsIndex = goodsIndexService.getTempEsGoodsIndex(dataSku, goodsVO.getGoodsParamsDTOList()); - - //发送mq消息 - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.RESET_GOODS_INDEX.name(); - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(Collections.singletonList(goodsIndex)), RocketmqSendCallbackBuilder.commonCallback()); + goodsIndex = goodsIndexService.getResetEsGoodsIndex(dataSku, goodsVO.getGoodsParamsDTOList()); } if (goodsIndex.getPromotionMap() != null && !goodsIndex.getPromotionMap().isEmpty()) { if (goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.SECKILL.name())) || @@ -691,13 +672,13 @@ public class CartServiceImpl implements CartService { return cartSkuVOS; } else if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name())) { //分类路径是否包含 - return cartSkuVOS.stream().filter(i -> i.getGoodsSku().getCategoryPath().indexOf("," + memberCoupon.getScopeId() + ",") <= 0).collect(Collectors.toList()); + return cartSkuVOS.stream().filter(i -> CharSequenceUtil.contains(memberCoupon.getScopeId(), i.getGoodsSku().getCategoryPath())).collect(Collectors.toList()); } else if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS.name())) { //范围关联ID是否包含 - return cartSkuVOS.stream().filter(i -> memberCoupon.getScopeId().indexOf("," + i.getGoodsSku().getId() + ",") <= 0).collect(Collectors.toList()); + return cartSkuVOS.stream().filter(i -> CharSequenceUtil.contains(memberCoupon.getScopeId(), i.getGoodsSku().getId())).collect(Collectors.toList()); } else if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_SHOP_CATEGORY.name())) { //店铺分类路径是否包含 - return cartSkuVOS.stream().filter(i -> i.getGoodsSku().getStoreCategoryPath().indexOf("," + memberCoupon.getScopeId() + ",") <= 0).collect(Collectors.toList()); + return cartSkuVOS.stream().filter(i -> CharSequenceUtil.contains(memberCoupon.getScopeId(), i.getGoodsSku().getStoreCategoryPath())).collect(Collectors.toList()); } return new ArrayList<>(); } 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 dadf18d6..a19fcd48 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 @@ -96,6 +96,14 @@ public interface MemberCouponService extends IService { */ List getAllScopeMemberCoupon(String memberId, List storeId); + /** + * 获取会员优惠券 + * + * @param param 查询参数 + * @return 会员优惠券列表 + */ + MemberCoupon getMemberCoupon(MemberCouponSearchParams param); + /** * 获取会员优惠券数量 * 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 2349f055..85ad2a41 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,7 +1,5 @@ package cn.lili.modules.promotion.service; -import cn.lili.modules.search.entity.dos.EsGoodsIndex; - import java.util.Map; /** @@ -22,9 +20,10 @@ public interface PromotionService { /** * 根据商品索引获取当前商品索引的所有促销活动信息 * - * @param index 商品索引 + * @param storeId 店铺id + * @param goodsSkuId 商品skuId * @return 当前促销活动集合 */ - Map getGoodsPromotionMap(EsGoodsIndex index); + Map getGoodsSkuPromotionMap(String storeId, String goodsSkuId); } \ No newline at end of file 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 5f23153b..2514e68f 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 @@ -195,6 +195,17 @@ public class MemberCouponServiceImpl extends ServiceImpl getGoodsPromotionMap(EsGoodsIndex index) { - String storeIds = index.getStoreId() + "," + PromotionTools.PLATFORM_ID; + public Map getGoodsSkuPromotionMap(String storeId, String goodsSkuId) { + String storeIds = storeId + "," + PromotionTools.PLATFORM_ID; Map promotionMap = new HashMap<>(); - List promotionGoodsList = promotionGoodsService.findSkuValidPromotion(index.getId(), storeIds); + List promotionGoodsList = promotionGoodsService.findSkuValidPromotion(goodsSkuId, storeIds); for (PromotionGoods promotionGoods : promotionGoodsList) { String esPromotionKey = promotionGoods.getPromotionType() + "-" + promotionGoods.getPromotionId(); switch (PromotionTypeEnum.valueOf(promotionGoods.getPromotionType())) { @@ -131,7 +130,7 @@ public class PromotionServiceImpl implements PromotionService { promotionMap.put(esPromotionKey, fullDiscount); break; case SECKILL: - this.getGoodsCurrentSeckill(promotionGoods, promotionMap, index); + this.getGoodsCurrentSeckill(promotionGoods, promotionMap); break; case POINTS_GOODS: PointsGoods pointsGoods = pointsGoodsService.getById(promotionGoods.getPromotionId()); @@ -145,7 +144,7 @@ public class PromotionServiceImpl implements PromotionService { } - private void getGoodsCurrentSeckill(PromotionGoods promotionGoods, Map promotionMap, EsGoodsIndex index) { + private void getGoodsCurrentSeckill(PromotionGoods promotionGoods, Map promotionMap) { Seckill seckill = seckillService.getById(promotionGoods.getPromotionId()); SeckillSearchParams searchParams = new SeckillSearchParams(); searchParams.setSeckillId(promotionGoods.getPromotionId()); 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 6ff46c49..f40be6d4 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 @@ -178,11 +178,11 @@ public interface EsGoodsIndexService { List getPromotionIdByPromotionType(String id, PromotionTypeEnum promotionTypeEnum); /** - * 获取临时拼装的商品索引 + * 获取重置的商品索引 * * @param goodsSku 商品sku信息 * @param goodsParamDTOS 商品参数 * @return 商品索引 */ - EsGoodsIndex getTempEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS); + EsGoodsIndex getResetEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS); } 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 fc6e9dd0..70f497f8 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 @@ -13,6 +13,7 @@ import cn.lili.cache.CachePrefix; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.elasticsearch.BaseElasticsearchService; import cn.lili.elasticsearch.EsSuffix; import cn.lili.elasticsearch.config.ElasticsearchProperties; @@ -32,8 +33,11 @@ import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO; import cn.lili.modules.search.repository.EsGoodsIndexRepository; import cn.lili.modules.search.service.EsGoodsIndexService; 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 lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.assertj.core.util.IterableUtil; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.bulk.BulkRequest; @@ -102,7 +106,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements private StoreGoodsLabelService storeGoodsLabelService; @Autowired private Cache cache; - + /** + * rocketMq + */ + @Autowired + private RocketMQTemplate rocketMQTemplate; + /** + * rocketMq配置 + */ + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; @Autowired @Qualifier("elasticsearchRestTemplate") private ElasticsearchRestTemplate restTemplate; @@ -587,19 +600,23 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } /** - * 获取临时拼装的商品索引 + * 获取重置的商品索引 * * @param goodsSku 商品sku信息 * @param goodsParamDTOS 商品参数 * @return 商品索引 */ @Override - public EsGoodsIndex getTempEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS) { + public EsGoodsIndex getResetEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS) { EsGoodsIndex index = new EsGoodsIndex(goodsSku, goodsParamDTOS); //获取活动信息 - Map goodsCurrentPromotionMap = promotionService.getGoodsPromotionMap(index); + Map goodsCurrentPromotionMap = promotionService.getGoodsSkuPromotionMap(index.getStoreId(), index.getId()); //写入促销信息 index.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap)); + + //发送mq消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.RESET_GOODS_INDEX.name(); + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(Collections.singletonList(index)), RocketmqSendCallbackBuilder.commonCallback()); return index; } @@ -756,7 +773,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } } //促销索引 - Map goodsCurrentPromotionMap = promotionService.getGoodsPromotionMap(index); + Map goodsCurrentPromotionMap = promotionService.getGoodsSkuPromotionMap(index.getStoreId(), index.getId()); index.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap)); return index; } diff --git a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java index f35000e5..03bafe02 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java @@ -61,7 +61,7 @@ public class AdminUserManagerController { @Autowired private VerificationService verificationService; - @GetMapping(value = "/login") + @PostMapping(value = "/login") @ApiOperation(value = "登录管理员") public ResultMessage login(@NotNull(message = "用户名不能为空") @RequestParam String username, @NotNull(message = "密码不能为空") @RequestParam String password,