package com.ks.daylucky.controller.api.client; import com.ks.daylucky.pojo.DO.UserInfo; import com.ks.daylucky.pojo.DTO.ActivityDetailInfoDTO; import com.ks.daylucky.pojo.VO.*; import com.ks.daylucky.service.ActivityService; import com.ks.daylucky.service.UserInfoService; import com.ks.daylucky.util.Constant; import com.ks.daylucky.util.UserInfoUtil; import com.ks.daylucky.util.factory.vo.ActivityListItemInfoVOFactory; import com.ks.lucky.exception.LuckyActivityException; import com.ks.lucky.exception.LuckyActivityJoinException; import com.ks.lucky.pojo.DTO.*; import com.ks.lucky.remote.service.LuckyActivityAwardResultService; import com.ks.lucky.remote.service.LuckyActivityJoinService; import net.sf.json.JSONObject; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.yeshi.utils.JsonUtil; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @Controller @RequestMapping("api/client/activity/join") public class ActivityJoinController { @Reference(version = "1.0") private LuckyActivityJoinService luckyActivityJoinService; @Reference(version = "1.0") private LuckyActivityAwardResultService luckyActivityAwardResultService; @Resource private UserInfoService userInfoService; @Resource private ActivityService activityService; /** * 获取排行 * * @param acceptData * @param activityId * @param page * @return */ @ResponseBody @RequestMapping("getRankList") public String getRankList(AcceptData acceptData, Long activityId, int page) { List voList = new ArrayList<>(); List list = luckyActivityJoinService.getWeightRankList(activityId, page, Constant.PAGE_SIZE); if (list != null && list.size() > 0) { Map userInfoMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(list)); for (ActivityJoinerRankInfo info : list) { UserInfo user = userInfoMap.get(info.getUid()); if (user != null) { voList.add(new ActivityJoinerRankInfoVO(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait()), info.getRank(), info.getWeight())); } } } ActivityJoinerRankInfoVO myRank = null; if (page == 1 && acceptData.getUid() != null) { ActivityJoinerRankInfo rank = luckyActivityJoinService.getMyWeightRank(activityId, acceptData.getApp().getId(), acceptData.getUid() + ""); if (rank != null) { UserInfo user = userInfoService.getUserDetail(Long.parseLong(rank.getUid())); myRank = new ActivityJoinerRankInfoVO(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait()), rank.getRank(), rank.getWeight()); } } long count = luckyActivityJoinService.countWeightRank(activityId); JSONObject data = new JSONObject(); data.put("data", voList); data.put("count", count); if (myRank != null) { data.put("myRank", myRank); } return JsonUtil.loadTrueResult(data); } /** * 获取参与者的中奖概率 * * @param acceptData * @param activityId * @param targetUid * @return */ @ResponseBody @RequestMapping("getProbability") public String getProbability(AcceptData acceptData, Long activityId, Long targetUid) { ActivityDrawnProbabilityStatistic probability = luckyActivityJoinService.getActivityDrawnProbabilityStatistic(activityId, acceptData.getApp().getId(), targetUid + ""); BigDecimal average = probability.getAverageDrawnProbability(); BigDecimal my = probability.getMyDrawnProbability(); DrawnProbabilityVO vo = new DrawnProbabilityVO(); vo.setAverage(average.multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP) + ""); vo.setMy(my.multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP) + ""); //-------计算百分比-------- //获取我的排行 ActivityJoinerRankInfo rank = luckyActivityJoinService.getMyWeightRank(activityId, acceptData.getApp().getId(), targetUid + ""); //获取总人数 long count = luckyActivityJoinService.countWeightRank(activityId); BigDecimal percent = new BigDecimal(rank.getRank()).divide(new BigDecimal(count), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)); vo.setPercent(percent.intValue()); BigDecimal offset = null; if (average.compareTo(my) > 0) { offset = new BigDecimal(0).subtract(average.divide(my, 2, BigDecimal.ROUND_HALF_UP)); } else { offset = my.divide(average, 2, BigDecimal.ROUND_HALF_UP); } vo.setOffset(offset); return JsonUtil.loadTrueResult(vo); } /** * 获取参与者列表 * * @param acceptData * @param activityId * @param page * @return */ @ResponseBody @RequestMapping("getJoinerList") public String getJoinerList(AcceptData acceptData, Long activityId, int page) { List voList = new ArrayList<>(); List list = luckyActivityJoinService.getJoinerList(activityId, page, Constant.PAGE_SIZE); if (list != null && list.size() > 0) { Map userInfoMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(list)); for (ActivitySimpleUser info : list) { UserInfo user = userInfoMap.get(info.getUid()); if (user != null) { voList.add(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait())); } } } JSONObject data = new JSONObject(); if (page == 1) { //统计信息 ActivityJoinStatisticInfo joinerStatisticInfo = luckyActivityJoinService.getActivityJoinerStatisticInfo(activityId, acceptData.getApp().getId(), acceptData.getUid() + ""); if (joinerStatisticInfo != null) { data.put("statistic", joinerStatisticInfo); } } long count = luckyActivityJoinService.countWeightRank(activityId); data.put("data", voList); data.put("count", count); return JsonUtil.loadTrueResult(data); } /** * 获取抽奖记录 * * @param acceptData * @param type 1-待开奖 2-已中奖 3-未中奖 * @return */ @ResponseBody @RequestMapping("getJoinRecord") public String getJoinRecord(AcceptData acceptData, int type, int page) { List activityIdList = new ArrayList<>(); long count = 0; Long appId = acceptData.getApp().getId(); Long uid = acceptData.getUid(); switch (type) { case 1: activityIdList = luckyActivityJoinService.getUnOpenActivityIdList(appId, uid + "", page, Constant.PAGE_SIZE); count = luckyActivityJoinService.countUnOpenActivityIdList(appId, uid + ""); break; case 2: activityIdList = luckyActivityAwardResultService.getDrawnActivityIdList(appId, uid + "", page, Constant.PAGE_SIZE); count = luckyActivityAwardResultService.countDrawnActivityIdList(appId, uid + ""); break; case 3: activityIdList = luckyActivityJoinService.getUnDrawnActivityIdList(appId, uid + "", page, Constant.PAGE_SIZE); count = luckyActivityJoinService.countUnDrawnActivityIdList(appId, uid + ""); break; } List voList = activityService.getActivityDetail(activityIdList, appId, uid, type == 2 ? true : false); JSONObject data = new JSONObject(); data.put("data", ActivityListItemInfoVOFactory.create(voList)); data.put("count", count); return JsonUtil.loadTrueResult(data); } @ResponseBody @RequestMapping("join") public String join(AcceptData acceptData, Long activityId) { UserInfo userInfo = userInfoService.getUserDetail(acceptData.getUid()); if (userInfo == null) { return JsonUtil.loadFalseResult("用户不存在"); } JoinInfo joinInfo = new JoinInfo(); joinInfo.setAlipayUid(userInfo.getAlipayUid()); try { int weight = 1; luckyActivityJoinService.join(activityId, acceptData.getApp().getId(), acceptData.getUid() + "", 1, joinInfo); //TODO 抽奖活动的类型需要替换 return JsonUtil.loadTrueResult(new JoinResultInfoVO(weight, String.format("活动期号:NO.%s\n抽奖活动", activityId))); } catch (LuckyActivityException e) { return JsonUtil.loadFalseResult(e.getMsg()); } catch (LuckyActivityJoinException e) { return JsonUtil.loadFalseResult(e.getMsg()); } } }