From 0ec22dcf4fd9c4496e6f681e7fab89f56c6e4e8a Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期四, 02 四月 2020 14:45:20 +0800
Subject: [PATCH] vip 消息

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java |  185 ++++++++++++++++++++++++++++++++-------------
 1 files changed, 131 insertions(+), 54 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java
index 378ae99..dd22ec2 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -23,31 +23,36 @@
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt;
+import com.yeshi.fanli.entity.money.OrderTeamRewardDebt;
 import com.yeshi.fanli.entity.money.UserMoneyDebt;
 import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
 import com.yeshi.fanli.entity.money.UserMoneyDetail;
 import com.yeshi.fanli.entity.order.CommonOrder;
 import com.yeshi.fanli.entity.order.HongBaoOrder;
 import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
+import com.yeshi.fanli.entity.order.OrderTeamReward;
 import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
 import com.yeshi.fanli.exception.money.InviteOrderSubsidyDebtException;
+import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
 import com.yeshi.fanli.exception.money.UserMoneyDebtException;
 import com.yeshi.fanli.exception.money.UserMoneyDetailException;
 import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException;
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService;
+import com.yeshi.fanli.service.inter.money.OrderTeamRewardDebtService;
 import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
+import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
 import com.yeshi.fanli.service.inter.money.UserMoneyService;
 import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService;
 import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
+import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
 import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
-import com.yeshi.fanli.vo.order.CommonOrderVO;
 
 @Service
 public class TaoBaoWeiQuanDrawBackServiceImpl implements TaoBaoWeiQuanDrawBackService {
@@ -88,7 +93,16 @@
 	private InviteOrderSubsidyService inviteOrderSubsidyService;
 
 	@Resource
+	private OrderTeamRewardService orderTeamRewardService;
+
+	@Resource
 	private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
+
+	@Resource
+	private OrderTeamRewardDebtService orderTeamRewardDebtService;
+
+	@Resource
+	private UserMoneyDetailService userMoneyDetailService;
 
 	@Override
 	public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
@@ -96,7 +110,7 @@
 				taoBaoWeiQuanDrawBack.getUser().getId());
 	}
 
-	@Transactional(rollbackFor=Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException {
 		UserMoneyDebt debt = new UserMoneyDebt();
 		debt.setBeiZhu(null);
@@ -124,19 +138,19 @@
 		return money;
 	}
 
-	@Transactional(rollbackFor=Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException {
+	public Map<Long, BigDecimal> doWeiQuanFanli(String orderId, boolean subMoneySync) throws TaoBaoWeiQuanException {
 		if (StringUtil.isNullOrEmpty(orderId))
 			throw new TaoBaoWeiQuanException(1, "璁㈠崟鍙蜂负绌哄��");
 		// 鏌ヨ鏄惁涓虹淮鏉冭鍗�
 		List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
 		if (list == null || list.size() == 0)
-			return;
+			return null;
 		List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId);
 
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
-			return;
+			return null;
 		for (int i = 0; i < mainHongBaoList.size(); i++) {
 			// 閿佽锛岄槻姝㈤噸澶� 鎿嶄綔
 			HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(mainHongBaoList.get(i).getId());
@@ -149,7 +163,7 @@
 		}
 
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
-			return;
+			return null;
 
 		// 涓荤敤鎴稩D
 		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
@@ -168,6 +182,7 @@
 
 		// 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚�
 		Iterator<Long> its = fanMoneyMap.keySet().iterator();
+		Map<Long, BigDecimal> userSubMoneyMap = new HashMap<>();
 		while (its.hasNext()) {
 			Long uid = its.next();
 			BigDecimal userGetMoney = fanMoneyMap.get(uid);
@@ -222,53 +237,80 @@
 
 			// 閫�娆鹃噾棰�
 			BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney);
-
-			// 璁$畻璧勯噾鏄惁鍏呰冻
-			UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
-			if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻
-			{
-				// 娣诲姞鍊哄姟
-				for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
-					TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
-					if (taoBaoOrder != null) {
-						TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
-								.selectByTradeId(drawBack.getOrderItemId());
-						CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
-								drawBack.getOrderItemId());
-						if (co != null) {
-							HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
-							if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
-								BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(),
-										weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney());
-								try {
-									addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
-								} catch (UserMoneyDebtException e) {
-									throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父");
+			userSubMoneyMap.put(uid, drawBackMoney);
+			if (subMoneySync) {
+				// 璁$畻璧勯噾鏄惁鍏呰冻
+				UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
+				if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻
+				{
+					// 娣诲姞鍊哄姟
+					for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
+						TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
+								.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
+						if (taoBaoOrder != null) {
+							TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
+									.selectByTradeId(drawBack.getOrderItemId());
+							CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
+									drawBack.getOrderItemId());
+							if (co != null) {
+								HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
+								if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
+									BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(),
+											weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney());
+									try {
+										addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
+									} catch (UserMoneyDebtException e) {
+										throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父");
+									}
 								}
 							}
 						}
 					}
+					continue;
 				}
-				continue;
-			}
 
-			UserMoneyDetail userMoneyDetail = null;
-			// 鏂扮増璧勯噾璁板綍
-			try {
-				userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
-			} catch (UserMoneyDetailException e) {
+				UserMoneyDetail userMoneyDetail = null;
+				// 鏂扮増璧勯噾璁板綍
 				try {
-					LogHelper.errorDetailInfo(e);
-				} catch (Exception e1) {
-					e1.printStackTrace();
+					userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
+				} catch (UserMoneyDetailException e) {
+					try {
+						LogHelper.errorDetailInfo(e);
+					} catch (Exception e1) {
+						e1.printStackTrace();
+					}
+				}
+				if (userMoneyDetail == null)
+					throw new TaoBaoWeiQuanException(110, "璧勯噾璁板綍鐢熸垚澶辫触");
+				userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
+
+				// 鏂扮増閫氱煡
+				userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO,
+						drawBackMoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
+			} else {// 璁板綍璧勯噾璁板綍锛屼絾鏄笉鏄剧ず缁欑敤鎴�
+
+				UserMoneyDetail userMoneyDetail = null;
+				// 鏂扮増璧勯噾璁板綍
+				try {
+					userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
+				} catch (UserMoneyDetailException e) {
+					try {
+						LogHelper.errorDetailInfo(e);
+					} catch (Exception e1) {
+						e1.printStackTrace();
+					}
+				}
+				if (userMoneyDetail == null)
+					throw new TaoBaoWeiQuanException(110, "璧勯噾璁板綍鐢熸垚澶辫触");
+				userMoneyDetail.setShow(false);
+				try {
+					userMoneyDetailService.addUserMoneyDetail(userMoneyDetail);
+				} catch (UserMoneyDetailException e) {
+					throw new TaoBaoWeiQuanException(111, "鎻掑叆璁板綍鐢熸垚澶辫触");
 				}
 			}
-			userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
-
-			// 鏂扮増閫氱煡
-			userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney,
-					userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
 		}
+		return userSubMoneyMap;
 	}
 
 	private List<HongBaoV2> getWeiQuanMainHongBao(List<TaoBaoWeiQuanOrder> list, String orderId) {
@@ -305,14 +347,14 @@
 		return mainHongBaoList;
 	}
 
-	@Transactional(rollbackFor=Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void doWeiQuanShare(String orderId) throws TaoBaoWeiQuanException {
 		if (StringUtil.isNullOrEmpty(orderId))
 			throw new TaoBaoWeiQuanException(1, "璁㈠崟鍙蜂负绌哄��");
 
 		List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
-		if(list==null||list.size()==0)
+		if (list == null || list.size() == 0)
 			return;
 		List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId);
 
@@ -440,11 +482,11 @@
 			userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
 			userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney,
 
-					userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
+					userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
 		}
 	}
 
-	@Transactional(rollbackFor=Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void doWeiQuanInvite(String orderId) throws TaoBaoWeiQuanException {
 		if (StringUtil.isNullOrEmpty(orderId))
@@ -496,7 +538,8 @@
 					taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 鍔犲叆杩旇繕璁板綍
 
 					// 鍔犲叆閭�璇疯ˉ璐磋繑杩樿褰�
-					doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney);
+					doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney,
+							weiQuanOrder.getOrderItemId());
 
 					// 濡傛灉璧勯噾澶т簬0鎵嶆墸闄�
 
@@ -544,7 +587,7 @@
 	 * @param sourceType
 	 */
 	private void doInviteOrderSubsidy(String orderId, int sourceType, Long uid, BigDecimal settleMent,
-			BigDecimal weiQuanMoney) throws TaoBaoWeiQuanException {
+			BigDecimal weiQuanMoney, String tradeId) throws TaoBaoWeiQuanException {
 		InviteOrderSubsidy subSidy = inviteOrderSubsidyService.getByOrderNoAndType(uid, orderId, sourceType);
 		if (subSidy != null)// 娣诲姞鍊熻捶鍏崇郴
 		{
@@ -556,12 +599,47 @@
 			debt.setOriginMoney(drawBackMoney);
 			debt.setUid(uid);
 			debt.setCreateTime(new Date());
+			debt.setSourceId(subSidy.getId());
+			debt.setTradeId(tradeId);
 			try {
 				inviteOrderSubsidyDebtService.addDebt(debt);
 			} catch (InviteOrderSubsidyDebtException e) {
 				throw new TaoBaoWeiQuanException(101, "閭�璇疯鍗曡ˉ璐村紓甯�");
 			}
+
+			doOrderTeamReard(subSidy.getId(), settleMent, weiQuanMoney, tradeId);
 		}
+	}
+
+	/**
+	 * 鍥㈤槦濂栧姳缁存潈澶勭悊
+	 * @Title: doOrderTeamReard
+	 * @Description: 
+	 * @param subsidyId 
+	 * void 杩斿洖绫诲瀷
+	 * @throws
+	 */
+	private void doOrderTeamReard(Long subsidyId, BigDecimal settleMent, BigDecimal weiQuanMoney, String tradeId)
+			throws TaoBaoWeiQuanException {
+		List<OrderTeamReward> list = orderTeamRewardService.listBySubsidyId(subsidyId);
+		if (list != null)
+			for (OrderTeamReward reward : list) {
+				BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, weiQuanMoney, reward.getOriginalMoney());
+				if (drawBackMoney.compareTo(new BigDecimal(0)) <= 0)
+					return;
+				OrderTeamRewardDebt debt = new OrderTeamRewardDebt();
+				debt.setBeiZhu("璁㈠崟鍞悗");
+				debt.setOriginMoney(drawBackMoney);
+				debt.setUid(reward.getUid());
+				debt.setCreateTime(new Date());
+				debt.setTradeId(tradeId);
+				debt.setSourceId(reward.getId());
+				try {
+					orderTeamRewardDebtService.addDebt(debt);
+				} catch (OrderTeamRewardDebtException e) {
+					throw new TaoBaoWeiQuanException(102, "鍥㈤槦濂栧姳寮傚父");
+				}
+			}
 	}
 
 	@Override
@@ -572,18 +650,17 @@
 		else
 			return null;
 	}
-	
+
 	@Override
 	public List<TaoBaoWeiQuanDrawBack> getByOrderItemId(String orderItemId) {
 		return taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);
 	}
-	
 
 	@Override
 	public TaoBaoWeiQuanDrawBack selectByOrderItemIdAndUid(String orderItemId, Long uid) {
-		return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(orderItemId,uid);
+		return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(orderItemId, uid);
 	}
-	
+
 	@Override
 	public TaoBaoWeiQuanDrawBack selectByHongBaoId(Long hbId) {
 		Long uid = null;

--
Gitblit v1.8.0