admin
2019-07-22 b4b421ba6b85b586f9b8171c876f716bab9840d0
增加新订单处理队列
8个文件已修改
166 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/admin/UploadController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserOrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/UpdateCommonOrderJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/UpdateOrderJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/UpdateRelationAndSpecialOrderJob.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/CMQManager.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/UploadController.java
@@ -161,7 +161,7 @@
                        }
                    }
                    CMQManager.getInstance().addTaoBaoOrderMsg(key, orders);
                    CMQManager.getInstance().addTaoBaoOrderMsg(key);
                    try {
                        // 6小时内不再处理
                        if (Constant.IS_OUTNET) {
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserOrderController.java
@@ -498,7 +498,7 @@
                            try {
                                isS = orderService.addOrder(or);
                                if (isS) {
                                    CMQManager.getInstance().addTaoBaoOrderMsg(order, orderList);
                                    CMQManager.getInstance().addTaoBaoOrderMsg(order);
                                    // 加入到LostOrder
                                    LostOrder lo = new LostOrder();
                                    lo.setCreateTime(System.currentTimeMillis());
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java
@@ -169,7 +169,7 @@
        List<TaoBaoGoodsBrief> list = tljBuyGoodsService.listPreGoods(1);
        Collections.shuffle(list);
        if (list.size() > 20)
            list = list.subList(0, 1);
            list = list.subList(0, 20);
        addTLJBuyGoods(list, day);
    }
fanli/src/main/java/com/yeshi/fanli/job/UpdateCommonOrderJob.java
@@ -160,7 +160,7 @@
                    }
                    CMQManager.getInstance().addTaoBaoOrderMsg(key, orders);
                    CMQManager.getInstance().addTaoBaoOrderMsg(key);
                    try {
                        // 6小时内不再处理
fanli/src/main/java/com/yeshi/fanli/job/UpdateOrderJob.java
@@ -324,7 +324,7 @@
                    }
                    CMQManager.getInstance().addTaoBaoOrderMsg(key, orders);
                    CMQManager.getInstance().addTaoBaoOrderMsg(key);
                    try {
                        // 6小时内不再处理
fanli/src/main/java/com/yeshi/fanli/job/UpdateRelationAndSpecialOrderJob.java
@@ -16,6 +16,7 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil;
@@ -53,6 +54,12 @@
            list.addAll(list2);
        if (list3 != null && list3.size() > 0)
            list.addAll(list3);
        // 爬取到的订单号
        if (list != null)
            for (TaoBaoOrder order : list) {
                LogHelper.orderInfo("爬取到的订单号:" + order.getOrderId());
            }
        addRelationAndSpecialOrder(list);
    }
@@ -81,7 +88,13 @@
                    }
                    CMQManager.getInstance().addTaoBaoOrderMsg(key, orders);
                    LogHelper.orderInfo("添加到队列:" + key);
                    if (orders != null && orders.size() > 0 && System.currentTimeMillis()
                            - TimeUtil.convertToTimeTemp(orders.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss") < 1000
                                    * 60 * 10L)// 10分钟内产生的单作为新订单处理
                        CMQManager.getInstance().addTaoBaoNewOrderMsg(key);
                    else
                        CMQManager.getInstance().addTaoBaoOrderMsg(key);
                    try {
                        // 20分钟内不再处理
@@ -102,6 +115,7 @@
        if (!Constant.IS_TASK)
            return;
        // 爬取近20分钟的数据
        LogHelper.orderInfo("爬单:30s爬取一次单");
        long endTime = System.currentTimeMillis();
        updateRelationAndSpecialOrder(endTime - 1000 * 60 * 20L, endTime);
    }
fanli/src/main/java/com/yeshi/fanli/util/CMQManager.java
@@ -1,8 +1,7 @@
package com.yeshi.fanli.util;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -11,7 +10,6 @@
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.qcloud.cmq.Message;
import com.yeshi.fanli.dto.HongBao;
import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo;
@@ -19,10 +17,7 @@
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.push.PushQueueRecord;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import net.sf.json.JSONObject;
public class CMQManager {
    private static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25";
@@ -31,6 +26,10 @@
    private static CMQUtil cmqUtil;
    // TODO 订单处理队列
    public static String QUEUENAME_ORDER = "fanli-orders";
    // 刚刚产生的订单处理队列
    public static String QUEUENAME_NEW_ORDER = "fanli-new-orders";
    // 提现结果处理队列
    public static String EXTRACT_RESULT = "extract-result";
    // TODO IOS推送队列
@@ -53,6 +52,7 @@
        if (Constant.IS_TEST) {
            QUEUENAME_ORDER = "test-" + QUEUENAME_ORDER;
            QUEUENAME_NEW_ORDER = "test-" + QUEUENAME_NEW_ORDER;
            EXTRACT_RESULT = "test-" + EXTRACT_RESULT;
            PUSH_IOS = "test-" + PUSH_IOS;
            FANLI_ORDER = "test-" + FANLI_ORDER;
@@ -62,6 +62,7 @@
        }
        QUEUENAME_ORDER += "-" + Constant.systemCommonConfig.getProjectName();
        QUEUENAME_NEW_ORDER += "-" + Constant.systemCommonConfig.getProjectName();
        EXTRACT_RESULT += "-" + Constant.systemCommonConfig.getProjectName();
        PUSH_IOS += "-" + Constant.systemCommonConfig.getProjectName();
        FANLI_ORDER += "-" + Constant.systemCommonConfig.getProjectName();
@@ -72,6 +73,7 @@
        cmqUtil = CMQUtil.getInstance(secretId, secretKey);
        // 最大消息为1M
        cmqUtil.createQueue(QUEUENAME_ORDER, 1024 * 1024);
        cmqUtil.createQueue(QUEUENAME_NEW_ORDER, 1024 * 1024);
        cmqUtil.createQueue(EXTRACT_RESULT);
        cmqUtil.createQueue(PUSH_IOS);
        cmqUtil.createQueue(FANLI_ORDER);
@@ -92,11 +94,9 @@
     * 
     * @param orderMap
     */
    public void addTaoBaoOrderMsg(String orderId, List<TaoBaoOrder> orderList) {
        if (!StringUtil.isNullOrEmpty(orderId) && orderList != null && orderList.size() > 0) {
            JSONObject item = new JSONObject();
            item.put(orderId, new GsonBuilder().create().toJson(orderList));
            cmqUtil.sendMsg(QUEUENAME_ORDER, item.toString());
    public void addTaoBaoOrderMsg(String orderId) {
        if (!StringUtil.isNullOrEmpty(orderId)) {
            cmqUtil.sendMsg(QUEUENAME_ORDER, orderId);
        }
    }
@@ -105,27 +105,18 @@
     * 
     * @param count
     */
    @SuppressWarnings("unchecked")
    public Map<String, List<TaoBaoOrder>> consumeTaoBaoOrderMsg(int count) {
    public List<String> consumeTaoBaoOrderMsg(int count) {
        List<String> resultList = new ArrayList<>();
        List<Message> list = cmqUtil.recieveMsg(count, QUEUENAME_ORDER);
        Map<String, List<TaoBaoOrder>> map = new HashMap<>();
        if (list != null)
            for (Message msg : list) {
                String result = msg.msgBody;
                JSONObject data = JSONObject.fromObject(result);
                Iterator<String> its = data.keySet().iterator();
                if (its.hasNext()) {
                    String orderId = its.next();
                    Type type = new TypeToken<List<TaoBaoOrder>>() {
                    }.getType();
                    List<TaoBaoOrder> orderList = new Gson().fromJson(data.optJSONArray(orderId).toString(), type);
                    map.put(orderId, orderList);
                }
                resultList.add(result);
                // 删除消息
                cmqUtil.deleteMsg(QUEUENAME_ORDER, msg.receiptHandle);
            }
        return map;
        return resultList;
    }
    /**
@@ -134,7 +125,46 @@
     * @param receiptHandle
     */
    public void deleteTaoBaoOrderMsg(String receiptHandle) {
        cmqUtil.deleteMsg(EXTRACT_RESULT, receiptHandle);
        cmqUtil.deleteMsg(QUEUENAME_ORDER, receiptHandle);
    }
    /**
     * 发送订单消息(刚刚产生的订单)
     *
     * @param orderMap
     */
    public void addTaoBaoNewOrderMsg(String orderId) {
        if (!StringUtil.isNullOrEmpty(orderId)) {
            cmqUtil.sendMsg(QUEUENAME_NEW_ORDER, orderId);
        }
    }
    /**
     * 消费淘宝订单消息(刚刚产生的订单)
     *
     * @param count
     */
    public List<String> consumeTaoBaoNewOrderMsg(int count) {
        List<String> resultList = new ArrayList<>();
        List<Message> list = cmqUtil.recieveMsg(count, QUEUENAME_NEW_ORDER);
        if (list != null)
            for (Message msg : list) {
                String result = msg.msgBody;
                resultList.add(result);
                // 删除消息
                cmqUtil.deleteMsg(QUEUENAME_NEW_ORDER, msg.receiptHandle);
            }
        return resultList;
    }
    /**
     * 删除淘宝订单消息(刚刚产生的订单)
     *
     * @param receiptHandle
     */
    public void deleteTaoBaoNewOrderMsg(String receiptHandle) {
        cmqUtil.deleteMsg(QUEUENAME_NEW_ORDER, receiptHandle);
    }
    /**
fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.util;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -12,6 +13,7 @@
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.yeshi.utils.NumberUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import org.yeshi.utils.tencentcloud.entity.COSInitParams;
@@ -108,6 +110,7 @@
        if (Constant.IS_TASK) {
            doExtractResult();// 处理提现结果
            doTaoBaoOrders();// 处理淘宝订单
            doTaoBaoNewOrders();// 处理淘宝订单(刚刚产生的)
            doOrderFanLiNew();// 新版返利
            doOrderTiChengFanLi();// 处理订单提成返利
            doWeiQuanOrder();// 处理维权订单
@@ -185,16 +188,58 @@
                    while (true) {
                        try {
                            // 取16个订单
                            Map<String, List<TaoBaoOrder>> map = CMQManager.getInstance().consumeTaoBaoOrderMsg(16);
                            if (map != null) {
                                // 从库里面查询
                                Iterator<String> its = map.keySet().iterator();
                                while (its.hasNext()) {
                                    String orderId = its.next();
                            List<String> orderIds = CMQManager.getInstance().consumeTaoBaoOrderMsg(16);
                            Map<String, List<TaoBaoOrder>> map = new HashMap<>();
                            if (orderIds != null) {
                                for (String orderId : orderIds) {
                                    if (NumberUtil.isNumeric(orderId.trim())) {
                                        List<TaoBaoOrder> orderList = taoBaoOrderService
                                                .getTaoBaoOrderByOrderId(orderId);
                                        map.put(orderId, orderList);
                                        LogHelper.orderInfo("开始处理订单:" + orderId);
                                        orderProcessService.processOrder(map);
                                        LogHelper.orderInfo("结束处理订单:" + orderId);
                                    }
                                }
                            }
                        } catch (Exception e) {
                            try {
                                LogHelper.errorDetailInfo(e);
                            } catch (Exception e1) {
                            }
                        }
                    }
                }
            });
        }
    }
    /**
     * 刚刚产生的订单
     */
    public void doTaoBaoNewOrders() {
        // 同时开启3个线程处理
        for (int i = 0; i < 1; i++) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            // 取16个订单
                            List<String> orderIds = CMQManager.getInstance().consumeTaoBaoNewOrderMsg(16);
                            Map<String, List<TaoBaoOrder>> map = new HashMap<>();
                            if (orderIds != null) {
                                for (String orderId : orderIds) {
                                    List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
                                    map.put(orderId, orderList);
                                    LogHelper.orderInfo("新订单-开始处理订单:" + orderId);
                                    long startTime = System.currentTimeMillis();
                                    orderProcessService.processOrder(map);
                                    LogHelper.orderInfo("新订单-结束处理订单:" + orderId + "-  处理时间:"
                                            + (System.currentTimeMillis() - startTime));
                                }
                                orderProcessService.processOrder(map);
                            }
                        } catch (Exception e) {
                            try {
@@ -384,7 +429,6 @@
        boutiqueAutoRuleService.startScheduler();
    }
    /**
     * 更新精选库商品
     */