From 207dc8655711cddac2653e18b51e58a88dba2084 Mon Sep 17 00:00:00 2001
From: yj <Administrator@192>
Date: 星期五, 06 三月 2020 18:14:36 +0800
Subject: [PATCH] 发圈处理

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java |  134 +++++++++++++++++++++++++++-----------------
 1 files changed, 82 insertions(+), 52 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..271cde1 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
@@ -39,6 +39,7 @@
 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;
@@ -47,7 +48,6 @@
 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 {
@@ -90,13 +90,16 @@
 	@Resource
 	private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
 
+	@Resource
+	private UserMoneyDetailService userMoneyDetailService;
+
 	@Override
 	public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
 		taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(taoBaoWeiQuanDrawBack.getOrderItemId(),
 				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 +127,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 +152,7 @@
 		}
 
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
-			return;
+			return null;
 
 		// 涓荤敤鎴稩D
 		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
@@ -168,6 +171,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 +226,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 +336,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);
 
@@ -440,11 +471,11 @@
 			userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
 			userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney,
 
-					userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
+					userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
 		}
 	}
 
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void doWeiQuanInvite(String orderId) throws TaoBaoWeiQuanException {
 		if (StringUtil.isNullOrEmpty(orderId))
@@ -572,18 +603,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