fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java
@@ -1,33 +1,18 @@ package com.yeshi.fanli.controller.apph5; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.yeshi.utils.DateUtil; import org.yeshi.utils.JsonUtil; import com.alibaba.fastjson.JSONArray; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord; import com.yeshi.fanli.entity.bus.user.ShamUser; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserSystemCoupon; import com.yeshi.fanli.entity.system.SystemCoupon; import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.config.SystemCouponService; import com.yeshi.fanli.service.inter.order.CommonOrderCountService; import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService; import com.yeshi.fanli.service.inter.user.ShamUserService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import net.sf.json.JSONObject; @@ -41,67 +26,13 @@ @RequestMapping("api/apph5/v1/user") public class AppH5UserController { @Resource private DeviceLotteryRecordService deviceLotteryRecordService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private CommonOrderCountService commonOrderCountService; @Resource private ShamUserService shamUserService; @Resource private ConfigService configService; @Resource private SystemCouponService systemCouponService; @Resource private UserSystemCouponService userSystemCouponService; // 最大抽奖次数 private static int MAX_COUNT = 5; /** * 获取抽奖次数 * * @param callback * @param acceptData * @param uid * @param out */ @RequestMapping(value = "getLotteryCount") public void getLotteryCount(String callback, AcceptData acceptData, Long uid, PrintWriter out) { int count = 0; try { count = getSurplusCount(acceptData, uid); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMessage())); e.printStackTrace(); } try { // 抽奖规则 String lotteryRule = configService.get("lottery_rule_newbies"); JSONObject data = new JSONObject(); data.put("count", count); data.put("rule", lotteryRule); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败")); e.printStackTrace(); } } /** * 获取抽奖次数 * 获取抽奖广告列表 * * @param callback * @param out @@ -145,258 +76,6 @@ } } /** * 获取抽奖结果 * * @param callback * @param acceptData * @param uid * @param out */ @RequestMapping(value = "getLotteryResult") public void getLotteryResult(String callback, AcceptData acceptData, Long uid, PrintWriter out) { try { // 奖品 int count = 0; String prize = ""; Long couponId = null; if (uid == null) { // 未登录 int platformType = 0; String platform = acceptData.getPlatform(); if ("android".equals(platform)) { platformType = 1; } else if ("ios".equals(platform)) { platformType = 2; } else { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("平台有误")); return; } String device = acceptData.getDevice(); if (device == null || device.trim().length() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在")); return; } int hasPrize = 0; List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device); if (list != null && list.size() == MAX_COUNT) { // 无抽奖机会 JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足")); return; } else if (list != null && list.size() < MAX_COUNT) { // 拥有抽奖机会 for (DeviceLotteryRecord deviceLotteryRecord : list) { Long systemCouponId = deviceLotteryRecord.getSystemCouponId(); if (systemCouponId != null) { hasPrize++; couponId = systemCouponId; } } count = MAX_COUNT - 1 - list.size(); } else { count = MAX_COUNT - 1; } // 奖品 prize = getLotteryPrize(MAX_COUNT, hasPrize, list.size(), couponId); // 抽中 Long newCouponId = null; if (prize != null && prize.trim().length() > 0) { SystemCoupon coupon= systemCouponService.getCouponByType(prize); newCouponId =coupon.getId(); } // 插入记录 DeviceLotteryRecord record = new DeviceLotteryRecord(); record.setDevice(device); record.setPlatform(platformType); record.setSystemCouponId(newCouponId); record.setCreateTime(new Date()); deviceLotteryRecordService.insertSelective(record); } else { // 已登录 UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("信息不正确")); return; } Integer lotteryNewbies = userInfoExtra.getLotteryNewbies(); if (lotteryNewbies == null || lotteryNewbies < 1 ) { // 次数已用光 JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足")); return; } else { count = lotteryNewbies - 1; // 剩余次数 } List<UserSystemCoupon> list = userSystemCouponService.getUserCouponBySource(uid, UserSystemCoupon.SOURCE_CHOUJIANG); if (list != null && list.size() == 1) { couponId = list.get(0).getSystemCoupon().getId(); } // 奖品 prize = getLotteryPrize(MAX_COUNT, list.size(), MAX_COUNT- lotteryNewbies, couponId); // 抽中 if (prize != null && prize.trim().length() > 0) { SystemCoupon coupon= systemCouponService.getCouponByType(prize); String endDay = DateUtil.plusDay(coupon.getExpiryDay(), new Date()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date endTime = format.parse(endDay); int stateActivated = 1; if (coupon.getType() == CouponTypeEnum.welfareFreeCoupon) { stateActivated = 0; } UserSystemCoupon userCoupon = new UserSystemCoupon(); userCoupon.setUid(uid); userCoupon.setSource(UserSystemCoupon.SOURCE_CHOUJIANG); userCoupon.setSystemCoupon(coupon); userCoupon.setState(UserSystemCoupon.STATE_CAN_USE); userCoupon.setStateActivated(stateActivated); userCoupon.setStartTime(new Date()); userCoupon.setEndTime(endTime); userCoupon.setCreateTime(new Date()); userCoupon.setUpdateTime(new Date()); userSystemCouponService.insertSelective(userCoupon); } // 剩余次数 userInfoExtra.setLotteryNewbies(count); userInfoExtraService.saveUserInfoExtra(userInfoExtra); } if (prize == null || prize.trim().length() == 0) { prize = "NoPrize"; } JSONObject data = new JSONObject(); data.put("count", count); data.put("result", prize); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("抽奖失败")); e.printStackTrace(); } } /** * 奖品抽取 * @param maxCount 最大次数 * @param hasPrize 拥有奖品数量 * @param record 已抽次数 * @param couponId 券id * @return */ public String getLotteryPrize(int maxCount, int hasPrize, int record, Long couponId) { String prize = null; String freeCoupon = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券 String rebateCoupon = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券 if (hasPrize == 1 && record == maxCount - 1) { // 最后一次: 只收到一个奖品 SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId); if (systemCoupon != null) { CouponTypeEnum type = systemCoupon.getType(); if (type.name() == freeCoupon) { prize = rebateCoupon; // 奖励券 } else { prize = freeCoupon; // 福利免费券 } } else { prize = rebateCoupon; // 奖励券 } } else if (hasPrize == 0 && record == maxCount - 2) { // 前3次没有奖励时、后面两次必中 long result = (1 + Math.round(Math.random() * (9))); if (result <= 5) { prize = freeCoupon; // 福利免费券 } else { prize = rebateCoupon; // 奖励券 } } else { // 大于3次机会 if (hasPrize < 2) { // 不足两个奖品 long result = (1 + Math.round(Math.random() * (9))); if (result <= 3) { prize = freeCoupon; // 福利免费券 } else if (result <= 6) { prize = rebateCoupon; // 奖励券 } } } return prize; } /** * 获取抽奖结果 * * @param callback * @param acceptData * @param uid * @param out */ public int getSurplusCount(AcceptData acceptData, Long uid) throws Exception { // 默认最大抽奖次数 int count = 5; if (uid == null) { // 未登录 int platformType = 0; String platform = acceptData.getPlatform(); if ("android".equals(platform)) { platformType = 1; } else if ("ios".equals(platform)) { platformType = 2; } else { throw new Exception("平台有误"); } String device = acceptData.getDevice(); if (device == null || device.trim().length() == 0) { throw new Exception("设备不存在"); } List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device); if (list != null && list.size() > 0) { count = count - list.size(); } } else { // 已登录 UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra == null) { throw new Exception("信息不正确"); } Integer lotteryNewbies = userInfoExtra.getLotteryNewbies(); if (lotteryNewbies == null) { // 未抽过 // 是否有过订单:返利、分享订单 boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid); if (hasOrder) { count = 0; // 不算新用户 } userInfoExtra.setLotteryNewbies(count); userInfoExtraService.saveUserInfoExtra(userInfoExtra); } else { count = lotteryNewbies; // 剩余次数 } } return count; } /** * 生成奖项 fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserRankingsController.java
@@ -12,10 +12,9 @@ import javax.annotation.Resource; import net.sf.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.yeshi.utils.JsonUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -24,9 +23,8 @@ import com.yeshi.fanli.entity.bus.user.UserRankings; import com.yeshi.fanli.service.inter.hongbao.HongBaoService; import com.yeshi.fanli.service.inter.user.UserRankingsService; import com.yeshi.fanli.util.annotation.RequestNoSignValidate; import org.yeshi.utils.JsonUtil; import net.sf.json.JSONObject; @Controller @RequestMapping("api/apph5/v1/rewardRank") fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java
@@ -1,23 +1,34 @@ package com.yeshi.fanli.controller.client; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.DateUtil; import org.yeshi.utils.JsonUtil; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture; import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserSystemCoupon; import com.yeshi.fanli.entity.system.SystemCoupon; import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; import com.yeshi.fanli.exception.user.UserSystemCouponException; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.config.SystemCouponService; import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService; import com.yeshi.fanli.service.inter.order.CommonOrderCountService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.vo.user.UserSystemCouponRecordVO; @@ -45,6 +56,25 @@ @Resource private CommonOrderService commonOrderService; @Resource private DeviceLotteryRecordService deviceLotteryRecordService; @Resource private SystemCouponService systemCouponService; @Resource private UserSystemCouponService userSystemCouponService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private CommonOrderCountService commonOrderCountService; // 最大抽奖次数 private static int MAX_COUNT = 5; /** * 用户券列表查询 @@ -287,4 +317,292 @@ } } /** * 获取抽奖次数 * * @param callback * @param acceptData * @param uid * @param out */ @RequestMapping(value = "getLotteryCount") public void getLotteryCount(String callback, AcceptData acceptData, Long uid, PrintWriter out) { int count = 0; try { count = getSurplusCount(acceptData, uid); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMessage())); e.printStackTrace(); } try { // 抽奖规则 String lotteryRule = configService.get("lottery_rule_newbies"); JSONObject data = new JSONObject(); data.put("count", count); data.put("rule", lotteryRule); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败")); e.printStackTrace(); } } /** * 获取抽奖结果 * * @param callback * @param acceptData * @param uid * @param out */ @RequestMapping(value = "getLotteryResult") public void getLotteryResult(String callback, AcceptData acceptData, Long uid, PrintWriter out) { try { // 奖品 int count = 0; String prize = ""; Long couponId = null; if (uid == null) { // 未登录 int platformType = 0; String platform = acceptData.getPlatform(); if ("android".equals(platform)) { platformType = 1; } else if ("ios".equals(platform)) { platformType = 2; } else { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("平台有误")); return; } String device = acceptData.getDevice(); if (device == null || device.trim().length() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在")); return; } int hasPrize = 0; List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device); if (list != null && list.size() == MAX_COUNT) { // 无抽奖机会 JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足")); return; } else if (list != null && list.size() < MAX_COUNT) { // 拥有抽奖机会 for (DeviceLotteryRecord deviceLotteryRecord : list) { Long systemCouponId = deviceLotteryRecord.getSystemCouponId(); if (systemCouponId != null) { hasPrize++; couponId = systemCouponId; } } count = MAX_COUNT - 1 - list.size(); } else { count = MAX_COUNT - 1; } // 奖品 prize = getLotteryPrize(MAX_COUNT, hasPrize, list.size(), couponId); // 抽中 Long newCouponId = null; if (prize != null && prize.trim().length() > 0) { SystemCoupon coupon= systemCouponService.getCouponByType(prize); newCouponId =coupon.getId(); } // 插入记录 DeviceLotteryRecord record = new DeviceLotteryRecord(); record.setDevice(device); record.setPlatform(platformType); record.setSystemCouponId(newCouponId); record.setCreateTime(new Date()); deviceLotteryRecordService.insertSelective(record); } else { // 已登录 UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("信息不正确")); return; } Integer lotteryNewbies = userInfoExtra.getLotteryNewbies(); if (lotteryNewbies == null || lotteryNewbies < 1 ) { // 次数已用光 JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足")); return; } else { count = lotteryNewbies - 1; // 剩余次数 } List<UserSystemCoupon> list = userSystemCouponService.getUserCouponBySource(uid, UserSystemCoupon.SOURCE_CHOUJIANG); if (list != null && list.size() == 1) { couponId = list.get(0).getSystemCoupon().getId(); } // 奖品 prize = getLotteryPrize(MAX_COUNT, list.size(), MAX_COUNT- lotteryNewbies, couponId); // 抽中 if (prize != null && prize.trim().length() > 0) { SystemCoupon coupon= systemCouponService.getCouponByType(prize); String endDay = DateUtil.plusDay(coupon.getExpiryDay(), new Date()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date endTime = format.parse(endDay); int stateActivated = 1; if (coupon.getType() == CouponTypeEnum.welfareFreeCoupon) { stateActivated = 0; } UserSystemCoupon userCoupon = new UserSystemCoupon(); userCoupon.setUid(uid); userCoupon.setSource(UserSystemCoupon.SOURCE_CHOUJIANG); userCoupon.setSystemCoupon(coupon); userCoupon.setState(UserSystemCoupon.STATE_CAN_USE); userCoupon.setStateActivated(stateActivated); userCoupon.setStartTime(new Date()); userCoupon.setEndTime(endTime); userCoupon.setCreateTime(new Date()); userCoupon.setUpdateTime(new Date()); userSystemCouponService.insertSelective(userCoupon); } // 剩余次数 userInfoExtra.setLotteryNewbies(count); userInfoExtraService.saveUserInfoExtra(userInfoExtra); } if (prize == null || prize.trim().length() == 0) { prize = "NoPrize"; } JSONObject data = new JSONObject(); data.put("count", count); data.put("result", prize); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("抽奖失败")); e.printStackTrace(); } } /** * 奖品抽取 * @param maxCount 最大次数 * @param hasPrize 拥有奖品数量 * @param record 已抽次数 * @param couponId 券id * @return */ public String getLotteryPrize(int maxCount, int hasPrize, int record, Long couponId) { String prize = null; String freeCoupon = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券 String rebateCoupon = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券 if (hasPrize == 1 && record == maxCount - 1) { // 最后一次: 只收到一个奖品 SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId); if (systemCoupon != null) { CouponTypeEnum type = systemCoupon.getType(); if (type.name() == freeCoupon) { prize = rebateCoupon; // 奖励券 } else { prize = freeCoupon; // 福利免费券 } } else { prize = rebateCoupon; // 奖励券 } } else if (hasPrize == 0 && record == maxCount - 2) { // 前3次没有奖励时、后面两次必中 long result = (1 + Math.round(Math.random() * (9))); if (result <= 5) { prize = freeCoupon; // 福利免费券 } else { prize = rebateCoupon; // 奖励券 } } else { // 大于3次机会 if (hasPrize < 2) { // 不足两个奖品 long result = (1 + Math.round(Math.random() * (9))); if (result <= 3) { prize = freeCoupon; // 福利免费券 } else if (result <= 6) { prize = rebateCoupon; // 奖励券 } } } return prize; } /** * 获取抽奖结果 * * @param callback * @param acceptData * @param uid * @param out */ public int getSurplusCount(AcceptData acceptData, Long uid) throws Exception { // 默认最大抽奖次数 int count = 5; if (uid == null) { // 未登录 int platformType = 0; String platform = acceptData.getPlatform(); if ("android".equals(platform)) { platformType = 1; } else if ("ios".equals(platform)) { platformType = 2; } else { throw new Exception("平台有误"); } String device = acceptData.getDevice(); if (device == null || device.trim().length() == 0) { throw new Exception("设备不存在"); } List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device); if (list != null && list.size() > 0) { count = count - list.size(); } } else { // 已登录 UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra == null) { throw new Exception("信息不正确"); } Integer lotteryNewbies = userInfoExtra.getLotteryNewbies(); if (lotteryNewbies == null) { // 未抽过 // 是否有过订单:返利、分享订单 boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid); if (hasOrder) { count = 0; // 不算新用户 } userInfoExtra.setLotteryNewbies(count); userInfoExtraService.saveUserInfoExtra(userInfoExtra); } else { count = lotteryNewbies; // 剩余次数 } } return count; } }