diff --git a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java index 55530434..b299596d 100644 --- a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java @@ -5,7 +5,6 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.vos.GoodsVO; @@ -61,12 +60,6 @@ public class GoodsBuyerController { */ @Autowired private EsGoodsSearchService goodsSearchService; - /** - * 分销员 - */ - @Autowired - private DistributionService distributionService; - @ApiOperation(value = "通过id获取商品信息") @ApiImplicitParam(name = "goodsId", value = "商品ID", required = true, paramType = "path", dataType = "Long") 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 78c7e962..4089aa54 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -161,6 +161,11 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { /** * 同步库存和促销库存 * + * 需修改:DB:商品库存、Sku商品库存、活动商品库存 + * 1.获取需要修改的Sku列表、活动商品列表 + * 2.写入sku商品库存,批量修改 + * 3.写入促销商品的卖出数量、剩余数量,批量修改 + * 4.调用方法修改商品库存 * @param order 订单 */ private void synchroDB(OrderDetailVO order) { 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 badc3634..571f8704 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 @@ -189,17 +189,15 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } cache.put(GoodsSkuService.getCacheKeys(id), goodsSku); } + //获取商品库存 String quantity = stringRedisTemplate.opsForValue().get(GoodsSkuService.getStockCacheKey(id)); - if (quantity != null) { - if (goodsSku.getQuantity().equals(Convert.toInt(quantity))) { - goodsSku.setQuantity(Convert.toInt(quantity)); - this.updateById(goodsSku); - } - } else { - stringRedisTemplate.opsForValue().set(GoodsSkuService.getStockCacheKey(id), goodsSku.getQuantity().toString()); - } + //如果sku缓存的库存与库存缓存不符则按照库存缓存进行 + if (StrUtil.isNotEmpty(quantity)) { + goodsSku.setQuantity(Convert.toInt(quantity)); + cache.put(GoodsSkuService.getCacheKeys(goodsSku.getId()), goodsSku); + } return goodsSku; } @@ -437,7 +435,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i quantity += goodsSku.getQuantity(); } } - //保存商品库存结果 这里在for循环中调用数据库保存不太好,需要优化 + //保存商品库存结果 goodsService.updateStock(goodsId, quantity); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java index 4430748e..a86f0e68 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java @@ -60,7 +60,8 @@ public interface OrderMapper extends BaseMapper { */ @Select("SELECT o.sn,o.create_time,o.member_name,o.consignee_name,o.consignee_mobile,o.consignee_address_path,o.consignee_detail," + "o.payment_method, o.logistics_name,o.freight_price,o.goods_price,o.discount_price,o.flow_price,oi.goods_name,oi.num," + - "o.remark,o.order_status,o.pay_status,o.deliver_status,o.need_receipt,o.store_name FROM li_order_item oi INNER JOIN li_order o ON oi.order_sn=o.sn ${ew.customSqlSegment}") + "o.remark,o.order_status,o.pay_status,o.deliver_status,o.need_receipt,o.store_name FROM li_order o LEFT JOIN li_order_item oi " + + "ON oi.order_sn=o.sn ${ew.customSqlSegment}") List queryExportOrder(@Param(Constants.WRAPPER) Wrapper queryWrapper); /** diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java index 21e3fcab..779ad012 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java @@ -153,7 +153,7 @@ public class AfterSaleServiceImpl extends ServiceImpl { - /** - * 当前满优惠活动 - * - * @param storeId 商家编号 - * @return 满优惠活动信息 - */ - FullDiscountVO currentPromotion(String storeId); - /** * 当前满优惠活动 * @@ -53,8 +46,8 @@ public interface FullDiscountService extends IService { /** * 从mongo中分页获取满优惠列表 * - * @param searchParams 搜索参数 - * @param page 分页参数 + * @param searchParams 搜索参数 + * @param page 分页参数 * @return 满优惠列表 */ IPage getFullDiscountByPageFromMongo(FullDiscountSearchParams searchParams, PageVO page); @@ -84,4 +77,13 @@ public interface FullDiscountService extends IService { */ boolean deleteFullDiscount(String id); + /** + * 更新满额活动状态 + * + * @param id 优惠券编号 + * @param promotionStatus 促销状态 + * @return 更新结果 + */ + boolean updateFullDiscountStatus(String id, PromotionStatusEnum promotionStatus); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 9bda0843..4237e21f 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -156,16 +156,14 @@ public class CouponServiceImpl extends ServiceImpl impleme couponVO.setPromotionStatus(promotionStatus.name()); this.updateById(couponVO); this.mongoTemplate.save(couponVO); - if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) { - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), couponVO.getStartTime(), couponVO.getEndTime()); - //更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } + PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), promotionStatus.name(), couponVO.getStartTime(), couponVO.getEndTime()); + //更新延时任务 + this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage, + couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DateUtil.getDelayTime(couponVO.getStartTime().getTime()), + rocketmqCustomProperties.getPromotionTopic()); } return true; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java index 7385dbca..bd064365 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java @@ -1,13 +1,13 @@ package cn.lili.modules.promotion.serviceimpl; import cn.lili.common.enums.ResultCode; -import cn.lili.common.trigger.util.DelayQueueTools; -import cn.lili.common.trigger.enums.DelayTypeEnums; -import cn.lili.common.trigger.message.PromotionMessage; import cn.lili.common.exception.ServiceException; +import cn.lili.common.trigger.enums.DelayTypeEnums; import cn.lili.common.trigger.interfaces.TimeTrigger; +import cn.lili.common.trigger.message.PromotionMessage; import cn.lili.common.trigger.model.TimeExecuteConstant; import cn.lili.common.trigger.model.TimeTriggerMsg; +import cn.lili.common.trigger.util.DelayQueueTools; import cn.lili.common.utils.DateUtil; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; @@ -77,13 +77,6 @@ public class FullDiscountServiceImpl extends ServiceImpl currentPromotion(List storeId) { Query query = this.getMongoQuery(); @@ -203,6 +196,48 @@ public class FullDiscountServiceImpl extends ServiceImpl fullDiscountVOList = this.mongoTemplate.find(query, FullDiscountVO.class); + + //判断满额活动是否为空 + if (fullDiscountVOList.isEmpty() || fullDiscountVOList == null) { + throw new ServiceException(ResultCode.FULL_DISCOUNT_NOT_EXIST_ERROR); + } + FullDiscountVO fullDiscountVO = fullDiscountVOList.get(0); + + //如果是开启活动则需要校验参数 + if (promotionStatus.equals(PromotionStatusEnum.START)) { + //验证是否是有效参数 + PromotionTools.paramValid(fullDiscountVO.getStartTime().getTime(), fullDiscountVO.getEndTime().getTime(), fullDiscountVO.getNumber(), fullDiscountVO.getPromotionGoodsList()); + //当前时间段是否存在同类活动 + this.checkSameActiveExist(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime(), fullDiscountVO.getStoreId(), null); + //检查满减参数 + this.checkFullDiscount(fullDiscountVO); + } + + //填写活动状态 + fullDiscountVO.setPromotionStatus(promotionStatus.name()); + + //保存到MYSQL中 + this.updateById(fullDiscountVO); + + //添加促销消息 + PromotionMessage promotionMessage = new PromotionMessage(fullDiscountVO.getId(), PromotionTypeEnum.FULL_DISCOUNT.name(), + promotionStatus.name(), + fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime()); + //添加延时任务 + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + fullDiscountVO.getStartTime().getTime(), promotionMessage, + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + //发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg); + return true; + } + /** * 检查满优惠活动是否存在 * 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 196d86e7..b8c51326 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 @@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery; import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.Operator; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; @@ -412,12 +413,23 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { */ private void keywordSearch(BoolQueryBuilder filterBuilder, BoolQueryBuilder queryBuilder, String keyword, boolean isAggregation) { List filterFunctionBuilders = new ArrayList<>(); - //商品名字匹配 - filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.wildcardQuery("goodsName", "*" + keyword + "*"), - ScoreFunctionBuilders.weightFactorFunction(10))); - //属性匹配 - filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.nestedQuery(ATTR_PATH, QueryBuilders.wildcardQuery(ATTR_VALUE, "*" + keyword + "*"), ScoreMode.None), - ScoreFunctionBuilders.weightFactorFunction(8))); + if (keyword.contains(" ")) { + for (String s : keyword.split(" ")) { + filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("goodsName", s).operator(Operator.AND), + ScoreFunctionBuilders.weightFactorFunction(10))); + //属性匹配 + filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.nestedQuery(ATTR_PATH, QueryBuilders.wildcardQuery(ATTR_VALUE, "*" + s + "*"), ScoreMode.None), + ScoreFunctionBuilders.weightFactorFunction(8))); + } + } else { + //分词匹配 + filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("goodsName", keyword).operator(Operator.AND), + ScoreFunctionBuilders.weightFactorFunction(10))); + //属性匹配 + filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.nestedQuery(ATTR_PATH, QueryBuilders.wildcardQuery(ATTR_VALUE, "*" + keyword + "*"), ScoreMode.None), + ScoreFunctionBuilders.weightFactorFunction(8))); + } + FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()]; filterFunctionBuilders.toArray(builders); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java index 789f4eff..61206531 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java @@ -1,19 +1,20 @@ package cn.lili.controller.promotion; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; import cn.lili.modules.promotion.service.FullDiscountService; -import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 管理端,满额活动接口 @@ -47,4 +48,16 @@ public class FullDiscountManagerController { return ResultUtil.data(fullDiscountService.getFullDiscount(id)); } + @ApiOperation(value = "修改满额活动状态") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "满额活动ID", required = true, paramType = "path"), + @ApiImplicitParam(name = "promotionStatus", value = "满额活动状态", required = true, paramType = "path") + }) + @PutMapping("/status/{id}/{promotionStatus}") + public ResultMessage updateCouponStatus(@PathVariable String id, @PathVariable String promotionStatus) { + if (fullDiscountService.updateFullDiscountStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) { + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } } diff --git a/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java b/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java index da2210d9..8ba124f7 100644 --- a/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java @@ -1,18 +1,20 @@ package cn.lili.controller.promotion; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; -import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.FullDiscount; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; import cn.lili.modules.promotion.service.FullDiscountService; -import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -75,4 +77,18 @@ public class FullDiscountStoreController { return ResultUtil.success(ResultCode.FULL_DISCOUNT_EDIT_DELETE); } + + @ApiOperation(value = "修改满额活动状态") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "满额活动ID", required = true, paramType = "path"), + @ApiImplicitParam(name = "promotionStatus", value = "满额活动状态", required = true, paramType = "path") + }) + @PutMapping("/status/{id}/{promotionStatus}") + public ResultMessage updateCouponStatus(@PathVariable String id, @PathVariable String promotionStatus) { + if (fullDiscountService.updateFullDiscountStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) { + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } + } diff --git a/update-sql/version4.1to4.2.sql b/update-sql/version4.1to4.2.sql index ee0c7839..4082f20f 100644 --- a/update-sql/version4.1to4.2.sql +++ b/update-sql/version4.1to4.2.sql @@ -13,4 +13,10 @@ ALTER TABLE li_promotion_goods ADD goods_type varchar (200); /** 修改历史积分积分类型的字段类型 **/ alter table li_member_points_history modify column point_type varchar(50); update li_member_points_history set point_type = 'INCREASE' where point_type=1; -update li_member_points_history set point_type = 'REDUCE' where point_type=0; \ No newline at end of file +update li_member_points_history set point_type = 'REDUCE' where point_type=0; + +/** 添加分词管理菜单*/ +INSERT INTO `lilishop`.`li_menu` (`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1349247640584085511, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-02-25 09:02:59', 'null', 'customWords/index', 'ios-american-football', 2, 'customWords', '1349237129847005184', 'customWords', 8.00, '分词管理', 'null'); + +/** 修改会员评价店铺图片字段类型 **/ +alter table li_member_evaluation modify column reply_image text; \ No newline at end of file