jiangqs
2023-09-04 c97706c3cc213b7db3d381e8a0435ff0ef9a04d6
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -39,10 +39,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -141,11 +138,12 @@
        Date activityStartTime = mgtActivityEditDto.getActivityStartTime();
        Date activityEndTime = mgtActivityEditDto.getActivityEndTime();
        // 根据当前时间和活动时间判断活动状态
        if (nowTime.compareTo(activityStartTime) < 0) {
        /*if (nowTime.compareTo(activityStartTime) < 0) {
            activity.setActivityStatus(0);
        } else {
            throw new ServiceException(AppErrorConstant.ACTIVITY_TIME_ERROR);
        }
            activity.setActivityStatus(1);
        }*/
        // 设置活动信息
        activity.setActivityName(mgtActivityEditDto.getActivityName());
        activity.setActivityIntroduce(mgtActivityEditDto.getActivityIntroduce());
@@ -162,6 +160,19 @@
        activity.setUpdateUserId(mgtActivityEditDto.getUserId());
        activity.setUpdateTime(nowTime);
        activity.setRecommendFlag(mgtActivityEditDto.getRecommendFlag());
        if(activity.getAreaFlag()==2&&activity.getShopFlag()==1&&StringUtils.isNotBlank(activity.getDesignatedArea())){
            activity.setApplicableShop("");
            String designatedArea = activity.getDesignatedArea();
            List<String> cityCodes = Arrays.asList(designatedArea.split(","));
            List<Long> shopIdList = remoteShopService.listShopIdByCityCode(cityCodes).getData();
            if(shopIdList!=null&&!shopIdList.isEmpty()){
                String result = shopIdList.stream()
                        .map(String::valueOf)
                        .collect(Collectors.joining(","));
                activity.setApplicableShop(result);
            }
        }
        activity.setActivityStatus(0);
        this.saveOrUpdate(activity);
        // 获取活动商品信息
        List<MgtActivityGoodsEditDto> mgtActivityGoodsEditDtoList = mgtActivityEditDto.getMgtActivityGoodsEditDtoList();
@@ -176,6 +187,7 @@
                        activityGoods.setActivityPrice(dto.getActivityPrice());
                        activityGoods.setActivitySubscription(dto.getActivitySubscription());
                        activityGoods.setActivityNumber(dto.getActivityNumber());
                        activityGoods.setActivityStock(dto.getActivityNumber());
                        activityGoods.setSalesNumber(0);
                        activityGoods.setActivityDeadline(activity.getActivityEndTime());
                        activityGoods.setSellOutFlag(0);
@@ -195,21 +207,37 @@
            long currentTimeMillis = System.currentTimeMillis();
            long startTimeDifference = activityStartTime.getTime() - currentTimeMillis;
            long endTimeDifference = activityEndTime.getTime() - currentTimeMillis;
            // 查询延时任务
            DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData();
            // 如果延时任务为空,创建延时任务控制活动定时开始和结束
            if (startDelayTask == null) {
                redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, startTimeDifference, TimeUnit.MILLISECONDS);
                startDelayTask = new DelayTask();
                startDelayTask.setDelFlag(0);
                startDelayTask.setCreateTime(new Date());
                startDelayTask.setEndTime(activityStartTime);
                startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                remoteConfigService.addDelayTask(startDelayTask);
            //判断任务是否已经开始,已经开始则3秒后立即开始
            if(nowTime.compareTo(activityStartTime) > 0){
                // 查询延时任务
                DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData();
                // 如果延时任务为空,创建延时任务控制活动定时开始和结束
                if (startDelayTask == null) {
                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, 3L, TimeUnit.SECONDS);
                    startDelayTask = new DelayTask();
                    startDelayTask.setDelFlag(0);
                    startDelayTask.setCreateTime(new Date());
                    startDelayTask.setEndTime(DateUtils.addSeconds(new Date(),3));
                    startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                    remoteConfigService.addDelayTask(startDelayTask);
                }else{
                    if(startDelayTask.getEndTime().compareTo(activityStartTime)!=0){
                        remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                        redisService.deleteObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                        redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, 3L, TimeUnit.SECONDS);
                        startDelayTask = new DelayTask();
                        startDelayTask.setDelFlag(0);
                        startDelayTask.setCreateTime(new Date());
                        startDelayTask.setEndTime(DateUtils.addSeconds(new Date(),3));
                        startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                        remoteConfigService.addDelayTask(startDelayTask);
                    }
                }
            }else{
                if(startDelayTask.getEndTime().compareTo(activityStartTime)!=0){
                    remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                    redisService.deleteObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                // 查询延时任务
                DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData();
                // 如果延时任务为空,创建延时任务控制活动定时开始和结束
                if (startDelayTask == null) {
                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, startTimeDifference, TimeUnit.MILLISECONDS);
                    startDelayTask = new DelayTask();
                    startDelayTask.setDelFlag(0);
@@ -217,6 +245,18 @@
                    startDelayTask.setEndTime(activityStartTime);
                    startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                    remoteConfigService.addDelayTask(startDelayTask);
                }else{
                    if(startDelayTask.getEndTime().compareTo(activityStartTime)!=0){
                        remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                        redisService.deleteObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                        redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, startTimeDifference, TimeUnit.MILLISECONDS);
                        startDelayTask = new DelayTask();
                        startDelayTask.setDelFlag(0);
                        startDelayTask.setCreateTime(new Date());
                        startDelayTask.setEndTime(activityStartTime);
                        startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId);
                        remoteConfigService.addDelayTask(startDelayTask);
                    }
                }
            }
            // 查询延时任务
@@ -421,12 +461,14 @@
        String activityId = activityGoodsGetDto.getActivityId();
        String goodsId = activityGoodsGetDto.getGoodsId();
        Activity activity = this.getById(activityId);
        //获取活动商品
        ActivityGoods activityGoods = activityGoodsService.getByGoodsId(activityId,goodsId);
        activityGoodsGetVo.setActivityName(activity.getActivityName());
        activityGoodsGetVo.setActivityPrice(activityGoods.getActivityPrice());
        activityGoodsGetVo.setActivitySubscription(activityGoods.getActivitySubscription());
        activityGoodsGetVo.setActivityStatus(activity.getActivityStatus());
        Integer availableBuyNum = activityGoods.getActivityNumber() - activityGoods.getSalesNumber();
        //剩余库存
        Integer availableBuyNum = activityGoods.getActivityStock();
        //限购判断
        if(activityGoods.getPurchaseLimitationFlag()==1){
            Integer buyNum = activityRecordService.getUserActivityGoodsNum(goodsId,activityId,activityGoodsGetDto.getUserId());
@@ -481,7 +523,7 @@
                    remoteConfigService.addDelayTask(startDelayTask);
                }
                // 查询延时任务
                DelayTask endDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData();
                DelayTask endDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId).getData();
                // 如果延时任务为空,创建延时任务控制活动定时开始和结束
                if (endDelayTask == null) {
                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, endTimeDifference, TimeUnit.MILLISECONDS);
@@ -512,7 +554,7 @@
            List<ActivityGoods> activityGoodsList = activityGoodsService.listByActivityId(activityId);
            if(activityGoodsList!=null&&!activityGoodsList.isEmpty()){
                for(ActivityGoods activityGoods : activityGoodsList){
                    redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+activityGoods.getGoodsId(),activityGoods.getActivityNumber());
                    redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+activityGoods.getGoodsId(),activityGoods.getActivityStock());
                }
            }
            this.saveOrUpdate(activity);
@@ -610,13 +652,11 @@
     */
    @Override
    public List<MgtActivityListVo> listStaffActivity(StaffActivityListDto staffActivityListDto){
        return activityMapper.listStaffActivity(staffActivityListDto);
        List<MgtActivityListVo> activityListVoList = new ArrayList<>();
        if(staffActivityListDto.getActivityFrom()!=null&&staffActivityListDto.getActivityFrom()==1){
            activityListVoList = activityMapper.listStaffActivity(staffActivityListDto);
        }
        return activityListVoList;
    }
    private void createActivityCode(String activityId){
    }
}