From ddf5db7d31af51fcf697eac0cee7dd46ff73bcc1 Mon Sep 17 00:00:00 2001
From: admin <2780501319@qq.com>
Date: 星期二, 18 二月 2020 12:50:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 151 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..67d2174 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,37 @@
 package com.yeshi.fanli.util.rocketmq.consumer.order;
 
+import java.util.Date;
+
+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.system.SystemCoupon;
+import com.yeshi.fanli.exception.money.OrderMoneySettleException;
+import com.yeshi.fanli.exception.mq.MQUnSendInfoException;
+import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.mq.MQUnSendInfoService;
+import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
+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.rocketmq.MQMsgBodyFactory;
+import com.yeshi.fanli.util.rocketmq.MQTopicName;
 
 /**
  * 閭�璇疯鍗曡ˉ璐存秷鎭秷璐�
@@ -15,6 +41,20 @@
  */
 @Component
 public class InviteOrderSubsidyMessageListener implements MessageListener {
+	@Resource
+	private InviteOrderSubsidyService inviteOrderSubsidyService;
+
+	@Resource
+	private UserSystemCouponRecordService userSystemCouponRecordService;
+
+	@Resource(name = "producer")
+	private Producer producer;
+
+	@Resource
+	private MQUnSendInfoService mqUnSendInfoService;
+
+	@Resource
+	private OrderMoneySettleService orderMoneySettleService;
 
 	public InviteOrderSubsidyMessageListener() {
 
@@ -22,9 +62,119 @@
 
 	@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) {
+					try {
+						inviteOrderSubsidyService.addOrUpdateByOrder(dto.getOrderId(), dto.getType());
+					} catch (InviteOrderSubsidyException e) {
+						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()) {// 鎴愬姛浣跨敤浜嗗鍔卞埜
+								inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(),
+										dto.getSourceType());
+							} else {
+								// 浣挎暟鎹湁鏁�
+								inviteOrderSubsidyService.validByOrderIdAndSourceType(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) {
+						// 浣跨浉鍏宠鍗曞け鏁�
+						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