From 0ec22dcf4fd9c4496e6f681e7fab89f56c6e4e8a Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期四, 02 四月 2020 14:45:20 +0800
Subject: [PATCH] vip 消息

---
 fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java |  156 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 111 insertions(+), 45 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java b/fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java
index 55610dc..72af241 100644
--- a/fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java
+++ b/fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java
@@ -1,6 +1,7 @@
 package com.yeshi.fanli.util.rocketmq.consumer.order;
 
 import java.util.Date;
+import java.util.List;
 
 import javax.annotation.Resource;
 
@@ -13,21 +14,30 @@
 import com.aliyun.openservices.ons.api.Producer;
 import com.aliyun.openservices.ons.api.SendResult;
 import com.google.gson.Gson;
-import com.yeshi.fanli.dto.order.OrderMQMsgDTO;
-import com.yeshi.fanli.dto.order.OrderMoneyRecievedMQMsgDTO;
-import com.yeshi.fanli.dto.user.coupon.UserSystemCouponUseMQMsgDTO;
+import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
+import com.yeshi.fanli.dto.mq.order.body.OrderMQMsg;
+import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg;
+import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
+import com.yeshi.fanli.dto.mq.user.body.UserSystemCouponUseMQMsg;
 import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord;
 import com.yeshi.fanli.entity.mq.MQUnSendInfo;
+import com.yeshi.fanli.entity.order.CommonOrder;
 import com.yeshi.fanli.entity.system.SystemCoupon;
 import com.yeshi.fanli.exception.money.OrderMoneySettleException;
 import com.yeshi.fanli.exception.mq.MQUnSendInfoException;
+import com.yeshi.fanli.exception.order.CommonOrderException;
 import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
+import com.yeshi.fanli.exception.order.OrderTeamRewardException;
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.mq.MQUnSendInfoService;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
 import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
+import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyServiceV2;
 import com.yeshi.fanli.service.inter.order.OrderMoneySettleService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
 import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.TimeUtil;
+import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
 import com.yeshi.fanli.util.rocketmq.MQTopicName;
 
 /**
@@ -42,6 +52,9 @@
 	private InviteOrderSubsidyService inviteOrderSubsidyService;
 
 	@Resource
+	private InviteOrderSubsidyServiceV2 inviteOrderSubsidyServiceV2;
+
+	@Resource
 	private UserSystemCouponRecordService userSystemCouponRecordService;
 
 	@Resource(name = "producer")
@@ -53,42 +66,67 @@
 	@Resource
 	private OrderMoneySettleService orderMoneySettleService;
 
+	@Resource
+	private CommonOrderService commonOrderService;
+
+	// 鍥㈤槦濂栧姳寮�濮嬫椂闂�
+	private static final long TEAM_REWARD_START_TIME = TimeUtil.convertToTimeTemp("2019-04-15", "yyyy-MM-dd");
+
 	public InviteOrderSubsidyMessageListener() {
 
 	}
 
 	@Override
 	public Action consume(Message message, ConsumeContext context) {
-
-		// if (!Constant.IS_TASK) {// 闈炰换鍔℃湇鍔″櫒涓嶈兘娑堣垂娑堟伅
-		// return Action.ReconsumeLater;
-		// }
-		LogHelper.mqInfo("consumer:InviteOrderSubsidyMessageListener", message.getTopic(), message.getTag(),
-				new String(message.getBody()));
+		LogHelper.mqInfo("consumer:InviteOrderSubsidyMessageListener", message.getMsgID(), message.getTopic(),
+				message.getTag(), new String(message.getBody()));
+		String tag = message.getTag();
 
 		if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
-			// 鏌ヨ涓婄骇绾㈠寘
-			OrderMQMsgDTO dto = new Gson().fromJson(new String(message.getBody()), OrderMQMsgDTO.class);
-			if (dto != null) {
-				try {
-					inviteOrderSubsidyService.addOrUpdateByOrder(dto.getOrderId(), dto.getType());
-				} catch (InviteOrderSubsidyException e) {
-					return Action.ReconsumeLater;
-				}
-			}
-		} else if (MQTopicName.TOPIC_FANLI.name().equalsIgnoreCase(message.getTopic())) {
-			if (message.getTag().equalsIgnoreCase("actual")) {
-				OrderMoneyRecievedMQMsgDTO dto = new Gson().fromJson(new String(message.getBody()),
-						OrderMoneyRecievedMQMsgDTO.class);
+			if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatistic.name())
+					|| tag.equalsIgnoreCase(OrderTopicTagEnum.orderUpdate.name())) {
+				// 鏌ヨ涓婄骇绾㈠寘
+				OrderMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
 				if (dto != null) {
-					if (dto.getType() == OrderMoneyRecievedMQMsgDTO.TYPE_ZIGOU) {// 鑷喘鍒拌处
+					// 鏌ヨ鍑鸿鍗曞垱寤烘椂闂�
+					Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getType());
+					if (orderTime.getTime() >= TEAM_REWARD_START_TIME) {
+						try {
+							inviteOrderSubsidyServiceV2.addOrUpdateByOrder(dto.getOrderId(), dto.getType());
+							return Action.CommitMessage;
+						} catch (InviteOrderSubsidyException e) {
+							e.printStackTrace();
+							LogHelper.errorDetailInfo(e, new Gson().toJson(dto), "");
+						} catch (OrderTeamRewardException e) {
+							e.printStackTrace();
+							LogHelper.errorDetailInfo(e, new Gson().toJson(dto), "");
+						} catch (CommonOrderException e) {
+							e.printStackTrace();
+							LogHelper.errorDetailInfo(e, new Gson().toJson(dto), "");
+						}
+						return Action.ReconsumeLater;
+					} else {
+						try {
+							inviteOrderSubsidyService.addOrUpdateByOrder(dto.getOrderId(), dto.getType());
+						} catch (InviteOrderSubsidyException e) {
+							LogHelper.errorDetailInfo(e, new Gson().toJson(dto), "");
+							return Action.ReconsumeLater;
+						}
+					}
+
+				}
+			} else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderFanLiActual.name())) {
+				OrderMoneyRecievedMQMsg dto = new Gson().fromJson(new String(message.getBody()),
+						OrderMoneyRecievedMQMsg.class);
+				if (dto != null) {
+					if (dto.getType() == OrderMoneyRecievedMQMsg.TYPE_ZIGOU) {// 鑷喘鍒拌处
 						// 鍒ゆ柇璁㈠崟鍙锋槸鍚﹀湪琛ヨ创涓�
 						long count = inviteOrderSubsidyService.countByOrderIdAndSourceType(dto.getOrderId(),
 								dto.getSourceType());
 						if (count > 0) {// 寤舵椂娑堟伅鍙戦��
 							sendOrderSubsidyUpdateLater(dto, 5);
 						}
-					} else if (dto.getType() == OrderMoneyRecievedMQMsgDTO.TYPE_INVITE) {// 閭�璇峰埌璐�
+					} else if (dto.getType() == OrderMoneyRecievedMQMsg.TYPE_INVITE) {// 閭�璇峰埌璐�
 						// 琛ヨ创鍒拌处
 						try {
 							orderMoneySettleService.inviteSubsidySettle(dto.getUid(), message.getKey());
@@ -98,11 +136,11 @@
 						}
 					}
 				}
-			} else if (message.getTag().equalsIgnoreCase("delay")) {
-				OrderMoneyRecievedMQMsgDTO dto = new Gson().fromJson(new String(message.getBody()),
-						OrderMoneyRecievedMQMsgDTO.class);
+			} else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderFanLiDelay.name())) {
+				OrderMoneyRecievedMQMsg dto = new Gson().fromJson(new String(message.getBody()),
+						OrderMoneyRecievedMQMsg.class);
 				if (dto != null) {
-					if (dto.getType() == OrderMoneyRecievedMQMsgDTO.TYPE_ZIGOU) {// 寤舵椂鏃堕棿宸插埌
+					if (dto.getType() == OrderMoneyRecievedMQMsg.TYPE_ZIGOU) {// 寤舵椂鏃堕棿宸插埌
 						// 鍒ゆ柇璁㈠崟鍙锋槸鍚﹀湪琛ヨ创涓�
 						long count = inviteOrderSubsidyService.countByOrderIdAndSourceType(dto.getOrderId(),
 								dto.getSourceType());
@@ -114,30 +152,58 @@
 									&& record.getCouponType()
 											.equalsIgnoreCase(SystemCoupon.CouponTypeEnum.rebatePercentCoupon.name())
 									&& record.getGoodSource() == dto.getSourceType()) {// 鎴愬姛浣跨敤浜嗗鍔卞埜
-								inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(),
-										dto.getSourceType());
+
+								Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getType());
+								if (orderTime.getTime() >= TEAM_REWARD_START_TIME) {
+									inviteOrderSubsidyServiceV2.invalidByOrderIdAndSourceType(dto.getOrderId(),
+											dto.getSourceType());
+								} else
+
+									inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(),
+											dto.getSourceType());
 							} else {
 								// 浣挎暟鎹湁鏁�
-								inviteOrderSubsidyService.validByOrderIdAndSourceType(dto.getOrderId(),
-										dto.getSourceType());
+								try {
+									Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(),
+											dto.getType());
+									if (orderTime.getTime() >= TEAM_REWARD_START_TIME) {
+										inviteOrderSubsidyServiceV2.validByOrderIdAndSourceType(dto.getOrderId(),
+												dto.getSourceType());
+									} else
+
+										inviteOrderSubsidyService.validByOrderIdAndSourceType(dto.getOrderId(),
+												dto.getSourceType());
+								} catch (InviteOrderSubsidyException e) {
+									e.printStackTrace();
+									return Action.ReconsumeLater;
+								}
 							}
 						}
 					}
 				}
 			}
-
-		} else if (MQTopicName.TOPIC_SYSTEM_COUPON_USE.name().equalsIgnoreCase(message.getTopic())) {// 濂栧姳鍒镐娇鐢ㄦ垚鍔�
-			UserSystemCouponUseMQMsgDTO dto = new Gson().fromJson(new String(message.getBody()),
-					UserSystemCouponUseMQMsgDTO.class);
-			if (dto != null) {
-				long count = inviteOrderSubsidyService.countByOrderIdAndSourceType(dto.getOrderId(),
-						dto.getSourceType());
-				if (count > 0) {
-					// 浣跨浉鍏宠鍗曞け鏁�
-					inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType());
+		} else if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) {
+			if (tag.equalsIgnoreCase(UserTopicTagEnum.useSystemCoupon.name())) {
+				UserSystemCouponUseMQMsg dto = new Gson().fromJson(new String(message.getBody()),
+						UserSystemCouponUseMQMsg.class);
+				if (dto != null && dto.getCouponType()
+						.equalsIgnoreCase(SystemCoupon.CouponTypeEnum.rebatePercentCoupon.name())) {// 杩斿埄濂栧姳鍒哥殑浣跨敤
+					long count = inviteOrderSubsidyService.countByOrderIdAndSourceType(dto.getOrderId(),
+							dto.getSourceType());
+					if (count > 0) {
+						// 浣跨浉鍏宠鍗曞け鏁�
+						Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getSourceType());
+						if (orderTime.getTime() >= TEAM_REWARD_START_TIME) {
+							inviteOrderSubsidyServiceV2.invalidByOrderIdAndSourceType(dto.getOrderId(),
+									dto.getSourceType());
+						} else
+							inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(),
+									dto.getSourceType());
+					}
+					return Action.CommitMessage;
 				}
-				return Action.CommitMessage;
 			}
+			//
 		}
 		return Action.CommitMessage;
 	}
@@ -147,9 +213,9 @@
 	 * 
 	 * @param day
 	 */
-	private boolean sendOrderSubsidyUpdateLater(OrderMoneyRecievedMQMsgDTO dto, int day) {
+	private boolean sendOrderSubsidyUpdateLater(OrderMoneyRecievedMQMsg dto, int day) {
 
-		Message msg = new Message(MQTopicName.TOPIC_FANLI.name(), "delay", new Gson().toJson(dto).getBytes());
+		Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiDelay, dto);
 		msg.setKey(dto.getSourceType() + "_" + dto.getOrderId());
 		long delayTime = System.currentTimeMillis() + (Constant.IS_TEST ? 1000 * 30L : 1000 * 60 * 60 * 24L * day);
 		msg.setStartDeliverTime(delayTime);

--
Gitblit v1.8.0