admin
2021-01-15 5405154d6979f1b50ce2d881bb164b1acca80b6d
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityServiceImpl.java
@@ -1,25 +1,31 @@
package com.ks.lucky.service.impl.remote;
import com.ks.app.exception.AppException;
import com.ks.daylucky.exception.LuckySponsorMoneyRecordException;
import com.ks.lib.common.exception.ParamsException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyMQException;
import com.ks.lucky.exception.*;
import com.ks.lucky.mapper.LuckyActivityMapper;
import com.ks.lucky.pojo.DO.*;
import com.ks.lucky.query.ActivityDaoQuery;
import com.ks.lucky.remote.service.LuckyActivityService;
import com.ks.lucky.service.LuckyActivityImageService;
import com.ks.lucky.service.LuckyMQService;
import com.ks.lucky.service.LuckySponsorMoneyService;
import com.ks.lucky.service.impl.*;
import com.ks.lucky.util.annotation.RedisCache;
import com.ks.lucky.util.annotation.RedisCacheEvict;
import com.ks.lucky.util.mq.LuckyMQFactory;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Service(version = "1.0")
@Service(version = "1.0.0")
public class LuckyActivityServiceImpl implements LuckyActivityService {
    @Resource
@@ -43,9 +49,11 @@
    @Resource
    private LuckyMQService luckyMQService;
    private Long getAppId(String appKey) throws AppException {
        return appManager.getAppId(appKey);
    }
    @Resource
    private LuckyActivityImageService luckyActivityImageService;
    @Resource
    private LuckySponsorMoneyService luckySponsorMoneyService;
    private void notNull(LuckyActivity activity) throws LuckyActivityException {
        if (activity == null) {
@@ -53,35 +61,83 @@
        }
    }
    @Validated
    @Transactional(rollbackFor = Exception.class)
    @Override
    public List<LuckyActivity> getActivityList(String appKey, Long sponsorId, List<Integer> stateList, String key, int page, int pageSize) {
    public Long addActivity(LuckyActivity activity) throws ParamsException, LuckyActivityException, LuckyActivitySponsorInfoException, LuckyActivityAwardException, LuckyActivityOpenInfoException, LuckySponsorAdException, LuckyActivityAwardMaterialException {
        Long activityId = createActivity(activity);
        //添加banner图片
        if (activity.getBannerList() != null) {
            for (LuckyActivityImage image : activity.getBannerList()) {
                image.setActivityId(activityId);
                luckyActivityImageService.add(image);
            }
        }
        //添加赞助活动
        activity.getSponsorInfo().setActivityId(activityId);
        luckyActivitySponsorInfoManager.addSponsorInfo(activity.getSponsorInfo());
        //添加奖项
        for (LuckyActivityAwards awards : activity.getAwardsList()) {
            awards.setActivityId(activityId);
            luckyActivityAwardManager.addAward(awards);
        }
        //添加开奖信息
        activity.getOpenInfo().setActivityId(activityId);
        luckyActivityOpenInfoManager.addOpenInfo(activity.getOpenInfo());
        return activityId;
    }
    @Override
    public List<LuckyActivity> getActivityList(Long appId, Long sponsorId, List<Integer> stateList, String key, int page, int pageSize) {
        ActivityDaoQuery query = new ActivityDaoQuery();
        query.stateList = stateList;
        query.key = key;
        query.sponsorId = sponsorId;
        try {
            query.appId = getAppId(appKey);
        } catch (AppException e) {
            return null;
        }
        query.appId = appId;
        query.start = (page - 1) * pageSize;
        query.count = pageSize;
        query.sort = "start_time desc";
        query.sortList = Arrays.asList(new String[]{"actual_start_time desc"});
        return luckyActivityMapper.list(query);
    }
    @Override
    public long countActivity(String appKey, Long sponsorId, List<Integer> stateList, String key) {
    public List<LuckyActivity> getActivityList(Long appId, Long sponsorId, List<Integer> stateList, List<Long> excludeActivityIds, String key, int page, int pageSize) {
        ActivityDaoQuery query = new ActivityDaoQuery();
        query.stateList = stateList;
        query.key = key;
        query.sponsorId = sponsorId;
        try {
            query.appId = getAppId(appKey);
        } catch (AppException e) {
            return 0L;
        }
        query.excludeActivityIds = excludeActivityIds;
        query.appId = appId;
        query.start = (page - 1) * pageSize;
        query.count = pageSize;
        query.sortList = Arrays.asList(new String[]{"actual_start_time desc"});
        return luckyActivityMapper.list(query);
    }
    @Override
    public long countActivity(Long appId, Long sponsorId, List<Integer> stateList, String key) {
        ActivityDaoQuery query = new ActivityDaoQuery();
        query.stateList = stateList;
        query.key = key;
        query.sponsorId = sponsorId;
        query.appId = appId;
        return luckyActivityMapper.count(query);
    }
    @Override
    public long countActivity(Long appId, Long sponsorId, List<Integer> stateList, String key, List<Long> excludeActivityIds) {
        ActivityDaoQuery query = new ActivityDaoQuery();
        query.stateList = stateList;
        query.key = key;
        query.sponsorId = sponsorId;
        query.appId = appId;
        query.excludeActivityIds = excludeActivityIds;
        return luckyActivityMapper.count(query);
    }
@@ -138,7 +194,7 @@
        //检查活动状态
        if (activity.getState() != LuckyActivity.STATE_NOT_PUBLISH) {
            throw new LuckyActivityException(1, "活动已发布");
            throw new LuckyActivityException(1, "活动未处于审核成功状态");
        }
        //检查开奖信息
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId());
@@ -165,9 +221,21 @@
    public void publishActivity(Long activityId) throws LuckyActivityException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        checkActivityForPublish(activity);
        BigDecimal money = luckyActivityAwardManager.computeAwardsMoney(activityId);
        if (money.compareTo(new BigDecimal(0)) > 0) {
            try {
                luckySponsorMoneyService.publishActivity(activity.getSponsorId(), activityId, money);
            } catch (LuckySponsorException e) {
                throw new LuckyActivityException(e.getCode(), e.getMsg());
            } catch (LuckySponsorMoneyRecordException e) {
                throw new LuckyActivityException(e.getCode(), e.getMsg());
            } catch (ParamsException e) {
                throw new LuckyActivityException(e.getCode(), e.getMsg());
            }
        }
        luckyActivityManager.setState(activityId, LuckyActivity.STATE_NOT_STARTED, "已发布");
        //加入代发消息列表
        try {
@@ -175,6 +243,32 @@
        } catch (LuckyMQException e) {
            throw new LuckyActivityException(10, "消息投递失败");
        }
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void publishActivity(Long activityId, Date startTime, Date finishTime) throws LuckyActivityException {
        //设置开始时间与结束时间
        LuckyActivity activity = new LuckyActivity();
        activity.setId(activityId);
        activity.setPreStartTime(startTime);
        activity.setPreFinishTime(finishTime);
        activity.setUpdateTime(new Date());
        luckyActivityManager.updateSelectiveByPrimaryKey(activity);
        //设置开奖时间
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        if (openInfo != null && openInfo.getPreOpenTime() == null) {
            LuckyActivityOpenInfo updateOpenInfo = new LuckyActivityOpenInfo();
            updateOpenInfo.setId(openInfo.getId());
            //结束后5分钟开奖
            updateOpenInfo.setPreOpenTime(new Date(finishTime.getTime() + 1000 * 60 * 5));
            try {
                luckyActivityOpenInfoManager.updateOpenInfo(updateOpenInfo, activityId);
            } catch (LuckyActivityOpenInfoException e) {
            }
        }
        publishActivity(activityId);
    }
    @Transactional(rollbackFor = Exception.class)
@@ -258,27 +352,23 @@
    }
    @Override
    public LuckyActivity getActivity(Long id) {
        return luckyActivityManager.selectByPrimaryKey(id);
    }
    @Override
    public LuckyActivity getActivityDetail(Long id) {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(id);
        if (activity == null) {
            return null;
        return luckyActivityManager.getActivityDetail(id);
    }
    @Override
    public List<LuckyActivity> getActivityDetail(List<Long> ids) {
        List<LuckyActivity> activityList = new ArrayList<>();
        for (Long id : ids) {
            LuckyActivity luckyActivity = luckyActivityManager.getActivityDetail(id);
            activityList.add(luckyActivity);
        }
        //加载开奖信息
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId());
        activity.setOpenInfo(openInfo);
        //加载赞助信息
        LuckyActivitySponsorInfo sponsorInfo = luckyActivitySponsorInfoManager.getSponsorInfo(activity.getId());
        if (sponsorInfo != null) {
            sponsorInfo = luckyActivitySponsorInfoManager.getSponsorInfoDetail(sponsorInfo.getId());
        }
        activity.setSponsorInfo(sponsorInfo);
        //加载奖项信息
        List<LuckyActivityAwards> awardsList = luckyActivityAwardManager.getAwardList(activity.getId());
        activity.setAwardsList(awardsList);
        return activity;
        return activityList;
    }
    @Override
@@ -291,7 +381,42 @@
        }
        activity.setUpdateTime(new Date());
        luckyActivityMapper.updateByPrimaryKeySelective(activity);
        luckyActivityManager.updateSelectiveByPrimaryKey(activity);
    }
    @Override
    public List<LuckyActivity> getRecommendActivity(Long appId, String uid, int page, int pageSize) {
        ActivityDaoQuery query = new ActivityDaoQuery();
        query.appId = appId;
        query.start = (page - 1) * pageSize;
        query.count = pageSize;
        query.sortList = Arrays.asList(new String[]{"actual_start_time desc"});
        query.stateList = Arrays.asList(new Integer[]{
                LuckyActivity.STATE_STARTED,
                LuckyActivity.STATE_FINISH,
                LuckyActivity.STATE_PRE_OPENED,
                LuckyActivity.STATE_OPENED,
        });
        List<LuckyActivity> list = luckyActivityMapper.list(query);
        return list;
    }
    @Override
    public Long getRecommendActivityCount(Long appId, String uid) {
        ActivityDaoQuery query = new ActivityDaoQuery();
        query.appId = appId;
        query.stateList = Arrays.asList(new Integer[]{
                LuckyActivity.STATE_STARTED,
                LuckyActivity.STATE_FINISH,
                LuckyActivity.STATE_PRE_OPENED,
                LuckyActivity.STATE_OPENED,
        });
        return luckyActivityMapper.count(query);
    }