Merge branch 'master' into Bulbasaur
# Conflicts: # consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java # consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java # framework/src/main/java/cn/lili/common/trigger/delay/AbstractDelayQueueMachineFactory.java # framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java # framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java
This commit is contained in:
commit
a97b698d8e
@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -62,8 +63,8 @@ public class ConnectBuyerWebController {
|
|||||||
|
|
||||||
@ApiOperation(value = "信任登录统一回调地址", hidden = true)
|
@ApiOperation(value = "信任登录统一回调地址", hidden = true)
|
||||||
@GetMapping("/callback/{type}")
|
@GetMapping("/callback/{type}")
|
||||||
public void callBack(@PathVariable String type, AuthCallback callback, HttpServletResponse httpServletResponse) throws IOException {
|
public void callBack(@PathVariable String type, AuthCallback callback, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
|
||||||
connectUtil.callback(type, callback, httpServletResponse);
|
connectUtil.callback(type, callback,httpServletRequest, httpServletResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "信任登录响应结果获取")
|
@ApiOperation(value = "信任登录响应结果获取")
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package cn.lili.timetask.handler.impl.promotion;
|
package cn.lili.timetask.handler.impl.promotion;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
|
||||||
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
|
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
|
||||||
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
|
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
|
||||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||||
import cn.lili.modules.promotion.entity.dos.Seckill;
|
import cn.lili.modules.promotion.entity.dos.Seckill;
|
||||||
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
|
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
|
||||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||||
|
import cn.lili.modules.promotion.entity.vos.CouponVO;
|
||||||
import cn.lili.modules.promotion.entity.vos.PintuanVO;
|
import cn.lili.modules.promotion.entity.vos.PintuanVO;
|
||||||
import cn.lili.modules.promotion.service.*;
|
import cn.lili.modules.promotion.service.*;
|
||||||
import cn.lili.modules.search.service.EsGoodsIndexService;
|
import cn.lili.modules.search.service.EsGoodsIndexService;
|
||||||
@ -18,6 +18,7 @@ import cn.lili.timetask.handler.EveryDayExecute;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||||
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
||||||
@ -34,8 +35,8 @@ import java.util.List;
|
|||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2021/3/18 3:23 下午
|
* @date 2021/3/18 3:23 下午
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
|
|
||||||
public class PromotionEverydayExecute implements EveryDayExecute {
|
public class PromotionEverydayExecute implements EveryDayExecute {
|
||||||
|
|
||||||
//Mongo
|
//Mongo
|
||||||
@ -59,35 +60,137 @@ public class PromotionEverydayExecute implements EveryDayExecute {
|
|||||||
//促销商品
|
//促销商品
|
||||||
@Autowired
|
@Autowired
|
||||||
private PromotionGoodsService promotionGoodsService;
|
private PromotionGoodsService promotionGoodsService;
|
||||||
//设置
|
|
||||||
|
// 系统设置
|
||||||
@Autowired
|
@Autowired
|
||||||
private SettingService settingService;
|
private SettingService settingService;
|
||||||
|
|
||||||
|
//秒杀活动
|
||||||
@Autowired
|
@Autowired
|
||||||
private SeckillService seckillService;
|
private SeckillService seckillService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将已过期的促销活动置为结束
|
* 将已过期的促销活动置为结束
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
|
//mongo查询条件
|
||||||
Query query = new Query();
|
Query query = new Query();
|
||||||
// 结束条件 活动关闭/活动结束
|
//结束条件 活动未关闭/活动未结束
|
||||||
query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name())
|
query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name())
|
||||||
.orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name())));
|
.orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name())));
|
||||||
|
//结束条件 活动结束时间大于当前时间
|
||||||
query.addCriteria(Criteria.where("endTime").lt(new Date()));
|
query.addCriteria(Criteria.where("endTime").lt(new Date()));
|
||||||
|
|
||||||
List<String> promotionIds = new ArrayList<>();
|
//结束满减活动
|
||||||
//关闭满减活动
|
endFullDiscount(query);
|
||||||
endFullDiscount(promotionIds, query);
|
|
||||||
//关闭拼团活动
|
//关闭拼团活动
|
||||||
endPintuan(promotionIds, query);
|
endPintuan(query);
|
||||||
//关闭优惠券
|
|
||||||
endCoupon();
|
//结束优惠券
|
||||||
//每日新增秒杀活动
|
endCoupon(query);
|
||||||
|
|
||||||
|
//定时创建活动
|
||||||
addSeckill();
|
addSeckill();
|
||||||
promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(promotionIds));
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束优惠券活动
|
||||||
|
*
|
||||||
|
* @param query
|
||||||
|
*/
|
||||||
|
private void endCoupon(Query query) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
//关闭优惠券活动
|
||||||
|
List<CouponVO> couponVOS = mongoTemplate.find(query, CouponVO.class);
|
||||||
|
if (!couponVOS.isEmpty()) {
|
||||||
|
List<String> ids = new ArrayList<>();
|
||||||
|
// // 关闭的优惠券活动
|
||||||
|
for (CouponVO vo : couponVOS) {
|
||||||
|
vo.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
|
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
|
||||||
|
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
|
||||||
|
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
|
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mongoTemplate.save(vo);
|
||||||
|
ids.add(vo.getId());
|
||||||
|
}
|
||||||
|
couponService.update(this.getUpdatePromotionWrapper(ids));
|
||||||
|
LambdaUpdateWrapper<MemberCoupon> memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper<MemberCoupon>().in(MemberCoupon::getCouponId, ids).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name());
|
||||||
|
memberCouponService.update(memberCouponLambdaUpdateWrapper);
|
||||||
|
//将活动商品对照表进行结束处理
|
||||||
|
promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(ids));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("优惠券活动关闭错误", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束拼团活动
|
||||||
|
*
|
||||||
|
* @param query
|
||||||
|
*/
|
||||||
|
private void endPintuan(Query query) {
|
||||||
|
try {
|
||||||
|
//关闭拼团活动
|
||||||
|
List<PintuanVO> pintuanVOS = mongoTemplate.find(query, PintuanVO.class);
|
||||||
|
if (!pintuanVOS.isEmpty()) {
|
||||||
|
//准备修改活动的id
|
||||||
|
List<String> ids = new ArrayList<>();
|
||||||
|
for (PintuanVO vo : pintuanVOS) {
|
||||||
|
vo.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
|
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
|
||||||
|
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
|
||||||
|
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
|
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mongoTemplate.save(vo);
|
||||||
|
ids.add(vo.getId());
|
||||||
|
}
|
||||||
|
pintuanService.update(this.getUpdatePromotionWrapper(ids));
|
||||||
|
//将活动商品对照表进行结束处理
|
||||||
|
promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(ids));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("拼团活动关闭错误", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束满减活动
|
||||||
|
*
|
||||||
|
* @param query
|
||||||
|
*/
|
||||||
|
private void endFullDiscount(Query query) {
|
||||||
|
try {
|
||||||
|
//关闭满减活动
|
||||||
|
List<FullDiscountVO> fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class);
|
||||||
|
if (!fullDiscountVOS.isEmpty()) {
|
||||||
|
List<String> ids = new ArrayList<>();
|
||||||
|
//循环活动 关闭活动
|
||||||
|
for (FullDiscountVO vo : fullDiscountVOS) {
|
||||||
|
vo.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
|
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
|
||||||
|
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
|
||||||
|
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
|
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mongoTemplate.save(vo);
|
||||||
|
ids.add(vo.getId());
|
||||||
|
}
|
||||||
|
fullDiscountService.update(this.getUpdatePromotionWrapper(ids));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("满减活动关闭错误", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,76 +201,10 @@ public class PromotionEverydayExecute implements EveryDayExecute {
|
|||||||
private void addSeckill() {
|
private void addSeckill() {
|
||||||
Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name());
|
Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name());
|
||||||
SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class);
|
SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class);
|
||||||
Seckill seckill = new Seckill(30,seckillSetting.getHours(), seckillSetting.getSeckillRule());
|
Seckill seckill = new Seckill(30, seckillSetting.getHours(), seckillSetting.getSeckillRule());
|
||||||
seckillService.saveSeckill(seckill);
|
seckillService.saveSeckill(seckill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改满额活动下的商品
|
|
||||||
*
|
|
||||||
* @param promotionIds 促销活动ID
|
|
||||||
* @param query 查询Wrapper
|
|
||||||
*/
|
|
||||||
private void endFullDiscount(List<String> promotionIds, Query query) {
|
|
||||||
//关闭满减活动
|
|
||||||
List<FullDiscountVO> fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class);
|
|
||||||
if (!fullDiscountVOS.isEmpty()) {
|
|
||||||
List<String> ids = new ArrayList<>();
|
|
||||||
for (FullDiscountVO vo : fullDiscountVOS) {
|
|
||||||
vo.setPromotionStatus(PromotionStatusEnum.END.name());
|
|
||||||
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
|
|
||||||
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
|
|
||||||
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
|
|
||||||
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mongoTemplate.save(vo);
|
|
||||||
ids.add(vo.getId());
|
|
||||||
}
|
|
||||||
fullDiscountService.update(this.getUpdatePromotionWrapper(ids));
|
|
||||||
promotionIds.addAll(ids);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改拼团活动下的商品
|
|
||||||
*
|
|
||||||
* @param promotionIds 促销活动ID
|
|
||||||
* @param query 查询Wrapper
|
|
||||||
*/
|
|
||||||
private void endPintuan(List<String> promotionIds, Query query) {
|
|
||||||
List<PintuanVO> pintuanVOS = mongoTemplate.find(query, PintuanVO.class);
|
|
||||||
if (!pintuanVOS.isEmpty()) {
|
|
||||||
//准备修改活动的id
|
|
||||||
List<String> ids = new ArrayList<>();
|
|
||||||
for (PintuanVO vo : pintuanVOS) {
|
|
||||||
vo.setPromotionStatus(PromotionStatusEnum.END.name());
|
|
||||||
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
|
|
||||||
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
|
|
||||||
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
|
|
||||||
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mongoTemplate.save(vo);
|
|
||||||
ids.add(vo.getId());
|
|
||||||
}
|
|
||||||
pintuanService.update(this.getUpdatePromotionWrapper(ids));
|
|
||||||
promotionIds.addAll(ids);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改优惠券下的商品
|
|
||||||
*/
|
|
||||||
private void endCoupon() {
|
|
||||||
//修改超时的动态时间优惠券的状态
|
|
||||||
LambdaUpdateWrapper<MemberCoupon> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
||||||
lambdaUpdateWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name())
|
|
||||||
.le(MemberCoupon::getEndTime, new DateTime())
|
|
||||||
.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name());
|
|
||||||
memberCouponService.update(lambdaUpdateWrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取促销修改查询条件 修改活动状态
|
* 获取促销修改查询条件 修改活动状态
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
package cn.lili.trigger;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.lili.common.cache.Cache;
|
||||||
|
import cn.lili.common.utils.ThreadPoolUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.DefaultTypedTuple;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 延时队列工厂
|
||||||
|
*
|
||||||
|
* @author paulG
|
||||||
|
* @since 2020/11/7
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
public abstract class AbstractDelayQueueListen {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Cache cache;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 延时队列机器开始运作
|
||||||
|
*/
|
||||||
|
private void startDelayQueueMachine() {
|
||||||
|
log.info("延时队列机器{}开始运作", setDelayQueueName());
|
||||||
|
|
||||||
|
// 监听redis队列
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
// 获取当前时间的时间戳
|
||||||
|
long now = System.currentTimeMillis() / 1000;
|
||||||
|
// 获取当前时间前需要执行的任务列表
|
||||||
|
Set<DefaultTypedTuple> tuples = cache.zRangeByScore(setDelayQueueName(), 0, now);
|
||||||
|
|
||||||
|
// 如果任务不为空
|
||||||
|
if (!CollectionUtils.isEmpty(tuples)) {
|
||||||
|
log.info("执行任务:{}", JSONUtil.toJsonStr(tuples));
|
||||||
|
|
||||||
|
for (DefaultTypedTuple tuple : tuples) {
|
||||||
|
String jobId = (String) tuple.getValue();
|
||||||
|
// 移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务
|
||||||
|
Long num = cache.zRemove(setDelayQueueName(), jobId);
|
||||||
|
// 如果移除成功, 则执行
|
||||||
|
if (num > 0) {
|
||||||
|
ThreadPoolUtil.execute(() -> invoke(jobId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("处理延时任务发生异常,异常原因为{}", e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
// 间隔一秒钟搞一次
|
||||||
|
try {
|
||||||
|
TimeUnit.SECONDS.sleep(5L);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终执行的任务方法
|
||||||
|
*
|
||||||
|
* @param jobId 任务id
|
||||||
|
*/
|
||||||
|
public abstract void invoke(String jobId);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 要实现延时队列的名字
|
||||||
|
*/
|
||||||
|
public abstract String setDelayQueueName();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听队列
|
||||||
|
*/
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
new Thread(this::startDelayQueueMachine).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,9 +2,8 @@ package cn.lili.trigger;
|
|||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.common.cache.Cache;
|
import cn.lili.common.cache.Cache;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTriggerExecutor;
|
|
||||||
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
||||||
import cn.lili.common.trigger.util.TimeTriggerUtil;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.utils.SpringContextUtil;
|
import cn.lili.common.utils.SpringContextUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||||
@ -28,7 +27,7 @@ public class TimeTriggerConsumer implements RocketMQListener<TimeTriggerMsg> {
|
|||||||
@Override
|
@Override
|
||||||
public void onMessage(TimeTriggerMsg timeTriggerMsg) {
|
public void onMessage(TimeTriggerMsg timeTriggerMsg) {
|
||||||
try {
|
try {
|
||||||
String key = TimeTriggerUtil.generateKey(timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getTriggerTime(), timeTriggerMsg.getUniqueKey());
|
String key = DelayQueueTools.generateKey(timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getTriggerTime(), timeTriggerMsg.getUniqueKey());
|
||||||
|
|
||||||
if (cache.get(key) == null) {
|
if (cache.get(key) == null) {
|
||||||
log.info("执行器执行被取消:{} | 任务标识:{}", timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getUniqueKey());
|
log.info("执行器执行被取消:{} | 任务标识:{}", timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getUniqueKey());
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package cn.lili.common.trigger.interfaces;
|
package cn.lili.trigger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 延时任务执行器接口
|
* 延时任务执行器接口
|
@ -1,13 +1,12 @@
|
|||||||
package cn.lili.trigger.executor;
|
package cn.lili.trigger.executor;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
|
import cn.lili.trigger.TimeTriggerExecutor;
|
||||||
import cn.lili.common.trigger.message.PintuanOrderMessage;
|
import cn.lili.common.trigger.message.PintuanOrderMessage;
|
||||||
import cn.lili.common.trigger.message.PromotionMessage;
|
import cn.lili.common.trigger.message.PromotionMessage;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
|
||||||
import cn.lili.common.trigger.interfaces.TimeTriggerExecutor;
|
|
||||||
import cn.lili.common.trigger.model.TimeExecuteConstant;
|
import cn.lili.common.trigger.model.TimeExecuteConstant;
|
||||||
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
||||||
import cn.lili.common.utils.DateUtil;
|
|
||||||
import cn.lili.config.rocketmq.RocketmqCustomProperties;
|
import cn.lili.config.rocketmq.RocketmqCustomProperties;
|
||||||
import cn.lili.modules.order.order.service.OrderService;
|
import cn.lili.modules.order.order.service.OrderService;
|
||||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||||
@ -48,13 +47,21 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
|
|||||||
log.info("促销活动信息消费:{}", promotionMessage);
|
log.info("促销活动信息消费:{}", promotionMessage);
|
||||||
// 如果为促销活动开始,则需要发布促销活动结束的定时任务
|
// 如果为促销活动开始,则需要发布促销活动结束的定时任务
|
||||||
if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) {
|
if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) {
|
||||||
//设置活动关闭时间
|
if (!promotionService.updatePromotionStatus(promotionMessage)) {
|
||||||
setCloseTime(promotionMessage);
|
log.error("开始促销活动失败: {}", promotionMessage);
|
||||||
}
|
return;
|
||||||
//更新促销活动状态
|
}
|
||||||
if (!promotionService.updatePromotionStatus(promotionMessage)) {
|
// 促销活动开始后,设置促销活动结束的定时任务
|
||||||
log.error("开始促销活动失败: {}", promotionMessage);
|
promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||||
return;
|
String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId();
|
||||||
|
// 结束时间(延时一分钟)
|
||||||
|
long closeTime = promotionMessage.getEndTime().getTime() + 60000;
|
||||||
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic());
|
||||||
|
//添加延时任务
|
||||||
|
timeTrigger.addDelay(timeTriggerMsg);
|
||||||
|
} else {
|
||||||
|
//不是开始,则修改活动状态
|
||||||
|
promotionService.updatePromotionStatus(promotionMessage);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -67,22 +74,5 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置促销活动结束时间
|
|
||||||
*
|
|
||||||
* @param promotionMessage 信息队列传输促销信息实体
|
|
||||||
*/
|
|
||||||
private void setCloseTime(PromotionMessage promotionMessage) {
|
|
||||||
//如果设置了活动结束时间则创建促销结束延时任务
|
|
||||||
if(promotionMessage.getEndTime()!=null){
|
|
||||||
// 促销活动开始后,设置促销活动结束的定时任务
|
|
||||||
promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name());
|
|
||||||
String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId();
|
|
||||||
// 结束时间(延时一分钟)
|
|
||||||
long closeTime = promotionMessage.getEndTime().getTime() + 60000;
|
|
||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic());
|
|
||||||
timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(promotionMessage.getEndTime().getTime()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package cn.lili.trigger.listen;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.lili.common.trigger.enums.DelayQueueEnums;
|
||||||
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
|
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
||||||
|
import cn.lili.trigger.AbstractDelayQueueListen;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PromotionTimeTriggerListen
|
||||||
|
*
|
||||||
|
* @author Chopper
|
||||||
|
* @version v1.0
|
||||||
|
* 2021-06-11 10:47
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class PromotionDelayQueueListen extends AbstractDelayQueueListen {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TimeTrigger timeTrigger;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(String jobId) {
|
||||||
|
timeTrigger.execute(JSONUtil.toBean(jobId, TimeTriggerMsg.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setDelayQueueName() {
|
||||||
|
return DelayQueueEnums.PROMOTION_QUEUE.name();
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +1,9 @@
|
|||||||
package cn.lili.common.trigger.delay;
|
package cn.lili.common.trigger.delay;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
|
||||||
import cn.lili.common.cache.Cache;
|
import cn.lili.common.cache.Cache;
|
||||||
import cn.lili.common.utils.ThreadPoolUtil;
|
import cn.lili.common.utils.DateUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.DefaultTypedTuple;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 延时队列工厂
|
* 延时队列工厂
|
||||||
@ -28,83 +20,25 @@ public abstract class AbstractDelayQueueMachineFactory {
|
|||||||
/**
|
/**
|
||||||
* 插入任务id
|
* 插入任务id
|
||||||
*
|
*
|
||||||
* @param jobId 任务id(队列内唯一)
|
* @param jobId 任务id(队列内唯一)
|
||||||
* @param time 延时时间(单位 :秒)
|
* @param triggerTime 执行时间 时间戳(毫秒)
|
||||||
* @return 是否插入成功
|
* @return 是否插入成功
|
||||||
*/
|
*/
|
||||||
public boolean addJob(String jobId, Integer time) {
|
public boolean addJob(String jobId, Long triggerTime) {
|
||||||
//获取时间
|
|
||||||
Calendar instance = Calendar.getInstance();
|
//redis 中排序时间
|
||||||
instance.add(Calendar.SECOND, time);
|
long delaySeconds = triggerTime / 1000;
|
||||||
long delaySeconds = instance.getTimeInMillis() / 1000;
|
|
||||||
//增加延时任务 参数依次为:队列名称、执行时间、任务id
|
//增加延时任务 参数依次为:队列名称、执行时间、任务id
|
||||||
boolean result = cache.zAdd(setDelayQueueName(), delaySeconds, jobId);
|
boolean result = cache.zAdd(setDelayQueueName(), delaySeconds, jobId);
|
||||||
log.info("增加延时任务, 缓存key {}, 等待时间 {}", setDelayQueueName(), time);
|
log.info("增加延时任务, 缓存key {}, 执行时间 {},任务id {}", setDelayQueueName(), DateUtil.toString(triggerTime), jobId);
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 延时队列机器开始运作
|
|
||||||
*/
|
|
||||||
private void startDelayQueueMachine() {
|
|
||||||
log.info("延时队列机器{}开始运作", setDelayQueueName());
|
|
||||||
|
|
||||||
// 监听redis队列
|
|
||||||
while (true) {
|
|
||||||
try {
|
|
||||||
// 获取当前时间的时间戳
|
|
||||||
long now = System.currentTimeMillis() / 1000;
|
|
||||||
// 获取当前时间前的任务列表
|
|
||||||
Set<DefaultTypedTuple> tuples = cache.zRangeByScore(setDelayQueueName(), 0, now);
|
|
||||||
|
|
||||||
// 如果任务不为空
|
|
||||||
if (!CollectionUtils.isEmpty(tuples)) {
|
|
||||||
log.info("执行任务:{}", JSONUtil.toJsonStr(tuples));
|
|
||||||
|
|
||||||
for (DefaultTypedTuple tuple : tuples) {
|
|
||||||
String jobId = (String) tuple.getValue();
|
|
||||||
// 移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务
|
|
||||||
Long num = cache.zRemove(setDelayQueueName(), jobId);
|
|
||||||
// 如果移除成功, 则执行
|
|
||||||
if (num > 0) {
|
|
||||||
ThreadPoolUtil.execute(() -> invoke(jobId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("处理延时任务发生异常,异常原因为{}", e.getMessage(), e);
|
|
||||||
} finally {
|
|
||||||
// 间隔一秒钟搞一次
|
|
||||||
try {
|
|
||||||
TimeUnit.SECONDS.sleep(5L);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
log.error("延时队列机器开始运作错误",e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 最终执行的任务方法
|
|
||||||
*
|
|
||||||
* @param jobId 任务id
|
|
||||||
*/
|
|
||||||
public abstract void invoke(String jobId);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 要实现延时队列的名字
|
* 要实现延时队列的名字
|
||||||
*/
|
*/
|
||||||
public abstract String setDelayQueueName();
|
public abstract String setDelayQueueName();
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
public void init() {
|
|
||||||
new Thread(this::startDelayQueueMachine).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package cn.lili.common.trigger.delay;
|
package cn.lili.common.trigger.delay.queue;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.lili.common.trigger.delay.AbstractDelayQueueMachineFactory;
|
||||||
|
import cn.lili.common.trigger.enums.DelayQueueEnums;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -21,13 +21,8 @@ public class PromotionDelayQueue extends AbstractDelayQueueMachineFactory {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TimeTrigger timeTrigger;
|
private TimeTrigger timeTrigger;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void invoke(String jobId) {
|
|
||||||
timeTrigger.add(JSONUtil.toBean(jobId, TimeTriggerMsg.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String setDelayQueueName() {
|
public String setDelayQueueName() {
|
||||||
return "promotion_delay";
|
return DelayQueueEnums.PROMOTION_QUEUE.name();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package cn.lili.common.trigger.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 队列枚举
|
||||||
|
*/
|
||||||
|
public enum DelayQueueEnums {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 促销任务队列
|
||||||
|
*/
|
||||||
|
PROMOTION_QUEUE("促销任务队列");
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
DelayQueueEnums(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
}
|
@ -5,8 +5,8 @@ package cn.lili.common.trigger.enums;
|
|||||||
*
|
*
|
||||||
* @author paulG
|
* @author paulG
|
||||||
* @since 2021/5/7
|
* @since 2021/5/7
|
||||||
**/
|
*/
|
||||||
public enum DelayQueueType {
|
public enum PromotionDelayTypeEnums {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 促销活动
|
* 促销活动
|
||||||
@ -22,14 +22,10 @@ public enum DelayQueueType {
|
|||||||
*/
|
*/
|
||||||
BROADCAST("直播");
|
BROADCAST("直播");
|
||||||
|
|
||||||
private final String description;
|
private String description;
|
||||||
|
|
||||||
DelayQueueType(String des) {
|
PromotionDelayTypeEnums(String description) {
|
||||||
this.description = des;
|
this.description = description;
|
||||||
}
|
|
||||||
|
|
||||||
public String description() {
|
|
||||||
return this.description;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -9,22 +9,20 @@ import cn.lili.common.trigger.model.TimeTriggerMsg;
|
|||||||
*/
|
*/
|
||||||
public interface TimeTrigger {
|
public interface TimeTrigger {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加延时任务
|
* 添加延时任务
|
||||||
*
|
*
|
||||||
* @param timeTriggerMsg 延时任务信息
|
* @param timeTriggerMsg 延时任务信息
|
||||||
*/
|
*/
|
||||||
void add(TimeTriggerMsg timeTriggerMsg);
|
void addDelay(TimeTriggerMsg timeTriggerMsg);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加延时任务
|
* 执行延时任务
|
||||||
*
|
*
|
||||||
* @param timeTriggerMsg 延时任务信息
|
* @param timeTriggerMsg 延时任务信息
|
||||||
* @param delayTime 延时时间(秒)
|
|
||||||
*/
|
*/
|
||||||
void addDelay(TimeTriggerMsg timeTriggerMsg, int delayTime);
|
void execute(TimeTriggerMsg timeTriggerMsg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改延时任务
|
* 修改延时任务
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package cn.lili.common.trigger;
|
package cn.lili.common.trigger.interfaces.impl;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.common.cache.Cache;
|
import cn.lili.common.cache.Cache;
|
||||||
import cn.lili.common.rocketmq.RocketmqSendCallbackBuilder;
|
import cn.lili.common.rocketmq.RocketmqSendCallbackBuilder;
|
||||||
import cn.lili.common.trigger.delay.PromotionDelayQueue;
|
import cn.lili.common.trigger.delay.queue.PromotionDelayQueue;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
||||||
import cn.lili.common.trigger.util.TimeTriggerUtil;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.utils.DateUtil;
|
import cn.lili.common.utils.DateUtil;
|
||||||
import cn.lili.common.utils.StringUtils;
|
import cn.lili.common.utils.StringUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -34,12 +34,38 @@ public class RocketmqTimerTrigger implements TimeTrigger {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(TimeTriggerMsg timeTriggerMsg) {
|
public void addDelay(TimeTriggerMsg timeTriggerMsg) {
|
||||||
this.addExecute(timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getParam(), timeTriggerMsg.getTriggerTime(), timeTriggerMsg.getUniqueKey(), timeTriggerMsg.getTopic());
|
//执行器唯一key
|
||||||
|
String uniqueKey = timeTriggerMsg.getUniqueKey();
|
||||||
|
if (StringUtils.isEmpty(uniqueKey)) {
|
||||||
|
uniqueKey = StringUtils.getRandStr(10);
|
||||||
|
}
|
||||||
|
//执行任务key
|
||||||
|
String generateKey = DelayQueueTools.generateKey(timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getTriggerTime(), uniqueKey);
|
||||||
|
this.cache.put(generateKey, 1);
|
||||||
|
//设置延时任务
|
||||||
|
if (Boolean.TRUE.equals(promotionDelayQueue.addJob(JSONUtil.toJsonStr(timeTriggerMsg), timeTriggerMsg.getTriggerTime()))) {
|
||||||
|
log.info("延时任务标识: {}", generateKey);
|
||||||
|
log.info("定时执行在【" + DateUtil.toString(timeTriggerMsg.getTriggerTime(), "yyyy-MM-dd HH:mm:ss") + "】,消费【" + timeTriggerMsg.getParam().toString() + "】");
|
||||||
|
} else {
|
||||||
|
log.error("延时任务添加失败:{}", timeTriggerMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(TimeTriggerMsg timeTriggerMsg) {
|
||||||
|
this.addExecute(timeTriggerMsg.getTriggerExecutor(),
|
||||||
|
timeTriggerMsg.getParam(),
|
||||||
|
timeTriggerMsg.getTriggerTime(),
|
||||||
|
timeTriggerMsg.getUniqueKey(),
|
||||||
|
timeTriggerMsg.getTopic()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加延时任务
|
* 将任务添加到mq,mq异步队列执行。
|
||||||
|
* <p>
|
||||||
|
* 本系统中redis相当于延时任务吊起机制,而mq才是实际的业务消费,执行任务的存在
|
||||||
*
|
*
|
||||||
* @param executorName 执行器beanId
|
* @param executorName 执行器beanId
|
||||||
* @param param 执行参数
|
* @param param 执行参数
|
||||||
@ -50,7 +76,7 @@ public class RocketmqTimerTrigger implements TimeTrigger {
|
|||||||
* 业务内全局唯一
|
* 业务内全局唯一
|
||||||
* @param topic rocketmq topic
|
* @param topic rocketmq topic
|
||||||
*/
|
*/
|
||||||
public void addExecute(String executorName, Object param, Long triggerTime, String uniqueKey, String topic) {
|
private void addExecute(String executorName, Object param, Long triggerTime, String uniqueKey, String topic) {
|
||||||
|
|
||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(executorName, triggerTime, param, uniqueKey, topic);
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(executorName, triggerTime, param, uniqueKey, topic);
|
||||||
Message<TimeTriggerMsg> message = MessageBuilder.withPayload(timeTriggerMsg).build();
|
Message<TimeTriggerMsg> message = MessageBuilder.withPayload(timeTriggerMsg).build();
|
||||||
@ -58,34 +84,15 @@ public class RocketmqTimerTrigger implements TimeTrigger {
|
|||||||
this.rocketMQTemplate.asyncSend(topic, message, RocketmqSendCallbackBuilder.commonCallback());
|
this.rocketMQTemplate.asyncSend(topic, message, RocketmqSendCallbackBuilder.commonCallback());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addDelay(TimeTriggerMsg timeTriggerMsg, int delayTime) {
|
|
||||||
//执行器唯一key
|
|
||||||
String uniqueKey = timeTriggerMsg.getUniqueKey();
|
|
||||||
if (StringUtils.isEmpty(uniqueKey)) {
|
|
||||||
uniqueKey = StringUtils.getRandStr(10);
|
|
||||||
}
|
|
||||||
//执行任务key
|
|
||||||
String generateKey = TimeTriggerUtil.generateKey(timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getTriggerTime(), uniqueKey);
|
|
||||||
this.cache.put(generateKey, 1);
|
|
||||||
//设置延时任务
|
|
||||||
if (Boolean.TRUE.equals(promotionDelayQueue.addJob(JSONUtil.toJsonStr(timeTriggerMsg), delayTime))) {
|
|
||||||
log.info("add Redis key {}", generateKey);
|
|
||||||
log.info("定时执行在【" + DateUtil.toString(timeTriggerMsg.getTriggerTime(), "yyyy-MM-dd HH:mm:ss") + "】,消费【" + timeTriggerMsg.getParam().toString() + "】");
|
|
||||||
} else {
|
|
||||||
log.error("延时任务添加失败:{}", timeTriggerMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void edit(String executorName, Object param, Long oldTriggerTime, Long triggerTime, String uniqueKey, int delayTime, String topic) {
|
public void edit(String executorName, Object param, Long oldTriggerTime, Long triggerTime, String uniqueKey, int delayTime, String topic) {
|
||||||
this.delete(executorName, oldTriggerTime, uniqueKey, topic);
|
this.delete(executorName, oldTriggerTime, uniqueKey, topic);
|
||||||
this.addDelay(new TimeTriggerMsg(executorName, triggerTime, param, uniqueKey, topic), delayTime);
|
this.addDelay(new TimeTriggerMsg(executorName, triggerTime, param, uniqueKey, topic));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete(String executorName, Long triggerTime, String uniqueKey, String topic) {
|
public void delete(String executorName, Long triggerTime, String uniqueKey, String topic) {
|
||||||
String generateKey = TimeTriggerUtil.generateKey(executorName, triggerTime, uniqueKey);
|
String generateKey = DelayQueueTools.generateKey(executorName, triggerTime, uniqueKey);
|
||||||
log.info("删除延时任务{}", generateKey);
|
log.info("删除延时任务{}", generateKey);
|
||||||
this.cache.remove(generateKey);
|
this.cache.remove(generateKey);
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package cn.lili.common.trigger.util;
|
package cn.lili.common.trigger.util;
|
||||||
|
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 延时任务工具类
|
* 延时任务工具类
|
||||||
@ -10,6 +10,11 @@ import cn.lili.common.trigger.enums.DelayQueueType;
|
|||||||
**/
|
**/
|
||||||
public class DelayQueueTools {
|
public class DelayQueueTools {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 前缀
|
||||||
|
*/
|
||||||
|
private static final String PREFIX = "{rocketmq_trigger}_";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组装延时任务唯一键
|
* 组装延时任务唯一键
|
||||||
*
|
*
|
||||||
@ -17,8 +22,21 @@ public class DelayQueueTools {
|
|||||||
* @param id id
|
* @param id id
|
||||||
* @return 唯一键
|
* @return 唯一键
|
||||||
*/
|
*/
|
||||||
public static String wrapperUniqueKey(DelayQueueType type, String id) {
|
public static String wrapperUniqueKey(PromotionDelayTypeEnums type, String id) {
|
||||||
return "{TIME_TRIGGER_" + type.name() + "}_" + id;
|
return "{TIME_TRIGGER_" + type.name() + "}_" + id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成延时任务标识key
|
||||||
|
*
|
||||||
|
* @param executorName 执行器beanId
|
||||||
|
* @param triggerTime 执行时间
|
||||||
|
* @param uniqueKey 自定义表示
|
||||||
|
* @return 延时任务标识key
|
||||||
|
*/
|
||||||
|
public static String generateKey(String executorName, Long triggerTime, String uniqueKey) {
|
||||||
|
return PREFIX + (executorName + triggerTime + uniqueKey).hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package cn.lili.common.trigger.util;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 延时任务mq实现内容,提供加密算法以及任务前缀参数
|
|
||||||
*
|
|
||||||
* @author Chopper
|
|
||||||
*/
|
|
||||||
public class TimeTriggerUtil {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 前缀
|
|
||||||
*/
|
|
||||||
private static final String PREFIX = "{rocketmq_trigger}_";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成延时任务标识key
|
|
||||||
*
|
|
||||||
* @param executorName 执行器beanId
|
|
||||||
* @param triggerTime 执行时间
|
|
||||||
* @param uniqueKey 自定义表示
|
|
||||||
* @return 延时任务标识key
|
|
||||||
*/
|
|
||||||
public static String generateKey(String executorName, Long triggerTime, String uniqueKey) {
|
|
||||||
return PREFIX + (executorName + triggerTime + uniqueKey).hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -200,6 +200,15 @@ public class DateUtil {
|
|||||||
public static String toString(Date date) {
|
public static String toString(Date date) {
|
||||||
return toString(date,STANDARD_FORMAT);
|
return toString(date,STANDARD_FORMAT);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 把日期转换成字符串型
|
||||||
|
*
|
||||||
|
* @param Long 日期
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String toString(Long date) {
|
||||||
|
return toString(date,STANDARD_FORMAT);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 把日期转换成字符串型
|
* 把日期转换成字符串型
|
||||||
*
|
*
|
||||||
|
@ -4,9 +4,9 @@ import cn.hutool.json.JSONUtil;
|
|||||||
import cn.lili.common.cache.Cache;
|
import cn.lili.common.cache.Cache;
|
||||||
import cn.lili.common.cache.CachePrefix;
|
import cn.lili.common.cache.CachePrefix;
|
||||||
import cn.lili.common.enums.ResultCode;
|
import cn.lili.common.enums.ResultCode;
|
||||||
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.token.Token;
|
import cn.lili.common.token.Token;
|
||||||
import cn.lili.common.enums.ResultUtil;
|
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
import cn.lili.config.properties.ApiProperties;
|
import cn.lili.config.properties.ApiProperties;
|
||||||
import cn.lili.config.properties.DomainProperties;
|
import cn.lili.config.properties.DomainProperties;
|
||||||
@ -17,6 +17,7 @@ import cn.lili.modules.connect.entity.dto.AuthCallback;
|
|||||||
import cn.lili.modules.connect.entity.dto.AuthResponse;
|
import cn.lili.modules.connect.entity.dto.AuthResponse;
|
||||||
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
|
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
|
||||||
import cn.lili.modules.connect.exception.AuthException;
|
import cn.lili.modules.connect.exception.AuthException;
|
||||||
|
import cn.lili.modules.connect.request.AuthQQRequest;
|
||||||
import cn.lili.modules.connect.request.AuthRequest;
|
import cn.lili.modules.connect.request.AuthRequest;
|
||||||
import cn.lili.modules.connect.request.AuthWeChatPCRequest;
|
import cn.lili.modules.connect.request.AuthWeChatPCRequest;
|
||||||
import cn.lili.modules.connect.request.AuthWeChatRequest;
|
import cn.lili.modules.connect.request.AuthWeChatRequest;
|
||||||
@ -32,8 +33,11 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 联合登陆工具类
|
* 联合登陆工具类
|
||||||
@ -71,9 +75,10 @@ public class ConnectUtil {
|
|||||||
* @param type
|
* @param type
|
||||||
* @param callback
|
* @param callback
|
||||||
* @param httpServletResponse
|
* @param httpServletResponse
|
||||||
|
* @param httpServletRequest
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public void callback(String type, AuthCallback callback, HttpServletResponse httpServletResponse) throws IOException {
|
public void callback(String type, AuthCallback callback, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
|
||||||
AuthRequest authRequest = this.getAuthRequest(type);
|
AuthRequest authRequest = this.getAuthRequest(type);
|
||||||
AuthResponse<ConnectAuthUser> response = authRequest.login(callback);
|
AuthResponse<ConnectAuthUser> response = authRequest.login(callback);
|
||||||
ResultMessage<Object> resultMessage;
|
ResultMessage<Object> resultMessage;
|
||||||
@ -95,8 +100,11 @@ public class ConnectUtil {
|
|||||||
//缓存写入登录结果,300秒有效
|
//缓存写入登录结果,300秒有效
|
||||||
cache.put(CachePrefix.CONNECT_RESULT.getPrefix() + callback.getCode(), resultMessage, 300L);
|
cache.put(CachePrefix.CONNECT_RESULT.getPrefix() + callback.getCode(), resultMessage, 300L);
|
||||||
|
|
||||||
// String url = buyer + "/login?state=" + callback.getCode();
|
//跳转地址
|
||||||
String url = domainProperties.getWap() + "/pages/public/login?state=" + callback.getCode();
|
String url = this.check(httpServletRequest.getHeader("user-agent")) ?
|
||||||
|
domainProperties.getWap() + "/pages/passport/login?state=" + callback.getCode() :
|
||||||
|
domainProperties.getPc() + "/login?state=" + callback.getCode();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
httpServletResponse.sendRedirect(url);
|
httpServletResponse.sendRedirect(url);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -172,7 +180,7 @@ public class ConnectUtil {
|
|||||||
QQConnectSetting qqConnectSetting = JSONUtil.toBean(setting.getSettingValue(), QQConnectSetting.class);
|
QQConnectSetting qqConnectSetting = JSONUtil.toBean(setting.getSettingValue(), QQConnectSetting.class);
|
||||||
for (QQConnectSettingItem qqConnectSettingItem : qqConnectSetting.getQqConnectSettingItemList()) {
|
for (QQConnectSettingItem qqConnectSettingItem : qqConnectSetting.getQqConnectSettingItemList()) {
|
||||||
if (qqConnectSettingItem.getClientType().equals(ClientTypeEnum.PC.name())) {
|
if (qqConnectSettingItem.getClientType().equals(ClientTypeEnum.PC.name())) {
|
||||||
authRequest = new AuthWeChatPCRequest(AuthConfig.builder()
|
authRequest = new AuthQQRequest(AuthConfig.builder()
|
||||||
.clientId(qqConnectSettingItem.getAppId())
|
.clientId(qqConnectSettingItem.getAppId())
|
||||||
.clientSecret(qqConnectSettingItem.getAppKey())
|
.clientSecret(qqConnectSettingItem.getAppKey())
|
||||||
.redirectUri(getRedirectUri(authInterface))
|
.redirectUri(getRedirectUri(authInterface))
|
||||||
@ -223,6 +231,40 @@ public class ConnectUtil {
|
|||||||
return authRequest;
|
return authRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔),
|
||||||
|
// 字符串在编译时会被转码一次,所以是 "\\b"
|
||||||
|
// \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔)
|
||||||
|
static String phoneReg = "\\b(ip(hone|od)|android|opera m(ob|in)i"
|
||||||
|
+ "|windows (phone|ce)|blackberry"
|
||||||
|
+ "|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp"
|
||||||
|
+ "|laystation portable)|nokia|fennec|htc[-_]"
|
||||||
|
+ "|mobile|up.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";
|
||||||
|
static String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser"
|
||||||
|
+ "|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";
|
||||||
|
|
||||||
|
//移动设备正则匹配:手机端、平板
|
||||||
|
static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE);
|
||||||
|
static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测是否是移动设备访问
|
||||||
|
*
|
||||||
|
* @param userAgent 浏览器标识
|
||||||
|
* @return true:移动设备接入,false:pc端接入
|
||||||
|
* @Title: check
|
||||||
|
*/
|
||||||
|
private boolean check(String userAgent) {
|
||||||
|
if (null == userAgent) {
|
||||||
|
userAgent = "";
|
||||||
|
}
|
||||||
|
// 匹配
|
||||||
|
Matcher matcherPhone = phonePat.matcher(userAgent);
|
||||||
|
Matcher matcherTable = tablePat.matcher(userAgent);
|
||||||
|
if (matcherPhone.find() || matcherTable.find()) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,9 +194,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
if (goodsSku == null) {
|
if (goodsSku == null) {
|
||||||
throw new ServiceException("商品已下架");
|
throw new ServiceException("商品已下架");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前商品的索引信息
|
// 获取当前商品的索引信息
|
||||||
EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId);
|
EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId);
|
||||||
if (goodsIndex == null) {
|
if (goodsIndex == null) {
|
||||||
|
@ -11,7 +11,7 @@ import cn.hutool.poi.excel.ExcelUtil;
|
|||||||
import cn.hutool.poi.excel.ExcelWriter;
|
import cn.hutool.poi.excel.ExcelWriter;
|
||||||
import cn.lili.common.aop.syslog.annotation.SystemLogPoint;
|
import cn.lili.common.aop.syslog.annotation.SystemLogPoint;
|
||||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
import cn.lili.common.trigger.message.PintuanOrderMessage;
|
import cn.lili.common.trigger.message.PintuanOrderMessage;
|
||||||
import cn.lili.common.enums.ResultCode;
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
@ -642,11 +642,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
startTime,
|
startTime,
|
||||||
pintuanOrderMessage,
|
pintuanOrderMessage,
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PINTUAN_ORDER, (pintuanId + parentOrderSn)),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PINTUAN_ORDER, (pintuanId + parentOrderSn)),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
this.timeTrigger.addDelay(timeTriggerMsg, cn.lili.common.utils.DateUtil.getDelayTime(startTime));
|
|
||||||
} else if (pintuan.getRequiredNum() <= count) {
|
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||||
//拼团所需人数,小于等于 参团后的人数,则说明成团,所有订单成团
|
}
|
||||||
|
//拼团所需人数,小于等于 参团后的人数,则说明成团,所有订单成团
|
||||||
|
if (pintuan.getRequiredNum() <= count) {
|
||||||
this.pintuanOrderSuccess(list);
|
this.pintuanOrderSuccess(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,10 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
|
|||||||
@Override
|
@Override
|
||||||
public PageData addPageData(PageData pageData) {
|
public PageData addPageData(PageData pageData) {
|
||||||
//如果页面为发布,则关闭其他页面,开启此页面
|
//如果页面为发布,则关闭其他页面,开启此页面
|
||||||
if(pageData.getPageShow().equals(SwitchEnum.OPEN.name())){
|
if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
|
||||||
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
|
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
|
||||||
lambdaUpdateWrapper.eq(PageData::getPageType,pageData.getPageType());
|
lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType());
|
||||||
lambdaUpdateWrapper.eq(PageData::getPageClientType,pageData.getPageClientType());
|
lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType());
|
||||||
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
|
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
|
||||||
this.update(lambdaUpdateWrapper);
|
this.update(lambdaUpdateWrapper);
|
||||||
}
|
}
|
||||||
@ -65,12 +65,14 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
|
|||||||
@Override
|
@Override
|
||||||
public PageData updatePageData(PageData pageData) {
|
public PageData updatePageData(PageData pageData) {
|
||||||
//如果页面为发布,则关闭其他页面,开启此页面
|
//如果页面为发布,则关闭其他页面,开启此页面
|
||||||
if(pageData.getPageShow().equals(SwitchEnum.OPEN.name())){
|
if (pageData.getPageShow() != null && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
|
||||||
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
|
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
|
||||||
lambdaUpdateWrapper.eq(PageData::getPageType,pageData.getPageType());
|
lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType());
|
||||||
lambdaUpdateWrapper.eq(PageData::getPageClientType,pageData.getPageClientType());
|
lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType());
|
||||||
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
|
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
|
||||||
this.update(lambdaUpdateWrapper);
|
this.update(lambdaUpdateWrapper);
|
||||||
|
} else {
|
||||||
|
pageData.setPageShow(SwitchEnum.CLOSE.name());
|
||||||
}
|
}
|
||||||
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
|
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
|
||||||
lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData());
|
lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData());
|
||||||
|
@ -104,10 +104,6 @@ public interface CouponService extends IService<Coupon> {
|
|||||||
void usedCoupon(String couponId, Integer usedNum);
|
void usedCoupon(String couponId, Integer usedNum);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 活动优惠券列表
|
|
||||||
*/
|
|
||||||
IPage<Coupon> activityCoupons();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl;
|
|||||||
|
|
||||||
import cn.hutool.core.text.CharSequenceUtil;
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
import cn.lili.common.trigger.message.PromotionMessage;
|
import cn.lili.common.trigger.message.PromotionMessage;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
@ -89,17 +89,14 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
|||||||
this.updateScopePromotionGoods(coupon);
|
this.updateScopePromotionGoods(coupon);
|
||||||
// 保存到MONGO中
|
// 保存到MONGO中
|
||||||
this.mongoTemplate.save(coupon);
|
this.mongoTemplate.save(coupon);
|
||||||
// 如果是动态时间优惠券不走延时任务
|
PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime());
|
||||||
if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) {
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime());
|
coupon.getStartTime().getTime(),
|
||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
promotionMessage,
|
||||||
coupon.getStartTime().getTime(),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
promotionMessage,
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
// 发送促销活动开始的延时任务
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||||
// 发送促销活动开始的延时任务
|
|
||||||
this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(coupon.getStartTime().getTime()));
|
|
||||||
}
|
|
||||||
return coupon;
|
return coupon;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,17 +111,14 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
|||||||
this.updateScopePromotionGoods(couponVO);
|
this.updateScopePromotionGoods(couponVO);
|
||||||
// 保存到MONGO中
|
// 保存到MONGO中
|
||||||
this.mongoTemplate.save(couponVO);
|
this.mongoTemplate.save(couponVO);
|
||||||
// 如果是动态时间优惠券不走延时任务
|
PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime());
|
||||||
if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) {
|
// 更新延时任务
|
||||||
// 更新延时任务
|
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime());
|
promotionMessage,
|
||||||
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(),
|
||||||
promotionMessage,
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(),
|
DateUtil.getDelayTime(couponVO.getStartTime().getTime()),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
DateUtil.getDelayTime(couponVO.getStartTime().getTime()),
|
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
|
||||||
}
|
|
||||||
return couponVO;
|
return couponVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,18 +138,15 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
|||||||
couponVO.setPromotionStatus(promotionStatus.name());
|
couponVO.setPromotionStatus(promotionStatus.name());
|
||||||
this.updateById(couponVO);
|
this.updateById(couponVO);
|
||||||
this.mongoTemplate.save(couponVO);
|
this.mongoTemplate.save(couponVO);
|
||||||
// 如果是动态时间优惠券不走延时任务
|
if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) {
|
||||||
if (couponVO.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) {
|
PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), couponVO.getStartTime(), couponVO.getEndTime());
|
||||||
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,
|
||||||
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(),
|
||||||
promotionMessage,
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(),
|
DateUtil.getDelayTime(couponVO.getStartTime().getTime()),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
DateUtil.getDelayTime(couponVO.getStartTime().getTime()),
|
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -175,7 +166,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
|||||||
this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), CouponVO.class);
|
this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), CouponVO.class);
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
couponVO.getStartTime().getTime(),
|
couponVO.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -266,53 +257,37 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
|||||||
this.mongoTemplate.save(couponVO);
|
this.mongoTemplate.save(couponVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IPage<Coupon> activityCoupons() {
|
|
||||||
PageVO page = new PageVO();
|
|
||||||
page.setPageSize(9999);
|
|
||||||
page.setPageNumber(1);
|
|
||||||
LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper();
|
|
||||||
queryWrapper.eq(Coupon::getGetType, CouponGetEnum.ACTIVITY.name());
|
|
||||||
return page(PageUtil.initPage(page), queryWrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查优惠券信息是否合法
|
* 检查优惠券信息是否合法
|
||||||
*
|
*
|
||||||
* @param coupon 优惠券信息
|
* @param coupon 优惠券信息
|
||||||
*/
|
*/
|
||||||
private void checkParam(CouponVO coupon) {
|
private void checkParam(CouponVO coupon) {
|
||||||
//判断优惠券领取数量限制
|
|
||||||
if (coupon.getCouponLimitNum() < 0) {
|
if (coupon.getCouponLimitNum() < 0) {
|
||||||
throw new ServiceException("领取限制数量不能为负数");
|
throw new ServiceException("领取限制数量不能为负数");
|
||||||
}
|
}
|
||||||
//领取数量不能超过发放数量
|
|
||||||
if (coupon.getCouponLimitNum() > coupon.getPublishNum()) {
|
if (coupon.getCouponLimitNum() > coupon.getPublishNum()) {
|
||||||
throw new ServiceException("领取限制数量超出发行数量");
|
throw new ServiceException("领取限制数量超出发行数量");
|
||||||
}
|
}
|
||||||
//判断优惠券面额
|
|
||||||
if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name()) && coupon.getPrice() > coupon.getConsumeThreshold()) {
|
if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name()) && coupon.getPrice() > coupon.getConsumeThreshold()) {
|
||||||
throw new ServiceException("优惠券面额必须小于优惠券消费限额");
|
throw new ServiceException("优惠券面额必须小于优惠券消费限额");
|
||||||
} else if (coupon.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) && (coupon.getCouponDiscount() < 0 && coupon.getCouponDiscount() > 10)) {
|
} else if (coupon.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) && (coupon.getCouponDiscount() < 0 && coupon.getCouponDiscount() > 10)) {
|
||||||
throw new ServiceException("优惠券折扣必须小于10且大于0");
|
throw new ServiceException("优惠券折扣必须小于10且大于0");
|
||||||
}
|
}
|
||||||
//判断优惠券时间
|
|
||||||
long nowTime = DateUtil.getDateline() * 1000;
|
|
||||||
if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) {
|
|
||||||
if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) {
|
|
||||||
throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作");
|
|
||||||
}
|
|
||||||
|
|
||||||
PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime());
|
long nowTime = DateUtil.getDateline() * 1000;
|
||||||
//对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态
|
if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) {
|
||||||
this.promotionStatusEmpty(coupon);
|
throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作");
|
||||||
} else {
|
|
||||||
//动态时间优惠券需设置有限期并为活动赠送优惠券
|
|
||||||
if (coupon.getEffectiveDays() == null || coupon.getGetType().equals(CouponGetEnum.FREE.name())) {
|
|
||||||
throw new ServiceException("活动赠送优惠券需设置有限期");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime());
|
||||||
|
|
||||||
this.checkCouponScope(coupon);
|
this.checkCouponScope(coupon);
|
||||||
|
//对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态
|
||||||
|
this.promotionStatusEmpty(coupon);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cn.lili.modules.promotion.serviceimpl;
|
package cn.lili.modules.promotion.serviceimpl;
|
||||||
|
|
||||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
import cn.lili.common.trigger.message.PromotionMessage;
|
import cn.lili.common.trigger.message.PromotionMessage;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
@ -103,10 +103,10 @@ public class FullDiscountServiceImpl extends ServiceImpl<FullDiscountMapper, Ful
|
|||||||
|
|
||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
fullDiscountVO.getStartTime().getTime(), promotionMessage,
|
fullDiscountVO.getStartTime().getTime(), promotionMessage,
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
// 发送促销活动开始的延时任务
|
// 发送促销活动开始的延时任务
|
||||||
this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(fullDiscountVO.getStartTime().getTime()));
|
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||||
return fullDiscountVO;
|
return fullDiscountVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ public class FullDiscountServiceImpl extends ServiceImpl<FullDiscountMapper, Ful
|
|||||||
// 发送更新延时任务
|
// 发送更新延时任务
|
||||||
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, promotionMessage,
|
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, promotionMessage,
|
||||||
fullDiscount.getStartTime().getTime(), fullDiscountVO.getStartTime().getTime(),
|
fullDiscount.getStartTime().getTime(), fullDiscountVO.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
DateUtil.getDelayTime(fullDiscountVO.getStartTime().getTime()),
|
DateUtil.getDelayTime(fullDiscountVO.getStartTime().getTime()),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
return fullDiscountVO;
|
return fullDiscountVO;
|
||||||
@ -186,7 +186,7 @@ public class FullDiscountServiceImpl extends ServiceImpl<FullDiscountMapper, Ful
|
|||||||
this.promotionGoodsService.removePromotionGoods(fullDiscount.getPromotionGoodsList(), PromotionTypeEnum.FULL_DISCOUNT);
|
this.promotionGoodsService.removePromotionGoods(fullDiscount.getPromotionGoodsList(), PromotionTypeEnum.FULL_DISCOUNT);
|
||||||
}
|
}
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, fullDiscount.getStartTime().getTime(),
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, fullDiscount.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.FULL_DISCOUNT.name() + fullDiscount.getId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.FULL_DISCOUNT.name() + fullDiscount.getId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
import cn.lili.common.trigger.message.PromotionMessage;
|
import cn.lili.common.trigger.message.PromotionMessage;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
@ -223,11 +223,10 @@ public class PintuanServiceImpl extends ServiceImpl<PintuanMapper, Pintuan> impl
|
|||||||
promotionMessage,
|
promotionMessage,
|
||||||
pintuanVO.getStartTime().getTime(),
|
pintuanVO.getStartTime().getTime(),
|
||||||
pintuan.getStartTime().getTime(),
|
pintuan.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
DateUtil.getDelayTime(pintuanVO.getStartTime().getTime()),
|
DateUtil.getDelayTime(pintuanVO.getStartTime().getTime()),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,10 +390,10 @@ public class PintuanServiceImpl extends ServiceImpl<PintuanMapper, Pintuan> impl
|
|||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
pintuan.getStartTime().getTime(),
|
pintuan.getStartTime().getTime(),
|
||||||
promotionMessage,
|
promotionMessage,
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
// 发送促销活动开始的延时任务
|
// 发送促销活动开始的延时任务
|
||||||
this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(pintuan.getStartTime().getTime()));
|
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -406,7 +405,7 @@ public class PintuanServiceImpl extends ServiceImpl<PintuanMapper, Pintuan> impl
|
|||||||
private void removePintuanGoodsFromEs(String id, Long originStartTime) {
|
private void removePintuanGoodsFromEs(String id, Long originStartTime) {
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
originStartTime,
|
originStartTime,
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
import cn.lili.common.trigger.message.PromotionMessage;
|
import cn.lili.common.trigger.message.PromotionMessage;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
@ -120,7 +120,7 @@ public class PointsGoodsServiceImpl extends ServiceImpl<PointsGoodsMapper, Point
|
|||||||
promotionMessage,
|
promotionMessage,
|
||||||
pointsGoodsVO.getStartTime().getTime(),
|
pointsGoodsVO.getStartTime().getTime(),
|
||||||
pointsGoods.getStartTime().getTime(),
|
pointsGoods.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
DateUtil.getDelayTime(pointsGoods.getStartTime().getTime()),
|
DateUtil.getDelayTime(pointsGoods.getStartTime().getTime()),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ public class PointsGoodsServiceImpl extends ServiceImpl<PointsGoodsMapper, Point
|
|||||||
this.goodsIndexService.deleteEsGoodsPromotionIndexByList(Collections.singletonList(pointsGoodsVO.getSkuId()), PromotionTypeEnum.POINTS_GOODS);
|
this.goodsIndexService.deleteEsGoodsPromotionIndexByList(Collections.singletonList(pointsGoodsVO.getSkuId()), PromotionTypeEnum.POINTS_GOODS);
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
pointsGoodsVO.getStartTime().getTime(),
|
pointsGoodsVO.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.POINTS_GOODS.name() + pointsGoodsVO.getId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.POINTS_GOODS.name() + pointsGoodsVO.getId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ public class PointsGoodsServiceImpl extends ServiceImpl<PointsGoodsMapper, Point
|
|||||||
PointsGoodsVO pointsGoodsVO = this.checkExist(id);
|
PointsGoodsVO pointsGoodsVO = this.checkExist(id);
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
pointsGoodsVO.getStartTime().getTime(),
|
pointsGoodsVO.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.POINTS_GOODS.name() + pointsGoodsVO.getId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.POINTS_GOODS.name() + pointsGoodsVO.getId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
skuIds.add(pointsGoodsVO.getSkuId());
|
skuIds.add(pointsGoodsVO.getSkuId());
|
||||||
}
|
}
|
||||||
@ -243,10 +243,10 @@ public class PointsGoodsServiceImpl extends ServiceImpl<PointsGoodsMapper, Point
|
|||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
promotionMessage.getStartTime().getTime(),
|
promotionMessage.getStartTime().getTime(),
|
||||||
promotionMessage,
|
promotionMessage,
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
// 发送促销活动开始的延时任务
|
// 发送促销活动开始的延时任务
|
||||||
this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(promotionMessage.getStartTime().getTime()));
|
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cn.lili.modules.promotion.serviceimpl;
|
package cn.lili.modules.promotion.serviceimpl;
|
||||||
|
|
||||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||||
import cn.lili.common.trigger.enums.DelayQueueType;
|
import cn.lili.common.trigger.enums.PromotionDelayTypeEnums;
|
||||||
import cn.lili.common.trigger.message.PromotionMessage;
|
import cn.lili.common.trigger.message.PromotionMessage;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||||
@ -169,7 +169,7 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
|||||||
promotionMessage,
|
promotionMessage,
|
||||||
seckill.getStartTime().getTime(),
|
seckill.getStartTime().getTime(),
|
||||||
seckillVO.getStartTime().getTime(),
|
seckillVO.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
DateUtil.getDelayTime(seckillVO.getStartTime().getTime()),
|
DateUtil.getDelayTime(seckillVO.getStartTime().getTime()),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
}
|
}
|
||||||
@ -190,7 +190,7 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
|||||||
this.promotionGoodsService.update(promotionGoodsQueryWrapper);
|
this.promotionGoodsService.update(promotionGoodsQueryWrapper);
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
seckill.getStartTime().getTime(),
|
seckill.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
} else {
|
} else {
|
||||||
throw new ServiceException("该秒杀活动活动的状态不能删除");
|
throw new ServiceException("该秒杀活动活动的状态不能删除");
|
||||||
@ -233,7 +233,7 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
|||||||
}
|
}
|
||||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
seckillVO.getStartTime().getTime(),
|
seckillVO.getStartTime().getTime(),
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -264,10 +264,10 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
|||||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||||
seckill.getStartTime().getTime(),
|
seckill.getStartTime().getTime(),
|
||||||
promotionMessage,
|
promotionMessage,
|
||||||
DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||||
rocketmqCustomProperties.getPromotionTopic());
|
rocketmqCustomProperties.getPromotionTopic());
|
||||||
// 发送促销活动开始的延时任务
|
// 发送促销活动开始的延时任务
|
||||||
this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(seckill.getStartTime().getTime()));
|
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
package cn.lili.test.trigger;
|
|
||||||
|
|
||||||
import cn.lili.common.cache.Cache;
|
|
||||||
import cn.lili.common.trigger.interfaces.TimeTriggerExecutor;
|
|
||||||
import cn.lili.common.utils.DateUtil;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TestTimeTrigger
|
|
||||||
*
|
|
||||||
* @author Chopper
|
|
||||||
* @version v1.0
|
|
||||||
* @since
|
|
||||||
* 2019-02-19 下午3:01
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class TestTimeTrigger implements TimeTriggerExecutor {
|
|
||||||
|
|
||||||
public static String key = "rabbitmq_test_value";
|
|
||||||
@Autowired
|
|
||||||
private Cache cache;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 执行任务
|
|
||||||
*
|
|
||||||
* @param object 任务参数
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void execute(Object object) {
|
|
||||||
System.out.println(DateUtil.toString(DateUtil.getDateline(), "yyyy-MM-dd HH:mm:ss"));
|
|
||||||
System.out.println(key + "===" + object);
|
|
||||||
cache.put(key, object);
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,6 +3,7 @@ package cn.lili.controller.member;
|
|||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
|
import cn.lili.modules.base.aspect.DemoSite;
|
||||||
import cn.lili.modules.member.entity.dos.Member;
|
import cn.lili.modules.member.entity.dos.Member;
|
||||||
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
|
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
|
||||||
import cn.lili.modules.member.entity.dto.MemberAddDTO;
|
import cn.lili.modules.member.entity.dto.MemberAddDTO;
|
||||||
@ -56,6 +57,7 @@ public class MemberManagerController {
|
|||||||
|
|
||||||
@ApiOperation(value = "修改会员基本信息")
|
@ApiOperation(value = "修改会员基本信息")
|
||||||
@PutMapping
|
@PutMapping
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Member> update(@Valid ManagerMemberEditDTO managerMemberEditDTO) {
|
public ResultMessage<Member> update(@Valid ManagerMemberEditDTO managerMemberEditDTO) {
|
||||||
return ResultUtil.data(memberService.updateMember(managerMemberEditDTO));
|
return ResultUtil.data(memberService.updateMember(managerMemberEditDTO));
|
||||||
}
|
}
|
||||||
@ -66,6 +68,7 @@ public class MemberManagerController {
|
|||||||
@ApiImplicitParam(name = "disabled", required = true, dataType = "boolean", paramType = "query")
|
@ApiImplicitParam(name = "disabled", required = true, dataType = "boolean", paramType = "query")
|
||||||
})
|
})
|
||||||
@PutMapping("/updateMemberStatus")
|
@PutMapping("/updateMemberStatus")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Object> updateMemberStatus(@RequestParam List<String> memberIds, @RequestParam Boolean disabled) {
|
public ResultMessage<Object> updateMemberStatus(@RequestParam List<String> memberIds, @RequestParam Boolean disabled) {
|
||||||
memberService.updateMemberStatus(memberIds, disabled);
|
memberService.updateMemberStatus(memberIds, disabled);
|
||||||
return ResultUtil.success();
|
return ResultUtil.success();
|
||||||
|
@ -3,6 +3,7 @@ package cn.lili.controller.other;
|
|||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
|
import cn.lili.modules.base.aspect.DemoSite;
|
||||||
import cn.lili.modules.page.entity.dos.PageData;
|
import cn.lili.modules.page.entity.dos.PageData;
|
||||||
import cn.lili.modules.page.entity.dto.PageDataDTO;
|
import cn.lili.modules.page.entity.dto.PageDataDTO;
|
||||||
import cn.lili.modules.page.entity.vos.PageDataListVO;
|
import cn.lili.modules.page.entity.vos.PageDataListVO;
|
||||||
@ -49,6 +50,7 @@ public class PageDataManagerController {
|
|||||||
@ApiImplicitParams({
|
@ApiImplicitParams({
|
||||||
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
|
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
|
||||||
})
|
})
|
||||||
|
@DemoSite
|
||||||
@PutMapping("/update/{id}")
|
@PutMapping("/update/{id}")
|
||||||
public ResultMessage<PageData> updatePageData(@Valid PageData pageData, @NotNull @PathVariable String id) {
|
public ResultMessage<PageData> updatePageData(@Valid PageData pageData, @NotNull @PathVariable String id) {
|
||||||
pageData.setId(id);
|
pageData.setId(id);
|
||||||
@ -64,11 +66,13 @@ public class PageDataManagerController {
|
|||||||
@ApiOperation(value = "发布页面")
|
@ApiOperation(value = "发布页面")
|
||||||
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
|
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
|
||||||
@PutMapping("/release/{id}")
|
@PutMapping("/release/{id}")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<PageData> release(@PathVariable String id) {
|
public ResultMessage<PageData> release(@PathVariable String id) {
|
||||||
return ResultUtil.data(pageDataService.releasePageData(id));
|
return ResultUtil.data(pageDataService.releasePageData(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "删除页面")
|
@ApiOperation(value = "删除页面")
|
||||||
|
@DemoSite
|
||||||
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
|
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
|
||||||
@DeleteMapping("/remove/{id}")
|
@DeleteMapping("/remove/{id}")
|
||||||
public ResultMessage<Object> remove(@PathVariable String id) {
|
public ResultMessage<Object> remove(@PathVariable String id) {
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
package cn.lili.controller.passport;
|
package cn.lili.controller.passport;
|
||||||
|
|
||||||
import cn.lili.common.enums.ResultCode;
|
import cn.lili.common.enums.ResultCode;
|
||||||
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.security.AuthUser;
|
import cn.lili.common.security.AuthUser;
|
||||||
import cn.lili.common.security.context.UserContext;
|
import cn.lili.common.security.context.UserContext;
|
||||||
import cn.lili.common.token.Token;
|
import cn.lili.common.token.Token;
|
||||||
import cn.lili.common.utils.PageUtil;
|
import cn.lili.common.utils.PageUtil;
|
||||||
import cn.lili.common.enums.ResultUtil;
|
|
||||||
import cn.lili.common.utils.StringUtils;
|
import cn.lili.common.utils.StringUtils;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
import cn.lili.common.vo.SearchVO;
|
import cn.lili.common.vo.SearchVO;
|
||||||
|
import cn.lili.modules.base.aspect.DemoSite;
|
||||||
import cn.lili.modules.permission.entity.dos.AdminUser;
|
import cn.lili.modules.permission.entity.dos.AdminUser;
|
||||||
import cn.lili.modules.permission.entity.dto.AdminUserDTO;
|
import cn.lili.modules.permission.entity.dto.AdminUserDTO;
|
||||||
import cn.lili.modules.permission.entity.vo.AdminUserVO;
|
import cn.lili.modules.permission.entity.vo.AdminUserVO;
|
||||||
@ -98,6 +99,7 @@ public class AdminUserManagerController {
|
|||||||
|
|
||||||
@PutMapping(value = "/admin/edit")
|
@PutMapping(value = "/admin/edit")
|
||||||
@ApiOperation(value = "超级管理员修改其他管理员资料")
|
@ApiOperation(value = "超级管理员修改其他管理员资料")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Object> edit(AdminUser adminUser,
|
public ResultMessage<Object> edit(AdminUser adminUser,
|
||||||
@RequestParam(required = false) List<String> roles) {
|
@RequestParam(required = false) List<String> roles) {
|
||||||
if (!adminUserService.updateAdminUser(adminUser, roles)) {
|
if (!adminUserService.updateAdminUser(adminUser, roles)) {
|
||||||
@ -115,6 +117,7 @@ public class AdminUserManagerController {
|
|||||||
*/
|
*/
|
||||||
@PutMapping(value = "/editPassword")
|
@PutMapping(value = "/editPassword")
|
||||||
@ApiOperation(value = "修改密码")
|
@ApiOperation(value = "修改密码")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Object> editPassword(String password, String newPassword) {
|
public ResultMessage<Object> editPassword(String password, String newPassword) {
|
||||||
adminUserService.editPassword(password, newPassword);
|
adminUserService.editPassword(password, newPassword);
|
||||||
return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS);
|
return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS);
|
||||||
@ -122,6 +125,7 @@ public class AdminUserManagerController {
|
|||||||
|
|
||||||
@PostMapping(value = "/resetPassword/{ids}")
|
@PostMapping(value = "/resetPassword/{ids}")
|
||||||
@ApiOperation(value = "重置密码")
|
@ApiOperation(value = "重置密码")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Object> resetPassword(@PathVariable List ids) {
|
public ResultMessage<Object> resetPassword(@PathVariable List ids) {
|
||||||
adminUserService.resetPassword(ids);
|
adminUserService.resetPassword(ids);
|
||||||
return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS);
|
return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS);
|
||||||
@ -155,6 +159,7 @@ public class AdminUserManagerController {
|
|||||||
|
|
||||||
@PutMapping(value = "/enable/{userId}")
|
@PutMapping(value = "/enable/{userId}")
|
||||||
@ApiOperation(value = "禁/启 用 用户")
|
@ApiOperation(value = "禁/启 用 用户")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Object> disable(@ApiParam("用户唯一id标识") @PathVariable String userId, Boolean status) {
|
public ResultMessage<Object> disable(@ApiParam("用户唯一id标识") @PathVariable String userId, Boolean status) {
|
||||||
AdminUser user = adminUserService.getById(userId);
|
AdminUser user = adminUserService.getById(userId);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
@ -167,6 +172,7 @@ public class AdminUserManagerController {
|
|||||||
|
|
||||||
@DeleteMapping(value = "/{ids}")
|
@DeleteMapping(value = "/{ids}")
|
||||||
@ApiOperation(value = "批量通过ids删除")
|
@ApiOperation(value = "批量通过ids删除")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Object> delAllByIds(@PathVariable List<String> ids) {
|
public ResultMessage<Object> delAllByIds(@PathVariable List<String> ids) {
|
||||||
adminUserService.deleteCompletely(ids);
|
adminUserService.deleteCompletely(ids);
|
||||||
return ResultUtil.success();
|
return ResultUtil.success();
|
||||||
|
@ -2,6 +2,7 @@ package cn.lili.controller.permission;
|
|||||||
|
|
||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
|
import cn.lili.modules.base.aspect.DemoSite;
|
||||||
import cn.lili.modules.permission.entity.dos.Menu;
|
import cn.lili.modules.permission.entity.dos.Menu;
|
||||||
import cn.lili.modules.permission.entity.dto.MenuSearchParams;
|
import cn.lili.modules.permission.entity.dto.MenuSearchParams;
|
||||||
import cn.lili.modules.permission.entity.vo.MenuVO;
|
import cn.lili.modules.permission.entity.vo.MenuVO;
|
||||||
@ -38,6 +39,7 @@ public class MenuManagerController {
|
|||||||
|
|
||||||
@ApiOperation(value = "添加")
|
@ApiOperation(value = "添加")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Menu> add(Menu menu) {
|
public ResultMessage<Menu> add(Menu menu) {
|
||||||
try {
|
try {
|
||||||
menuService.save(menu);
|
menuService.save(menu);
|
||||||
@ -50,6 +52,8 @@ public class MenuManagerController {
|
|||||||
@ApiImplicitParam(name = "id", value = "菜单ID", required = true, paramType = "path", dataType = "String")
|
@ApiImplicitParam(name = "id", value = "菜单ID", required = true, paramType = "path", dataType = "String")
|
||||||
@ApiOperation(value = "编辑")
|
@ApiOperation(value = "编辑")
|
||||||
@PutMapping(value = "/{id}")
|
@PutMapping(value = "/{id}")
|
||||||
|
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Menu> edit(@PathVariable String id, Menu menu) {
|
public ResultMessage<Menu> edit(@PathVariable String id, Menu menu) {
|
||||||
menu.setId(id);
|
menu.setId(id);
|
||||||
menuService.updateById(menu);
|
menuService.updateById(menu);
|
||||||
@ -58,6 +62,7 @@ public class MenuManagerController {
|
|||||||
|
|
||||||
@ApiOperation(value = "批量删除")
|
@ApiOperation(value = "批量删除")
|
||||||
@DeleteMapping(value = "/{ids}")
|
@DeleteMapping(value = "/{ids}")
|
||||||
|
@DemoSite
|
||||||
public ResultMessage<Menu> delByIds(@PathVariable List<String> ids) {
|
public ResultMessage<Menu> delByIds(@PathVariable List<String> ids) {
|
||||||
menuService.deleteIds(ids);
|
menuService.deleteIds(ids);
|
||||||
return ResultUtil.success();
|
return ResultUtil.success();
|
||||||
|
@ -3,6 +3,7 @@ package cn.lili.controller.store;
|
|||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
|
import cn.lili.modules.base.aspect.DemoSite;
|
||||||
import cn.lili.modules.goods.entity.vos.CategoryVO;
|
import cn.lili.modules.goods.entity.vos.CategoryVO;
|
||||||
import cn.lili.modules.store.entity.dos.Store;
|
import cn.lili.modules.store.entity.dos.Store;
|
||||||
import cn.lili.modules.store.entity.dto.AdminStoreApplyDTO;
|
import cn.lili.modules.store.entity.dto.AdminStoreApplyDTO;
|
||||||
@ -90,6 +91,8 @@ public class StoreManagerController {
|
|||||||
return ResultUtil.success();
|
return ResultUtil.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@DemoSite
|
||||||
@ApiOperation(value = "关闭店铺")
|
@ApiOperation(value = "关闭店铺")
|
||||||
@ApiImplicitParam(name = "id", value = "店铺id", required = true, dataType = "String", paramType = "path")
|
@ApiImplicitParam(name = "id", value = "店铺id", required = true, dataType = "String", paramType = "path")
|
||||||
@PutMapping(value = "/disable/{id}")
|
@PutMapping(value = "/disable/{id}")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user