java跨系统拉取数据

自我记录:
跨系统拉取数据时应该根据记录表来拉取判断:

表结构如下 user_shipment_status_records:

编号
开始时间 (timestamp)add_time
结束时间 (timestamp)end_time
成功状态 (int)whether_status
推送或拉取内容 (text)push_pull_content (0失败1成功)
返回内容 (text)return_content

实体类:


/**
 * 用户物流信息拉取记录表
 */

@Getter
@Setter
public class UserShipmentStatusRecords implements Serializable {
    private Integer id;         //编号
    private Timestamp addTime;     //开始时间
    private Timestamp endTime;     //结束时间
    private Integer whetherStatus; //成功状态
    private String pushPullContent;   //拉取内容
    private String returnContent;      //返回内容
    private Integer treatmentStateDispose; //处理状态
}

mapper:

   //添加用户物流信息
    Integer addUserOrderShipmentPro(UserOrderShipmentPro userOrderShipmentPro);
    
   //删除用户物流信息 根据订单号
    @Delete("DELETE FROM user_order_shipment_pro WHERE order_no = #{orderNo}")
    Integer deleteUserOrderShipmentPro(String orderNo);
    
  //查看物流状态 失败记录的开始时间
    //@Select("select * from user_shipment_status_records where whether_status=0 and  treatment_state_dispose=0 ORDER BY add_time asc  LIMIT 1")
    @Select("select * from user_shipment_status_records where whether_status=1 and  treatment_state_dispose=0 ORDER BY add_time desc  LIMIT 1")
    UserShipmentStatusRecords selectUserShipmentStatusRecords();

service:

 //定时拉取用户物流信息进行新增或修改
    @Override
    public Integer addOrUpdateUserOrderShipmentPro() {
        //根据时间节点来获取订单
        UserShipmentStatusRecords userShipmentStatusRecords = systemOrderMapper.selectUserShipmentStatusRecords();//查看物流状态 失败记录的开始时间
        UserShipmentStatusRecords userShipmentStatus = new UserShipmentStatusRecords();//物流拉取拉取记录
        //查看最新订单状态 失败 或成功
        if (userShipmentStatusRecords == null) {
            //当前时间 和 当前时间+1 进行拉取
            //String addTime = "2021-01-08 08:03:15.527";
            //String endTime = "2021-09-08 08:03:15.527";
            String addTime = StrUtil.getDate();
            String endTime = StrUtil.getDateAddOne();

            //Token数据
            boolean organtoken = redisUtil.exitsKey("Organtoken");
            System.out.println("token在redis中是否存在:  " + organtoken);
            if (organtoken) {
                token = redisUtil.get("Organtoken");
            } else {
                //Token数据
                token = visitorUtil.sendRollbackInfo(tokenUrl);
            }
            String Json = VisitorUtil.doGetLogistics(addTime, endTime, getLogistics, token);
            System.out.println("Json     :" + Json);
            JSONObject jsonObject = JSONObject.parseObject(Json);
            UserOrderShipmentProDetail jsonRootBean = JSON.toJavaObject(jsonObject, UserOrderShipmentProDetail.class);

            if (jsonRootBean.getMessage().equals("Succeed")) {

                jsonRootBean.getItems().forEach(q -> {
                    UserOrderShipmentPro userOrderShipmentPro;//物流信息
                    System.out.println(q.getOrderNo() + " : " + q.getTrackingNo() + " : " + q.getCarrier() + " : " + q.getCatalogNo() + " : " + q.getSize()
                            + " : " + q.getQuantity() + " : " + q.getIdKey() + " : " + q.getAddDate()
                    );

                    UserOrderShipmentPro userOrderShipmentProIsNot = systemOrderMapper.selectUserOrderShipmentPro(q.getOrderNo());//查看物流信息是否存在
                    //拿到对应的订单号  存在就删除 新增
                    if (userOrderShipmentProIsNot != null) {
                        //删除对应物流信息
                        systemOrderMapper.deleteUserOrderShipmentPro(userOrderShipmentProIsNot.getOrderNo());
                        //新增订单
                        userOrderShipmentPro = q;//物流信息赋值
                        systemOrderMapper.addUserOrderShipmentPro(userOrderShipmentPro);//新增物流信息
                        System.out.println("初始化无数据 修改 删除 新增");
                    } else {
                        //新增订单
                        userOrderShipmentPro = q;//物流信息赋值
                        systemOrderMapper.addUserOrderShipmentPro(userOrderShipmentPro);//新增物流信息
                        System.out.println("初始化无数据  新增");
                    }
                    //成功
                    userShipmentStatus.setAddTime(Timestamp.valueOf(addTime));
                    userShipmentStatus.setEndTime(Timestamp.valueOf(endTime));
                    userShipmentStatus.setPushPullContent(Json);
                    userShipmentStatus.setWhetherStatus(1);//成功
                    //添加记录
                    systemOrderMapper.addUserShipmentStatusRecords(userShipmentStatus);
                });
            } else {
                //失败
                userShipmentStatus.setAddTime(Timestamp.valueOf(addTime));
                userShipmentStatus.setEndTime(Timestamp.valueOf(endTime));
                userShipmentStatus.setPushPullContent(Json);
                userShipmentStatus.setWhetherStatus(0);//失败
                //添加记录
                systemOrderMapper.addUserShipmentStatusRecords(userShipmentStatus);
            }
        } else {
            //拿到最新成功的一条数据 结束时间 为开始时间     和 当前时间 进行拉取
            Timestamp addTime = userShipmentStatusRecords.getEndTime();
            System.out.println("结束时间  " + addTime);
            String endTime = StrUtil.getDate();
            //方法调用 传参 拿到数据  数据有无进行判断
            //Token数据
            boolean organtoken = redisUtil.exitsKey("Organtoken");
            System.out.println("token在redis中是否存在:  " + organtoken);
            if (organtoken) {
                token = redisUtil.get("Organtoken");
            } else {
                //Token数据
                token = visitorUtil.sendRollbackInfo(tokenUrl);
            }
            String Json = VisitorUtil.doGetLogistics(String.valueOf(addTime), endTime, getLogistics, token);
            System.out.println("Json     :" + Json);
            JSONObject jsonObject = JSONObject.parseObject(Json);
            UserOrderShipmentProDetail jsonRootBean = JSON.toJavaObject(jsonObject, UserOrderShipmentProDetail.class);
            //判断成功
            if (jsonRootBean.getMessage().equals("Succeed")) {

                jsonRootBean.getItems().forEach(q -> {
                    UserOrderShipmentPro userOrderShipmentPro;//物流信息
                    System.out.println(q.getOrderNo() + " : " + q.getTrackingNo() + " : " + q.getCarrier() + " : " + q.getCatalogNo() + " : " + q.getSize()
                            + " : " + q.getQuantity() + " : " + q.getIdKey() + " : " + q.getAddDate()
                    );

                    UserOrderShipmentPro userOrderShipmentProIsNot = systemOrderMapper.selectUserOrderShipmentPro(q.getOrderNo());//查看物流信息是否存在
                    //拿到对应的订单号  存在就删除 新增
                    if (userOrderShipmentProIsNot != null) {
                        //删除对应物流信息
                        systemOrderMapper.deleteUserOrderShipmentPro(userOrderShipmentProIsNot.getOrderNo());
                        //新增订单
                        userOrderShipmentPro = q;//物流信息赋值
                        systemOrderMapper.addUserOrderShipmentPro(userOrderShipmentPro);//新增物流信息
                        System.out.println("初始化无数据 修改 删除 新增");
                    } else {
                        //新增订单
                        userOrderShipmentPro = q;//物流信息赋值
                        systemOrderMapper.addUserOrderShipmentPro(userOrderShipmentPro);//新增物流信息
                        System.out.println("初始化无数据  新增");
                    }
                    //成功
                    userShipmentStatus.setAddTime(addTime);
                    userShipmentStatus.setEndTime(Timestamp.valueOf(endTime));
                    userShipmentStatus.setPushPullContent(Json);
                    userShipmentStatus.setWhetherStatus(1);//成功
                    //添加记录
                    systemOrderMapper.addUserShipmentStatusRecords(userShipmentStatus);
                });
            } else {
                //失败
                userShipmentStatus.setAddTime(addTime);
                userShipmentStatus.setEndTime(Timestamp.valueOf(endTime));
                userShipmentStatus.setPushPullContent(Json);
                userShipmentStatus.setWhetherStatus(0);//失败
                //添加记录
                systemOrderMapper.addUserShipmentStatusRecords(userShipmentStatus);
            }
        }
        return 1;
    }

访问token工具类:

    /**
     * 获取系统token
     */
    public  String sendRollbackInfo(String tokenUrl){
        String result = "";//返回结果
        String   token="";//token
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            URL realUrl;
            realUrl = new URL(tokenUrl);
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestMethod("POST");
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            //body中X-www-form-urlencodede中的token账号密码参数 格式  a=b&c=d
            out.print("username=AAA&password=AAA&client_id=AAA&client_secret=AAA&grant_type=AAA&scope=AAA");
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
                String[] split = result.split(":");
                String[] strings = split[1].split(",");
                token= strings[0].replace("\"","");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {// 使用finally块来关闭输出流、输入流
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        System.out.println("Token:  "+token);

        redisUtil.setCacheWithCustomerTime("Organtoken",token,1440);
        return token;
    }

访问接口工具类 根据token:

    /**
     * 以get请求 根据时间戳 拉取信息工具
     */
    public static String doGetData(String stateTime, String endTime, String url, String token){
        //创建HttpClient对象
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        String getUrl=url+"?StateTime="+stateTime+"&EndTime="+endTime;
        System.out.println(getUrl);
        HttpGet get = new HttpGet(getUrl.replace(" ", "%20"));

        try {
            //api_gateway_auth_token自定义header头,用于token验证使用
            get.addHeader("Authorization", "Bearer "+token);
            get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");

            HttpResponse response = httpClient.execute(get);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                //返回json格式
                String res = EntityUtils.toString(response.getEntity());
                return res;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

推送工具类:

    /**
     * 推送信息工具   post请求
     * @param json
     * @param token
     * @return
     */
    public String pushUserAndOrgan(String json, String token,String url){

        String result = "";//返回结果
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            URL realUrl;
            realUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestMethod("POST");
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("Authorization","Bearer "+token);//传入token
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "application/json-patch+json");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            //body
            // 发送请求参数
            out.print(json);//json传参
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {// 使用finally块来关闭输出流、输入流
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        System.out.println(result);
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值