From 733281fcb5f1ab01e1196b542b7e07b49b3e44c4 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 25 十月 2019 17:02:55 +0800
Subject: [PATCH] 订单消息,返利消息,返利券使用,邀请订单补贴

---
 fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java |  145 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 144 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..469a4cf 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,33 @@
 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.order.OrderMQMsgDTO;
+import com.yeshi.fanli.dto.order.OrderMoneyRecievedMQMsgDTO;
+import com.yeshi.fanli.dto.user.coupon.UserSystemCouponUseMQMsgDTO;
+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.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.MQTopicName;
 
 /**
  * 閭�璇疯鍗曡ˉ璐存秷鎭秷璐�
@@ -15,6 +37,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 +58,116 @@
 
 	@Override
 	public Action consume(Message message, ConsumeContext context) {
-		if (message.getTag().startsWith("")) {
 
+		if (!Constant.IS_TASK) {// 闈炰换鍔℃湇鍔″櫒涓嶈兘娑堣垂娑堟伅
+			return Action.ReconsumeLater;
+		}
+
+		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 (dto != null) {
+					if (dto.getType() == OrderMoneyRecievedMQMsgDTO.TYPE_ZIGOU) {// 鑷喘鍒拌处
+						// 鍒ゆ柇璁㈠崟鍙锋槸鍚﹀湪琛ヨ创涓�
+						long count = inviteOrderSubsidyService.countByOrderIdAndSourceType(dto.getOrderId(),
+								dto.getSourceType());
+						if (count > 0) {// 寤舵椂娑堟伅鍙戦��
+							sendOrderSubsidyUpdateLater(dto, 5);
+						}
+					} else if (dto.getType() == OrderMoneyRecievedMQMsgDTO.TYPE_INVITE) {// 閭�璇峰埌璐�
+						// 琛ヨ创鍒拌处
+						try {
+							orderMoneySettleService.inviteSubsidySettle(dto.getUid(), message.getKey());
+							return Action.CommitMessage;
+						} catch (OrderMoneySettleException e) {
+							return Action.ReconsumeLater;
+						}
+					}
+				}
+			} else if (message.getTag().equalsIgnoreCase("delay")) {
+				OrderMoneyRecievedMQMsgDTO dto = new Gson().fromJson(new String(message.getBody()),
+						OrderMoneyRecievedMQMsgDTO.class);
+				if (dto != null) {
+					if (dto.getType() == OrderMoneyRecievedMQMsgDTO.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_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());
+				}
+				return Action.CommitMessage;
+			}
 		}
 		return Action.CommitMessage;
 	}
+
+	/**
+	 * 鍙戦�佽鍗曞欢鏃舵秷鎭�
+	 * 
+	 * @param day
+	 */
+	private boolean sendOrderSubsidyUpdateLater(OrderMoneyRecievedMQMsgDTO dto, int day) {
+
+		Message msg = new Message(MQTopicName.TOPIC_FANLI.name(), "delay", new Gson().toJson(dto).getBytes());
+		msg.setKey(dto.getSourceType() + "_" + dto.getOrderId());
+		long delayTime = System.currentTimeMillis() + 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