From 28cf328a098334b51a3e9d2d56f983fb8c862211 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 23 五月 2020 09:54:38 +0800
Subject: [PATCH] 足迹、收藏订单兼容新需求

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java |  246 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 243 insertions(+), 3 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java
index b48c022..678f1f8 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java
@@ -1,16 +1,40 @@
 package com.yeshi.fanli.service.impl.money;
 
+import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 import javax.annotation.Resource;
 
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import com.yeshi.fanli.dao.mybatis.AlipayAccountValidNormalHistoryMapper;
 import com.yeshi.fanli.dao.mybatis.money.UserMoneyDebtMapper;
+import com.yeshi.fanli.dao.mybatis.money.UserMoneyDebtReturnHistoryMapper;
+import com.yeshi.fanli.entity.bus.user.AlipayAccountValidNormalHistory;
+import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.money.UserMoneyDebt;
 import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
+import com.yeshi.fanli.entity.money.UserMoneyDebtReturnHistory;
+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.TaoBaoWeiQuanDrawBack;
 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.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.HongBaoOrderService;
+import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
+import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 
 @Service
 public class UserMoneyDebtServiceImpl implements UserMoneyDebtService {
@@ -18,12 +42,42 @@
 	@Resource
 	private UserMoneyDebtMapper userMoneyDebtMapper;
 
+	@Resource
+	private UserMoneyDebtReturnHistoryMapper userMoneyDebtReturnHistoryMapper;
+
+	@Resource
+	private TaoBaoWeiQuanDrawBackService taoBaoWeiQuanDrawBackService;
+
+	@Resource
+	private TaoBaoOrderService taoBaoOrderService;
+
+	@Resource
+	private HongBaoV2Service hongBaoV2Service;
+
+	@Resource
+	private HongBaoOrderService hongBaoOrderService;
+
+	@Resource
+	private UserMoneyService userMoneyService;
+
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+	@Resource
+	private UserInfoService userInfoService;
+
+	@Resource
+	private AlipayAccountValidNormalHistoryMapper alipayAccountValidNormalHistoryMapper;
+
+	@Resource
+	private CommonOrderService commonOrderService;
+
 	@Override
 	public void addUserMoneyDebt(UserMoneyDebt debt) throws UserMoneyDebtException {
 		if (debt == null)
 			return;
 
-		if (debt.getType() == UserMoneyDebtTypeEnum.hongBao) {
+		if (debt.getType() == UserMoneyDebtTypeEnum.order) {
 			if (debt.getSourceId() == null)
 				throw new UserMoneyDebtException(1, "sourceId涓虹┖");
 			if (debt.getUid() == null || debt.getOriginMoney() == null)
@@ -35,13 +89,199 @@
 			if (debt.getCreateTime() == null)
 				debt.setCreateTime(new Date());
 
-			UserMoneyDebt old = userMoneyDebtMapper.selectByUidAndSourceId(debt.getUid(), debt.getSourceId());
+			UserMoneyDebt old = userMoneyDebtMapper.selectByUidAndTypeAndSourceId(debt.getUid(), debt.getType(),
+					debt.getSourceId());
 			if (old != null) {
-				throw new UserMoneyDebtException(3, "瀵瑰簲鐢ㄦ埛鐨勭孩鍖呭凡缁忓瓨鍦�");
+				throw new UserMoneyDebtException(3, "瀵瑰簲鍞悗宸茬粡瀛樺湪");
 			}
 			userMoneyDebtMapper.insertSelective(debt);
 		}
+	}
 
+	@Override
+	public UserMoneyDebt selectByTypeAndSourceId(UserMoneyDebtTypeEnum type, Long sourceId) {
+
+		return userMoneyDebtMapper.selectByTypeAndSourceId(type, sourceId);
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void repayDebt(UserMoneyDebt debt, BigDecimal money) throws UserMoneyDebtException {
+		if (debt == null || debt.getId() == null)
+			throw new UserMoneyDebtException(1, "鍙傛暟涓嶅畬鏁�");
+
+		if (money == null || money.compareTo(new BigDecimal(0)) <= 0)
+			throw new UserMoneyDebtException(2, "鍋胯繕璧勯噾闇�澶т簬0");
+
+		UserMoneyDebt old = userMoneyDebtMapper.selectByPrimaryKey(debt.getId());
+		if (old == null)
+			throw new UserMoneyDebtException(3, "鍊熻捶鍏崇郴涓嶅瓨鍦�");
+
+		if (old.getUid().longValue() != debt.getUid())
+			throw new UserMoneyDebtException(4, "鍙兘鏈汉杩橀挶");
+
+		if (money.compareTo(old.getLeftMoney()) < 0)
+			throw new UserMoneyDebtException(5, "涓嶅杩�");
+
+		UserMoneyDebt update = new UserMoneyDebt();
+		update.setId(old.getId());
+		update.setUpdateTime(new Date());
+		update.setLeftMoney(old.getLeftMoney().subtract(money));
+		userMoneyDebtMapper.updateByPrimaryKeySelective(update);
+
+		UserMoneyDebtReturnHistory history = new UserMoneyDebtReturnHistory();
+		history.setBeiZhu(null);
+		history.setCreateTime(new Date());
+		history.setDebt(old);
+		history.setMoney(money);
+		history.setUid(old.getUid());
+		userMoneyDebtReturnHistoryMapper.insertSelective(history);
+
+		if (debt.getType() == UserMoneyDebtTypeEnum.order) {
+			HongBaoV2 hb = hongBaoV2Service.selectByPrimaryKey(debt.getSourceId());
+			if (hb == null) {
+				throw new UserMoneyDebtException(6, "鍋胯繕鐨勮鍗旾D涓嶅瓨鍦�");
+			}
+
+			TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackService.selectByHongBaoId(hb.getId());
+			if (weiQuanDrawBack == null)
+				throw new UserMoneyDebtException(7, "灏氭湭鎵惧埌閫�娆句俊鎭�");
+
+			// 璧勯噾鍙樺寲锛屾坊鍔犵敤鎴疯祫閲戣褰曪紝娣诲姞鐩稿叧閫氱煡
+			Long uid = debt.getUid();
+			switch (hb.getType()) {
+			case HongBaoV2.TYPE_ZIGOU:
+				// 鏂扮増璧勯噾璁板綍
+				try {
+					UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack,
+							money);
+					userMoneyService.subUserMoney(uid, money, userMoneyDetail);
+				} catch (UserMoneyDetailException e) {
+					throw new UserMoneyDebtException(12, "鎻掑叆璧勯噾璇︽儏鍑洪敊");
+				}
+
+				// 鏂扮増閫氱煡
+				List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+						weiQuanDrawBack.getOrderId());
+				int goodsCount = 0;
+				for (CommonOrder co : orderList) {
+					if (co.getState() != CommonOrder.STATE_SX)
+						goodsCount += co.getCount();
+				}
+
+				BigDecimal fanliMoney = new BigDecimal(0);
+				List<HongBaoOrder> hongBaoOrderList = hongBaoOrderService
+						.listDetailByOrderIdAndSourceType(weiQuanDrawBack.getOrderId(), Constant.SOURCE_TYPE_TAOBAO);
+
+				for (HongBaoOrder hongBaoOrder : hongBaoOrderList) {
+					fanliMoney = fanliMoney.add(hongBaoOrder.getHongBaoV2().getMoney());
+				}
+
+				userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(),
+						Constant.SOURCE_TYPE_TAOBAO, money, fanliMoney, goodsCount,
+						orderList.get(0).getThirdCreateTime());
+
+				break;
+			case HongBaoV2.TYPE_SHARE_GOODS:
+
+				// 鏂扮増璧勯噾璁板綍
+				try {
+					UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(debt.getUid(),
+							weiQuanDrawBack, money);
+					userMoneyService.subUserMoney(uid, money, userMoneyDetail);
+
+					// 鏂扮増閫氱煡
+					List<CommonOrder> orderList1 = commonOrderService
+							.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO, weiQuanDrawBack.getOrderId());
+					int goodsCount1 = 0;
+					for (CommonOrder co : orderList1) {
+						if (co.getState() != CommonOrder.STATE_SX)
+							goodsCount1 += co.getCount();
+					}
+
+					BigDecimal fanliMoney1 = new BigDecimal(0);
+					List<HongBaoOrder> hongBaoOrderList1 = hongBaoOrderService.listDetailByOrderIdAndSourceType(
+							weiQuanDrawBack.getOrderId(), Constant.SOURCE_TYPE_TAOBAO);
+
+					for (HongBaoOrder hongBaoOrder : hongBaoOrderList1) {
+						fanliMoney1 = fanliMoney1.add(hongBaoOrder.getHongBaoV2().getMoney());
+					}
+
+					userMoneyMsgNotificationService.shareOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(),
+							Constant.SOURCE_TYPE_TAOBAO, money, fanliMoney1, goodsCount1,
+							orderList1.get(0).getThirdCreateTime());
+
+				} catch (UserMoneyDetailException e) {
+					throw new UserMoneyDebtException(12, "鎻掑叆璧勯噾璇︽儏鍑洪敊");
+				}
+				break;
+			case HongBaoV2.TYPE_SHARE_ERJI:
+			case HongBaoV2.TYPE_SHARE_YIJI:
+			case HongBaoV2.TYPE_ERJI:
+			case HongBaoV2.TYPE_YIJI:
+
+				// 鏂扮増璧勯噾璁板綍
+				try {
+					UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack,
+							money);
+					userMoneyService.subUserMoney(uid, money, userMoneyDetail);
+				} catch (UserMoneyDetailException e) {
+					throw new UserMoneyDebtException(12, "鎻掑叆璧勯噾璇︽儏鍑洪敊");
+				}
+
+				break;
+			}
+		} else if (debt.getType() == UserMoneyDebtTypeEnum.extractVerify) {// 鎻愮幇楠岃瘉
+			// 鏂扮増璧勯噾璁板綍
+			AlipayAccountValidNormalHistory aliPayAccountHistory = alipayAccountValidNormalHistoryMapper
+					.selectByPrimaryKey(debt.getSourceId());
+
+			AlipayAccountValidNormalHistory first = alipayAccountValidNormalHistoryMapper
+					.selectLatestByUid(aliPayAccountHistory.getUid());
+
+			if (aliPayAccountHistory == null)
+				return;
+			try {
+				UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createExtractAccountValid(aliPayAccountHistory,
+						money);
+				userMoneyService.subUserMoney(aliPayAccountHistory.getUid(), money, userMoneyDetail);
+			} catch (UserMoneyDetailException e) {
+				throw new UserMoneyDebtException(12, "鎻掑叆璧勯噾璇︽儏鍑洪敊");
+			}
+			userMoneyMsgNotificationService.alipayAccountValid(aliPayAccountHistory, "1涓湀",
+					first.getId().longValue() != aliPayAccountHistory.getId());
+		}
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void repayDebt(Long uid) {
+		// 鏌ヨ鏄惁鏈夋瑺鍊�
+		List<UserMoneyDebt> list = userMoneyDebtMapper.listByUidWithHasLeftMoney(uid, 0, 50);
+		if (list != null && list.size() > 0) {// 鏈夋瑺鍊�
+			for (UserMoneyDebt debt : list) {
+				BigDecimal leftMoney = userInfoService.getBalance(uid);
+				if (leftMoney.compareTo(debt.getLeftMoney()) >= 0) {// 鏈夎冻澶熺殑璧勯噾鍋胯繕鍊哄姟
+					try {
+						repayDebt(debt, debt.getLeftMoney());
+					} catch (UserMoneyDebtException e) {
+						try {
+							LogHelper.errorDetailInfo(e, "uid:" + uid + " debtId:" + debt.getId(), null);
+						} catch (Exception e1) {
+							e1.printStackTrace();
+						}
+					}
+				}
+			}
+		}
+	}
+
+	@Override
+	public boolean isHaveDebtToRepay(Long uid) {
+		List<UserMoneyDebt> debtList = userMoneyDebtMapper.listByUidWithHasLeftMoney(uid, 0, 1);
+		if (debtList != null && debtList.size() > 0)
+			return true;
+		return false;
 	}
 
 }

--
Gitblit v1.8.0