From df4441322e9801c102299451da41d7c40b4502e9 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 24 六月 2021 18:53:13 +0800 Subject: [PATCH] zookeeper地址修改,Maven采用私服 --- service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 271 insertions(+), 12 deletions(-) diff --git a/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java b/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java index 6d0b129..f52fd66 100644 --- a/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java +++ b/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java @@ -1,20 +1,37 @@ package com.ks.lucky.service.impl.remote; +import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivityException; import com.ks.lucky.exception.LuckyActivityJoinException; +import com.ks.lucky.mapper.LuckyActivityAwardsMapper; import com.ks.lucky.mapper.LuckyActivityJoinRecordMapper; -import com.ks.lucky.pojo.DO.LuckyActivityJoinRecord; -import com.ks.lucky.pojo.DTO.JoinInfo; +import com.ks.lucky.pojo.DO.*; +import com.ks.lucky.pojo.DTO.*; +import com.ks.lucky.pojo.DTO.mq.ActivityJoinMsgDTO; +import com.ks.lucky.query.ActivityAwardQuery; +import com.ks.lucky.query.ActivityJoinRecordQuery; import com.ks.lucky.remote.service.LuckyActivityJoinService; -import com.ks.lucky.service.impl.AppManager; +import com.ks.lucky.remote.service.LuckyActivityOpenService; import com.ks.lucky.service.impl.LuckyActivityJoinManager; import com.ks.lucky.service.impl.LuckyActivityManager; +import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager; +import com.ks.lucky.service.impl.LuckyActivityUserWeightRecordManager; +import com.ks.lucky.util.LoggerUtil; +import com.ks.lucky.util.factory.LuckyActivityUserWeightRecordFactory; +import com.ks.lucky.util.mq.CMQManager; import org.apache.dubbo.config.annotation.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.yeshi.utils.StringUtil; 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 LuckyActivityJoinServiceImpl implements LuckyActivityJoinService { @Resource @@ -24,37 +41,279 @@ private LuckyActivityManager luckyActivityManager; @Resource - private AppManager appManager; + private LuckyActivityUserWeightRecordManager luckyActivityUserWeightRecordManager; @Resource private LuckyActivityJoinRecordMapper luckyActivityJoinRecordMapper; + @Resource + private LuckyActivityAwardsMapper luckyActivityAwardsMapper; + + @Resource + private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; + + + @Transactional(rollbackFor = Exception.class) + @Validated @Override - public void join(Long activityId, String appKey, String uid, JoinInfo joinInfo) throws LuckyActivityException, LuckyActivityJoinException { + public void join(Long activityId, Long appId, String uid, Integer weight, JoinInfo joinInfo, int userType) throws LuckyActivityException, LuckyActivityJoinException { luckyActivityManager.canJoin(activityId); - Long appId = appManager.getAppId(appKey); LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid); if (record != null) { throw new LuckyActivityJoinException(1, "宸茬粡鍙傚姞"); } + + if (weight == null) { + weight = 1; + } + record = new LuckyActivityJoinRecord(); record.setActivityId(activityId); record.setAppId(appId); record.setCreateTime(new Date()); record.setJoinInfo(joinInfo.toString()); record.setUid(uid); - record.setUserType(LuckyActivityJoinRecord.USER_TYPE_REAL); - record.setWeight(1); + record.setUserType(userType); + record.setWeight(weight); record.setCreateTime(new Date()); luckyActivityJoinRecordMapper.insertSelective(record); - luckyActivityManager.addJoinCount(activityId, record.getWeight()); + luckyActivityManager.addJoinCount(activityId, 1); + + + LuckyActivityUserWeightRecord weightRecord = LuckyActivityUserWeightRecordFactory.createJoin(activityId, appId, uid, weight); + try { + luckyActivityUserWeightRecordManager.addRecord(weightRecord); + } catch (ParamsException e) { + throw new LuckyActivityJoinException(1, "娣诲姞璁板綍鍑洪敊"); + } + + LoggerUtil.activityJoinLogger.info("鍙傚姞娲诲姩鎴愬姛锛歛ctivityId-{} uid-{}", activityId, uid); + + CMQManager.getInstance().publishActivityJoinMsg(ActivityJoinMsgDTO.create(record)); } @Override - public LuckyActivityJoinRecord getJoinInfo(Long activityId, String appKey, String uid) { - Long appId = appManager.getAppId(appKey); + public LuckyActivityJoinRecord getJoinInfo(Long activityId, Long appId, String uid) { LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid); return record; } + + @Override + public LuckyActivityJoinRecord getJoinRecord(Long id) { + return luckyActivityJoinRecordMapper.selectByPrimaryKey(id); + } + + @Override + public List<Long> getUnOpenActivityIdList(Long appId, String uid, int page, int pageSize) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.appId = appId; + query.uid = uid; + query.drawStateList = Arrays.asList(new Integer[]{LuckyActivityJoinRecord.DRAW_STATE_UNOPEN}); + query.start = (page - 1) * pageSize; + query.count = pageSize; + return drawActivityId(luckyActivityJoinRecordMapper.listWithActivityState(query, null)); + } + + @Override + public long countUnOpenActivityIdList(Long appId, String uid) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.appId = appId; + query.uid = uid; + query.drawStateList = Arrays.asList(new Integer[]{LuckyActivityJoinRecord.DRAW_STATE_UNOPEN}); + return luckyActivityJoinRecordMapper.countWithActivityState(query, null); + } + + + /** + * 鎻愬彇娲诲姩ID + * + * @param list + * @return + */ + private List<Long> drawActivityId(List<LuckyActivityJoinRecord> list) { + List<Long> activityList = new ArrayList<>(); + if (list != null) { + for (LuckyActivityJoinRecord record : list) { + activityList.add(record.getActivityId()); + } + } + return activityList; + } + + @Override + public List<Long> getUnDrawnActivityIdList(Long appId, String uid, int page, int pageSize) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.appId = appId; + query.uid = uid; + query.drawStateList = Arrays.asList(new Integer[]{LuckyActivityJoinRecord.DRAW_STATE_NOT_DRAWN}); + query.start = (page - 1) * pageSize; + query.count = pageSize; + List<LuckyActivityJoinRecord> list = luckyActivityJoinRecordMapper.listWithActivityState(query, Arrays.asList(new Integer[]{LuckyActivity.STATE_OPENED})); + return drawActivityId(list); + } + + @Override + public long countUnDrawnActivityIdList(Long appId, String uid) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.appId = appId; + query.uid = uid; + query.drawStateList = Arrays.asList(new Integer[]{LuckyActivityJoinRecord.DRAW_STATE_NOT_DRAWN}); + return luckyActivityJoinRecordMapper.countWithActivityState(query, Arrays.asList(new Integer[]{LuckyActivity.STATE_OPENED})); + } + + @Override + public List<ActivitySimpleUser> getRecentJoinerList(Long activityId, int count) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.activityId = activityId; + query.sortList = Arrays.asList(new String[]{"id desc"}); + query.count = count; + List<LuckyActivityJoinRecord> recordList = luckyActivityJoinRecordMapper.list(query); + + List<ActivitySimpleUser> list = new ArrayList<>(); + if (recordList != null) { + for (LuckyActivityJoinRecord record : recordList) { + list.add(new ActivitySimpleUser(activityId, record.getUid(), record.getAppId())); + } + } + return list; + } + + @Override + public List<ActivitySimpleUser> getRecentJoinerList(List<Long> activityIdList, int count) { + List<ActivitySimpleUser> list = new ArrayList<>(); + if (activityIdList != null) { + for (Long activityId : activityIdList) { + list.addAll(getRecentJoinerList(activityId, count)); + } + } + return list; + } + + @Override + public List<ActivitySimpleUser> getJoinerList(Long activityId, Integer userType, int page, int count) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.activityId = activityId; + query.sortList = Arrays.asList(new String[]{"id asc"}); + query.userType = userType; + query.count = count; + query.start = (page - 1) * count; + + List<LuckyActivityJoinRecord> recordList = luckyActivityJoinRecordMapper.list(query); + List<ActivitySimpleUser> list = new ArrayList<>(); + if (recordList != null) { + for (LuckyActivityJoinRecord record : recordList) { + list.add(new ActivitySimpleUser(activityId, record.getUid(), record.getAppId())); + } + } + return list; + } + + @Override + public long countJoiner(Long activityId, Integer userType) { + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.activityId = activityId; + query.userType = userType; + return luckyActivityJoinRecordMapper.count(query); + } + + @Override + public ActivityJoinStatisticInfo getActivityJoinerStatisticInfo(Long activityId, Long appId, String uid) { + ActivityJoinStatisticInfo info = new ActivityJoinStatisticInfo(); + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.activityId = activityId; + long count = luckyActivityJoinRecordMapper.count(query); + info.setTotalJoiner((int) count); + info.setActivityId(activityId); + + if (!StringUtil.isNullOrEmpty(uid)) { + int position = luckyActivityJoinRecordMapper.getJoinerPosition(activityId, appId, uid); + info.setMyPosition(position + 1); + } + return info; + } + + @Override + public ActivityDrawnProbabilityStatistic getActivityDrawnProbabilityStatistic(Long activityId, Long appId, String uid) { + Long weight = luckyActivityJoinRecordMapper.sumWeight(activityId); + if (weight == null) { + weight = 1L; + } + ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); + query.activityId = activityId; + long joinerCount = luckyActivityJoinRecordMapper.count(query); + ActivityDrawnProbabilityStatistic statistic = new ActivityDrawnProbabilityStatistic(); + ActivityAwardQuery awardQuery = new ActivityAwardQuery(); + awardQuery.activityId = activityId; + awardQuery.count = 100; + //濂栭」鏁伴噺 + int awardCount = 0; + List<LuckyActivityAwards> awards = luckyActivityAwardsMapper.list(awardQuery); + if (awards != null && awards.size() > 0) { + for (LuckyActivityAwards award : awards) { + awardCount += award.getCount(); + } + } + + LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId); + + //杩樺樊澶氬皯浜哄紑濂� + int difJoinnerCount = openInfo.getMinPersonCount() - (int) joinerCount; + difJoinnerCount = difJoinnerCount > 0 ? difJoinnerCount : 0; + + long joinerCountCompute = joinerCount < openInfo.getMinPersonCount() ? (openInfo.getMinPersonCount()) : joinerCount; + + //骞冲潎涓姒傜巼 + BigDecimal averageProbability = new BigDecimal(awardCount).divide(new BigDecimal(joinerCountCompute), 8, BigDecimal.ROUND_DOWN); + statistic.setAverageDrawnProbability(averageProbability); + LuckyActivityJoinRecord record=null; + if (!StringUtil.isNullOrEmpty(uid)) { + query.appId = appId; + query.uid = uid; + record = luckyActivityJoinManager.getRecord(activityId, appId, uid); + if (record != null) { + //鎴戠殑涓姒傜巼 + BigDecimal myProbability = new BigDecimal(awardCount * record.getWeight()).divide(new BigDecimal(weight).add(new BigDecimal(difJoinnerCount)), 8, BigDecimal.ROUND_DOWN); + statistic.setMyDrawnProbability(myProbability); + } + } + //瓒呰繃浜嗗灏戜汉 + query = new ActivityJoinRecordQuery(); + query.activityId = activityId; + query.maxWeight=record.getWeight(); + long lessCount = luckyActivityJoinRecordMapper.count(query); + statistic.setExceedPersonPercent(new BigDecimal(lessCount).multiply(new BigDecimal(100).divide(new BigDecimal(joinerCount), 2, BigDecimal.ROUND_DOWN))); + + statistic.setActivityId(activityId); + return statistic; + } + + @Override + public List<ActivityJoinerRankInfo> getWeightRankList(Long activityId, int page, int pageSize) { + return luckyActivityJoinRecordMapper.listWeightRank(activityId, (page - 1) * pageSize, pageSize); + } + + @Override + public long countWeightRank(Long activityId) { + return luckyActivityJoinRecordMapper.countWeightRank(activityId); + } + + @Override + public ActivityJoinerRankInfo getMyWeightRank(Long activityId, Long appId, String uid) { + LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid); + if (record == null) { + return null; + } + + int rank = luckyActivityJoinRecordMapper.getWeightRankWithRecord(record); + + ActivityJoinerRankInfo rankInfo = new ActivityJoinerRankInfo(); + rankInfo.setAppId(record.getAppId()); + rankInfo.setRank(rank); + rankInfo.setUid(record.getUid()); + rankInfo.setWeight(record.getWeight()); + + return rankInfo; + } + } -- Gitblit v1.8.0