From 4d7db6fd66f5b2c9cae9954e46314f9711ce1e8f Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 06 十一月 2019 18:51:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java |  168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 168 insertions(+), 0 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
new file mode 100644
index 0000000..c03afe6
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java
@@ -0,0 +1,168 @@
+package com.yeshi.fanli.service.impl.redpack;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.DateUtil;
+
+import com.yeshi.fanli.dao.mongodb.redpack.RedPackWinNewUserDao;
+import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
+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.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.annotation.RequestSerializableByKeyService;
+import com.yeshi.fanli.util.factory.RedPackDetailFactory;
+import com.yeshi.fanli.vo.redpack.RedPackWinDetailVO;
+
+@Service
+public class RedPackWinNewUserServiceImpl implements RedPackWinNewUserService {
+
+	@Resource
+	private RedPackWinNewUserDao redPackWinNewUserDao;
+	
+	@Resource
+	private RedPackConfigService redPackConfigService;
+	
+	@Resource	
+	private UserInfoExtraService userInfoExtraService;
+	
+	@Resource
+	private RedPackBalanceService redPackBalanceService;
+	
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+	
+	
+	@Override
+	public boolean verifyHasReward(Long uid) {
+		try {
+			if (uid == null || uid <= 0) 
+				return true; // 鏈櫥褰曞脊鍑�
+			
+			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;
+		
+		Date nowTime = new Date();
+		Date firstLoginTime = userInfoExtra.getFirstLoginTime();
+		int days = DateUtil.daysBetween2(firstLoginTime, nowTime);
+		if (days > Constant.RED_PACK_NEW_USER_DAYS)
+			return null; // 宸茬粡瓒呭嚭璁剧疆澶╂暟
+		
+		RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid);
+		if (redPackWin != null) {
+			if (redPackWin.getMoney().compareTo(Constant.RED_PACK_NEW_USER_MONEY) >= 0)
+				return null; // 宸查鍙栧畬
+			
+			Date updateTime = redPackWin.getUpdateTime();
+			int daysNum = DateUtil.daysBetween2(updateTime, nowTime);
+			if (daysNum == 0) 
+				return null; // 浠婃棩宸查鍙�
+			
+			Integer num = redPackWin.getNum();
+			if (num >= Constant.RED_PACK_NEW_USER_DAYS) 
+				return null; // 棰嗗彇娆℃暟瓒呴檺
+		}
+				
+		BigDecimal money = null;
+		if (redPackWin == null) { // 绗竴娆�
+			if (days == Constant.RED_PACK_NEW_USER_DAYS) {  // 鏈�鍚庝竴澶�
+				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);
+				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) { // 鏈�鍚庝竴澶�
+			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.ROUND_DOWN);
+			money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY,redPackWin.getMoney()),rate);
+		}
+		
+		int num = 1;
+		money = money.setScale(2);
+		if (redPackWin == null) {
+			redPackWin = new RedPackWinNewUser();
+			redPackWin.setNum(1);
+			redPackWin.setMoney(money);
+			redPackWin.setUid(uid.toString());
+			redPackWin.setCreateTime(nowTime);
+			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("鏂颁汉绾㈠寘");
+		winDetailVO.setBless("鎭枩浣狅紒宸查" + num + "/" + Constant.RED_PACK_NEW_USER_DAYS + "娆�");
+		winDetailVO.setMoney(money.toString());
+		winDetailVO.setDesc("棰嗗彇鎴愬姛锛屽凡瀛樺叆鈥滄垜鐨�-绾㈠寘鈥�");
+		winDetailVO.setTips(redPackConfigService.getValueByKey("new_user_win_tips"));
+		return winDetailVO;
+	}
+	
+	
+
+}

--
Gitblit v1.8.0