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 |  214 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 213 insertions(+), 1 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 5149fe4..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,11 +1,44 @@
 package com.yeshi.fanli.util.rocketmq.consumer.order;
 
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
 import org.springframework.stereotype.Component;
 
 import com.aliyun.openservices.ons.api.Action;
 import com.aliyun.openservices.ons.api.ConsumeContext;
 import com.aliyun.openservices.ons.api.Message;
 import com.aliyun.openservices.ons.api.MessageListener;
+import com.aliyun.openservices.ons.api.Producer;
+import com.aliyun.openservices.ons.api.SendResult;
+import com.google.gson.Gson;
+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;
 
 /**
  * 閭�璇疯鍗曡ˉ璐存秷鎭秷璐�
@@ -15,6 +48,29 @@
  */
 @Component
 public class InviteOrderSubsidyMessageListener implements MessageListener {
+	@Resource
+	private InviteOrderSubsidyService inviteOrderSubsidyService;
+
+	@Resource
+	private InviteOrderSubsidyServiceV2 inviteOrderSubsidyServiceV2;
+
+	@Resource
+	private UserSystemCouponRecordService userSystemCouponRecordService;
+
+	@Resource(name = "producer")
+	private Producer producer;
+
+	@Resource
+	private MQUnSendInfoService mqUnSendInfoService;
+
+	@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() {
 
@@ -22,9 +78,165 @@
 
 	@Override
 	public Action consume(Message message, ConsumeContext context) {
-		if (message.getTag().startsWith("")) {
+		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())) {
+			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) {
+					// 鏌ヨ鍑鸿鍗曞垱寤烘椂闂�
+					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() == OrderMoneyRecievedMQMsg.TYPE_INVITE) {// 閭�璇峰埌璐�
+						// 琛ヨ创鍒拌处
+						try {
+							orderMoneySettleService.inviteSubsidySettle(dto.getUid(), message.getKey());
+							return Action.CommitMessage;
+						} catch (OrderMoneySettleException e) {
+							return Action.ReconsumeLater;
+						}
+					}
+				}
+			} else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderFanLiDelay.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) {
+							// 鍒ゆ柇鏄惁瑕佷娇鐢ㄥ鍔卞埜
+							UserSystemCouponRecord record = userSystemCouponRecordService
+									.getRecordByOrderNo(dto.getOrderId(), UserSystemCouponRecord.STATE_SUCCESS);
+							if (record != null
+									&& record.getCouponType()
+											.equalsIgnoreCase(SystemCoupon.CouponTypeEnum.rebatePercentCoupon.name())
+									&& record.getGoodSource() == 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 {
+								// 浣挎暟鎹湁鏁�
+								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_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;
 	}
+
+	/**
+	 * 鍙戦�佽鍗曞欢鏃舵秷鎭�
+	 * 
+	 * @param day
+	 */
+	private boolean sendOrderSubsidyUpdateLater(OrderMoneyRecievedMQMsg dto, int day) {
+
+		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);
+		SendResult sendResult = producer.send(msg);
+		if (sendResult != null) {
+			return true;
+		} else {
+			MQUnSendInfo info = new MQUnSendInfo();
+			info.setBody(new String(msg.getBody()));
+			if (msg.getStartDeliverTime() > 0)
+				info.setDeliverTime(new Date(msg.getStartDeliverTime()));
+			info.setKey(msg.getKey());
+			info.setTag(msg.getTag());
+			info.setTopic(msg.getTopic());
+			try {
+				mqUnSendInfoService.addMQUnSendInfo(info);
+			} catch (MQUnSendInfoException e) {
+				e.printStackTrace();
+			}
+			return false;
+		}
+	}
+
 }

--
Gitblit v1.8.0