admin
2020-11-20 8195b07c17d900603757253d4d5fad875e4e0858
支付宝调整
9个文件已修改
1491 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/job/order/taobao/UpdateOrderJob.java 816 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/tb/TaoBaoOrderServiceImpl.java 411 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderProcessService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/tb/TaoBaoOrderService.java 225 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/env-dev/constant.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/taobao/UpdateOrderJob.java
@@ -47,473 +47,481 @@
@Component
public class UpdateOrderJob {
    public UpdateOrderJob() {
        System.out.println("初始化:UpdateOrderJob");
    }
    public UpdateOrderJob() {
        System.out.println("初始化:UpdateOrderJob");
    }
    @Resource
    private OrderProcessService orderProcessService;
    @Resource
    private OrderProcessService orderProcessService;
    @Resource
    private TaoBaoOrderService taoBaoOrderService;
    @Resource
    private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
    @Resource
    private TaoBaoOrderUtil taoBaoOrderUtil;
    @Resource
    private RedisManager redisManager;
    @Resource
    private TaoBaoOrderService taoBaoOrderService;
    @Resource
    private LostOrderService lostOrderService;
    @Resource
    private TaoBaoUnionConfigService taoBaoUnionConfigService;
    @Resource
    private OrderService orderService;
    @Resource
    private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
    @Resource
    private CommonOrderService commonOrderService;
    @Resource
    private DataMonitorService dataMonitorService;
    @Resource
    private RedisManager redisManager;
    /**
     * 新版获取普通订单
     *
     * @param startTime
     * @param span
     * @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);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
    @Resource
    private LostOrderService lostOrderService;
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, startTime + span * 1000L, 2);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
    @Resource
    private OrderService orderService;
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, startTime + span * 1000L, 3);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        // 移除重复交易号的订单
    @Resource
    private CommonOrderService commonOrderService;
        return totalList;
    }
    @Resource
    private OrderMoneySettleService orderMoneySettleService;
    /**
     * 获取某个区间段的订单
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static List<TaoBaoOrder> getCommonOrder(long startTime, long endTime) {
        List<TaoBaoOrder> totalList = new ArrayList<>();
        List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 1);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
    /**
     * 新版获取普通订单
     *
     * @param startTime
     * @param span
     * @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);
        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, startTime + span * 1000L, 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);
        // 移除重复交易号的订单
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, startTime + span * 1000L, 3);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        // 移除重复交易号的订单
        return totalList;
    }
        return totalList;
    }
    /**
     * 按天获取普通订单(新版)
     *
     * @param date
     * @return
     */
    public List<TaoBaoOrder> getCommonOrderByDay(Date date) {
        List<TaoBaoOrder> orderList = new ArrayList<>();
        // 将一天分成12段
        for (int i = 0; i < 72; i++) {
            List<TaoBaoOrder> tempOrderList = getCommonOrder(date.getTime() + 1000 * 60 * 20L * i, 1200);
            if (tempOrderList != null && tempOrderList.size() > 0)
                orderList.addAll(tempOrderList);
        }
        return orderList;
    }
    /**
     * 获取某个区间段的订单
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static List<TaoBaoOrder> getCommonOrder(long startTime, long endTime) {
        List<TaoBaoOrder> totalList = new ArrayList<>();
        List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 1);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
    public void updateOrder(long startTime, long endTime) {
        List<TaoBaoOrder> orderList = getCommonOrder(startTime, endTime);
        LogHelper.orderInfo("常规订单共有订单:" + orderList.size());
        addOrder(orderList);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 2);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
    public static List<TaoBaoOrder> mixTaoBaoOrder(List<TaoBaoOrder> commonOrderList, List<TaoBaoOrder> sorderList) {
        Map<String, List<TaoBaoOrder>> commonMap = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(commonOrderList);
        Map<String, List<TaoBaoOrder>> sMap = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(sorderList);
        // 获取订单交集
        Iterator<String> its = commonMap.keySet().iterator();
        List<String> commonOrderIdList = new ArrayList<>();
        List<String> sOrderIdList = new ArrayList<>();
        while (its.hasNext()) {
            String orderId = its.next();
            commonOrderIdList.add(orderId);
        }
        its = sMap.keySet().iterator();
        while (its.hasNext()) {
            String orderId = its.next();
            sOrderIdList.add(orderId);
        }
        orderList = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(startTime, endTime, 3);
        if (orderList != null && orderList.size() > 0)
            totalList.addAll(orderList);
        // 移除重复交易号的订单
        // 求交集
        commonOrderIdList.retainAll(sOrderIdList);
        return totalList;
    }
        List<TaoBaoOrder> orderList = new ArrayList<>();
    /**
     * 按天获取普通订单(新版)
     *
     * @param date
     * @return
     */
    public List<TaoBaoOrder> getCommonOrderByDay(Date date) {
        List<TaoBaoOrder> orderList = new ArrayList<>();
        // 将一天分成12段
        for (int i = 0; i < 72; i++) {
            List<TaoBaoOrder> tempOrderList = getCommonOrder(date.getTime() + 1000 * 60 * 20L * i, 1200);
            if (tempOrderList != null && tempOrderList.size() > 0)
                orderList.addAll(tempOrderList);
        }
        return orderList;
    }
        for (String orderId : commonOrderIdList) {
            List<TaoBaoOrder> list = commonMap.get(orderId);
            String specialId = sMap.get(orderId).get(0).getSpecialId();
            String relationId = sMap.get(orderId).get(0).getRelationId();
            for (TaoBaoOrder to : list) {
                to.setSpecialId(specialId);
                to.setRelationId(relationId);
                orderList.add(to);
            }
        }
    public void updateOrder(long startTime, long endTime) {
        List<TaoBaoOrder> orderList = getCommonOrder(startTime, endTime);
        LogHelper.orderInfo("常规订单共有订单:" + orderList.size());
        addOrder(orderList);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
        return orderList;
    }
    public static List<TaoBaoOrder> mixTaoBaoOrder(List<TaoBaoOrder> commonOrderList, List<TaoBaoOrder> sorderList) {
        Map<String, List<TaoBaoOrder>> commonMap = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(commonOrderList);
        Map<String, List<TaoBaoOrder>> sMap = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(sorderList);
        // 获取订单交集
        Iterator<String> its = commonMap.keySet().iterator();
        List<String> commonOrderIdList = new ArrayList<>();
        List<String> sOrderIdList = new ArrayList<>();
        while (its.hasNext()) {
            String orderId = its.next();
            commonOrderIdList.add(orderId);
        }
        its = sMap.keySet().iterator();
        while (its.hasNext()) {
            String orderId = its.next();
            sOrderIdList.add(orderId);
        }
    public void addOrder(List<TaoBaoOrder> orderList) {
        // 求交集
        commonOrderIdList.retainAll(sOrderIdList);
        if (orderList != null)
            for (int i = 0; i < orderList.size(); i++) {
                LogHelper.orderInfo("常规订单爬取:" + orderList.get(i).getOrderId());
                // 移除会员运营ID与渠道专属订单
                if (orderList.get(i).getAdPositionName().contains("会员运营")
                        || orderList.get(i).getAdPositionName().contains("渠道专属")) {
                    if (orderList.get(i).getAdPositionName().contains("会员运营")) {// 处理订单申诉
                        Order order = orderService.findOrderByOrderIdAndType(orderList.get(i).getOrderId(),
                                Order.ORDER_TYPE_TAOBAO);
                        if (order != null && order.getBeizhu().contains("补单")) {// 不排除补单的情况
        List<TaoBaoOrder> orderList = new ArrayList<>();
                        } else {
                            orderList.remove(i);
                            i--;
                            break;
                        }
                    } else {
                        orderList.remove(i);
                        i--;
                    }
                }
            }
        for (String orderId : commonOrderIdList) {
            List<TaoBaoOrder> list = commonMap.get(orderId);
            String specialId = sMap.get(orderId).get(0).getSpecialId();
            String relationId = sMap.get(orderId).get(0).getRelationId();
            for (TaoBaoOrder to : list) {
                to.setSpecialId(specialId);
                to.setRelationId(relationId);
                orderList.add(to);
            }
        }
        try {
            taoBaoOrderService.addTaoBaoOrderList(orderList);
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        return orderList;
    }
        try {
            Map<String, List<TaoBaoOrder>> map = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(orderList);
            if (map != null) {
                Iterator<String> its = map.keySet().iterator();
                while (its.hasNext()) {
                    String key = its.next();
                    String redisKey = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrderQueue, key);
                    // redis做频率限制
                    try {
                        if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(redisKey))) {
                            continue;
                        }
    public void addOrder(List<TaoBaoOrder> orderList) {
                    } catch (Exception e) {
        if (orderList != null)
            for (int i = 0; i < orderList.size(); i++) {
                LogHelper.orderInfo("常规订单爬取:" + orderList.get(i).getOrderId());
                // 移除会员运营ID与渠道专属订单
                if (orderList.get(i).getAdPositionName().contains("会员运营")
                        || orderList.get(i).getAdPositionName().contains("渠道专属")) {
                    if (orderList.get(i).getAdPositionName().contains("会员运营")) {// 处理订单申诉
                        Order order = orderService.findOrderByOrderIdAndType(orderList.get(i).getOrderId(),
                                Order.ORDER_TYPE_TAOBAO);
                        if (order != null && order.getBeizhu().contains("补单")) {// 不排除补单的情况
                    }
                        } else {
                            orderList.remove(i);
                            i--;
                            break;
                        }
                    } else {
                        orderList.remove(i);
                        i--;
                    }
                }
            }
                    CMQManager.getInstance().addTaoBaoOrderMsg(key);
        try {
            taoBaoOrderService.addTaoBaoOrderList(orderList);
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
                    try {
                        // 6小时内不再处理
                        redisManager.cacheCommonString(redisKey, "1", 60 * 60 * 6);
                    } catch (Exception e) {
        try {
            Map<String, List<TaoBaoOrder>> map = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(orderList);
            if (map != null) {
                Iterator<String> its = map.keySet().iterator();
                while (its.hasNext()) {
                    String key = its.next();
                    String redisKey = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrderQueue, key);
                    // redis做频率限制
                    try {
                        if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(redisKey))) {
                            continue;
                        }
                    }
                }
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
    }
                    } catch (Exception e) {
    private void doTaoBaoWeiQuanOrder(int day) {
                    }
        for (int i = 0; i < day; i++) {
            List<TaoBaoWeiQuanOrder> orderList = new ArrayList<>();
                    CMQManager.getInstance().addTaoBaoOrderMsg(key);
            // 按照维权发起时间查询
            WeiQuanOrderResult result = TaoKeOrderApiUtil
                    .getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                            TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                            "yyyy-MM-dd")), 1, 1, false);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 1, 1, true);
            orderList.addAll(result.orderList);
                    try {
                        // 6小时内不再处理
                        redisManager.cacheCommonString(redisKey, "1", 60 * 60 * 6);
                    } catch (Exception e) {
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 1, 1, false);
            orderList.addAll(result.orderList);
                    }
                }
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
    }
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 1, 1, true);
            orderList.addAll(result.orderList);
    private void doTaoBaoWeiQuanOrder(int day) {
            /**
             * 按照维权完成时间查询
             */
        for (int i = 0; i < day; i++) {
            List<TaoBaoWeiQuanOrder> orderList = new ArrayList<>();
            result = TaoKeOrderApiUtil.getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, false);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, true);
            orderList.addAll(result.orderList);
            // 按照维权发起时间查询
            WeiQuanOrderResult result = TaoKeOrderApiUtil
                    .getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                            TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                            "yyyy-MM-dd")), 1, 1, false);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 1, 1, true);
            orderList.addAll(result.orderList);
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, false);
            orderList.addAll(result.orderList);
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 1, 1, false);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 1, 1, true);
            orderList.addAll(result.orderList);
            /**
             * 按照维权完成时间查询
             */
            result = TaoKeOrderApiUtil.getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, false);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoSpecialWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, true);
            orderList.addAll(result.orderList);
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, false);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, true);
            orderList.addAll(result.orderList);
            // 第三方
            result = TaoKeOrderApiUtil.getTaoBaoRelationWeiQuanOrderList(new Date(TimeUtil.convertToTimeTemp(
                    TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * i, "yyyy-MM-dd"),
                    "yyyy-MM-dd")), 3, 1, true);
            orderList.addAll(result.orderList);
            for (TaoBaoWeiQuanOrder order : orderList)
                taoBaoWeiQuanOrderService.addWeiQuanOrder(order);// 添加维权订单到数据库
            // 处理维权订单
            orderProcessService.weiQuanOrder(orderList);
        }
            for (TaoBaoWeiQuanOrder order : orderList)
                taoBaoWeiQuanOrderService.addWeiQuanOrder(order);// 添加维权订单到数据库
            // 处理维权订单
            orderProcessService.weiQuanOrder(orderList);
        }
    }
    }
    public void updateLocalTaoBaoOrder(Long startTime, Long endTime, int page, int count) {
        List<TaoBaoOrder> list = taoBaoOrderService.listBySettlementTime(startTime, endTime, page, count);
        Set<String> orderIds = new HashSet<>();
        for (TaoBaoOrder co : list) {
            orderIds.add(co.getOrderId());
        }
        for (Iterator<String> its = orderIds.iterator(); its.hasNext(); ) {
            String orderId = its.next();
            // 查询是否有处于订单付款状态的单
            List<CommonOrder> commonOrderList = commonOrderService
                    .listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO, orderId);
            boolean update = false;
            if (commonOrderList != null)
                for (CommonOrder co : commonOrderList) {
                    if (co.getState() == CommonOrder.STATE_FK && co.getPayment().compareTo(new BigDecimal(0)) > 0) {
                        update = true;
                        break;
                    }
                }
            if (update) {
                List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
                Map<String, List<TaoBaoOrder>> orders = new HashMap<>();
                orders.put(orderId, orderList);
                orderProcessService.processOrder(orders);
            }
        }
    }
    public void updateLocalTaoBaoOrder(Long startTime, Long endTime, int page, int count) {
        List<TaoBaoOrder> list = taoBaoOrderService.listBySettlementTime(startTime, endTime, page, count);
        Set<String> orderIds = new HashSet<>();
        for (TaoBaoOrder co : list) {
            orderIds.add(co.getOrderId());
        }
        for (Iterator<String> its = orderIds.iterator(); its.hasNext();) {
            String orderId = its.next();
            // 查询是否有处于订单付款状态的单
            List<CommonOrder> commonOrderList = commonOrderService
                    .listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO, orderId);
            boolean update = false;
            if (commonOrderList != null)
                for (CommonOrder co : commonOrderList) {
                    if (co.getState() == CommonOrder.STATE_FK && co.getPayment().compareTo(new BigDecimal(0)) > 0) {
                        update = true;
                        break;
                    }
                }
            if (update) {
                List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
                Map<String, List<TaoBaoOrder>> orders = new HashMap<>();
                orders.put(orderId, orderList);
                orderProcessService.processOrder(orders);
            }
        }
    }
    @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;
    }
    @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分执行一次
    private void pullLatestCommonOrder() {
        LogHelper.job("pullLatestCommonOrder");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
        updateOrder(endTime - 1000 * 60 * 20L, endTime);
    }
    /**
     * 处理淘宝订单
     *
     * @param param 订单号
     * @return
     * @throws Exception
     */
    @XxlJob("processTaoBaoOrder")
    public ReturnT<String> processTaoBaoOrder(String param) throws Exception {
        String[] orderIds = param.split(",");
        if (orderIds == null || orderIds.length == 0)
            throw new Exception("订单不存在");
    // 爬取最近一天的常规订单(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);
    }
        for (String orderId : orderIds) {
            List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
            if (orderList == null || orderList.size() == 0)
                continue;
            orderProcessService.processOrder(TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(orderList));
        }
        return ReturnT.SUCCESS;
    }
    // 爬取最近三天的常规订单(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);
    }
    // 淘宝推广订单 每隔1分执行一次
    private void pullLatestCommonOrder() {
        LogHelper.job("pullLatestCommonOrder");
        Date systemDate = TaoKeApiUtil.getTaoBaoSystemTime();
        long endTime = systemDate != null ? systemDate.getTime() : System.currentTimeMillis();
        updateOrder(endTime - 1000 * 60 * 20L, 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;
    }
    // 爬取最近一天的常规订单(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);
    }
    @XxlJob("taoBaoWeiQuanOrderHandler")
    public ReturnT<String> doTaoBaoWeiQuan(String param) throws Exception {
        LogHelper.job("维权订单爬取");
        doTaoBaoWeiQuanOrder(5);
        return ReturnT.SUCCESS;
    }
    // 爬取最近三天的常规订单(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);
    }
    // 处理找回订单
    @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;
    }
    // 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;
    }
    // 处理订单找回失败的情况 每6个小时执行一次
    private void doFailLostOrder() {
        LogHelper.job("处理丢失订单自动找回失败的情况");
        lostOrderService.processFail();
    }
    @XxlJob("taoBaoWeiQuanOrderHandler")
    public ReturnT<String> doTaoBaoWeiQuan(String param) throws Exception {
        LogHelper.job("维权订单爬取");
        doTaoBaoWeiQuanOrder(5);
        return ReturnT.SUCCESS;
    }
    // 每2分钟执行一次
    private void addLostOrder() {
        LogHelper.job("处理丢失订单");
        List<LostOrder> list = lostOrderService.listByStateAndResultCode(LostOrder.STATE_PASS,
                LostOrder.RESULT_CODE_VERFING, 1, 50);
        if (list != null)
            for (LostOrder lo : list) {
                List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderService.getTaoBaoOrderByOrderId(lo.getOrderId());
                // 清除频率限制
                if (taoBaoOrderList != null && taoBaoOrderList.size() > 0) {
                    String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrderQueue, lo.getOrderId());
    // 处理找回订单
    @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;
    }
                    redisManager.removeCommonString(key);
                    addOrder(taoBaoOrderList);
                    LogHelper.test("自动处理淘宝订单:" + lo.getOrderId());
                }
            }
    }
    // 处理订单找回失败的情况 每6个小时执行一次
    private void doFailLostOrder() {
        LogHelper.job("处理丢失订单自动找回失败的情况");
        lostOrderService.processFail();
    }
    // 处理淘宝本地订单
    @XxlJob("doLocalTaoBaoOrder")
    public ReturnT<String> updatePDDOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {// 更新最近的本地单(30分钟更新一次)
            doLatestLocalTaoBaoOrder();
        } else if ("5day".equalsIgnoreCase(param)) {// 处理最近5天的本地订单
            doLatest5DayLocalTaoBaoOrder();
        }
        return ReturnT.SUCCESS;
    }
    // 每2分钟执行一次
    private void addLostOrder() {
        LogHelper.job("处理丢失订单");
        List<LostOrder> list = lostOrderService.listByStateAndResultCode(LostOrder.STATE_PASS,
                LostOrder.RESULT_CODE_VERFING, 1, 50);
        if (list != null)
            for (LostOrder lo : list) {
                List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderService.getTaoBaoOrderByOrderId(lo.getOrderId());
                // 清除频率限制
                if (taoBaoOrderList != null && taoBaoOrderList.size() > 0) {
                    String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrderQueue, lo.getOrderId());
                    redisManager.removeCommonString(key);
                    addOrder(taoBaoOrderList);
                    LogHelper.test("自动处理淘宝订单:" + lo.getOrderId());
                }
            }
    }
    @XxlJob("order-updateTaoBaoOrderByOrderId")
    public ReturnT<String> updateTaoBaoOrderByOrderId(String param) throws Exception {
        List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(param);
        Map<String, List<TaoBaoOrder>> orders = new HashMap<>();
        orders.put(param, orderList);
        orderProcessService.processOrder(orders);
        return ReturnT.SUCCESS;
    }
    // 处理淘宝本地订单
    @XxlJob("doLocalTaoBaoOrder")
    public ReturnT<String> updatePDDOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {// 更新最近的本地单(30分钟更新一次)
            doLatestLocalTaoBaoOrder();
        } else if ("5day".equalsIgnoreCase(param)) {// 处理最近5天的本地订单
            doLatest5DayLocalTaoBaoOrder();
        }
        return ReturnT.SUCCESS;
    }
    @XxlJob("order-updateTaoBaoOrderByOrderId")
    public ReturnT<String> updateTaoBaoOrderByOrderId(String param) throws Exception {
        List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(param);
        Map<String, List<TaoBaoOrder>> orders = new HashMap<>();
        orders.put(param, orderList);
        orderProcessService.processOrder(orders);
        return ReturnT.SUCCESS;
    }
    /**
     * 更新最近的本地单(30分钟更新一次)
     */
    private void doLatestLocalTaoBaoOrder() {
        Long endTime = System.currentTimeMillis() - 1000 * 60 * 10L;
        Long startTime = endTime - 1000 * 60 * 60 * 12L;
        updateLocalTaoBaoOrder(startTime, endTime, 1, 2000);
    }
    /**
     * 更新最近的本地单(30分钟更新一次)
     */
    private void doLatestLocalTaoBaoOrder() {
        Long endTime = System.currentTimeMillis() - 1000 * 60 * 10L;
        Long startTime = endTime - 1000 * 60 * 60 * 12L;
        updateLocalTaoBaoOrder(startTime, endTime, 1, 2000);
    }
    /**
     * 处理最近5天的本地订单
     */
    private void doLatest5DayLocalTaoBaoOrder() {
        LogHelper.job("doLatest5DayLocalTaoBaoOrder");
        Long endTime = System.currentTimeMillis() - 1000 * 60 * 60 * 12L;
        Long startTime = endTime - 1000 * 60 * 60 * 24 * 5L;
        long count = taoBaoOrderService.countBySettlementTime(startTime, endTime);
        int pageSize = 100;
        long page = count % pageSize == 0 ? count / pageSize : count / pageSize + 1;
        for (int i = 0; i < page; i++) {
            updateLocalTaoBaoOrder(startTime, endTime, i + 1, pageSize);
        }
    }
    /**
     * 处理最近5天的本地订单
     */
    private void doLatest5DayLocalTaoBaoOrder() {
        LogHelper.job("doLatest5DayLocalTaoBaoOrder");
        Long endTime = System.currentTimeMillis() - 1000 * 60 * 60 * 12L;
        Long startTime = endTime - 1000 * 60 * 60 * 24 * 5L;
        long count = taoBaoOrderService.countBySettlementTime(startTime, endTime);
        int pageSize = 100;
        long page = count % pageSize == 0 ? count / pageSize : count / pageSize + 1;
        for (int i = 0; i < page; i++) {
            updateLocalTaoBaoOrder(startTime, endTime, i + 1, pageSize);
        }
    }
    // 淘宝商家跑路订单 每月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"),
                "yyyy-MM");
        calender.add(Calendar.MONTH, -1);
        long startTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(calender.getTimeInMillis(), "yyyy-MM"),
                "yyyy-MM");
        // 商家未付款
        List<TaoBaoOrder> orderList = taoBaoOrderService.listByStateAndCreateTime("订单成功", new Date(startTime),
                new Date(endTime));
    // 淘宝商家跑路订单 每月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"),
                "yyyy-MM");
        calender.add(Calendar.MONTH, -1);
        long startTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(calender.getTimeInMillis(), "yyyy-MM"),
                "yyyy-MM");
        // 商家未付款
        List<TaoBaoOrder> orderList = taoBaoOrderService.listByStateAndCreateTime("订单成功", new Date(startTime),
                new Date(endTime));
        if (orderList != null)
            for (TaoBaoOrder order : orderList)
                try {
                    orderProcessService.doTaoBaoSellerNotPaid(order);
                } catch (Exception e) {
                    LogHelper.errorDetailInfo(e);
                }
        return ReturnT.SUCCESS;
    }
        if (orderList != null)
            for (TaoBaoOrder order : orderList)
                try {
                    orderProcessService.doTaoBaoSellerNotPaid(order);
                } catch (Exception e) {
                    LogHelper.errorDetailInfo(e);
                }
        return ReturnT.SUCCESS;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -1376,7 +1376,7 @@
                    && oldCommonOrder.getSourceType() != Constant.SOURCE_TYPE_JD)
                    || oldCommonOrder.getState() == CommonOrder.STATE_SX
                    || oldCommonOrder.getState() == CommonOrder.STATE_WQ
                    || (oldCommonOrder.getState().intValue() == commonOrder.getState())) {
                    || (oldCommonOrder.getState().intValue() == commonOrder.getState()&&oldCommonOrder.getPayment().compareTo(commonOrder.getPayment())==0)) {
                return new CommonOrderAddResultDTO(oldCommonOrder, CommonOrderAddResultDTO.TYPE_NOUPDATE);
            }
            // 交易ID一致才修改
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -1663,6 +1663,7 @@
        // 返利到账
    }
    /**
     * 添加红包与事务消息
     *
@@ -1719,4 +1720,19 @@
        return false;
    }
    @Override
    public void invalidTaoBaoOrder(String tradeId) {
        TaoBaoOrder taoBaoOrder = taoBaoOrderService.selectByTradeId(tradeId);
        //订单付款和订单成功的状态才允许失效
        if (taoBaoOrder != null && ("订单付款".equalsIgnoreCase(taoBaoOrder.getOrderState()) || "订单成功".equalsIgnoreCase(taoBaoOrder.getOrderState()))) {
            TaoBaoOrder update = new TaoBaoOrder();
            update.setId(taoBaoOrder.getId());
            update.setLatestUpdateTime(new Date());
            update.setOrderState("订单失效");
            taoBaoOrderService.updateSelectiveByPrimaryKey(update);
            CMQManager.getInstance().addTaoBaoOrderMsg(taoBaoOrder.getOrderId());
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/tb/TaoBaoOrderServiceImpl.java
@@ -32,242 +32,247 @@
@Service
public class TaoBaoOrderServiceImpl implements TaoBaoOrderService {
    @Resource
    private TaoBaoOrderMapper taoBaoOrderMapper;
    @Resource
    private TaoBaoOrderMapper taoBaoOrderMapper;
    @Resource
    private RedisManager redisManager;
    @Resource
    private RedisManager redisManager;
    @Resource
    private TaoBaoOrderTradeMapMapper taoBaoOrderTradeMapMapper;
    @Resource
    private TaoBaoOrderTradeMapMapper taoBaoOrderTradeMapMapper;
    @Resource(name = "transactionManager")
    private DataSourceTransactionManager transactionManager;
    @Resource(name = "transactionManager")
    private DataSourceTransactionManager transactionManager;
    @Resource
    private TaoBaoOrderGoodsMapper taoBaoOrderGoodsMapper;
    @Resource
    private TaoBaoOrderGoodsMapper taoBaoOrderGoodsMapper;
    /**
     * 获取订单的哈希值
     *
     * @param list
     * @return
     */
    /**
     * 获取订单的哈希值
     *
     * @param list
     * @return
     */
    @Override
    public void addTaoBaoOrderList(List<TaoBaoOrder> list) {
        if (list == null || list.size() == 0)
            return;
        Map<String, List<TaoBaoOrder>> map = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(list);
        Iterator<String> its = map.keySet().iterator();
        while (its.hasNext()) {
            String orderId = its.next();
            String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrder,
                    TaoBaoOrderUtil.getOrderDataHashCode(map.get(orderId)));
            // redis做频率限制
            try {
                if (Constant.IS_OUTNET) {
                    if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) {
                        continue;
                    }
                }
    @Override
    public void addTaoBaoOrderList(List<TaoBaoOrder> list) {
        if (list == null || list.size() == 0)
            return;
        Map<String, List<TaoBaoOrder>> map = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(list);
        Iterator<String> its = map.keySet().iterator();
        while (its.hasNext()) {
            String orderId = its.next();
            String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.addOrder,
                    TaoBaoOrderUtil.getOrderDataHashCode(map.get(orderId)));
            // redis做频率限制
            try {
                if (Constant.IS_OUTNET) {
                    if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) {
                        continue;
                    }
                }
            } catch (Exception e) {
            } catch (Exception e) {
            }
            }
            addTaoBaoOrder(orderId, map.get(orderId));
            try {
                // 6小时内不再处理
                if (Constant.IS_OUTNET)
                    redisManager.cacheCommonString(key, "1", 60 * 60 * 6);
            } catch (Exception e) {
            addTaoBaoOrder(orderId, map.get(orderId));
            try {
                // 6小时内不再处理
                if (Constant.IS_OUTNET)
                    redisManager.cacheCommonString(key, "1", 60 * 60 * 6);
            } catch (Exception e) {
            }
        }
    }
            }
        }
    }
    @Transactional
    private void addTaoBaoOrderTradeMap(TaoBaoOrder order) {
        if (order == null || StringUtil.isNullOrEmpty(order.getTradeId()))
            return;
        TaoBaoOrderTradeMap map = new TaoBaoOrderTradeMap();
        map.setCreateTime(new Date());
        map.setTaoBaoOrder(order);
        map.setTradeId(order.getTradeId());
        TaoBaoOrderTradeMap oldMap = taoBaoOrderTradeMapMapper.selectByTradeId(order.getTradeId());
        if (oldMap == null)
            taoBaoOrderTradeMapMapper.insertSelective(map);
    }
    @Transactional
    private void addTaoBaoOrderTradeMap(TaoBaoOrder order) {
        if (order == null || StringUtil.isNullOrEmpty(order.getTradeId()))
            return;
        TaoBaoOrderTradeMap map = new TaoBaoOrderTradeMap();
        map.setCreateTime(new Date());
        map.setTaoBaoOrder(order);
        map.setTradeId(order.getTradeId());
        TaoBaoOrderTradeMap oldMap = taoBaoOrderTradeMapMapper.selectByTradeId(order.getTradeId());
        if (oldMap == null)
            taoBaoOrderTradeMapMapper.insertSelective(map);
    }
    // 添加淘宝订单
    private void insertTaoBaoOrder(TaoBaoOrder taoBaoOrder) {
        taoBaoOrderMapper.insertSelective(taoBaoOrder);
        addTaoBaoOrderTradeMap(taoBaoOrder);
        addTaoBaoOrderGoods(taoBaoOrder.getGoods());
    }
    // 添加淘宝订单
    private void insertTaoBaoOrder(TaoBaoOrder taoBaoOrder) {
        taoBaoOrderMapper.insertSelective(taoBaoOrder);
        addTaoBaoOrderTradeMap(taoBaoOrder);
        addTaoBaoOrderGoods(taoBaoOrder.getGoods());
    }
    @Transactional
    @Override
    public void addTaoBaoOrder(String orderId, List<TaoBaoOrder> list) {
        TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
    @Transactional
    @Override
    public void addTaoBaoOrder(String orderId, List<TaoBaoOrder> list) {
        TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            LogHelper.test("订单号与订单数量:" + orderId + "-" + list.size());
            LogHelper.test("订单号与订单数量:" + orderId + "-" + list.size());
            // 验证orderby是否正确
            if (list != null && list.size() > 0) {
                int maxOrderBy = list.get(0).getOrderBy();
                if (list.size() > 1)
                    for (TaoBaoOrder order : list) {
                        if (order.getOrderBy() > maxOrderBy)
                            maxOrderBy = order.getOrderBy();
                    }
            // 验证orderby是否正确
            if (list != null && list.size() > 0) {
                int maxOrderBy = list.get(0).getOrderBy();
                if (list.size() > 1)
                    for (TaoBaoOrder order : list) {
                        if (order.getOrderBy() > maxOrderBy)
                            maxOrderBy = order.getOrderBy();
                    }
                if (list.size() != maxOrderBy) {
                    LogHelper.test("捕捉到排序值错误:" + orderId);
                    throw new Exception();
                }
            }
            // 验证tradeId问题
            Set<String> tradesIds = new HashSet<>();
            for (TaoBaoOrder order : list) {
                tradesIds.add(order.getTradeId());
            }
                if (list.size() != maxOrderBy) {
                    LogHelper.test("捕捉到排序值错误:" + orderId);
                    throw new Exception();
                }
            }
            // 验证tradeId问题
            Set<String> tradesIds = new HashSet<>();
            for (TaoBaoOrder order : list) {
                tradesIds.add(order.getTradeId());
            }
            // 有重复的交易ID不处理
            if (tradesIds.size() != list.size()) {
                // 去除重复交易ID
                tradesIds = new HashSet<>();
                for (int i = 0; i < list.size(); i++) {
                    if (tradesIds.contains(list.get(i).getTradeId())) {
                        list.remove(i--);
                    } else
                        tradesIds.add(list.get(i).getTradeId());
                }
            // 有重复的交易ID不处理
            if (tradesIds.size() != list.size()) {
                // 去除重复交易ID
                tradesIds = new HashSet<>();
                for (int i = 0; i < list.size(); i++) {
                    if (tradesIds.contains(list.get(i).getTradeId())) {
                        list.remove(i--);
                    } else
                        tradesIds.add(list.get(i).getTradeId());
                }
                LogHelper.test("检测到交易ID重复问题:" + orderId);
                LogHelper.test("检测到交易ID重复问题:" + orderId);
//                throw new Exception();
            }
            }
            List<TaoBaoOrder> oldOrderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
            if (oldOrderList == null || oldOrderList.size() == 0) {
                for (TaoBaoOrder taoBaoOrder : list) {
                    taoBaoOrder.setLatestUpdateTime(new Date());
                    insertTaoBaoOrder(taoBaoOrder);
                }
            } else {
                if (StringUtil.isNullOrEmpty(oldOrderList.get(0).getTradeId())) {
                    taoBaoOrderMapper.deleteByOrderId(orderId);
                    for (TaoBaoOrder taoBaoOrder : list) {
                        taoBaoOrder.setLatestUpdateTime(new Date());
                        insertTaoBaoOrder(taoBaoOrder);
                    }
                } else {
                    // 按tradeId更新
                    for (TaoBaoOrder taoBaoOrder : list) {
                        TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(taoBaoOrder.getTradeId());
                        if (order == null) {
                            taoBaoOrder.setLatestUpdateTime(new Date());
                            insertTaoBaoOrder(taoBaoOrder);
                        } else {
                            taoBaoOrder.setId(order.getId());
                            if (!StringUtil.isNullOrEmpty(order.getRelationId()))
                                taoBaoOrder.setRelationId(order.getRelationId());
                            if (!StringUtil.isNullOrEmpty(order.getSpecialId()))
                                taoBaoOrder.setSpecialId(order.getSpecialId());
                            taoBaoOrder.setLatestUpdateTime(new Date());
                            taoBaoOrderMapper.updateByPrimaryKeySelective(taoBaoOrder);
                            addTaoBaoOrderTradeMap(taoBaoOrder);
                        }
                    }
                }
            }
            // 提交事务
            transactionManager.commit(transactionStatus);
        } catch (Exception e) {
            e.printStackTrace();
            transactionManager.rollback(transactionStatus);
        }
    }
            List<TaoBaoOrder> oldOrderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
            if (oldOrderList == null || oldOrderList.size() == 0) {
                for (TaoBaoOrder taoBaoOrder : list) {
                    taoBaoOrder.setLatestUpdateTime(new Date());
                    insertTaoBaoOrder(taoBaoOrder);
                }
            } else {
                if (StringUtil.isNullOrEmpty(oldOrderList.get(0).getTradeId())) {
                    taoBaoOrderMapper.deleteByOrderId(orderId);
                    for (TaoBaoOrder taoBaoOrder : list) {
                        taoBaoOrder.setLatestUpdateTime(new Date());
                        insertTaoBaoOrder(taoBaoOrder);
                    }
                } else {
                    // 按tradeId更新
                    for (TaoBaoOrder taoBaoOrder : list) {
                        TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(taoBaoOrder.getTradeId());
                        if (order == null) {
                            taoBaoOrder.setLatestUpdateTime(new Date());
                            insertTaoBaoOrder(taoBaoOrder);
                        } else {
                            taoBaoOrder.setId(order.getId());
                            if (!StringUtil.isNullOrEmpty(order.getRelationId()))
                                taoBaoOrder.setRelationId(order.getRelationId());
                            if (!StringUtil.isNullOrEmpty(order.getSpecialId()))
                                taoBaoOrder.setSpecialId(order.getSpecialId());
                            taoBaoOrder.setLatestUpdateTime(new Date());
                            taoBaoOrderMapper.updateByPrimaryKeySelective(taoBaoOrder);
                            addTaoBaoOrderTradeMap(taoBaoOrder);
                        }
                    }
                }
            }
            // 提交事务
            transactionManager.commit(transactionStatus);
        } catch (Exception e) {
            e.printStackTrace();
            transactionManager.rollback(transactionStatus);
        }
    }
    @Override
    public List<TaoBaoOrder> getTaoBaoOrderByOrderId(String orderId) {
        return taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
    }
    @Override
    public List<TaoBaoOrder> getTaoBaoOrderByOrderId(String orderId) {
        return taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
    }
    @Override
    public double countEstimate(String date) throws Exception {
        return taoBaoOrderMapper.countEstimate(date);
    }
    @Override
    public double countEstimate(String date) throws Exception {
        return taoBaoOrderMapper.countEstimate(date);
    }
    @Override
    public void bindSpecialIdAndRealtionId(String tradeId, String specialId, String realtionId) {
        if (StringUtil.isNullOrEmpty(specialId) && StringUtil.isNullOrEmpty(realtionId))
            return;
        TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
        if (order != null) {
            TaoBaoOrder update = new TaoBaoOrder();
            update.setId(order.getId());
            update.setSpecialId(specialId);
            update.setRelationId(realtionId);
            update.setLatestUpdateTime(new Date());
            taoBaoOrderMapper.updateByPrimaryKeySelective(update);
        }
    }
    @Override
    public void bindSpecialIdAndRealtionId(String tradeId, String specialId, String realtionId) {
        if (StringUtil.isNullOrEmpty(specialId) && StringUtil.isNullOrEmpty(realtionId))
            return;
        TaoBaoOrder order = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
        if (order != null) {
            TaoBaoOrder update = new TaoBaoOrder();
            update.setId(order.getId());
            update.setSpecialId(specialId);
            update.setRelationId(realtionId);
            update.setLatestUpdateTime(new Date());
            taoBaoOrderMapper.updateByPrimaryKeySelective(update);
        }
    }
    @Override
    public TaoBaoOrder selectByTradeId(String tradeId) {
        return taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
    }
    @Override
    public TaoBaoOrder selectByTradeId(String tradeId) {
        return taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
    }
    @Override
    public List<TaoBaoOrder> listAllOrder(int page, int pageSize) {
        return taoBaoOrderMapper.listAllOrder(null, (page - 1) * pageSize, pageSize);
    }
    @Override
    public List<TaoBaoOrder> listAllOrder(int page, int pageSize) {
        return taoBaoOrderMapper.listAllOrder(null, (page - 1) * pageSize, pageSize);
    }
    @Override
    public long countAllOrder() {
        return taoBaoOrderMapper.countAllOrder(null);
    }
    @Override
    public long countAllOrder() {
        return taoBaoOrderMapper.countAllOrder(null);
    }
    @Override
    public TaoBaoOrder selectByPrimaryKey(Long id) {
        return taoBaoOrderMapper.selectByPrimaryKey(id);
    }
    @Override
    public TaoBaoOrder selectByPrimaryKey(Long id) {
        return taoBaoOrderMapper.selectByPrimaryKey(id);
    }
    @Override
    public List<TaoBaoOrder> listBySettlementTime(Long minTime, Long maxTime, int page, int pageSize) {
    @Override
    public List<TaoBaoOrder> listBySettlementTime(Long minTime, Long maxTime, int page, int pageSize) {
        return taoBaoOrderMapper.listBySettlementTime(minTime, maxTime, (page - 1) * pageSize, pageSize);
    }
        return taoBaoOrderMapper.listBySettlementTime(minTime, maxTime, (page - 1) * pageSize, pageSize);
    }
    @Override
    public Long countBySettlementTime(Long minTime, Long maxTime) {
        return taoBaoOrderMapper.countBySettlementTime(minTime, maxTime);
    }
    @Override
    public Long countBySettlementTime(Long minTime, Long maxTime) {
        return taoBaoOrderMapper.countBySettlementTime(minTime, maxTime);
    }
    @Override
    public List<TaoBaoOrder> listByStateAndCreateTime(String state, Date minCreateTime, Date maxCreateTime) {
        return taoBaoOrderMapper.listByStateAndCreateTime(state, minCreateTime.getTime(), maxCreateTime.getTime());
    }
    @Override
    public List<TaoBaoOrder> listByStateAndCreateTime(String state, Date minCreateTime, Date maxCreateTime) {
        return taoBaoOrderMapper.listByStateAndCreateTime(state, minCreateTime.getTime(), maxCreateTime.getTime());
    }
    @Override
    public Long countOrderByDay(String preDay) {
        return taoBaoOrderMapper.countOrderByDay(preDay);
    }
    @Override
    public Long countOrderByDay(String preDay) {
        return taoBaoOrderMapper.countOrderByDay(preDay);
    }
    @Override
    public void addTaoBaoOrderGoods(TaoBaoOrderGoods goods) {
        if (goods == null || StringUtil.isNullOrEmpty(goods.getTradeId()))
            return;
        TaoBaoOrderGoods oldGoods = taoBaoOrderGoodsMapper.selectByTradeId(goods.getTradeId());
        if (oldGoods != null)
            return;
    @Override
    public void addTaoBaoOrderGoods(TaoBaoOrderGoods goods) {
        if (goods == null || StringUtil.isNullOrEmpty(goods.getTradeId()))
            return;
        TaoBaoOrderGoods oldGoods = taoBaoOrderGoodsMapper.selectByTradeId(goods.getTradeId());
        if (oldGoods != null)
            return;
        if (goods.getCreateTime() == null)
            goods.setCreateTime(new Date());
        taoBaoOrderGoodsMapper.insertSelective(goods);
    }
        if (goods.getCreateTime() == null)
            goods.setCreateTime(new Date());
        taoBaoOrderGoodsMapper.insertSelective(goods);
    }
    @Override
    public void updateSelectiveByPrimaryKey(TaoBaoOrder order) {
        taoBaoOrderMapper.updateByPrimaryKeySelective(order);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderProcessService.java
@@ -159,4 +159,11 @@
     * @param hongBaoId
     */
    public void elmeFanli(Long hongBaoId);
    /**
     * 使淘宝订单失效
     * @param tradeId
     */
    public void invalidTaoBaoOrder(String tradeId);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/tb/TaoBaoOrderService.java
@@ -8,127 +8,128 @@
/**
 * 淘宝订单服务
 *
 * @author Administrator
 *
 * @author Administrator
 */
public interface TaoBaoOrderService {
    /**
     * 添加订单数据
     *
     * @param list
     */
    public void addTaoBaoOrderList(List<TaoBaoOrder> list);
    /**
     * 添加订单数据
     *
     * @param list
     */
    public void addTaoBaoOrderList(List<TaoBaoOrder> list);
    /**
     *
     * @param orderId
     *            订单号
     * @param list
     *            订单号下面的订单
     */
    public void addTaoBaoOrder(String orderId, List<TaoBaoOrder> list);
    /**
     * @param orderId 订单号
     * @param list    订单号下面的订单
     */
    public void addTaoBaoOrder(String orderId, List<TaoBaoOrder> list);
    /**
     * 根据订单号获取订单列表
     *
     * @param orderId
     * @return
     */
    public List<TaoBaoOrder> getTaoBaoOrderByOrderId(String orderId);
    /**
     * 根据订单号获取订单列表
     *
     * @param orderId
     * @return
     */
    public List<TaoBaoOrder> getTaoBaoOrderByOrderId(String orderId);
    /**
     * 统计当日预估收益
     *
     * @param date 2018-09-01
     * @return
     */
    public double countEstimate(String date) throws Exception;
    /**
     * 绑定会员运营ID与渠道ID(根据交易ID)
     *
     * @param tadeId
     * @param specialId
     * @param realtionId
     */
    public void bindSpecialIdAndRealtionId(String tradeId, String specialId, String realtionId);
    /**
     * 根据交易ID获取订单号
     *
     * @param tradeId
     * @return
     */
    public TaoBaoOrder selectByTradeId(String tradeId);
    /**
     * 检索所有订单列表
     *
     * @param page
     * @param pageSize
     * @return
     */
    public List<TaoBaoOrder> listAllOrder(int page, int pageSize);
    /**
     * 订单总量
     *
     * @return
     */
    public long countAllOrder();
    /**
     * 根据主键检索
     *
     * @param id
     * @return
     */
    public TaoBaoOrder selectByPrimaryKey(Long id);
    /**
     * 根据结算时间检索
     *
     * @param page
     * @param pageSize
     * @return
     */
    public List<TaoBaoOrder> listBySettlementTime(Long minTime, Long maxTime, int page, int pageSize);
    /**
     * 根据结算时间计数
     *
     * @param minTime
     * @param maxTime
     * @return
     */
    public Long countBySettlementTime(Long minTime, Long maxTime);
    /**
     * 根据状态和创建时间检索
     *
     * @param state
     * @param minCreateTime
     * @param maxCreateTime
     * @return
     */
    public List<TaoBaoOrder> listByStateAndCreateTime(String state, Date minCreateTime, Date maxCreateTime);
    public Long countOrderByDay(String preDay);
    /**
     * 添加订单商品
     *
     * @param goods void 返回类型
     * @throws
     * @Title: addTaoBaoOrderGoods
     * @Description:
     */
    public void addTaoBaoOrderGoods(TaoBaoOrderGoods goods);
    /**
     * 统计当日预估收益
     *
     * @param date
     *            2018-09-01
     * @return
     */
    public double countEstimate(String date) throws Exception;
    /**
     * 绑定会员运营ID与渠道ID(根据交易ID)
     *
     * @param tadeId
     * @param specialId
     * @param realtionId
     */
    public void bindSpecialIdAndRealtionId(String tradeId, String specialId, String realtionId);
    /**
     * 根据交易ID获取订单号
     *
     * @param tradeId
     * @return
     */
    public TaoBaoOrder selectByTradeId(String tradeId);
    /**
     * 检索所有订单列表
     *
     * @param page
     * @param pageSize
     * @return
     */
    public List<TaoBaoOrder> listAllOrder(int page, int pageSize);
    /**
     * 订单总量
     *
     * @return
     */
    public long countAllOrder();
    /**
     * 根据主键检索
     *
     * @param id
     * @return
     */
    public TaoBaoOrder selectByPrimaryKey(Long id);
    /**
     * 根据结算时间检索
     *
     * @param page
     * @param pageSize
     * @return
     */
    public List<TaoBaoOrder> listBySettlementTime(Long minTime, Long maxTime, int page, int pageSize);
    /**
     * 根据结算时间计数
     *
     * @param minTime
     * @param maxTime
     * @return
     */
    public Long countBySettlementTime(Long minTime, Long maxTime);
    /**
     * 根据状态和创建时间检索
     *
     * @param state
     * @param minCreateTime
     * @param maxCreateTime
     * @return
     */
    public List<TaoBaoOrder> listByStateAndCreateTime(String state, Date minCreateTime, Date maxCreateTime);
    public Long countOrderByDay(String preDay);
    /**
     * 添加订单商品
     * @Title: addTaoBaoOrderGoods
     * @Description:
     * @param goods
     * void 返回类型
     * @throws
     */
    public void addTaoBaoOrderGoods(TaoBaoOrderGoods goods);
    /**
     * 根据订单更新
     *
     * @param order
     */
    public void updateSelectiveByPrimaryKey(TaoBaoOrder order);
}
fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java
@@ -309,8 +309,8 @@
            HongBaoV2 hongBao = createFanLiUpdateHongBao(commonOrder, money, hongBaoOrder.getHongBaoV2().getId(),
                    mianDan);
            // 新老红包状态一致不处理
            if (oldHongBao.getState().intValue() == hongBao.getState())
            // 新老红包状态一致且佣金金额不变则不处理
            if (oldHongBao.getState().intValue() == hongBao.getState()&&oldHongBao.getMoney().compareTo(hongBao.getMoney())==0)
                return false;
            if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
@@ -116,7 +116,7 @@
     *
     * @return
     */
    public static String convertLink1(String materialId, String couponUrl, String positionId, String ext1) {
    public static String convertLink1(String materialId, String couponUrl, String positionId, String ext1, String giftCouponKey) {
        JSONObject json = new JSONObject();
        json.put("materialId", materialId);
        json.put("siteId", APP_ID);
@@ -127,6 +127,8 @@
        if (!StringUtil.isNullOrEmpty(ext1))
            json.put("ext1", ext1);
        if (!StringUtil.isNullOrEmpty(giftCouponKey))
            json.put("giftCouponKey", giftCouponKey);
        JSONObject root = new JSONObject();
        root.put("promotionCodeReq", json);
@@ -726,7 +728,7 @@
        JSONObject json = new JSONObject();
        JSONObject couponReq = new JSONObject();
        couponReq.put("skuMaterialId", sku);
        couponReq.put("discount", 10);
        couponReq.put("discount", 10.01);
        couponReq.put("amount", 5);
        couponReq.put("receiveStartTime", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH"));
        couponReq.put("receiveEndTime", TimeUtil.getGernalTime(System.currentTimeMillis() + 1000 * 60 * 2, "yyyy-MM-dd HH"));
@@ -761,7 +763,7 @@
        couponReq.put("unionId", "2011217145");
//        couponReq.put("pid", "2011217145_4100059717_3003005722");
        couponReq.put("subUnionId", "123_437032");
        couponReq.put("giftCouponKey","123123123123");
        couponReq.put("giftCouponKey", "123123123123");
        json.put("promotionCodeReq", couponReq);
        String result = baseRequest2("jd.union.open.promotion.byunionid.get", null, json);
        System.out.println(result);
fanli/src/main/resource/env-dev/constant.properties
@@ -1,3 +1,3 @@
task =false
outnetwork =false
test=true
test=false