SyncStaffManageOSFService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package com.kingdee.eas.custom.beisen.synchronouspos.osf;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.collect.Maps;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  7. import com.kingdee.bos.rabbitmq.guava.Lists;
  8. import com.kingdee.eas.common.EASBizException;
  9. import com.kingdee.eas.custom.beisen.utils.BeiSenUtils;
  10. import com.kingdee.eas.custom.beisen.utils.BeisenParamByPropertiesUtil;
  11. import com.kingdee.eas.custom.beisen.utils.Helper;
  12. import com.kingdee.eas.util.app.DbUtil;
  13. import com.kingdee.jdbc.rowset.IRowSet;
  14. import java.sql.SQLException;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import java.util.Map;
  18. public class SyncStaffManageOSFService implements IHRMsfService {
  19. @Override
  20. public Object process(Context context, Map<String, Object> map) throws EASBizException, BOSException {
  21. Map<String,List<Map<String,Object>>> result = Maps.newHashMap();
  22. List<Map<String,Object>> list = Lists.newArrayList();
  23. List<Map<String,Object>> listMap = Lists.newArrayList();
  24. result.put("list",list);
  25. result.put("listMap",listMap);
  26. String posPath = (String) map.get("posPath");
  27. String orgPath = (String) map.get("orgPath");
  28. StringBuilder sql = new StringBuilder();
  29. sql.append(" ");
  30. sql.append(" select fid,FYear,FTableName from T_HR_StaffManageProject ");
  31. sql.append(" where FRule in ( ");
  32. sql.append(" select fid from T_HR_StaffManageRule where fid in ( ");
  33. sql.append(" select FStaffManageRuleId from T_HR_STAFFMANAGERULEFIELD where FColumn in ('FpositionID', 'FAdminOrgID') group by FStaffManageRuleId HAVING count(fid)>1 ");
  34. sql.append(" ) and FState = 1 ");
  35. sql.append(" ) ");
  36. sql.append(" and FState = 1 ");
  37. sql.append(" and FChannel = 1 ");
  38. IRowSet rs = DbUtil.executeQuery(context, sql.toString());
  39. try{
  40. BeiSenUtils b = new BeiSenUtils(context);
  41. Helper helper = b.helper;
  42. BeisenParamByPropertiesUtil posUtil = new BeisenParamByPropertiesUtil(posPath);
  43. Map<String,String> poskeyMap = posUtil.getConfig();
  44. BeisenParamByPropertiesUtil orgUtil = new BeisenParamByPropertiesUtil(orgPath);
  45. Map<String,String> orgkeyMap = orgUtil.getConfig();
  46. while (rs.next()) {
  47. String fid = rs.getString("fid");
  48. String FTableName = rs.getString("FTableName");
  49. String FYear = rs.getString("FYear");
  50. StringBuilder selSql = new StringBuilder();
  51. selSql.append(" select 'org' orgpos,org.fid posId,org.fname_l2 orgPosName,org.FDisplayName_L2 staffName, ");
  52. selSql.append(" org.CFOriginalId,staff.FControlWay, ");
  53. selSql.append(" staff.FPersonCount,staff.FStaffYear,staff.FYearActualStart, ");
  54. selSql.append(" staff.FOnWayAddCount,staff.FOnWaySubCount, ");
  55. selSql.append(" (staff.FStaffYear-staff.FOnWayAddCount+staff.FOnWaySubCount-staff.FPersonCount) FStaffYearUsable, ");
  56. selSql.append(" staff.FState ");
  57. selSql.append(" from ");
  58. selSql.append(" T_HR_Staff20250623152307 staff ");
  59. selSql.append(" left join t_org_admin org on org.fid=staff.FAdminOrgID ");
  60. selSql.append(" left join t_org_position pos on pos.fid = staff.FpositionID ");
  61. selSql.append(" where pos.fid is null and org.CFOriginalId is not null ");
  62. selSql.append(" UNION all ");
  63. selSql.append(" select 'pos' orgpos,org.fid posId,org.fname_l2 orgPosName,org.FDisplayName_L2 staffName,pos.CFOriginalId,staff.FControlWay, ");
  64. selSql.append(" staff.FPersonCount,staff.FStaffYear,staff.FYearActualStart, ");
  65. selSql.append(" staff.FOnWayAddCount,staff.FOnWaySubCount, ");
  66. selSql.append(" (staff.FStaffYear-staff.FOnWayAddCount+staff.FOnWaySubCount-staff.FPersonCount) FStaffYearUsable, ");
  67. selSql.append(" staff.FState ");
  68. selSql.append(" from ");
  69. selSql.append(" T_HR_Staff20250623152307 staff ");
  70. selSql.append(" left join t_org_admin org on org.fid=staff.FAdminOrgID ");
  71. selSql.append(" left join t_org_position pos on pos.fid = staff.FpositionID ");
  72. selSql.append(" where pos.fid is not null and pos.CFOriginalId is not null ");
  73. IRowSet rsSel = DbUtil.executeQuery(context, selSql.toString());
  74. // 获取访问令牌
  75. String token = b.getAccessToken();
  76. while (rsSel.next()){
  77. String orgpos= rsSel.getString("orgpos");
  78. if("org".equals(orgpos)){
  79. Map<String, Object> pos = this.getPostData(orgkeyMap,rsSel);
  80. if(null!=pos){
  81. // 若访问令牌不为空且开始时间和结束时间不为空
  82. if (!com.kingdee.util.StringUtils.isEmpty(token)) {
  83. // 创建请求头的 Map
  84. Map<String, String> header = new HashMap<String, String>();
  85. // 设置请求头的 Content-Type
  86. header.put("Content-Type", "application/json");
  87. // 设置请求头的 Authorization
  88. header.put("Authorization", "Bearer " + token);
  89. String url = "https://openapi.italent.cn/UserFrameworkApiV3/api/v1/departments/Put";
  90. JSONObject requestBody = new JSONObject(pos);
  91. System.out.println("url:"+url);
  92. System.out.println("requestBody:"+requestBody);
  93. JSONObject responseJson = helper.getURL(url,header, requestBody, "PUT",requestBody.getString("posId"),"更新","北森");
  94. System.out.println("responseJson:"+responseJson);
  95. listMap.add(responseJson);
  96. list.add(pos);
  97. }
  98. }
  99. }else if ("pos".equals(orgpos)){
  100. Map<String, Object> pos = this.getPostData(poskeyMap,rsSel);
  101. if(null!=pos){
  102. // 若访问令牌不为空且开始时间和结束时间不为空
  103. if (!com.kingdee.util.StringUtils.isEmpty(token)) {
  104. // 创建请求头的 Map
  105. Map<String, String> header = new HashMap<String, String>();
  106. // 设置请求头的 Content-Type
  107. header.put("Content-Type", "application/json");
  108. // 设置请求头的 Authorization
  109. header.put("Authorization", "Bearer " + token);
  110. String url = "https://openapi.italent.cn/RecruitV6/api/v1/RecruitOnBoarding/UpdatePost";
  111. JSONObject requestBody = new JSONObject(pos);
  112. System.out.println("url:"+url);
  113. System.out.println("requestBody:"+requestBody);
  114. JSONObject responseJson = helper.getURL(url,header, requestBody, "PUT",requestBody.getString("posId"),"更新","北森");
  115. System.out.println("responseJson:"+responseJson);
  116. listMap.add(responseJson);
  117. list.add(pos);
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }catch (Exception e){
  124. e.printStackTrace();
  125. }finally {
  126. }
  127. return result;
  128. }
  129. /**
  130. * shr系统数据组装北森请求参数
  131. *
  132. * @param keyMap
  133. * @param rowSet
  134. * @return
  135. * @throws SQLException
  136. */
  137. protected Map<String, Object> getPostData(Map<String,String> keyMap, IRowSet rowSet) throws SQLException {
  138. Map<String, Object> pos = Maps.newHashMap();
  139. if (null!=rowSet){
  140. for(Map.Entry<String,String> entry : keyMap.entrySet()){
  141. String shrKey = entry.getKey();
  142. String beisenKey = entry.getValue();
  143. if(shrKey.indexOf(".")>0){
  144. String[] keys=shrKey.split("\\.");
  145. if(2==keys.length){
  146. Map<String,Object> map1 = (Map<String, Object>) pos.get(keys[0]);
  147. if(null==map1){
  148. map1=Maps.newHashMap();
  149. pos.put(keys[0],map1);
  150. }
  151. String valueStr = rowSet.getString(keys[1]);
  152. if(beisenKey.indexOf(",")>0) {
  153. String[] beisenKeys = beisenKey.split(",");
  154. Object value = null;
  155. if("integer".equals(beisenKeys[1])){
  156. if(null!=valueStr){
  157. value=Integer.parseInt(valueStr);
  158. }
  159. }else {
  160. value = valueStr;
  161. }
  162. if(null!=value) {
  163. map1.put(beisenKeys[0], value);
  164. }
  165. }else {
  166. if(null!=valueStr) {
  167. map1.put(beisenKey, valueStr);
  168. }
  169. }
  170. }else if (3==keys.length){
  171. Map<String,Object> map1 = (Map<String, Object>) pos.get(keys[0]);
  172. if(null==map1){
  173. map1=Maps.newHashMap();
  174. pos.put(keys[0],map1);
  175. }
  176. Map<String,Object> map2 = (Map<String, Object>) map1.get(keys[1]);
  177. if(null==map2){
  178. map2=Maps.newHashMap();
  179. map1.put(keys[1],map1);
  180. }
  181. String valueStr = rowSet.getString(keys[2]);
  182. if(beisenKey.indexOf(",")>0) {
  183. String[] beisenKeys = beisenKey.split(",");
  184. Object value = null;
  185. if("integer".equals(beisenKeys[1])){
  186. if(null!=valueStr){
  187. value=Integer.parseInt(valueStr);
  188. }
  189. }else {
  190. value = valueStr;
  191. }
  192. if(null!=value) {
  193. map2.put(beisenKeys[0], value);
  194. }
  195. }else {
  196. if(null!=valueStr) {
  197. map2.put(beisenKey,valueStr);
  198. }
  199. }
  200. }
  201. }else {
  202. String valueStr = rowSet.getString(shrKey);
  203. if(beisenKey.indexOf(",")>0) {
  204. String[] beisenKeys = beisenKey.split(",");
  205. Object value = null;
  206. if("integer".equals(beisenKeys[1])){
  207. if(null!=valueStr){
  208. value=Integer.parseInt(valueStr);
  209. }
  210. }else {
  211. value = valueStr;
  212. }
  213. if(null!=value) {
  214. pos.put(beisenKeys[0],value);
  215. }
  216. }else {
  217. if(null!=valueStr) {
  218. pos.put(beisenKey,valueStr);
  219. }
  220. }
  221. }
  222. }
  223. }
  224. return pos;
  225. }
  226. }