组织信息同步接口
提供了组织信息同步接口IDataExtraction,当需要将用户应用系统中的用户、机构、角色等组织信息同步至本产品时,可使用此接口抽取组织信息到本产品系统中。
组织信息的同步分为两类:
- 全同步:一次同步全部数据。
- 节点同步:一次同步某个机构节点或者角色节点里的信息。
组织信息同步接口IDataExtraction
是一个数据抽取接口,通过实现它定义的方法,抽取用户系统的机构、角色、用户数据给本产品系统。
全同步方法:
extractUser
语法: public ExtractResult extractUser()
功能说明:得到用户数据,用于全同步
返回值 :抽取方法返回值类ExtractResult
extractOrg
语法: public ExtractResult extractOrg()
功能说明:得到机构数据,用于全同步
返回值 :抽取方法返回值类ExtractResult
extractRole
语法: public ExtractResult extractRole()
功能说明:得到角色数据,用于全同步
返回值 :抽取方法返回值类ExtractResult
extractOrgUser
语法: public ExtractResult extractOrgUser()
功能说明:得到机构用户关系数据,用于全同步
返回值 :抽取方法返回值类ExtractResult
extractRoleUser
语法: public ExtractResult extractRoleUser()
功能说明:得到角色用户关系数据,用于全同步
返回值 :抽取方法返回值类ExtractResult
节点同步方法:
extractOrg
语法: public ExtractResult extractOrg(int orgId)
参数说明:
- orgId – 机构ID
功能说明:抽取orgId下级机构,用于节点同步
返回值 :抽取方法返回值类ExtractResult
extractRole
语法: public ExtractResult extractRole (int roleId)
参数说明:
- roleId – 角色ID
功能说明:抽取roleId下级角色,用于节点同步
返回值 :抽取方法返回值类ExtractResult
extractUserByRole
语法: public ExtractResult extractRoleUser(int roleId)
参数说明:
- roleId – 角色ID
功能说明:得到roleId下用户,用于节点同步
返回值 :抽取方法返回值类ExtractResult
extractUserByOrg
语法: public void extractUserByOrg (int orgId)
参数说明:
- orgId – 机构ID
功能说明:得到orgId下用户,用于节点同步
返回值 :抽取方法返回值类ExtractResult
extractRootOrg
语法: public Org extractRootOrg()
功能说明:得到根机构,用于节点同步
返回值 : 平台机构类Org
extractRootRole
语法: public Role extractRootRole()
功能说明:得到根角色,用于节点同步
返回值 : 平台角色类Role
其他相关类ExtractResult
ExtractResult是组织信息同步接口中方法的返回值类。
可用方法如下:
ExtractResult
语法:public ExtractResult(Map data, int dataType)
功能说明:构造方法,用于构造接口抽取方法的返回值类。
参数说明:
- data - Map 存储抽取出来的用户数据。
分两种情况:
1)增量同步data结构:
Map[Integer, java.util.List[T]]
[key:0 value:增加的数据] [key:1 value:修改的数据] [key:2 value: 删除的数据]
2)全表同步data结构:
Map[Integer, java.util.List[T]]
用户信息,key是用户名(String),value是User对象
机构信息,key是机构编号(Integer),value是Org对象
角色信息,key是角色编号(Integer),value是Role对象
角色用户关系信息,key是用户名(String),value是RoleUser对象
机构用户关系信息,key是用户名(String),value是OrgUser对象
dataType int 同步数据方式,0:增量 1:全量
组织信息同步相关表结构
机构表(T_org)
角色表(T_role)
用户表(T_user)
机构用户表(RT_orgUser)
角色用户表(RT_roleUser)
组织信息同步接口使用示例
Step1
实现组织信息同步接口将编译后的类文件存放至WEB-INF/classes/【包路径】下。
例如:WEB-INF/classes/ com.runqianapp.synchronize.extract.MyDemo.class
示例代码可参考下文中的示例代码:MyDemo.java
Step2
配置组织信息同步接口类并指定是否开启节点同步。
在WEB-INF/lib/gez_userDataSyn-1.0.jar下的synchronize.properties 文件中配置:
- customer=com.runqianapp.synchronize.extract.MyDemo1(用于配置IDataExtraction接口实现类)
- listener= com.runqianapp.synchronize.listener.impl.SetPathListener(使用默认即可)
- isSyn=false(是否开启节点树同步功能)
Step3
指明用户应用系统中的根机构和根角色。
在WEB-INF/misInitConfig.xml中配置:
- <conf_rootorg dataType="1" default="客户根机构号" inputType="text" value="客户根机构号" />
- <conf_rootrole dataType="客户跟角色号" default="1" inputType="text" value="客户跟角色号" />
Step4
实现调用组织信息同步接口执行信息同步的过程。例如可以利用产品的调度功能,实现一个调用组织信息同步接口的自定义任务类型,并建立周期性调度任务,任务周期可自行设定。如果开启了节点同步则会调用机构角色树时调用接口实现类中相应方法执行节点下数据的同步。
具体自定义调度任务的相关接口和使用方法,参见:基本任务抽象类接口。
示例代码
以下为组织信息同步接口实现类MyDemo的示例代码:
public class MyDemo implements IDataExtraction {
private Connection conn;
public MyDemo() {
try {
//设置数据库连接
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@192.168.10.43:1521:ORCL";
String user = "zyzx";
String password = "zyzx";
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
//全同步时机构抽取方法
public ExtractResult extractOrg() {
String sql = "select c.org_index as org_id,a.org_name,b.org_index as org_father_id from zyzx.sysorg a left join zyzx.sysorgindex b on a.org_parent_id = b.org_id left join zyzx.sysorgindex c on a.org_id = c.org_id";
Map<Integer, Org> orgMap = extractOrg(sql);
return new ExtractResult(orgMap, 1);
}
//节点同步时根据机构id抽取下级机构数据方法
public ExtractResult extractOrg(int orgId) {
String sql = "select c.org_index as org_id,a.org_name,b.org_index as org_father_id from zyzx.sysorg a left join zyzx.sysorgindex b on a.org_parent_id = b.org_id left join zyzx.sysorgindex c on a.org_id = c.org_id where b.org_index="+orgId;
Map<Integer, Org> orgMap = extractOrg(sql);
if(orgMap.size()<1){
return new ExtractResult();
}
return new ExtractResult(orgMap, 1);
}
//处理机构字段,转换成所要求的机构类对象
private Map<Integer, Org> extractOrg(String sql) {
Map<Integer, Org> orgMap = new HashMap<Integer, Org>();
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
orgMap.put(rs.getInt(1), new Org(rs.getInt(1), rs.getString(2), rs.getInt(3)));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rs, stmt);
}
return orgMap;
}
//抽取根机构数据
public Org extractRootOrg() {
Org org = null;
Statement stmt = null;
ResultSet rs = null;
String sql = "select c.org_index as org_id,a.org_name,b.org_index as org_father_id from zyzx.sysorg a left join zyzx.sysorgindex b on a.org_parent_id = b.org_id left join zyzx.sysorgindex c on a.org_id = c.org_id where a.org_id='8a9e00d62c30bbf5012c61f2039e0648'";
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if(rs.next()) {
org = new Org(rs.getInt(1), rs.getString(2), rs.getInt(3));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rs, stmt);
}
return org;
}
//其他用户,角色抽取,机构用户关系,角色用户关系部分代码类似,略
……