From 8e30aa7c1f0384f09278699318b4902b815b42a7 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 26 四月 2019 18:01:25 +0800
Subject: [PATCH] 维权返利初步修改,拼多多初步增加

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java |  202 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 195 insertions(+), 7 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 87baa53..1b5f81d 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
@@ -22,6 +22,8 @@
 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.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;
@@ -29,15 +31,19 @@
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
 import com.yeshi.fanli.exception.TaoBaoWeiQuanException;
+import com.yeshi.fanli.exception.money.UserMoneyDebtException;
 import com.yeshi.fanli.exception.money.UserMoneyDetailException;
 import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
 import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
 import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService;
 import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService;
 import com.yeshi.fanli.service.inter.user.UserNotificationService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.TaoBaoConstant;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.vo.order.CommonOrderVO;
 
@@ -73,10 +79,26 @@
 	@Resource
 	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
 
+	@Resource
+	private UserMoneyDebtService userMoneyDebtService;
+
 	@Override
 	public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
 		taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(taoBaoWeiQuanDrawBack.getOrderItemId(),
 				taoBaoWeiQuanDrawBack.getUser().getId());
+	}
+
+	@Transactional
+	private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException {
+		UserMoneyDebt debt = new UserMoneyDebt();
+		debt.setBeiZhu(null);
+		debt.setCreateTime(new Date());
+		debt.setLeftMoney(money);
+		debt.setOriginMoney(money);
+		debt.setSourceId(hbId);
+		debt.setType(UserMoneyDebtTypeEnum.order);
+		debt.setUid(uid);
+		userMoneyDebtService.addUserMoneyDebt(debt);
 	}
 
 	@Transactional
@@ -93,8 +115,11 @@
 		// 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲�
 		BigDecimal sumFee = new BigDecimal("0");
 		for (TaoBaoOrder order : orderList)
-			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻"))
+			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) {
 				sumFee = sumFee.add(order.geteIncome());
+				if (order.getSubsidy() != null)
+					sumFee = sumFee.add(order.getSubsidy());
+			}
 		if (new BigDecimal(0).compareTo(sumFee) == 0)
 			throw new TaoBaoWeiQuanException(TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER, "闇�瑕佹洿鏂拌鍗�");
 
@@ -157,6 +182,7 @@
 			BigDecimal fanMoney = new BigDecimal("0");
 			// 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾
 			TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
+			List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
 			for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
 				weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
 						uid);
@@ -164,7 +190,6 @@
 					continue;
 				// 閫�娆剧殑璧勯噾
 				fanMoney = fanMoney.add(weiQuanOrder.getFanMoney());
-				// 鎻掑叆璁板綍
 				weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
 				weiQuanDrawBack.setCreateTime(new Date());
 				// 鏆傛椂璁句负0
@@ -172,14 +197,52 @@
 				weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
 				weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
 				weiQuanDrawBack.setUser(new UserInfo(uid));
-				taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);
+				newWeiQuanDrawBackList.add(weiQuanDrawBack);
 			}
 
 			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) {
+								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, "璧勯噾鍊熻捶寮傚父");
+								}
+							}
+						}
+					}
+				}
+				continue;
+			}
+
 			userInfoMapper.subHongBaoByUid(uid, drawBackMoney);
 			// 鏂扮増璧勯噾璁板綍
 			try {
@@ -216,8 +279,11 @@
 		// 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲�
 		BigDecimal sumFee = new BigDecimal("0");
 		for (TaoBaoOrder order : orderList)
-			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻"))
+			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) {
 				sumFee = sumFee.add(order.geteIncome());
+				if (order.getSubsidy() != null)
+					sumFee = sumFee.add(order.getSubsidy());
+			}
 		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
 		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
 
@@ -284,6 +350,8 @@
 			BigDecimal fanMoney = new BigDecimal("0");
 			// 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾
 			TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
+
+			List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
 			for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
 				weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
 						uid);
@@ -299,7 +367,7 @@
 				weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
 				weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
 				weiQuanDrawBack.setUser(new UserInfo(uid));
-				taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);
+				newWeiQuanDrawBackList.add(weiQuanDrawBack);
 			}
 
 			if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
@@ -307,6 +375,52 @@
 
 			// 閫�娆鹃噾棰�
 			BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
+
+			for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList)
+				taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack);
+			// 璁$畻璧勯噾鏄惁鍏呰冻
+			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, "璧勯噾鍊熻捶寮傚父");
+									}
+								}
+							}
+						}
+					}
+				}
+				continue;
+			}
+
 			userInfoMapper.subHongBaoByUid(uid, drawBackMoney);
 			// 鏂扮増璧勯噾璁板綍
 			try {
@@ -343,8 +457,11 @@
 		// 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲�
 		BigDecimal sumFee = new BigDecimal("0");
 		for (TaoBaoOrder order : orderList)
-			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻"))
+			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) {
 				sumFee = sumFee.add(order.geteIncome());
+				if (order.getSubsidy() != null)
+					sumFee = sumFee.add(order.getSubsidy());
+			}
 		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
 		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
 		List<CommonOrderVO> typeList = new ArrayList<>();
@@ -412,6 +529,7 @@
 			BigDecimal fanMoney = new BigDecimal("0");
 			// 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾
 			TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
+			List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
 			for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
 				weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
 						uid);
@@ -427,14 +545,61 @@
 				weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
 				weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
 				weiQuanDrawBack.setUser(new UserInfo(uid));
-				taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);
+				newWeiQuanDrawBackList.add(weiQuanDrawBack);
 			}
 
 			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, "璧勯噾鍊熻捶寮傚父");
+									}
+								}
+							}
+						}
+					}
+				}
+				continue;
+			}
+
 			userInfoMapper.subHongBaoByUid(uid, drawBackMoney);
 
 			// 鏂扮増璧勯噾璁板綍
@@ -459,4 +624,27 @@
 
 	}
 
+	@Override
+	public TaoBaoWeiQuanDrawBack selectByOrderItemId(String orderItemId) {
+		List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);
+		if (list != null && list.size() > 0)
+			return list.get(0);
+		else
+			return null;
+	}
+
+	@Override
+	public TaoBaoWeiQuanDrawBack selectByHongBaoId(Long hbId) {
+		Long uid = null;
+		HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hbId);
+		uid = hb.getUserInfo().getId();
+		if (hb.getParent() != null)
+			hb = hb.getParent();
+		HongBaoOrder hbo = hongBaoOrderMapper.selectByHongBaoId(hb.getId());
+		if (hbo != null && hbo.getCommonOrder() != null) {
+			return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(hbo.getCommonOrder().getTradeId(), uid);
+		}
+		return null;
+	}
+
 }

--
Gitblit v1.8.0