diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java index 807d09dd..03efbbc9 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java @@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -62,8 +63,8 @@ public class ConnectBuyerWebController { @ApiOperation(value = "信任登录统一回调地址", hidden = true) @GetMapping("/callback/{type}") - public void callBack(@PathVariable String type, AuthCallback callback, HttpServletResponse httpServletResponse) throws IOException { - connectUtil.callback(type, callback, httpServletResponse); + public void callBack(@PathVariable String type, AuthCallback callback, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + connectUtil.callback(type, callback,httpServletRequest, httpServletResponse); } @ApiOperation(value = "信任登录响应结果获取") diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index e75dac32..b8f6686c 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -1,12 +1,12 @@ 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.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; 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.service.*; 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.UpdateWrapper; import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -34,8 +35,8 @@ import java.util.List; * @author Chopper * @date 2021/3/18 3:23 下午 */ +@Slf4j @Component - public class PromotionEverydayExecute implements EveryDayExecute { //Mongo @@ -59,35 +60,137 @@ public class PromotionEverydayExecute implements EveryDayExecute { //促销商品 @Autowired private PromotionGoodsService promotionGoodsService; - //设置 + + // 系统设置 @Autowired private SettingService settingService; + + //秒杀活动 @Autowired private SeckillService seckillService; - /** * 将已过期的促销活动置为结束 */ @Override public void execute() { - + //mongo查询条件 Query query = new Query(); -// 结束条件 活动关闭/活动结束 + //结束条件 活动未关闭/活动未结束 query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name()) .orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name()))); + //结束条件 活动结束时间大于当前时间 query.addCriteria(Criteria.where("endTime").lt(new Date())); - List promotionIds = new ArrayList<>(); - //关闭满减活动 - endFullDiscount(promotionIds, query); + //结束满减活动 + endFullDiscount(query); + //关闭拼团活动 - endPintuan(promotionIds, query); - //关闭优惠券 - endCoupon(); - //每日新增秒杀活动 + endPintuan(query); + + //结束优惠券 + endCoupon(query); + + //定时创建活动 addSeckill(); - promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(promotionIds)); + + } + + /** + * 结束优惠券活动 + * + * @param query + */ + private void endCoupon(Query query) { + + try { + //关闭优惠券活动 + List couponVOS = mongoTemplate.find(query, CouponVO.class); + if (!couponVOS.isEmpty()) { + List 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 memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper().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 pintuanVOS = mongoTemplate.find(query, PintuanVO.class); + if (!pintuanVOS.isEmpty()) { + //准备修改活动的id + List 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 fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); + if (!fullDiscountVOS.isEmpty()) { + List 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() { Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); 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); } - /** - * 修改满额活动下的商品 - * - * @param promotionIds 促销活动ID - * @param query 查询Wrapper - */ - private void endFullDiscount(List promotionIds, Query query) { - //关闭满减活动 - List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); - if (!fullDiscountVOS.isEmpty()) { - List 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 promotionIds, Query query) { - List pintuanVOS = mongoTemplate.find(query, PintuanVO.class); - if (!pintuanVOS.isEmpty()) { - //准备修改活动的id - List 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 lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) - .le(MemberCoupon::getEndTime, new DateTime()) - .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - memberCouponService.update(lambdaUpdateWrapper); - } - /** * 获取促销修改查询条件 修改活动状态 * diff --git a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java new file mode 100644 index 00000000..6c539183 --- /dev/null +++ b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java @@ -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 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(); + } + +} diff --git a/consumer/src/main/java/cn/lili/trigger/TimeTriggerConsumer.java b/consumer/src/main/java/cn/lili/trigger/TimeTriggerConsumer.java index 32e816a5..f0910140 100644 --- a/consumer/src/main/java/cn/lili/trigger/TimeTriggerConsumer.java +++ b/consumer/src/main/java/cn/lili/trigger/TimeTriggerConsumer.java @@ -2,9 +2,8 @@ package cn.lili.trigger; import cn.hutool.json.JSONUtil; 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.util.TimeTriggerUtil; +import cn.lili.common.trigger.util.DelayQueueTools; import cn.lili.common.utils.SpringContextUtil; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -28,7 +27,7 @@ public class TimeTriggerConsumer implements RocketMQListener { @Override public void onMessage(TimeTriggerMsg timeTriggerMsg) { 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) { log.info("执行器执行被取消:{} | 任务标识:{}", timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getUniqueKey()); diff --git a/framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/TimeTriggerExecutor.java similarity index 83% rename from framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTriggerExecutor.java rename to consumer/src/main/java/cn/lili/trigger/TimeTriggerExecutor.java index f378852c..0a086060 100644 --- a/framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/TimeTriggerExecutor.java @@ -1,4 +1,4 @@ -package cn.lili.common.trigger.interfaces; +package cn.lili.trigger; /** * 延时任务执行器接口 diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index 68e6aeb3..211c9bde 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -1,13 +1,12 @@ package cn.lili.trigger.executor; 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.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.TimeTriggerMsg; -import cn.lili.common.utils.DateUtil; import cn.lili.config.rocketmq.RocketmqCustomProperties; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; @@ -48,13 +47,21 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { log.info("促销活动信息消费:{}", promotionMessage); // 如果为促销活动开始,则需要发布促销活动结束的定时任务 if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { - //设置活动关闭时间 - setCloseTime(promotionMessage); - } - //更新促销活动状态 - if (!promotionService.updatePromotionStatus(promotionMessage)) { - log.error("开始促销活动失败: {}", promotionMessage); - return; + if (!promotionService.updatePromotionStatus(promotionMessage)) { + log.error("开始促销活动失败: {}", promotionMessage); + return; + } + // 促销活动开始后,设置促销活动结束的定时任务 + 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); + } else { + //不是开始,则修改活动状态 + promotionService.updatePromotionStatus(promotionMessage); } 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())); - } - } } diff --git a/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java new file mode 100644 index 00000000..08091c68 --- /dev/null +++ b/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java @@ -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(); + } +} diff --git a/framework/src/main/java/cn/lili/common/trigger/delay/AbstractDelayQueueMachineFactory.java b/framework/src/main/java/cn/lili/common/trigger/delay/AbstractDelayQueueMachineFactory.java index 3c94e79d..a2018a92 100644 --- a/framework/src/main/java/cn/lili/common/trigger/delay/AbstractDelayQueueMachineFactory.java +++ b/framework/src/main/java/cn/lili/common/trigger/delay/AbstractDelayQueueMachineFactory.java @@ -1,17 +1,9 @@ package cn.lili.common.trigger.delay; -import cn.hutool.json.JSONUtil; import cn.lili.common.cache.Cache; -import cn.lili.common.utils.ThreadPoolUtil; +import cn.lili.common.utils.DateUtil; 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.Calendar; -import java.util.Set; -import java.util.concurrent.TimeUnit; /** * 延时队列工厂 @@ -28,83 +20,25 @@ public abstract class AbstractDelayQueueMachineFactory { /** * 插入任务id * - * @param jobId 任务id(队列内唯一) - * @param time 延时时间(单位 :秒) + * @param jobId 任务id(队列内唯一) + * @param triggerTime 执行时间 时间戳(毫秒) * @return 是否插入成功 */ - public boolean addJob(String jobId, Integer time) { - //获取时间 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.SECOND, time); - long delaySeconds = instance.getTimeInMillis() / 1000; + public boolean addJob(String jobId, Long triggerTime) { + + //redis 中排序时间 + long delaySeconds = triggerTime / 1000; //增加延时任务 参数依次为:队列名称、执行时间、任务id boolean result = cache.zAdd(setDelayQueueName(), delaySeconds, jobId); - log.info("增加延时任务, 缓存key {}, 等待时间 {}", setDelayQueueName(), time); + log.info("增加延时任务, 缓存key {}, 执行时间 {},任务id {}", setDelayQueueName(), DateUtil.toString(triggerTime), jobId); return result; } - /** - * 延时队列机器开始运作 - */ - private void startDelayQueueMachine() { - log.info("延时队列机器{}开始运作", setDelayQueueName()); - - // 监听redis队列 - while (true) { - try { - // 获取当前时间的时间戳 - long now = System.currentTimeMillis() / 1000; - // 获取当前时间前的任务列表 - Set 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(); - - @PostConstruct - public void init() { - new Thread(this::startDelayQueueMachine).start(); - } - } diff --git a/framework/src/main/java/cn/lili/common/trigger/delay/PromotionDelayQueue.java b/framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java similarity index 63% rename from framework/src/main/java/cn/lili/common/trigger/delay/PromotionDelayQueue.java rename to framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java index 792e77eb..2a072375 100644 --- a/framework/src/main/java/cn/lili/common/trigger/delay/PromotionDelayQueue.java +++ b/framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java @@ -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.model.TimeTriggerMsg; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -21,13 +21,8 @@ public class PromotionDelayQueue extends AbstractDelayQueueMachineFactory { @Autowired private TimeTrigger timeTrigger; - @Override - public void invoke(String jobId) { - timeTrigger.add(JSONUtil.toBean(jobId, TimeTriggerMsg.class)); - } - @Override public String setDelayQueueName() { - return "promotion_delay"; + return DelayQueueEnums.PROMOTION_QUEUE.name(); } } diff --git a/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java b/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java new file mode 100644 index 00000000..6bfc8618 --- /dev/null +++ b/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java @@ -0,0 +1,19 @@ +package cn.lili.common.trigger.enums; + +/** + * 队列枚举 + */ +public enum DelayQueueEnums { + + + /** + * 促销任务队列 + */ + PROMOTION_QUEUE("促销任务队列"); + + private String description; + + DelayQueueEnums(String description) { + this.description = description; + } +} diff --git a/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueType.java b/framework/src/main/java/cn/lili/common/trigger/enums/PromotionDelayTypeEnums.java similarity index 59% rename from framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueType.java rename to framework/src/main/java/cn/lili/common/trigger/enums/PromotionDelayTypeEnums.java index 9466a443..b77f743b 100644 --- a/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueType.java +++ b/framework/src/main/java/cn/lili/common/trigger/enums/PromotionDelayTypeEnums.java @@ -5,8 +5,8 @@ package cn.lili.common.trigger.enums; * * @author paulG * @since 2021/5/7 - **/ -public enum DelayQueueType { + */ +public enum PromotionDelayTypeEnums { /** * 促销活动 @@ -22,14 +22,10 @@ public enum DelayQueueType { */ BROADCAST("直播"); - private final String description; + private String description; - DelayQueueType(String des) { - this.description = des; - } - - public String description() { - return this.description; + PromotionDelayTypeEnums(String description) { + this.description = description; } } diff --git a/framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTrigger.java b/framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTrigger.java index 9298b1ec..820314ae 100644 --- a/framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTrigger.java +++ b/framework/src/main/java/cn/lili/common/trigger/interfaces/TimeTrigger.java @@ -9,22 +9,20 @@ import cn.lili.common.trigger.model.TimeTriggerMsg; */ public interface TimeTrigger { - /** * 添加延时任务 * * @param timeTriggerMsg 延时任务信息 */ - void add(TimeTriggerMsg timeTriggerMsg); + void addDelay(TimeTriggerMsg timeTriggerMsg); /** - * 添加延时任务 + * 执行延时任务 * * @param timeTriggerMsg 延时任务信息 - * @param delayTime 延时时间(秒) */ - void addDelay(TimeTriggerMsg timeTriggerMsg, int delayTime); + void execute(TimeTriggerMsg timeTriggerMsg); /** * 修改延时任务 diff --git a/framework/src/main/java/cn/lili/common/trigger/RocketmqTimerTrigger.java b/framework/src/main/java/cn/lili/common/trigger/interfaces/impl/RocketmqTimerTrigger.java similarity index 74% rename from framework/src/main/java/cn/lili/common/trigger/RocketmqTimerTrigger.java rename to framework/src/main/java/cn/lili/common/trigger/interfaces/impl/RocketmqTimerTrigger.java index 009e0f5f..b6589bc1 100644 --- a/framework/src/main/java/cn/lili/common/trigger/RocketmqTimerTrigger.java +++ b/framework/src/main/java/cn/lili/common/trigger/interfaces/impl/RocketmqTimerTrigger.java @@ -1,12 +1,12 @@ -package cn.lili.common.trigger; +package cn.lili.common.trigger.interfaces.impl; import cn.hutool.json.JSONUtil; import cn.lili.common.cache.Cache; 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.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.StringUtils; import lombok.extern.slf4j.Slf4j; @@ -34,12 +34,38 @@ public class RocketmqTimerTrigger implements TimeTrigger { @Override - public void add(TimeTriggerMsg timeTriggerMsg) { - this.addExecute(timeTriggerMsg.getTriggerExecutor(), timeTriggerMsg.getParam(), timeTriggerMsg.getTriggerTime(), timeTriggerMsg.getUniqueKey(), timeTriggerMsg.getTopic()); + public void addDelay(TimeTriggerMsg timeTriggerMsg) { + //执行器唯一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异步队列执行。 + *

+ * 本系统中redis相当于延时任务吊起机制,而mq才是实际的业务消费,执行任务的存在 * * @param executorName 执行器beanId * @param param 执行参数 @@ -50,7 +76,7 @@ public class RocketmqTimerTrigger implements TimeTrigger { * 业务内全局唯一 * @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); Message message = MessageBuilder.withPayload(timeTriggerMsg).build(); @@ -58,34 +84,15 @@ public class RocketmqTimerTrigger implements TimeTrigger { 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 public void edit(String executorName, Object param, Long oldTriggerTime, Long triggerTime, String uniqueKey, int delayTime, String 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 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); this.cache.remove(generateKey); } diff --git a/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java b/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java index 640719f9..e5055eda 100644 --- a/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java +++ b/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java @@ -1,6 +1,6 @@ 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 { + /** + * 前缀 + */ + private static final String PREFIX = "{rocketmq_trigger}_"; + /** * 组装延时任务唯一键 * @@ -17,8 +22,21 @@ public class DelayQueueTools { * @param id id * @return 唯一键 */ - public static String wrapperUniqueKey(DelayQueueType type, String id) { + public static String wrapperUniqueKey(PromotionDelayTypeEnums type, String 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(); + } + } diff --git a/framework/src/main/java/cn/lili/common/trigger/util/TimeTriggerUtil.java b/framework/src/main/java/cn/lili/common/trigger/util/TimeTriggerUtil.java deleted file mode 100644 index 7475c10d..00000000 --- a/framework/src/main/java/cn/lili/common/trigger/util/TimeTriggerUtil.java +++ /dev/null @@ -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(); - } - - -} diff --git a/framework/src/main/java/cn/lili/common/utils/DateUtil.java b/framework/src/main/java/cn/lili/common/utils/DateUtil.java index c6ed8b0b..cb86f07c 100644 --- a/framework/src/main/java/cn/lili/common/utils/DateUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/DateUtil.java @@ -200,6 +200,15 @@ public class DateUtil { public static String toString(Date date) { return toString(date,STANDARD_FORMAT); } + /** + * 把日期转换成字符串型 + * + * @param Long 日期 + * @return + */ + public static String toString(Long date) { + return toString(date,STANDARD_FORMAT); + } /** * 把日期转换成字符串型 * diff --git a/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java b/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java index e93a3a25..30854584 100644 --- a/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java +++ b/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java @@ -4,9 +4,9 @@ import cn.hutool.json.JSONUtil; import cn.lili.common.cache.Cache; import cn.lili.common.cache.CachePrefix; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.token.Token; -import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.config.properties.ApiProperties; 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.ConnectAuthUser; 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.AuthWeChatPCRequest; 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.stereotype.Component; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * 联合登陆工具类 @@ -71,9 +75,10 @@ public class ConnectUtil { * @param type * @param callback * @param httpServletResponse + * @param httpServletRequest * @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); AuthResponse response = authRequest.login(callback); ResultMessage resultMessage; @@ -95,8 +100,11 @@ public class ConnectUtil { //缓存写入登录结果,300秒有效 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 { httpServletResponse.sendRedirect(url); } catch (Exception e) { @@ -172,7 +180,7 @@ public class ConnectUtil { QQConnectSetting qqConnectSetting = JSONUtil.toBean(setting.getSettingValue(), QQConnectSetting.class); for (QQConnectSettingItem qqConnectSettingItem : qqConnectSetting.getQqConnectSettingItemList()) { if (qqConnectSettingItem.getClientType().equals(ClientTypeEnum.PC.name())) { - authRequest = new AuthWeChatPCRequest(AuthConfig.builder() + authRequest = new AuthQQRequest(AuthConfig.builder() .clientId(qqConnectSettingItem.getAppId()) .clientSecret(qqConnectSettingItem.getAppKey()) .redirectUri(getRedirectUri(authInterface)) @@ -223,6 +231,40 @@ public class ConnectUtil { 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; + } + } } diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index 5db2536b..6529d7a0 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -194,9 +194,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i if (goodsSku == null) { throw new ServiceException("商品已下架"); } - } - // 获取当前商品的索引信息 EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId); if (goodsIndex == null) { diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index c83a7083..dc66f080 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -11,7 +11,7 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.lili.common.aop.syslog.annotation.SystemLogPoint; 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.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -642,11 +642,13 @@ public class OrderServiceImpl extends ServiceImpl implements TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, startTime, pintuanOrderMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PINTUAN_ORDER, (pintuanId + parentOrderSn)), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PINTUAN_ORDER, (pintuanId + parentOrderSn)), 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); } } diff --git a/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java index 9db2181d..60a14f62 100644 --- a/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java @@ -51,10 +51,10 @@ public class PageDataServiceImpl extends ServiceImpl i @Override public PageData addPageData(PageData pageData) { //如果页面为发布,则关闭其他页面,开启此页面 - if(pageData.getPageShow().equals(SwitchEnum.OPEN.name())){ + if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) { LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); - lambdaUpdateWrapper.eq(PageData::getPageType,pageData.getPageType()); - lambdaUpdateWrapper.eq(PageData::getPageClientType,pageData.getPageClientType()); + lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType()); + lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType()); lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name()); this.update(lambdaUpdateWrapper); } @@ -65,12 +65,14 @@ public class PageDataServiceImpl extends ServiceImpl i @Override public PageData updatePageData(PageData pageData) { //如果页面为发布,则关闭其他页面,开启此页面 - if(pageData.getPageShow().equals(SwitchEnum.OPEN.name())){ + if (pageData.getPageShow() != null && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) { LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); - lambdaUpdateWrapper.eq(PageData::getPageType,pageData.getPageType()); - lambdaUpdateWrapper.eq(PageData::getPageClientType,pageData.getPageClientType()); + lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType()); + lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType()); lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name()); this.update(lambdaUpdateWrapper); + } else { + pageData.setPageShow(SwitchEnum.CLOSE.name()); } LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData()); diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java index a3b95f8d..02b3d4b1 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java @@ -104,10 +104,6 @@ public interface CouponService extends IService { void usedCoupon(String couponId, Integer usedNum); - /** - * 活动优惠券列表 - */ - IPage activityCoupons(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 39bbbfb4..6a7fd73c 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; 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.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; @@ -89,17 +89,14 @@ public class CouponServiceImpl extends ServiceImpl impleme this.updateScopePromotionGoods(coupon); // 保存到MONGO中 this.mongoTemplate.save(coupon); - // 如果是动态时间优惠券不走延时任务 - if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { - PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - coupon.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(coupon.getStartTime().getTime())); - } + PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + coupon.getStartTime().getTime(), + promotionMessage, + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg); return coupon; } @@ -114,17 +111,14 @@ public class CouponServiceImpl extends ServiceImpl impleme this.updateScopePromotionGoods(couponVO); // 保存到MONGO中 this.mongoTemplate.save(couponVO); - // 如果是动态时间优惠券不走延时任务 - if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { - // 更新延时任务 - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } + PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); + // 更新延时任务 + this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage, + coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DateUtil.getDelayTime(couponVO.getStartTime().getTime()), + rocketmqCustomProperties.getPromotionTopic()); return couponVO; } @@ -144,18 +138,15 @@ public class CouponServiceImpl extends ServiceImpl impleme couponVO.setPromotionStatus(promotionStatus.name()); this.updateById(couponVO); this.mongoTemplate.save(couponVO); - // 如果是动态时间优惠券不走延时任务 - if (couponVO.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { - if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) { - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), couponVO.getStartTime(), couponVO.getEndTime()); - // 更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } + if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) { + PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), couponVO.getStartTime(), couponVO.getEndTime()); + // 更新延时任务 + this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage, + couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DateUtil.getDelayTime(couponVO.getStartTime().getTime()), + rocketmqCustomProperties.getPromotionTopic()); } } return true; @@ -175,7 +166,7 @@ public class CouponServiceImpl extends ServiceImpl impleme this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), CouponVO.class); this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())), rocketmqCustomProperties.getPromotionTopic()); return result; } @@ -266,53 +257,37 @@ public class CouponServiceImpl extends ServiceImpl impleme this.mongoTemplate.save(couponVO); } - @Override - public IPage activityCoupons() { - PageVO page = new PageVO(); - page.setPageSize(9999); - page.setPageNumber(1); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(Coupon::getGetType, CouponGetEnum.ACTIVITY.name()); - return page(PageUtil.initPage(page), queryWrapper); - } - /** * 检查优惠券信息是否合法 * * @param coupon 优惠券信息 */ private void checkParam(CouponVO coupon) { - //判断优惠券领取数量限制 + if (coupon.getCouponLimitNum() < 0) { throw new ServiceException("领取限制数量不能为负数"); } - //领取数量不能超过发放数量 + if (coupon.getCouponLimitNum() > coupon.getPublishNum()) { throw new ServiceException("领取限制数量超出发行数量"); } - //判断优惠券面额 + if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name()) && coupon.getPrice() > coupon.getConsumeThreshold()) { throw new ServiceException("优惠券面额必须小于优惠券消费限额"); } else if (coupon.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) && (coupon.getCouponDiscount() < 0 && coupon.getCouponDiscount() > 10)) { 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()); - //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 - this.promotionStatusEmpty(coupon); - } else { - //动态时间优惠券需设置有限期并为活动赠送优惠券 - if (coupon.getEffectiveDays() == null || coupon.getGetType().equals(CouponGetEnum.FREE.name())) { - throw new ServiceException("活动赠送优惠券需设置有限期"); - } + long nowTime = DateUtil.getDateline() * 1000; + if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { + throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); } + + PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); + this.checkCouponScope(coupon); + //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 + this.promotionStatusEmpty(coupon); } /** diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java index fac592a0..7a513c49 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java @@ -1,7 +1,7 @@ package cn.lili.modules.promotion.serviceimpl; 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.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; @@ -103,10 +103,10 @@ public class FullDiscountServiceImpl extends ServiceImpl impl promotionMessage, pintuanVO.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()), rocketmqCustomProperties.getPromotionTopic()); } - return result; } @@ -391,10 +390,10 @@ public class PintuanServiceImpl extends ServiceImpl impl TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, pintuan.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), rocketmqCustomProperties.getPromotionTopic()); // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(pintuan.getStartTime().getTime())); + this.timeTrigger.addDelay(timeTriggerMsg); } /** @@ -406,7 +405,7 @@ public class PintuanServiceImpl extends ServiceImpl impl private void removePintuanGoodsFromEs(String id, Long originStartTime) { this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, originStartTime, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)), rocketmqCustomProperties.getPromotionTopic()); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java index bfebb8b2..d98a7ea7 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java @@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.util.StrUtil; 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.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; @@ -120,7 +120,7 @@ public class PointsGoodsServiceImpl extends ServiceImpl impl promotionMessage, seckill.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()), rocketmqCustomProperties.getPromotionTopic()); } @@ -190,7 +190,7 @@ public class SeckillServiceImpl extends ServiceImpl impl this.promotionGoodsService.update(promotionGoodsQueryWrapper); this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, seckill.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), rocketmqCustomProperties.getPromotionTopic()); } else { throw new ServiceException("该秒杀活动活动的状态不能删除"); @@ -233,7 +233,7 @@ public class SeckillServiceImpl extends ServiceImpl impl } this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, seckillVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())), rocketmqCustomProperties.getPromotionTopic()); } } else { @@ -264,10 +264,10 @@ public class SeckillServiceImpl extends ServiceImpl impl TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, seckill.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), rocketmqCustomProperties.getPromotionTopic()); // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(seckill.getStartTime().getTime())); + this.timeTrigger.addDelay(timeTriggerMsg); } /** diff --git a/framework/src/test/java/cn/lili/test/trigger/TestTimeTrigger.java b/framework/src/test/java/cn/lili/test/trigger/TestTimeTrigger.java deleted file mode 100644 index 71c45ecb..00000000 --- a/framework/src/test/java/cn/lili/test/trigger/TestTimeTrigger.java +++ /dev/null @@ -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); - } -} diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberManagerController.java b/manager-api/src/main/java/cn/lili/controller/member/MemberManagerController.java index 7210e03a..b63f405f 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/member/MemberManagerController.java @@ -3,6 +3,7 @@ package cn.lili.controller.member; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; 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.dto.ManagerMemberEditDTO; import cn.lili.modules.member.entity.dto.MemberAddDTO; @@ -56,6 +57,7 @@ public class MemberManagerController { @ApiOperation(value = "修改会员基本信息") @PutMapping + @DemoSite public ResultMessage update(@Valid ManagerMemberEditDTO managerMemberEditDTO) { return ResultUtil.data(memberService.updateMember(managerMemberEditDTO)); } @@ -66,6 +68,7 @@ public class MemberManagerController { @ApiImplicitParam(name = "disabled", required = true, dataType = "boolean", paramType = "query") }) @PutMapping("/updateMemberStatus") + @DemoSite public ResultMessage updateMemberStatus(@RequestParam List memberIds, @RequestParam Boolean disabled) { memberService.updateMemberStatus(memberIds, disabled); return ResultUtil.success(); diff --git a/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java index 47d80fee..15c16d39 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java @@ -3,6 +3,7 @@ package cn.lili.controller.other; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; 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.dto.PageDataDTO; import cn.lili.modules.page.entity.vos.PageDataListVO; @@ -49,6 +50,7 @@ public class PageDataManagerController { @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path") }) + @DemoSite @PutMapping("/update/{id}") public ResultMessage updatePageData(@Valid PageData pageData, @NotNull @PathVariable String id) { pageData.setId(id); @@ -64,11 +66,13 @@ public class PageDataManagerController { @ApiOperation(value = "发布页面") @ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path") @PutMapping("/release/{id}") + @DemoSite public ResultMessage release(@PathVariable String id) { return ResultUtil.data(pageDataService.releasePageData(id)); } @ApiOperation(value = "删除页面") + @DemoSite @ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path") @DeleteMapping("/remove/{id}") public ResultMessage remove(@PathVariable String id) { diff --git a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java index c78ebc5b..c6f25213 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java @@ -1,16 +1,17 @@ package cn.lili.controller.passport; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.token.Token; import cn.lili.common.utils.PageUtil; -import cn.lili.common.enums.ResultUtil; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; 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.dto.AdminUserDTO; import cn.lili.modules.permission.entity.vo.AdminUserVO; @@ -98,6 +99,7 @@ public class AdminUserManagerController { @PutMapping(value = "/admin/edit") @ApiOperation(value = "超级管理员修改其他管理员资料") + @DemoSite public ResultMessage edit(AdminUser adminUser, @RequestParam(required = false) List roles) { if (!adminUserService.updateAdminUser(adminUser, roles)) { @@ -115,6 +117,7 @@ public class AdminUserManagerController { */ @PutMapping(value = "/editPassword") @ApiOperation(value = "修改密码") + @DemoSite public ResultMessage editPassword(String password, String newPassword) { adminUserService.editPassword(password, newPassword); return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS); @@ -122,6 +125,7 @@ public class AdminUserManagerController { @PostMapping(value = "/resetPassword/{ids}") @ApiOperation(value = "重置密码") + @DemoSite public ResultMessage resetPassword(@PathVariable List ids) { adminUserService.resetPassword(ids); return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS); @@ -155,6 +159,7 @@ public class AdminUserManagerController { @PutMapping(value = "/enable/{userId}") @ApiOperation(value = "禁/启 用 用户") + @DemoSite public ResultMessage disable(@ApiParam("用户唯一id标识") @PathVariable String userId, Boolean status) { AdminUser user = adminUserService.getById(userId); if (user == null) { @@ -167,6 +172,7 @@ public class AdminUserManagerController { @DeleteMapping(value = "/{ids}") @ApiOperation(value = "批量通过ids删除") + @DemoSite public ResultMessage delAllByIds(@PathVariable List ids) { adminUserService.deleteCompletely(ids); return ResultUtil.success(); diff --git a/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java b/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java index a1f1962f..fb7e1bce 100644 --- a/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java @@ -2,6 +2,7 @@ package cn.lili.controller.permission; import cn.lili.common.enums.ResultUtil; 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.dto.MenuSearchParams; import cn.lili.modules.permission.entity.vo.MenuVO; @@ -38,6 +39,7 @@ public class MenuManagerController { @ApiOperation(value = "添加") @PostMapping + @DemoSite public ResultMessage add(Menu menu) { try { menuService.save(menu); @@ -50,6 +52,8 @@ public class MenuManagerController { @ApiImplicitParam(name = "id", value = "菜单ID", required = true, paramType = "path", dataType = "String") @ApiOperation(value = "编辑") @PutMapping(value = "/{id}") + + @DemoSite public ResultMessage edit(@PathVariable String id, Menu menu) { menu.setId(id); menuService.updateById(menu); @@ -58,6 +62,7 @@ public class MenuManagerController { @ApiOperation(value = "批量删除") @DeleteMapping(value = "/{ids}") + @DemoSite public ResultMessage delByIds(@PathVariable List ids) { menuService.deleteIds(ids); return ResultUtil.success(); diff --git a/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java b/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java index e5079b27..fcb888c0 100644 --- a/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java @@ -3,6 +3,7 @@ package cn.lili.controller.store; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; 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.store.entity.dos.Store; import cn.lili.modules.store.entity.dto.AdminStoreApplyDTO; @@ -90,6 +91,8 @@ public class StoreManagerController { return ResultUtil.success(); } + + @DemoSite @ApiOperation(value = "关闭店铺") @ApiImplicitParam(name = "id", value = "店铺id", required = true, dataType = "String", paramType = "path") @PutMapping(value = "/disable/{id}")