| | |
| | | |
| | | 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.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.pojo.DTO.ActivityMQMsg; |
| | | 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.service.impl.*; |
| | | import com.ks.lucky.util.LuckyRunUtil; |
| | | import com.ks.lucky.util.mq.CMQManager; |
| | | import org.apache.dubbo.config.annotation.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | @Service(version = "1.0") |
| | | @Service(version = "1.0.0") |
| | | public class LuckyActivityOpenServiceImpl implements LuckyActivityOpenService { |
| | | |
| | | @Resource |
| | |
| | | |
| | | @Resource |
| | | private LuckyActivityMapper luckyActivityMapper; |
| | | |
| | | |
| | | @Resource |
| | | private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; |
| | |
| | | @Resource |
| | | private LuckyActivityAwardResultManager luckyActivityAwardResultManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityManager luckyActivityManager; |
| | | |
| | | |
| | | /** |
| | | * 是否可以开奖了 |
| | |
| | | */ |
| | | private boolean canOpen(LuckyActivity activity) throws LuckyActivityException { |
| | | long now = System.currentTimeMillis(); |
| | | |
| | | if (activity.getState() != LuckyActivity.STATE_FINISH) { |
| | | throw new LuckyActivityException(1, "活动尚未结束"); |
| | | } |
| | |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityAwardException { |
| | | public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityOpenException, LuckyActivityAwardException { |
| | | //判断活动状态 |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); |
| | | if (activity == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | |
| | | |
| | | //判断是否达到开奖条件 |
| | | canOpen(activity); |
| | | try { |
| | | canOpen(activity); |
| | | } catch (LuckyActivityException e) { |
| | | throw new LuckyActivityOpenException(1, "尚未达到开奖条件"); |
| | | } |
| | | //------------计算开奖------------- |
| | | |
| | | //获取奖项数据 |
| | |
| | | update.setState(LuckyActivity.STATE_PRE_OPENED); |
| | | update.setStateRemarks("预开奖成功"); |
| | | update.setUpdateTime(new Date()); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | luckyActivityManager.updateSelectiveByPrimaryKey(update); |
| | | //添加消息 |
| | | CMQManager.getInstance().addActivityMsg(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_OPEN_SHOW, new Date())); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | update.setUpdateTime(new Date()); |
| | | update.setState(LuckyActivity.STATE_OPENED); |
| | | update.setStateRemarks("已开奖"); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | luckyActivityAwardResultManager.setResultShow(activityId); |
| | | luckyActivityManager.updateSelectiveByPrimaryKey(update); |
| | | |
| | | //先设置所有记录未中奖 |
| | | luckyActivityJoinManager.setActivityAllJoinerUnDraw(activityId); |
| | | //设置中奖用户状态为中奖 |
| | | luckyActivityJoinManager.setActivityDrawnJoinerState(activityId); |
| | | |
| | | try { |
| | | luckyActivityAwardResultManager.setResultShow(activityId); |
| | | } catch (LuckyMQException e) { |
| | | throw new LuckyActivityException(10, "添加MQ出错"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void reachMinPerson(Long activityId) throws LuckyActivityException { |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(activityId); |
| | | if (activity == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | //如果未设置开奖时间,且活动正在进行,就判断是否达到最低人数 |
| | | if (activity.getPreOpenTime() == null) { |
| | | if (activity.getState() == LuckyActivity.STATE_STARTED) { |
| | | try { |
| | | luckyActivityManager.finishActivity(activityId, false, "达到最低开奖人数"); |
| | | } catch (LuckyMQException e) { |
| | | throw new LuckyActivityException(1, e.getMsg()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |