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. 关于iis里面 .net framework 版本的切换

    然而,即便这样还是不够的 在iis上浏览网站会报以下错误: 这是什么原因呢?这是因为应用程序池中没有使用asp.net v4.0 网站程序是用v4.0写的,所以我们要用4.0的程序池版本,当前应用程序 ...

  2. Chrome扩展,应用开发学习笔记之2---恶搞百度一下

    Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...

  3. NS2网络模拟(4)-吞吐率图

    1: #NS2_有线部分\ForGnuplot.plot 2: 3: #gnuplot> 4: #set xtics 0, 1, 10 5: set grid 6: set xrange [0: ...

  4. (转)移动端自定义返回上一页的方法:history

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求. 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  5. Linux crontab 语法和具体的例子

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  6. 潜移默化学会WPF--值转换器

    原文:潜移默化学会WPF--值转换器 1. binding 后面的stringFormat的写法----连接字符串 <TextBlock Text="{Binding Path=Qty ...

  7. Android bluetooth介绍(两): android 蓝牙源架构和uart 至rfcomm过程

    关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本号:基于android4.2先前版本 bluez内核:linux/linux3.08系统:an ...

  8. You don't have permission to access / on this server问题的解决.

    vhosts.conf配置文件中虚拟主机的配置如下,Options Indexes FollowSymLinks 后面添加 ExecCGI <VirtualHost 192.168.10.82: ...

  9. WPF 用代码增加路由事件的方法

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. Windows 10开发基础——XML和JSON (一)

    主要内容: JSON的序列化与反序列化 XML的序列化与反序列化 1.JSON的序列化与反序列化     JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,它 ...