记一次使用hutool的http工具调用外部接口同步人员信息

这篇具有很好参考价值的文章主要介绍了记一次使用hutool的http工具调用外部接口同步人员信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先引入hutool依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.2</version>
</dependency>

编写调用外部接口的工具类

package com.donlim.fms.common.utils;

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import com.donlim.fms.common.dto.Dto;
import com.donlim.fms.model.ESB;
import com.donlim.fms.model.Org;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;

import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName HttpUtil
 * @Description TODO
 * @Author 李安山
 * @DATE 2023/2/15 11:44
 * <p>
 * Version 1.0
 **/

@Slf4j
public class HttpUtil {

    // 人员信息同步接口
    private static  final String url = "http://************:7080/HTTP/DONLIM/ESB/DONLIM_HRMS_QUERYSYNC";

    public static  List<ESB>  getEmployeeList(Dto dto){
        //封装请求参数,以下参数是此接口必须的参数
        JSONObject params = new JSONObject();
        params.put("SOURCEID","FMS");
        params.put("DESTINATIONID","ESB");
        params.put("TYPE","FMS");
        params.put("IPADDRESS","192.168.119.30");
        params.put("BO","syncEmployeeInfoToFms");
        if (dto==null){
            params.put("starttime","2020-01-01");
            params.put("endtime","2023-02-16");
        }else {
            if (ObjectUtils.isEmpty(dto.getDate("startTime")) ||ObjectUtils.isEmpty(dto.getDate("endTime"))){
                params.put("starttime","2020-01-01");
                params.put("endtime","2023-02-16");
            }else {
                String date1 = dto.getDate("startTime").toString();
                String date2 = dto.getDate("endTime").toString();
                params.put("starttime",date1);
                params.put("endtime",date2);
            }
        }
        //调用HttpRequest.put方法
        String result = HttpRequest.put(url)
                .header("Content-Type", "application/json")//头信息,多个头信息多次调用此方法即可
                .header("UrlType", "1")//头信息,多个头信息多次调用此方法即可
                .body(params.toString())//设置请求参数
                .execute().body();
        //根据结果获取请求的数据,一般在[]之中
        result = result.substring(result.indexOf("["),result.lastIndexOf("]")+1);
//        log.info("result==>{}",result);
        //下面为hrms系统人员信息转换成fms人员信息
        List<ESB> emp = new ArrayList<>();
        List<ESB> employeeList = com.alibaba.fastjson.JSONObject.parseArray(result, ESB.class);
        for (int j = 0; j < employeeList.size(); j++) {
            emp.add(employeeList.get(j));
        }
//        log.debug("时间段共{}个员工信息",employeeList.size());
        String company_id = dto.getString("company_id");
        boolean f = StringUtils.isNotBlank(company_id);
        emp.stream().forEach(esb -> {
            esb.setCard_Number(esb.getID_Number());
            try {
                esb.setSalt(PBKD2FUtils.getSalt());
                esb.setPassword(PBKD2FUtils.getPBKDF2(esb.getCard_Number(), esb.getSalt()));
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (DecoderException e) {
                e.printStackTrace();
            } catch (InvalidKeySpecException e) {
                e.printStackTrace();
            }

        });
        return emp;
    }
    public static List<Org> getOrgList(){
        JSONObject params = new JSONObject();
        params.put("SOURCEID","FMS");
        params.put("DESTINATIONID","ESB");
        params.put("TYPE","FMS");
        params.put("IPADDRESS","192.168.119.30");
        params.put("BO","syncORGInfoToFms");
        String result = HttpRequest.put(url)
                .header("Content-Type", "application/json")//头信息,多个头信息多次调用此方法即可
                .header("UrlType", "2")//头信息,多个头信息多次调用此方法即可
                .body(params.toString())
                .execute().body();

        result = result.substring(result.indexOf("["),result.length()-17);
//        System.out.println(result);
        List<Org> emp = new ArrayList<>();
        List<Org> employeeList = com.alibaba.fastjson.JSONObject.parseArray(result, Org.class);

        for (int j = 0; j < employeeList.size(); j++) {
            emp.add(employeeList.get(j));
        }
        System.out.println("共"+emp.size());
//        emp.stream().forEach(System.out::println);
        return emp;
    }
}

根据返回的包含id和父id的集合,自动构建目录树工具类

  1. 首先是TreeNodeVo实体

package com.donlim.fms.common.helper;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;

/**
 * @ClassName TreeNodeVo
 * @Description TODO
 * @Author 李安山
 * @DATE 2023/2/16 11:47
 * <p>
 * Version 1.0
 **/
@Data
@Accessors(chain = true)
public class TreeNodeVO implements Serializable {

    private static final long serialVersionUID = 1L;

    // 节点ID
    private String id;
    private String value;

    // 父节点ID
    private String pId;

    // 节点名称
    private String label;

    // 节点复选框选中状态
//    private Boolean checked;

    //节点图标样式类
    private String icon;

    //URL链接
//    private String url;

    private int sort_no;

//    private String is_enable;

    private Integer size;

    // 子孙节点集合
    private List<TreeNodeVO> children;
}
  1. 构建目录树的工具类

package com.donlim.fms.common.helper;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

/**
 * @ClassName TreeBuilder
 * @Description TODO
 * @Author 李安山
 * @DATE 2023/2/16 11:49
 * <p>
 * Version 1.0
 **/

public class TreeBuilder {
    @Getter
    @Setter
    List<TreeNodeVO> nodeVOs = Lists.newArrayList();

    public TreeBuilder() {
    }

    public TreeBuilder(List<TreeNodeVO> nodeVOs) {
        super();
        this.nodeVOs = nodeVOs;
    }

    public String buildJSONTree() {
        List<TreeNodeVO> nodeTree = buildTree();
        return JSON.toJSONString(nodeTree);
    }

    public List<TreeNodeVO> buildTree() {
        List<TreeNodeVO> treeNodeVOs = Lists.newArrayList();
        List<TreeNodeVO> rootTreeNodeVOs = getParentTreeNodes();
        for (TreeNodeVO rootTreeNodeVO : rootTreeNodeVOs) {
            buildChildTreeNodes(rootTreeNodeVO);
            treeNodeVOs.add(rootTreeNodeVO);
        }
        return treeNodeVOs;
    }

    private void buildChildTreeNodes(TreeNodeVO node) {
        List<TreeNodeVO> children = getChildTreeNodes(node);
        if (!children.isEmpty()) {
            for (TreeNodeVO child : children) {
                buildChildTreeNodes(child);
            }
            node.setChildren(children);
        }
    }

    public List<TreeNodeVO> getChildTreeNodes(TreeNodeVO pnode) {
        List<TreeNodeVO> childTreeNodeVOs = Lists.newArrayList();
        for (TreeNodeVO nodeVO : nodeVOs) {
            if (pnode.getId().equals(nodeVO.getPId())) {
                childTreeNodeVOs.add(nodeVO);
            }
        }
        return childTreeNodeVOs;
    }

    private boolean isParentNode(TreeNodeVO node) {
        boolean isParentNode = true;
        for (TreeNodeVO nodeVO : nodeVOs) {
            if (node.getPId().equals(nodeVO.getId())) {
                isParentNode = false;
                break;
            }
        }
        return isParentNode;
    }

    public List<TreeNodeVO> getParentTreeNodes() {
        List<TreeNodeVO> rootTreeNodeVOs = Lists.newArrayList();
        for (TreeNodeVO nodeVO : nodeVOs) {
            if (isParentNode(nodeVO)) {
                rootTreeNodeVOs.add(nodeVO);
            }
        }
        return rootTreeNodeVOs;
    }

}
  1. 最后根据返回的集合生成目录结构,主要设置treenodevo对象的id,pid,value,lable参数


    @Override
    public List<TreeNodeVO> getOrgInfo() {
        List<Org> orgList = HttpUtil.getOrgList();
        List<TreeNodeVO> treeNodeVOS = new ArrayList<>();
        for (int i = 0; i < orgList.size(); i++) {
            Org o = orgList.get(i);
            String orgName = o.getOrgName();
            TreeNodeVO treeNodeVO = new TreeNodeVO();
            treeNodeVO.setId(o.getOrgId());
            treeNodeVO.setValue(o.getOrgId());
            treeNodeVO.setPId(o.getSuperId());
            treeNodeVO.setLabel(orgName.substring(orgName.lastIndexOf("-")+1));
            treeNodeVOS.add(treeNodeVO);
        }
        treeNodeVOS = new TreeBuilder(treeNodeVOS).buildTree();
        return treeNodeVOS;
    }
  1. controller类

package com.donlim.fms.controller.hrms;

import com.donlim.fms.common.dto.Dtos;
import com.donlim.fms.common.helper.TreeNodeVO;
import com.donlim.fms.service.EmployeeSyncService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @ClassName EmployeeSyncController
 * @Description TODO
 * @Author 李安山
 * @DATE 2023/2/16 8:53
 * <p>
 * Version 1.0
 **/
@RestController
@Slf4j
@Api(tags = "总线人员组织同步接口")
@RequestMapping("/api")
public class EmployeeSyncController {
    @Autowired
    private EmployeeSyncService employeeSyncService;

    @PostMapping("/employSync")
    @ApiOperation("人员同步接口")
    public String employeeSync(HttpServletRequest request) {
        return employeeSyncService.employeeSync(Dtos.newDto(request));
    }

    @GetMapping("/getOrg")
    @ApiOperation("人员同步接口")
    public List<TreeNodeVO> getOrg(HttpServletRequest request) {
        return employeeSyncService.getOrgInfo();
    }
    @GetMapping("/updateNullPassword")
    @ApiOperation("员工密码初始化")
    public void updatePassword(HttpServletRequest request) {
         employeeSyncService.updatePassword();
    }
}
  1. 前端vue+elementui,用级联选择器显示目录树

 <el-form-item label="选择同步组织">
      <div class="block">
        <el-cascader
          v-model="syncParams.id"
          :options="treeNodeVos"
          @change="handleChange"></el-cascader>
      </div>
 </el-form-item>

data中添加treeNodeVos对象

treeNodeVos:[],

methods中添加后台调用方法,此方法可以在点击页面加载时调用,看自己,还有

handleChange(value) {
  console.log(value);
},
getOrgs() {
  this.company_id = '';
  this.$fetch("/api/getOrg", null).then(re => {
    this.treeNodeVos= re;
  });
},

对应处理时间较长的接口,使用@Async注解,需要在启动类上加@EnableAsync

 @Override
    @Async
    public String employeeSync(Dto dto){
        List<ESB> employeeList = HttpUtil.getEmployeeList(dto);
        String id = dto.getString("id").substring(dto.getString("id").lastIndexOf(",")+1,dto.getString("id").lastIndexOf("]"));
        log.info("id==>{}",id);
        log.info("查询到{}个员工",employeeList.size());
        for (int i = 0; i <employeeList.size() ; i++) {
            ESB e = employeeList.get(i);
            if (ObjectUtils.isNotEmpty(e)){
                if (StringUtils.isNotBlank(e.getORGID())){
                    if(!e.getORGID().equals(id)){
                        employeeList.remove(e);
                    }
                }
            }
        }
        if (employeeList.size()==0){
            return "没有要新增的员工";
        }
        int sum = 0;
        if (employeeList.size()>1000){
            for (int i = 0; i < employeeList.size()/300; i++) {
                if ((i+1)*300>employeeList.size()){
                    sum+= esbMapper.insertESB(employeeList.subList(i*300,employeeList.size()));
                }
                sum+= esbMapper.insertESB(employeeList.subList(i*300,(i+1)*300+1));
            }
        }else {
            sum= esbMapper.insertESB(employeeList);
        }
        log.info("新增{}个员工",sum);
        return "新增"+sum+"个员工";
    }

总结:使用第三方工具类,开发简单不少,好用的工具类大大提高开发效率。文章来源地址https://www.toymoban.com/news/detail-752932.html

到了这里,关于记一次使用hutool的http工具调用外部接口同步人员信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hutool工具进行https接口调用(忽略ssl认证)

    1.设置忽略SSl工具类 2.工具类设置

    2024年02月04日
    浏览(30)
  • Hutool的Http调用简单使用

    Http调用 http调用即通过http方式调用第三方接口,现成的工具库有很多,如HttpClient、RestTemplate、OKHttp,今天主要介绍Hutool-http 前置环境 Spring Initializr初始化项目 选择Spring Web和Lombok依赖 Java版本1.8 application.yml配置如下: 引入Hutool依赖: 先写一个简单的被调用接口 主要功能就是

    2024年02月16日
    浏览(20)
  • Java请求Http接口-hutool的HttpUtil(超详细-附带工具类)

    HttpUtil是应对简单场景下Http请求的工具类封装,此工具封装了HttpRequest对象常用操作,可以保证在一个方法之内完成Http请求。 此模块基于JDK的HttpUrlConnection封装完成,完整支持https、代理和文件上传。 针对最为常用的GET和POST请求,HttpUtil封装了两个方法, HttpUtil.get HttpUtil.p

    2024年02月12日
    浏览(27)
  • java使用hutool工具类发送http或者https请求太香啦

    我们使用java内置的http工具实现远程调用的时候,都是用try catch包一堆代码,巨难受,今天看见有人使用hutool工具类那是天简单了呀,具体操作如下: 1,引入依赖 2, 如果不需要设置其他什么头信息,代码: 如果是https请求直接换url里面的http就行 返回信息格式: {\\\"code\\\":200

    2024年02月14日
    浏览(27)
  • 使用HuTool的Http工具发送post传递中文参数,请求会乱码的解决方法

    Hutool 是一款功能丰富、易用的Java工具类库,我们在工作中经常会使用它的各种类库方法简化我们的开发,其中我们甚至能通过它的Http工具类直接发送http的各种请求,下面来介绍一下发送post请求时参数中有中文出现乱码的解决方法。 这样就不会造成请求参数出现乱码问题

    2024年02月01日
    浏览(32)
  • 记一次fegin调用的媒体类型问题

    1.问题:分页查询,分页参数传递不生效 2.开发环境:fegin接口 开发环境:调用接口 3.修改后:fegin接口不变 调用接口 前端媒体类型: 问题解决!!! 4.原因分析: 项目前端默认请求使用的为application/x-www-form-urlencoded,此处fegin使用@RequestBody的为application/json格式,需要统一

    2024年02月12日
    浏览(35)
  • 记一次Apache HTTP Client问题排查

    通过日志查看,存在两种异常情况。 第一种:开始的时候HTTP请求会报超时异常。 762663363 [2023-07-21 06:04:25] [executor-64] ERROR - com.xxl.CucmTool - CucmTool|sendRisPortSoap error,url:https://xxxxxx/realtimeservice/services/RisPort org.apache.http.conn.HttpHostConnectException: Connect to xxx [/xxx] failed: 连接超时 第二种

    2024年02月12日
    浏览(52)
  • 记一次问题解决:通过http启动docker容器报500错误

    问题描述 在打开防火墙的情况下,通过http启动docker容器报500错误 解决过程 1.查看2375端口是否开放 2.检查外部网络是否可以访问服务器 直接在浏览器输入 http://192.xxx.xxx.xxx:2375/containers/json?all=true 看是否有返回 结果是有返回,代表外部网络连接服务器没问题 3.查看ip转发 坑

    2024年02月13日
    浏览(46)
  • 使用Java调用http接口

    使用Java调用HTTP接口的步骤如下: 创建一个URL对象,指定HTTP接口的地址。 打开URL连接,获取URLConnection对象。 设置URLConnection对象的请求方式、超时时间等参数。 发送请求,并获取服务器返回的响应结果。 处理响应结果,可以将响应结果转换成字符串或其他格式。 下面是一

    2024年02月15日
    浏览(34)
  • 【高效开发工具系列】Hutool Http工具类

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包