From 0ec22dcf4fd9c4496e6f681e7fab89f56c6e4e8a Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期四, 02 四月 2020 14:45:20 +0800
Subject: [PATCH] vip 消息

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 109 insertions(+), 3 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
index 3ffecd1..ce58095 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
@@ -37,22 +37,25 @@
 import com.yeshi.fanli.entity.order.HongBaoOrder;
 import com.yeshi.fanli.entity.order.HongBaoV2SettleTemp;
 import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
-import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
+import com.yeshi.fanli.entity.order.OrderTeamReward;
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
 import com.yeshi.fanli.exception.money.InviteOrderSubsidyDebtException;
 import com.yeshi.fanli.exception.money.OrderMoneySettleException;
+import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
 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.hongbao.AccountDetailsHongBaoMapService;
 import com.yeshi.fanli.service.inter.hongbao.HongBaoV2SettleTempService;
 import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService;
+import com.yeshi.fanli.service.inter.money.OrderTeamRewardDebtService;
 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.CommonOrderService;
 import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
 import com.yeshi.fanli.service.inter.order.OrderMoneySettleService;
+import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
 import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
 import com.yeshi.fanli.util.Constant;
@@ -62,7 +65,6 @@
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
 import com.yeshi.fanli.util.rocketmq.MQTopicName;
-import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil;
 
 @Service
 public class OrderMoneySettleServiceImpl implements OrderMoneySettleService {
@@ -114,6 +116,21 @@
 	@Resource
 	private HongBaoV2SettleTempService hongBaoV2SettleTempService;
 
+	@Resource
+	private OrderTeamRewardService orderTeamRewardService;
+
+	@Resource
+	private OrderTeamRewardDebtService orderTeamRewardDebtService;
+
+	// 涓嬬骇琚皝绂侊紝绾㈠寘澶辨晥
+	private void invalidHongBaoForbidden(Long id) {
+		HongBaoV2 updateHongBaoV2 = new HongBaoV2(id);
+		updateHongBaoV2.setState(HongBaoV2.STATE_SHIXIAO);
+		updateHongBaoV2.setBeizhu("灏佺澶辨晥");
+		updateHongBaoV2.setUpdateTime(new Date());
+		hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBaoV2);
+	}
+
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void inviteSettleTB(Long uid) throws OrderMoneySettleException {
@@ -145,6 +162,7 @@
 						// 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
 						UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
 						if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+							invalidHongBaoForbidden(item.getId());
 							hongBaoList.remove(i);
 							i--;
 						}
@@ -210,6 +228,7 @@
 						// 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
 						UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
 						if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+							invalidHongBaoForbidden(item.getId());
 							hongBaoList.remove(i);
 							i--;
 						}
@@ -269,6 +288,7 @@
 						// 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
 						UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
 						if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+							invalidHongBaoForbidden(item.getId());
 							hongBaoList.remove(i);
 							i--;
 						}
@@ -479,7 +499,7 @@
 						Long uid = its.next();
 						if (userSubMoneyMap.get(uid) != null) {
 							// 鍑忓幓缁存潈璧勯噾
-							userMoney.put(uid, userMoney.get(uid).subtract(userSubMoneyMap.get(uid)));														
+							userMoney.put(uid, userMoney.get(uid).subtract(userSubMoneyMap.get(uid)));
 						}
 					}
 				}
@@ -1052,4 +1072,90 @@
 		}
 		return debtMoney;
 	}
+
+	private BigDecimal kouKuanReward(List<OrderTeamReward> rewardList, BigDecimal debtMoney) {
+		BigDecimal average = debtMoney.divide(new BigDecimal(rewardList.size()), 2, RoundingMode.UP);
+		for (int i = 0; i < rewardList.size(); i++) {
+			OrderTeamReward sidy = rewardList.get(i);
+			BigDecimal subMoney = null;
+			if (average.compareTo(sidy.getMoney()) >= 0) {
+				subMoney = sidy.getMoney();
+			} else {
+				subMoney = average;
+			}
+			if (subMoney.compareTo(debtMoney) > 0)
+				subMoney = debtMoney;
+			debtMoney = debtMoney.subtract(subMoney);
+			sidy.setMoney(sidy.getMoney().subtract(subMoney));
+
+			if (sidy.getMoney().compareTo(new BigDecimal(0)) == 0) {
+				rewardList.remove(i);
+				i--;
+			}
+		}
+		return debtMoney;
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void orderTeamRewardSettle(Long uid) throws OrderMoneySettleException {
+		long count = orderTeamRewardService.countCanSettle(uid);
+		if (count <= 0) {
+			return;
+		}
+		int pageSize = 2000;
+		int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
+		// 鏌ヨ鍑洪渶瑕佸埌璐︾殑濂栧姳
+		List<OrderTeamReward> totalList = new ArrayList<>();
+		for (int i = 0; i < page; i++) {
+			List<OrderTeamReward> list = orderTeamRewardService.listCanSettle(uid, i + 1, pageSize);
+			if (list != null && list.size() > 0)
+				totalList.addAll(list);
+		}
+
+		if (totalList.size() > 0) {
+			BigDecimal debtMoney = orderTeamRewardDebtService.getTotalDebtMoney(uid);
+			BigDecimal originalDebtMoney = new BigDecimal(debtMoney.toString());// 鎬荤殑娆犳
+			List<OrderTeamReward> copyRewardList = new ArrayList<>();
+			copyRewardList.addAll(totalList);
+			while (debtMoney.compareTo(new BigDecimal(0)) > 0 && copyRewardList.size() > 0) {// 鏈夋瑺娆撅紝杩樻湁杩樼殑
+				debtMoney = kouKuanReward(copyRewardList, debtMoney);
+			}
+			// 鍋胯繕娆犳閲戦
+			BigDecimal repayMoney = originalDebtMoney.subtract(debtMoney);
+			BigDecimal bannce = null;
+			if (repayMoney.compareTo(new BigDecimal(0)) > 0) {
+				try {
+					bannce = orderTeamRewardDebtService.repayDebtByUid(uid, repayMoney);
+					// 鍓╀綑鐨勮ˉ璐撮噾棰�
+				} catch (OrderTeamRewardDebtException e) {
+					throw new OrderMoneySettleException(2, "杩樻寮傚父");
+				}
+			}
+			if (bannce != null && bannce.compareTo(new BigDecimal(0)) > 0) {
+				// 濡傛灉鏈夎繕鍓╀笅鐨勯挶灏卞姞鍒扮涓�涓笂闈�
+				totalList.get(0).setMoney(totalList.get(0).getMoney().add(bannce));
+			}
+
+			BigDecimal totalMoney = new BigDecimal(0);
+			for (OrderTeamReward reward : totalList) {
+				orderTeamRewardService.settleById(reward.getId(), reward.getMoney());
+				totalMoney = totalMoney.add(reward.getMoney());
+			}
+
+			// 瀹為檯鍒拌处濂栧姳
+			UserMoneyDetail userMoneyDetail = null;
+			try {
+				userMoneyDetail = UserMoneyDetailFactory.createOrderTeamReward(uid, totalMoney, new Date());
+			} catch (UserMoneyDetailException e) {
+				throw new OrderMoneySettleException(1, "璐︽埛鏄庣粏鏋勫缓鍑洪敊");
+			}
+			// 娣诲姞璧勯噾
+			userMoneyService.addUserMoney(uid, totalMoney, userMoneyDetail);
+			// 娣诲姞娑堟伅
+			userMoneyMsgNotificationService.orderTeamReward(uid, new Date(), "绯荤粺鑷姩涓嬪彂", totalMoney,
+					userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
+		}
+
+	}
 }

--
Gitblit v1.8.0