进行中的满减活动可以关闭

This commit is contained in:
lifenlong 2021-07-21 15:13:50 +08:00
parent b851de488b
commit dd491e38e5
4 changed files with 95 additions and 29 deletions

View File

@ -1,9 +1,10 @@
package cn.lili.modules.promotion.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.promotion.entity.dos.FullDiscount;
import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams;
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 com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@ -17,14 +18,6 @@ import java.util.List;
*/
public interface FullDiscountService extends IService<FullDiscount> {
/**
* 当前满优惠活动
*
* @param storeId 商家编号
* @return 满优惠活动信息
*/
FullDiscountVO currentPromotion(String storeId);
/**
* 当前满优惠活动
*
@ -53,8 +46,8 @@ public interface FullDiscountService extends IService<FullDiscount> {
/**
* 从mongo中分页获取满优惠列表
*
* @param searchParams 搜索参数
* @param page 分页参数
* @param searchParams 搜索参数
* @param page 分页参数
* @return 满优惠列表
*/
IPage<FullDiscountVO> getFullDiscountByPageFromMongo(FullDiscountSearchParams searchParams, PageVO page);
@ -84,4 +77,13 @@ public interface FullDiscountService extends IService<FullDiscount> {
*/
boolean deleteFullDiscount(String id);
/**
* 更新满额活动状态
*
* @param id 优惠券编号
* @param promotionStatus 促销状态
* @return 更新结果
*/
boolean updateFullDiscountStatus(String id, PromotionStatusEnum promotionStatus);
}

View File

@ -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<FullDiscountMapper, Ful
@Autowired
private PromotionGoodsService promotionGoodsService;
@Override
public FullDiscountVO currentPromotion(String storeId) {
Query query = this.getMongoQuery();
query.addCriteria(Criteria.where(SELLER_ID_COLUMN).is(storeId));
return mongoTemplate.findOne(query, FullDiscountVO.class);
}
@Override
public List<FullDiscountVO> currentPromotion(List<String> storeId) {
Query query = this.getMongoQuery();
@ -203,6 +196,48 @@ public class FullDiscountServiceImpl extends ServiceImpl<FullDiscountMapper, Ful
return result;
}
@Override
public boolean updateFullDiscountStatus(String id, PromotionStatusEnum promotionStatus) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(id));
List<FullDiscountVO> 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;
}
/**
* 检查满优惠活动是否存在
*

View File

@ -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<Object> updateCouponStatus(@PathVariable String id, @PathVariable String promotionStatus) {
if (fullDiscountService.updateFullDiscountStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) {
return ResultUtil.success(ResultCode.SUCCESS);
}
return ResultUtil.error(ResultCode.ERROR);
}
}

View File

@ -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<Object> updateCouponStatus(@PathVariable String id, @PathVariable String promotionStatus) {
if (fullDiscountService.updateFullDiscountStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) {
return ResultUtil.success(ResultCode.SUCCESS);
}
return ResultUtil.error(ResultCode.ERROR);
}
}