From 8e30aa7c1f0384f09278699318b4902b815b42a7 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 26 四月 2019 18:01:25 +0800
Subject: [PATCH] 维权返利初步修改,拼多多初步增加

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java |  148 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 145 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..bc53c80 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,31 @@
 package com.yeshi.fanli.service.impl.money;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 import javax.annotation.Resource;
 
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.yeshi.fanli.dao.mybatis.money.UserMoneyDebtMapper;
+import com.yeshi.fanli.dao.mybatis.money.UserMoneyDebtReturnHistoryMapper;
+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.taobao.TaoBaoWeiQuanDrawBack;
 import com.yeshi.fanli.exception.money.UserMoneyDebtException;
+import com.yeshi.fanli.exception.money.UserMoneyDetailException;
+import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
+import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserMoneyService;
+import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 
 @Service
 public class UserMoneyDebtServiceImpl implements UserMoneyDebtService {
@@ -18,12 +33,33 @@
 	@Resource
 	private UserMoneyDebtMapper userMoneyDebtMapper;
 
+	@Resource
+	private UserMoneyDebtReturnHistoryMapper userMoneyDebtReturnHistoryMapper;
+
+	@Resource
+	private TaoBaoWeiQuanDrawBackService taoBaoWeiQuanDrawBackService;
+
+	@Resource
+	private TaoBaoOrderService taoBaoOrderService;
+
+	@Resource
+	private HongBaoV2Service hongBaoV2Service;
+
+	@Resource
+	private UserMoneyService userMoneyService;
+
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+	@Resource
+	private UserInfoService userInfoService;
+
 	@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 +71,119 @@
 			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
+	@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, "鎻掑叆璧勯噾璇︽儏鍑洪敊");
+				}
+
+				// 鏂扮増閫氱煡
+				userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(), money,
+						userInfoService.getMyHB(uid));
+
+				break;
+			case HongBaoV2.TYPE_SHARE_GOODS:
+
+				// 鏂扮増璧勯噾璁板綍
+				try {
+					UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(debt.getUid(),
+							weiQuanDrawBack, money);
+					userMoneyService.subUserMoney(uid, money, userMoneyDetail);
+
+					userMoneyMsgNotificationService.shareOrderWeiQuan(debt.getUid(), weiQuanDrawBack.getOrderId(),
+							money, userInfoService.getMyHB(uid));
+
+				} 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, "鎻掑叆璧勯噾璇︽儏鍑洪敊");
+				}
+
+				// 鏂扮増閫氱煡
+				userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(), money,
+						userInfoService.getMyHB(uid));
+				break;
+
+			}
+
+		}
 	}
 
 }

--
Gitblit v1.8.0