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