From bf5c02aaecb3f7a42daa4fa356c62a2e6bca0db5 Mon Sep 17 00:00:00 2001
From: yujian <yujian@123.com>
Date: 星期一, 28 十月 2019 09:55:59 +0800
Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java |  145 +++++++++++++++++++++++++++---------------------
 1 files changed, 82 insertions(+), 63 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 f71c207..7261dbb 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,25 +22,29 @@
 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.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.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.vo.order.CommonOrderVO;
@@ -79,6 +83,12 @@
 
 	@Resource
 	private UserMoneyService userMoneyService;
+
+	@Resource
+	private InviteOrderSubsidyService inviteOrderSubsidyService;
+
+	@Resource
+	private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
 
 	@Override
 	public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
@@ -123,40 +133,13 @@
 		List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
 		if (list == null || list.size() == 0)
 			return;
-		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
-		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
-		List<CommonOrderVO> typeList = new ArrayList<>();
-		CommonOrderVO cv = new CommonOrderVO();
-		cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO);
-		cv.setOrderNo(orderId);
-		typeList.add(cv);
+		List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId);
 
-		List<CommonOrderVO> commonOrderList = commonOrderMapper.listOrderGoodsInfo(typeList);
-		List<HongBaoV2> mainHongBaoList = new ArrayList<>();
-		if (commonOrderList != null)
-			for (CommonOrderVO vo : commonOrderList) {
-				// 淇敼璁㈠崟鐘舵�佷负缁存潈
-				CommonOrder co = new CommonOrder(vo.getId());
-				co.setState(CommonOrder.STATE_WQ);
-				co.setUpdateTime(new Date());
-				commonOrderMapper.updateByPrimaryKeySelective(co);
-
-				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
-				if (hongBaoOrder.getCommonOrder() != null
-						&& !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId()))
-				// 鏌ヨ鏄惁宸茬粡缁存潈
-				{
-					TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(
-							hongBaoOrder.getCommonOrder().getTradeId(),
-							hongBaoOrder.getHongBaoV2().getUserInfo().getId());
-					if (drawBack == null)// 娣诲姞杩樻湭鎵f鐨勫瓙璁㈠崟
-						mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
-				}
-			}
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
 			return;
 		for (int i = 0; i < mainHongBaoList.size(); i++) {
-			HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(mainHongBaoList.get(i).getId());
+			// 閿佽锛岄槻姝㈤噸澶� 鎿嶄綔
+			HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(mainHongBaoList.get(i).getId());
 			mainHongBaoList.set(i, hb);
 			// 鍙鐞嗚繑鍒╄鍗�
 			if (hb.getType() != HongBaoV2.TYPE_ZIGOU) {
@@ -288,44 +271,50 @@
 		}
 	}
 
+	private List<HongBaoV2> getWeiQuanMainHongBao(List<TaoBaoWeiQuanOrder> list, String orderId) {
+		// 鏌ヨ鏄惁涓虹淮鏉冭鍗�
+		if (list == null || list.size() == 0)
+			return null;
+		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
+		// 鏌ヨ杩樻湭鎵f鐨勪富绾㈠寘
+		List<HongBaoV2> mainHongBaoList = new ArrayList<>();
+		for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
+			List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
+					weiQuanOrder.getOrderItemId());
+			if (orderList != null && orderList.size() > 0)
+				for (CommonOrder commonOrder : orderList) {
+					// 淇敼璁㈠崟鐘舵�佷负缁存潈
+					CommonOrder co = new CommonOrder(commonOrder.getId());
+					co.setState(CommonOrder.STATE_WQ);
+					co.setUpdateTime(new Date());
+					commonOrderMapper.updateByPrimaryKeySelective(co);
+
+					HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+					if (hongBaoOrder.getCommonOrder() != null
+							&& !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId()))
+					// 鏌ヨ鏄惁宸茬粡缁存潈
+					{
+						TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(
+								hongBaoOrder.getCommonOrder().getTradeId(),
+								hongBaoOrder.getHongBaoV2().getUserInfo().getId());
+						if (drawBack == null)// 娣诲姞杩樻湭鎵f鐨勫瓙璁㈠崟
+							mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
+					}
+				}
+		}
+		return mainHongBaoList;
+	}
+
 	@Transactional
 	@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)
-			return;
-		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
-		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
-		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 = new CommonOrder(vo.getId());
-				co.setState(CommonOrder.STATE_WQ);
-				co.setUpdateTime(new Date());
-				commonOrderMapper.updateByPrimaryKeySelective(co);
-				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
-				if (hongBaoOrder.getCommonOrder() != null
-						&& !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId()))
-				// 鏌ヨ鏄惁宸茬粡缁存潈
-				{
-					TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(
-							hongBaoOrder.getCommonOrder().getTradeId(),
-							hongBaoOrder.getHongBaoV2().getUserInfo().getId());
-					if (drawBack == null)// 娣诲姞杩樻湭鎵f鐨勫瓙璁㈠崟
-						mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
-				}
-			}
+		List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
+		if(list==null||list.size()==0)
+			return;
+		List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId);
 
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
 			return;
@@ -506,6 +495,9 @@
 					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) {
@@ -545,6 +537,33 @@
 		}
 	}
 
+	/**
+	 * 閭�璇疯鍗曡ˉ璐寸淮鏉冨鐞�
+	 * 
+	 * @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, "閭�璇疯鍗曡ˉ璐村紓甯�");
+			}
+		}
+	}
+
 	@Override
 	public TaoBaoWeiQuanDrawBack selectByOrderItemId(String orderItemId) {
 		List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);

--
Gitblit v1.8.0