| | |
| | | package com.ks.lucky.service.impl.remote; |
| | | |
| | | import com.ks.lucky.exception.LuckyActivityAwardException; |
| | | import com.ks.lucky.exception.LuckyActivityException; |
| | | import com.ks.lucky.exception.LuckyActivityOpenException; |
| | | import com.ks.lucky.exception.LuckyMQException; |
| | | import com.ks.lucky.exception.*; |
| | | import com.ks.lucky.mapper.LuckyActivityMapper; |
| | | import com.ks.lucky.pojo.DO.LuckyActivity; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwards; |
| | |
| | | @Resource |
| | | private LuckyActivityMapper luckyActivityMapper; |
| | | |
| | | |
| | | @Resource |
| | | private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; |
| | | |
| | |
| | | * @param activity |
| | | * @return |
| | | */ |
| | | private boolean canOpen(LuckyActivity activity) throws LuckyActivityException { |
| | | private boolean canOpen(LuckyActivity activity) throws LuckyActivityException, LuckyActivityOpenException { |
| | | 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) { |
| | | if (openInfo.getPreOpenTime() != null) { |
| | | if (openInfo.getPreOpenTime().getTime() > now) { |
| | | throw new LuckyActivityException(2, "尚未达到开奖时间"); |
| | | } |
| | | } else { |
| | | throw new LuckyActivityException(2, "尚未达到开奖时间"); |
| | | } |
| | | |
| | | //未达到最低开奖人数 |
| | | if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) { |
| | | throw new LuckyActivityOpenException(LuckyActivityOpenException.CODE_NOT_REACH_OPEN_PERSON_COUNT, "尚未达到最低开奖人数"); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | //判断是否达到开奖条件 |
| | | try { |
| | | canOpen(activity); |
| | | } catch (LuckyActivityOpenException e) { |
| | | if (e.getCode() == LuckyActivityOpenException.CODE_NOT_REACH_OPEN_PERSON_COUNT) { |
| | | //开奖失败 |
| | | luckyActivityManager.setState(activityId, LuckyActivity.STATE_OPEN_FAIL, "人数未达到开奖人数,开奖失败"); |
| | | return; |
| | | } else { |
| | | throw new LuckyActivityOpenException(1, "尚未达到开奖条件"); |
| | | } |
| | | } catch (LuckyActivityException e) { |
| | | throw new LuckyActivityOpenException(1, "尚未达到开奖条件"); |
| | | } |
| | |
| | | |
| | | |
| | | //更新状态 |
| | | LuckyActivity update = new LuckyActivity(); |
| | | update.setId(activityId); |
| | | update.setState(LuckyActivity.STATE_PRE_OPENED); |
| | | update.setStateRemarks("预开奖成功"); |
| | | update.setUpdateTime(new Date()); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | luckyActivityManager.setState(activityId,LuckyActivity.STATE_PRE_OPENED,"预开奖成功"); |
| | | |
| | | //添加消息 |
| | | CMQManager.getInstance().addActivityMsg(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_OPEN_SHOW, new Date())); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void showOpenAward(Long activityId) throws LuckyActivityException { |
| | | public void showOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityOpenInfoException { |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); |
| | | if (activity.getState() != LuckyActivity.STATE_PRE_OPENED) { |
| | | throw new LuckyActivityException(1, "尚未开奖"); |
| | |
| | | update.setUpdateTime(new Date()); |
| | | update.setState(LuckyActivity.STATE_OPENED); |
| | | update.setStateRemarks("已开奖"); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | luckyActivityManager.updateSelectiveByPrimaryKey(update); |
| | | |
| | | //设置实际开奖时间 |
| | | LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId); |
| | | LuckyActivityOpenInfo updateOpenInfo = new LuckyActivityOpenInfo(); |
| | | updateOpenInfo.setId(openInfo.getId()); |
| | | updateOpenInfo.setActualOpenTime(new Date()); |
| | | luckyActivityOpenInfoManager.updateOpenInfo(updateOpenInfo, activityId); |
| | | |
| | | //先设置所有记录未中奖 |
| | | luckyActivityJoinManager.setActivityAllJoinerUnDraw(activityId); |
| | |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | //如果未设置开奖时间,且活动正在进行,就判断是否达到最低人数 |
| | | if (activity.getPreOpenTime() == null) { |
| | | LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId); |
| | | if (openInfo.getPreOpenTime() == null) { |
| | | if (activity.getState() == LuckyActivity.STATE_STARTED) { |
| | | try { |
| | | luckyActivityManager.finishActivity(activityId, false, "达到最低开奖人数"); |