From 8a7a7e79b63d91d1865bdf2ec38d4e99d2670d69 Mon Sep 17 00:00:00 2001
From: yujian <yujian@123.com>
Date: 星期四, 11 七月 2019 18:47:27 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java |  827 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 827 insertions(+), 0 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
new file mode 100644
index 0000000..798ef14
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java
@@ -0,0 +1,827 @@
+package com.yeshi.fanli.service.impl.order;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
+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.entity.bus.user.HongBaoV2;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.goods.CommonGoods;
+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.taobao.TaoBaoGoodsBrief;
+import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
+import com.yeshi.fanli.exception.HongBaoException;
+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.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.taobao.TaoBaoOrderService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+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.TimeUtil;
+import com.yeshi.fanli.util.factory.CommonOrderGoodsFactory;
+import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
+import com.yeshi.fanli.util.taobao.TaoBaoUtil;
+import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
+
+@Service
+public class OrderRepairServiceImpl implements OrderRepairService {
+
+	@Resource
+	private TaoBaoOrderService taoBaoOrderService;
+
+	@Resource
+	private CommonOrderService commonOrderService;
+
+	@Resource
+	private HongBaoOrderService hongBaoOrderService;
+
+	@Resource
+	private HongBaoV2Service hongBaoV2Service;
+
+	@Resource
+	private CommonOrderGoodsMapper commonOrderGoodsMapper;
+
+	@Resource
+	private CommonGoodsService commonGoodsService;
+
+	@Resource
+	private HongBaoManageService hongBaoManageService;
+
+	@Resource
+	private UserSystemCouponRecordService userSystemCouponRecordService;
+
+	@Resource
+	private HongBaoV2Mapper hongBaoV2Mapper;
+
+	@Resource
+	private UserSystemCouponService userSystemCouponService;
+
+	@Resource
+	private ShareGoodsActivityOrderService shareGoodsActivityOrderService;
+
+	@Resource
+	private CommonOrderMapper commonOrderMapper;
+
+	@Resource
+	private CommonOrderTradeIdMapMapper commonOrderTradeIdMapMapper;
+
+	@Resource
+	private UserInfoService userInfoService;
+
+	@Resource
+	private HongBaoOrderMapper hongBaoOrderMapper;
+
+	@Resource
+	private OrderRepairHistoryService orderRepairHistoryService;
+
+	@Override
+	public void repairOrder(String orderId) {
+		// 姣旇緝CommonOrder涓嶵aoBaoOrder鐨勯浼版敹鐩�
+		List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
+		// 缁熻
+		BigDecimal sumMoney = new BigDecimal("0");
+		for (TaoBaoOrder order : orderList) {
+			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);
+		BigDecimal commonSumMoney = new BigDecimal("0");
+		for (CommonOrder commonOrder : commonOrderList) {
+			commonSumMoney = commonSumMoney.add(commonOrder.geteIncome());
+		}
+
+		try {
+			processLessFanOrder(orderId);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		// if (sumMoney.compareTo(commonSumMoney) > 0) {
+		// // 灏戣繑浜�
+		//
+		// } else {
+		//
+		// }
+
+	}
+
+	@Transactional
+	private void processLessFanOrder(String orderId) throws Exception {
+		List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+				orderId);
+		// 纭畾鏄嚜璐繕鏄垎浜禋
+		if (commonOrderList.size() <= 0)
+			return;
+		HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderList.get(0).getId());
+		// 缁熻鍘熸潵鐨勪笂涓嬬骇鍏崇郴鍙婅繑鍒╃殑璧勯噾
+		Map<Long, BigDecimal> oldMoney = new HashMap<>();
+		Long firstUid = null;
+		Long secondUid = null;
+		Long mainUid = null;
+		// 缁熻杩斿埄鐨勮祫閲�
+		for (CommonOrder co : commonOrderList) {
+			HongBaoOrder tempHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
+			if (tempHongBaoOrder == null || tempHongBaoOrder.getHongBaoV2() == null)
+				continue;
+			hongBaoOrder = tempHongBaoOrder;
+
+			mainUid = hongBaoOrder.getHongBaoV2().getUserInfo().getId();
+			if (oldMoney.get(mainUid) == null)
+				oldMoney.put(mainUid, new BigDecimal(0));
+			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());
+			for (HongBaoV2 child : childrenList) {
+				if (child.getType() == HongBaoV2.TYPE_YIJI || child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
+					firstUid = child.getUserInfo().getId();
+					if (oldMoney.get(firstUid) == null)
+						oldMoney.put(firstUid, new BigDecimal(0));
+					if (child.getState() == HongBaoV2.STATE_YILINGQU)
+						oldMoney.put(firstUid, oldMoney.get(firstUid).add(child.getMoney()));
+
+				} else if (child.getType() == HongBaoV2.TYPE_ERJI || child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {
+					secondUid = child.getUserInfo().getId();
+					if (oldMoney.get(secondUid) == null)
+						oldMoney.put(secondUid, new BigDecimal(0));
+					if (child.getState() == HongBaoV2.STATE_YILINGQU)
+						oldMoney.put(firstUid, oldMoney.get(secondUid).add(child.getMoney()));
+				}
+			}
+		}
+
+		List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
+
+		// 鏍规嵁浜ゆ槗ID鏌ヨ
+		// 鍏堝垹闄ゆ墍鏈変俊鎭�
+		List<CommonOrder> commonOrderOldList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
+				orderId);
+		if (commonOrderOldList != null)
+			for (CommonOrder co : commonOrderOldList) {
+				deleteByCommonOrderId(co.getId());
+			}
+
+		// 鐒跺悗鍐嶅鍔�
+
+		int invalidCount = 0;
+		for (TaoBaoOrder tb : taoBaoOrderList) {
+			if ("璁㈠崟澶辨晥".equalsIgnoreCase(tb.getOrderState())) {
+				invalidCount++;
+			}
+		}
+
+		// 鑾峰彇鏁翠綋璁㈠崟鐨勭姸鎬�
+		int wholeOrderState = 0;
+		if (taoBaoOrderList.size() == invalidCount)
+			wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_SHIXIAO;
+		else if (invalidCount == 0)
+			wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_YOUXIAO;
+		else
+			wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO;
+
+		for (TaoBaoOrder taoBaoOrder : taoBaoOrderList) {
+			CommonOrder commonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
+			commonOrder.setStateWholeOrder(wholeOrderState);
+			commonOrder.setCommonOrderGoods(getCommonOrderGoods(taoBaoOrder.getAuctionId()));
+			commonOrder.setUserInfo(new UserInfo(mainUid));
+			addOrder(commonOrder, hongBaoOrder.getHongBaoV2().getType(), firstUid, secondUid);
+			// } else {// 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
+			// Long commonOrderId = oldCommonOrder.getId();
+			// List<CommonOrder> list =
+			// commonOrderService.listBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
+			// tradeId);
+			// if (list.size() > 1)// 鍒犻櫎澶氫綑鐨則radeId
+			// {
+			// for (CommonOrder co : list) {
+			// if (co.getId().longValue() != commonOrderId)
+			// deleteByCommonOrderId(co.getId());
+			// }
+			// }
+			// // 淇敼鍘熸潵鐨勪俊鎭�
+			// updateOrderInfo(taoBaoOrder, commonOrderId);
+			// }
+		}
+
+		// 缁熻淇敼鍚庣殑璧勯噾
+		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());
+				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()));
+				}
+				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 = oldMoney.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 CommonOrderGoods getCommonOrderGoods(Long auctionId) {
+		List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper.listByGoodsIdAndGoodsType(auctionId + "",
+				Constant.SOURCE_TYPE_TAOBAO);
+		CommonOrderGoods cog = null;
+		if (commonGoodsList.size() <= 0)// 涓嶅瓨鍦ㄥ氨鎻掑叆鍟嗗搧
+		{
+			TaoBaoGoodsBrief taoBaoGoods = null;
+			try {
+				taoBaoGoods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
+			} catch (TaobaoGoodsDownException e) {
+				e.printStackTrace();
+				LogHelper.errorDetailInfo(e, "AUCTIONID:" + auctionId, "");
+				try {
+					taoBaoGoods = TaoBaoUtil.getSimpleGoodsBrief(auctionId);
+				} catch (Exception e1) {
+					CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(auctionId,
+							Constant.SOURCE_TYPE_TAOBAO);
+					if (commonGoods != null)
+						taoBaoGoods = TaoBaoUtil.convert(commonGoods);
+				}
+			}
+			if (taoBaoGoods != null) {
+				cog = CommonOrderGoodsFactory.create(taoBaoGoods);
+			}
+			cog.setCreateTime(new Date());
+			cog.setUpdateTime(new Date());
+			commonOrderGoodsMapper.insertSelective(cog);
+
+			return cog;
+		} else
+			return commonGoodsList.get(0);
+
+	}
+
+	// 淇敼璁㈠崟淇℃伅
+	@Transactional
+	private void updateOrderInfo(TaoBaoOrder taoBaoOrder, Long commonOrderId) throws Exception {
+		HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderId);
+		CommonOrder newCommonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
+		List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper
+				.listByGoodsIdAndGoodsType(taoBaoOrder.getAuctionId() + "", newCommonOrder.getSourceType());
+		CommonOrderGoods cog = null;
+		if (commonGoodsList.size() <= 0)// 涓嶅瓨鍦ㄥ氨鎻掑叆鍟嗗搧
+		{
+			TaoBaoGoodsBrief taoBaoGoods = null;
+			try {
+				taoBaoGoods = TaoKeApiUtil.getSimpleGoodsInfo(taoBaoOrder.getAuctionId());
+			} catch (TaobaoGoodsDownException e) {
+				e.printStackTrace();
+				LogHelper.errorDetailInfo(e, "AUCTIONID:" + taoBaoOrder.getAuctionId(), "");
+				try {
+					taoBaoGoods = TaoBaoUtil.getSimpleGoodsBrief(taoBaoOrder.getAuctionId());
+				} catch (Exception e1) {
+					CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(
+							taoBaoOrder.getAuctionId(), Constant.SOURCE_TYPE_TAOBAO);
+					if (commonGoods != null)
+						taoBaoGoods = TaoBaoUtil.convert(commonGoods);
+				}
+			}
+			if (taoBaoGoods != null) {
+				cog = CommonOrderGoodsFactory.create(taoBaoGoods);
+			}
+			cog.setCreateTime(new Date());
+			cog.setUpdateTime(new Date());
+			commonOrderGoodsMapper.insertSelective(cog);
+		}
+
+		newCommonOrder.setCommonOrderGoods(cog);
+		newCommonOrder.setId(commonOrderId);
+		newCommonOrder.setCreateTime(null);
+		newCommonOrder.setUpdateTime(new Date());
+		commonOrderService.updateByPrimaryKeySelective(newCommonOrder);
+		// 鏇存柊涓荤孩鍖呬俊鎭�
+		CommonOrder commonOrder = commonOrderService.selectByPrimaryKey(newCommonOrder.getId());
+
+		if (hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_ZIGOU) {
+			BigDecimal fanliRate = hongBaoManageService.getFanLiRate(commonOrder.getCreateTime().getTime());
+			// 鍏嶅崟澶勭悊
+			boolean mianDan = false;
+			List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+					commonOrder.getOrderNo());
+			if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
+				BigDecimal payMent = commonOrder.getPayment();
+				if (commonOrder.getState() == CommonOrder.STATE_JS)
+					payMent = commonOrder.getSettlement();
+				if (payMent.compareTo(new BigDecimal(10)) < 0) {
+					mianDan = userSystemCouponRecordService.isSuccessMianDan(commonOrder.getOrderNo());
+				}
+			}
+
+			HongBaoV2 hongBao = new HongBaoV2(hongBaoOrder.getHongBaoV2().getId());
+			hongBao.setUpdateTime(new Date());
+			// 鏇存敼鐘舵�佷笌璧勯噾
+			if (commonOrder.getState() == CommonOrder.STATE_FK) {
+				hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+				if (mianDan)
+					hongBao.setMoney(commonOrder.getPayment());
+			} else if (commonOrder.getState() == CommonOrder.STATE_JS) {
+				if (hongBaoOrder.getHongBaoV2().getPreGetTime().getTime() < System.currentTimeMillis())
+					hongBao.setState(HongBaoV2.STATE_YILINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+				hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
+				if (mianDan)
+					hongBao.setMoney(commonOrder.getSettlement().compareTo(commonOrder.getPayment()) <= 0
+							? commonOrder.getSettlement() : commonOrder.getPayment());// 杩斿埄缁撶畻涓庝粯娆捐緝灏忕殑閲戦
+			} else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+				hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+				hongBao.setMoney(new BigDecimal(0));
+				if (mianDan) {
+					try {
+						userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo());
+					} catch (Exception e) {
+						e.printStackTrace();
+						throw new HongBaoException(12, "鍏嶅崟鍒搁��娆惧嚭閿�");
+					}
+				}
+			}
+			hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
+
+			// 鏇存柊瀛愮孩鍖呬俊鎭�
+			// 鑾峰彇瀛愮孩鍖�
+			List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
+			if (children != null && children.size() > 0)
+				for (HongBaoV2 child : children) {
+					HongBaoV2 childUpdate = new HongBaoV2(child.getId());
+					childUpdate.setState(hongBao.getState());
+					childUpdate.setUpdateTime(new Date());
+					BigDecimal rate = null;
+					if (child.getType() == HongBaoV2.TYPE_YIJI) {// 涓�绾у垎浜禋
+						rate = hongBaoManageService.getFirstInviteRate(child.getUrank(),
+								commonOrder.getCreateTime().getTime());
+					} else if (child.getType() == HongBaoV2.TYPE_ERJI) {// 浜岀骇鍒嗕韩璧�
+						rate = hongBaoManageService.getSecondInviteRate(child.getUrank(),
+								commonOrder.getCreateTime().getTime());
+					}
+
+					// 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
+					if (hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
+						childUpdate.setMoney(
+								MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+						Calendar calendar = Calendar.getInstance();
+						calendar.setTime(commonOrder.getSettleTime());
+						calendar.add(Calendar.MONTH, 1);
+						childUpdate.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+								calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+								"yyyy-M-dd")));
+
+						if (child.getPreGetTime().getTime() < System.currentTimeMillis()) {
+							childUpdate.setState(HongBaoV2.STATE_YILINGQU);
+							childUpdate.setGetTime(child.getGetTime());
+						}
+
+					} else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+						childUpdate.setMoney(
+								MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+					}
+					hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
+				}
+		} else if (hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) {
+
+			BigDecimal fanliRate = hongBaoManageService.getShareRate(commonOrder.getCreateTime().getTime());
+			List<ShareGoodsActivityOrder> list = shareGoodsActivityOrderService
+					.listByOrderIdAndUid(commonOrder.getUserInfo().getId(), commonOrder.getOrderNo());
+			if (list != null && list.size() > 0) {
+				fanliRate = list.get(0).getShareRate();
+			}
+
+			HongBaoV2 hongBao = new HongBaoV2(hongBaoOrder.getHongBaoV2().getId());
+			hongBao.setUpdateTime(new Date());
+			// 鏇存敼鐘舵�佷笌璧勯噾
+			if (commonOrder.getState() == CommonOrder.STATE_FK) {
+				hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+			} else if (commonOrder.getState() == CommonOrder.STATE_JS) {
+				hongBao.setState(HongBaoV2.STATE_YILINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(commonOrder.getSettleTime());
+				calendar.add(Calendar.MONTH, 1);
+				if (hongBaoOrder.getHongBaoV2().getGetTime() == null) {
+					hongBao.setGetTime(hongBaoOrder.getHongBaoV2().getPreGetTime());
+				}
+
+			} else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+				hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+				hongBao.setMoney(new BigDecimal(0));
+			}
+			hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
+
+			// 鑾峰彇瀛愮孩鍖�
+			List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
+			if (children != null)
+				for (HongBaoV2 child : children) {
+					HongBaoV2 childUpdate = new HongBaoV2(child.getId());
+					// 缁熶竴璁剧疆鐘舵��
+					childUpdate.setState(hongBao.getState());
+					childUpdate.setUpdateTime(new Date());
+					BigDecimal rate = null;
+					if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 涓�绾у垎浜禋
+						rate = hongBaoManageService.getFirstShareRate(1, commonOrder.getCreateTime().getTime());
+					} else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 浜岀骇鍒嗕韩璧�
+						rate = hongBaoManageService.getSecondShareRate(1, commonOrder.getCreateTime().getTime());
+					}
+
+					// 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
+					if (CommonOrder.STATE_JS == commonOrder.getState()) {
+						childUpdate.setMoney(
+								MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+						if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
+								"yyyy-MM-dd"))
+							childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
+									rate.divide(new BigDecimal(100))));
+
+						Calendar calendar = Calendar.getInstance();
+						calendar.setTime(commonOrder.getSettleTime());
+						calendar.add(Calendar.MONTH, 1);
+						childUpdate.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+								calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+								"yyyy-M-dd")));
+						if (child.getGetTime() == null) {
+							childUpdate.setGetTime(child.getPreGetTime());
+						}
+
+					} else if (CommonOrder.STATE_FK == commonOrder.getState()) {
+						if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
+								"yyyy-MM-dd"))
+							childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
+									rate.divide(new BigDecimal(100))));
+						else
+							childUpdate.setMoney(
+									MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+					}
+					hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
+				}
+		}
+	}
+
+	public void addOrder(CommonOrder commonOrder, int type, Long firstUid, Long secondUid) throws Exception {
+		// 澧炲姞commonOrder
+		commonOrder.setCreateTime(commonOrder.getThirdCreateTime());
+		// 涓嶅瓨鍦ㄥ氨鎻掑叆锛屽瓨鍦ㄥ氨涓嶇
+		CommonOrderGoods goods = commonOrder.getCommonOrderGoods();
+
+		// 涔嬪墠涓嶅瓨鍦ㄤ簬鏁版嵁搴�
+		if (commonOrder.getCommonOrderGoods().getId() == null) {
+			List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper
+					.listByGoodsIdAndGoodsType(goods.getGoodsId(), goods.getGoodsType());
+
+			if (commonGoodsList == null || commonGoodsList.size() < 1) {// 涓嶅瓨鍦�
+				commonOrderGoodsMapper.insertSelective(goods);
+			} else {// 瀛樺湪
+				goods = commonGoodsList.get(0);
+			}
+			if (goods.getId() == null)
+				return;
+			commonOrder.setCommonOrderGoods(goods);
+		}
+
+		CommonOrder oldCommonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(commonOrder.getSourceType(),
+				commonOrder.getTradeId());
+		if (oldCommonOrder == null)// 鏂板
+		{
+			commonOrder.setUpdateTime(new Date());
+			commonOrderMapper.insertSelective(commonOrder);
+			try {
+				// 鎻掑叆鏄犲皠锛屼繚璇佷氦鏄揑D鐨勫畬鏁存��
+				commonOrderTradeIdMapMapper.insertSelective(new CommonOrderTradeIdMap(commonOrder.getId(),
+						commonOrder.getTradeId(), new Date(), commonOrder.getSourceType()));
+			} catch (Exception e) {
+
+			}
+		}
+
+		// 娣诲姞绾㈠寘
+		if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
+			BigDecimal fanliRate = hongBaoManageService.getFanLiRate(commonOrder.getCreateTime().getTime());
+			// 鏌ヨ鏄惁鏈夊厤鍗曡鍒�
+			BigDecimal mianDanMoney = null;
+			if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_FK) {
+				List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+						commonOrder.getOrderNo());
+				if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
+					BigDecimal payMent = commonOrder.getPayment();
+					if (commonOrder.getState() == CommonOrder.STATE_JS)
+						payMent = commonOrder.getSettlement();
+
+					goods = commonOrderGoodsMapper.selectByPrimaryKey(commonOrder.getCommonOrderGoods().getId());
+					if (goods != null) {
+
+						try {
+							if (userSystemCouponService.updateCouponRecordUsed(commonOrder.getUserInfo().getId(),
+									commonOrder.getOrderNo(), payMent, Long.parseLong(goods.getGoodsId())))
+								mianDanMoney = payMent;
+						} catch (NumberFormatException e) {
+							throw new HongBaoException(10, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
+						} catch (Exception e) {
+							e.printStackTrace();
+							throw new HongBaoException(11, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
+						}
+					}
+				}
+			} else if (commonOrder.getState() == CommonOrder.STATE_SX) {// 璁剧疆鍏嶅崟鍒稿け鏁�
+				try {
+					userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo());
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+
+			HongBaoV2 hongBao = new HongBaoV2();
+			hongBao.setBeizhu("2019骞�7鏈堟壒閲忎慨鏀�");
+			hongBao.setUserInfo(commonOrder.getUserInfo());
+			hongBao.setCreateTime(new Date());
+			hongBao.setType(HongBaoV2.TYPE_ZIGOU);
+			hongBao.setVersion(2);
+			if (commonOrder.getState() == CommonOrder.STATE_FK) {
+				hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+			} else if (commonOrder.getState() == CommonOrder.STATE_JS) {
+				hongBao.setState(HongBaoV2.STATE_KELINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+				hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
+
+				if (hongBao.getPreGetTime().getTime() < System.currentTimeMillis()) {
+					hongBao.setState(HongBaoV2.STATE_YILINGQU);
+					hongBao.setGetTime(hongBao.getPreGetTime());
+				}
+			} else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+				hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+				hongBao.setMoney(new BigDecimal(0));
+			} else {
+				throw new HongBaoException(3, "缁存潈璁㈠崟涓嶈兘鍒涘缓绾㈠寘");
+			}
+
+			if (mianDanMoney != null)
+				hongBao.setMoney(mianDanMoney);
+
+			UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+			hongBao.setUrank(user.getRank());
+			hongBaoV2Mapper.insertSelective(hongBao);
+			// 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
+			HongBaoOrder hongBaoOrder = new HongBaoOrder();
+			hongBaoOrder.setCommonOrder(commonOrder);
+			hongBaoOrder.setCreateTime(new Date());
+			hongBaoOrder.setHongBaoV2(hongBao);
+			hongBaoOrderMapper.insertSelective(hongBaoOrder);
+
+			UserInfo boss = null;
+			if (firstUid != null)
+				boss = userInfoService.selectByPKey(firstUid);
+
+			if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 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) {
+					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)
+					return;
+
+				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) {
+						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)
+						return;
+					hongBaoV2Mapper.insertSelective(secondHongbao);
+				}
+
+			}
+
+		} else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+			// 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗�
+			if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
+				return;
+			// 鍒嗕韩璧�
+			BigDecimal shareRate = hongBaoManageService.getShareRate(commonOrder.getCreateTime().getTime());
+
+			HongBaoV2 hongBao = new HongBaoV2();
+			hongBao.setBeizhu("2019骞�7鏈堟壒閲忎慨鏀�");
+			hongBao.setCreateTime(new Date());
+			hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS);
+			hongBao.setVersion(2);
+			if (commonOrder.getState() == CommonOrder.STATE_FK) {
+				hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), shareRate.divide(new BigDecimal(100))));
+			} else if (commonOrder.getState() == CommonOrder.STATE_JS) {
+				hongBao.setState(HongBaoV2.STATE_KELINGQU);
+				hongBao.setMoney(
+						MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), shareRate.divide(new BigDecimal(100))));
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(commonOrder.getSettleTime());
+				calendar.add(Calendar.MONTH, 1);
+				hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+						calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+				if (hongBao.getPreGetTime().getTime() < System.currentTimeMillis()) {
+					hongBao.setGetTime(hongBao.getPreGetTime());
+					hongBao.setState(HongBaoV2.STATE_YILINGQU);
+				}
+			}
+			UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+			hongBao.setUrank(user.getRank());
+			hongBao.setUserInfo(user);
+			hongBaoV2Mapper.insertSelective(hongBao);
+			// 鎻掑叆绾㈠寘涓庤鍗曟槧灏�
+			HongBaoOrder hongBaoOrder = new HongBaoOrder();
+			hongBaoOrder.setCommonOrder(commonOrder);
+			hongBaoOrder.setCreateTime(new Date());
+			hongBaoOrder.setHongBaoV2(hongBao);
+			hongBaoOrderMapper.insertSelective(hongBaoOrder);
+
+			// 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);
+				}
+			}
+
+		} else
+			throw new HongBaoException(2, "type閿欒");
+
+		// 娣诲姞
+
+	}
+
+	@Transactional
+	private void deleteByCommonOrderId(Long commonOrderId) {
+		HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderId);
+		if (hongBaoOrder == null || hongBaoOrder.getHongBaoV2() == null)
+			return;
+		List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
+		if (children != null)
+			for (HongBaoV2 hongBao : children) {
+				hongBaoV2Service.deleteByPrimaryKey(hongBao.getId());
+			}
+		hongBaoV2Service.deleteByPrimaryKey(hongBaoOrder.getHongBaoV2().getId());
+		hongBaoOrderService.deleteByPrimaryKey(hongBaoOrder.getId());
+		commonOrderService.deleteByPrimaryKey(commonOrderId);
+	}
+
+}

--
Gitblit v1.8.0