admin
2019-11-20 153901de9782f71992f17607c8ab4faeaace3d09
红包模块增加24小时订单消息,自购/分享订单到账消息
9个文件已修改
134 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/aspect/RequestSerializableAspect.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/OrderTopicTagEnum.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/body/OrderMQMsg.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/body/OrderMoneyRecievedMQMsg.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/BanLiShopOrderMessageListener.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/redpack/RedPackMessageListener.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/rocket/consumer.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/aspect/RequestSerializableAspect.java
@@ -98,7 +98,6 @@
                        // jiedis原子性做拦截
                        Jedis jedis = jedisPool.getResource();
                        long threadId= Thread.currentThread().getId();
                        LogHelper.test("进入拦截:"+cacheKey+"-"+threadId);
                        try {
                            Constant.waitingThreadSet.add(threadId);
                            String result = null;
@@ -107,10 +106,7 @@
                            while (StringUtil.isNullOrEmpty(result)) {
                                
                                result = jedis.set(cacheKey, "1", new SetParams().nx().ex(30));
                                LogHelper.error("触发并发锁:" + cacheAlias);
                                LogHelper.error("redis键:" + cacheKey);
                                if (StringUtil.isNullOrEmpty(result)) {
                                    LogHelper.test("等待:"+threadId);
                                    try {
                                        Thread.sleep(50);
                                    } catch (InterruptedException e) {
@@ -122,7 +118,6 @@
                                        return null;
                                    }
                                } else {
                                    LogHelper.test("获取到锁:"+threadId);
                                    break;
                                }
                            }
@@ -134,10 +129,8 @@
                                    e.printStackTrace();
                                    LogHelper.errorDetailInfo(e);
                                } finally {
                                    LogHelper.test("方法执行完毕:"+threadId);
                                    jedis.del(cacheKey);
                                    Constant.waitingThreadSet.remove(Thread.currentThread().getId());
                                    LogHelper.test("释放锁:"+threadId);
                                }
                            }
                        } finally {
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/OrderTopicTagEnum.java
@@ -6,9 +6,11 @@
public enum OrderTopicTagEnum {
    orderStatistic(OrderMQMsg.class), // 订单统计
    orderStatisticDelay(OrderMQMsg.class), // 订单统计延时
    orderUpdate(OrderMoneyRecievedMQMsg.class), // 订单修改
    orderFanLiActual(OrderMoneyRecievedMQMsg.class), // 订单实时到账
    orderFanLiDelay(OrderMoneyRecievedMQMsg.class), // 订单到账延时消息
    orderFanLiSeparateByOrderNo(OrderMoneyRecievedMQMsg.class),//订单实时到账,按订单号分离
    banLiShopOrderDelay(BanLiShopOrderMQMsg.class), // 板栗商城下单
    banLiShopOrderRefund(BanLiShopOrderMQMsg.class), // 板栗商城订单退款
    banLiShopOrderPaid(BanLiShopOrderMQMsg.class);// 商城订单支付成功
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/body/OrderMQMsg.java
@@ -1,5 +1,7 @@
package com.yeshi.fanli.dto.mq.order.body;
import java.util.Date;
import com.yeshi.fanli.dto.mq.BaseMQMsgBody;
/**
@@ -18,14 +20,35 @@
    private Long uid;
    private int handleType; // 操作类型
    private boolean valid;
    private int delayHour;// 延时的时间(小时记)
    private Date staticticDate;// 统计到的时间
    public OrderMQMsg(String orderId, Integer type, Long uid, int handleType, boolean valid) {
    public OrderMQMsg(String orderId, Integer type, Long uid, int handleType, boolean valid, int delayHour,
            Date staticticDate) {
        super();
        this.orderId = orderId;
        this.type = type;
        this.uid = uid;
        this.handleType = handleType;
        this.valid = valid;
        this.delayHour = delayHour;
        this.staticticDate = staticticDate;
    }
    public Date getStaticticDate() {
        return staticticDate;
    }
    public void setStaticticDate(Date staticticDate) {
        this.staticticDate = staticticDate;
    }
    public int getDelayHour() {
        return delayHour;
    }
    public void setDelayHour(int delayHour) {
        this.delayHour = delayHour;
    }
    public OrderMQMsg() {
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/body/OrderMoneyRecievedMQMsg.java
@@ -22,6 +22,15 @@
    private BigDecimal money;// 到账金额
    private Date date;// 到账时间
    private Boolean orderFirst;// 该订单是否是首次到账
    private int delayHour;// 延时的时间(以小时计算)
    public int getDelayHour() {
        return delayHour;
    }
    public void setDelayHour(int delayHour) {
        this.delayHour = delayHour;
    }
    public Boolean getOrderFirst() {
        return orderFirst;
@@ -35,8 +44,8 @@
        super();
    }
    public OrderMoneyRecievedMQMsg(int type, Long uid, Integer sourceType, String orderId, BigDecimal money,
            Date date) {
    public OrderMoneyRecievedMQMsg(int type, Long uid, Integer sourceType, String orderId, BigDecimal money, Date date,
            int delayHour) {
        super();
        this.type = type;
        this.uid = uid;
@@ -44,6 +53,7 @@
        this.orderId = orderId;
        this.money = money;
        this.date = date;
        this.delayHour = delayHour;
    }
    public int getType() {
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
@@ -154,7 +154,7 @@
        // 邀请赚到账事务消息
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid,
                sourceType, null, null, new Date());
                sourceType, null, null, new Date(),0);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderFanLiActual.name(),
                new Gson().toJson(mqMsg).getBytes());
        String taskKey = getTaskKey(uid);
@@ -218,7 +218,7 @@
        // 邀请赚到账事务消息
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid,
                sourceType, null, null, new Date());
                sourceType, null, null, new Date(),0);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderFanLiActual.name(), new Gson().toJson(mqMsg).getBytes());
        String taskKey = getTaskKey(uid);
        msg.setKey(taskKey);
@@ -277,7 +277,7 @@
        // 邀请赚到账事务消息
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid,
                sourceType, null, null, new Date());
                sourceType, null, null, new Date(),0);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderFanLiActual.name(), new Gson().toJson(mqMsg).getBytes());
        String taskKey = getTaskKey(uid);
        msg.setKey(taskKey);
@@ -318,7 +318,7 @@
        }
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_SHARE, uid,
                sourceType, null, null, new Date());
                sourceType, null, null, new Date(),0);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(),OrderTopicTagEnum.orderFanLiActual.name(), new Gson().toJson(mqMsg).getBytes());
        String taskKey = getTaskKey(uid);
        msg.setKey(taskKey);
@@ -363,7 +363,7 @@
        }
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_SHARE, uid,
                sourceType, null, null, new Date());
                sourceType, null, null, new Date(),0);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderFanLiActual.name(), new Gson().toJson(mqMsg).getBytes());
        String taskKey = getTaskKey(uid);
        msg.setKey(taskKey);
@@ -404,7 +404,7 @@
        }
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_SHARE, uid,
                sourceType, null, null, new Date());
                sourceType, null, null, new Date(),0);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderFanLiActual.name(), new Gson().toJson(mqMsg).getBytes());
        String taskKey = getTaskKey(uid);
        msg.setKey(taskKey);
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -418,7 +418,7 @@
        // 自购到账事务消息
        OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_ZIGOU,
                mainUser.getId(), hongBaoOrder.getCommonOrder().getSourceType(),
                hongBaoOrder.getCommonOrder().getOrderNo(), null, new Date());
                hongBaoOrder.getCommonOrder().getOrderNo(), null, new Date(),0);
        mqMsg.setOrderFirst(first);
        Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderFanLiActual.name(),
                new Gson().toJson(mqMsg).getBytes());
@@ -1219,7 +1219,7 @@
        }
        if (resultCode == 1) {// 只发送新增消息
            OrderMQMsg mqMsg = new OrderMQMsg(orderId, sourceType, uid, OrderMQMsg.HANDLE_TYPE_ADD,
                    isCommonOrderValid(coList));
                    isCommonOrderValid(coList),0,new Date());
            Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.orderStatistic.name(),
                    new Gson().toJson(mqMsg).getBytes());
            producer.send(msg);
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/BanLiShopOrderMessageListener.java
@@ -9,7 +9,6 @@
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.BaseMQMsgBody;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.BanLiShopOrderMQMsg;
import com.yeshi.fanli.entity.shop.BanLiShopOrder;
@@ -17,7 +16,6 @@
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.shop.BanLiShopOrderPayService;
import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
/**
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/redpack/RedPackMessageListener.java
@@ -8,8 +8,8 @@
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.google.gson.Gson;
import com.yeshi.fanli.dto.mq.BaseMQMsgBody;
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;
@@ -23,6 +23,7 @@
import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
/**
@@ -39,9 +40,12 @@
    @Resource
    private RedPackWinInviteService redPackWinInviteService;
    @Resource
    private RedPackGiveRecordService redPackGiveRecordService;
    @Resource(name = "producer")
    private Producer producer;
    @Override
    public Action consume(Message message, ConsumeContext context) {
@@ -57,12 +61,13 @@
                        OrderMoneyRecievedMQMsg.class);
                // 分享订单奖励
                if (orderMoneyRecievedMQMsg.getType() == OrderMoneyRecievedMQMsg.TYPE_SHARE) {
//                    try {
//                        redPackWinInviteService.orderArriveReward(orderMoneyRecievedMQMsg.getUid(),
//                                orderMoneyRecievedMQMsg.getSourceType(), orderMoneyRecievedMQMsg.getOrderId());
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
                    // try {
                    // redPackWinInviteService.orderArriveReward(orderMoneyRecievedMQMsg.getUid(),
                    // orderMoneyRecievedMQMsg.getSourceType(),
                    // orderMoneyRecievedMQMsg.getOrderId());
                    // } catch (Exception e) {
                    // e.printStackTrace();
                    // }
                }
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatistic.name())) {// 订单统计
                OrderMQMsg orderMQMsg = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
@@ -73,8 +78,46 @@
                        e.printStackTrace();
                    }
                }
                // 发送24小时延时消息
                // 测试时发送
                int hour = 24;
                if (Constant.IS_TEST) {
                    hour = 1;
                }
                orderMQMsg.setDelayHour(hour);
                Message msg = new Message(message.getTopic(), OrderTopicTagEnum.orderStatisticDelay.name(),
                        new Gson().toJson(orderMQMsg).getBytes());
                if (orderMQMsg.getStaticticDate().getTime() + 1000 * 60 * 60L * hour > System.currentTimeMillis())// 时间是否已经过了
                    msg.setStartDeliverTime(orderMQMsg.getStaticticDate().getTime() + 1000 * 60 * 60L * hour);
                else
                    msg.setStartDeliverTime(System.currentTimeMillis() + 1000 * 60);
                producer.send(msg);
                return Action.CommitMessage;
            }
        } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatisticDelay.name())) {// 订单统计
            OrderMQMsg orderMQMsg = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
            int hour = 24;
            if (Constant.IS_TEST) {
                hour = 1;
            }
            if (orderMQMsg.getDelayHour() == hour) {
                // TODO 处理延时消息
            }
            return Action.CommitMessage;
        } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderFanLiSeparateByOrderNo.name())) {// 订单到账(按订单号处理)
            OrderMoneyRecievedMQMsg orderMoneyRecievedMQMsg = new Gson().fromJson(new String(message.getBody()),
                    OrderMoneyRecievedMQMsg.class);
            if (orderMoneyRecievedMQMsg.getType() == OrderMoneyRecievedMQMsg.TYPE_ZIGOU
                    || orderMoneyRecievedMQMsg.getType() == OrderMoneyRecievedMQMsg.TYPE_SHARE) {
                if (!StringUtil.isNullOrEmpty(orderMoneyRecievedMQMsg.getOrderId())
                        && orderMoneyRecievedMQMsg.getUid() != null) {
                    // TODO 自购与分享订单到账处理
                }
            }
            return Action.CommitMessage;
        } else if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) {
            boolean inviteSucceedReward = false;
            Long uid = null;
@@ -110,11 +153,10 @@
            if (inviteSucceedReward) {
                try {// 邀请奖励
                    if(uid==6269748)
                    {
                    if (uid == 6269748) {
                        System.out.println(uid);
                    }
//                    redPackWinInviteService.inviteSucceedReward(uid);
                    // redPackWinInviteService.inviteSucceedReward(uid);
                } catch (Exception e) {
                    e.printStackTrace();
                }
fanli/src/main/resource/rocket/consumer.xml
@@ -93,12 +93,12 @@
        </property>
        <property name="subscriptionTable">
            <map>
                <!-- 产生订单,订单到账 -->
                <!-- 产生订单/延时,订单到账 -->
                <entry value-ref="redPackMessageListener">
                    <key>
                        <bean class="com.aliyun.openservices.ons.api.bean.Subscription">
                            <property name="topic" value="TOPIC_ORDER" />
                            <property name="expression" value="orderStatistic||orderFanLiActual" />
                            <property name="expression" value="orderStatistic||orderFanLiActual||orderStatisticDelay||orderFanLiSeparateByOrderNo" />
                        </bean>
                    </key>
                </entry>