国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記一次使用hutool的http工具調(diào)用外部接口同步人員信息

這篇具有很好參考價(jià)值的文章主要介紹了記一次使用hutool的http工具調(diào)用外部接口同步人員信息。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

首先引入hutool依賴

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

編寫調(diào)用外部接口的工具類

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){
        //封裝請(qǐng)求參數(shù),以下參數(shù)是此接口必須的參數(shù)
        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);
            }
        }
        //調(diào)用HttpRequest.put方法
        String result = HttpRequest.put(url)
                .header("Content-Type", "application/json")//頭信息,多個(gè)頭信息多次調(diào)用此方法即可
                .header("UrlType", "1")//頭信息,多個(gè)頭信息多次調(diào)用此方法即可
                .body(params.toString())//設(shè)置請(qǐng)求參數(shù)
                .execute().body();
        //根據(jù)結(jié)果獲取請(qǐng)求的數(shù)據(jù),一般在[]之中
        result = result.substring(result.indexOf("["),result.lastIndexOf("]")+1);
//        log.info("result==>{}",result);
        //下面為hrms系統(tǒng)人員信息轉(zhuǎn)換成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("時(shí)間段共{}個(gè)員工信息",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")//頭信息,多個(gè)頭信息多次調(diào)用此方法即可
                .header("UrlType", "2")//頭信息,多個(gè)頭信息多次調(diào)用此方法即可
                .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;
    }
}

根據(jù)返回的包含id和父id的集合,自動(dòng)構(gòu)建目錄樹(shù)工具類

  1. 首先是TreeNodeVo實(shí)體

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;

    // 節(jié)點(diǎn)ID
    private String id;
    private String value;

    // 父節(jié)點(diǎn)ID
    private String pId;

    // 節(jié)點(diǎn)名稱
    private String label;

    // 節(jié)點(diǎn)復(fù)選框選中狀態(tài)
//    private Boolean checked;

    //節(jié)點(diǎn)圖標(biāo)樣式類
    private String icon;

    //URL鏈接
//    private String url;

    private int sort_no;

//    private String is_enable;

    private Integer size;

    // 子孫節(jié)點(diǎn)集合
    private List<TreeNodeVO> children;
}
  1. 構(gòu)建目錄樹(shù)的工具類

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. 最后根據(jù)返回的集合生成目錄結(jié)構(gòu),主要設(shè)置treenodevo對(duì)象的id,pid,value,lable參數(shù)


    @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,用級(jí)聯(lián)選擇器顯示目錄樹(shù)

 <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對(duì)象

treeNodeVos:[],

methods中添加后臺(tái)調(diào)用方法,此方法可以在點(diǎn)擊頁(yè)面加載時(shí)調(diào)用,看自己,還有

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

對(duì)應(yīng)處理時(shí)間較長(zhǎng)的接口,使用@Async注解,需要在啟動(dòng)類上加@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("查詢到{}個(gè)員工",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 "沒(méi)有要新增的員工";
        }
        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("新增{}個(gè)員工",sum);
        return "新增"+sum+"個(gè)員工";
    }

總結(jié):使用第三方工具類,開(kāi)發(fā)簡(jiǎn)單不少,好用的工具類大大提高開(kāi)發(fā)效率。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752932.html

到了這里,關(guān)于記一次使用hutool的http工具調(diào)用外部接口同步人員信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • hutool工具進(jìn)行https接口調(diào)用(忽略ssl認(rèn)證)

    1.設(shè)置忽略SSl工具類 2.工具類設(shè)置

    2024年02月04日
    瀏覽(15)
  • Hutool的Http調(diào)用簡(jiǎn)單使用

    Hutool的Http調(diào)用簡(jiǎn)單使用

    Http調(diào)用 http調(diào)用即通過(guò)http方式調(diào)用第三方接口,現(xiàn)成的工具庫(kù)有很多,如HttpClient、RestTemplate、OKHttp,今天主要介紹Hutool-http 前置環(huán)境 Spring Initializr初始化項(xiàng)目 選擇Spring Web和Lombok依賴 Java版本1.8 application.yml配置如下: 引入Hutool依賴: 先寫一個(gè)簡(jiǎn)單的被調(diào)用接口 主要功能就是

    2024年02月16日
    瀏覽(12)
  • Java請(qǐng)求Http接口-hutool的HttpUtil(超詳細(xì)-附帶工具類)

    Java請(qǐng)求Http接口-hutool的HttpUtil(超詳細(xì)-附帶工具類)

    HttpUtil是應(yīng)對(duì)簡(jiǎn)單場(chǎng)景下Http請(qǐng)求的工具類封裝,此工具封裝了HttpRequest對(duì)象常用操作,可以保證在一個(gè)方法之內(nèi)完成Http請(qǐng)求。 此模塊基于JDK的HttpUrlConnection封裝完成,完整支持https、代理和文件上傳。 針對(duì)最為常用的GET和POST請(qǐng)求,HttpUtil封裝了兩個(gè)方法, HttpUtil.get HttpUtil.p

    2024年02月12日
    瀏覽(19)
  • java使用hutool工具類發(fā)送http或者h(yuǎn)ttps請(qǐng)求太香啦

    我們使用java內(nèi)置的http工具實(shí)現(xiàn)遠(yuǎn)程調(diào)用的時(shí)候,都是用try catch包一堆代碼,巨難受,今天看見(jiàn)有人使用hutool工具類那是天簡(jiǎn)單了呀,具體操作如下: 1,引入依賴 2, 如果不需要設(shè)置其他什么頭信息,代碼: 如果是https請(qǐng)求直接換url里面的http就行 返回信息格式: {\\\"code\\\":200

    2024年02月14日
    瀏覽(24)
  • 使用HuTool的Http工具發(fā)送post傳遞中文參數(shù),請(qǐng)求會(huì)亂碼的解決方法

    Hutool 是一款功能豐富、易用的Java工具類庫(kù),我們?cè)诠ぷ髦薪?jīng)常會(huì)使用它的各種類庫(kù)方法簡(jiǎn)化我們的開(kāi)發(fā),其中我們甚至能通過(guò)它的Http工具類直接發(fā)送http的各種請(qǐng)求,下面來(lái)介紹一下發(fā)送post請(qǐng)求時(shí)參數(shù)中有中文出現(xiàn)亂碼的解決方法。 這樣就不會(huì)造成請(qǐng)求參數(shù)出現(xiàn)亂碼問(wèn)題

    2024年02月01日
    瀏覽(32)
  • 記一次fegin調(diào)用的媒體類型問(wèn)題

    記一次fegin調(diào)用的媒體類型問(wèn)題

    1.問(wèn)題:分頁(yè)查詢,分頁(yè)參數(shù)傳遞不生效 2.開(kāi)發(fā)環(huán)境:fegin接口 開(kāi)發(fā)環(huán)境:調(diào)用接口 3.修改后:fegin接口不變 調(diào)用接口 前端媒體類型: 問(wèn)題解決?。?! 4.原因分析: 項(xiàng)目前端默認(rèn)請(qǐng)求使用的為application/x-www-form-urlencoded,此處fegin使用@RequestBody的為application/json格式,需要統(tǒng)一

    2024年02月12日
    瀏覽(23)
  • 記一次Apache HTTP Client問(wèn)題排查

    記一次Apache HTTP Client問(wèn)題排查

    通過(guò)日志查看,存在兩種異常情況。 第一種:開(kāi)始的時(shí)候HTTP請(qǐng)求會(huì)報(bào)超時(shí)異常。 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: 連接超時(shí) 第二種

    2024年02月12日
    瀏覽(28)
  • 記一次問(wèn)題解決:通過(guò)http啟動(dòng)docker容器報(bào)500錯(cuò)誤

    記一次問(wèn)題解決:通過(guò)http啟動(dòng)docker容器報(bào)500錯(cuò)誤

    問(wèn)題描述 在打開(kāi)防火墻的情況下,通過(guò)http啟動(dòng)docker容器報(bào)500錯(cuò)誤 解決過(guò)程 1.查看2375端口是否開(kāi)放 2.檢查外部網(wǎng)絡(luò)是否可以訪問(wèn)服務(wù)器 直接在瀏覽器輸入 http://192.xxx.xxx.xxx:2375/containers/json?all=true 看是否有返回 結(jié)果是有返回,代表外部網(wǎng)絡(luò)連接服務(wù)器沒(méi)問(wèn)題 3.查看ip轉(zhuǎn)發(fā) 坑

    2024年02月13日
    瀏覽(24)
  • 使用Java調(diào)用http接口

    使用Java調(diào)用HTTP接口的步驟如下: 創(chuàng)建一個(gè)URL對(duì)象,指定HTTP接口的地址。 打開(kāi)URL連接,獲取URLConnection對(duì)象。 設(shè)置URLConnection對(duì)象的請(qǐng)求方式、超時(shí)時(shí)間等參數(shù)。 發(fā)送請(qǐng)求,并獲取服務(wù)器返回的響應(yīng)結(jié)果。 處理響應(yīng)結(jié)果,可以將響應(yīng)結(jié)果轉(zhuǎn)換成字符串或其他格式。 下面是一

    2024年02月15日
    瀏覽(19)
  • 【高效開(kāi)發(fā)工具系列】Hutool Http工具類

    【高效開(kāi)發(fā)工具系列】Hutool Http工具類

    ??????歡迎來(lái)到我的博客,很高興能夠在這里和您見(jiàn)面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見(jiàn)解。 推薦:kwan 的首頁(yè),持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月05日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包