admin
2020-04-20 4c28f5670b7d9442136354795f6bee450403b285
任务代码优化
6个文件已修改
290 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/job/order/elme/UpdateElmeOrderJob.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/pdd/UpdatePDDOrderJob.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/taobao/UpdateOrderJob.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/taobao/UpdateTBRelationAndSpecialOrderJob.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/elme/ElmeOrderProcessServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/elme/UpdateElmeOrderJob.java
@@ -8,14 +8,11 @@
import org.springframework.stereotype.Component;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.elme.ElmeOrder;
import com.yeshi.fanli.exception.elme.ElmeOrderException;
import com.yeshi.fanli.service.inter.elme.ElmeOrderProcessService;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.elme.ElmeOrderUtil;
//饿了么爬单,到账
//旧版饿了么到账
@Component
public class UpdateElmeOrderJob {
@@ -24,26 +21,6 @@
    @Resource
    private OrderProcessService orderProcessService;
    /**
     * 更新订单(每天早上凌晨0点,下午4点)
     */
    @Scheduled(cron = "0 0 0,16 * * ? ")
    public void updateOrder() {
        if (!Constant.IS_TASK)
            return;
        try {
            List<ElmeOrder> orderList = ElmeOrderUtil.pullLatest5DayOrder();
            try {
                for (ElmeOrder order : orderList)
                    elmeOrderProcessService.processOrder(order);
            } catch (ElmeOrderException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 每天凌晨过2分到账
    @Scheduled(cron = "0 2 0 * * ? ")
fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java
@@ -6,7 +6,6 @@
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.xxl.job.core.biz.model.ReturnT;
@@ -16,7 +15,6 @@
import com.yeshi.fanli.exception.jd.JDOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.jd.JDOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
fanli/src/main/java/com/yeshi/fanli/job/order/pdd/UpdatePDDOrderJob.java
@@ -6,14 +6,14 @@
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.dto.pdd.PDDOrderResult;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.exception.pdd.PDDOrderException;
import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.cmq.order.PDDOrderCMQManager;
@@ -45,7 +45,7 @@
                /**
                 * 做频率限制
                 */
                String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.PDDOrder, order.getOrderSn() + "" );
                String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.PDDOrder, order.getOrderSn() + "");
                String result = redisManager.getCommonString(key);
                // if (!StringUtil.isNullOrEmpty(result))
                // continue;
@@ -58,12 +58,23 @@
    }
    /**
     * 拼多多订单爬取
     */
    @XxlJob("updatePDDOrderHandler")
    public ReturnT<String> updatePDDOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {// 更新本小时内的单
            updateSoonOrder();
        } else if ("1day".equalsIgnoreCase(param)) {// 爬取最近1天的订单(30分钟一次)
            updateUpdateOrder();
        }
        return ReturnT.SUCCESS;
    }
    /**
     * 快速订单更新(爬取本小时内的单,每分钟一次)
     */
    @Scheduled(cron = "0 0/1 * * * ? ")
    // @Scheduled(cron = "0 0/1 * * * ? ")
    public void updateSoonOrder() {
        if (!Constant.IS_TASK)
            return;
        Date now = null;
        now = PinDuoDuoApiUtil.getSystemTime();
        if (now == null)
@@ -78,10 +89,8 @@
    /**
     * 爬取最近1天的订单(30分钟一次)
     */
    @Scheduled(cron = "0 0/30 * * * ? ")
    // @Scheduled(cron = "0 0/30 * * * ? ")
    public void updateUpdateOrder() {
        if (!Constant.IS_TASK)
            return;
        long endTime = System.currentTimeMillis() - 1000 * 60 * 60L;
        long startTime = System.currentTimeMillis() - 1000 * 60 * 60 * 24L;
        int page = 1;
fanli/src/main/java/com/yeshi/fanli/job/order/taobao/UpdateOrderJob.java
@@ -13,9 +13,10 @@
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.dto.taobao.WeiQuanOrderResult;
import com.yeshi.fanli.entity.bus.user.LostOrder;
import com.yeshi.fanli.entity.bus.user.Order;
@@ -91,9 +92,22 @@
     * @return
     */
    private static List<TaoBaoOrder> getCommonOrder(long startTime, int span) {
        List<TaoBaoOrder> totalList = new ArrayList<>();
        List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, startTime + span * 1000L,
                1);
        return orderList;
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, startTime + span * 1000L, 2);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, startTime + span * 1000L, 3);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        // 移除重复交易号的订单
        return totalList;
    }
    /**
@@ -104,8 +118,21 @@
     * @return
     */
    public static List<TaoBaoOrder> getCommonOrder(long startTime, long endTime) {
        List<TaoBaoOrder> totalList = new ArrayList<>();
        List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 1);
        return orderList;
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 2);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 3);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        // 移除重复交易号的订单
        return totalList;
    }
    /**
@@ -324,78 +351,82 @@
        }
    }
    // 每15分钟爬取一次
    @Scheduled(cron = "0 0/15 * * * ? ")
    public void pullCommonOrder() {
        if (!Constant.IS_TASK)
            return;
        LogHelper.job("正在执行15min订单爬取");
        long currentTime = System.currentTimeMillis() - 1000 * 60;
        String h = TimeUtil.getGernalTime(currentTime, "HH");
        String m = TimeUtil.getGernalTime(currentTime, "mm");
        int mm = Integer.parseInt(h) * 60 + Integer.parseInt(m);
        int pos = mm / 15;
        if (pos >= 90)
            pos = 89;
        long startTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(currentTime, "yyyy-MM-dd"), "yyyy-MM-dd")
                - (1000 * 60 * 60 * 24L * (90 - pos));
        long endTime = startTime + 1000 * 60 * 60 * 24L;
        updateOrder(startTime, endTime);
    @XxlJob("updateTaoBaoCommonOrderHandler")
    public ReturnT<String> updateTaoBaoCommonOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {// 更新近20分钟内的单
            pullLatestCommonOrder();
        } else if ("1day".equalsIgnoreCase(param)) {// 爬取最近1天的订单(30分钟一次)
            pullLatestDayCommonOrder();
        } else if ("3day".equalsIgnoreCase(param)) {
            pullLatest3DayCommonOrder();
        }
        return ReturnT.SUCCESS;
    }
    // 淘宝推广订单 每隔1分执行一次
    @Scheduled(cron = "0 0/1 * * * ? ")
    public void pullLatestCommonOrder() {
        if (!Constant.IS_TASK)
            return;
    private void pullLatestCommonOrder() {
        LogHelper.job("pullLatestCommonOrder");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
        //
        updateOrder(endTime - 1000 * 60 * 20L, endTime);
    }
    // 返利
    @Scheduled(cron = "0 0/5 * * * ? ")
    public void fanli() {
        if (!Constant.IS_TASK)
            return;
    // 爬取最近一天的常规订单(30分钟一次)
    private void pullLatestDayCommonOrder() {
        LogHelper.job("pullLatestCommonOrder");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
        updateOrder(endTime - 1000 * 60 * 60 * 24L, endTime);
    }
    // 爬取最近三天的常规订单(6个小时一次)
    private void pullLatest3DayCommonOrder() {
        LogHelper.job("pullLatestCommonOrder");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
        updateOrder(endTime - 1000 * 60 * 60 * 24 * 3L, endTime);
    }
    // 5分钟执行一次
    @XxlJob("ownBuyFanLiHandler")
    public ReturnT<String> ownBuyFanLi(String param) throws Exception {
        LogHelper.job("处理返利到账前置");
        try {
            doTaoBaoWeiQuanOrder(2);
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        LogHelper.job("开始处理返利");
        orderProcessService.fanli();
        return ReturnT.SUCCESS;
    }
    // 维权订单处理-处理最近60天的
    // 30分钟一次
    @Scheduled(cron = "0 0/30 * * * ? ")
    public void doTaoBaoWeiQuan() {
        if (!Constant.IS_TASK)
            return;
    @XxlJob("taoBaoWeiQuanOrderHandler")
    public ReturnT<String> doTaoBaoWeiQuan(String param) throws Exception {
        LogHelper.job("维权订单爬取");
        doTaoBaoWeiQuanOrder(5);
        return ReturnT.SUCCESS;
    }
    // 处理找回订单
    @XxlJob("doLostOrderHandler")
    public ReturnT<String> doLostOrder(String param) throws Exception {
        if ("fail".equalsIgnoreCase(param)) {// 更新最近的本地单(30分钟更新一次)
            doFailLostOrder();
        } else if ("success".equalsIgnoreCase(param)) {// 处理最近5天的本地订单
            addLostOrder();
        }
        return ReturnT.SUCCESS;
    }
    // 处理订单找回失败的情况 每6个小时执行一次
    @Scheduled(cron = "0 0 0/6 * * ? ")
    public void doFailLostOrder() {
        if (!Constant.IS_TASK)
            return;
    private void doFailLostOrder() {
        LogHelper.job("处理丢失订单自动找回失败的情况");
        lostOrderService.processFail();
    }
    // 每2分钟执行一次
    @Scheduled(cron = "0 0/2 * * * ? ")
    public void addLostOrder() {
        if (!Constant.IS_TASK)
            return;
    private void addLostOrder() {
        LogHelper.job("处理丢失订单");
        List<LostOrder> list = lostOrderService.listByStateAndResultCode(LostOrder.STATE_PASS,
                LostOrder.RESULT_CODE_VERFING, 1, 50);
@@ -413,77 +444,21 @@
            }
    }
    /**
     * 处理淘宝结算订单,30分执行一次
     */
    @Scheduled(cron = "30 0 0/1 * * ? ")
    public void doSettleOrders() {
        if (!Constant.IS_TASK)
            return;
        LogHelper.job("doSettleOrders");
        // 处理3-15天前的订单,每天跑一次
        Calendar ca = Calendar.getInstance();
        int hour = ca.get(Calendar.HOUR_OF_DAY);
        long startTime = TimeUtil.convertToTimeTemp(
                TimeUtil.getGernalTime(ca.getTimeInMillis() - 1000 * 60 * 60 * 24 * 3L, "yyyy-MM-dd"), "yyyy-MM-dd")
                - hour * (1000 * 60 * 60 * 12L);
        long endTime = startTime + 1000 * 60 * 60 * 12L;
        List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 3);
        addOrder(orderList);
    }
    /**
     * 13分钟更新最近2小时的结算数据
     */
    @Scheduled(cron = "0 0/13 * * * ? ")
    public void doSettleOrdersToday() {
        if (!Constant.IS_TASK)
            return;
        LogHelper.job("doSettleOrdersToday");
        // 处理3-15天前的订单,每天跑一次
        Calendar ca = Calendar.getInstance();
        long startTime = ca.getTimeInMillis() - 1000 * 60 * 5L - 1000 * 60 * 60 * 2L;
        long endTime = startTime + 1000 * 60 * 60 * 2L;
        List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 3);
        addOrder(orderList);
    }
    /**
     * 更新本地订单(凌晨25分更新)
     */
    @Scheduled(cron = "25 0 0 * * ? ")
    public void doLocalTaoBaoOrder() {
        if (!Constant.IS_TASK)
            return;
        LogHelper.job("doLocalTaoBaoOrder");
        // 处理3-15天前的订单,每天跑一次
        Long startTime = System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 60L;
        Long endTime = startTime + 1000 * 60 * 60 * 24 * 48L;
        List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndStateAndThirdCrateTime(
                Constant.SOURCE_TYPE_TAOBAO, CommonOrder.STATE_FK, startTime, endTime, 1, 500);
        Set<String> orderIds = new HashSet<>();
        for (CommonOrder co : commonOrderList) {
            orderIds.add(co.getOrderNo());
    // 处理淘宝本地订单
    @XxlJob("doLocalTaoBaoOrder")
    public ReturnT<String> updatePDDOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {// 更新最近的本地单(30分钟更新一次)
            doLatestLocalTaoBaoOrder();
        } else if ("5day".equalsIgnoreCase(param)) {// 处理最近5天的本地订单
            doLatest5DayLocalTaoBaoOrder();
        }
        for (Iterator<String> its = orderIds.iterator(); its.hasNext();) {
            String orderId = its.next();
            List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
            Map<String, List<TaoBaoOrder>> orders = new HashMap<>();
            orders.put(orderId, orderList);
            orderProcessService.processOrder(orders);
        }
        return ReturnT.SUCCESS;
    }
    /**
     * 更新最近的本地单(30分钟更新一次)
     */
    @Scheduled(cron = "0 0/30 * * * ? ")
    public void doLatestLocalTaoBaoOrder() {
        if (!Constant.IS_TASK)
            return;
    private void doLatestLocalTaoBaoOrder() {
        Long endTime = System.currentTimeMillis() - 1000 * 60 * 10L;
        Long startTime = endTime - 1000 * 60 * 60 * 12L;
        updateLocalTaoBaoOrder(startTime, endTime, 1, 2000);
@@ -492,10 +467,7 @@
    /**
     * 处理最近5天的本地订单
     */
    @Scheduled(cron = "30 13 3 * * ? ")
    public void doLatest5DayLocalTaoBaoOrder() {
        if (!Constant.IS_TASK)
            return;
    private void doLatest5DayLocalTaoBaoOrder() {
        LogHelper.job("doLatest5DayLocalTaoBaoOrder");
        Long endTime = System.currentTimeMillis() - 1000 * 60 * 60 * 12L;
        Long startTime = endTime - 1000 * 60 * 60 * 24 * 5L;
@@ -507,13 +479,9 @@
        }
    }
    /**
     * 处理上月订单成功
     */
    @Scheduled(cron = "0 0 12 25 * ? ")
    public void doSellerNotPayOrder() {
        if (!Constant.IS_TASK)
            return;
    // 淘宝商家跑路订单 每月25号12点处理上月的
    @XxlJob("doTaoBaoSellerNotPayOrderHandler")
    public ReturnT<String> doSellerNotPayOrder(String param) throws Exception {
        LogHelper.job("doSellerNotPayOrder");
        Calendar calender = Calendar.getInstance();
        long endTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(calender.getTimeInMillis(), "yyyy-MM"),
@@ -532,6 +500,7 @@
                } catch (Exception e) {
                    LogHelper.errorDetailInfo(e);
                }
        return ReturnT.SUCCESS;
    }
}
fanli/src/main/java/com/yeshi/fanli/job/order/taobao/UpdateTBRelationAndSpecialOrderJob.java
@@ -10,6 +10,8 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
@@ -107,7 +109,8 @@
                while (its.hasNext()) {
                    String key = its.next();
                    List<TaoBaoOrder> orders = map.get(key);
                    String redisKey = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrderQueue, TaoBaoOrderUtil.getOrderDataHashCode(orders));
                    String redisKey = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrderQueue,
                            TaoBaoOrderUtil.getOrderDataHashCode(orders));
                    // redis做频率限制
                    try {
                        if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(redisKey))) {
@@ -139,12 +142,18 @@
        }
    }
    @XxlJob("updateTBRelationAndSpecialOrderHandler")
    public ReturnT<String> updateTBRelationAndSpecialOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {//  爬取近20分钟的数据
            doJob1();
        } else if ("1day".equalsIgnoreCase(param)) {// 每5分钟更新(近1天数据)
            doJob2();
        }
        return ReturnT.SUCCESS;
    }
    // 每30s爬取一次
    @Scheduled(cron = "0/30 * * * * ? ")
    public void doJob1() {
        if (!Constant.IS_TASK)
            return;
        // 爬取近20分钟的数据
        LogHelper.job("爬单:30s爬取一次单");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
@@ -154,10 +163,7 @@
    }
    // 每5分钟更新(近1天数据)
    @Scheduled(cron = "0 0/5 * * * ? ")
    public void doJob2() {
        if (!Constant.IS_TASK)
            return;
        LogHelper.job("爬单:5min爬取一次单");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
fanli/src/main/java/com/yeshi/fanli/service/impl/elme/ElmeOrderProcessServiceImpl.java
@@ -24,7 +24,6 @@
import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.elme.ElmeOrderUtil;