package com.ks.daylucky.controller.api.client; import com.ks.daylucky.pojo.DO.ActivityDrawnRecieveNotifyInfo; import com.ks.daylucky.pojo.DO.UserInfo; import com.ks.daylucky.pojo.VO.*; import com.ks.daylucky.service.ActivityDrawnRecieveNotifyInfoService; import com.ks.daylucky.service.UserInfoService; import com.ks.daylucky.util.Constant; import com.ks.daylucky.util.UserInfoUtil; import com.ks.daylucky.util.activity.ActivityUtil; import com.ks.daylucky.util.factory.vo.ActivityDetailVOFactory; import com.ks.daylucky.util.factory.vo.ActivityListItemInfoVOFactory; import com.ks.lucky.exception.LuckyActivityAwardException; import com.ks.lucky.exception.LuckyActivityAwardResultException; import com.ks.lucky.exception.LuckyActivityException; import com.ks.lucky.pojo.DO.LuckyActivity; import com.ks.lucky.pojo.DO.LuckyActivityAwardResult; import com.ks.lucky.pojo.DO.LuckyActivityAwards; import com.ks.lucky.pojo.DTO.ActivityAwardParams; import com.ks.lucky.pojo.DTO.ActivityDrawnReceiveParams; import com.ks.lucky.remote.service.LuckyActivityAwardResultService; import com.ks.lucky.remote.service.LuckyActivityAwardService; import com.ks.lucky.remote.service.LuckyActivityService; import net.sf.json.JSONArray; 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 org.yeshi.utils.TimeUtil; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @Controller @RequestMapping("api/client/activity/awards") public class ActivityAwardsController { @Reference(version = "1.0.0", check = false) private LuckyActivityAwardResultService luckyActivityAwardResultService; @Reference(version = "1.0.0", check = false) private LuckyActivityAwardService luckyActivityAwardService; @Reference(version = "1.0.0", check = false) private LuckyActivityService luckyActivityService; @Resource private UserInfoService userInfoService; @Resource private ActivityDrawnRecieveNotifyInfoService activityDrawnRecieveNotifyInfoService; /** * 获取中奖信息 * * @param acceptData * @return */ @ResponseBody @RequestMapping("getDrawnInfo") public String getDrawnInfo(AcceptData acceptData, Long activityId, int count) { List list = luckyActivityAwardService.getAwardList(activityId); JSONArray array = new JSONArray(); int p = 0; for (LuckyActivityAwards award : list) { award = luckyActivityAwardService.getAwardDetail(award.getId()); JSONObject item = new JSONObject(); List awardResults = luckyActivityAwardResultService.getResultListWithAwardInfo(activityId, award.getId(), 1, count); long resultCount = luckyActivityAwardResultService.countResultWithAwardInfo(activityId, award.getId()); List userList = new ArrayList<>(); Map userMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(awardResults)); for (LuckyActivityAwardResult info : awardResults) { UserInfo user = userMap.get(Long.parseLong(info.getUid())); if (user != null) { userList.add(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait())); } } item.put("userList", userList); item.put("userCount", resultCount); item.put("award", ActivityListItemInfoVOFactory.create(award, p++)); array.add(item); } JSONObject data = new JSONObject(); data.put("data", array); Date updateTime = luckyActivityAwardResultService.getLatestUpdateTime(activityId); if (updateTime != null) { data.put("updateTime", TimeUtil.getGernalTime(updateTime.getTime(), "yyyy.MMM.dd HH:mm")); } return JsonUtil.loadTrueResult(data); } /** * 获取活动的某个奖项的中奖列表 * * @param acceptData * @param activityId * @param awardId * @param page * @return */ @ResponseBody @RequestMapping("getDrawnJoinerList") public String getDrawnJoinerList(AcceptData acceptData, Long activityId, Long awardId, int page) { List awardResults = luckyActivityAwardResultService.getResultListWithAwardInfo(activityId, awardId, page, Constant.PAGE_SIZE); long count = luckyActivityAwardResultService.countResultWithAwardInfo(activityId, awardId); List userList = new ArrayList<>(); Map userMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(awardResults)); for (LuckyActivityAwardResult info : awardResults) { UserInfo user = userMap.get(info.getUid()); if (user != null) { userList.add(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait())); } } JSONObject data = new JSONObject(); data.put("data", userList); data.put("count", count); return JsonUtil.loadTrueResult(data); } /** * 获取领奖通知弹框 * * @param acceptData * @return */ @ResponseBody @RequestMapping("getRecieveAwardNotify") public String getRecieveAwardNotify(AcceptData acceptData, Long activityId) { ActivityDrawnRecieveNotifyInfo info = activityDrawnRecieveNotifyInfoService.getShowNotifyInfo(acceptData.getApp().getId(), acceptData.getUid(), activityId); if (info != null) { UserActivityUnRecievedAwardVO vo = new UserActivityUnRecievedAwardVO(); LuckyActivityAwards award = luckyActivityAwardService.getAwardDetail(info.getAwards().getId()); LuckyActivity activity = luckyActivityService.getActivity(award.getActivityId()); vo.setTitle("活动期号:" + ActivityUtil.getActivityDateNumber(award.getActivityId(), activity.getCreateTime())); vo.setActivityId(info.getAwards().getActivityId()); vo.setType(info.getType()); vo.setId(info.getId()); switch (info.getType()) { case ActivityDrawnRecieveNotifyInfo.TYPE_UNRECIEVE: vo.setDesc("未领取,可在\"我的-全部抽奖\"中查看"); vo.setAward(ActivityListItemInfoVOFactory.create(award, null)); break; case ActivityDrawnRecieveNotifyInfo.TYPE_OUTDATE: vo.setDesc("注:中奖日起7天内未领取奖品,将会把对应奖品原路退回赞助商,切记中奖后按时领取奖品。"); vo.setAward(ActivityListItemInfoVOFactory.create(award, award.getLevel())); break; } return JsonUtil.loadTrueResult(vo); } return JsonUtil.loadFalseResult(""); } /** * 设置中奖通知弹框已读 * * @param acceptData * @param id * @return */ @ResponseBody @RequestMapping("setDrawnNotifyRead") public String setDrawnNotifyRead(AcceptData acceptData, String id) { ActivityDrawnRecieveNotifyInfo info = activityDrawnRecieveNotifyInfoService.selectByPrimaryKey(id); String uid = null; Long appId = null; if (info.getAwardResult() != null) { uid = info.getAwardResult().getUid(); appId = info.getAwardResult().getAppId(); } if (uid == null || appId == null) { return JsonUtil.loadFalseResult("信息获取出错"); } if (acceptData.getUid().longValue() != Long.parseLong(uid) || acceptData.getApp().getId().longValue() != appId) { return JsonUtil.loadFalseResult("不是自己的中奖"); } activityDrawnRecieveNotifyInfoService.setNotifyShown(info.getId()); return JsonUtil.loadTrueResult(""); } /** * 领取奖品 * * @param acceptData * @param activityId * @return */ @ResponseBody @RequestMapping("recieveAward") public String recieveAward(AcceptData acceptData, Long activityId) { LuckyActivityAwardResult result = luckyActivityAwardResultService.getResult(acceptData.getApp().getId(), acceptData.getUid() + "", activityId); if (result == null) { return JsonUtil.loadFalseResult("未找到中奖记录"); } /** * 填充必要的参数 */ ActivityDrawnReceiveParams params = new ActivityDrawnReceiveParams(); LuckyActivityAwards luckyActivityAward = luckyActivityAwardService.getAwardDetail(result.getAwardId()); //支付宝红包类型 if (luckyActivityAward.getActivityAwardParams().getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) { //需要获取支付宝的ID UserInfo userInfo = userInfoService.getUserDetail(acceptData.getUid()); params.setAlipayUid(userInfo.getAlipayUid()); } try { luckyActivityAwardResultService.recieveAward(acceptData.getApp().getId(), acceptData.getUid() + "", activityId, params); return JsonUtil.loadTrueResult("领取成功"); } catch (LuckyActivityException e) { e.printStackTrace(); } catch (LuckyActivityAwardException e) { e.printStackTrace(); } catch (LuckyActivityAwardResultException e) { e.printStackTrace(); } return JsonUtil.loadFalseResult("领取失败"); } }