From e38ed8ad96af9893ab53bd34f8fd50f7b6b921b0 Mon Sep 17 00:00:00 2001
From: yujian <yujian>
Date: 星期三, 06 三月 2019 10:15:52 +0800
Subject: [PATCH] 使用券是否可以使用加以验证

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |  158 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 154 insertions(+), 4 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
index 5149f4e..d4af745 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -15,7 +15,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.yeshi.utils.DateUtil;
-import org.yeshi.utils.JsonUtil;
 
 import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
 import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
@@ -28,6 +27,7 @@
 import com.yeshi.fanli.entity.common.JumpDetailV2;
 import com.yeshi.fanli.entity.money.UserMoneyDetail;
 import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.entity.push.PushCoupon;
 import com.yeshi.fanli.entity.system.SystemCoupon;
 import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
 import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -596,6 +596,13 @@
 		if (userSystemCoupon == null) {
 			throw new UserSystemCouponException(1, "鍒告暟鎹笉姝g‘");
 		}
+		
+		Integer state = userSystemCoupon.getState();
+		Integer stateActivated = userSystemCoupon.getStateActivated();
+		if (UserSystemCoupon.STATE_CAN_USE != state || 1 != stateActivated) {
+			throw new UserSystemCouponException(1, "璇ュ埜涓嶈兘琚娇鐢�");
+		}
+		
 
 		Long couponUid = userSystemCoupon.getUid();
 		if (!uid.equals(couponUid)) {
@@ -658,6 +665,12 @@
 		UserSystemCoupon userSystemCoupon = selectByPrimaryKey(id);
 		if (userSystemCoupon == null) {
 			throw new UserSystemCouponException(1, "鍒镐俊鎭笉瀛樺湪");
+		}
+		
+		Integer state = userSystemCoupon.getState();
+		Integer stateActivated = userSystemCoupon.getStateActivated();
+		if (UserSystemCoupon.STATE_CAN_USE != state || 1 != stateActivated) {
+			throw new UserSystemCouponException(1, "璇ュ埜涓嶈兘琚娇鐢�");
 		}
 
 		// 绯荤粺鍒镐俊鎭�
@@ -1040,9 +1053,12 @@
 		return userRecordVO;
 	}
 	
+	
 	@Transactional
 	@Override
-	public void activatedWelfareFreeCoupon(Long uid) {
+	public void activatedWelfareFreeCoupon(Long uid, String fromNickName) {
+		
+		LogHelper.test("鍒告縺娲�:"+uid);
 		if (uid == null) {
 			return;
 		}
@@ -1078,7 +1094,11 @@
 			
 			// 娑堟伅鎺ㄩ��
 			try {
-				userOtherMsgNotificationService.welfareCouponActive(userSystemCoupon, new UserInfo(uid));
+				UserInfo userInfo = new UserInfo();
+				userInfo.setId(uid);
+				userInfo.setNickName(fromNickName);
+				
+				userOtherMsgNotificationService.welfareCouponActive(userSystemCoupon, userInfo);
 			} catch(Exception e) {
 				try {
 					LogHelper.errorDetailInfo(e);
@@ -1361,6 +1381,8 @@
 		
 		// 鑾峰彇棰濆淇℃伅
 		UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+		
+		// 宸茬粡鎶借繃濂栫殑鎴栬�呭凡缁忚繘鍏ヨ繃鎶藉椤甸潰鐨�
 		if (userInfoExtra != null && userInfoExtra.getLotteryNewbies() != null) {
 			return;
 		}
@@ -1453,6 +1475,134 @@
 	
 	}
 	
+	@Override
+	@Transactional
+	public void randomRewardCoupon(PushCoupon pushCoupon, Long uid) throws Exception {
+		int coupon = 0;
+		
+		Integer amount = pushCoupon.getAmount();
+		for (int i = 0; i < amount; i++) {
+			
+			BigDecimal percent = pushCoupon.getPercent();
+			if (percent == null) {
+				// 杩斿埄姣�-闅忔満
+				percent = new BigDecimal(randomNum());
+			}
+			
+			// 鏌ヨ濂栧姳鍒�
+			SystemCoupon systemCoupon = systemCouponService.getCouponByTypeAndPercent(
+					CouponTypeEnum.rebatePercentCoupon.name(),percent);
+			
+			if (systemCoupon == null) {
+				return;
+			}
+			
+			UserSystemCoupon userCoupon = new UserSystemCoupon();
+			userCoupon.setUid(uid);
+			userCoupon.setSource(UserSystemCoupon.SOURCE_SYSTEM_PUSH);
+			userCoupon.setSystemCoupon(systemCoupon);
+			userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
+			userCoupon.setStateActivated(1);
+			userCoupon.setStartTime(pushCoupon.getStartTime());
+			userCoupon.setEndTime(pushCoupon.getEndTime());
+			userCoupon.setCreateTime(new Date());
+			userCoupon.setUpdateTime(new Date());
+			// 鎻掑叆鏁版嵁搴�
+			insertSelective(userCoupon);
+			
+			// 鍒告暟閲�
+			coupon ++;
+			
+			// 娑堟伅鎺ㄩ��
+			try {
+				if (systemCoupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
+					userOtherMsgNotificationService.welfareCouponGet(userCoupon);
+				} else if (systemCoupon.getType() == CouponTypeEnum.freeCoupon) {
+					userOtherMsgNotificationService.freeSheetCouponGet(userCoupon);
+				} else if (systemCoupon.getType() == CouponTypeEnum.rebatePercentCoupon) {
+					userOtherMsgNotificationService.rewardCouponGet(userCoupon,systemCoupon.getPercent().intValue());
+				}
+				
+			} catch(Exception e) {
+				try {
+					LogHelper.errorDetailInfo(e);
+				} catch (Exception e1) {
+					e1.printStackTrace();
+				}
+			}
+		}
+		
+		// 鑾峰彇棰濆淇℃伅
+		UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+		if (userInfoExtra == null) {
+			return;
+		}
+		
+		Integer couponNews = userInfoExtra.getCouponNews();
+		if (couponNews == null) {
+			userInfoExtra.setCouponNews(coupon);
+		} else {
+			userInfoExtra.setCouponNews(couponNews + coupon);
+		}
+		userInfoExtraService.saveUserInfoExtra(userInfoExtra);
+	}
+		
+	/**
+	 * 闅忔満鍒告瘮渚�
+	 * @return
+	 */
+	public int randomNum() {
+		
+		int result = 1;
+		
+		List<RandomProportion> list = new ArrayList<RandomProportion>();
+		list.add(new RandomProportion(1,2,30));
+		list.add(new RandomProportion(2,4,25));
+		list.add(new RandomProportion(4,6,20));
+		list.add(new RandomProportion(6,8,6));
+		list.add(new RandomProportion(8,10,6));
+		list.add(new RandomProportion(10,20,6));
+		list.add(new RandomProportion(20,30,2));
+		list.add(new RandomProportion(30,40,2));
+		list.add(new RandomProportion(40,50,2));
+		list.add(new RandomProportion(50,60,1));
+
+		int minRange = 0;
+		int maxRange = 0;
+		int randomNum = (int) (1 + Math.round(Math.random() * (99)));
+		
+		for (int i = 0; i < list.size(); i++) {
+			
+			RandomProportion proportion = list.get(i);
+			int probability = proportion.probability;
+			
+			maxRange = maxRange + probability;
+			minRange = maxRange - probability;
+			
+			if (i == list.size() && randomNum > minRange && randomNum <= maxRange) {
+				result = proportion.minNum + (int) (Math.random() * ((proportion.maxNum - proportion.minNum) + 1));
+				break;
+			} else if(randomNum > minRange && randomNum <= maxRange) {
+				result = proportion.minNum + (int) (Math.random() * ((proportion.maxNum - proportion.minNum)));
+				break;
+			}
+		}
+		
+		return result;
+	}
 	
-	
+	class RandomProportion {
+		public int minNum;// 鏈�灏�
+		public int maxNum;// 鏈�澶�
+		public int probability; // 姒傜巼
+		
+		RandomProportion () {}
+		
+		RandomProportion (int minNum, int maxNum, int probability) {
+			this.minNum = minNum;
+			this.maxNum = maxNum;
+			this.probability = probability;
+		}
+	}
 }
+	

--
Gitblit v1.8.0