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.entry.AdminOrg; 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\\synOAConfig.properties")); //propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/scy/synOAConfig.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 { Set adminOrgIds = new HashSet(); IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx); String actionType = action == null ? "" : action.getValue().toLowerCase(); //当参数billIds不为空值时,增量同步参数中的部门数据到OA if (!StringUtils.isEmpty(billds)) { String[] split = billds.split(","); for (String adminOrgId : split) { adminOrgIds.add(adminOrgId); } ////当参数action为空时,判断部门状态是否为失效,如果失效就执行删除同步,否则就执行编辑同步 //if (!StringUtils.isEmpty(billds) && action == null) { // logger.error("_syncOrgUnitToOA---------incrementalQuery"); // AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds); // saveSynOrgUnit(adminOrgColl, actionType); // //} else if (!StringUtils.isEmpty(billds) && action != null) {//当参数action不为空时,根据操作类型同步数据 // logger.error("_syncOrgUnitToOA---------saveQuery"); // //新增同步 // if (ActionTypeEnum.ADD.getValue().equals(action.getValue())) { // logger.error("_syncOrgUnitToOA---------add"); // AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds); // saveSynOrgUnit(adminOrgColl, actionType); // } // //编辑同步 // if (ActionTypeEnum.EDIT.getValue().equals(action.getValue())) { // logger.error("_syncOrgUnitToOA---------edit"); // AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds); // saveSynOrgUnit(adminOrgColl, actionType); // } //} AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds); saveSynOrgUnit(adminOrgColl, actionType); } else { if (StringUtils.isEmpty(billds) && action == null) { //当参数billIds为空时,全量同步所有组织数据到OA logger.error("_syncOrgUnitToOA---------batchQuery"); SelectorItemCollection sic = new SelectorItemCollection(); sic.add("*"); sic.add("parent.*"); AdminOrgUnitCollection adminOrgUnitCollection = iAdminOrgUnit.getAdminOrgUnitCollection(EntityViewInfo.getInstance(null, sic, null)); if (adminOrgUnitCollection.size() > 0) { saveSynOrgUnit(adminOrgUnitCollection, actionType); } } } } /** * 批量查询行政组织数据 * * @param ctx * @param adminOrgIds * @return * @throws BOSException */ public AdminOrgUnitCollection getAdminOrgColl(Context ctx, Set adminOrgIds) throws BOSException { IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx); SelectorItemCollection sic = new SelectorItemCollection(); sic.add("*"); sic.add("parent.*"); FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE)); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null); return iAdminOrgUnit.getAdminOrgUnitCollection(entityViewInfo); } /** * 新增方法 * * @param adminOrgUnitCollection */ public void saveSynOrgUnit(AdminOrgUnitCollection adminOrgUnitCollection, String action) throws IOException { ObjectMapper mapper = new ObjectMapper(); //mapper.writeValueAsString(); //mapper.readValue(paramData, Map.class) logger.error("saveSynOrgUnit----------------------start"); List saveList = new ArrayList(); for (int i = 0; i < adminOrgUnitCollection.size(); i++) { AdminOrgUnitInfo adminOrgUnitInfo = adminOrgUnitCollection.get(i); AdminOrg adminOrg = new AdminOrg(); boolean isSealUp = adminOrgUnitInfo.isIsSealUp(); if (isSealUp) { adminOrg.setAction("delete"); } else { adminOrg.setAction("add"); } adminOrg.setCode(adminOrgUnitInfo.getNumber()); adminOrg.setShortname(adminOrgUnitInfo.getName()); adminOrg.setFullname(adminOrgUnitInfo.getName()); adminOrg.setParent_code("ITCS"); adminOrg.setOrg_code("0"); //adminOrg.setParent_code(adminOrgUnitInfo.getParent().getNumber()); adminOrg.setCanceled(adminOrgUnitInfo.isIsSealUp() == true ? "1" : "0"); //adminOrg.setOrder((String.valueOf(adminOrgUnitInfo.getIndex()))); saveList.add(adminOrg); } //封装请求参数 String data = mapper.writeValueAsString(saveList); logger.error("saveSynOrgUnit----------------------data" + data); String adminOrgApiUrl = "/api/hrm/resful/synDepartment"; Response response = synScyRequest(data, adminOrgApiUrl); logger.error("response----------------------data" + mapper.writeValueAsString(response)); } //public static void main(String[] args) throws JsonProcessingException { // ObjectMapper mapper = new ObjectMapper(); // List saveList = new ArrayList(); // for (int i = 0; i < 2; i++) { // AdminOrg adminOrg = new AdminOrg(); // adminOrg.setAction("add"); // saveList.add(adminOrg); // } // String s = mapper.writeValueAsString(saveList); // System.out.println(s); // System.out.println(ActionTypeEnum.EDIT.getValue().toLowerCase()); // //} /** * 同步请求方法 * * @param param * @param aipUrl * @return * @throws IOException */ public Response synScyRequest(String param, String aipUrl) throws IOException { String url = this.propt.getProperty("url"); OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); String data = String.format("token = %s &data = %s", getToken(), param); logger.error("synAdminOrgRequest----------------------date" + data); RequestBody body = RequestBody.create(mediaType, data); Request request = new Request.Builder() .url(url + aipUrl) .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(); return client.newCall(request).execute(); } /** * 获取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(); System.out.println(s); Map map = new HashMap<>(); map.put("key", s); map.put("ts", Long.toString(l)); logger.error("getToken" + JSONObject.toJSONString(map)); return JSONObject.toJSONString(map); } }