From 271ae63c20fcbe28d29c47f1881138ff6551a2a1 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 10 六月 2020 19:26:26 +0800
Subject: [PATCH] 唯品会订单bug修复,APP端佣金比例展示错误bug修复

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java |  315 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 301 insertions(+), 14 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
index eee6671..3ff3530 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -35,11 +35,11 @@
 import com.yeshi.fanli.dto.mq.order.body.OrderMQMsg;
 import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg;
 import com.yeshi.fanli.dto.order.CommonOrderAddResultDTO;
+import com.yeshi.fanli.dto.order.HongBaoAddResult;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.Order;
 import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
-import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
 import com.yeshi.fanli.entity.elme.ElmeHongBaoOrderMap;
 import com.yeshi.fanli.entity.elme.ElmeOrder;
 import com.yeshi.fanli.entity.jd.JDOrder;
@@ -48,11 +48,14 @@
 import com.yeshi.fanli.entity.order.CommonOrder;
 import com.yeshi.fanli.entity.order.HongBaoOrder;
 import com.yeshi.fanli.entity.pdd.PDDOrder;
+import com.yeshi.fanli.entity.suning.SuningOrderInfo;
 import com.yeshi.fanli.entity.taobao.PidUser;
 import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
 import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
 import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
+import com.yeshi.fanli.entity.vipshop.VipShopOrder;
+import com.yeshi.fanli.entity.vipshop.VipShopOrderDetail;
 import com.yeshi.fanli.exception.elme.ElmeOrderException;
 import com.yeshi.fanli.exception.money.OrderMoneySettleException;
 import com.yeshi.fanli.exception.money.UserMoneyDetailException;
@@ -76,6 +79,7 @@
 import com.yeshi.fanli.service.inter.order.OrderMoneySettleService;
 import com.yeshi.fanli.service.inter.order.OrderProcessService;
 import com.yeshi.fanli.service.inter.order.jd.JDOrderService;
+import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService;
 import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService;
 import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
 import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService;
@@ -96,6 +100,8 @@
 import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
 import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
 import com.yeshi.fanli.util.rocketmq.MQTopicName;
+import com.yeshi.fanli.util.suning.SuningApiUtil;
+import com.yeshi.fanli.util.vipshop.VipShopUtil;
 
 @Service
 public class OrderProcessServiceImpl implements OrderProcessService {
@@ -132,6 +138,9 @@
 
 	@Resource
 	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+	@Resource
+	private UserOrderMsgNotificationService userOrderMsgNotificationService;
 
 	@Resource
 	private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
@@ -216,7 +225,8 @@
 				List<TaoBaoOrder> list = orders.get(orderId);
 				String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(),
 						list.get(0).getSourceMediaId(), list.get(0).getAdPositionId());
-				if ("楗夸簡涔�".equalsIgnoreCase(list.get(0).getOrderType())) {
+				if ("楗夸簡涔�".equalsIgnoreCase(list.get(0).getOrderType())
+						&& !pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT)) {
 					// 楗夸簡涔堣鍗曞紑濮嬪綊鍏ュ埌娣樺疂璁㈠崟
 					if (TimeUtil.convertToTimeTemp(list.get(0).getCreateTime(),
 							"yyyy-MM-dd HH:mm:ss") >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
@@ -224,6 +234,9 @@
 					} else {
 						elmeOrderMap.put(orderId, list);
 					}
+				} else if ("鍙g".equalsIgnoreCase(list.get(0).getOrderType())
+						&& pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_KOUBEI_PID)) {// 鍙g鑷喘
+					fanliOrderMap.put(orderId, list);
 				} else {
 					if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId())
 							|| pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 璁剧疆娓犻亾ID褰撳仛浼氬憳杩愯惀ID鐨勪綅缃甀D
@@ -667,7 +680,7 @@
 	}
 
 	@Override
-	@Transactional(rollbackFor = Exception.class)
+	// @Transactional(rollbackFor = Exception.class)
 	public void fanliPreInvaite(Long uid, Date maxPreGetTime) {
 		// 閭�璇疯禋鍒拌处
 		try {
@@ -736,8 +749,9 @@
 						&& !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊闈炶繑鍒╁晢鍝佸簱鐨勫晢鍝�
 					targetUid = taoBaoBuyRelationMapService.selectUidByRelationId(orderList.get(0).getRelationId());
 
-				} else if (pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_ELEME_PID)
-						&& !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊楗夸簡涔堢殑璁㈠崟
+				} else if ((pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_ELEME_PID)
+						|| pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_KOUBEI_PID))
+						&& !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊楗夸簡涔�,鍙g鐨勮鍗�
 					UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService
 							.getByRelationId(orderList.get(0).getRelationId());
 					if (extraInfo != null) {
@@ -1176,6 +1190,278 @@
 	}
 
 	@Override
+	public void processVipShopOrder(VipShopOrder order) {
+		
+		if (order == null || order.getDetailList() == null || order.getDetailList().size() == 0)
+			return;
+		
+
+		// 鏍规嵁ext1涓巗ubUnionId璺熷崟
+		String channelTag = order.getChannelTag();
+
+		String uidStr = VipShopUtil.getUidFromChanTag(channelTag);
+
+		Long uid = null;
+		if (!StringUtil.isNullOrEmpty(uidStr) && NumberUtil.isNumeric(uidStr))
+			uid = Long.parseLong(uidStr);
+		String type = VipShopUtil.getTypeFromChanTag(channelTag);
+		if ("buy".equalsIgnoreCase(type))// 杩斿埄璁㈠崟
+		{
+			processFanLiVipShopOrder(order, uid);
+			lostOrderService.processSuceess(order.getOrderSn() + "", Constant.SOURCE_TYPE_VIP);
+		} else if ("share".equalsIgnoreCase(type)) {// 鍒嗕韩璁㈠崟
+			if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥�
+				return;
+			processShareVipShopOrder(order, uid);
+		} else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵��
+			processFanLiVipShopOrder(order, null);
+		}
+	}
+
+	/**
+	 * 澶勭悊浜笢杩斿埄璁㈠崟
+	 * 
+	 * @param jdOrder
+	 * @param uid
+	 */
+	@Transactional
+	private void processFanLiVipShopOrder(VipShopOrder vipShopOrder, Long uid) {
+		int invalidCount = 0;
+		BigDecimal totalMoney = new BigDecimal(0);
+		// 璁㈠崟鐘舵�佸垽鏂�
+		for (VipShopOrderDetail item : vipShopOrder.getDetailList()) {
+			if (item.getCommissionTotalCost() != null)
+				totalMoney = totalMoney.add(item.getCommissionTotalCost());
+			if (item.getStatus() == VipShopOrderDetail.STATUS_INVALID) {
+				invalidCount++;
+			}
+		}
+
+		// 鍔犲叆璁㈠崟
+		Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(vipShopOrder.getOrderSn() + "",
+				Constant.SOURCE_TYPE_VIP);
+		if (uid == null && oldOrder != null && oldOrder.getBeizhu() != null && oldOrder.getBeizhu().contains("琛ュ崟"))
+			uid = oldOrder.getUserInfo().getId();
+
+		if (uid == null)
+			return;
+
+		if (oldOrder == null)// 鏂板
+		{
+			Order order = new Order();
+			order.setBeizhu("鍞搧浼氳繑鍒╄鍗�");
+			order.setCreatetime(System.currentTimeMillis());
+			order.setOrderId(vipShopOrder.getOrderSn() + "");
+			order.setOrderType(Constant.SOURCE_TYPE_VIP);
+			order.setState(
+					invalidCount == vipShopOrder.getDetailList().size() ? Order.STATE_SHIXIAO : Order.STATE_YIZHIFU);
+			order.setUserInfo(new UserInfo(uid));
+			order.setVersion(2);
+			order.setThirdCreateTime(new Date(vipShopOrder.getOrderTime()));
+			order.setMoney(totalMoney);
+			// 鍔犲叆鍒拌鍗曡〃
+			orderMapper.insertSelective(order);
+		} else {
+			Order updateOrder = new Order();
+			updateOrder.setId(oldOrder.getId());
+			updateOrder.setMoney(totalMoney);
+			orderMapper.updateByPrimaryKeySelective(updateOrder);
+		}
+
+		try {
+			List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addVipShopOrder(vipShopOrder, uid);
+			addHongBaoWithMQ(commonOrderList, vipShopOrder.getOrderSn() + "", uid, Constant.SOURCE_TYPE_VIP,
+					HongBaoV2.TYPE_ZIGOU);
+
+			if (isCommonOrderAllAdd(commonOrderList)) {
+				Order order = new Order();
+				order.setOrderId(vipShopOrder.getOrderSn() + "");
+				order.setOrderType(Constant.SOURCE_TYPE_VIP);
+				order.setUserInfo(new UserInfo(uid));
+				try {
+					if (Constant.ENABLE_MQ)
+						PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order);
+				} catch (Exception e) {
+				}
+			}
+		} catch (CommonOrderException e) {
+			try {
+				LogHelper.errorDetailInfo(e, "addVipShopOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + vipShopOrder.getOrderSn());
+			} catch (Exception e1) {
+				e1.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 澶勭悊浜笢鍒嗕韩璁㈠崟
+	 * 
+	 * @param order
+	 * @param uid
+	 */
+	@Transactional
+	private void processShareVipShopOrder(VipShopOrder jdOrder, Long uid) {
+		try {
+			List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addVipShopOrder(jdOrder, uid);
+			addHongBaoWithMQ(commonOrderList, jdOrder.getOrderSn() + "", uid, Constant.SOURCE_TYPE_VIP,
+					HongBaoV2.TYPE_SHARE_GOODS);
+			if (isCommonOrderAllAdd(commonOrderList)) {
+				Order order = new Order();
+				order.setOrderId(jdOrder.getOrderSn() + "");
+				order.setOrderType(Constant.SOURCE_TYPE_VIP);
+				order.setUserInfo(new UserInfo(uid));
+				try {
+					if (Constant.ENABLE_MQ)
+						PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order);
+				} catch (Exception e) {
+				}
+			}
+		} catch (CommonOrderException e) {
+			try {
+				LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + jdOrder.getOrderSn());
+			} catch (Exception e1) {
+				e1.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 澶勭悊鑻忓畞璁㈠崟
+	 */
+	@Override
+	public void processSuningOrder(SuningOrderInfo suningOrder) {
+		if (suningOrder == null)
+			return;
+		String uidStr = suningOrder.getChildAccountId();
+		Long uid = null;
+		if (!StringUtil.isNullOrEmpty(uidStr))
+			uid = Long.parseLong(uidStr);
+		String positionId = suningOrder.getPositionId();
+		if (SuningApiUtil.PID_BUY.equalsIgnoreCase(positionId))// 杩斿埄璁㈠崟
+		{
+			processFanLiSuningOrder(suningOrder, uid);
+			lostOrderService.processSuceess(suningOrder.getOrderCode(), Constant.SOURCE_TYPE_SUNING);
+		} else if (PinDuoDuoApiUtil.PID_SHARE.equalsIgnoreCase(positionId)) {// 鍒嗕韩璁㈠崟
+			if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥�
+				return;
+			processShareSuningOrder(suningOrder, uid);
+		} else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵��
+			processFanLiSuningOrder(suningOrder, null);
+		}
+	}
+
+	/**
+	 * 澶勭悊鎷煎澶氳嚜璐繑鍒╄鍗�
+	 * 
+	 * @param pddOrder
+	 * @param uid
+	 */
+	@Transactional
+	private void processFanLiSuningOrder(SuningOrderInfo suningOrder, Long uid) {
+		int orderState = 0;
+
+		// 绛夊緟浠樻锛涙敮浠樺畬鎴愶紱閫�娆撅紱璁㈠崟宸插彇娑堬紱纭鏀惰揣
+
+		if ("璁㈠崟宸插彇娑�".equalsIgnoreCase(suningOrder.getOrderLineStatusDesc())
+				|| "閫�娆�".equalsIgnoreCase(suningOrder.getOrderLineStatusDesc()))
+			orderState = Order.STATE_SHIXIAO;
+		else
+			orderState = Order.STATE_YIZHIFU;
+
+		BigDecimal totalMoney = new BigDecimal(suningOrder.getPayAmount());
+
+		// 鍔犲叆璁㈠崟
+		Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(suningOrder.getOrderCode(),
+				Constant.SOURCE_TYPE_SUNING);
+		if (uid == null && oldOrder != null && oldOrder.getBeizhu() != null && oldOrder.getBeizhu().contains("琛ュ崟"))
+			uid = oldOrder.getUserInfo().getId();
+
+		if (uid == null)
+			return;
+
+		if (oldOrder == null)// 鏂板
+		{
+			Order order = new Order();
+			order.setBeizhu("鑻忓畞杩斿埄璁㈠崟");
+			order.setCreatetime(System.currentTimeMillis());
+			order.setOrderId(suningOrder.getOrderCode());
+			order.setOrderType(Constant.SOURCE_TYPE_SUNING);
+			order.setState(orderState);
+			order.setUserInfo(new UserInfo(uid));
+			order.setVersion(2);
+			order.setThirdCreateTime(
+					new Date(TimeUtil.convertToTimeTemp(suningOrder.getOrderSubmitTime(), "yyyy-MM-dd HH:mm:ss")));
+			order.setMoney(totalMoney);
+			// 鍔犲叆鍒拌鍗曡〃
+			orderMapper.insertSelective(order);
+		} else {
+			Order updateOrder = new Order();
+			updateOrder.setId(oldOrder.getId());
+			updateOrder.setMoney(totalMoney);
+			orderMapper.updateByPrimaryKeySelective(updateOrder);
+		}
+
+		try {
+			List<SuningOrderInfo> pddOrderList = new ArrayList<>();
+			pddOrderList.add(suningOrder);
+			List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addSuningOrder(pddOrderList, uid);
+			addHongBaoWithMQ(commonOrderList, suningOrder.getOrderCode(), uid, Constant.SOURCE_TYPE_SUNING,
+					HongBaoV2.TYPE_ZIGOU);
+			if (isCommonOrderAllAdd(commonOrderList)) {
+				Order order = new Order();
+				order.setOrderId(suningOrder.getOrderCode());
+				order.setOrderType(Constant.SOURCE_TYPE_SUNING);
+				order.setUserInfo(new UserInfo(uid));
+				try {
+					if (Constant.ENABLE_MQ)
+						PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order);
+				} catch (Exception e) {
+				}
+			}
+		} catch (CommonOrderException e) {
+			try {
+				LogHelper.errorDetailInfo(e, "addPDDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + suningOrder.getOrderCode());
+			} catch (Exception e1) {
+				e1.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 澶勭悊鎷煎澶氬垎浜鍗�
+	 * 
+	 * @param order
+	 * @param uid
+	 */
+	@Transactional
+	private void processShareSuningOrder(SuningOrderInfo suningOrder, Long uid) {
+		try {
+			List<SuningOrderInfo> suningOrderList = new ArrayList<>();
+			suningOrderList.add(suningOrder);
+			List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addSuningOrder(suningOrderList, uid);
+			addHongBaoWithMQ(commonOrderList, suningOrder.getOrderCode(), uid, Constant.SOURCE_TYPE_SUNING,
+					HongBaoV2.TYPE_SHARE_GOODS);
+			if (isCommonOrderAllAdd(commonOrderList)) {
+				Order order = new Order();
+				order.setOrderId(suningOrder.getOrderCode());
+				order.setOrderType(Constant.SOURCE_TYPE_SUNING);
+				order.setUserInfo(new UserInfo(uid));
+				try {
+					if (Constant.ENABLE_MQ)
+						PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order);
+				} catch (Exception e) {
+				}
+			}
+		} catch (CommonOrderException e) {
+			try {
+				LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + suningOrder.getOrderCode());
+			} catch (Exception e1) {
+				e1.printStackTrace();
+			}
+		}
+	}
+
+	@Override
 	public void repairCommonOrderByByTaoBaoOrder(String orderId) {
 		// 鏍规嵁璁㈠崟鍙锋煡璇㈡窐瀹濊鍗�
 		List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
@@ -1277,9 +1563,10 @@
 				update.setUpdateTime(new Date());
 				hongBaoV2Service.updateByPrimaryKeySelective(update);
 			}
-		// TODO 鍟嗗鍏冲簵璺戣矾闇�瑕佽禒閫侀噾甯�
-		// userSystemCouponService.rewardCouponWin(uid,
-		// UserSystemCoupon.SOURCE_SYSTEM_PUSH, 1, true, new BigDecimal("31"));
+
+		if (hongBao.getType() == HongBaoV2.TYPE_ZIGOU || hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) {
+			userOrderMsgNotificationService.orderInvalidToBusinessRunning(uid, orderId, sourceType, hongBao.getType());
+		}
 	}
 
 	@Transactional
@@ -1296,7 +1583,7 @@
 				// 鏌ヨ涓荤孩鍖�
 				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
 				if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
-				if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_BUKELINGQU) {
+				if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_BUKELINGQU || hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_SHIXIAO) {
 				// 璁㈠崟澶辨晥,璧犻�侀噾甯�
 				try {
 				invalidHongBaoV2AndGiveGodenCorn(hongBaoOrder.getHongBaoV2().getId(), hongBaoOrder.getHongBaoV2().getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType(), "璁㈠崟鎴愬姛锛屽晢瀹舵湭鎵撴");
@@ -1388,16 +1675,16 @@
 	private void addHongBaoWithMQ(List<CommonOrderAddResultDTO> commonOrderList, String orderId, Long uid,
 			int sourceType, int hongBaoType) {
 		final List<CommonOrder> coList = convertCommonOrder(commonOrderList);
-		int resultCode = 0;
+		HongBaoAddResult result = null;
 		try {
 			long time = TimeUtil.convertToTimeTemp("2019-12-06", "yyyy-MM-dd");
 			if (!Constant.IS_TEST)
 				time = TimeUtil.convertToTimeTemp("2019-12-20", "yyyy-MM-dd");
 
 			if (coList.get(0).getThirdCreateTime().getTime() < time)
-				resultCode = hongBaoV2Service.addHongBao(coList, hongBaoType);
+				result = hongBaoV2Service.addHongBao(coList, hongBaoType);
 			else
-				resultCode = hongBaoV2AddManager.addHongBao(coList, hongBaoType);
+				result = hongBaoV2AddManager.addHongBao(coList, hongBaoType);
 		} catch (HongBaoException e) {
 			try {
 				LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId);
@@ -1408,9 +1695,9 @@
 
 		}
 		if (!Constant.IS_TEST)
-			if (resultCode == 1) {// 鍙彂閫佹柊澧炴秷鎭�
+			if (result.getResultCode() == HongBaoAddResult.CODE_ADD) {// 鍙彂閫佹柊澧炴秷鎭�
 				OrderMQMsg mqMsg = new OrderMQMsg(orderId, sourceType, uid, OrderMQMsg.HANDLE_TYPE_ADD,
-						isCommonOrderValid(coList), 0, new Date());
+						isCommonOrderValid(coList), 0, new Date(), result.isMiandan());
 				Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderStatistic, mqMsg);
 				producer.send(msg);
 			}

--
Gitblit v1.8.0