| | |
| | | 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 |
| | |
| | | @Resource |
| | | private LuckyMQService luckyMQService; |
| | | |
| | | @Resource |
| | | private LuckyActivityImageService luckyActivityImageService; |
| | | |
| | | @Resource |
| | | private LuckySponsorMoneyService luckySponsorMoneyService; |
| | | |
| | | private void notNull(LuckyActivity activity) throws LuckyActivityException { |
| | | if (activity == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | } |
| | | |
| | | @Validated |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | 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 |
| | |
| | | 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 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; |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | |
| | | |
| | | //检查活动状态 |
| | | if (activity.getState() != LuckyActivity.STATE_NOT_PUBLISH) { |
| | | throw new LuckyActivityException(1, "活动已发布"); |
| | | throw new LuckyActivityException(1, "活动未处于审核成功状态"); |
| | | } |
| | | //检查开奖信息 |
| | | LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId()); |
| | |
| | | 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 { |
| | |
| | | } 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) |
| | |
| | | } |
| | | |
| | | @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; |
| | | } |
| | | //加载开奖信息 |
| | | 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 luckyActivityManager.getActivityDetail(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<LuckyActivity> getActivityDetail(List<Long> ids) { |
| | | List<LuckyActivity> activityList = new ArrayList<>(); |
| | | for (Long id : ids) { |
| | | LuckyActivity luckyActivity = getActivityDetail(id); |
| | | LuckyActivity luckyActivity = luckyActivityManager.getActivityDetail(id); |
| | | activityList.add(luckyActivity); |
| | | } |
| | | return activityList; |
| | |
| | | } |
| | | |
| | | activity.setUpdateTime(new Date()); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(activity); |
| | | luckyActivityManager.updateSelectiveByPrimaryKey(activity); |
| | | } |
| | | |
| | | @Override |
| | |
| | | query.appId = appId; |
| | | query.start = (page - 1) * pageSize; |
| | | query.count = pageSize; |
| | | query.sort = "actual_start_time desc"; |
| | | query.sortList = Arrays.asList(new String[]{"actual_start_time desc"}); |
| | | |
| | | query.stateList = Arrays.asList(new Integer[]{ |
| | | LuckyActivity.STATE_STARTED, |
| | |
| | | LuckyActivity.STATE_OPENED, |
| | | }); |
| | | |
| | | |
| | | return luckyActivityMapper.list(query); |
| | | List<LuckyActivity> list = luckyActivityMapper.list(query); |
| | | return list; |
| | | } |
| | | |
| | | @Override |