SyncOrgElementsBaseInfoServiceImpl.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. package com.uas.service.Impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.landray.kmss.sys.organization.webservice.in.ISysSynchroSetOrgWebService;
  6. import com.landray.kmss.sys.organization.webservice.in.SysSynchroSetOrgContext;
  7. import com.landray.kmss.sys.organization.webservice.in.SysSynchroSetResult;
  8. import com.uas.core.config.AddSoapHeader;
  9. import com.uas.core.config.WebServiceConfig;
  10. import com.uas.dao.BaseDao;
  11. import com.uas.dao.SqlRowList;
  12. import com.uas.service.SyncOrgElementsBaseInfoService;
  13. import org.apache.cxf.interceptor.LoggingInInterceptor;
  14. import org.apache.cxf.interceptor.LoggingOutInterceptor;
  15. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import sun.misc.BASE64Encoder;
  21. import java.util.List;
  22. /**
  23. * @author koul
  24. * @email koul@usoftchina.com
  25. * @date 2021-05-07 15:33
  26. */
  27. @Service
  28. public class SyncOrgElementsBaseInfoServiceImpl implements SyncOrgElementsBaseInfoService {
  29. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  30. @Autowired
  31. BaseDao baseDao;
  32. /**
  33. * 同步所有组织架构基本信息
  34. * @param setOrgContext 组织架构信息接入上下文
  35. * @return
  36. * @throws Exception
  37. */
  38. private SysSynchroSetResult syncOrgElementsBaseInfo(SysSynchroSetOrgContext setOrgContext) throws
  39. Exception{
  40. return getService().syncOrgElementsBaseInfo(setOrgContext);
  41. }
  42. /**
  43. * 获取组织架构接入 WebService 对象
  44. * @return
  45. */
  46. private ISysSynchroSetOrgWebService getService(){
  47. // 定义组织架构接入 WebService 对象
  48. ISysSynchroSetOrgWebService setOrgWebService=null;
  49. if(setOrgWebService==null){
  50. // WebService 配置信息对象(读取自 client.properties 配置文件)
  51. WebServiceConfig serviceConfig = WebServiceConfig.getInstance();
  52. // 使用 Apache CXF 框架创建组织架构接入 WebService 对象
  53. JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
  54. factory.getInInterceptors().add(new LoggingInInterceptor());
  55. factory.getOutInterceptors().add(new LoggingOutInterceptor());
  56. factory.getOutInterceptors().add(new AddSoapHeader());
  57. factory.setServiceClass(serviceConfig.getOrgServiceClass());
  58. // 设置服务请求的 URL 地址
  59. String servicePath = serviceConfig.getOrgAddress();
  60. factory.setAddress(servicePath);
  61. setOrgWebService= (ISysSynchroSetOrgWebService) factory.create();
  62. }
  63. return setOrgWebService;
  64. }
  65. /**
  66. * 同步组织架构信息
  67. * @param setOrgContext 组织架构信息接入上下文
  68. * @return
  69. * @throws Exception
  70. */
  71. private SysSynchroSetResult syncOrgElements(SysSynchroSetOrgContext setOrgContext) throws Exception{
  72. return getService().syncOrgElements(setOrgContext);
  73. }
  74. /**
  75. * 同步更新的组织架构信息
  76. * @param setOrgContext 组织架构信息接入上下文
  77. * @return
  78. * @throws Exception
  79. */
  80. private SysSynchroSetResult updateOrgElement(SysSynchroSetOrgContext setOrgContext) throws Exception{
  81. return getService().updateOrgElement(setOrgContext);
  82. }
  83. /**
  84. * 封装数据
  85. * @return
  86. */
  87. private JSONArray getOrgJsonData(){
  88. JSONArray resultArray = new JSONArray();
  89. // 《组织部门》 数据对象
  90. SqlRowList orgs = baseDao.queryForRowSet("select row_number() over (order by or_id) rn, case when nvl" +
  91. "(or_landrayid,' ')=' ' then to_char(or_id) else or_landrayid end or_id,or_code,or_name ," +
  92. "or_parentname,or_headmancode,or_headmanname,or_path, (select case when nvl(em_landrayemid,' ')=' ' " +
  93. "then to_char(em_id) else em_landrayemid end from hrorg ho left join employee on ho" +
  94. ".or_headmancode=em_code where ho.or_id=hr.or_subof) as superLeader,or_statuscode,or_landraysubid," +
  95. "to_char(or_subof) or_subof,case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else " +
  96. "em_landrayemid end emid from hrorg hr left join employee on hr.or_headmancode=em_code where " +
  97. "nvl(or_subof,0)>0 order by rn");
  98. while (orgs.next()) {
  99. JSONObject orgObj = new JSONObject();
  100. orgObj.put("id", orgs.getGeneralString("or_id")); // 唯一标识 (不允许为空)
  101. orgObj.put("lunid", orgs.getGeneralString("or_id")); // 唯一标识 (若不为空,直接作为主健存入数据库,不允许为空)
  102. orgObj.put("name", orgs.getGeneralString("or_name")); // 名称 (不允许为空)
  103. orgObj.put("type", "dept"); // 组织架构类型 (不允许为空 可选项: org(机构)、dept(部门)、group(群组)、post(岗位)、person(人员))
  104. orgObj.put("no", orgs.getGeneralString("or_code")); // 编号 (可为空)
  105. orgObj.put("order", orgs.getGeneralString("rn")); // 排序号 (可为空)
  106. orgObj.put("keyword", ""); // 关键字 (内容格式不限制,可为空)
  107. String landraysubid = orgs.getObject("or_landraysubid") == null ? orgs.getGeneralString("or_subof") : orgs.getGeneralString("or_landraysubid");
  108. orgObj.put("parent", landraysubid); // 父组织 (可为空)
  109. orgObj.put("thisLeader", orgs.getGeneralString("emid")); // 组织架构领导 (可为空)
  110. orgObj.put("memo", orgs.getGeneralString("or_path")); // 组织架构说明 (可为空)
  111. orgObj.put("superLeader", orgs.getGeneralString("superLeader")); // 组织上级上级领导 (可为空)
  112. String statuscode = orgs.getObject("or_statuscode") == null ? "" : orgs.getGeneralString(
  113. "or_statuscode");
  114. if ("AUDITED".equals(statuscode)) {
  115. orgObj.put("isAvailable", true); // 是否有效,该属性决定该部门架构是否删除
  116. }else {
  117. orgObj.put("isAvailable", false);
  118. }
  119. resultArray.add(orgObj); // 组织机构
  120. }
  121. // 《岗位》 数据对象
  122. SqlRowList posts = baseDao.queryForRowSet("select row_number() over (order by jo_level) rn,jo_id joid,case when nvl(jo_landrayid,' ')=' ' then to_char(jo_id) else jo_landrayid end jo_id, jo_code, jo_name, jo_orgid, jo_orgname, jo_headmancode, jo_headmanname , to_char(jo_orgid) jo_orgid, jo_parentname, jo_level, jo_emptype,jo_statuscode,jo_landrayorid," +
  123. "case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else em_landrayemid end emid," +
  124. "case when nvl(or_landrayid,' ')=' ' then to_char(or_id) else or_landrayid end or_id " +
  125. "from job left join employee on em_code=jo_headmancode left join hrorg on jo_orgid=or_id" +
  126. " order by rn");
  127. while (posts.next()) {
  128. JSONObject postObj = new JSONObject();
  129. postObj.put("id", posts.getGeneralString("jo_id")); // 唯一标识 (不允许为空)
  130. postObj.put("lunid", posts.getGeneralString("jo_id")); // 唯一标识 (若不为空,直接作为主健存入数据库,允许为空)
  131. postObj.put("name", posts.getGeneralString("jo_name")); // 名称 (不允许为空)
  132. postObj.put("type", "post"); // 组织架构类型 (不允许为空 可选项: org(机构)、dept(部门)、group(群组)、post(岗位)、person(人员))
  133. postObj.put("no", posts.getGeneralString("jo_code")); // 编号 (可为空)
  134. postObj.put("order", posts.getGeneralString("rn")); // 排序号 (可为空)
  135. postObj.put("keyword", ""); // 关键字 (内容格式不限制,可为空)
  136. postObj.put("parent", posts.getString("or_id")); // 父部门 (可为空)
  137. postObj.put("thisLeader", posts.getGeneralString("emid")); // 部门架构领导 (可为空)
  138. int level = posts.getGeneralInt("jo_level");
  139. String memo = posts.getObject("jo_orgname") == null ? "岗位层级" + level :
  140. "所属组织部门" + posts.getGeneralString("jo_orgname") + ",岗位层级" + level;
  141. postObj.put("memo", memo); // 岗位架构说明 (可为空)
  142. List<String> data = baseDao.queryForList("select case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else em_landrayemid end from employee where em_class<>'离职' and nvl(em_islandray,0)=-1 and em_defaulthsid="+posts.getGeneralInt("joid"), String.class);
  143. JSONArray persons=null;
  144. if (data != null && data.size() > 0) {
  145. persons =JSONArray.parseArray(JSON.toJSONString(data));
  146. }
  147. postObj.put("persons", persons); // 岗位包含人员 (可为空)
  148. String statuscode = posts.getObject("jo_statuscode") == null ? "" : posts.getGeneralString(
  149. "jo_statuscode");
  150. if ("AUDITED".equals(statuscode)) {
  151. postObj.put("isAvailable", true); // 是否有效,该属性决定该部门架构是否删除
  152. }else {
  153. postObj.put("isAvailable", false);
  154. }
  155. resultArray.add(postObj); // 岗位
  156. }
  157. // 《人员》 数据对象
  158. SqlRowList persons = baseDao.queryForRowSet("select row_number() over (order by em_id) rn,em_id emid,case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else em_landrayemid end em_id,em_code,em_name,em_password,em_mobile, em_email,em_cardcode," +
  159. "em_departmentcode,em_depart,em_position,em_defaulthsid,em_landrayemid,em_class," +
  160. "case when nvl(or_landrayid,' ')=' ' then to_char(or_id) else or_landrayid end or_id,case when nvl" +
  161. "(jo_landrayid,' ')=' ' then to_char(jo_id) else jo_landrayid end jo_id " +
  162. "from employee left join job on em_defaulthsid=jo_id left join hrorg on em_defaultorid=or_id where " +
  163. "nvl(em_islandray,0)=-1 order by rn");
  164. while (persons.next()) {
  165. JSONObject personObj = new JSONObject();
  166. // 唯一标识 (不允许为空)
  167. personObj.put("id", persons.getGeneralString("em_id"));
  168. personObj.put("lunid", persons.getGeneralString("em_id")); // 唯一标识 (若不为空,直接作为主健存入数据库,允许为空)
  169. personObj.put("name", persons.getGeneralString("em_name")); // 名称 (不允许为空)
  170. personObj.put("type", "person"); // 组织架构类型 (不允许为空 可选项: org(机构)、dept(部门)、group(群组)、post(岗位)、person(人员))
  171. personObj.put("no", persons.getGeneralString("em_code")); // 编号 (可为空)
  172. personObj.put("order", persons.getGeneralString("rn")); // 排序号 (可为空)
  173. personObj.put("keyword", persons.getGeneralString("em_name")); // 关键字 (内容格式不限制,可为空)
  174. String statuscode = persons.getObject("em_class") == null ? "" : persons.getGeneralString("em_class");
  175. if ("离职".equals(statuscode)) {
  176. personObj.put("isAvailable", false); // 是否有效,该属性决定该部门架构是否删除
  177. }else {
  178. personObj.put("isAvailable", true);
  179. }
  180. personObj.put("memo", persons.getGeneralString("rn")); // 人员说明 (可为空)
  181. personObj.put("parent", persons.getGeneralString("or_id")); // 所在部门 (可为空)
  182. List<String> data =
  183. baseDao.queryForList("select case when nvl(jo_landrayid,' ')=' ' then to_char(jo_id) else jo_landrayid end from empsjobs left join job on job_id=jo_id where emp_id=" + persons.getGeneralInt("emid"), String.class);
  184. data.add(persons.getString("jo_id"));
  185. JSONArray jobs=null;
  186. if (data != null && data.size() > 0) {
  187. jobs =JSONArray.parseArray(JSON.toJSONString(data));
  188. }
  189. personObj.put("posts", jobs); // 所属岗位
  190. personObj.put("loginName", persons.getGeneralString("em_mobile")); // 登录名
  191. String password = "";
  192. if (persons.getObject("em_password") != null) {
  193. BASE64Encoder encoder = new BASE64Encoder();
  194. password = encoder.encode(persons.getGeneralString("em_password").getBytes());//base64加密
  195. }
  196. personObj.put("password", password); // 密码,base64加密后的信息
  197. personObj.put("mobileNo", persons.getGeneralString("em_mobile")); // 手机号
  198. personObj.put("email", persons.getGeneralString("em_email")); // 邮件地址
  199. personObj.put("attendanceCardNumber", persons.getGeneralString("em_cardcode")); // 考勤号
  200. personObj.put("workPhone", "0755878787782"); // 办公电话 (仅当 type 为 person 时,有此信息)
  201. personObj.put("rtx", "952701"); // rtx 账号 (仅当 type 为 person 时,有此信息)
  202. resultArray.add(personObj); // 人员
  203. }
  204. return resultArray;
  205. }
  206. @Override
  207. public String sendSyncOrgElementsBaseInfo() {
  208. updateDeptElementAll();
  209. updatePostElementAll();
  210. updatePersonElementAll();
  211. String res = "";
  212. // 定义组织架构信息接入上下文
  213. SysSynchroSetOrgContext setOrgContext = new SysSynchroSetOrgContext();
  214. // 获取测试组织数据
  215. JSONArray orgJsonData = getOrgJsonData();
  216. // 将组织数据设置到组织架构信息接入上下文
  217. setOrgContext.setOrgJsonData(orgJsonData.toString());
  218. setOrgContext.setAppName("UAS");
  219. logger.info(orgJsonData.toString());
  220. logger.info(setOrgContext.toString());
  221. try {
  222. // 调用 WebService 接口,并接收请求返回的数据
  223. SysSynchroSetResult result = syncOrgElementsBaseInfo(setOrgContext);
  224. if (result.getReturnState()==0){
  225. res="同步蓝凌OA失败,传输错误";
  226. }else if (result.getReturnState()==1){
  227. res="同步蓝凌OA失败,失败信息:"+result.getMessage();
  228. }else if (result.getReturnState()==2){
  229. res="同步蓝凌OA成功";
  230. }
  231. } catch (Exception e) {
  232. res="同步蓝凌OA失败,接口异常,异常信息:"+e.getMessage();
  233. e.printStackTrace();
  234. }
  235. return res;
  236. }
  237. @Override
  238. public String sendSyncOrgElements() {
  239. updateDeptElementAll();
  240. updatePostElementAll();
  241. updatePersonElementAll();
  242. String res = "";
  243. // 定义组织架构信息接入上下文
  244. SysSynchroSetOrgContext setOrgContext = new SysSynchroSetOrgContext();
  245. // 获取测试组织数据
  246. JSONArray orgJsonData = getOrgJsonData();
  247. // 将组织数据设置到组织架构信息接入上下文
  248. setOrgContext.setOrgJsonData(orgJsonData.toString());
  249. setOrgContext.setAppName("UAS");
  250. logger.info(orgJsonData.toString());
  251. logger.info(setOrgContext.toString());
  252. try {
  253. // 调用 WebService 接口,并接收请求返回的数据
  254. SysSynchroSetResult result = syncOrgElements(setOrgContext);
  255. if (result.getReturnState()==0){
  256. res="同步蓝凌OA失败,传输错误";
  257. }else if (result.getReturnState()==1){
  258. res="同步蓝凌OA失败,失败信息:"+result.getMessage();
  259. }else if (result.getReturnState()==2){
  260. res="同步蓝凌OA成功";
  261. }
  262. } catch (Exception e) {
  263. res="同步蓝凌OA失败,接口异常,异常信息:"+e.getMessage();
  264. e.printStackTrace();
  265. }
  266. return res;
  267. }
  268. /**
  269. * 部门更新
  270. */
  271. @Override
  272. public void updateDeptElementAll(){
  273. SqlRowList orgs = baseDao.queryForRowSet("select row_number() over (order by or_id) rn, case when nvl" +
  274. "(or_landrayid,' ')=' ' then to_char(or_id) else or_landrayid end or_id,or_code,or_name ," +
  275. "or_parentname,or_headmancode,or_headmanname,or_path, (select case when nvl(em_landrayemid,' ')=' ' " +
  276. "then to_char(em_id) else em_landrayemid end from hrorg ho left join employee on ho" +
  277. ".or_headmancode=em_code where ho.or_id=hr.or_subof) as superLeader,or_statuscode,or_landraysubid," +
  278. "to_char(or_subof) or_subof,case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else " +
  279. "em_landrayemid end emid from hrorg hr left join employee on hr.or_headmancode=em_code where " +
  280. "nvl(or_subof,0)>0 order by rn");
  281. while (orgs.next()) {
  282. JSONObject orgObj = new JSONObject();
  283. orgObj.put("id", orgs.getGeneralString("or_id")); // 唯一标识 (不允许为空)
  284. orgObj.put("lunid", orgs.getGeneralString("or_id")); // 唯一标识 (若不为空,直接作为主健存入数据库,不允许为空)
  285. orgObj.put("name", orgs.getGeneralString("or_name")); // 名称 (不允许为空)
  286. orgObj.put("type", "dept"); // 组织架构类型 (不允许为空 可选项: org(机构)、dept(部门)、group(群组)、post(岗位)、person(人员))
  287. orgObj.put("no", orgs.getGeneralString("or_code")); // 编号 (可为空)
  288. orgObj.put("order", orgs.getGeneralString("rn")); // 排序号 (可为空)
  289. orgObj.put("keyword", ""); // 关键字 (内容格式不限制,可为空)
  290. String landraysubid = orgs.getObject("or_landraysubid") == null ? orgs.getGeneralString("or_subof") : orgs.getGeneralString("or_landraysubid");
  291. orgObj.put("parent", landraysubid); // 父组织 (可为空)
  292. orgObj.put("thisLeader", orgs.getGeneralString("emid")); // 组织架构领导 (可为空)
  293. orgObj.put("memo", orgs.getGeneralString("or_path")); // 组织架构说明 (可为空)
  294. orgObj.put("superLeader", orgs.getGeneralString("superLeader")); // 组织上级上级领导 (可为空)
  295. String statuscode = orgs.getObject("or_statuscode") == null ? "" : orgs.getGeneralString(
  296. "or_statuscode");
  297. if ("AUDITED".equals(statuscode)) {
  298. orgObj.put("isAvailable", true); // 是否有效,该属性决定该部门架构是否删除
  299. }else {
  300. orgObj.put("isAvailable", false);
  301. }
  302. updateOrgElement(orgObj,null,null);
  303. }
  304. }
  305. /**
  306. * 岗位更新
  307. */
  308. @Override
  309. public void updatePostElementAll(){
  310. SqlRowList posts = baseDao.queryForRowSet("select row_number() over (order by jo_level) rn,jo_id joid,case when nvl(jo_landrayid,' ')=' ' then to_char(jo_id) else jo_landrayid end jo_id, jo_code, jo_name, jo_orgid, jo_orgname, jo_headmancode, jo_headmanname , to_char(jo_orgid) jo_orgid, jo_parentname, jo_level, jo_emptype,jo_statuscode,jo_landrayorid,case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else em_landrayemid end emid,case when nvl(or_landrayid,' ')=' ' then to_char(or_id) else or_landrayid end or_id from job left join employee on em_code=jo_headmancode left join hrorg on jo_orgid=or_id order by rn");
  311. while (posts.next()) {
  312. JSONObject postObj = new JSONObject();
  313. postObj.put("id", posts.getGeneralString("jo_id")); // 唯一标识 (不允许为空)
  314. postObj.put("lunid", posts.getGeneralString("jo_id")); // 唯一标识 (若不为空,直接作为主健存入数据库,允许为空)
  315. postObj.put("name", posts.getGeneralString("jo_name")); // 名称 (不允许为空)
  316. postObj.put("type", "post"); // 组织架构类型 (不允许为空 可选项: org(机构)、dept(部门)、group(群组)、post(岗位)、person(人员))
  317. postObj.put("no", posts.getGeneralString("jo_code")); // 编号 (可为空)
  318. postObj.put("order", posts.getGeneralString("rn")); // 排序号 (可为空)
  319. postObj.put("keyword", ""); // 关键字 (内容格式不限制,可为空)
  320. postObj.put("parent", posts.getString("or_id")); // 父部门 (可为空)
  321. postObj.put("thisLeader", posts.getGeneralString("emid")); // 部门架构领导 (可为空)
  322. int level = posts.getGeneralInt("jo_level");
  323. String memo = posts.getObject("jo_orgname") == null ? "岗位层级" + level :
  324. "所属组织部门" + posts.getGeneralString("jo_orgname") + ",岗位层级" + level;
  325. postObj.put("memo", memo); // 岗位架构说明 (可为空)
  326. List<String> data = baseDao.queryForList("select case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else em_landrayemid end from employee where em_class<>'离职' and nvl(em_islandray,0)=-1 and em_defaulthsid="+posts.getGeneralInt("joid"), String.class);
  327. JSONArray persons=null;
  328. if (data != null && data.size() > 0) {
  329. persons =JSONArray.parseArray(JSON.toJSONString(data));
  330. }
  331. postObj.put("persons", persons); // 岗位包含人员 (可为空)
  332. String statuscode = posts.getObject("jo_statuscode") == null ? "" : posts.getGeneralString(
  333. "jo_statuscode");
  334. if ("AUDITED".equals(statuscode)) {
  335. postObj.put("isAvailable", true); // 是否有效,该属性决定该部门架构是否删除
  336. }else {
  337. postObj.put("isAvailable", false);
  338. }
  339. updateOrgElement(null,postObj,null);
  340. }
  341. }
  342. /**
  343. * 人员更新
  344. */
  345. @Override
  346. public void updatePersonElementAll(){
  347. SqlRowList persons = baseDao.queryForRowSet("select row_number() over (order by em_id) rn,em_id emid,case when nvl(em_landrayemid,' ')=' ' then to_char(em_id) else em_landrayemid end em_id,em_code,em_name,em_password,em_mobile, em_email,em_cardcode," +
  348. "em_departmentcode,em_depart,em_position,em_defaulthsid,em_landrayemid,em_class," +
  349. "case when nvl(or_landrayid,' ')=' ' then to_char(or_id) else or_landrayid end or_id,case when nvl" +
  350. "(jo_landrayid,' ')=' ' then to_char(jo_id) else jo_landrayid end jo_id " +
  351. "from employee left join job on em_defaulthsid=jo_id left join hrorg on em_defaultorid=or_id where " +
  352. "nvl(em_islandray,0)=-1 order by rn");
  353. while (persons.next()) {
  354. JSONObject personObj = new JSONObject();
  355. // 唯一标识 (不允许为空)
  356. personObj.put("id", persons.getGeneralString("em_id"));
  357. personObj.put("lunid", persons.getGeneralString("em_id")); // 唯一标识 (若不为空,直接作为主健存入数据库,允许为空)
  358. personObj.put("name", persons.getGeneralString("em_name")); // 名称 (不允许为空)
  359. personObj.put("type", "person"); // 组织架构类型 (不允许为空 可选项: org(机构)、dept(部门)、group(群组)、post(岗位)、person(人员))
  360. personObj.put("no", persons.getGeneralString("em_code")); // 编号 (可为空)
  361. personObj.put("order", persons.getGeneralString("rn")); // 排序号 (可为空)
  362. personObj.put("keyword", persons.getGeneralString("em_name")); // 关键字 (内容格式不限制,可为空)
  363. String statuscode = persons.getObject("em_class") == null ? "" : persons.getGeneralString("em_class");
  364. if ("离职".equals(statuscode)) {
  365. personObj.put("isAvailable", false); // 是否有效,该属性决定该部门架构是否删除
  366. }else {
  367. personObj.put("isAvailable", true);
  368. }
  369. personObj.put("memo", persons.getGeneralString("rn")); // 人员说明 (可为空)
  370. personObj.put("parent", persons.getGeneralString("or_id")); // 所在部门 (可为空)
  371. List<String> data =
  372. baseDao.queryForList("select case when nvl(jo_landrayid,' ')=' ' then to_char(jo_id) else jo_landrayid end from empsjobs left join job on job_id=jo_id where emp_id=" + persons.getGeneralInt("emid"), String.class);
  373. data.add(persons.getString("jo_id"));
  374. JSONArray jobs=null;
  375. if (data != null && data.size() > 0) {
  376. jobs =JSONArray.parseArray(JSON.toJSONString(data));
  377. }
  378. personObj.put("posts", jobs); // 所属岗位
  379. personObj.put("loginName", persons.getGeneralString("em_mobile")); // 登录名
  380. String password = "";
  381. if (persons.getObject("em_password") != null) {
  382. BASE64Encoder encoder = new BASE64Encoder();
  383. password = encoder.encode(persons.getGeneralString("em_password").getBytes());//base64加密
  384. }
  385. personObj.put("password", password); // 密码,base64加密后的信息
  386. personObj.put("mobileNo", persons.getGeneralString("em_mobile")); // 手机号
  387. personObj.put("email", persons.getGeneralString("em_email")); // 邮件地址
  388. personObj.put("attendanceCardNumber", persons.getGeneralString("em_cardcode")); // 考勤号
  389. personObj.put("workPhone", "0755878787782"); // 办公电话 (仅当 type 为 person 时,有此信息)
  390. personObj.put("rtx", "952701"); // rtx 账号 (仅当 type 为 person 时,有此信息)
  391. updateOrgElement(null,null,personObj);
  392. }
  393. }
  394. private void updateOrgElement(JSONObject deptJsonData,JSONObject postJsonData,JSONObject personJsonData) {
  395. try {
  396. // 定义组织架构信息接入上下文
  397. SysSynchroSetOrgContext setOrgContext = new SysSynchroSetOrgContext();
  398. setOrgContext.setAppName("UAS");
  399. if (deptJsonData!=null) {
  400. // 将《部门》组织数据设置到组织架构信息接入上下文
  401. setOrgContext.setOrgJsonData(deptJsonData.toString());
  402. // 调用 WebService 接口,并接收请求返回的数据
  403. SysSynchroSetResult deptResult = updateOrgElement(setOrgContext);
  404. // 0:未操作、1:失败、2:成功
  405. logger.info("请求状态:\n" + deptResult.getReturnState());
  406. }
  407. if (postJsonData!=null) {
  408. // 将《岗位》组织数据设置到组织架构信息接入上下文
  409. setOrgContext.setOrgJsonData(postJsonData.toString());
  410. // 调用 WebService 接口,并接收请求返回的数据
  411. SysSynchroSetResult postResult = updateOrgElement(setOrgContext);
  412. // 0:未操作、1:失败、2:成功
  413. logger.info("请求状态:\n" + postResult.getReturnState());
  414. }
  415. if (personJsonData!=null) {
  416. // 将《人员》组织数据设置到组织架构信息接入上下文
  417. setOrgContext.setOrgJsonData(personJsonData.toString());
  418. // 调用 WebService 接口,并接收请求返回的数据
  419. SysSynchroSetResult personResult = updateOrgElement(setOrgContext);
  420. // 0:未操作、1:失败、2:成功
  421. logger.info("请求状态:\n" + personResult.getReturnState());
  422. }
  423. } catch (Exception e) {
  424. e.printStackTrace();
  425. }
  426. }
  427. }