Răsfoiți Sursa

活动自动启停

skyline 2 ani în urmă
părinte
comite
97bd2182c0

+ 15 - 4
admin/src/main/java/com/kym/admin/jobs/ActivityDelayJob.java

@@ -4,9 +4,11 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.CommUtil;
 import com.kym.entity.admin.Activity;
 import com.kym.entity.admin.Activity;
 import com.kym.entity.admin.Banner;
 import com.kym.entity.admin.Banner;
+import com.kym.entity.admin.RechargeRights;
 import com.kym.entity.admin.delay.DelayActivity;
 import com.kym.entity.admin.delay.DelayActivity;
 import com.kym.service.admin.ActivityService;
 import com.kym.service.admin.ActivityService;
 import com.kym.service.admin.BannerService;
 import com.kym.service.admin.BannerService;
+import com.kym.service.admin.RechargeRightsService;
 import com.kym.service.jobs.DelayService;
 import com.kym.service.jobs.DelayService;
 import com.kym.service.jobs.DelayedItem;
 import com.kym.service.jobs.DelayedItem;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -37,14 +39,16 @@ public class ActivityDelayJob implements DelayService<DelayActivity> {
     private final static DelayQueue<DelayedItem<DelayActivity>> DELAY_QUEUE = new DelayQueue<>();
     private final static DelayQueue<DelayedItem<DelayActivity>> DELAY_QUEUE = new DelayQueue<>();
 
 
     private final ActivityService activityService;
     private final ActivityService activityService;
+    private final RechargeRightsService rechargeRightsService;
     private final BannerService bannerService;
     private final BannerService bannerService;
     /**
     /**
      * 线程池
      * 线程池
      */
      */
     private final ExecutorService executor = Executors.newFixedThreadPool(1);
     private final ExecutorService executor = Executors.newFixedThreadPool(1);
 
 
-    public ActivityDelayJob(ActivityService activityService, BannerService bannerService) {
+    public ActivityDelayJob(ActivityService activityService, RechargeRightsService rechargeRightsService, BannerService bannerService) {
         this.activityService = activityService;
         this.activityService = activityService;
+        this.rechargeRightsService = rechargeRightsService;
         this.bannerService = bannerService;
         this.bannerService = bannerService;
     }
     }
 
 
@@ -97,17 +101,25 @@ public class ActivityDelayJob implements DelayService<DelayActivity> {
                     var delayActivity = delayedItem.data;
                     var delayActivity = delayedItem.data;
                     threadLocal.set(delayActivity.getId());
                     threadLocal.set(delayActivity.getId());
                     if (delayActivity.getType().equals(DelayActivity.TYPE_启动)) {
                     if (delayActivity.getType().equals(DelayActivity.TYPE_启动)) {
+                        log.info("活动id:{},活动名:{}启动中...", delayActivity.getId(), delayActivity.getName());
                         // 开始活动
                         // 开始活动
-                        // 修改活动状态为已结束
+                        // 修改活动状态为进行中
                         activityService.lambdaUpdate().set(Activity::getStatus, Activity.STATUS_进行中).eq(Activity::getId, delayActivity.getId()).update();
                         activityService.lambdaUpdate().set(Activity::getStatus, Activity.STATUS_进行中).eq(Activity::getId, delayActivity.getId()).update();
-                        // 修改banner状态为失效
+                        // 修改充值权益为进行中
+                        rechargeRightsService.lambdaUpdate().set(RechargeRights::getStatus, RechargeRights.STATUS_进行中).eq(RechargeRights::getActivityId, delayActivity.getId()).update();
+                        // 修改banner状态为有效
                         bannerService.lambdaUpdate().set(Banner::getStatus, Banner.STATUS_有效).eq(Banner::getActivityId, delayActivity.getId()).update();
                         bannerService.lambdaUpdate().set(Banner::getStatus, Banner.STATUS_有效).eq(Banner::getActivityId, delayActivity.getId()).update();
+                        log.info("活动id:{},活动名:{}启动中...", delayActivity.getId(), delayActivity.getName());
                     } else {
                     } else {
+                        log.info("活动id:{},活动名:{}已停止...", delayActivity.getId(), delayActivity.getName());
                         // 停止活动
                         // 停止活动
                         // 修改活动状态为已结束
                         // 修改活动状态为已结束
                         activityService.lambdaUpdate().set(Activity::getStatus, Activity.STATUS_已结束).eq(Activity::getId, delayActivity.getId()).update();
                         activityService.lambdaUpdate().set(Activity::getStatus, Activity.STATUS_已结束).eq(Activity::getId, delayActivity.getId()).update();
+                        // 修改充值权益为进行中
+                        rechargeRightsService.lambdaUpdate().set(RechargeRights::getStatus, RechargeRights.STATUS_已结束).eq(RechargeRights::getActivityId, delayActivity.getId()).update();
                         // 修改banner状态为失效
                         // 修改banner状态为失效
                         bannerService.lambdaUpdate().set(Banner::getStatus, Banner.STATUS_无效).eq(Banner::getActivityId, delayActivity.getId()).update();
                         bannerService.lambdaUpdate().set(Banner::getStatus, Banner.STATUS_无效).eq(Banner::getActivityId, delayActivity.getId()).update();
+                        log.info("活动id:{},活动名:{}已结束...", delayActivity.getId(), delayActivity.getName());
                     }
                     }
                     // 线程休眠100ms
                     // 线程休眠100ms
                     Thread.sleep(100);
                     Thread.sleep(100);
@@ -125,7 +137,6 @@ public class ActivityDelayJob implements DelayService<DelayActivity> {
 
 
     }
     }
 
 
-
     @Override
     @Override
     public boolean addToOrderDelayQueue(DelayedItem<DelayActivity> delayedItem) {
     public boolean addToOrderDelayQueue(DelayedItem<DelayActivity> delayedItem) {
         return DELAY_QUEUE.add(delayedItem);
         return DELAY_QUEUE.add(delayedItem);

+ 5 - 0
entity/src/main/java/com/kym/entity/admin/RechargeRights.java

@@ -25,6 +25,11 @@ public class RechargeRights extends BaseEntity {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
+    public final static int STATUS_未开始 = 0;
+    public final static int STATUS_进行中 = 1;
+    public final static int STATUS_已结束 = 2;
+    public final static int STATUS_已取消 = 3;
+
     /**
     /**
      * 主活动id(继承自活动主表)
      * 主活动id(继承自活动主表)
      */
      */

+ 2 - 1
miniapp/src/main/java/com/kym/miniapp/jobs/StartChargeDelayJob.java

@@ -13,6 +13,7 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
 import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.concurrent.DelayQueue;
 import java.util.concurrent.DelayQueue;
@@ -24,7 +25,7 @@ import java.util.concurrent.Executors;
  * @description 启动充电延迟任务(预约充电)
  * @description 启动充电延迟任务(预约充电)
  * @date 2023-10-08 22:11
  * @date 2023-10-08 22:11
  */
  */
-@Service
+@Component("StartChargeDelayJob")
 @Slf4j
 @Slf4j
 @DS("db-miniapp")
 @DS("db-miniapp")
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) // 设置成单例
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) // 设置成单例

+ 2 - 1
miniapp/src/main/java/com/kym/miniapp/jobs/StopChargeDelayJob.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
 import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.concurrent.DelayQueue;
 import java.util.concurrent.DelayQueue;
@@ -25,7 +26,7 @@ import java.util.concurrent.Executors;
  * @description 停止充电延迟任务(预约充电)
  * @description 停止充电延迟任务(预约充电)
  * @date 2023-10-08 22:11
  * @date 2023-10-08 22:11
  */
  */
-@Service
+@Component("StopChargeDelayJob")
 @Slf4j
 @Slf4j
 @DS("db-miniapp")
 @DS("db-miniapp")
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) // 设置成单例
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) // 设置成单例

+ 20 - 11
service/src/main/java/com/kym/service/admin/impl/ActivityServiceImpl.java

@@ -6,22 +6,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.IDGenerator;
 import com.kym.common.utils.IDGenerator;
-import com.kym.entity.admin.Activity;
-import com.kym.entity.admin.ActivityStation;
-import com.kym.entity.admin.RechargeRights;
-import com.kym.entity.admin.Station;
+import com.kym.entity.admin.*;
+import com.kym.entity.admin.delay.DelayActivity;
 import com.kym.entity.admin.queryParams.ActivityQueryParam;
 import com.kym.entity.admin.queryParams.ActivityQueryParam;
 import com.kym.entity.admin.vo.ActivityVo;
 import com.kym.entity.admin.vo.ActivityVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.UserRechargeRights;
 import com.kym.entity.miniapp.UserRechargeRights;
 import com.kym.mapper.admin.ActivityMapper;
 import com.kym.mapper.admin.ActivityMapper;
-import com.kym.service.admin.ActivityService;
-import com.kym.service.admin.ActivityStationService;
-import com.kym.service.admin.RechargeRightsService;
-import com.kym.service.admin.StationService;
+import com.kym.service.admin.*;
+import com.kym.service.jobs.DelayService;
 import com.kym.service.miniapp.UserRechargeRightsService;
 import com.kym.service.miniapp.UserRechargeRightsService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -57,12 +54,18 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
     private final RechargeRightsService rechargeRightsService;
     private final RechargeRightsService rechargeRightsService;
     private final UserRechargeRightsService userRechargeRightsService;
     private final UserRechargeRightsService userRechargeRightsService;
     private final StationService stationService;
     private final StationService stationService;
+    private final DelayService<DelayActivity> activityDelayService;
+    private final BannerService bannerService;
 
 
-    public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService, UserRechargeRightsService userRechargeRightsService, StationService stationService) {
+    public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService,
+                               UserRechargeRightsService userRechargeRightsService, StationService stationService,
+                               @Lazy DelayService<DelayActivity> activityDelayService, BannerService bannerService) {
         this.activityStationService = activityStationService;
         this.activityStationService = activityStationService;
         this.rechargeRightsService = rechargeRightsService;
         this.rechargeRightsService = rechargeRightsService;
         this.userRechargeRightsService = userRechargeRightsService;
         this.userRechargeRightsService = userRechargeRightsService;
         this.stationService = stationService;
         this.stationService = stationService;
+        this.activityDelayService = activityDelayService;
+        this.bannerService = bannerService;
     }
     }
 
 
     /**
     /**
@@ -95,6 +98,10 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
             rechargeRightsService.saveBatch(rechargeRightsList);
             rechargeRightsService.saveBatch(rechargeRightsList);
             activityVo.setRechargeRightsList(rechargeRightsList);
             activityVo.setRechargeRightsList(rechargeRightsList);
         }
         }
+
+        // 加入活动延迟启停队列
+        activityDelayService.addToDelayQueue(new DelayActivity(activity.getId(), activity.getName(), activity.getStartTime(), DelayActivity.TYPE_启动));
+        activityDelayService.addToDelayQueue(new DelayActivity(activity.getId(), activity.getName(), activity.getEndTime(), DelayActivity.TYPE_结束));
     }
     }
 
 
     /**
     /**
@@ -149,6 +156,8 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
     public void terminateActivity(String activityId) {
     public void terminateActivity(String activityId) {
         lambdaUpdate().set(Activity::getStatus, Activity.STATUS_已结束).eq(Activity::getId, activityId).update();
         lambdaUpdate().set(Activity::getStatus, Activity.STATUS_已结束).eq(Activity::getId, activityId).update();
         rechargeRightsService.lambdaUpdate().set(RechargeRights::getStatus, Activity.STATUS_已结束).eq(RechargeRights::getActivityId, activityId).update();
         rechargeRightsService.lambdaUpdate().set(RechargeRights::getStatus, Activity.STATUS_已结束).eq(RechargeRights::getActivityId, activityId).update();
+        // 修改banner状态为失效
+        bannerService.lambdaUpdate().set(Banner::getStatus, Banner.STATUS_有效).eq(Banner::getActivityId, activityId).update();
     }
     }
 
 
     /**
     /**
@@ -160,7 +169,7 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
     @Override
     @Override
     @Async
     @Async
     public void handleRechargeActivity(long userId, int rechargeAmount) {
     public void handleRechargeActivity(long userId, int rechargeAmount) {
-        asyncHandleRechargeActivity(userId,rechargeAmount);
+        asyncHandleRechargeActivity(userId, rechargeAmount);
 //        executor.execute(new RechargeActivityTask(userId, rechargeAmount));
 //        executor.execute(new RechargeActivityTask(userId, rechargeAmount));
     }
     }
 
 
@@ -175,7 +184,7 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
         if (activity != null) {
         if (activity != null) {
             var rechargeRights = rechargeRightsService.lambdaQuery().eq(RechargeRights::getActivityId, activity.getId())
             var rechargeRights = rechargeRightsService.lambdaQuery().eq(RechargeRights::getActivityId, activity.getId())
                     .le(RechargeRights::getAmountMin, rechargeAmount)
                     .le(RechargeRights::getAmountMin, rechargeAmount)
-                    .gt(RechargeRights::getAmountMax, rechargeAmount) 
+                    .gt(RechargeRights::getAmountMax, rechargeAmount)
                     .one();
                     .one();
             DynamicDataSourceContextHolder.poll();
             DynamicDataSourceContextHolder.poll();
             if (rechargeRights != null) {
             if (rechargeRights != null) {

+ 2 - 2
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -64,8 +64,8 @@ public class ChargeServiceImpl implements ChargeService {
     public ChargeServiceImpl(EquipmentRelationService equipmentRelationService, EquipmentInfoService equipmentInfoService,
     public ChargeServiceImpl(EquipmentRelationService equipmentRelationService, EquipmentInfoService equipmentInfoService,
                              ChargeOrderService chargeOrderService, OrderRechargeRightsService orderRechargeRightsService, UserRechargeRightsService userRechargeRightsService, AccountService accountService,
                              ChargeOrderService chargeOrderService, OrderRechargeRightsService orderRechargeRightsService, UserRechargeRightsService userRechargeRightsService, AccountService accountService,
                              EnPlusService enPlusService, EnPlusConfig enPlusConfig,
                              EnPlusService enPlusService, EnPlusConfig enPlusConfig,
-                             @Qualifier("startDelayServiceImpl") @Lazy DelayService<DelayChargeOrder> startDelayService,
-                             @Qualifier("stopDelayServiceImpl") @Lazy DelayService<DelayChargeOrder> stopDelayService) {
+                             @Qualifier("StartChargeDelayJob") @Lazy DelayService<DelayChargeOrder> startDelayService,
+                             @Qualifier("StopChargeDelayJob") @Lazy DelayService<DelayChargeOrder> stopDelayService) {
         this.equipmentRelationService = equipmentRelationService;
         this.equipmentRelationService = equipmentRelationService;
         this.equipmentInfoService = equipmentInfoService;
         this.equipmentInfoService = equipmentInfoService;
         this.chargeOrderService = chargeOrderService;
         this.chargeOrderService = chargeOrderService;