From aa66729ef758105dc1ced739ffe88e253affc37a Mon Sep 17 00:00:00 2001
From: yujian <yujian@123.com>
Date: 星期二, 16 七月 2019 15:49:28 +0800
Subject: [PATCH] Merge branch 'master-bug'

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java |  604 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 578 insertions(+), 26 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java
index e9af597..f3717f7 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java
@@ -1,5 +1,7 @@
 package com.yeshi.fanli.service.impl.order;
 
+import java.io.File;
+import java.io.FileNotFoundException;
 import java.math.BigDecimal;
 import java.util.Calendar;
 import java.util.Date;
@@ -7,54 +9,77 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Scanner;
 
 import javax.annotation.Resource;
 
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
+import com.yeshi.fanli.dao.mybatis.money.ExtractCheckCompensateMapper;
 import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
 import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
 import com.yeshi.fanli.dao.mybatis.order.CommonOrderTradeIdMapMapper;
 import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
+import com.yeshi.fanli.dao.mybatis.order.OrderRepairHistoryMapper;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.goods.CommonGoods;
+import com.yeshi.fanli.entity.money.ExtractCheckCompensate;
+import com.yeshi.fanli.entity.money.UserMoneyDetail;
 import com.yeshi.fanli.entity.order.CommonOrder;
 import com.yeshi.fanli.entity.order.CommonOrderGoods;
 import com.yeshi.fanli.entity.order.CommonOrderTradeIdMap;
 import com.yeshi.fanli.entity.order.HongBaoOrder;
 import com.yeshi.fanli.entity.order.OrderRepairHistory;
 import com.yeshi.fanli.entity.order.ShareGoodsActivityOrder;
+import com.yeshi.fanli.entity.push.PushInfo;
+import com.yeshi.fanli.entity.push.PushInfo.PushTypeEnum;
 import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
 import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
+import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
 import com.yeshi.fanli.exception.HongBaoException;
+import com.yeshi.fanli.exception.PushException;
+import com.yeshi.fanli.exception.money.UserMoneyDetailException;
+import com.yeshi.fanli.exception.push.PushInfoException;
 import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
 import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
 import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
-import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.order.CommonOrderService;
 import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
 import com.yeshi.fanli.service.inter.order.OrderRepairHistoryService;
 import com.yeshi.fanli.service.inter.order.OrderRepairService;
 import com.yeshi.fanli.service.inter.order.ShareGoodsActivityOrderService;
+import com.yeshi.fanli.service.inter.push.PushInfoService;
 import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserMoneyService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.TimeUtil;
 import com.yeshi.fanli.util.factory.CommonOrderGoodsFactory;
+import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
 import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
 
+import net.sf.json.JSONObject;
+
 @Service
 public class OrderRepairServiceImpl implements OrderRepairService {
+
+	@Resource
+	private OrderRepairHistoryMapper orderRepairHistoryMapper;
 
 	@Resource
 	private TaoBaoOrderService taoBaoOrderService;
@@ -104,19 +129,43 @@
 	@Resource
 	private OrderRepairHistoryService orderRepairHistoryService;
 
+	@Resource
+	private DataSourceTransactionManager dataSourceTransactionManager;
+
+	@Resource
+	private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
+
+	@Resource
+	private UserMoneyService userMoneyService;
+
+	@Resource
+	private PushInfoService pushInfoService;
+
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+	@Resource
+	private ExtractCheckCompensateMapper extractCheckCompensateMapper;
+
+	@Transactional
 	@Override
-	public void repairOrder(String orderId) {
+	public void repairOrder(String orderId) throws Exception {
 		// 姣旇緝CommonOrder涓嶵aoBaoOrder鐨勯浼版敹鐩�
 		List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
 		// 缁熻
 		BigDecimal sumMoney = new BigDecimal("0");
 		for (TaoBaoOrder order : orderList) {
+			// if (order.getOrderState().equalsIgnoreCase("璁㈠崟浠樻") ||
+			// order.getOrderState().equalsIgnoreCase("璁㈠崟鎴愬姛"))
+			// return;
+			if (order.getSubsidy() == null)
+				order.setSubsidy(new BigDecimal(0));
+			if (order.geteIncome() == null)
+				order.seteIncome(new BigDecimal(0));
+
 			BigDecimal money = order.geteIncome().add(order.getSubsidy());
 			sumMoney = sumMoney.add(money);
-			if (order.getOrderState().equalsIgnoreCase("璁㈠崟浠樻") || order.getOrderState().equalsIgnoreCase("璁㈠崟鎴愬姛"))
-				return;
 		}
-		
 
 		List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
 				orderId);
@@ -125,11 +174,12 @@
 			commonSumMoney = commonSumMoney.add(commonOrder.geteIncome());
 		}
 
-		try {
-			processLessFanOrder(orderId);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
+		// 涓嶅鐞嗙淮鏉冭繃鐨勮鍗�
+		List<TaoBaoWeiQuanOrder> weiQuanOrderList = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
+		if (weiQuanOrderList != null && weiQuanOrderList.size() > 0)
+			return;
+
+		processLessFanOrder(orderId);
 
 		// if (sumMoney.compareTo(commonSumMoney) > 0) {
 		// // 灏戣繑浜�
@@ -140,14 +190,15 @@
 
 	}
 
-	@Transactional
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	private void processLessFanOrder(String orderId) throws Exception {
-		List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+
+		List<CommonOrder> commonOrderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
 				orderId);
 		// 纭畾鏄嚜璐繕鏄垎浜禋
 		if (commonOrderList.size() <= 0)
 			return;
-		HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderList.get(0).getId());
+		HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrderList.get(0).getId());
 		// 缁熻鍘熸潵鐨勪笂涓嬬骇鍏崇郴鍙婅繑鍒╃殑璧勯噾
 		Map<Long, BigDecimal> oldMoney = new HashMap<>();
 		Long firstUid = null;
@@ -155,7 +206,7 @@
 		Long mainUid = null;
 		// 缁熻杩斿埄鐨勮祫閲�
 		for (CommonOrder co : commonOrderList) {
-			HongBaoOrder tempHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
+			HongBaoOrder tempHongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
 			if (tempHongBaoOrder == null || tempHongBaoOrder.getHongBaoV2() == null)
 				continue;
 			hongBaoOrder = tempHongBaoOrder;
@@ -166,7 +217,7 @@
 			if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_YILINGQU)
 				oldMoney.put(mainUid, oldMoney.get(mainUid).add(hongBaoOrder.getHongBaoV2().getMoney()));
 			// 鏌ヨ鏄惁鏈変笅绾�
-			List<HongBaoV2> childrenList = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
+			List<HongBaoV2> childrenList = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
 			for (HongBaoV2 child : childrenList) {
 				if (child.getType() == HongBaoV2.TYPE_YIJI || child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
 					firstUid = child.getUserInfo().getId();
@@ -184,6 +235,29 @@
 				}
 			}
 		}
+
+		// FileWriter fw = null;
+		// try {
+		// // 濡傛灉鏂囦欢瀛樺湪锛屽垯杩藉姞鍐呭锛涘鏋滄枃浠朵笉瀛樺湪锛屽垯鍒涘缓鏂囦欢
+		// File f = new File("D:\\three_sale.txt");
+		// fw = new FileWriter(f, true);
+		// } catch (IOException e) {
+		// e.printStackTrace();
+		// }
+		// PrintWriter pw = new PrintWriter(fw);
+		// pw.println(orderId+"#"+firstUid+"-"+oldMoney.get(firstUid)+"#"+secondUid+"-"+(secondUid!=null?
+		// oldMoney.get(secondUid):""));
+		// pw.flush();
+		// try {
+		// fw.flush();
+		// pw.close();
+		// fw.close();
+		// } catch (IOException e) {
+		// e.printStackTrace();
+		// }
+		//
+		// if (1 > 0)
+		// return;
 
 		List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
 
@@ -244,12 +318,18 @@
 		if (newCommonOrderList != null)
 			for (CommonOrder co : newCommonOrderList) {
 				HongBaoOrder newHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
+				if (newHongBaoOrder == null)
+					continue;
 				HongBaoV2 hongBao = newHongBaoOrder.getHongBaoV2();
 				if (hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
 					Long uid = hongBao.getUserInfo().getId();
 					if (newMap.get(uid) == null)
 						newMap.put(uid, new BigDecimal(0));
 					newMap.put(uid, newMap.get(uid).add(hongBao.getMoney()));
+				} else {
+					Long uid = hongBao.getUserInfo().getId();
+					if (newMap.get(uid) == null)
+						newMap.put(uid, new BigDecimal(0));
 				}
 				List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBao.getId());
 				if (children != null)
@@ -518,6 +598,7 @@
 		}
 	}
 
+	@Transactional
 	public void addOrder(CommonOrder commonOrder, int type, Long firstUid, Long secondUid) throws Exception {
 		// 澧炲姞commonOrder
 		commonOrder.setCreateTime(commonOrder.getThirdCreateTime());
@@ -620,7 +701,7 @@
 			if (mianDanMoney != null)
 				hongBao.setMoney(mianDanMoney);
 
-			UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+			UserInfo user = userInfoService.getUserByIdWithMybatis(commonOrder.getUserInfo().getId());
 			hongBao.setUrank(user.getRank());
 			hongBaoV2Mapper.insertSelective(hongBao);
 			// 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
@@ -651,7 +732,10 @@
 				firstHongbao.setVersion(2);
 				firstHongbao.setState(hongBao.getState());
 
-				if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+				if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {// ||
+																		// hongBao.getState()
+																		// ==
+																		// HongBaoV2.STATE_YILINGQU
 					firstHongbao.setMoney(
 							MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
 					Calendar calendar = Calendar.getInstance();
@@ -694,7 +778,10 @@
 					secondHongbao.setType(HongBaoV2.TYPE_ERJI);
 					secondHongbao.setVersion(2);
 					secondHongbao.setState(hongBao.getState());
-					if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+					if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {// ||
+																			// hongBao.getState()
+																			// ==
+																			// HongBaoV2.STATE_YILINGQU
 						secondHongbao.setMoney(
 								MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
 						Calendar calendar = Calendar.getInstance();
@@ -751,7 +838,7 @@
 					hongBao.setState(HongBaoV2.STATE_YILINGQU);
 				}
 			}
-			UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+			UserInfo user = userInfoService.getUserByIdWithMybatis(commonOrder.getUserInfo().getId());
 			hongBao.setUrank(user.getRank());
 			hongBao.setUserInfo(user);
 			hongBaoV2Mapper.insertSelective(hongBao);
@@ -810,19 +897,484 @@
 
 	}
 
-	@Transactional
+	@Transactional(propagation = Propagation.REQUIRED)
 	private void deleteByCommonOrderId(Long commonOrderId) {
-		HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderId);
+		commonOrderMapper.deleteByPrimaryKey(commonOrderId);
+		HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrderId);
 		if (hongBaoOrder == null || hongBaoOrder.getHongBaoV2() == null)
 			return;
-		List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
+		List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
 		if (children != null)
 			for (HongBaoV2 hongBao : children) {
-				hongBaoV2Service.deleteByPrimaryKey(hongBao.getId());
+				hongBaoV2Mapper.deleteByPrimaryKey(hongBao.getId());
 			}
-		hongBaoV2Service.deleteByPrimaryKey(hongBaoOrder.getHongBaoV2().getId());
-		hongBaoOrderService.deleteByPrimaryKey(hongBaoOrder.getId());
-		commonOrderService.deleteByPrimaryKey(commonOrderId);
+		hongBaoV2Mapper.deleteByPrimaryKey(hongBaoOrder.getHongBaoV2().getId());
+		hongBaoOrderMapper.deleteByPrimaryKey(hongBaoOrder.getId());
+
+	}
+
+	@Transactional
+	@Override
+	public void testTransaction() {
+		hongBaoV2Mapper.selectByPrimaryKey(1L);
+	}
+
+	private static Map<String, OrderInfo> orderInfoMap;
+
+	private OrderInfo getOrderInfo(String orderId) {
+		if (orderInfoMap == null) {
+			orderInfoMap = new HashMap<>();
+			Scanner scanner = null;
+			try {
+				scanner = new Scanner(new File("C:\\Users\\Administrator\\Desktop\\璁㈠崟闆嗕腑鎺掓煡\\three_sale.txt"));
+				while (scanner.hasNext()) {
+					OrderInfo orderInfo = new OrderInfo();
+					String info = scanner.next();
+					if (StringUtil.isNullOrEmpty(info))
+						continue;
+
+					String[] sts = info.split("#");
+					String orderid = sts[0];
+					orderInfo.setOrderId(orderid);
+					String firstUid = sts[1].split("-")[0];
+					String firstUidMoney = sts[1].split("-")[1];
+					orderInfo.setFirstUid(Long.parseLong(firstUid));
+					orderInfo.setFirstUidMoney(new BigDecimal(firstUidMoney));
+
+					String secondUid = sts[2].split("-")[0];
+					String secondUidMoney = null;
+					if (sts[2].split("-").length > 1)
+						secondUidMoney = sts[2].split("-")[1];
+					if (!StringUtil.isNullOrEmpty(secondUid))
+						orderInfo.setSecondUid(Long.parseLong(secondUid));
+					if (!StringUtil.isNullOrEmpty(secondUidMoney))
+						orderInfo.setSecondUidMoney(new BigDecimal(secondUidMoney));
+					orderInfoMap.put(orderInfo.getOrderId(), orderInfo);
+				}
+			} catch (FileNotFoundException e) {
+				e.printStackTrace();
+			}
+			scanner.close();
+		}
+
+		return orderInfoMap.get(orderId);
+	}
+
+	@Transactional
+	@Override
+	public void repireFirstAndSecondLevel(String orderId) throws Exception {
+		repireFirstShare(orderId);
+		if (1 > 0)
+			return;
+		OrderInfo info = getOrderInfo(orderId);
+		Map<Long, BigDecimal> oldMoneyMap = new HashMap<>();
+		if (info.getFirstUid() != null)
+			oldMoneyMap.put(info.getFirstUid(), info.getFirstUidMoney());
+		if (info.getSecondUid() != null)
+			oldMoneyMap.put(info.getSecondUid(), info.getSecondUidMoney());
+
+		if (info != null) {
+			List<CommonOrder> list = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+					info.getOrderId());
+			// 鏌ヨ鏄惁鏈夊瓙绾㈠寘
+			for (CommonOrder commonOrder : list) {
+				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+				if (hongBaoOrder == null)
+					continue;
+				List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
+				if (hongBaoList != null && hongBaoList.size() > 0)// 鏈夊瓙绾㈠寘灏变笉澶勭悊浜�
+					return;
+			}
+
+			for (CommonOrder commonOrder : list) {
+				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+				if (hongBaoOrder == null)
+					continue;
+				HongBaoV2 hongBao = hongBaoOrder.getHongBaoV2();
+				Long firstUid = info.getFirstUid();
+				Long secondUid = info.getSecondUid();
+				// 鍔犲叆瀛愮孩鍖�
+				UserInfo boss = null;
+				if (firstUid != null)
+					boss = userInfoService.selectByPKey(firstUid);
+
+				if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿�
+					// 鎻掑叆涓�绾у瓙绾㈠寘
+					BigDecimal firstRate = hongBaoManageService
+							.getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank());
+					if (firstRate.compareTo(new BigDecimal(0)) <= 0)
+						return;
+					HongBaoV2 firstHongbao = new HongBaoV2();
+					firstHongbao.setBeizhu("2019骞�7鏈堟壒閲忎慨鏀�");
+					firstHongbao.setUserInfo(boss);
+					firstHongbao.setUrank(boss.getRank());
+					firstHongbao.setParent(hongBao);
+					firstHongbao.setCreateTime(new Date());
+					firstHongbao.setType(HongBaoV2.TYPE_YIJI);
+					firstHongbao.setVersion(2);
+					firstHongbao.setState(hongBao.getState());
+
+					if (hongBao.getState() == HongBaoV2.STATE_KELINGQU
+							|| hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
+						firstHongbao.setMoney(
+								MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+						Calendar calendar = Calendar.getInstance();
+						calendar.setTime(commonOrder.getSettleTime());
+						calendar.add(Calendar.MONTH, 1);
+						firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+								calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+								"yyyy-M-dd")));
+						if (firstHongbao.getPreGetTime().getTime() < System.currentTimeMillis()) {
+							firstHongbao.setGetTime(firstHongbao.getPreGetTime());
+							firstHongbao.setState(HongBaoV2.STATE_YILINGQU);
+						}
+					} else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+						firstHongbao.setMoney(
+								MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+					}
+					// 杩斿埄涓�0鐨勪笉閫氱煡
+					if (firstHongbao.getMoney() == null || firstHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
+						continue;
+
+					hongBaoV2Mapper.insertSelective(firstHongbao);
+
+					// 鎻掑叆浜岀骇瀛愮孩鍖�
+					if (secondUid == null)
+						boss = null;
+					else
+						boss = userInfoService.selectByPKey(secondUid);
+
+					if (boss != null) {// 浜岀骇BOSS瀛樺湪
+						BigDecimal secondRate = hongBaoManageService
+								.getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank());
+						if (secondRate.compareTo(new BigDecimal(0)) <= 0)
+							return;
+						HongBaoV2 secondHongbao = new HongBaoV2();
+						secondHongbao.setBeizhu("2019骞�7鏈堟壒閲忎慨鏀�");
+						secondHongbao.setUserInfo(boss);
+						secondHongbao.setUrank(boss.getRank());
+						secondHongbao.setParent(hongBao);
+						secondHongbao.setCreateTime(new Date());
+						secondHongbao.setType(HongBaoV2.TYPE_ERJI);
+						secondHongbao.setVersion(2);
+						secondHongbao.setState(hongBao.getState());
+						if (hongBao.getState() == HongBaoV2.STATE_KELINGQU
+								|| hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
+							secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+									secondRate.divide(new BigDecimal(100))));
+							Calendar calendar = Calendar.getInstance();
+							calendar.setTime(commonOrder.getSettleTime());
+							calendar.add(Calendar.MONTH, 1);
+							secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+									calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+									"yyyy-M-dd")));
+							if (secondHongbao.getPreGetTime().getTime() < System.currentTimeMillis()) {
+								secondHongbao.setGetTime(secondHongbao.getPreGetTime());
+								secondHongbao.setState(HongBaoV2.STATE_YILINGQU);
+							}
+
+						} else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+							secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+									secondRate.divide(new BigDecimal(100))));
+						}
+
+						// 杩斿埄涓�0鐨勪笉缁熻
+						if (secondHongbao.getMoney() == null
+								|| secondHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
+							continue;
+						hongBaoV2Mapper.insertSelective(secondHongbao);
+					}
+
+				}
+			}
+		}
+
+		// 缁熻淇敼鍚庣殑璧勯噾
+		List<CommonOrder> newCommonOrderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+				orderId);
+		Map<Long, BigDecimal> newMap = new HashMap<>();
+		if (newCommonOrderList != null)
+			for (CommonOrder co : newCommonOrderList) {
+				HongBaoOrder newHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
+				if (newHongBaoOrder == null)
+					continue;
+				HongBaoV2 hongBao = newHongBaoOrder.getHongBaoV2();
+				List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBao.getId());
+				if (children != null)
+					for (HongBaoV2 child : children) {
+						if (newMap.get(child.getUserInfo().getId()) == null)
+							newMap.put(child.getUserInfo().getId(), new BigDecimal(0));
+						if (child.getState() == HongBaoV2.STATE_YILINGQU)
+							newMap.put(child.getUserInfo().getId(),
+									newMap.get(child.getUserInfo().getId()).add(child.getMoney()));
+					}
+			}
+
+		for (Iterator<Long> its = newMap.keySet().iterator(); its.hasNext();) {
+			Long uid = its.next();
+			BigDecimal beforeGetMoney = oldMoneyMap.get(uid);
+			BigDecimal afterGetMoney = newMap.get(uid);
+			OrderRepairHistory history = new OrderRepairHistory();
+			history.setAfterGetMoney(afterGetMoney);
+			history.setBeforeGetMoney(beforeGetMoney);
+			history.setOrderId(orderId);
+			history.setUid(uid);
+			orderRepairHistoryService.addOrderRepairHistory(history);
+		}
+
+	}
+
+	private void repireFirstShare(String orderId) throws Exception {
+		OrderInfo info = getOrderInfo(orderId);
+		Long firstUid = info.getFirstUid();
+		Map<Long, BigDecimal> oldMoneyMap = new HashMap<>();
+		if (info.getFirstUid() != null)
+			oldMoneyMap.put(info.getFirstUid(), info.getFirstUidMoney());
+		if (info.getSecondUid() != null)
+			oldMoneyMap.put(info.getSecondUid(), info.getSecondUidMoney());
+
+		if (info != null) {
+			List<CommonOrder> list = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+					info.getOrderId());
+			// 鏌ヨ鏄惁鏈夊瓙绾㈠寘
+			for (CommonOrder commonOrder : list) {
+				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+				if (hongBaoOrder == null)
+					continue;
+				List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
+				if (hongBaoList != null && hongBaoList.size() > 0)// 鏈夊瓙绾㈠寘灏变笉澶勭悊浜�
+					return;
+			}
+
+			for (CommonOrder commonOrder : list) {
+				if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
+					continue;
+				// 鍒嗕韩璧�
+
+				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+				if (hongBaoOrder == null)
+					continue;
+
+				HongBaoV2 hongBao = hongBaoOrder.getHongBaoV2();
+				// 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋
+				if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17",
+						"yyyy-MM-dd")) {
+					UserInfo boss = null;
+					if (firstUid != null)
+						boss = userInfoService.selectByPKey(firstUid);
+					if (boss != null) {
+						BigDecimal firstLevelRate = hongBaoManageService.getFirstShareRate(1,
+								commonOrder.getThirdCreateTime().getTime());
+						HongBaoV2 child = new HongBaoV2();
+						child.setBeizhu("2019骞�7鏈堟壒閲忎慨鏀�");
+						child.setParent(hongBao);
+						child.setType(HongBaoV2.TYPE_SHARE_YIJI);
+						if (commonOrder.getState() == CommonOrder.STATE_FK) {
+							child.setState(HongBaoV2.STATE_BUKELINGQU);
+							child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
+									firstLevelRate.divide(new BigDecimal(100))));
+						} else if (commonOrder.getState() == CommonOrder.STATE_JS) {
+							child.setState(HongBaoV2.STATE_KELINGQU);
+							child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
+									firstLevelRate.divide(new BigDecimal(100))));
+							Calendar calendar = Calendar.getInstance();
+							calendar.setTime(commonOrder.getSettleTime());
+							calendar.add(Calendar.MONTH, 1);
+							child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+									calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+									"yyyy-M-dd")));
+
+							if (child.getPreGetTime().getTime() < System.currentTimeMillis()) {
+								child.setGetTime(child.getPreGetTime());
+								child.setState(HongBaoV2.STATE_YILINGQU);
+							}
+
+						}
+						child.setUserInfo(boss);
+						child.setUrank(boss.getRank());
+						child.setVersion(2);
+						child.setCreateTime(new Date());
+						hongBaoV2Mapper.insertSelective(child);
+					}
+				}
+			}
+
+		}
+
+		// 缁熻淇敼鍚庣殑璧勯噾
+		List<CommonOrder> newCommonOrderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+				orderId);
+		Map<Long, BigDecimal> newMap = new HashMap<>();
+		if (newCommonOrderList != null)
+			for (CommonOrder co : newCommonOrderList) {
+				HongBaoOrder newHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
+				if (newHongBaoOrder == null)
+					continue;
+				HongBaoV2 hongBao = newHongBaoOrder.getHongBaoV2();
+				List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBao.getId());
+				if (children != null)
+					for (HongBaoV2 child : children) {
+						if (newMap.get(child.getUserInfo().getId()) == null)
+							newMap.put(child.getUserInfo().getId(), new BigDecimal(0));
+						if (child.getState() == HongBaoV2.STATE_YILINGQU)
+							newMap.put(child.getUserInfo().getId(),
+									newMap.get(child.getUserInfo().getId()).add(child.getMoney()));
+					}
+			}
+
+		for (Iterator<Long> its = newMap.keySet().iterator(); its.hasNext();) {
+			Long uid = its.next();
+			BigDecimal beforeGetMoney = oldMoneyMap.get(uid);
+			BigDecimal afterGetMoney = newMap.get(uid);
+			OrderRepairHistory history = new OrderRepairHistory();
+			history.setAfterGetMoney(afterGetMoney);
+			history.setBeforeGetMoney(beforeGetMoney);
+			history.setOrderId(orderId);
+			history.setUid(uid);
+			orderRepairHistoryService.addOrderRepairHistory(history);
+		}
+
+	}
+
+	class OrderInfo {
+		private String orderId;
+		private Long firstUid;
+		private BigDecimal firstUidMoney;
+		private Long secondUid;
+		private BigDecimal secondUidMoney;
+
+		public String getOrderId() {
+			return orderId;
+		}
+
+		public void setOrderId(String orderId) {
+			this.orderId = orderId;
+		}
+
+		public Long getFirstUid() {
+			return firstUid;
+		}
+
+		public void setFirstUid(Long firstUid) {
+			this.firstUid = firstUid;
+		}
+
+		public BigDecimal getFirstUidMoney() {
+			return firstUidMoney;
+		}
+
+		public void setFirstUidMoney(BigDecimal firstUidMoney) {
+			this.firstUidMoney = firstUidMoney;
+		}
+
+		public Long getSecondUid() {
+			return secondUid;
+		}
+
+		public void setSecondUid(Long secondUid) {
+			this.secondUid = secondUid;
+		}
+
+		public BigDecimal getSecondUidMoney() {
+			return secondUidMoney;
+		}
+
+		public void setSecondUidMoney(BigDecimal secondUidMoney) {
+			this.secondUidMoney = secondUidMoney;
+		}
+	}
+
+	@Override
+	public List<OrderRepairHistory> listByUid(Long uid) {
+
+		return orderRepairHistoryMapper.listByUid(uid);
+	}
+
+	@Transactional
+	@Override
+	public void doMoney(Long uid) {
+		List<OrderRepairHistory> historyList = listByUid(uid);
+		for (int i = 0; i < historyList.size(); i++) {
+			if (historyList.get(i).getCreateTime().getTime() < TimeUtil.convertToTimeTemp("2019-07-15 17:00:38",
+					"yyyy-MM-dd HH:mm:ss")) {
+				historyList.remove(i);
+				i--;
+			}
+
+		}
+
+		BigDecimal money = new BigDecimal(0);
+		String orders = "";
+		for (OrderRepairHistory history : historyList) {
+			money = money.add(history.getAfterGetMoney().subtract(history.getBeforeGetMoney()));
+			orders += history.getOrderId() + ",";
+		}
+		if (money.compareTo(new BigDecimal(0)) > 0)// 璧勯噾闇�瑕佸鍔�
+		{
+			try {
+				UserMoneyDetail detail = UserMoneyDetailFactory.createSystemEqualize("璁㈠崟缁熻寮傚父淇", money,
+						new UserInfo(uid));
+				// 绯荤粺琛ラ綈
+				// 鍔犺祫閲�
+				userMoneyService.addUserMoney(uid, money, detail);
+				pushMsg(uid, "鍏充簬杩戞湡璁㈠崟涓庤祫閲戝紓甯哥殑鎺掓煡涓庝慨澶嶇粨鏋滈�氱煡",
+						"灏婃暚鐨勭敤鎴凤紝缁忎粩缁嗘牳瀵规偍璐︽埛涓殑璁㈠崟锛屽彂鐜版偍璐︽埛涓湁鏈粺璁℃垨閿欒缁熻鐨勮鍗曪紝鎴戜滑宸茬粡涓烘偍琛ラ綈璧勯噾锛屽搴旇祫閲戝凡缁忓瓨鍏ユ偍鐨勮处鎴蜂綑棰濅腑锛屾暚璇锋煡鏀舵敞鏌ユ敹銆傛劅璋俊浠伙紝杩斿埄鍒窤pp缁堝皢鎴愪负鎮ㄦ渶淇′换鐨勮喘鐗╃渷閽卞姪鎵嬨��");
+				userMoneyMsgNotificationService.systemEqualize(uid, "璁㈠崟缁熻寮傚父淇", money, userInfoService.getBalance(uid));
+			} catch (UserMoneyDetailException e) {
+				e.printStackTrace();
+			}
+
+		} else {// 璧勯噾闇�瑕佸噺灏�,涓嶈鎵i挶
+			pushMsg(uid, "鍏充簬杩戞湡璁㈠崟涓庤祫閲戝紓甯哥殑鎺掓煡涓庝慨澶嶇粨鏋滈�氱煡",
+					"灏婃暚鐨勭敤鎴凤紝缁忎粩缁嗘牳瀵规偍璐︽埛涓殑璁㈠崟锛屽彂鐜版偍璐︽埛涓湁閿欒缁熻鐨勮鍗曪紝鎴戜滑宸茬粡涓烘偍鎭㈠姝e父锛屾墍娑夊強璁㈠崟澶氱粺璁″嚭鏉ョ殑璧勯噾锛屼笉浼氳鎵i櫎锛屽嵆鎮ㄨ处鎴蜂腑鐨勮祫閲戝皢淇濇寔涓嶅彉锛屽凡鎻愮幇鐨勮祫閲戯紝涔熶笉浼氭敹鍥烇紝鏁鐭ユ檽銆傛劅璋俊浠伙紝杩斿埄鍒窤pp缁堝皢鎴愪负鎮ㄦ渶淇′换鐨勮喘鐗╃渷閽卞姪鎵嬨��");
+			// userMoneyMsgNotificationService.systemEqualize(uid, "璁㈠崟缁熻寮傚父淇",
+			// money, userInfoService.getBalance(uid));
+			// 鍔犲叆鎻愮幇瀹℃牳寮傚父淇濇姢涓�
+			ExtractCheckCompensate check = new ExtractCheckCompensate();
+			check.setBeiZhu("7鏈堣鍗曞紓甯哥郴缁熷鐞�:" + orders);
+			check.setCreateTime(new Date());
+			check.setMoney(money);
+			check.setUserInfo(new UserInfo(uid));
+			check.setUpdateTime(new Date());
+			extractCheckCompensateMapper.insertSelective(check);
+		}
+	}
+
+	private void pushMsg(Long uid, String title, String content) {
+
+		PushInfo pushInfo = new PushInfo();
+		pushInfo.setTitle(title);
+		pushInfo.setContent(content);
+		pushInfo.setUids(uid + "");
+		JSONObject jsonData = new JSONObject();
+		jsonData.put("url", "");
+		jsonData.put("ios", "鍏ㄦ帹");
+		jsonData.put("android", "鍏ㄦ帹");
+		pushInfo.setJsonData(jsonData.toString());
+		pushInfo.setType(PushTypeEnum.ZNX);
+		pushInfo.setArrayAndroid("[鍏ㄦ帹]");
+		pushInfo.setArrayIOS("[鍏ㄦ帹]");
+
+		pushInfo.setCreateTime(new Date());
+
+		try {
+			pushInfoService.save(pushInfo);
+		} catch (PushInfoException e) {
+			e.printStackTrace();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		try {
+			pushInfoService.handPush(pushInfo.getId());
+		} catch (PushInfoException e) {
+			e.printStackTrace();
+		} catch (PushException e) {
+			e.printStackTrace();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
 	}
 
 }

--
Gitblit v1.8.0