From a4b592d7de38d36362aa06f1fc1e8bd790456586 Mon Sep 17 00:00:00 2001
From: Lixiaodi <xiaodi.li@yoho.cn>
Date: Thu, 22 Nov 2018 10:41:56 +0800
Subject: [PATCH] 修改记账分总账分账

---
 order/src/main/java/com/yohoufo/order/service/MerchantOrderPaymentService.java | 46 +++++++++++++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/order/src/main/java/com/yohoufo/order/service/MerchantOrderPaymentService.java b/order/src/main/java/com/yohoufo/order/service/MerchantOrderPaymentService.java
index 63ead4d..9c68417 100644
--- a/order/src/main/java/com/yohoufo/order/service/MerchantOrderPaymentService.java
+++ b/order/src/main/java/com/yohoufo/order/service/MerchantOrderPaymentService.java
@@ -157,6 +157,9 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
     	swd.setType(SellerWalletDetail.Type.RE_CHARGE.getValue());
     	swd.setCreateTime(TimeUtils.getTimeStampSecond());
     	swd.setUpdateTime(0);
+    	swd.setAvailAmount(orderInfo.getAmount());
+    	swd.setLockAmount(BigDecimal.ZERO);
+    	swd.setIsSet(1);
     	JSONObject att = new JSONObject();
     	att.put("payment", orderInfo.getPayment());
     	swd.setAttachValue(att.toJSONString());
@@ -389,7 +392,7 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
     // 支付保证金:明细记录+orders_pay记录
     public void useEarnestAddWalletDetail(SellerWallet sw, List<OrderInfo> orderList) {
     	for(OrderInfo oi : orderList) {
-    		SellerWalletDetail swd = addWalletDetail(sw, oi.getOrderCode(), oi.getAmount(), 1, SellerWalletDetail.Type.PUBLISH);
+    		SellerWalletDetail swd = addWalletDetail(sw, oi.getOrderCode(), oi.getAmount(), SellerWalletDetail.Type.PUBLISH);
     		addOrdersPay(swd);
     	}
     }
@@ -403,7 +406,7 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
 			} else {
 				t = SellerWalletDetail.Type.SUBTRACT_PRICE;
 			}
-    		SellerWalletDetail swd = addWalletDetail(sw, oi.getOrderCode(), oi.getAmount(), 1, t);
+    		SellerWalletDetail swd = addWalletDetail(sw, oi.getOrderCode(), oi.getAmount(), t);
     		changePriceUpdateOrdersPay(swd);
     	}
     }
@@ -411,7 +414,7 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
     // 下架商品(卖家+系统):明细记录+退款表记录
     public void unshelveAddWalletDetail(SellerWallet sw, List<OrderInfo> orderList, SellerWalletDetail.Type type) {
     	for(OrderInfo oi : orderList) {
-    		SellerWalletDetail swd = addWalletDetail(sw, oi.getOrderCode(), oi.getAmount(), 1, type);
+    		SellerWalletDetail swd = addWalletDetail(sw, oi.getOrderCode(), oi.getAmount(), type);
     		addRefundRecord(swd, oi.getAmount());
     	}
     }
@@ -465,6 +468,9 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
  	   	swd.setIsBatch(0);
  	   	swd.setCreateTime(TimeUtils.getTimeStampSecond());
  	    swd.setUpdateTime(0);
+ 	    swd.setAvailAmount(BigDecimal.ZERO);
+ 	    swd.setLockAmount(BigDecimal.ZERO);
+ 	    swd.setIsSet(1);
  	   	logger.info("商家退出,退还保证金,钱包归零处理,增加扣减明细,bean={}", swd);
  	   	sellerWalletDetailMapper.insert(swd);
  	   	
@@ -472,7 +478,7 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
 	}
     
 	// 增加:明细
-	private SellerWalletDetail addWalletDetail(SellerWallet sw, long orderCode, BigDecimal amount, Integer isBatch, SellerWalletDetail.Type type) {
+	private SellerWalletDetail addWalletDetail(SellerWallet sw, long orderCode, BigDecimal amount, SellerWalletDetail.Type type) {
 		Integer uid = sw.getUid();
     	SellerWalletDetail swd = new SellerWalletDetail();
     	swd.setOrderCode(orderCode);
@@ -480,7 +486,7 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
     	swd.setUid(uid);
     	swd.setWalletId(sw.getId());
     	swd.setAmount(amount);
-    	swd.setIsBatch(isBatch);
+    	swd.setIsBatch(1);
     	swd.setCreateTime(TimeUtils.getTimeStampSecond());
     	swd.setUpdateTime(0);
     	logger.info("增加保证金明细({}),bean={}", type.getName(), swd);
@@ -511,34 +517,39 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
 			return null;
 		}
 		
-		sw.setAmount(null);
-		sw.setLockAmount(null);
+		BigDecimal beforeAvailAmount = sw.getAmount();
+		BigDecimal beforeLockAmount = sw.getLockAmount();
+		BigDecimal availAmount = null;
+		BigDecimal lockAmount = null;
 		
 		// 减去保证金
 		if (type == SellerWalletDetail.Type.PUBLISH 
 				|| type == SellerWalletDetail.Type.ADD_PRICE
 				|| type == SellerWalletDetail.Type.SUBTRACT_PRICE) {
-			sw.setAmount(money.multiply(new BigDecimal("-1")));
-			sw.setLockAmount(money);
+			availAmount = money.multiply(new BigDecimal("-1"));
+			lockAmount = money;
 		} else if (type == SellerWalletDetail.Type.SELLER_OFF 
 				|| type == SellerWalletDetail.Type.SYSTEM_OFF
 				|| type == SellerWalletDetail.Type.APPRAISE_OK
 				|| type == SellerWalletDetail.Type.BUYER_CANCEL_DELIVERY
 				|| type == SellerWalletDetail.Type.BUYER_CANCEL_NO_DELIVERY) {
 			// 增加保证金
-			sw.setAmount(money);
-			sw.setLockAmount(money.multiply(new BigDecimal("-1")));
+			availAmount = money;
+			lockAmount = money.multiply(new BigDecimal("-1"));
 		} else if (type == SellerWalletDetail.Type.SELLER_CANCEL 
 				|| type == SellerWalletDetail.Type.SELLER_OVER_TIME
 				|| type == SellerWalletDetail.Type.APPRAISE_FAIL) {
 			// 处罚保证金
-			sw.setLockAmount(money.multiply(new BigDecimal("-1")));
+			lockAmount = money.multiply(new BigDecimal("-1"));
 		}
+		
+		sw.setAmount(availAmount);
+		sw.setLockAmount(lockAmount);
 		sw.setUpdateTime(TimeUtils.getTimeStampSecond());
 		logger.info("{}修改钱包表余额,bean={}", sw);
 		if (sellerWalletMapper.addMoney(sw) == 0) {
-			logger.error(message + "失败,(并发)更新表返回0,uid={}", uid);
-			CommonAlarmEventPublisher.publish(message + "失败", "ufo.order.changePrice", "(并发)更新表返回0,uid=" + uid + ", 金额为:"+ money);
+			logger.error(message + "失败,(并发)更新表返回0,bean={}", sw);
+			CommonAlarmEventPublisher.publish(message + "失败", "ufo.order.changePrice", "(并发)更新表返回0,uid=" + uid + ", bean为:"+ sw);
 			return null;
 		}
 		logger.info("{}修改钱包表余额成功,bean={}", sw);
@@ -550,9 +561,14 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
     	swd.setWalletId(sw.getId());
     	swd.setAmount(money);
     	swd.setIsBatch(0);
-    	swd.setAttachValue(attach);
     	swd.setCreateTime(TimeUtils.getTimeStampSecond());
     	swd.setUpdateTime(0);
+    	//////////////////////////
+		swd.setAttachValue(attach);
+		swd.setAvailAmount(availAmount == null ? beforeAvailAmount : beforeAvailAmount.add(availAmount));
+		swd.setLockAmount(lockAmount == null ? beforeLockAmount : beforeLockAmount.add(lockAmount));
+		swd.setIsSet(0);
+ 	    /////////////////////////
     	logger.info("增加钱包明细汇总记录,bean={}", swd);
     	sellerWalletDetailMapper.insert(swd);
     	logger.info("增加钱包明细汇总记录成功,bean={}", swd);
--
libgit2 0.24.0