From 74196bcc835d9b76cdd1bc3d85b0dfbe0191fc00 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 31 十二月 2020 19:23:43 +0800 Subject: [PATCH] 活动信息缓存 --- service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 161 insertions(+), 8 deletions(-) diff --git a/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java b/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java index a0f2fd5..26e9ae8 100644 --- a/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java +++ b/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java @@ -1,16 +1,24 @@ package com.ks.lucky.service.impl; import com.ks.lucky.exception.LuckyActivityException; +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.LuckyActivityOpenInfo; +import com.ks.lucky.pojo.DO.*; import com.ks.lucky.pojo.DTO.ActivityMQMsg; +import com.ks.lucky.pojo.DTO.mq.ActivityStateChangeMsgDTO; +import com.ks.lucky.service.LuckyActivityImageService; +import com.ks.lucky.service.LuckyMQService; +import com.ks.lucky.util.annotation.RedisCache; +import com.ks.lucky.util.annotation.RedisCacheEvict; import com.ks.lucky.util.mq.CMQManager; +import com.ks.lucky.util.mq.LuckyMQFactory; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Date; +import java.util.List; @Component @@ -21,6 +29,55 @@ @Resource private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; + + @Resource + private LuckyMQService luckyMQService; + @Resource + private LuckyActivityImageService luckyActivityImageService; + @Resource + private LuckyActivitySponsorInfoManager luckyActivitySponsorInfoManager; + @Resource + private LuckyActivityAwardManager luckyActivityAwardManager; + + + @RedisCache(cate = "activity", key = "'activity-detail-'+#id", second = 3600) + public LuckyActivity getActivityDetail(Long id) { + LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(id); + if (activity == null) { + return null; + } + + //鍔犺浇鍥剧墖淇℃伅 + List<LuckyActivityImage> bannerList = luckyActivityImageService.listByActivityId(id, LuckyActivityImage.LuckyImageType.banner); + activity.setBannerList(bannerList); + + //鍔犺浇寮�濂栦俊鎭� + 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()); + List<LuckyActivityAwards> awardsDetailList = new ArrayList<>(); + if (awardsList != null) { + for (LuckyActivityAwards awards : awardsList) { + awards = luckyActivityAwardManager.getAwardDetail(awards.getId()); + if (awards != null) { + awardsDetailList.add(awards); + } + } + } + activity.setAwardsList(awardsDetailList); + + return activity; + } /** @@ -36,12 +93,9 @@ throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "娲诲姩涓嶅瓨鍦�"); } - if (activity.getState() == LuckyActivity.STATE_NOT_STARTED) { - throw new LuckyActivityException(1, "娲诲姩杩樻湭寮�濮�"); - } - if (activity.getState() == LuckyActivity.STATE_FINISH || activity.getState() == LuckyActivity.STATE_OPENED) { - throw new LuckyActivityException(1, "娲诲姩宸茬粡缁撴潫"); + if (activity.getState() != LuckyActivity.STATE_STARTED) { + throw new LuckyActivityException(1, "娲诲姩涓嶅彲鍙備笌"); } if (activity.getCurrentPersonCount() >= activity.getMaxPersonCount()) { @@ -51,6 +105,23 @@ return true; } + + /** + * 鏄惁鍙互鏇存敼娲诲姩鍐呭 + * + * @param activityId + * @return + */ + public boolean canUpdate(Long activityId) { + LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(activityId); + if (activity != null) { + if (activity.getState() == LuckyActivity.STATE_VERIFY_REJECT || activity.getState() == LuckyActivity.STATE_NOT_SUBMIT_VERIFY) { + return true; + } + } + return false; + } + /** * 娣诲姞鍙備笌鏁� * @@ -58,6 +129,7 @@ * @param count * @throws LuckyActivityException */ + @RedisCacheEvict(cate = "activity", key = "'activity-detail-'+#activityId") @Transactional(rollbackFor = Exception.class) public void addJoinCount(Long activityId, int count) throws LuckyActivityException { LuckyActivity luckyActivity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); @@ -93,7 +165,8 @@ * * @param activityId */ - public void startUpActivity(Long activityId) throws LuckyActivityException { + @RedisCacheEvict(cate = "activity", key = "'activity-detail-'+#activityId") + public void startUpActivity(Long activityId) throws LuckyActivityException, LuckyMQException { LuckyActivity luckyActivity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); if (luckyActivity == null) { throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "娲诲姩涓嶅瓨鍦�"); @@ -105,6 +178,75 @@ //鍚姩娲诲姩 setState(activityId, LuckyActivity.STATE_STARTED, "宸茬粡鍚姩"); + //璁剧疆瀹為檯寮�濮嬫椂闂� + LuckyActivity update = new LuckyActivity(); + update.setId(activityId); + update.setActualStartTime(new Date()); + update.setUpdateTime(new Date()); + luckyActivityMapper.updateByPrimaryKeySelective(update); + + //鏈夐璁$粨鏉熸椂闂� + if (luckyActivity.getPreFinishTime() != null) { + //娣诲姞缁撴潫娑堟伅 + LuckyMQ mq = LuckyMQFactory.createFinishActivity(luckyActivity); + luckyMQService.addMQ(mq); + } + + //灏濊瘯鍒犻櫎娑堟伅 + try { + LuckyMQ mq = LuckyMQFactory.createStartUpActivity(luckyActivity); + luckyMQService.removeUnSendMsg(mq.getTaskId()); + } catch (LuckyMQException e) { + e.printStackTrace(); + } + + + } + + + /** + * 缁撴潫娲诲姩 + * + * @param activityId + * @param force 鏄惁寮哄埗缁撴潫 + * @param remarks + */ + @RedisCacheEvict(cate = "activity", key = "'activity-detail-'+#activityId") + @Transactional(rollbackFor = Exception.class) + public void finishActivity(Long activityId, boolean force, String remarks) throws LuckyActivityException, LuckyMQException { + LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); + if (activity.getState() != LuckyActivity.STATE_STARTED) { + throw new LuckyActivityException(1, "娲诲姩鏈浜庡凡寮�濮嬬姸鎬�"); + } + + //璁剧疆娲诲姩澶勪簬寮哄埗缁撴潫鐘舵�� + if (force) { + setState(activityId, LuckyActivity.STATE_FOUCE_FINISH, remarks); + } else { + setState(activityId, LuckyActivity.STATE_FINISH, remarks); + } + LuckyActivity update = new LuckyActivity(); + update.setId(activityId); + update.setActualFinishTime(new Date()); + update.setUpdateTime(new Date()); + luckyActivityMapper.updateByPrimaryKeySelective(update); + + activity.setActualFinishTime(update.getActualFinishTime()); + //寮哄埗缁撴潫鐨勪笉寮�濂� + if (!force) { + //娣诲姞寮�濂栨秷鎭� + LuckyMQ mq = LuckyMQFactory.createOpenActivity(activity); + luckyMQService.addMQ(mq); + } + //灏濊瘯鍒犻櫎娑堟伅 + try { + LuckyMQ mq1 = LuckyMQFactory.createFinishActivity(activity); + luckyMQService.removeUnSendMsg(mq1.getTaskId()); + } catch (LuckyMQException e) { + e.printStackTrace(); + } + + } @@ -126,12 +268,23 @@ * @param state * @param stateRemarks */ + @RedisCacheEvict(cate = "activity", key = "'activity-detail-'+#activityId") + @Transactional(rollbackFor = Exception.class) public void setState(Long activityId, int state, String stateRemarks) { LuckyActivity activity = new LuckyActivity(); activity.setId(activityId); activity.setState(state); activity.setStateRemarks(stateRemarks); activity.setUpdateTime(new Date()); + updateSelectiveByPrimaryKey(activity); + CMQManager.getInstance().publishActivityStateChangeMsg(new ActivityStateChangeMsgDTO(activityId, state, stateRemarks, activity.getUpdateTime())); + } + + @RedisCacheEvict(cate = "activity", key = "'activity-detail-'+#activity.id") + public void updateSelectiveByPrimaryKey(LuckyActivity activity) { + if (activity.getUpdateTime() == null) { + activity.setUpdateTime(new Date()); + } luckyActivityMapper.updateByPrimaryKeySelective(activity); } -- Gitblit v1.8.0