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.entity.admin.Activity;
 import com.kym.entity.admin.Banner;
+import com.kym.entity.admin.RechargeRights;
 import com.kym.entity.admin.delay.DelayActivity;
 import com.kym.service.admin.ActivityService;
 import com.kym.service.admin.BannerService;
+import com.kym.service.admin.RechargeRightsService;
 import com.kym.service.jobs.DelayService;
 import com.kym.service.jobs.DelayedItem;
 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 ActivityService activityService;
+    private final RechargeRightsService rechargeRightsService;
     private final BannerService bannerService;
     /**
      * 线程池
      */
     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.rechargeRightsService = rechargeRightsService;
         this.bannerService = bannerService;
     }
 
@@ -97,17 +101,25 @@ public class ActivityDelayJob implements DelayService<DelayActivity> {
                     var delayActivity = delayedItem.data;
                     threadLocal.set(delayActivity.getId());
                     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();
-                        // 修改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();
+                        log.info("活动id:{},活动名:{}启动中...", delayActivity.getId(), delayActivity.getName());
                     } else {
+                        log.info("活动id:{},活动名:{}已停止...", delayActivity.getId(), delayActivity.getName());
                         // 停止活动
                         // 修改活动状态为已结束
                         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状态为失效
                         bannerService.lambdaUpdate().set(Banner::getStatus, Banner.STATUS_无效).eq(Banner::getActivityId, delayActivity.getId()).update();
+                        log.info("活动id:{},活动名:{}已结束...", delayActivity.getId(), delayActivity.getName());
                     }
                     // 线程休眠100ms
                     Thread.sleep(100);
@@ -125,7 +137,6 @@ public class ActivityDelayJob implements DelayService<DelayActivity> {
 
     }
 
-
     @Override
     public boolean addToOrderDelayQueue(DelayedItem<DelayActivity> 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;
 
+    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(继承自活动主表)
      */

+ 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.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
 import java.util.concurrent.DelayQueue;
@@ -24,7 +25,7 @@ import java.util.concurrent.Executors;
  * @description 启动充电延迟任务(预约充电)
  * @date 2023-10-08 22:11
  */
-@Service
+@Component("StartChargeDelayJob")
 @Slf4j
 @DS("db-miniapp")
 @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.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
 import java.util.concurrent.DelayQueue;
@@ -25,7 +26,7 @@ import java.util.concurrent.Executors;
  * @description 停止充电延迟任务(预约充电)
  * @date 2023-10-08 22:11
  */
-@Service
+@Component("StopChargeDelayJob")
 @Slf4j
 @DS("db-miniapp")
 @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.kym.common.utils.CommUtil;
 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.vo.ActivityVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.UserRechargeRights;
 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 lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -57,12 +54,18 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
     private final RechargeRightsService rechargeRightsService;
     private final UserRechargeRightsService userRechargeRightsService;
     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.rechargeRightsService = rechargeRightsService;
         this.userRechargeRightsService = userRechargeRightsService;
         this.stationService = stationService;
+        this.activityDelayService = activityDelayService;
+        this.bannerService = bannerService;
     }
 
     /**
@@ -95,6 +98,10 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
             rechargeRightsService.saveBatch(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) {
         lambdaUpdate().set(Activity::getStatus, Activity.STATUS_已结束).eq(Activity::getId, 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
     @Async
     public void handleRechargeActivity(long userId, int rechargeAmount) {
-        asyncHandleRechargeActivity(userId,rechargeAmount);
+        asyncHandleRechargeActivity(userId, rechargeAmount);
 //        executor.execute(new RechargeActivityTask(userId, rechargeAmount));
     }
 
@@ -175,7 +184,7 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
         if (activity != null) {
             var rechargeRights = rechargeRightsService.lambdaQuery().eq(RechargeRights::getActivityId, activity.getId())
                     .le(RechargeRights::getAmountMin, rechargeAmount)
-                    .gt(RechargeRights::getAmountMax, rechargeAmount) 
+                    .gt(RechargeRights::getAmountMax, rechargeAmount)
                     .one();
             DynamicDataSourceContextHolder.poll();
             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,
                              ChargeOrderService chargeOrderService, OrderRechargeRightsService orderRechargeRightsService, UserRechargeRightsService userRechargeRightsService, AccountService accountService,
                              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.equipmentInfoService = equipmentInfoService;
         this.chargeOrderService = chargeOrderService;