From d92226ce9f81c44fd0e159662d928767ce423b83 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期一, 29 四月 2019 08:57:02 +0800
Subject: [PATCH] 淘宝用于自购的渠道ID存储

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java |  247 ++++++++++++++----------------------------------
 1 files changed, 74 insertions(+), 173 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java
index 1b5f81d..76db6ac 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -319,8 +319,8 @@
 				if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
 					continue;
 
-				// 杩斿埄绾㈠寘涓嶈鍏�
-				if (hongBao.getType() != HongBaoV2.TYPE_ZIGOU) {
+				// 鍙鍏ュ垎浜禋鐨勭孩鍖�
+				if (hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) {
 					// 绱涓荤孩鍖呯殑閲戦
 					if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
 						fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney());
@@ -328,18 +328,6 @@
 						fanMoneyMap.put(hongBao.getUserInfo().getId(),
 								fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney()));
 				}
-				// 绱瀛愮孩鍖呯殑閲戦
-				List<HongBaoV2> childHongBaoList = hongBaoV2Mapper.listChildrenById(hongBao.getId());
-				if (childHongBaoList != null)
-					for (HongBaoV2 child : childHongBaoList) {
-						if (child.getState() == HongBaoV2.STATE_SHIXIAO)
-							continue;
-						if (fanMoneyMap.get(child.getUserInfo().getId()) == null) {
-							fanMoneyMap.put(child.getUserInfo().getId(), child.getMoney());
-						} else
-							fanMoneyMap.put(child.getUserInfo().getId(),
-									fanMoneyMap.get(child.getUserInfo().getId()).add(child.getMoney()));
-					}
 			}
 
 		// 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚�
@@ -395,6 +383,15 @@
 								weiQuanOrder.getOrderItemId());
 						if (co != null) {
 							HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
+							BigDecimal drawback = MoneyBigDecimalUtil.div(
+									hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()),
+									totalFee);
+							try {
+								addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
+							} catch (UserMoneyDebtException e) {
+								throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父");
+							}
+
 							if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
 								List<HongBaoV2> hongBaoList = hongBaoV2Mapper
 										.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
@@ -406,10 +403,10 @@
 								}
 
 								for (HongBaoV2 hb : hongBaoList) {
-									BigDecimal drawback = MoneyBigDecimalUtil
+									drawback = MoneyBigDecimalUtil
 											.div(hb.getMoney().multiply(weiQuanOrder.getFanMoney()), totalFee);
 									try {
-										addDebt(uid, hb.getId(), drawback);
+										addDebt(hb.getUserInfo().getId(), hb.getId(), drawback);
 									} catch (UserMoneyDebtException e) {
 										throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父");
 									}
@@ -440,7 +437,6 @@
 
 			userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney);
 		}
-
 	}
 
 	@Transactional
@@ -453,175 +449,80 @@
 		if (list == null || list.size() == 0)
 			return;
 		// 鏌ヨ璁㈠崟搴�
-		List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
-		// 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲�
-		BigDecimal sumFee = new BigDecimal("0");
-		for (TaoBaoOrder order : orderList)
-			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) {
-				sumFee = sumFee.add(order.geteIncome());
-				if (order.getSubsidy() != null)
-					sumFee = sumFee.add(order.getSubsidy());
+		for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
+			TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
+			BigDecimal fanMoney = weiQuanOrder.getFanMoney();
+			if (taoBaoOrder == null)
+				throw new TaoBaoWeiQuanException(1, "鏉ユ簮浜ゆ槗ID鏈夎");
+			BigDecimal sumFee = new BigDecimal("0");
+			if (taoBaoOrder.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) {
+				sumFee = sumFee.add(taoBaoOrder.geteIncome());
+				if (taoBaoOrder.getSubsidy() != null)
+					sumFee = sumFee.add(taoBaoOrder.getSubsidy());
 			}
-		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
-		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
-		List<CommonOrderVO> typeList = new ArrayList<>();
-		CommonOrderVO cv = new CommonOrderVO();
-		cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO);
-		cv.setOrderNo(orderId);
-		typeList.add(cv);
 
-		List<CommonOrderVO> commonOrderList = commonOrderMapper.listOrderGoodsInfo(typeList);
-		List<HongBaoV2> mainHongBaoList = new ArrayList<>();
-		if (commonOrderList != null)
-			for (CommonOrderVO vo : commonOrderList) {
-				CommonOrder co = commonOrderMapper.selectByPrimaryKey(vo.getId());
-				if (co.getState() != CommonOrder.STATE_WQ) {
-					co = new CommonOrder(vo.getId());
-					co.setState(CommonOrder.STATE_WQ);
-					co.setUpdateTime(new Date());
-					commonOrderMapper.updateByPrimaryKeySelective(co);
-				}
+			// 鏌ヨ涓嬬骇瀛愮敤鎴�
+			CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
+					weiQuanOrder.getOrderItemId());
+			if (commonOrder == null)
+				throw new TaoBaoWeiQuanException(2, "璁㈠崟鏈夎");
 
-				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
-				mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
-			}
-		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
-			return;
+			HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
 
-		// 涓荤敤鎴稩D
-		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
+			if (hongbaoOrder == null || hongbaoOrder.getHongBaoV2() == null)
+				throw new TaoBaoWeiQuanException(3, "绾㈠寘鏈夎");
 
-		if (mainHongBaoList != null)
-			for (HongBaoV2 hongBao : mainHongBaoList) {
-				HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId());
-				hongBao = hb;
+			List<HongBaoV2> childList = hongBaoV2Mapper.listChildrenById(hongbaoOrder.getHongBaoV2().getId());
 
-				if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
-					continue;
-				// 杩斿埄绾㈠寘涓嶈鍏�
-				if (hongBao.getType() != HongBaoV2.TYPE_ZIGOU) {
-					// 绱涓荤孩鍖呯殑閲戦
-					if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
-						fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney());
-					} else
-						fanMoneyMap.put(hongBao.getUserInfo().getId(),
-								fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney()));
-				}
-				// 绱瀛愮孩鍖呯殑閲戦
-				List<HongBaoV2> childHongBaoList = hongBaoV2Mapper.listChildrenById(hongBao.getId());
-				if (childHongBaoList != null)
-					for (HongBaoV2 child : childHongBaoList) {
-						if (child.getState() == HongBaoV2.STATE_SHIXIAO)
-							continue;
-						if (fanMoneyMap.get(child.getUserInfo().getId()) == null) {
-							fanMoneyMap.put(child.getUserInfo().getId(), child.getMoney());
-						} else
-							fanMoneyMap.put(child.getUserInfo().getId(),
-									fanMoneyMap.get(child.getUserInfo().getId()).add(child.getMoney()));
+			if (childList != null)
+				for (HongBaoV2 child : childList) {
+					Long uid = child.getUserInfo().getId();
+					if (child.getState() != HongBaoV2.STATE_YILINGQU)
+						continue;
+					TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper
+							.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), child.getUserInfo().getId());
+					if (weiQuanDrawBack != null)
+						continue;
+					BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(child.getMoney().multiply(fanMoney), sumFee);
+					weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
+					weiQuanDrawBack.setCreateTime(new Date());
+					weiQuanDrawBack.setDrawBackMoney(drawBackMoney);
+					weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
+					weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
+					weiQuanDrawBack.setUser(child.getUserInfo());
+					taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 鍔犲叆杩旇繕璁板綍
+
+					// 鍒ゆ柇璧勯噾鏄惁瓒冲鎵f
+					UserInfo user = userInfoMapper.selectByPKey(uid);
+					if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻
+					{
+						try {
+							addDebt(uid, child.getId(), drawBackMoney);
+						} catch (UserMoneyDebtException e) {
+							throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父");
+						}
+						continue;
 					}
-			}
 
-		// 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚�
-		Iterator<Long> its = fanMoneyMap.keySet().iterator();
-		while (its.hasNext()) {
-			Long uid = its.next();
-			BigDecimal userGetMoney = fanMoneyMap.get(uid);
-			BigDecimal fanMoney = new BigDecimal("0");
-			// 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾
-			TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
-			List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
-			for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
-				weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
-						uid);
-				if (weiQuanDrawBack != null)
-					continue;
-				// 閫�娆剧殑璧勯噾
-				fanMoney = fanMoney.add(weiQuanOrder.getFanMoney());
-				// 鎻掑叆璁板綍
-				weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
-				weiQuanDrawBack.setCreateTime(new Date());
-				// TODO 鏆傛椂璁句负0
-				weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0));
-				weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
-				weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
-				weiQuanDrawBack.setUser(new UserInfo(uid));
-				newWeiQuanDrawBackList.add(weiQuanDrawBack);
-			}
+					userInfoMapper.subHongBaoByUid(uid, drawBackMoney);
 
-			if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
-				continue;
-
-			for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList)
-				taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack);
-
-			// 閫�娆鹃噾棰�
-			BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
-
-			// 璁$畻璧勯噾鏄惁鍏呰冻
-			UserInfo user = userInfoMapper.selectByPKey(uid);
-			if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻
-			{
-				// 娣诲姞鍊哄姟
-				for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
-					TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
-							.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
-					if (taoBaoOrder != null) {
-						BigDecimal totalFee = taoBaoOrder.geteIncome();
-						if (taoBaoOrder.getSubsidy() != null)
-							totalFee = totalFee.add(taoBaoOrder.getSubsidy());
-						//
-						CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
-								weiQuanOrder.getOrderItemId());
-						if (co != null) {
-							HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
-							if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
-								List<HongBaoV2> hongBaoList = hongBaoV2Mapper
-										.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
-								for (int i = 0; i < hongBaoList.size(); i++) {
-									if (hongBaoList.get(i).getUserInfo().getId().longValue() != uid) {
-										hongBaoList.remove(i);
-										i--;
-									}
-								}
-
-								for (HongBaoV2 hb : hongBaoList) {
-									BigDecimal drawback = MoneyBigDecimalUtil
-											.div(hb.getMoney().multiply(weiQuanOrder.getFanMoney()), totalFee);
-									try {
-										addDebt(uid, hb.getId(), drawback);
-									} catch (UserMoneyDebtException e) {
-										throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父");
-									}
-								}
-							}
+					// 鏂扮増璧勯噾璁板綍
+					try {
+						UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid,
+								weiQuanDrawBack, drawBackMoney);
+						userMoneyDetailMapper.insert(userMoneyDetail);
+					} catch (UserMoneyDetailException e) {
+						try {
+							LogHelper.errorDetailInfo(e);
+						} catch (Exception e1) {
+							e1.printStackTrace();
 						}
 					}
+					// 鏂扮増閫氱煡
+					userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, drawBackMoney,
+							userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
 				}
-				continue;
-			}
-
-			userInfoMapper.subHongBaoByUid(uid, drawBackMoney);
-
-			// 鏂扮増璧勯噾璁板綍
-			try {
-				UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack,
-						drawBackMoney);
-				userMoneyDetailMapper.insert(userMoneyDetail);
-			} catch (UserMoneyDetailException e) {
-				try {
-					LogHelper.errorDetailInfo(e);
-				} catch (Exception e1) {
-					e1.printStackTrace();
-				}
-			}
-
-			// 鏂扮増閫氱煡
-			userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, drawBackMoney,
-					userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
-
-			userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney);
 		}
-
 	}
 
 	@Override

--
Gitblit v1.8.0