package com.kingdee.eas.custom.synctask.utils; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.metadata.entity.EntityViewInfo; import com.kingdee.bos.metadata.entity.FilterInfo; import com.kingdee.bos.metadata.entity.FilterItemInfo; import com.kingdee.bos.metadata.entity.SelectorItemCollection; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.eas.basedata.org.AdminOrgUnitCollection; import com.kingdee.eas.basedata.org.AdminOrgUnitFactory; import com.kingdee.eas.basedata.org.AdminOrgUnitInfo; import com.kingdee.eas.basedata.org.IAdminOrgUnit; import com.kingdee.eas.custom.synctask.ActionTypeEnum; import com.kingdee.eas.custom.synctask.entity.AdminOrg; import com.kingdee.eas.hr.ats.AtsUtil; import com.kingdee.util.StringUtils; import okhttp3.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; import java.io.FileInputStream; import java.io.IOException; import java.util.*; /** * @author qingwu * @date 2024/10/21 * @apiNote */ public class SynctaskUtils { public static Logger logger = Logger.getLogger("com.kingdee.eas.custom.synctask.utils.SynctaskUtils"); private Properties propt = new Properties(); public SynctaskUtils() { try { this.propt.load(new FileInputStream("E:\\Kingdee\\eas\\server\\properties\\scy\\syncOAConfig.properties")); //propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/scy/syncOAConfig.properties")); } catch (IOException e) { e.printStackTrace(); } } /** * 同步组织 * 1、当参数billIds不为空值时,增量同步参数中的部门数据到OA * 2、当参数billIds为空时,全量同步所有组织数据到OA * 3、当参数action不为空时,根据操作类型同步数据 * 4、当参数action为空时,判断部门状态是否为失效,如果失效就执行删除同步,否则就执行编辑同步 * 5、部门新增,调用部门同步方法增量同步,操作类型为新增 * * @param billds * @param action * @throws BOSException */ public void _syncOrgUnitToOA(Context ctx, String billds, ActionTypeEnum action) throws BOSException, IOException { logger.error("_syncOrgUnitToOA----------------------start"); logger.error("_syncOrgUnitToOA----------------------billds: " + billds); IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx); List dataList = new ArrayList(); String actionType = action == null ? "" : action.getValue().toLowerCase(); //当参数billIds不为空值时,增量同步参数中的部门数据到OA FilterInfo filterInfo = null; if (!StringUtils.isEmpty(billds)) { Set adminOrgIds = AtsUtil.toSet(billds); filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE)); } SelectorItemCollection sic = new SelectorItemCollection(); sic.add("*"); sic.add("parent.number"); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null); AdminOrgUnitCollection adminOrgUnitCollection = iAdminOrgUnit.getAdminOrgUnitCollection(entityViewInfo); for (int i = 0; i < adminOrgUnitCollection.size(); i++) { AdminOrgUnitInfo adminOrgUnitInfo = adminOrgUnitCollection.get(i); String orgName = adminOrgUnitInfo.getName(); AdminOrg adminOrg = new AdminOrg(); boolean isSealUp = adminOrgUnitInfo.isIsSealUp(); if (isSealUp) { adminOrg.setAction("delete"); adminOrg.setCanceled("0"); } else { adminOrg.setAction("add"); } adminOrg.setCode(adminOrgUnitInfo.getNumber()); adminOrg.setShortname(orgName); adminOrg.setFullname(orgName); //adminOrg.setParent_code("ITCS"); adminOrg.setOrg_code("0"); adminOrg.setParent_code(adminOrgUnitInfo.getParent().getNumber()); //adminOrg.setOrder((String.valueOf(adminOrgUnitInfo.getIndex()))); dataList.add(adminOrg); } //调用执行同步组织到OA executeSyncOrgUnitToOA(dataList); } /** * 执行同步组织到OA * * @param dataList */ public void executeSyncOrgUnitToOA(List dataList) throws IOException, BOSException { if (dataList != null && dataList.size() > 0) { ObjectMapper mapper = new ObjectMapper(); //封装请求参数 String data = mapper.writeValueAsString(dataList); String params = String.format("token = %s &data = %s", getToken(), data); logger.error("executeSyncOrgUnitToOA----------------------params" + params); //封装请求参数 //String syncOrgUnitApiUrl = "/api/hrm/resful/synDepartment"; String syncOrgUnitApiUrl = this.propt.getProperty("syncOrgUnitApiUrl"); String url = this.propt.getProperty("url"); logger.error("executeSyncOrgUnitToOA----------------------syncOrgUnitApiUrl" + syncOrgUnitApiUrl); if (StringUtils.isEmpty(syncOrgUnitApiUrl)) { throw new BOSException("同步组织到OA接口地址不能为空!"); } OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, params); Request request = new Request.Builder() .url(url + syncOrgUnitApiUrl) .post(body) .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Accept-Encoding", "gzip, deflate, br") .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0") .addHeader("Connection", "keep-alive") .build(); Response response = client.newCall(request).execute(); String respBody = response.body().string(); if (response.isSuccessful()) { } else { } } } /** * 获取token * * @return */ public String getToken() { String key = this.propt.getProperty("key"); long l = System.currentTimeMillis();//时间戳毫秒数 String code = key.concat(Long.toString(l)); //String s = DigestUtils.md5Hex(code).toUpperCase(); String s = DigestUtils.md5Hex(code).toUpperCase(); Map map = new HashMap<>(); map.put("key", s); map.put("ts", Long.toString(l)); logger.error("getToken" + JSONObject.toJSONString(map)); return JSONObject.toJSONString(map); } }