faa503fcdd52e35401aed8ee220993e760ae4aee.svn-base 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. package com.kingdee.eas.custom.erp.util;
  2. import java.sql.SQLException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.List;
  8. import java.util.Properties;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import com.alibaba.fastjson.JSONArray;
  12. import com.alibaba.fastjson.JSONObject;
  13. import com.kingdee.bos.BOSException;
  14. import com.kingdee.bos.Context;
  15. import com.kingdee.bos.qing.util.StringUtils;
  16. import com.kingdee.eas.util.app.DbUtil;
  17. import com.kingdee.jdbc.rowset.IRowSet;
  18. public class SynPersonToErpUtils {
  19. private static Logger log = LoggerFactory.getLogger(SynPersonToErpUtils.class);
  20. private static String ierp = "https://sites.gtiit.edu.cn/kderpdev/ierp";
  21. private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  22. // 创建SimpleDateFormat实例来格式化日期
  23. private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  24. //https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_user/gt15_user_add
  25. /**
  26. * 新增:获取gt15_user_add的请求地址:
  27. * https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_user/gt15_user_add
  28. * @param request
  29. * @param code
  30. * @return
  31. */
  32. public static String getGt15AdminOrgBetaUrl() {
  33. Properties config = SynPublicUtils.getConfig();
  34. ierp = (String)config.get("ierp");
  35. return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_user/gt15_user_add").toString();
  36. }
  37. /**
  38. * 封存:获取gt15_user_add的请求地址:
  39. * https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_user/gt15_user_disable
  40. * @param request
  41. * @param code
  42. * @return
  43. */
  44. public static String getGt15UserDisableUrl() {
  45. Properties config = SynPublicUtils.getConfig();
  46. ierp = (String)config.get("ierp");
  47. return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_user/gt15_user_disable").toString();
  48. }
  49. /**
  50. * 启用:获取gt15_user_enable的请求地址:
  51. * https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_user/gt15_user_disable
  52. * @param request
  53. * @param code
  54. * @return
  55. */
  56. public static String getGt15UserEnableUrl() {
  57. Properties config = SynPublicUtils.getConfig();
  58. ierp = (String)config.get("ierp");
  59. return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_user/gt15_user_enable").toString();
  60. }
  61. /**
  62. * 新增:新增员工接口 主体
  63. * @throws Exception
  64. */
  65. public static void gt15_user_add(Context ctx,String accessToken,String startDate, String endDate) throws Exception{
  66. //获取请求地址
  67. String gt15UserAddUrl = getGt15AdminOrgBetaUrl();
  68. log.info("SynPersonToErpUtils.gt15_user_add.gt15UserAddUrl:"+gt15UserAddUrl);
  69. log.info("SynPersonToErpUtils.gt15_user_add.accessToken:"+accessToken);
  70. log.info("SynPersonToErpUtils.gt15_user_add.startDate:"+startDate);
  71. log.info("SynPersonToErpUtils.gt15_user_add.endDate:"+endDate);
  72. //查询数据库,并构建新增人员参数,推送到星瀚
  73. getUserAddEntryAndPush(ctx,gt15UserAddUrl,accessToken,startDate,endDate);
  74. }
  75. /**
  76. * 创建,插入时间表
  77. CREATE TABLE T_HR_SynTimeTable (
  78. id serial PRIMARY KEY,
  79. event_name VARCHAR(100),
  80. event_timestamp TIMESTAMP
  81. );
  82. INSERT INTO T_HR_SynTimeTable (event_name,event_timestamp) VALUES ('SynPerson',now());
  83. */
  84. /**
  85. * 新增:查询数据库,并构建新增人员参数,推送到星瀚
  86. * @param ctx
  87. * @return
  88. * @throws Exception
  89. */
  90. public static void getUserAddEntryAndPush(Context ctx,String gt15UserAddUrl,String accessToken,String startDateStr, String endDateStr) throws Exception{
  91. //获取前一天的0点时间字符串
  92. String lastDateZeroTimeStr = "";
  93. //获取当前时间的字符串
  94. String noeTimeStr = "";
  95. if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){
  96. //获取上次同步结束的时间
  97. lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"SynPerson");
  98. if(StringUtils.isEmpty(lastDateZeroTimeStr)){
  99. //为空
  100. //获取前一天的0点时间字符串
  101. lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
  102. }
  103. //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
  104. SynPublicUtils.updateSynTimeTable(ctx,"SynPerson");
  105. //获取当前时间的字符串
  106. noeTimeStr = SynPublicUtils.getNowTimeStr();
  107. }else{
  108. lastDateZeroTimeStr = startDateStr;
  109. noeTimeStr = endDateStr;
  110. }
  111. log.info("SynPersonToErpUtils.lastDateZeroTimeStr:"+lastDateZeroTimeStr);
  112. log.info("SynPersonToErpUtils.noeTimeStr:"+noeTimeStr);
  113. String sql = "/*dialect*/select person.fid as personId,person.fnumber as number,person.fname_l1 as name_l1 ,person.fname_l2 as name_l2,person.fname_l3 as name_l3,person.fglobalroaming as globalroaming,person.fncell as phone,person.femail as email,person.fidcardno as idcard,person.fgender as gender,fullOrPart.fnumber as gt15_fullorpart,\n" +
  114. " employeeClassify.fnumber as gt15_personneltype_number,employeeClassify.fname_l1 as gt15_personneltype_name, workerCategory.fnumber as gt15_workercategory_number, workerCategory.fname_l1 as gt15_workercategory_name,\n" +
  115. " empLaborRelation2.feffdt as gt15_terminatedon,credentialsType.fnumber as gt15_idtype_number,credentialsType.fname_l1 as gt15_idtype_name,person.fpassportNO as gt15_idno,nationality.fnumber as gt15_placeoforigin_number,\n" +
  116. " nationality.fname_l1 as gt15_placeoforigin_name,person.FHireDate as gt15_joiningdate,person.CFLocalName as gt15_localname ,person.CFUserName as username,temp.dpt_number as dpt_number,temp.dpt_name as dpt_name,\n" +
  117. " temp.position_l1 as position_l1,temp.position_l2 as position_l2,temp.position_l3 as position_l3,temp.isincharge as isincharge,temp.ispartjob as ispartjob,temp.superior_number,temp.superior_name,temp.post_number as post_number,temp.post_name as post_name \n" +
  118. " from t_bd_person person \n" +
  119. " left join CT_MP_Fullorpart fullOrPart on fullOrPart.fid = person.CFFtorptID\n" +
  120. " left join T_HR_EmployeeClassify employeeClassify on employeeClassify.fid = person.CFPersontypeID\n" +
  121. " left join (\n" +
  122. " select c.fnumber,c.fname_l1,b.fpersonid as personId, c.flastupdatetime as cflastupdatetime from t_BD_person a left join T_HR_PersonOtherInfo b on a.fid=b.fpersonid left join T_HR_CredentialsType c on b.FCredentialsTypeID=c.fid \n" +
  123. " ) credentialsType on credentialsType.personId = person.fid \n" +
  124. " left join T_BD_Nationality nationality on nationality.fid = person.FNationalityID\n" +
  125. " left join (\n" +
  126. " select x.fid as personId,c.fnumber as dpt_number,c.fname_l1 as dpt_name,b.fnumber as post_number,b.fname_l1 as post_name,b.fisrespposition as isincharge,d.fnumber as ispartjob,e.fnumber as superior_number,e.fname_l1 as superior_name,\n" +
  127. " f.fnumber as position_number,f.fname_l1 as position_l1,f.fname_l2 as position_l2,f.fname_l3 as position_l3,a.CFWorkercategoryID as workercategoryId,\n" +
  128. " a.flastupdatetime as aflastupdatetime,b.flastupdatetime as bflastupdatetime,c.flastupdatetime as cflastupdatetime,d.flastupdatetime as dflastupdatetime,f.flastupdatetime as fflastupdatetime\n" +
  129. " from t_BD_person x \n" +
  130. " left join T_HR_EmpOrgRelation a on x.fid=a.fpersonid AND TO_CHAR(a.FLEFFDT,'YYYY-MM-DD')='2199-12-31' AND a.FASSIGNTYPE=1 \n" +
  131. " left join t_org_position b on a.fpositionid=b.fid\n" +
  132. " left join t_org_baseunit c on b.fadminorgunitid=c.fid\n" +
  133. " left join CT_MP_Fullorpart d on d.fid = a.CFFtorptID\n" +
  134. " left join T_BD_Person e on e.fid = a.CFLineManagerNameI\n" +
  135. " left join T_ORG_Job f on f.fid = b.FJobID\n" +
  136. " ) temp on temp.personId = person.fid \n" +
  137. " left join T_HR_EmpLaborRelation empLaborRelation on empLaborRelation.fpersonid = person.fid and TO_CHAR(empLaborRelation.FLEFFDT,'YYYY-MM-DD')='2199-12-31' \n" +
  138. " left join T_HR_EmpOrgRelation empOrgRelation on person.fid=empOrgRelation.fpersonid AND TO_CHAR(empOrgRelation.FLEFFDT,'YYYY-MM-DD')='2199-12-31' AND empOrgRelation.FASSIGNTYPE=1 \n" +
  139. " left join t_org_admin admin2 on admin2.fid = empOrgRelation.fadminorgid \n" +
  140. " left join CT_MP_WorkerCategory workerCategory on workerCategory.fid = temp.workercategoryId \n" +
  141. " left join CT_MP_Fullorpart fullOrPart2 on fullOrPart2.fid = empOrgRelation.CFFtorptID \n" +
  142. " left join T_HR_EmpLaborRelation empLaborRelation2 on empLaborRelation2.fpersonid = person.fid and \n" +
  143. " empLaborRelation2.flaborrelationstateid in ('00000000-0000-0000-0000-000000000007A29E85B3','00000000-0000-0000-0000-000000000006A29E85B3','FTCmJT3SSRi1twufIaRb56KehbM=')\n" +
  144. //" where admin2.fnumber not in ('D0003','D0002','D0039','D0040','D0036') \n" +
  145. " where ( (person.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and person.flastupdatetime <= {ts '"+noeTimeStr+"'} )\n" +
  146. //" or (fullOrPart.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and fullOrPart.flastupdatetime <= {ts '"+noeTimeStr+"'} )\n" +
  147. //" or (employeeClassify.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and employeeClassify.flastupdatetime <= {ts '"+noeTimeStr+"'} )\n" +
  148. " or (credentialsType.cflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and credentialsType.cflastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  149. //" or (nationality.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and nationality.flastupdatetime <= {ts '"+noeTimeStr+"'} )\n" +
  150. " or (temp.aflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and temp.aflastupdatetime <= {ts '"+noeTimeStr+"'} )\n" +
  151. //" or (temp.bflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and temp.bflastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  152. //" or (temp.cflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and temp.cflastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  153. //" or (temp.dflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and temp.dflastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  154. //" or (temp.fflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and temp.fflastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  155. " or (empLaborRelation.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and empLaborRelation.flastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  156. " or (empOrgRelation.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and empOrgRelation.flastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  157. //" or (admin2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and admin2.flastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  158. " or (workerCategory.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and workerCategory.flastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  159. //" or (fullOrPart2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and fullOrPart2.flastupdatetime <= {ts '"+noeTimeStr+"'})\n" +
  160. " or (empLaborRelation2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and empLaborRelation2.flastupdatetime <= {ts '"+noeTimeStr+"'}))";
  161. log.info("SynPersonToErpUtils.getUserAddEntry.sql:"+sql);
  162. String number = "";
  163. String name_l1 = "";
  164. String name_l2 = "";
  165. String name_l3 = "";
  166. String globalroaming = "";
  167. String phone = "";
  168. String email = "";
  169. String idcard = "";
  170. String gender = "";
  171. String gt15_fullorpart = "";
  172. String gt15_personneltype_number = "";
  173. String gt15_personneltype_name = "";
  174. String gt15_workercategory_number = "";
  175. String gt15_workercategory_name = "";
  176. //String gt15_terminatedon = "";
  177. String gt15_idtype_number = "";
  178. String gt15_idtype_name = "";
  179. String gt15_idno = "";
  180. String gt15_placeoforigin_number = "";
  181. String gt15_placeoforigin_name = "";
  182. //Date gt15_joiningdateDate = null;
  183. //String gt15_joiningdate = "";
  184. String gt15_localname = "";
  185. String username = "";
  186. String dpt_number = "";
  187. String dpt_name = "";
  188. String position_l1 = "";
  189. String position_l2 = "";
  190. String position_l3 = "";
  191. String isincharge = "";
  192. String ispartjobStr = "";
  193. boolean ispartjob =false;
  194. String superior_number ="";
  195. String superior_name = "";
  196. String post_number = "";
  197. String post_name = "";
  198. String paramJOStr = "";
  199. String personId = "";
  200. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  201. if(executeQuery.size()>0){
  202. while(executeQuery.next()){
  203. number = executeQuery.getString("number");
  204. name_l1 = executeQuery.getString("name_l1");
  205. name_l2 = executeQuery.getString("name_l2");
  206. name_l3 = executeQuery.getString("name_l3");
  207. globalroaming = executeQuery.getString("globalroaming");
  208. phone = executeQuery.getString("phone");
  209. email = executeQuery.getString("email");
  210. idcard = executeQuery.getString("idcard");
  211. gender = executeQuery.getString("gender");
  212. gt15_fullorpart = executeQuery.getString("gt15_fullorpart");
  213. gt15_personneltype_number = executeQuery.getString("gt15_personneltype_number");
  214. gt15_personneltype_name = executeQuery.getString("gt15_personneltype_name");
  215. gt15_workercategory_number = executeQuery.getString("gt15_workercategory_number");
  216. gt15_workercategory_name = executeQuery.getString("gt15_workercategory_name");
  217. Date gt15_terminatedonDate = executeQuery.getDate("gt15_terminatedon");
  218. String gt15_terminatedon = null;
  219. if(gt15_terminatedonDate != null){
  220. gt15_terminatedon = sdf.format(gt15_terminatedonDate);
  221. }
  222. gt15_idtype_number = executeQuery.getString("gt15_idtype_number");
  223. gt15_idtype_name = executeQuery.getString("gt15_idtype_name");
  224. gt15_idno = executeQuery.getString("gt15_idno");
  225. gt15_placeoforigin_number = executeQuery.getString("gt15_placeoforigin_number");
  226. gt15_placeoforigin_name = executeQuery.getString("gt15_placeoforigin_name");
  227. Date gt15_joiningdateDate = executeQuery.getDate("gt15_joiningdate");
  228. String gt15_joiningdate = null;
  229. if(gt15_joiningdateDate != null){
  230. gt15_joiningdate = sdf.format(gt15_joiningdateDate);
  231. }
  232. gt15_localname = executeQuery.getString("gt15_localname");
  233. username = executeQuery.getString("username");
  234. //构建人员分录
  235. personId = executeQuery.getString("personId");
  236. JSONArray entryentitys = getEntryentitysByPersonId(ctx,personId);
  237. JSONObject data = new JSONObject();
  238. data.put("number", number);
  239. JSONObject name = new JSONObject();
  240. name.put("en_US", name_l1);
  241. name.put("zh_CN", name_l2);
  242. name.put("zh_TW", name_l3);
  243. data.put("name", name);
  244. if(!StringUtils.isEmpty(globalroaming)&&!StringUtils.isEmpty(phone)){
  245. phone= globalroaming+"-"+phone;
  246. }
  247. data.put("phone", phone);
  248. data.put("email", email);
  249. data.put("idcard", idcard);
  250. data.put("gender", gender);
  251. data.put("gt15_fullorpart", gt15_fullorpart);
  252. data.put("gt15_personneltype_number", gt15_personneltype_number);
  253. data.put("gt15_personneltype_name", gt15_personneltype_name);
  254. data.put("gt15_workercategory_number", gt15_workercategory_number);
  255. data.put("gt15_workercategory_name", gt15_workercategory_name);
  256. data.put("gt15_terminatedon", gt15_terminatedon);
  257. data.put("gt15_idtype_number", gt15_idtype_number);
  258. data.put("gt15_idtype_name", gt15_idtype_name);
  259. data.put("gt15_idno", gt15_idno);
  260. data.put("gt15_placeoforigin_number", gt15_placeoforigin_number);
  261. data.put("gt15_placeoforigin_name", gt15_placeoforigin_name);
  262. data.put("gt15_joiningdate", gt15_joiningdate);
  263. data.put("gt15_localname", gt15_localname);
  264. data.put("username", username);
  265. data.put("entryentity", entryentitys);
  266. JSONArray datas = new JSONArray();
  267. datas.add(data);
  268. JSONObject paramJO = new JSONObject();
  269. paramJO.put("data",datas);
  270. paramJOStr = paramJO.toString();
  271. log.info("SynPersonToErpUtils.getUserAddEntry.paramJOStr:"+paramJOStr);
  272. //数据保存接口
  273. String responseMsg = HttpsReqUtil.postByHttps(gt15UserAddUrl, paramJOStr, accessToken);
  274. log.info("SynPersonToErpUtils.getUserAddEntry.responseMsg:"+responseMsg);
  275. }
  276. }
  277. }
  278. /**
  279. * 获取推送的分录集合
  280. * @param ctx
  281. * @param personId
  282. * @return
  283. * @throws BOSException
  284. * @throws SQLException
  285. */
  286. private static JSONArray getEntryentitysByPersonId(Context ctx, String personId) throws BOSException, SQLException{
  287. String sql = "select x.fid as personId,c.fnumber as dpt_number,c.fname_l1 as dpt_name,b.fnumber as post_number,b.fname_l1 as post_name,b.fisrespposition as isincharge, a.fassigntype as ispartjob,e.fnumber as superior_number,e.fname_l1 as superior_name,\n" +
  288. " f.fnumber as position_number,f.fname_l1 as position_l1,f.fname_l2 as position_l2,f.fname_l3 as position_l3,a.CFWorkercategoryID as workercategoryId,\n" +
  289. " a.flastupdatetime as aflastupdatetime,b.flastupdatetime as bflastupdatetime,c.flastupdatetime as cflastupdatetime,d.flastupdatetime as dflastupdatetime,f.flastupdatetime as fflastupdatetime \n" +
  290. " from T_HR_EmpOrgRelation a " +
  291. " left join t_BD_person x on x.fid=a.fpersonid " +
  292. " left join t_org_position b on a.fpositionid=b.fid " +
  293. " left join t_org_baseunit c on b.fadminorgunitid=c.fid " +
  294. " left join CT_MP_Fullorpart d on d.fid = a.CFFtorptID " +
  295. " left join T_BD_Person e on e.fid = a.CFLineManagerNameI " +
  296. " left join T_ORG_Job f on f.fid = b.FJobID " +
  297. " where a.fpersonid = '"+personId+"' AND TO_CHAR(a.FLEFFDT,'YYYY-MM-DD')='2199-12-31' ";
  298. log.info("SynPersonToErpUtils.getEntryentitysByPersonId.sql:"+sql);
  299. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  300. String dpt_number = "";
  301. String dpt_name = "";
  302. String position_l1 = "";
  303. String position_l2 = "";
  304. String position_l3 = "";
  305. String isincharge = "";
  306. int ispartjob = 0;
  307. String superior_number ="";
  308. String superior_name = "";
  309. String post_number = "";
  310. String post_name = "";
  311. //构建参数
  312. JSONArray entryentitys = new JSONArray();
  313. if(executeQuery.size()>0){
  314. while(executeQuery.next()){
  315. dpt_number = executeQuery.getString("dpt_number");
  316. dpt_name = executeQuery.getString("dpt_name");
  317. position_l1 = executeQuery.getString("position_l1");
  318. position_l2 = executeQuery.getString("position_l2");
  319. position_l3 = executeQuery.getString("position_l3");
  320. isincharge = executeQuery.getString("isincharge");
  321. ispartjob = executeQuery.getInt("ispartjob");
  322. superior_number = executeQuery.getString("superior_number");
  323. superior_name = executeQuery.getString("superior_name");
  324. post_number = executeQuery.getString("post_number");
  325. post_name = executeQuery.getString("post_name");
  326. JSONObject entryentity = new JSONObject();
  327. entryentity.put("dpt_number", dpt_number);
  328. entryentity.put("dpt_name", dpt_name);
  329. JSONObject position = new JSONObject();
  330. position.put("en_US", position_l1);
  331. position.put("zh_CN", position_l2);
  332. position.put("zh_TW", position_l3);
  333. entryentity.put("position", position);
  334. entryentity.put("isincharge", isincharge);
  335. //固定值
  336. if(ispartjob == 0){
  337. entryentity.put("ispartjob", true);
  338. }else{
  339. entryentity.put("ispartjob", false);
  340. }
  341. entryentity.put("superior_number", superior_number);
  342. entryentity.put("superior_name", superior_name);
  343. entryentity.put("post_number", post_number);
  344. entryentity.put("post_name", post_name);
  345. entryentitys.add(entryentity);
  346. }
  347. }
  348. return entryentitys;
  349. }
  350. /**
  351. * 新增:推送数据到ERP功能:主体
  352. * @return
  353. * @throws Exception
  354. */
  355. public static void synPersonToErp(Context ctx ,String startDate, String endDate) throws Exception{
  356. //获取appToken
  357. String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
  358. log.info("获取synPersonToErp.appToken:"+appToken);
  359. //获取accessToken
  360. String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
  361. log.info("获取synPersonToErp.accessToken状态为:"+accessToken);
  362. //薪酬明细保存接口
  363. gt15_user_add(ctx,accessToken,startDate,endDate);
  364. }
  365. /**
  366. * 获取启用的用户Number
  367. * @return
  368. * @throws BOSException
  369. * @throws SQLException
  370. */
  371. private static List<String> getPersonNumbersEnableEntry(Context ctx,String startDateStr, String endDateStr) throws BOSException, SQLException{
  372. //获取前一天的0点时间字符串
  373. String lastDateZeroTimeStr = "";
  374. //获取当前时间的字符串
  375. String noeTimeStr = "";
  376. if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){
  377. //获取上次同步结束的时间
  378. lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"synPersonEnableToErp");
  379. if(StringUtils.isEmpty(lastDateZeroTimeStr)){
  380. //为空
  381. //获取前一天的0点时间字符串
  382. lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
  383. }
  384. //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
  385. SynPublicUtils.updateSynTimeTable(ctx,"synPersonEnableToErp");
  386. //获取当前时间的字符串
  387. noeTimeStr = SynPublicUtils.getNowTimeStr();
  388. }else{
  389. lastDateZeroTimeStr = startDateStr;
  390. noeTimeStr = endDateStr;
  391. }
  392. String sql = "select person.fnumber as number, user2.fforbidden ,user2.fcreatetime as createtime ,user2.flastupdatetime as lastupdatetime from t_pm_user user2\n" +
  393. " left join t_bd_person person on person.fid = user2.fpersonid\n" +
  394. " left join T_HR_EmpOrgRelation empOrgRelation on person.fid=empOrgRelation.fpersonid AND TO_CHAR(empOrgRelation.FLEFFDT,'YYYY-MM-DD')='2199-12-31' AND empOrgRelation.FASSIGNTYPE=1 " +
  395. " right join t_org_admin admin on admin.fid = empOrgRelation.fadminorgid " +
  396. " where user2.fforbidden = 0 " +
  397. " and ((user2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and user2.flastupdatetime <= {ts '"+noeTimeStr+"'})) ";
  398. /*" or (person.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and person.flastupdatetime <= {ts '"+noeTimeStr+"'}) " +
  399. " or (empOrgRelation.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and empOrgRelation.flastupdatetime <= {ts '"+noeTimeStr+"'})" +
  400. " or (admin.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and admin.flastupdatetime <= {ts '"+noeTimeStr+"'})) ";*/
  401. //" and admin.fnumber not in ('D0003','D0002','D0039','D0040','D0036') ";//把朱文杰禁用用于测试 person.fnumber = '100064'
  402. log.info("getPersonNumbersEnableEntry.sql"+sql);
  403. String number = "";
  404. Date createtime = null;
  405. Date lastupdatetime = null;
  406. String createTimeSdf = "";
  407. String lastupdateTimeSdf = "";
  408. List<String> listNumbers = new ArrayList<String>();
  409. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  410. if(executeQuery.size()>0){
  411. while(executeQuery.next()){
  412. number = executeQuery.getString("number");
  413. createtime = executeQuery.getDate("createtime");
  414. lastupdatetime = executeQuery.getDate("lastupdatetime");
  415. createTimeSdf = sdf.format(createtime);
  416. lastupdateTimeSdf = sdf.format(lastupdatetime);
  417. listNumbers.add(number);
  418. }}
  419. return listNumbers;
  420. }
  421. /**
  422. * 获取封禁的用户Number
  423. * @return
  424. * @throws BOSException
  425. * @throws SQLException
  426. */
  427. private static List<String> getPersonNumbersDisableEntry(Context ctx,String startDateStr, String endDateStr) throws BOSException, SQLException{
  428. //获取前一天的0点时间字符串
  429. String lastDateZeroTimeStr = "";
  430. //获取当前时间的字符串
  431. String noeTimeStr = "";
  432. if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){
  433. //获取上次同步结束的时间
  434. lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"synPersonDisableToErp");
  435. if(StringUtils.isEmpty(lastDateZeroTimeStr)){
  436. //为空
  437. //获取前一天的0点时间字符串
  438. lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
  439. }
  440. //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
  441. SynPublicUtils.updateSynTimeTable(ctx,"synPersonDisableToErp");
  442. //获取当前时间的字符串
  443. noeTimeStr = SynPublicUtils.getNowTimeStr();
  444. }else{
  445. lastDateZeroTimeStr = startDateStr;
  446. noeTimeStr = endDateStr;
  447. }
  448. String sql = "select person.fnumber as number, user2.fforbidden from t_pm_user user2\n" +
  449. " left join t_bd_person person on person.fid = user2.fpersonid\n" +
  450. " left join T_HR_EmpOrgRelation empOrgRelation on person.fid=empOrgRelation.fpersonid AND TO_CHAR(empOrgRelation.FLEFFDT,'YYYY-MM-DD')='2199-12-31' AND empOrgRelation.FASSIGNTYPE=1 " +
  451. " right join t_org_admin admin on admin.fid = empOrgRelation.fadminorgid " +
  452. " where user2.fforbidden = 1 " +
  453. " and ((user2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and user2.flastupdatetime <= {ts '"+noeTimeStr+"'}) " +
  454. " or (person.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and person.flastupdatetime <= {ts '"+noeTimeStr+"'}) " +
  455. " or (empOrgRelation.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and empOrgRelation.flastupdatetime <= {ts '"+noeTimeStr+"'})" +
  456. " or (admin.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and admin.flastupdatetime <= {ts '"+noeTimeStr+"'})) ";
  457. //" and admin.fnumber not in ('D0003','D0002','D0039','D0040','D0036') ";//把朱文杰禁用用于测试 person.fnumber = '100064'
  458. log.info("getPersonNumbersEnableEntry.sql"+sql);
  459. String number = "";
  460. List<String> listNumbers = new ArrayList<String>();
  461. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  462. if(executeQuery.size()>0){
  463. while(executeQuery.next()){
  464. number = executeQuery.getString("number");
  465. listNumbers.add(number);
  466. }}
  467. return listNumbers;
  468. }
  469. /**
  470. * 禁用:根据工号禁用人员 :主体
  471. * @param ctx
  472. * @param accessToken
  473. * @throws Exception
  474. */
  475. private static void gt15_user_disable(Context ctx,String accessToken,String startDateStr, String endDateStr) throws Exception{
  476. //获取请求地址
  477. String gt15UserDisableUrl = getGt15UserDisableUrl();
  478. log.info("SynPersonToErpUtils.gt15_user_disable.gt15UserDisableUrl:"+gt15UserDisableUrl);
  479. log.info("SynPersonToErpUtils.gt15_user_disable.accessToken:"+accessToken);
  480. //查询数据库,并构建新增人员参数,推送到星瀚
  481. List<String> listNumbers = getPersonNumbersDisableEntry(ctx,startDateStr,endDateStr);
  482. for(String number : listNumbers){
  483. String paramJOStr = getParamJOStrByNumber(number);
  484. log.info("gt15_user_disable.paramJOStr:"+paramJOStr);
  485. String responseMsg = HttpsReqUtil.postByHttps(gt15UserDisableUrl, paramJOStr, accessToken);
  486. log.info("gt15_user_disable.responseMsg:"+responseMsg);
  487. }
  488. }
  489. /**
  490. * 启用:根据工号禁启用人员 :主体
  491. * @param ctx
  492. * @param accessToken
  493. * @param startDate
  494. * @param endDate
  495. * @throws Exception
  496. */
  497. public static void gt15_user_enable(Context ctx,String accessToken,String startDateStr, String endDateStr) throws Exception{
  498. //获取请求地址
  499. String gt15UserEnableUrl = getGt15UserEnableUrl();
  500. log.info("SynPersonToErpUtils.gt15_user_enable.gt15UserDisableUrl:"+gt15UserEnableUrl);
  501. log.info("SynPersonToErpUtils.gt15_user_enable.accessToken:"+accessToken);
  502. //查询数据库,并构建新增人员参数,推送到星瀚
  503. List<String> listNumbers = getPersonNumbersEnableEntry(ctx,startDateStr,endDateStr);
  504. log.info("SynPersonToErpUtils.gt15_user_enable.listNumbers.size:"+listNumbers.size());
  505. for(String number : listNumbers){
  506. String paramJOStr = getParamJOStrByNumber(number);
  507. log.info("gt15_user_enable.paramJOStr:"+paramJOStr);
  508. String responseMsg = HttpsReqUtil.postByHttps(gt15UserEnableUrl, paramJOStr, accessToken);
  509. log.info("gt15_user_enable.responseMsg:"+responseMsg);
  510. }
  511. }
  512. /**
  513. * 封存:通过编码获取
  514. * @param numbers
  515. * @return
  516. */
  517. public static String getParamJOStrByNumber(String number){
  518. JSONObject data = new JSONObject();
  519. data.put("number", number);
  520. JSONObject paramJO = new JSONObject();
  521. paramJO.put("data",data);
  522. String paramJOStr = paramJO.toString();
  523. return paramJOStr;
  524. }
  525. /**
  526. * 禁用:根据工号禁用人员
  527. * https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_user/gt15_user_disable
  528. * @param ctx
  529. * @return
  530. * @throws Exception
  531. */
  532. public static String synPersonDisableToErp(Context ctx,String startDate, String endDate) throws Exception{
  533. //获取appToken
  534. String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
  535. log.info("获取synPersonDisableToErp.appToken:"+appToken);
  536. //获取accessToken
  537. String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
  538. log.info("获取synPersonDisableToErp.accessToken为:"+accessToken);
  539. //禁用人员接口
  540. gt15_user_disable(ctx,accessToken,startDate,endDate);
  541. log.info("syndminorgBetaToErp.responseMsg:"+accessToken);
  542. return "";
  543. }
  544. /**
  545. * 启用:根据工号启用人员
  546. * https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_user/gt15_user_disable
  547. * @param ctx
  548. * @return
  549. * @throws Exception
  550. */
  551. public static String synPersonEnableToErp(Context ctx,String startDate, String endDate) throws Exception{
  552. //获取appToken
  553. String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
  554. log.info("获取synPersonEnableToErp.appToken:"+appToken);
  555. //获取accessToken
  556. String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
  557. log.info("获取synPersonEnableToErp.accessToken为:"+accessToken);
  558. //启用人员接口
  559. gt15_user_enable(ctx,accessToken,startDate,endDate);
  560. log.info("synPersonEnableToErp.responseMsg:"+accessToken);
  561. return "";
  562. }
  563. }