OrgUnitListHandlerEx.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.kingdee.eas.custom.synctask.handler;
  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.entity.AdminOrg;
  17. import com.kingdee.eas.hr.ats.AtsUtil;
  18. import com.kingdee.eas.hr.org.web.handler.OrgUnitListHandler;
  19. import com.kingdee.shr.base.syssetting.context.SHRContext;
  20. import com.kingdee.util.StringUtils;
  21. import okhttp3.*;
  22. import org.apache.commons.codec.digest.DigestUtils;
  23. import org.apache.log4j.Logger;
  24. import org.springframework.ui.ModelMap;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import java.io.FileInputStream;
  28. import java.io.IOException;
  29. import java.util.*;
  30. /**
  31. * @author qingwu
  32. * @date 2024/10/21
  33. * @apiNote
  34. */
  35. public class OrgUnitListHandlerEx extends OrgUnitListHandler {
  36. Logger logger = Logger.getLogger(OrgUnitListHandlerEx.class);
  37. private Context ctx = SHRContext.getInstance().getContext();
  38. private Properties propt = new Properties();
  39. public OrgUnitListHandlerEx() {
  40. try {
  41. this.propt.load(new FileInputStream("E:\\Kingdee\\eas\\server\\properties\\scy\\syncOAConfig.properties"));
  42. //propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/scy/syncOAConfig.properties"));
  43. } catch (IOException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. public void syncOrgUnitToOAAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, IOException {
  48. String billIds = request.getParameter("billIds");
  49. _syncPersonToOA(ctx, billIds, null);
  50. }
  51. /**
  52. * 同步组织
  53. * 1、当参数billIds不为空值时,增量同步参数中的部门数据到OA
  54. * 2、当参数billIds为空时,全量同步所有组织数据到OA
  55. * 3、当参数action不为空时,根据操作类型同步数据
  56. * 4、当参数action为空时,判断部门状态是否为失效,如果失效就执行删除同步,否则就执行编辑同步
  57. * 5、部门新增,调用部门同步方法增量同步,操作类型为新增
  58. *
  59. * @param billds
  60. * @param action
  61. * @throws BOSException
  62. */
  63. public void _syncPersonToOA(Context ctx, String billds, ActionTypeEnum action) throws BOSException, IOException {
  64. logger.error("_syncPersonToOA----------------------start");
  65. logger.error("_syncPersonToOA----------------------billds: " + billds);
  66. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  67. List dataList = new ArrayList();
  68. //当参数billIds不为空值时,增量同步参数中的部门数据到OA
  69. FilterInfo filterInfo = null;
  70. if (!StringUtils.isEmpty(billds)) {
  71. Set<String> adminOrgIds = AtsUtil.toSet(billds);
  72. filterInfo = new FilterInfo();
  73. filterInfo.getFilterItems().add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE));
  74. }
  75. SelectorItemCollection sic = new SelectorItemCollection();
  76. sic.add("*");
  77. sic.add("parent.number");
  78. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  79. AdminOrgUnitCollection adminOrgUnitCollection = iAdminOrgUnit.getAdminOrgUnitCollection(entityViewInfo);
  80. for (int i = 0; i < adminOrgUnitCollection.size(); i++) {
  81. AdminOrgUnitInfo adminOrgUnitInfo = adminOrgUnitCollection.get(i);
  82. String orgName = adminOrgUnitInfo.getName();
  83. AdminOrg adminOrg = new AdminOrg();
  84. boolean isSealUp = adminOrgUnitInfo.isIsSealUp();
  85. if (isSealUp) {
  86. adminOrg.setAction("delete");
  87. adminOrg.setCanceled("0");
  88. } else {
  89. adminOrg.setAction("add");
  90. }
  91. adminOrg.setCode(adminOrgUnitInfo.getNumber());
  92. adminOrg.setShortname(orgName);
  93. adminOrg.setFullname(orgName);
  94. //adminOrg.setParent_code("ITCS");
  95. adminOrg.setOrg_code("0");
  96. adminOrg.setParent_code(adminOrgUnitInfo.getParent().getNumber());
  97. //adminOrg.setOrder((String.valueOf(adminOrgUnitInfo.getIndex())));
  98. dataList.add(adminOrg);
  99. }
  100. //调用执行同步组织到OA
  101. executeSyncOrgUnitToOA(dataList);
  102. }
  103. /**
  104. * 执行同步组织到OA
  105. *
  106. * @param dataList
  107. */
  108. public void executeSyncOrgUnitToOA(List dataList) throws IOException, BOSException {
  109. if (dataList != null && dataList.size() > 0) {
  110. ObjectMapper mapper = new ObjectMapper();
  111. //封装请求参数
  112. String data = mapper.writeValueAsString(dataList);
  113. String params = String.format("token = %s &data = %s", getToken(), data);
  114. logger.error("executeSyncOrgUnitToOA----------------------params" + params);
  115. //封装请求参数
  116. //String syncOrgUnitApiUrl = "/api/hrm/resful/synDepartment";
  117. String syncOrgUnitApiUrl = this.propt.getProperty("syncOrgUnitApiUrl");
  118. String url = this.propt.getProperty("url");
  119. logger.error("executeSyncOrgUnitToOA----------------------syncOrgUnitApiUrl" + syncOrgUnitApiUrl);
  120. if (StringUtils.isEmpty(syncOrgUnitApiUrl)) {
  121. throw new BOSException("同步组织到OA接口地址不能为空!");
  122. }
  123. OkHttpClient client = new OkHttpClient();
  124. MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
  125. RequestBody body = RequestBody.create(mediaType, params);
  126. Request request = new Request.Builder()
  127. .url(url + syncOrgUnitApiUrl)
  128. .post(body)
  129. .addHeader("Content-Type", "application/json")
  130. .addHeader("Accept", "*/*")
  131. .addHeader("Accept-Encoding", "gzip, deflate, br")
  132. .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0")
  133. .addHeader("Connection", "keep-alive")
  134. .build();
  135. Response response = client.newCall(request).execute();
  136. String respBody = response.body().string();
  137. if (response.isSuccessful()) {
  138. } else {
  139. }
  140. }
  141. }
  142. /**
  143. * 获取token
  144. *
  145. * @return
  146. */
  147. public String getToken() {
  148. String key = this.propt.getProperty("key");
  149. long l = System.currentTimeMillis();//时间戳毫秒数
  150. String code = key.concat(Long.toString(l));
  151. //String s = DigestUtils.md5Hex(code).toUpperCase();
  152. String s = DigestUtils.md5Hex(code).toUpperCase();
  153. Map<String, String> map = new HashMap<>();
  154. map.put("key", s);
  155. map.put("ts", Long.toString(l));
  156. logger.error("getToken" + JSONObject.toJSONString(map));
  157. return JSONObject.toJSONString(map);
  158. }
  159. }