From 607193d080c531c7a0535f4006ac6d6b0ee27a17 Mon Sep 17 00:00:00 2001 From: yujian <yujian> Date: 星期一, 25 二月 2019 15:45:21 +0800 Subject: [PATCH] 抽奖活动 --- fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java | 382 ++++++++++++++++++++++++++++++++---------------------- 1 files changed, 226 insertions(+), 156 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java b/fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java index 82d20ee..39f3dc4 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java @@ -1,13 +1,16 @@ 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; @@ -15,6 +18,7 @@ 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; @@ -23,11 +27,12 @@ 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; /** - * 鐢ㄦ埛 + * 鐢ㄦ埛 * * @author Administrator * @@ -38,25 +43,32 @@ @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 @@ -71,26 +83,26 @@ 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 */ @@ -100,42 +112,42 @@ try { // 闅忔満20鏉℃暟鎹� List<ShamUser> listUser = shamUserService.listRandUser(20); - + JSONArray array = new JSONArray(); - for (ShamUser shamUser: listUser) { + for (ShamUser shamUser : listUser) { JSONObject dataInfo = new JSONObject(); - + String name = shamUser.getName(); if (name.length() == 1) { name = "Jx****" + name; } else { name = name.substring(0, 1) + "****" + name.substring(name.length() - 2, name.length() - 1); } - + String prize = generateAward(); if (prize == null) { prize = "鎶戒腑涓�寮犵鍒╁厤鍗曞埜"; } - + dataInfo.put("pic", shamUser.getPicUrl()); dataInfo.put("content", name + "锛屾娊涓�" + prize); array.add(dataInfo); } - + JSONObject data = new JSONObject(); data.put("result_list", array); - + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); - + } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鎿嶄綔澶辫触")); e.printStackTrace(); } } - /** * 鑾峰彇鎶藉缁撴灉 + * * @param callback * @param acceptData * @param uid @@ -144,16 +156,11 @@ @RequestMapping(value = "getLotteryResult") public void getLotteryResult(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 prize = "No_Prizes"; // freeCoupon 銆� rebateCoupon + // 濂栧搧 + int count = 0; + String prize = ""; + Long couponId = null; if (uid == null) { // 鏈櫥褰� int platformType = 0; @@ -166,72 +173,50 @@ 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() == 5) { // 鏃犳娊濂栨満浼� + 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() < 5 ){ // 鎷ユ湁鎶藉鏈轰細 - int hasPrize = 0; - Long couponId = null; - - for (DeviceLotteryRecord deviceLotteryRecord: list) { + } else if (list != null && list.size() < MAX_COUNT) { // 鎷ユ湁鎶藉鏈轰細 + for (DeviceLotteryRecord deviceLotteryRecord : list) { Long systemCouponId = deviceLotteryRecord.getSystemCouponId(); if (systemCouponId != null) { - hasPrize ++; + hasPrize++; couponId = systemCouponId; } } - - // 鍓�3娆℃病鏈夊鍔辨椂銆佸悗闈袱娆″繀涓� - if (hasPrize == 0 && list.size() == 3) { - long result = (1 + Math.round(Math.random() * (9))); - - if (result <=5) { - prize = CouponTypeEnum.welfareFreeCoupon.name(); // 绂忓埄鍏嶈垂鍒� - } else { - prize = CouponTypeEnum.rebatePercentCoupon.name(); // 濂栧姳鍒� - } - - } else if (hasPrize == 1 && list.size() == 4) { - SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId); - - if (systemCoupon != null) { - CouponTypeEnum type = systemCoupon.getType(); - if (type == CouponTypeEnum.welfareFreeCoupon) { - prize = CouponTypeEnum.rebatePercentCoupon.name(); // 濂栧姳鍒� - } else { - prize = CouponTypeEnum.welfareFreeCoupon.name(); // 绂忓埄鍏嶈垂鍒� - } - } else { - prize = CouponTypeEnum.rebatePercentCoupon.name(); // 濂栧姳鍒� - } - } else { // 澶т簬3娆℃満浼� - - if (hasPrize < 2 ) { // 涓嶈冻涓や釜濂栧搧 - - } else { - - } - - - } - - - - - - - + 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(); } - } else { //宸茬櫥褰� + // 鎻掑叆璁板綍 + 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("淇℃伅涓嶆纭�")); @@ -239,37 +224,125 @@ } Integer lotteryNewbies = userInfoExtra.getLotteryNewbies(); - if (lotteryNewbies == null ) { // 鏈娊杩� - // 鏄惁鏈夎繃璁㈠崟锛氳繑鍒┿�佸垎浜鍗� - boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid); - if (hasOrder) { - count = 0; // 涓嶇畻鏂扮敤鎴� + 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; } - } else { - count = lotteryNewbies; // 鍓╀綑娆℃暟 + 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); } - - // 鎶藉瑙勫垯 - String lotteryRule = configService.get("lottery_rule_newbies"); - + + if (prize == null || prize.trim().length() == 0) { + prize = "NoPrize"; + } + JSONObject data = new JSONObject(); data.put("count", count); - data.put("rule", lotteryRule); - + data.put("result", prize); + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); - + } catch (Exception e) { - JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鎿嶄綔澶辫触")); + JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鎶藉澶辫触")); e.printStackTrace(); } } + + /** + * 濂栧搧鎶藉彇 + * @param maxCount 鏈�澶ф鏁� + * @param hasPrize 鎷ユ湁濂栧搧鏁伴噺 + * @param record 宸叉娊娆℃暟 + * @param couponId 鍒竔d + * @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 @@ -277,105 +350,102 @@ */ 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; // 涓嶇畻鏂扮敤鎴� - } - - } else { - count = lotteryNewbies; // 鍓╀綑娆℃暟 - } + // 榛樿鏈�澶ф娊濂栨鏁� + 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("骞冲彴鏈夎"); } - - return count; + + 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; } - - - - - /** * 鐢熸垚濂栭」 * * @return */ public String generateAward() { - + RandomGift randomGift1 = new RandomGift(); randomGift1.prize = "鎶戒腑鍗庝负鎵嬫満20涓�鍙�"; randomGift1.probability = 2; - + RandomGift randomGift2 = new RandomGift(); randomGift2.prize = "鐜伴噾绾㈠寘楼188"; randomGift2.probability = 5; - + RandomGift randomGift3 = new RandomGift(); randomGift3.prize = "鐜伴噾绾㈠寘楼88"; randomGift3.probability = 13; - + RandomGift randomGift4 = new RandomGift(); randomGift4.prize = "涓�寮犵鍒╁厤鍗曞埜"; randomGift4.probability = 40; - + RandomGift randomGift5 = new RandomGift(); randomGift5.prize = "涓�寮犺繑鍒╁鍔卞埜"; randomGift5.probability = 40; - + List<RandomGift> giftList = new ArrayList<RandomGift>(); giftList.add(randomGift1); giftList.add(randomGift2); giftList.add(randomGift3); giftList.add(randomGift4); giftList.add(randomGift5); - + long result = (1 + Math.round(Math.random() * (99))); - + int minRange = 0; int maxRange = 0; - + String prize = null; - + for (int i = 0; i < giftList.size(); i++) { RandomGift obj2 = giftList.get(i); int probability = obj2.probability; - + maxRange = maxRange + probability; minRange = 100 - maxRange; - + if (probability != 0) { if (result > minRange && result <= maxRange) { prize = obj2.prize; @@ -383,7 +453,7 @@ } } } - + return prize; } -- Gitblit v1.8.0