| | |
| | | package com.ks.lucky.service.impl.remote; |
| | | |
| | | import com.ks.lucky.exception.LuckyActivityAwardException; |
| | | import com.ks.lucky.exception.LuckyActivityException; |
| | | import com.ks.lucky.mapper.LuckyActivityMapper; |
| | | import com.ks.lucky.pojo.DO.LuckyActivity; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwards; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo; |
| | | import com.ks.lucky.remote.service.LuckyActivityOpenService; |
| | | import com.ks.lucky.service.impl.LuckyActivityAwardManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityAwardResultManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityJoinManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager; |
| | | import com.ks.lucky.util.LuckyRunUtil; |
| | | import org.apache.dubbo.config.annotation.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | @Service(version = "1.0") |
| | | public class LuckyActivityOpenServiceImpl implements LuckyActivityOpenService { |
| | | @Override |
| | | public List<LuckyActivity> listValidActivity(String appKey, int page, int pageSize) { |
| | | return null; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardManager luckyActivityAwardManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityMapper luckyActivityMapper; |
| | | |
| | | @Resource |
| | | private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityJoinManager luckyActivityJoinManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardResultManager luckyActivityAwardResultManager; |
| | | |
| | | |
| | | /** |
| | | * 是否可以开奖了 |
| | | * |
| | | * @param activity |
| | | * @return |
| | | */ |
| | | private boolean canOpen(LuckyActivity activity) throws LuckyActivityException { |
| | | long now = System.currentTimeMillis(); |
| | | |
| | | if (activity.getState() != LuckyActivity.STATE_FINISH) { |
| | | throw new LuckyActivityException(1, "活动尚未结束"); |
| | | } |
| | | |
| | | LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId()); |
| | | |
| | | //未达到最低开奖人数 |
| | | if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) { |
| | | throw new LuckyActivityException(2, "尚未达到最低开奖人数"); |
| | | } |
| | | |
| | | //到达最低开奖人数就开奖 |
| | | if (activity.getPreOpenTime() != null) { |
| | | if (activity.getPreOpenTime().getTime() > now) { |
| | | throw new LuckyActivityException(2, "尚未达到开奖时间"); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public long countValidActivity(String appKey) { |
| | | return 0; |
| | | public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityAwardException { |
| | | //判断活动状态 |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); |
| | | if (activity == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | |
| | | |
| | | //判断是否达到开奖条件 |
| | | canOpen(activity); |
| | | //------------计算开奖------------- |
| | | |
| | | //获取奖项数据 |
| | | List<LuckyActivityAwards> awardsList = luckyActivityAwardManager.getAwardList(activityId); |
| | | if (awardsList == null || awardsList.size() == 0) { |
| | | throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "无奖项信息"); |
| | | } |
| | | |
| | | //获取用户数据 |
| | | Map<String, Integer> data = luckyActivityJoinManager.getJoinData(activityId); |
| | | for (LuckyActivityAwards awards : awardsList) { |
| | | //获取中奖用户ID |
| | | Set<String> uids = LuckyRunUtil.compute(data, awards.getCount()); |
| | | //保存开奖结果 |
| | | luckyActivityAwardResultManager.addRecord(uids, awards.getActivityId(), awards.getId()); |
| | | } |
| | | |
| | | |
| | | //更新状态 |
| | | LuckyActivity update = new LuckyActivity(); |
| | | update.setId(activityId); |
| | | update.setState(LuckyActivity.STATE_PRE_OPENED); |
| | | update.setStateRemarks("预开奖成功"); |
| | | update.setUpdateTime(new Date()); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void createActivity(LuckyActivity activity) throws LuckyActivityException { |
| | | public void showOpenAward(Long activityId) throws LuckyActivityException { |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); |
| | | if (activity.getState() != LuckyActivity.STATE_PRE_OPENED) { |
| | | throw new LuckyActivityException(1, "尚未开奖"); |
| | | } |
| | | |
| | | LuckyActivity update = new LuckyActivity(); |
| | | update.setId(activityId); |
| | | update.setUpdateTime(new Date()); |
| | | update.setState(LuckyActivity.STATE_OPENED); |
| | | update.setStateRemarks("已开奖"); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | luckyActivityAwardResultManager.setResultShow(activityId); |
| | | } |
| | | |
| | | @Override |
| | | public LuckyActivity getActivityDetail(Long id) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void updateActivity(LuckyActivity activity) throws LuckyActivityException { |
| | | |
| | | } |
| | | } |