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.0")
|
private LuckyActivityJoinService luckyActivityJoinService;
|
|
@Reference(version = "1.0.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<ActivityJoinerRankInfoVO> voList = new ArrayList<>();
|
|
List<ActivityJoinerRankInfo> list = luckyActivityJoinService.getWeightRankList(activityId, page, Constant.PAGE_SIZE);
|
if (list != null && list.size() > 0) {
|
Map<Long, UserInfo> 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<SimpleUser> voList = new ArrayList<>();
|
|
List<ActivitySimpleUser> list = luckyActivityJoinService.getJoinerList(activityId, page, Constant.PAGE_SIZE);
|
if (list != null && list.size() > 0) {
|
Map<Long, UserInfo> 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<Long> 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<ActivityDetailInfoDTO> 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());
|
}
|
|
}
|
|
|
}
|