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