From 7e7db2fa55a9a3af46d4fd8ede0dee147f101d64 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 09 五月 2020 21:41:27 +0800
Subject: [PATCH] 2.1需求

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java |  208 ++++++++++++++++++++++++++++-----------------------
 1 files changed, 113 insertions(+), 95 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 d0f98ac..784d894 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
@@ -22,32 +22,27 @@
 import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanDrawBackMapper;
 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.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.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.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.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.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 {
@@ -84,11 +79,9 @@
 	@Resource
 	private UserMoneyService userMoneyService;
 
-	@Resource
-	private InviteOrderSubsidyService inviteOrderSubsidyService;
 
 	@Resource
-	private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
+	private UserMoneyDetailService userMoneyDetailService;
 
 	@Override
 	public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
@@ -96,7 +89,7 @@
 				taoBaoWeiQuanDrawBack.getUser().getId());
 	}
 
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException {
 		UserMoneyDebt debt = new UserMoneyDebt();
 		debt.setBeiZhu(null);
@@ -124,19 +117,19 @@
 		return money;
 	}
 
-	@Transactional
+	@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 +142,7 @@
 		}
 
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
-			return;
+			return null;
 
 		// 涓荤敤鎴稩D
 		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
@@ -168,6 +161,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 +216,96 @@
 
 			// 閫�娆鹃噾棰�
 			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);
+
+				// 鏂扮増閫氱煡
+				List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+						orderId);
+				int goodsCount = 0;
+				for (CommonOrder co : orderList) {
+					if (co.getState() != CommonOrder.STATE_SX)
+						goodsCount += co.getCount();
+				}
+
+				BigDecimal fanliMoney = new BigDecimal(0);
+				List<HongBaoOrder> hongBaoOrderList = hongBaoOrderMapper.listDetailByOrderIdAndSourceType(orderId,
+						Constant.SOURCE_TYPE_TAOBAO);
+				for (HongBaoOrder hb : hongBaoOrderList) {
+					fanliMoney = fanliMoney.add(hb.getHongBaoV2().getMoney());
+				}
+
+				userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO,
+						drawBackMoney, fanliMoney, goodsCount, orderList.get(0).getThirdCreateTime());
+
+			} 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 +342,14 @@
 		return mainHongBaoList;
 	}
 
-	@Transactional
+	@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);
 
@@ -438,13 +475,29 @@
 				}
 			}
 			userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
-			userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney,
 
-					userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
+			// 鏂扮増閫氱煡
+			List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+					orderId);
+			int goodsCount = 0;
+			for (CommonOrder co : orderList) {
+				if (co.getState() != CommonOrder.STATE_SX)
+					goodsCount += co.getCount();
+			}
+
+			BigDecimal fanliMoney = new BigDecimal(0);
+			List<HongBaoOrder> hongBaoOrderList = hongBaoOrderMapper.listDetailByOrderIdAndSourceType(orderId,
+					Constant.SOURCE_TYPE_TAOBAO);
+			for (HongBaoOrder hb : hongBaoOrderList) {
+				fanliMoney = fanliMoney.add(hb.getHongBaoV2().getMoney());
+			}
+
+			userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney,
+					fanliMoney, goodsCount, orderList.get(0).getThirdCreateTime());
 		}
 	}
 
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void doWeiQuanInvite(String orderId) throws TaoBaoWeiQuanException {
 		if (StringUtil.isNullOrEmpty(orderId))
@@ -494,10 +547,6 @@
 					weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
 					weiQuanDrawBack.setUser(child.getUserInfo());
 					taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 鍔犲叆杩旇繕璁板綍
-
-					// 鍔犲叆閭�璇疯ˉ璐磋繑杩樿褰�
-					doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney);
-
 					// 濡傛灉璧勯噾澶т簬0鎵嶆墸闄�
 
 					if (drawBackMoney != null && drawBackMoney.compareTo(new BigDecimal(0)) > 0) {
@@ -529,38 +578,8 @@
 
 						userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
 
-						// 鏂扮増閫氱煡
-						userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO,
-								drawBackMoney, userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
 					}
 				}
-		}
-	}
-
-	/**
-	 * 閭�璇疯鍗曡ˉ璐寸淮鏉冨鐞�
-	 * 
-	 * @param orderId
-	 * @param sourceType
-	 */
-	private void doInviteOrderSubsidy(String orderId, int sourceType, Long uid, BigDecimal settleMent,
-			BigDecimal weiQuanMoney) throws TaoBaoWeiQuanException {
-		InviteOrderSubsidy subSidy = inviteOrderSubsidyService.getByOrderNoAndType(uid, orderId, sourceType);
-		if (subSidy != null)// 娣诲姞鍊熻捶鍏崇郴
-		{
-			BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, weiQuanMoney, subSidy.getOriginalMoney());
-			if (drawBackMoney.compareTo(new BigDecimal(0)) <= 0)
-				return;
-			InviteOrderSubsidyDebt debt = new InviteOrderSubsidyDebt();
-			debt.setBeiZhu("璁㈠崟鍞悗:" + orderId + "-" + sourceType);
-			debt.setOriginMoney(drawBackMoney);
-			debt.setUid(uid);
-			debt.setCreateTime(new Date());
-			try {
-				inviteOrderSubsidyDebtService.addDebt(debt);
-			} catch (InviteOrderSubsidyDebtException e) {
-				throw new TaoBaoWeiQuanException(101, "閭�璇疯鍗曡ˉ璐村紓甯�");
-			}
 		}
 	}
 
@@ -572,18 +591,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