From a2ae9b3d890bc7fcaa34ab65e5cdaf8ccfa07c2b Mon Sep 17 00:00:00 2001
From: yujian <yujian@123.com>
Date: 星期三, 13 十一月 2019 15:35:12 +0800
Subject: [PATCH] 红包弹框加入设备验证

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java |   91 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 80 insertions(+), 11 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java
index d596829..165b86b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java
@@ -11,14 +11,19 @@
 
 import com.yeshi.fanli.dao.mongodb.redpack.RedPackWinNewUserDao;
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
+import com.yeshi.fanli.entity.push.DeviceActive;
+import com.yeshi.fanli.entity.redpack.RedPackBalance;
 import com.yeshi.fanli.entity.redpack.RedPackWinNewUser;
+import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.push.DeviceActiveService;
 import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
 import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
 import com.yeshi.fanli.service.inter.redpack.RedPackWinNewUserService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
 import com.yeshi.fanli.util.factory.RedPackDetailFactory;
 import com.yeshi.fanli.vo.redpack.RedPackWinDetailVO;
@@ -41,11 +46,75 @@
 	@Resource
 	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
 	
+	@Resource
+	private DeviceActiveService deviceActiveService;
+	
+	
+	@Override
+	public boolean verifyHasReward(Long uid, String device) {
+		try {
+			if (StringUtil.isNullOrEmpty(device) && (uid == null || uid <= 0)) 
+				return false;
+			
+			if (uid == null || uid <= 0) {
+				DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(device);
+				if (deviceActive == null) 
+					return true; // 鏂拌澶囧脊鍑�
+				
+				Date nowTime = new Date();
+				Date createTime = deviceActive.getCreateTime();
+				int days = DateUtil.daysBetween2(createTime, nowTime);
+				if (days >= Constant.RED_PACK_NEW_USER_DAYS) {
+					return false; // 宸茬粡瓒呭嚭璁剧疆澶╂暟
+				}
+				return true; // 鏈秴杩囨椂闂�
+			}
+			
+			RedPackBalance redPackBalance = redPackBalanceService.selectByPrimaryKey(uid);
+			if (redPackBalance != null && redPackBalance.getState() != null 
+					&& redPackBalance.getState() == RedPackBalance.STATE_LOCKED) 
+				return false;  // 绾㈠寘灏佺
+			
+			UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+			if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null) 
+				return false;
+			
+			Date nowTime = new Date();
+			Date firstLoginTime = userInfoExtra.getFirstLoginTime();
+			int days = DateUtil.daysBetween2(firstLoginTime, nowTime);
+			if (days >= Constant.RED_PACK_NEW_USER_DAYS)
+				return false; // 宸茬粡瓒呭嚭璁剧疆澶╂暟
+			
+			RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid);
+			if (redPackWin != null) {
+				if (redPackWin.getMoney().compareTo(Constant.RED_PACK_NEW_USER_MONEY) >= 0)
+					return false; // 宸查鍙栧畬
+				
+				Date updateTime = redPackWin.getUpdateTime();
+				int daysNum = DateUtil.daysBetween2(updateTime, nowTime);
+				if (daysNum == 0) 
+					return false; // 浠婃棩宸查鍙�
+				
+				Integer num = redPackWin.getNum();
+				if (num >= Constant.RED_PACK_NEW_USER_DAYS) 
+					return false; // 棰嗗彇娆℃暟瓒呴檺
+			}
+			return true;
+		} catch (Exception e) {
+			LogHelper.errorDetailInfo(e);
+		}
+		return false;
+	}
+	
+	
 	
 	@RequestSerializableByKeyService(key = "#uid")
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public RedPackWinDetailVO receiveReward(Long uid) throws Exception {
+		if (uid == null || uid <= 0) 
+			return null; // 鏈櫥褰曞脊鍑�
+		
 		UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
 		if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null) 
 			return null;
@@ -53,7 +122,7 @@
 		Date nowTime = new Date();
 		Date firstLoginTime = userInfoExtra.getFirstLoginTime();
 		int days = DateUtil.daysBetween2(firstLoginTime, nowTime);
-		if (days > Constant.RED_PACK_NEW_USER_DAYS)
+		if (days >= Constant.RED_PACK_NEW_USER_DAYS)
 			return null; // 宸茬粡瓒呭嚭璁剧疆澶╂暟
 		
 		RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid);
@@ -73,23 +142,28 @@
 				
 		BigDecimal money = null;
 		if (redPackWin == null) { // 绗竴娆�
-			if (days == Constant.RED_PACK_NEW_USER_DAYS) {  // 鏈�鍚庝竴澶�
+			if (days == Constant.RED_PACK_NEW_USER_DAYS - 1) {  // 鏈�鍚庝竴澶�
 				money = Constant.RED_PACK_NEW_USER_MONEY;
 			} else { // 璁$畻闅忔満濂栧姳
 				double randomNum = Constant.RED_PACK_NEW_USER_MIN +  Math.random() * (Constant.RED_PACK_NEW_USER_MAX - Constant.RED_PACK_NEW_USER_MIN);
-				BigDecimal rate = new BigDecimal(randomNum/100).setScale(2);
+				randomNum = randomNum/100;
+				BigDecimal rate = new BigDecimal(randomNum).setScale(2, BigDecimal.ROUND_DOWN);
 				money = MoneyBigDecimalUtil.mul(Constant.RED_PACK_NEW_USER_MONEY,rate);
 			}
-		} else if (days == Constant.RED_PACK_NEW_USER_DAYS) { // 鏈�鍚庝竴澶�
+		} else if (days == Constant.RED_PACK_NEW_USER_DAYS - 1) { // 鏈�鍚庝竴澶�
 			money = MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY, redPackWin.getMoney());
 		} else { // 璁$畻鍓╀綑闅忔満濂栧姳 10%-25% 
 			double randomNum = 10 +  Math.random() * (20 - 10);
-			BigDecimal rate = new BigDecimal(randomNum/100).setScale(2);
+			BigDecimal rate = new BigDecimal(randomNum/100).setScale(2, BigDecimal.ROUND_DOWN);
 			money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY,redPackWin.getMoney()),rate);
 		}
 		
-		int num = 1;
 		money = money.setScale(2);
+		// 4銆佸鍔犵孩鍖�
+		redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createNewUserReward(uid, days, money));
+		
+		// 鎻掑叆棰嗗彇璁板綍
+		int num = 1;
 		if (redPackWin == null) {
 			redPackWin = new RedPackWinNewUser();
 			redPackWin.setNum(1);
@@ -99,16 +173,11 @@
 			redPackWin.setUpdateTime(nowTime);
 		} else {
 			num = redPackWin.getNum() + 1;
-			redPackWin = new RedPackWinNewUser();
-			redPackWin.setUid(uid.toString());
 			redPackWin.setNum(num);
 			redPackWin.setMoney(MoneyBigDecimalUtil.add(money, redPackWin.getMoney()));
 			redPackWin.setUpdateTime(nowTime);
 		}
 		redPackWinNewUserDao.save(redPackWin);
-		
-		// 4銆佸鍔犵孩鍖�
-		redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createNewUserReward(uid,num, money));
 		
 		RedPackWinDetailVO winDetailVO = new RedPackWinDetailVO();
 		winDetailVO.setTitle("鏂颁汉绾㈠寘");

--
Gitblit v1.8.0