package com.shjysoft.yunxi.sync.webservice;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.JAXBElement;

import org.junit.Test;
import org.springframework.stereotype.Service;

import com.shjysoft.base.util.common.StringUtil;
import com.shjysoft.yunxi.person.entity.PersonSeal;
import com.shjysoft.yunxi.sync.TreeDepartment;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.ArrayOfDepartmentBean;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.ArrayOfSubCompanyBean;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.ArrayOfUserBean;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.DepartmentBean;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.HrmService;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.HrmServicePortType;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.SubCompanyBean;
import com.shjysoft.yunxi.sync.webservice.EC_OA.entity.UserBean;

@Service
public class WebserviceUtil {
public static String ip = "http://192.168.8.100";
public static String BASE = "0";
/**
* 测试同步
*/
@Test
public void SynTimingFromOASubCompany(){
HrmService hrmService = new HrmService();
HrmServicePortType hrmServicePortType =hrmService.getHrmServiceHttpPort();
ArrayOfSubCompanyBean arrayOfSubCompanyBean= hrmServicePortType.getHrmSubcompanyInfo(ip);
if(arrayOfSubCompanyBean!=null){
List<SubCompanyBean> subCompanyBeanList = arrayOfSubCompanyBean.getSubCompanyBean();
WebserviceUtil wsutil = new WebserviceUtil();
TreeDepartment treeDepartment = wsutil.builderLdapDepartment(subCompanyBeanList, BASE);

System.out.println("xxx");

}

}

/**
* 同步组织架构
* @param subCompanyBeanList
* @param base
* @return
*/
public TreeDepartment builderLdapDepartment(List<SubCompanyBean> subCompanyBeanList,String base){
TreeDepartment treeDepartment = new TreeDepartment();
//treeDepartment.setName(base);//祖先的名字必须为""
treeDepartment.setName("");

if(subCompanyBeanList == null || subCompanyBeanList.size() == 0) return treeDepartment;

builderDepartment(subCompanyBeanList,base,treeDepartment);

return treeDepartment;
}

public void builderDepartment(List<SubCompanyBean> subCompanyBeanList,String base,TreeDepartment parentTreeDepartment){

boolean hasChiled = findSubDepartment(subCompanyBeanList,base,parentTreeDepartment);
if(!hasChiled) return;

List<TreeDepartment> subTreeDepartmentList = parentTreeDepartment.getSubTreeDepartment();
for(TreeDepartment treeDepartment:subTreeDepartmentList){
builderDepartment(subCompanyBeanList,treeDepartment.getWeb_id(),treeDepartment);
}
}

public boolean findSubDepartment(List<SubCompanyBean> subCompanyBeanList,String base,TreeDepartment parentTreeDepartment){

List<TreeDepartment> subTreeDepartmentList = parentTreeDepartment.getSubTreeDepartment();
boolean hasChiled = false;
for(SubCompanyBean subCompanyBean:subCompanyBeanList){
JAXBElement<String> supsubcompanyidJAXBElement = subCompanyBean.getSupsubcompanyid(); //上级分部id
String parentId = supsubcompanyidJAXBElement.getValue();
JAXBElement<String> canceledJAXBElement = subCompanyBean.getCanceled(); //是否封存(0和null表示是正常,1:表示封存)
String canceled = canceledJAXBElement.getValue();
String code = subCompanyBean.getCode().getValue();
//if(canceled != null && "1".equals(canceled)) continue;

if(base.equals(parentId)){

if(!hasChiled){
if(subTreeDepartmentList == null){
subTreeDepartmentList = new ArrayList<TreeDepartment>();
parentTreeDepartment.setSubTreeDepartment(subTreeDepartmentList);
}
}

TreeDepartment subTreeDepartment = new TreeDepartment();
subTreeDepartment.setWeb_id(subCompanyBean.getSubcompanyid().getValue());
subTreeDepartment.setName(subCompanyBean.getFullname().getValue());
//停用
if(canceled != null && "1".equals(canceled)){
subTreeDepartment.setEnableOrDisable(true);
}
//添加编码
subTreeDepartment.setCode("S"+subCompanyBean.getSubcompanyid().getValue());
subTreeDepartmentList.add(subTreeDepartment);
//查询部门并添加
HrmService hrmService = new HrmService();
HrmServicePortType hrmServicePortType =hrmService.getHrmServiceHttpPort();
ArrayOfDepartmentBean arrayOfDepartmentBean= hrmServicePortType.getHrmDepartmentInfo(ip,subTreeDepartment.getWeb_id());
if(arrayOfDepartmentBean!=null&&StringUtil.isNotNullOrBlank(arrayOfDepartmentBean)){
List<DepartmentBean> departmentBeanList = arrayOfDepartmentBean.getDepartmentBean();
if(departmentBeanList!=null&&departmentBeanList.size()>0){
builderDepartment_dept(departmentBeanList,subTreeDepartment.getWeb_id(),subTreeDepartment);
}
}

hasChiled = true;
}
}
return hasChiled;
}

public void builderDepartment_dept(List<DepartmentBean> departmentBeanList,String base,TreeDepartment parentTreeDepartment){

boolean hasChiled = findSubDepartment_dept(departmentBeanList,base,parentTreeDepartment);
if(!hasChiled) return;

List<TreeDepartment> subTreeDepartmentList = parentTreeDepartment.getSubTreeDepartment();
for(TreeDepartment treeDepartment:subTreeDepartmentList){
builderDepartment_dept(departmentBeanList,treeDepartment.getWeb_id(),treeDepartment);
}
}

public boolean findSubDepartment_dept(List<DepartmentBean> departmentBeanList,String base,TreeDepartment parentTreeDepartment){

List<TreeDepartment> subTreeDepartmentList = parentTreeDepartment.getSubTreeDepartment();
boolean hasChiled = false;
for(DepartmentBean departmentBean:departmentBeanList){

//分部id
JAXBElement<String> subcompanyidJAXBElement = departmentBean.getSubcompanyid();
String subId = subcompanyidJAXBElement.getValue();
//上级分部id
JAXBElement<String> departJAXBElement = departmentBean.getSupdepartmentid();
String parentId = departJAXBElement.getValue();

if(StringUtil.isNotNullOrBlank(parentId)&&parentId.equals("0")){
parentId = subId;
}
JAXBElement<String> canceledJAXBElement = departmentBean.getCanceled(); //是否封存(0和null表示是正常,1:表示封存)
String canceled = canceledJAXBElement.getValue();
//编码
String code = departmentBean.getCode().getValue();
//if(canceled != null && "1".equals(canceled)) continue;

if(base.equals(parentId)){

if(!hasChiled){
if(subTreeDepartmentList == null){
subTreeDepartmentList = new ArrayList<TreeDepartment>();
parentTreeDepartment.setSubTreeDepartment(subTreeDepartmentList);
}
}

TreeDepartment subTreeDepartment = new TreeDepartment();
subTreeDepartment.setWeb_id(departmentBean.getDepartmentid().getValue());
subTreeDepartment.setName(departmentBean.getFullname().getValue());
if(canceled != null && "1".equals(canceled)){
subTreeDepartment.setEnableOrDisable(true);//停用
}
//添加编码
subTreeDepartment.setCode("D"+departmentBean.getDepartmentid().getValue());
subTreeDepartmentList.add(subTreeDepartment);
//根据部门添加人员
List<PersonSeal> personList = getPersonList(departmentBean.getDepartmentid().getValue());
subTreeDepartment.setPersons(personList);

hasChiled = true;
}
}
return hasChiled;
}

/**
* 根据分部和部门id同步人员
* @return
*/
public static List<PersonSeal> getPersonList(String departmentid){
List<PersonSeal> personList = new ArrayList<PersonSeal>();
HrmService hrmService = new HrmService();
HrmServicePortType hrmServicePortType =hrmService.getHrmServiceHttpPort();
ArrayOfUserBean arrayOfUserBean= hrmServicePortType.getHrmUserInfo(ip,"", "", departmentid, "", "");
if(arrayOfUserBean!=null){
List<UserBean> userBeanList = arrayOfUserBean.getUserBean();
if(userBeanList!=null&&userBeanList.size()>0){
for (UserBean userBean : userBeanList) {
//获取人员唯一标识
String uid = userBean.getLoginid().getValue();
if(StringUtil.isNullOrBlank(uid)) continue;

PersonSeal personSeal = new PersonSeal();
//人员名称
JAXBElement<String> lastnameElement= userBean.getLastname();
String name = lastnameElement.getValue();
//手机号码
JAXBElement<String> mobileElement= userBean.getMobile();
String mobile = mobileElement.getValue();
//职位
JAXBElement<String> jobtitleElement= userBean.getJobtitle();
String jobtitle = jobtitleElement.getValue();
//编号
JAXBElement<String> workcodeElement= userBean.getWorkcode();
String workcode = workcodeElement.getValue();

//邮箱
JAXBElement<String> emailElement= userBean.getEmail();
String email = emailElement.getValue();
//判断人员状态
String status = userBean.getStatus().getValue();
//状态,0:试用、1:正式、2:临时、3:试用延期、4:解聘、5:离职、6:退休、7:无效
if(status.equals("4")||status.equals("5")||status.equals("6")||status.equals("7")){
personSeal.setIs_enable(false);//同步为停用
}

personSeal.setPassword("88888888");
personSeal.setCreate_time(new Date());
personSeal.setUpdate_time(new Date());
personSeal.setMobile(mobile);
personSeal.setName(name);
personSeal.setPosition(jobtitle);
personSeal.setMail_address(email);
personSeal.setCode(userBean.getLoginid().getValue());
personList.add(personSeal);
}
}
}
return personList;
}

}

基于List数组转换成tree对象的更多相关文章

  1. js 一维数组转成tree 对象

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 如何将PHP对象数组转换成普通数组

    /** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...

  3. LeetCode OJ:Convert Sorted Array to Binary Search Tree(将排序好的数组转换成二叉搜索树)

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 讲一 ...

  4. JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组

    一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...

  5. js 中 json.stringfy()将对象、数组转换成字符串

    json.stringfy()将对象.数组转换成字符串 var student = new Object(); student.name = "Lanny"; student.ag ...

  6. JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中

    处理JSON字符串时,一直出错,写个样例后发现原来是没有弄清楚数据的格式问题. 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News package lyx.ent ...

  7. PHP 把返回的数据集转换成Tree树

    /** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * ...

  8. 100怎么变成100.00 || undefined在数字环境下是:NaN || null在数字环境下是0 || 数组的toString()方法把每个元素变成字符串,拼在一起以逗号隔开 || 空数组转换成字符串后是什么?

    100怎么变成100.00?

  9. $.toJSON的用法或把数组转换成json类型

    1. html页面全部代码 <html> <head>     <title></title> <script src="../../S ...

随机推荐

  1. c#调api串口通讯

    原文:c#调api串口通讯 在调试ICU通信设备的时候,由于串口通信老出现故障,所以就怀疑CF实现的SerialPort类是否有问题,所以最后决定用纯API函数实现串口读写. 先从网上搜索相关代码(关 ...

  2. windows下Redis 主从读写分离部署

    原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...

  3. git clone命令简介

    git clone: 正如上图,当我们打开终端的情况下,默认我们所在的目录是在/home/shiyanlou的,大家可以在终端输入以下命令把目录切换到桌面cd  /home/Desktop这个时候输入 ...

  4. SharePoint创建内容类型

    SharePoint创建内容类型 内容类型的用途是多种多样的.创建内容类型也非常简单. 1. 点击网站操作--网站设置. 2. 点击网站内容类型,点击创建. 3. 命名Beginning_ShareP ...

  5. 第一个spring boot工程

    参考. 1. 碰到的问题: -出现bind:address already in use是因为当前项目正在运行,停掉当前项目即可.cmd中命令 netstat -nao 查看所有占用的端口及PID号, ...

  6. 重启网卡的几种方法(命令行,API,

    1.重启windows网卡命令 rem 禁用网卡netsh interface set interface 本地连接 disabledrem 启用网卡 netsh interface set inte ...

  7. 你需要了解的 C++ 17 Top 19 新特性(附精彩评论)

    什么是 C++17? C++17(或 C++1z)是继 C++14 之后 C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称.C++17 现在功能已齐全,正在成为国际标准的路上.它的规范已 ...

  8. LINQ查询表达式---------let子句

    LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...

  9. Unity 3d新手上路

    作为一位unity新手,初学遇到了不少坑,而且不知道怎么找,发觉网上关于unity的文档好少,还是我暂时没找到. 现在说说void OnTriggerEnter(Collider e),这个函数是我加 ...

  10. CWnd和HWND的区别(hWnd只是CWnd对象的一个成员变量,代表与这个对象绑定的窗口)

            所有控件类都是CWnd类的派生类,CWnd的所有成员函数在控件类中都可以使用.在MFC中,CWnd类是一个很重要的类,它封装了Windows的窗口句柄HWND.在Windows编程中, ...