From 88b54772dbcf5ecab1e2316e4e4626ac901b8908 Mon Sep 17 00:00:00 2001
From: yujian <yujian>
Date: 星期二, 22 一月 2019 15:58:24 +0800
Subject: [PATCH] 邀请码添加返回状态

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java |  279 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 259 insertions(+), 20 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 244b98c..a4e52e1 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
@@ -1,6 +1,7 @@
 package com.yeshi.fanli.service.impl.taobao;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -13,31 +14,40 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import com.yeshi.fanli.dao.mybatis.AccountDetailsMapper;
+import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
 import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
-import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper;
+import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
+import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
+import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
 import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper;
 import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanDrawBackMapper;
 import com.yeshi.fanli.entity.bus.user.AccountDetails;
-import com.yeshi.fanli.entity.bus.user.HongBao;
+import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
+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.taobao.TaoBaoOrder;
 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.UserMoneyDetailException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
 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.factory.AccountDetailsFactory;
+import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
+import com.yeshi.fanli.vo.order.CommonOrderVO;
 
 @Service
 public class TaoBaoWeiQuanDrawBackServiceImpl implements TaoBaoWeiQuanDrawBackService {
 	@Resource
 	private TaoBaoWeiQuanDrawBackMapper taoBaoWeiQuanDrawBackMapper;
-
-	@Resource
-	private HongBaoMapper hongBaoMapper;
 
 	@Resource
 	private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
@@ -49,10 +59,25 @@
 	private UserInfoMapper userInfoMapper;
 
 	@Resource
+	private UserMoneyDetailMapper userMoneyDetailMapper;
+
+	@Resource
 	private AccountDetailsMapper accountDetailsMapper;
 
 	@Resource
 	private UserNotificationService userNotificationService;
+
+	@Resource
+	private CommonOrderMapper commonOrderMapper;
+
+	@Resource
+	private HongBaoV2Mapper hongBaoV2Mapper;
+
+	@Resource
+	private HongBaoOrderMapper hongBaoOrderMapper;
+
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
 
 	@Override
 	public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
@@ -78,12 +103,32 @@
 				sumFee = sumFee.add(order.geteIncome());
 		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
 		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
-		List<HongBao> mainHongBaoList = hongBaoMapper.selectByOrderIdWithoutChild(orderId);
+		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());
+				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());
+			mainHongBaoList.set(i, hb);
 			// 鍙鐞嗚繑鍒╄鍗�
-			if (mainHongBaoList.get(i).getType() != HongBao.TYPE_TAOBAO) {
+			if (hb.getType() != HongBaoV2.TYPE_ZIGOU) {
 				mainHongBaoList.remove(i);
 				i--;
 			}
@@ -96,8 +141,8 @@
 		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
 
 		if (mainHongBaoList != null)
-			for (HongBao hongBao : mainHongBaoList) {
-				if (hongBao.getState() == HongBao.STATE_SHIXIAO)
+			for (HongBaoV2 hongBao : mainHongBaoList) {
+				if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
 					continue;
 				// 绱涓荤孩鍖呯殑閲戦
 				if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
@@ -114,9 +159,10 @@
 			BigDecimal userGetMoney = fanMoneyMap.get(uid);
 			BigDecimal fanMoney = new BigDecimal("0");
 			// 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾
+			TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
 			for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
-				TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper
-						.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), uid);
+				weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
+						uid);
 				if (weiQuanDrawBack != null)
 					continue;
 				// 閫�娆剧殑璧勯噾
@@ -142,10 +188,29 @@
 			AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney,
 					AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid));
 			accountDetailsMapper.insertSelective(accountDetails);
+			// 鏂扮増璧勯噾璁板綍
+			try {
+				UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack,
+						drawBackMoney);
+				userMoneyDetail.setId(accountDetails.getId());
+				userMoneyDetailMapper.insert(userMoneyDetail);
+			} catch (UserMoneyDetailException e) {
+				try {
+					LogHelper.errorDetailInfo(e);
+				} catch (Exception e1) {
+					e1.printStackTrace();
+				}
+			}
+
+			// 鏂扮増閫氱煡
+			userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, drawBackMoney,
+					userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
+
 			userNotificationService.weiQuanFanli(uid, orderId, drawBackMoney);
 		}
 	}
 
+	@Transactional
 	@Override
 	public void doWeiQuanShare(String orderId) throws TaoBaoWeiQuanException {
 		if (StringUtil.isNullOrEmpty(orderId))
@@ -163,7 +228,27 @@
 				sumFee = sumFee.add(order.geteIncome());
 		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
 		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
-		List<HongBao> mainHongBaoList = hongBaoMapper.selectByOrderIdWithoutChild(orderId);
+
+		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());
+				mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
+			}
+
 		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
 			return;
 
@@ -171,11 +256,13 @@
 		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
 
 		if (mainHongBaoList != null)
-			for (HongBao hongBao : mainHongBaoList) {
-				if (hongBao.getState() == HongBao.STATE_SHIXIAO)
+			for (HongBaoV2 hongBao : mainHongBaoList) {
+				hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId());
+				if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
 					continue;
+
 				// 杩斿埄绾㈠寘涓嶈鍏�
-				if (hongBao.getType() != HongBao.TYPE_TAOBAO) {
+				if (hongBao.getType() != HongBaoV2.TYPE_ZIGOU) {
 					// 绱涓荤孩鍖呯殑閲戦
 					if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
 						fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney());
@@ -184,10 +271,10 @@
 								fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney()));
 				}
 				// 绱瀛愮孩鍖呯殑閲戦
-				List<HongBao> childHongBaoList = hongBaoMapper.selectChildHongBaoByPid(hongBao.getId());
+				List<HongBaoV2> childHongBaoList = hongBaoV2Mapper.listChildrenById(hongBao.getId());
 				if (childHongBaoList != null)
-					for (HongBao child : childHongBaoList) {
-						if (child.getState() == HongBao.STATE_SHIXIAO)
+					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());
@@ -204,9 +291,10 @@
 			BigDecimal userGetMoney = fanMoneyMap.get(uid);
 			BigDecimal fanMoney = new BigDecimal("0");
 			// 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾
+			TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
 			for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
-				TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper
-						.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), uid);
+				weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
+						uid);
 				if (weiQuanDrawBack != null)
 					continue;
 				// 閫�娆剧殑璧勯噾
@@ -232,6 +320,157 @@
 			AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney,
 					AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid));
 			accountDetailsMapper.insertSelective(accountDetails);
+			// 鏂扮増璧勯噾璁板綍
+			try {
+				UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack,
+						drawBackMoney);
+				userMoneyDetail.setId(accountDetails.getId());
+				userMoneyDetailMapper.insert(userMoneyDetail);
+			} catch (UserMoneyDetailException e) {
+				try {
+					LogHelper.errorDetailInfo(e);
+				} catch (Exception e1) {
+					e1.printStackTrace();
+				}
+			}
+
+			userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, drawBackMoney,
+					userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
+
+			userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney);
+		}
+
+	}
+
+	@Transactional
+	@Override
+	public void doWeiQuanInvite(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<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
+		// 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲�
+		BigDecimal sumFee = new BigDecimal("0");
+		for (TaoBaoOrder order : orderList)
+			if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻"))
+				sumFee = sumFee.add(order.geteIncome());
+		// 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴�
+		// 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�)
+		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);
+				}
+
+				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
+				mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
+			}
+		if (mainHongBaoList == null || mainHongBaoList.size() == 0)
+			return;
+
+		// 涓荤敤鎴稩D
+		Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
+
+		if (mainHongBaoList != null)
+			for (HongBaoV2 hongBao : mainHongBaoList) {
+				HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId());
+				hongBao = hb;
+
+				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()));
+					}
+			}
+
+		// 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚�
+		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;
+			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));
+				taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);
+			}
+
+			if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
+				continue;
+
+			// 閫�娆鹃噾棰�
+			BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
+			userInfoMapper.subHongBaoByUid(uid, drawBackMoney);
+			// 娣诲姞璧勯噾璁板綍
+			AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney,
+					AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid));
+			accountDetailsMapper.insertSelective(accountDetails);
+
+			// 鏂扮増璧勯噾璁板綍
+			try {
+				UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack,
+						drawBackMoney);
+				userMoneyDetail.setId(accountDetails.getId());
+				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);
 		}

--
Gitblit v1.8.0