|
@@ -16,6 +16,7 @@ import kd.bos.util.StringUtils;
|
|
|
import kd.sdk.plugin.Plugin;
|
|
|
import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
@@ -47,71 +48,77 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
* startTime : 手工配置开始时间 yyyy-MM-dd hh24:mi:ss
|
|
|
* endTime : 手工配置结束时间 yyyy-MM-dd hh24:mi:ss
|
|
|
*/
|
|
|
- log.info("-------- SyncAdminOrgTask 开始执行同步行政组织 --------");
|
|
|
- //最后调MDM的jsonObject
|
|
|
- JSONObject ob = new JSONObject();
|
|
|
- initDateRange(map);
|
|
|
- HRBaseServiceHelper helper = new HRBaseServiceHelper(orgChgRecord_entity);
|
|
|
- String selectProperties = "adminorg,orgchgentry.changescene.number,createtime";
|
|
|
- //查出发生过变化的组织
|
|
|
- DynamicObjectCollection changeOperateCol = helper.queryOriginalCollection(selectProperties, this.getQFilters());
|
|
|
- //查询出来为空直接返回
|
|
|
- if(CollectionUtils.isEmpty(changeOperateCol)) {
|
|
|
- log.info("-------- 未查询到变化组织 -------- ");
|
|
|
- SyncUtil.createLog(SyncUtil.v_error, startTime, endTime, "未查询到变化组织", "未调用", SyncUtil.SyncOrg);
|
|
|
- }
|
|
|
- else {
|
|
|
- //发生变化的组织Map
|
|
|
- //按照变动场景编码分成不同的List,后续根据场景分开处理
|
|
|
- //ToDo 如果查询时间内,某个组织先发生组织调整,再修改除名称外其他信息怎么处理?
|
|
|
- //按照组织分组,只取时间段内最新的一条记录
|
|
|
- //暂时只处理(10,20,30,40,50);
|
|
|
- //ToDo(80,90)目前前台界面做不了该业务,后续考虑;
|
|
|
- //ToDo 60尚不明确,需确认;
|
|
|
- //1010_S 组织新设
|
|
|
- //1020_S 上级调整
|
|
|
- //1030_S 组织更名
|
|
|
- //1040_S 组织停用
|
|
|
- //1050_S 初始化新增
|
|
|
- //1060_S 初始化禁用
|
|
|
- //1080_S 组织合并
|
|
|
- //1090_S 组织拆分
|
|
|
- //CS_1110_SY01 组织修订
|
|
|
+ try {
|
|
|
+ log.info("-------- SyncAdminOrgTask 开始执行同步行政组织 --------");
|
|
|
+ //最后调MDM的jsonObject
|
|
|
+ JSONObject ob = new JSONObject();
|
|
|
+ initDateRange(map);
|
|
|
+ HRBaseServiceHelper helper = new HRBaseServiceHelper(orgChgRecord_entity);
|
|
|
+ String selectProperties = "adminorg,orgchgentry.changescene.number,createtime";
|
|
|
+ //查出发生过变化的组织
|
|
|
+ DynamicObjectCollection changeOperateCol = helper.queryOriginalCollection(selectProperties, this.getQFilters());
|
|
|
+ //查询出来为空直接返回
|
|
|
+ if(CollectionUtils.isEmpty(changeOperateCol)) {
|
|
|
+ log.info("-------- 未查询到变化组织 -------- ");
|
|
|
+ SyncUtil.createLog(SyncUtil.v_success, startTime, endTime, "未查询到变化组织", "未调用", SyncUtil.SyncOrg);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //发生变化的组织Map
|
|
|
+ //按照变动场景编码分成不同的List,后续根据场景分开处理
|
|
|
+ //ToDo 如果查询时间内,某个组织先发生组织调整,再修改除名称外其他信息怎么处理?
|
|
|
+ //按照组织分组,只取时间段内最新的一条记录
|
|
|
+ //暂时只处理(10,20,30,40,50);
|
|
|
+ //ToDo(80,90)目前前台界面做不了该业务,后续考虑;
|
|
|
+ //ToDo 60尚不明确,需确认;
|
|
|
+ //1010_S 组织新设
|
|
|
+ //1020_S 上级调整
|
|
|
+ //1030_S 组织更名
|
|
|
+ //1040_S 组织停用
|
|
|
+ //1050_S 初始化新增
|
|
|
+ //1060_S 初始化禁用
|
|
|
+ //1080_S 组织合并
|
|
|
+ //1090_S 组织拆分
|
|
|
+ //CS_1110_SY01 组织修订
|
|
|
// Map<String, List<DynamicObject>> changeOperateMap = (Map)changeOperateCol.stream().collect(Collectors.groupingBy(
|
|
|
// dyx -> dyx.getString("orgchgentry.changescene.number")
|
|
|
// ));
|
|
|
- //按组织ID汇总
|
|
|
- Map<Long, DynamicObject> changeOperateMap = (Map)changeOperateCol.stream().collect(Collectors.toMap((dyx) -> {
|
|
|
- return dyx.getLong("adminorg");
|
|
|
- }, (dyx) -> {
|
|
|
- return dyx;
|
|
|
- }, (key1, key2) -> {
|
|
|
- return key2;
|
|
|
- }));
|
|
|
- log.info("-------- 变化组织数(不去重):" + changeOperateCol.size() + " --------");
|
|
|
- log.info("-------- 变化组织数(去重):" + changeOperateMap.keySet().size() + " --------");
|
|
|
- log.info("-------- 变化组织Id:" + changeOperateMap.keySet() + " --------");
|
|
|
+ //按组织ID汇总
|
|
|
+ Map<Long, DynamicObject> changeOperateMap = (Map)changeOperateCol.stream().collect(Collectors.toMap((dyx) -> {
|
|
|
+ return dyx.getLong("adminorg");
|
|
|
+ }, (dyx) -> {
|
|
|
+ return dyx;
|
|
|
+ }, (key1, key2) -> {
|
|
|
+ return key2;
|
|
|
+ }));
|
|
|
+ log.info("-------- 变化组织数(不去重):" + changeOperateCol.size() + " --------");
|
|
|
+ log.info("-------- 变化组织数(去重):" + changeOperateMap.keySet().size() + " --------");
|
|
|
+ log.info("-------- 变化组织Id:" + changeOperateMap.keySet() + " --------");
|
|
|
|
|
|
- // ToDo 根据变动操作字段获取发生了组织调整的组织,后续需要根据这些组织同步下级岗位和人员
|
|
|
- //组织历史查询,如果查询时间内发生多次变化,
|
|
|
- //haos_adminorgdetail 组织历史查询 所属表t_haos_adminorg Id与t_org_org一样
|
|
|
- selectProperties = "id,boid,number,name,orglongname,level,nckd_easid,parentorg.id,parentorg.name,parentorg.number,establishmentdate,bsed,enable,adminorgtype.name,disabledate,modifytime";
|
|
|
- QFilter idQFilter = new QFilter("id", "in", changeOperateMap.keySet());
|
|
|
- DynamicObject[] orgDyArr = new HRBaseServiceHelper(adminOrgDetail_entity).query(selectProperties, new QFilter[]{idQFilter});
|
|
|
- //处理下长编码/长名称,星瀚内是4VTX1ACRU8A9!4VU/45/K1PJZ!4W5LG9NNW9EW这种格式 -- 直接取行政组织结构里面的长编码
|
|
|
- Map<Long, DynamicObject> bosOrgMap = SyncUtil.initOrgInfo();
|
|
|
- log.info("-------- 查询完组织详细信息数:" + orgDyArr.length + " --------");
|
|
|
- //构建入参
|
|
|
- buildJSON(ob, orgDyArr, changeOperateMap, bosOrgMap);
|
|
|
- //获取调用接口地址
|
|
|
- String url = SyncUtil.getUrl("org_url");
|
|
|
- log.info("-------- 组织同步调用url : " + url + " --------");
|
|
|
- //调用接口
|
|
|
- JSONObject response = SyncUtil.doPostByHttpClient(url, ob);
|
|
|
- //处理返回结果
|
|
|
- String status = SyncUtil.dealResponseStatus(response);
|
|
|
- //记录日志
|
|
|
- SyncUtil.createLog(status, startTime, endTime, ob.toJSONString(), response.toJSONString(), SyncUtil.SyncOrg);
|
|
|
+ // ToDo 根据变动操作字段获取发生了组织调整的组织,后续需要根据这些组织同步下级岗位和人员
|
|
|
+ //组织历史查询,如果查询时间内发生多次变化,
|
|
|
+ //haos_adminorgdetail 组织历史查询 所属表t_haos_adminorg Id与t_org_org一样
|
|
|
+ selectProperties = "id,boid,number,name,orglongname,level,nckd_easid,parentorg.id,parentorg.name,parentorg.number,parentorg.nckd_easid,establishmentdate,bsed,enable,adminorgtype.name,disabledate,modifytime,creator.name";
|
|
|
+ QFilter idQFilter = new QFilter("id", "in", changeOperateMap.keySet());
|
|
|
+ DynamicObject[] orgDyArr = new HRBaseServiceHelper(adminOrgDetail_entity).query(selectProperties, new QFilter[]{idQFilter});
|
|
|
+ //处理下长编码/长名称,星瀚内是4VTX1ACRU8A9!4VU/45/K1PJZ!4W5LG9NNW9EW这种格式 -- 直接取行政组织结构里面的长编码
|
|
|
+ Map<Long, DynamicObject> bosOrgMap = SyncUtil.initOrgInfo();
|
|
|
+ log.info("-------- 查询完组织详细信息数:" + orgDyArr.length + " --------");
|
|
|
+ //构建入参
|
|
|
+ buildJSON(ob, orgDyArr, changeOperateMap, bosOrgMap);
|
|
|
+ //获取调用接口地址
|
|
|
+ String url = SyncUtil.getUrl("org_url");
|
|
|
+ log.info("-------- 组织同步调用url : " + url + " --------");
|
|
|
+ //调用接口
|
|
|
+ JSONObject response = SyncUtil.doPostByHttpClient(url, ob);
|
|
|
+ //处理返回结果
|
|
|
+ String status = SyncUtil.dealResponseStatus(response);
|
|
|
+ //记录日志
|
|
|
+ SyncUtil.createLog(status, startTime, endTime, ob.toJSONString(), response.toJSONString(), SyncUtil.SyncOrg);
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ SyncUtil.createLog(SyncUtil.v_error, startTime, endTime, e.getMessage(), "未调用", SyncUtil.SyncOrg);
|
|
|
+ } catch (IOException e) {
|
|
|
+ SyncUtil.createLog(SyncUtil.v_error, startTime, endTime, e.getMessage(), "未调用", SyncUtil.SyncOrg);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -122,6 +129,7 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
public void buildJSON(JSONObject ob, DynamicObject[] orgDyArr, Map<Long, DynamicObject> changeOperateMap, Map<Long, DynamicObject> bosOrgMap) {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
JSONArray obj = new JSONArray();
|
|
|
+ Map<Long, DynamicObject> costCenterMap = SyncUtil.getCostCenter();
|
|
|
for(DynamicObject org : orgDyArr) {
|
|
|
JSONObject data = new JSONObject(true);
|
|
|
//主体标签 默认JY
|
|
@@ -134,7 +142,7 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
//组织名称
|
|
|
data.put("MD_DESCRIPTION", org.getString("name"));
|
|
|
//上级行政组织ID 看是否有easid 有就传EASID 否则传星瀚ID
|
|
|
- data.put("ADM_PARENT_NUMBER", org.getString("parentorg.id"));
|
|
|
+ data.put("ADM_PARENT_NUMER", org.getString("parentorg.nckd_easid"));
|
|
|
//上级组织名称
|
|
|
data.put("ADM_PARENT_NAME", org.getString("parentorg.name"));
|
|
|
//行政组织长名称 orglongname没值 去平台那边取
|
|
@@ -155,6 +163,7 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
}
|
|
|
//创建时间 取行政组织的创建时间
|
|
|
Date createDate = bosOrgMap.get(org.getLong("id")).getDate("createtime");
|
|
|
+ data.put("ADM_CREATOR", org.getString("creator.name"));
|
|
|
data.put("ADM_CREATION_TIME", sdf.format(createDate));
|
|
|
//最后修改时间
|
|
|
data.put("ADM_LAST_UPTIME", sdf.format(org.getDate("modifytime")));
|
|
@@ -170,13 +179,32 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
data.put("ADM_SEALUP", "否");
|
|
|
data.put("ADM_STORAGE_TIME", null);
|
|
|
}
|
|
|
+ DynamicObject costCenter = costCenterMap.get(org.getLong("id"));
|
|
|
+ if(costCenter == null) {
|
|
|
+ //是否成本中心实体组织
|
|
|
+ data.put("ADM_ENTITY_COST_CENTER", "否");
|
|
|
+ //是否成本中心组织
|
|
|
+ data.put("ADM_COST_CENTER", "否");
|
|
|
+ //成本中心是否封存
|
|
|
+ data.put("ADM_COST_CENTER_SEALUP", "否");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ data.put("ADM_COST_CENTER", "是");
|
|
|
+ if(costCenter.getBoolean("costcenter.isleaf")) {
|
|
|
+ data.put("ADM_ENTITY_COST_CENTER", "是");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ data.put("ADM_ENTITY_COST_CENTER", "否");
|
|
|
+ }
|
|
|
+ int ccEnable = costCenter.getInt("costcenter.enable");
|
|
|
+ if(ccEnable == 1) {
|
|
|
+ data.put("ADM_COST_CENTER_SEALUP", "否");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ data.put("ADM_COST_CENTER_SEALUP", "是");
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //是否成本中心实体组织 TODO
|
|
|
- data.put("ADM_ENTITY_COST_CENTER", null);
|
|
|
- //是否成本中心组织 TODO
|
|
|
- data.put("ADM_COST_CENTER", null);
|
|
|
- //成本中心是否封存 TODO
|
|
|
- data.put("ADM_COST_CENTER_SEALUP", null);
|
|
|
obj.add(data);
|
|
|
}
|
|
|
SyncUtil.setJSONArraySorted(obj, "MD_LEVEL");
|
|
@@ -188,7 +216,7 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
* 根据调度作业上配置的参数初始化时间范围
|
|
|
* @param map
|
|
|
*/
|
|
|
- public void initDateRange(Map<String, Object> map) {
|
|
|
+ public void initDateRange(Map<String, Object> map) throws ParseException {
|
|
|
boolean isAuto = Boolean.valueOf(map.get("isAuto").toString());
|
|
|
if(!isAuto) {
|
|
|
startTime = map.get("startTime").toString();
|
|
@@ -197,8 +225,7 @@ public class SyncAdminOrgTask extends AbstractTask implements Plugin {
|
|
|
//取最近一次日志的时间
|
|
|
else {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- // ToDo
|
|
|
- //startTime = "";
|
|
|
+ startTime = sdf.format(SyncUtil.getLastSyncEndTime(SyncUtil.SyncOrg));
|
|
|
endTime = sdf.format(new Date());
|
|
|
}
|
|
|
}
|