SynctaskUtils.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package com.kingdee.eas.custom.synctask.utils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.metadata.entity.EntityViewInfo;
  7. import com.kingdee.bos.metadata.entity.FilterInfo;
  8. import com.kingdee.bos.metadata.entity.FilterItemInfo;
  9. import com.kingdee.bos.metadata.entity.SelectorItemCollection;
  10. import com.kingdee.bos.metadata.query.util.CompareType;
  11. import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
  12. import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
  13. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  14. import com.kingdee.eas.basedata.org.IAdminOrgUnit;
  15. import com.kingdee.eas.custom.synctask.ActionTypeEnum;
  16. import com.kingdee.eas.custom.synctask.entry.AdminOrg;
  17. import com.kingdee.util.StringUtils;
  18. import okhttp3.*;
  19. import org.apache.commons.codec.digest.DigestUtils;
  20. import org.apache.log4j.Logger;
  21. import java.io.FileInputStream;
  22. import java.io.IOException;
  23. import java.util.*;
  24. /**
  25. * @author qingwu
  26. * @date 2024/10/21
  27. * @apiNote
  28. */
  29. public class SynctaskUtils {
  30. public static Logger logger = Logger.getLogger("com.kingdee.eas.custom.synctask.utils.SynctaskUtils");
  31. private Properties propt = new Properties();
  32. public SynctaskUtils() {
  33. try {
  34. this.propt.load(new FileInputStream("E:\\Kingdee\\eas\\server\\properties\\scy\\synOAConfig.properties"));
  35. //propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/scy/synOAConfig.properties"));
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. /**
  41. * 同步组织
  42. * 1、当参数billIds不为空值时,增量同步参数中的部门数据到OA
  43. * 2、当参数billIds为空时,全量同步所有组织数据到OA
  44. * 3、当参数action不为空时,根据操作类型同步数据
  45. * 4、当参数action为空时,判断部门状态是否为失效,如果失效就执行删除同步,否则就执行编辑同步
  46. * 5、部门新增,调用部门同步方法增量同步,操作类型为新增
  47. *
  48. * @param billds
  49. * @param action
  50. * @throws BOSException
  51. */
  52. public void _syncOrgUnitToOA(Context ctx, String billds, ActionTypeEnum action) throws BOSException, IOException {
  53. Set adminOrgIds = new HashSet();
  54. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  55. String actionType = action == null ? "" : action.getValue().toLowerCase();
  56. //当参数billIds不为空值时,增量同步参数中的部门数据到OA
  57. if (!StringUtils.isEmpty(billds)) {
  58. String[] split = billds.split(",");
  59. for (String adminOrgId : split) {
  60. adminOrgIds.add(adminOrgId);
  61. }
  62. ////当参数action为空时,判断部门状态是否为失效,如果失效就执行删除同步,否则就执行编辑同步
  63. //if (!StringUtils.isEmpty(billds) && action == null) {
  64. // logger.error("_syncOrgUnitToOA---------incrementalQuery");
  65. // AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
  66. // saveSynOrgUnit(adminOrgColl, actionType);
  67. //
  68. //} else if (!StringUtils.isEmpty(billds) && action != null) {//当参数action不为空时,根据操作类型同步数据
  69. // logger.error("_syncOrgUnitToOA---------saveQuery");
  70. // //新增同步
  71. // if (ActionTypeEnum.ADD.getValue().equals(action.getValue())) {
  72. // logger.error("_syncOrgUnitToOA---------add");
  73. // AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
  74. // saveSynOrgUnit(adminOrgColl, actionType);
  75. // }
  76. // //编辑同步
  77. // if (ActionTypeEnum.EDIT.getValue().equals(action.getValue())) {
  78. // logger.error("_syncOrgUnitToOA---------edit");
  79. // AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
  80. // saveSynOrgUnit(adminOrgColl, actionType);
  81. // }
  82. //}
  83. AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
  84. saveSynOrgUnit(adminOrgColl, actionType);
  85. } else {
  86. if (StringUtils.isEmpty(billds) && action == null) { //当参数billIds为空时,全量同步所有组织数据到OA
  87. logger.error("_syncOrgUnitToOA---------batchQuery");
  88. SelectorItemCollection sic = new SelectorItemCollection();
  89. sic.add("*");
  90. sic.add("parent.*");
  91. AdminOrgUnitCollection adminOrgUnitCollection = iAdminOrgUnit.getAdminOrgUnitCollection(EntityViewInfo.getInstance(null, sic, null));
  92. if (adminOrgUnitCollection.size() > 0) {
  93. saveSynOrgUnit(adminOrgUnitCollection, actionType);
  94. }
  95. }
  96. }
  97. }
  98. /**
  99. * 批量查询行政组织数据
  100. *
  101. * @param ctx
  102. * @param adminOrgIds
  103. * @return
  104. * @throws BOSException
  105. */
  106. public AdminOrgUnitCollection getAdminOrgColl(Context ctx, Set adminOrgIds) throws BOSException {
  107. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  108. SelectorItemCollection sic = new SelectorItemCollection();
  109. sic.add("*");
  110. sic.add("parent.*");
  111. FilterInfo filterInfo = new FilterInfo();
  112. filterInfo.getFilterItems().add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE));
  113. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  114. return iAdminOrgUnit.getAdminOrgUnitCollection(entityViewInfo);
  115. }
  116. /**
  117. * 新增方法
  118. *
  119. * @param adminOrgUnitCollection
  120. */
  121. public void saveSynOrgUnit(AdminOrgUnitCollection adminOrgUnitCollection, String action) throws IOException {
  122. ObjectMapper mapper = new ObjectMapper();
  123. //mapper.writeValueAsString();
  124. //mapper.readValue(paramData, Map.class)
  125. logger.error("saveSynOrgUnit----------------------start");
  126. List saveList = new ArrayList();
  127. for (int i = 0; i < adminOrgUnitCollection.size(); i++) {
  128. AdminOrgUnitInfo adminOrgUnitInfo = adminOrgUnitCollection.get(i);
  129. AdminOrg adminOrg = new AdminOrg();
  130. boolean isSealUp = adminOrgUnitInfo.isIsSealUp();
  131. if (isSealUp) {
  132. adminOrg.setAction("delete");
  133. } else {
  134. adminOrg.setAction("add");
  135. }
  136. adminOrg.setCode(adminOrgUnitInfo.getNumber());
  137. adminOrg.setShortname(adminOrgUnitInfo.getName());
  138. adminOrg.setFullname(adminOrgUnitInfo.getName());
  139. adminOrg.setParent_code("ITCS");
  140. adminOrg.setOrg_code("0");
  141. //adminOrg.setParent_code(adminOrgUnitInfo.getParent().getNumber());
  142. adminOrg.setCanceled(adminOrgUnitInfo.isIsSealUp() == true ? "1" : "0");
  143. //adminOrg.setOrder((String.valueOf(adminOrgUnitInfo.getIndex())));
  144. saveList.add(adminOrg);
  145. }
  146. //封装请求参数
  147. String data = mapper.writeValueAsString(saveList);
  148. logger.error("saveSynOrgUnit----------------------data" + data);
  149. String adminOrgApiUrl = "/api/hrm/resful/synDepartment";
  150. Response response = synScyRequest(data, adminOrgApiUrl);
  151. logger.error("response----------------------data" + mapper.writeValueAsString(response));
  152. }
  153. //public static void main(String[] args) throws JsonProcessingException {
  154. // ObjectMapper mapper = new ObjectMapper();
  155. // List saveList = new ArrayList();
  156. // for (int i = 0; i < 2; i++) {
  157. // AdminOrg adminOrg = new AdminOrg();
  158. // adminOrg.setAction("add");
  159. // saveList.add(adminOrg);
  160. // }
  161. // String s = mapper.writeValueAsString(saveList);
  162. // System.out.println(s);
  163. // System.out.println(ActionTypeEnum.EDIT.getValue().toLowerCase());
  164. //
  165. //}
  166. /**
  167. * 同步请求方法
  168. *
  169. * @param param
  170. * @param aipUrl
  171. * @return
  172. * @throws IOException
  173. */
  174. public Response synScyRequest(String param, String aipUrl) throws IOException {
  175. String url = this.propt.getProperty("url");
  176. OkHttpClient client = new OkHttpClient();
  177. MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
  178. String data = String.format("token = %s &data = %s", getToken(), param);
  179. logger.error("synAdminOrgRequest----------------------date" + data);
  180. RequestBody body = RequestBody.create(mediaType, data);
  181. Request request = new Request.Builder()
  182. .url(url + aipUrl)
  183. .post(body)
  184. .addHeader("Content-Type", "application/json")
  185. .addHeader("Accept", "*/*")
  186. .addHeader("Accept-Encoding", "gzip, deflate, br")
  187. .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0")
  188. .addHeader("Connection", "keep-alive")
  189. .build();
  190. return client.newCall(request).execute();
  191. }
  192. /**
  193. * 获取token
  194. *
  195. * @return
  196. */
  197. public String getToken() {
  198. String key = this.propt.getProperty("key");
  199. long l = System.currentTimeMillis();//时间戳毫秒数
  200. String code = key.concat(Long.toString(l));
  201. //String s = DigestUtils.md5Hex(code).toUpperCase();
  202. String s = DigestUtils.md5Hex(code).toUpperCase();
  203. System.out.println(s);
  204. Map<String, String> map = new HashMap<>();
  205. map.put("key", s);
  206. map.put("ts", Long.toString(l));
  207. logger.error("getToken" + JSONObject.toJSONString(map));
  208. return JSONObject.toJSONString(map);
  209. }
  210. }