同步京东、抖音、淘宝等多处订单到本地商城,这里只举例京东同步

该博客介绍了如何使用Java的ExecutorService创建固定大小的线程池,然后通过@Scheduled注解实现定时任务,每两分钟查询一次京东全部订单。在查询过程中,根据京东联盟API查询不同时间类型的订单,并将结果保存到本地商城。整个流程涉及到了网络请求、日期处理和数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、第一步声明一个线程池

  /*
    * 构造一个固定数量的线程池
    * */
    ExecutorService service = Executors.newFixedThreadPool(15);

2、向线程池中添加一个任务

   /**
     * 获取京东全部订单2分钟执行一次
     */
    @Scheduled(fixedDelay = 2 * 60 * 1000)
    void synOnceJDOrderOneMinus() {
        service.execute(() -> {
            logger.error("synOnceJDOrderOneMinus");
            getJdOrder();
        });
    }

3、根据京东联盟API查询订单

 private void getJdOrder() {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
            //查询时间,建议使用分钟级查询,格式:yyyyMMddHH、yyyyMMddHHmm或yyyyMMddHHmmss,如201811031212 的查询范围从12:12:00--12:12:59
            //订单时间查询类型(1:下单时间,2:完成时间,3:更新时间)

            //获取京东APPID
            CommonInfo one = commonRepository.findOne(13);
            //京东秘钥
            CommonInfo two = commonRepository.findOne(14);

            //订单时间查询类型(1:下单时间,2:完成时间,3:更新时间)
            getJdOrder(1, sdf.format(new Date()), one, two);

            Thread.sleep(5 * 1000);
            getJdOrder(2, sdf.format(new Date()), one, two);

            Thread.sleep(5 * 1000);
            getJdOrder(3, sdf.format(new Date()), one, two);

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

4、获取京东订单

/**
     * 获取京东订单
     *
     * @param type
     * @param time
     */
    private void getJdOrder(Integer type, String time, CommonInfo one, CommonInfo two) {
        try {
            String accessToken = "";
            //京东的url 静态死的
            //public static String JD_URL = "https://router.jd.com/api";
                                                                             //京东AppID                                    //京东密钥
            JdClient client = new DefaultJdClient(Config.JD_URL, accessToken, one != null ? one.getValue() : Config.AppKey, two != null ? two.getValue() : Config.Secret);
            UnionOpenOrderQueryRequest request = new UnionOpenOrderQueryRequest();
            OrderReq orderReq = new OrderReq();
            orderReq.setPageNo(1);
            orderReq.setPageSize(500);
            //订单时间查询类型(1:下单时间,2:完成时间,3:更新时间)
            orderReq.setType(type);
            orderReq.setTime(time);
            request.setOrderReq(orderReq);
            UnionOpenOrderQueryResponse execute = client.execute(request);
            //logger.error("=========getJDOrder==============" + weixin.popular.util.JsonUtil.toJSONString(execute));
            OrderResp[] data = execute.getData();
            if (execute.getData() != null && data.length > 0) {
                for (OrderResp orderResps : data) {
                    saveJdOrder(orderResps);
                }
            }
        } catch (JdException e) {
            e.printStackTrace();
        }
    }

5、保存京东订单到本地商城。

 /**
     * 保存京东订单
     *
     * @param jdOrder
     */
    private void saveJdOrder(OrderResp jdOrder) {
        if (jdOrder != null && jdOrder.getSkuList().length > 0 && jdOrder.getOrderId() != null) {

            SkuInfo skuInfo = jdOrder.getSkuList()[0];

            DecimalFormat df = new DecimalFormat("#########.##");
            //通过京东pid获取用户
            UserInfo userInfo = userRepository.getUserByJd(String.valueOf(skuInfo.getPositionId()));
            if (userInfo != null) {
                //查询订单是否已经存在
                PublisherOrderDtoBean publisherOrderDtoBean;
                try {
                    publisherOrderDtoBean = orderRepository.findByRelationIdCount(String.valueOf(jdOrder.getOrderId()));
                } catch (Exception e) {
                    //当发现有多个订单时 删除重复的订单
                    List<PublisherOrderDtoBean> publisherOrderDtoBeans = orderRepository.findByRelationIdCountList(String.valueOf(jdOrder.getOrderId()));
                    for (int i = 1; i < publisherOrderDtoBeans.size(); i++) {
                        orderJpaRepository.deleteById(publisherOrderDtoBeans.get(i).getId());
                    }
                    publisherOrderDtoBean = publisherOrderDtoBeans.get(0);
                }
                if (publisherOrderDtoBean == null) {
                    PublisherOrderDtoBean o = new PublisherOrderDtoBean();
                    o.setFromInfo("jd");
                    o.setIsJifen(0);
                    o.setIsGif(0);
                    //设置为未结算(咱们平台的结算状态 0为没有结算 1为结算)
                    o.setBalance(0);
                    o.setRelation_id(Long.valueOf(userInfo.getRelationId()));
                    o.setInvitation(userInfo.getInvitation());
                    o.setAdzone_id(109264550298L);
                    o.setAdzone_name(Config.BASE_NAME);
                    o.setOrder_type("京东");
                    CommonInfo one = commonRepository.findOne(19);
                    //商品图片
                    o.setItem_img(one.getValue().split(":")[1]+"/logo.png");
                    //商品标题
                    o.setItem_title(skuInfo.getSkuName());
                    //订单编号
                    o.setTrade_id(String.valueOf(jdOrder.getOrderId()));
                    o.setTrade_parent_id(String.valueOf(jdOrder.getOrderId()));
                    //商品id
                    o.setItem_id(skuInfo.getSkuId());
                    //单个商品金额
                    o.setItem_price(String.valueOf(skuInfo.getEstimateCosPrice()));
                    //设置佣金金额
                    o.setPub_share_pre_fee(String.valueOf(skuInfo.getEstimateFee()));
                    //实际支付金额
                    o.setAlipay_total_price(String.valueOf(skuInfo.getEstimateCosPrice()));
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    //订单支付时间
                    o.setTb_paid_time(sdf.format(new Date(jdOrder.getOrderTime())));
                    //订单支付时间
                    o.setTk_paid_time(sdf.format(new Date(jdOrder.getOrderTime())));
                    //获取佣金
                    float d = Float.parseFloat(df.format(Float.parseFloat(String.valueOf(skuInfo.getEstimateFee()))));
                    o.setTk_status(12);//处理已付款状态
                    //统一处理新人免单
                    newsUserDownOrder(o, userInfo, d, df);
                } else {
                    //处理订单状态 这里处理已付款状态
                    setJdStatus(jdOrder, publisherOrderDtoBean, userInfo);
                }
            }

        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值