From cd4d7c2ff85d68aebec276073020224b5de56415 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 05 十一月 2019 10:29:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java |  347 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 347 insertions(+), 0 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
new file mode 100644
index 0000000..31d1d4a
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
@@ -0,0 +1,347 @@
+package com.yeshi.fanli.service.impl.redpack;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.DateUtil;
+
+import com.google.gson.Gson;
+import com.yeshi.fanli.dao.mybatis.redpack.RedPackWinInviteMapper;
+import com.yeshi.fanli.dto.msg.MsgRedPackAddContentDTO;
+import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum;
+import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
+import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
+import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
+import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
+import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
+import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService;
+import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
+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.annotation.redpack.RedPackGetVersionLimit;
+import com.yeshi.fanli.util.factory.RedPackDetailFactory;
+import com.yeshi.fanli.vo.order.CommonOrderVO;
+
+@Service
+public class RedPackWinInviteServiceImpl implements RedPackWinInviteService {
+
+	@Resource
+	private RedPackWinInviteMapper redPackWinInviteMapper;
+	
+	@Resource
+	private RedPackConfigService redPackConfigService;
+	
+	@Resource
+	private RedPackBalanceService redPackBalanceService;
+
+	@Resource
+	private CommonOrderService  commonOrderService;
+	
+	@Resource
+	private ThreeSaleSerivce threeSaleSerivce;
+	
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+	
+	@Resource	
+	private UserInfoService userInfoService;
+	
+	@Resource	
+	private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
+	
+	@Resource	
+	private IntegralTaskRecordService integralTaskRecordService;
+	
+	
+	@Override
+	public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) {
+		return redPackWinInviteMapper.getRewardList(start, count, uid);
+	}
+	
+	
+	@Override
+	public Long countRewardRecord(Long uid) {
+		return redPackWinInviteMapper.countRewardRecord(uid);
+	}
+	
+	@RedPackGetVersionLimit(uid = "#uid")
+	@RequestSerializableByKeyService(key = "#uid")
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void orderArriveReward(Long uid, Integer source, String orderNo) throws Exception {
+		if (uid == null || source == null || orderNo == null)
+			return;
+		
+		// 涓婁竴绾х殑濂栧姳
+		UserInfo boss = threeSaleSerivce.getBoss(uid);
+		if(boss != null) {
+			firstReward(uid, source, orderNo);
+			bossReward(boss.getId(), uid, source, orderNo);
+		}
+	}
+	
+	
+	/**
+	 * 涓婄骇濂栧姳
+	 * @param uid
+	 * @param teamUid
+	 * @param source
+	 * @param orderNo
+	 * @throws Exception
+	 */
+	@RedPackGetVersionLimit(uid = "#uid")
+	@Transactional
+	private void  bossReward(Long uid, Long teamUid, Integer source, String orderNo)  throws Exception {
+		firstSharedOrderRewardToBoss(uid, teamUid, source, orderNo);
+		firstSharedOrderRewardTheMonthToBoss(uid, teamUid, source, orderNo);
+	}
+	
+	
+	/**
+	 * 琚個璇蜂汉涓嬮鍗曡繑鍒╋紙涓嬪崟灏辩粰锛夛細
+	 * 瀹屾垚棣栫瑪璁㈠崟 锛堝凡鍒拌处锛� 棣栧崟=涓嶉檺鍒堕噾棰濄�佷笉闄愬埗鍟嗗搧銆佷笉闄愬埗鏁伴噺銆佷笉闄愬埗璁㈠崟绫诲瀷锛�
+	 * @param uid
+	 * @param source
+	 * @param orderNo
+	 * @param bossId
+	 */
+	@Transactional
+	private void firstReward(Long uid, Integer source, String orderNo) throws Exception{
+		// 濂栧姳涓�娆�
+		long total = redPackWinInviteMapper.countByUidAndType(uid, RedPackWinInviteTypeEnum.newUserReward.name());
+		if (total > 0)
+			return;
+		
+		// 1銆佸垽鏂槸鍚︾敤鎴烽涓鍗�
+		CommonOrderVO order = commonOrderService.firstValidOrderByUid(uid);
+		if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo())) 
+			return;
+		
+		// 閲戦
+		BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("new_user_first_order"));
+		
+		// 3銆佽幏寰楃孩鍖呰褰�
+		RedPackWinInvite winInvite = new RedPackWinInvite();
+		winInvite.setCreateTime(new Date());
+		winInvite.setUpdateTime(new Date());
+		winInvite.setType(RedPackWinInviteTypeEnum.newUserReward);
+		winInvite.setUid(uid);
+		winInvite.setTeamUid(null);
+		winInvite.setMoney(money);
+		winInvite.setSource(source);
+		winInvite.setOrderNo(orderNo);
+		redPackWinInviteMapper.insertSelective(winInvite);
+		
+		// 4銆佸鍔犵孩鍖�
+		redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createNewUserReward(winInvite));
+		
+		//娑堟伅
+		MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO();
+		dto.setTitle("绾㈠寘澧炲姞");
+		dto.setMoney("楼" + money.setScale(2));
+		dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2));
+		userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackNewUserReward, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�");
+	}
+	
+	
+	/**
+	 * 涓婄骇濂栧姳锛氳閭�璇蜂汉瀹屾垚棣栫瑪鍒嗕韩璁㈠崟 锛堝凡鍒拌处锛� 
+	 * @param uid
+	 * @param source
+	 * @param orderNo
+	 * @param bossId
+	 */
+	@Transactional
+	private void firstSharedOrderRewardToBoss(Long uid, Long inviteeUid, Integer source, String orderNo) throws Exception{
+		// 鍚屼竴闃熷憳濂栧姳涓�娆�
+		long totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(uid, inviteeUid, RedPackWinInviteTypeEnum.firstSharedOrder.name());
+		if (totalReward > 0)
+			return;
+		
+		// 1銆佸垽鏂槸鍚︽槸鏀圭敤鎴烽涓垎浜鍗�
+		CommonOrderVO order = commonOrderService.firstValidOrderByUidAndType(inviteeUid, 2);
+		if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo())) 
+			return;
+		
+		// 2銆佸垽鏂槸绗嚑涓汉
+		long total = redPackWinInviteMapper.countByUidAndType(uid, RedPackWinInviteTypeEnum.firstSharedOrder.name());
+		
+		
+		// 璁$畻搴斿鍔犵孩鍖呴噾棰�
+		BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("first_shared_order"));
+		long num = total % 9;
+		if (num > 0) {
+			BigDecimal addMoney = new BigDecimal(redPackConfigService.getValueByKey("first_shared_order_add"));
+			money = MoneyBigDecimalUtil.add(money, MoneyBigDecimalUtil.mul(addMoney, new BigDecimal(num)));
+		}
+		
+		// 3銆佽幏寰楃孩鍖呰褰�
+		RedPackWinInvite winInvite = new RedPackWinInvite();
+		winInvite.setCreateTime(new Date());
+		winInvite.setUpdateTime(new Date());
+		winInvite.setType(RedPackWinInviteTypeEnum.firstSharedOrder);
+		winInvite.setUid(uid);
+		winInvite.setTeamUid(inviteeUid);
+		winInvite.setMoney(money);
+		winInvite.setSource(source);
+		winInvite.setOrderNo(orderNo);
+		redPackWinInviteMapper.insertSelective(winInvite);
+		
+		// 4銆佸鍔犵孩鍖�
+		redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createIncreaseReward(winInvite));
+		
+		// 5銆佹秷鎭�
+		MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO();
+		dto.setTitle("绾㈠寘澧炲姞");
+		dto.setMoney("楼" + money.setScale(2));
+		dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2));
+		userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackFirstSharedOrder, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�");
+	}
+	
+	
+	/**
+	 * 涓婄骇濂栧姳锛氭鏈堝紑濮嬩骇鐢熸弧瓒虫潯浠剁殑鍒嗕韩璁㈠崟锛堝垎浜鍗曞疄浠樻鈮�10鍏冿級 杩炵画15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級姣忔湀鏈�楂�2鍏�
+	 * @param uid
+	 * @param source
+	 * @param orderNo
+	 * @param bossId
+	 */
+	@Transactional
+	private void firstSharedOrderRewardTheMonthToBoss(Long uid, Long inviteeUid, Integer source, String orderNo) throws Exception{
+		// 1銆佸垽鏂槸鍚︽槸涓婁釜鏈堥鍗�
+		CommonOrderVO order = commonOrderService.firstValidOrderLastMonthByUidAndType(inviteeUid, 2);
+		if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo()) ||
+				order.getAccountTime() == null) 
+			return;
+		
+		// 鍒嗕韩璁㈠崟瀹炰粯娆锯墺10鍏�
+		if (order.getPayment() == null || order.getPayment().compareTo(Constant.RED_PACK_PAY_MIN) < 0) 
+			return;
+		
+		// 鏌ヨ棣栧崟濂栧姳鏃堕棿
+		CommonOrderVO firstorder = commonOrderService.firstValidOrderByUidAndType(inviteeUid, 2);
+		if (firstorder == null || firstorder.getAccountTime() == null) 
+			return;
+		
+		// 绗竴娆″埌璐︾殑娆℃湀寮�濮嬭繛缁�15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級
+		int monthSpace = DateUtil.getMonthSpace( order.getAccountTime(), firstorder.getAccountTime());
+		if (monthSpace == 0 || monthSpace > Constant.RED_PACK_REWARd_MONTH) 
+			return;
+		
+		
+		// 璁$畻闅忔満濂栧姳
+		double randomMoney = Constant.RED_PACK_RANDOM_MIN +  Math.random() * (Constant.RED_PACK_RANDOM_MAX - Constant.RED_PACK_RANDOM_MIN);
+		// 淇濈暀涓や綅灏忔暟
+		BigDecimal money = new BigDecimal(randomMoney).setScale(2, BigDecimal.ROUND_HALF_UP);
+		
+		// 3銆佽幏寰楃孩鍖呰褰�
+		RedPackWinInvite winInvite = new RedPackWinInvite();
+		winInvite.setCreateTime(new Date());
+		winInvite.setUpdateTime(new Date());
+		winInvite.setType(RedPackWinInviteTypeEnum.monthSharedOrder);
+		winInvite.setUid(uid);
+		winInvite.setTeamUid(inviteeUid);
+		winInvite.setMoney(money);
+		winInvite.setSource(source);
+		winInvite.setOrderNo(orderNo);
+		redPackWinInviteMapper.insertSelective(winInvite);
+		
+		// 4銆佸鍔犵孩鍖�
+		redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createSeriesReward(winInvite));
+		
+		//娑堟伅
+		MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO();
+		dto.setTitle("绾㈠寘澧炲姞");
+		dto.setMoney("楼" + money.setScale(2));
+		dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2));
+		userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackMonthSharedOrder, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�");
+	}
+	
+	
+	@RequestSerializableByKeyService(key = "#uid")
+	@Override
+	@Transactional
+	public void inviteSucceedReward(Long uid) throws Exception{
+		// 楠岃瘉鏄惁瀛樺湪涓婄骇
+		UserInfo boss = threeSaleSerivce.getBoss(uid);
+		if(boss == null) 
+			return;
+		
+		// 鍚屼竴闃熷憳濂栧姳涓�娆�
+		long totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(boss.getId(), uid, RedPackWinInviteTypeEnum.inviteSucceed.name());
+		if (totalReward > 0)
+			return;
+		
+		// 1銆佺粦瀹氱數璇濆彿鐮�
+		UserInfo userInfo = userInfoService.selectByPKey(uid);
+		if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone())) 
+			return;
+		
+		// 2銆佹巿鏉冩窐瀹�
+		UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
+		if (taoBaoInfo == null || StringUtil.isNullOrEmpty(taoBaoInfo.getTaoBaoUid()))
+			return;
+		
+		
+		boolean finishTask = false;
+		// 3.1銆佷骇鐢熶换鎰忔湁鏁堣鍗曪紙鏃犻渶鍒拌处锛�
+		CommonOrder commonOrder = commonOrderService.selectLatestValidByUid(uid);
+		if (commonOrder != null) 
+			finishTask = true;
+		
+		// 3.2銆佸崟浣嶆椂闂寸被绱浜х敓鈮�200閲戝竵
+		if (!finishTask) {
+			long totalGoldCoin = integralTaskRecordService.getTotalGoldCoinByUid(uid);
+			if (totalGoldCoin >= Constant.RED_PACK_GOLD_COIN)
+				finishTask = true;
+		}
+		
+		// 3.3銆佹垚鍔熼個璇蜂竴涓ソ鍙�
+		if (!finishTask) {
+			long countTeam = threeSaleSerivce.countSuccessFirstTeam(uid);
+			if (countTeam >= 1)
+				finishTask = true;
+		}
+		
+		if (finishTask) {
+			// 濂栧姳閲戦
+			BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("invite_succeed"));
+			
+			// 鑾峰緱绾㈠寘璁板綍
+			RedPackWinInvite winInvite = new RedPackWinInvite();
+			winInvite.setCreateTime(new Date());
+			winInvite.setUpdateTime(new Date());
+			winInvite.setType(RedPackWinInviteTypeEnum.inviteSucceed);
+			winInvite.setUid(boss.getId());
+			winInvite.setTeamUid(uid);
+			winInvite.setMoney(money);
+			redPackWinInviteMapper.insertSelective(winInvite);
+			
+			// 澧炲姞绾㈠寘
+			redPackBalanceService.addRedPack(boss.getId(), money, RedPackDetailFactory.createInvite(winInvite));
+			
+			// 娑堟伅
+			MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO();
+			dto.setTitle("绾㈠寘澧炲姞");
+			dto.setMoney("楼" + money.setScale(2));
+			dto.setBalance("楼" + redPackBalanceService.getBalance(boss.getId()).setScale(2));
+			userMoneyMsgNotificationService.redPackMsg(boss.getId(), MsgTypeMoneyTypeEnum.redPackInviteSucceed, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�");
+		}
+	}
+	
+	
+}

--
Gitblit v1.8.0