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