huliguo
13 小时以前 6270918ba08a4c0502add55109742ab4bf47f831
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -42,6 +42,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -192,7 +193,8 @@
                        BigDecimal activityPrice = mgtActivityGoodsEditDto.getActivityPrice();
                        BigDecimal activitySubscription = mgtActivityGoodsEditDto.getActivitySubscription();
                        Integer activityNumber = mgtActivityGoodsEditDto.getActivityNumber();
                        if(goodsId.equals(goodsId1) && activitySubscription1.compareTo(activitySubscription) != 0){
                        if(null != activitySubscription && null != activitySubscription1 &&
                                goodsId.equals(goodsId1) && activitySubscription1.compareTo(activitySubscription) != 0){
                            throw new ServiceException("不能修改定金");
                        }
                        if(goodsId.equals(goodsId1) && activityPrice1.compareTo(activityPrice) != 0){
@@ -269,6 +271,9 @@
        this.saveOrUpdate(activity);
        // 获取活动商品信息
        List<MgtActivityGoodsEditDto> mgtActivityGoodsEditDtoList = mgtActivityEditDto.getMgtActivityGoodsEditDtoList();
        //存储需要更新缓存的库存数量
        List<Map<String, Object>> goods = new ArrayList<>();
        // 如果活动商品信息不为空,则保存活动商品信息
        if (!mgtActivityGoodsEditDtoList.isEmpty()) {
            List<ActivityGoods> activityGoodsList = mgtActivityGoodsEditDtoList.stream().map(
@@ -278,7 +283,12 @@
                                .eq(ActivityGoods::getGoodsId, dto.getGoodsId())
                                .eq(ActivityGoods::getDelFlag, 0)
                        );
                        int number = 0;
                        if(null != activityGoods){
                            //剩余数量
                            Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activity.getActivityId() + "-" + dto.getGoodsId());
                            surpNum = null == surpNum ? 0 : surpNum;
                            number = surpNum + (dto.getActivityNumber() - activityGoods.getActivityNumber());
                            activityGoods.setActivityId(activity.getActivityId());
                            activityGoods.setActivityPrice(dto.getActivityPrice());
                            activityGoods.setActivitySubscription(dto.getActivitySubscription());
@@ -288,6 +298,7 @@
                            activityGoods.setPurchaseLimitationFlag(activity.getPurchaseLimitationFlag());
                            activityGoods.setLimitNumber(activity.getLimitNumber());
                        }else{
                            number = dto.getActivityNumber();
                            activityGoods = new ActivityGoods();
                            activityGoods.setDelFlag(0);
                            activityGoods.setGoodsId(dto.getGoodsId());
@@ -302,6 +313,10 @@
                            activityGoods.setPurchaseLimitationFlag(activity.getPurchaseLimitationFlag());
                            activityGoods.setLimitNumber(activity.getLimitNumber());
                        }
                        Map<String, Object> map = new HashMap<>();
                        map.put("goodsId", dto.getGoodsId());
                        map.put("number", number);
                        goods.add(map);
                        return activityGoods;
                    }
            ).collect(Collectors.toList());
@@ -309,6 +324,16 @@
                activityGoodsService.saveOrUpdateBatch(activityGoodsList);
            }
        }
        //进行中的活动更新缓存中库存数量
        if(activity.getActivityStatus() == 1){
            for (Map<String, Object> good : goods) {
                String goodsId = good.get("goodsId").toString();
                Integer number = Integer.valueOf(good.get("number").toString());
                redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activity.getActivityId()+"-"+goodsId,number);
            }
        }
        //如果活动在1小时内生成自动开始任务的延时任务
        Date checkTime = DateUtils.addMinutes(new Date(),61);
        if(checkTime.compareTo(activityStartTime)>0){
@@ -384,11 +409,11 @@
                if(endDelayTask.getEndTime().compareTo(activityEndTime)!=0){
                    remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId);
                    redisService.deleteObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId);
                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, startTimeDifference, TimeUnit.MILLISECONDS);
                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, endTimeDifference, TimeUnit.MILLISECONDS);
                    endDelayTask = new DelayTask();
                    endDelayTask.setDelFlag(0);
                    endDelayTask.setCreateTime(new Date());
                    endDelayTask.setEndTime(activityStartTime);
                    endDelayTask.setEndTime(activityEndTime);
                    endDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId);
                    remoteConfigService.addDelayTask(endDelayTask);
                }
@@ -486,7 +511,7 @@
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(userJoinedString);
            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData();
            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData();
            Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
            for (MgtActivityRecordPageVo mgtActivityRecordPageVo : activityRecordPageVoList) {
@@ -665,7 +690,7 @@
    public void startActivity(String activityId){
        log.debug(activityId+"活动开始");
        Activity activity = this.getById(activityId);
        if(activity!=null&&activity.getActivityStatus()==0){
        if(activity!=null && activity.getActivityStatus() == 0){
            activity.setActivityStatus(1);
            List<ActivityGoods> activityGoodsList = activityGoodsService.listByActivityId(activityId);
            if(activityGoodsList!=null&&!activityGoodsList.isEmpty()){
@@ -800,4 +825,26 @@
        }
        return judge;
    }
    /**
     * 立即结束活动
     * @param mgtBaseGetDto
     */
    @Override
    public R endImmediately(MgtBaseGetDto mgtBaseGetDto) {
        Activity activity = this.getById(mgtBaseGetDto.getId());
        if(null == activity){
            return R.fail("活动不存在");
        }
        //判断是否在活动中
        Date now = new Date();
        if (now.before(activity.getActivityStartTime())||now.after(activity.getActivityEndTime())){
            return R.fail("未在活动时间范围内,不能执行立即结束操作");
        }
        activity.setActivityEndTime(now);
        activity.setUpdateTime(now);
        activity.setUpdateUserId(mgtBaseGetDto.getUserId());
        this.updateById(activity);
        return R.ok();
    }
}