diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SyncRzglPersonInfo.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SyncRzglPersonInfo.java index 1c6b5b4..6abaff5 100644 --- a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SyncRzglPersonInfo.java +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SyncRzglPersonInfo.java @@ -11,7 +11,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import java.security.SecureRandom; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -80,6 +79,10 @@ public class SyncRzglPersonInfo implements EsbServerlessRpcRemoteInterface { String objId = ebTableInfo.get("objId"); String ebTableName = ebTableInfo.get("table_name"); log.error("SyncRzglPersonInfo.ebTableName:{}", ebTableName); + + //查询员工信息表字段 + List listOfEmployeeInformationColumns = getTableColumnsOfTableName(ebTableName); + log.error("SyncOrganizationPersonInfo1111.listOfEmployeeInformationColumns:{}", listOfEmployeeInformationColumns); /** * 新增返回的人员id */ @@ -92,22 +95,30 @@ public class SyncRzglPersonInfo implements EsbServerlessRpcRemoteInterface { /** * 清除申请表字段 */ - map.remove("id"); - map.remove("rzzt_obj"); - map.remove("rzzt"); - map.remove("rzsqlc_obj"); - map.remove("rzsqlc"); - map.remove("sec_level"); - map.remove("form_data_id"); - map.remove("lrfs_obj"); - map.remove("lrfs"); +// map.remove("id"); +// map.remove("rzzt_obj"); +// map.remove("rzzt"); +// map.remove("rzsqlc_obj"); +// map.remove("rzsqlc"); +// map.remove("sec_level"); +// map.remove("form_data_id"); +// map.remove("lrfs_obj"); +// map.remove("lrfs"); + //对比字段,相同字段才推送 + // 遍历并移除(不包含则移除掉) + Map employeeInformation_new = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (String key : listOfEmployeeInformationColumns) { + if (containsKeyIgnoreCase(map,key)&&getIgnoreCase(map, key)!=null) { + employeeInformation_new.put(key,getIgnoreCase(map, key)); + } + } //跟换id值,然后主键冲突 ryid = createPrimarykey(); log.error("SyncRzglPersonInfo88888.primarykey:{}", ryid); - map.put("id",ryid); - map.put("form_data_id",ryid); - log.error("SyncRzglPersonInfo88888.map:{}", map); - code = insert(ebTableName,map); + employeeInformation_new.put("id",ryid); + employeeInformation_new.put("form_data_id",ryid); + log.error("SyncRzglPersonInfo88888.employeeInformation_new:{}", employeeInformation_new); + code = insert(ebTableName,employeeInformation_new); log.error("SyncRzglPersonInfo.code:{}", code); /** @@ -118,42 +129,49 @@ public class SyncRzglPersonInfo implements EsbServerlessRpcRemoteInterface { /** * 写入表单引擎数据大表 */ - insertFormdata(map,form_id,layout_id); + insertFormdata(employeeInformation_new,form_id,layout_id); /** * 写入EB表单数据大表 */ - insertPhysical(map,obj_id); + insertPhysical(employeeInformation_new,obj_id); } }else{ //更新 //3.更新元素据到员工信息表,移除id(清楚系统列) - map.remove("id"); - map.remove("updater"); - map.remove("create_time"); - map.remove("creator"); - map.remove("delete_type"); - map.remove("is_delete"); - map.remove("form_data_id"); - map.remove("flow_id"); - map.remove("is_flow"); - map.remove("flow_status"); - map.remove("eb_workflow_id"); - map.remove("current_step"); - map.remove("name"); - - map.remove("rzzt_obj"); - map.remove("rzzt"); - map.remove("rzsqlc_obj"); - map.remove("rzsqlc"); - map.remove("sec_level"); - - if(!map.isEmpty()){ +// map.remove("id"); +// map.remove("updater"); +// map.remove("create_time"); +// map.remove("creator"); +// map.remove("delete_type"); +// map.remove("is_delete"); +// map.remove("form_data_id"); +// map.remove("flow_id"); +// map.remove("is_flow"); +// map.remove("flow_status"); +// map.remove("eb_workflow_id"); +// map.remove("current_step"); +// map.remove("name"); +// +// map.remove("rzzt_obj"); +// map.remove("rzzt"); +// map.remove("rzsqlc_obj"); +// map.remove("rzsqlc"); +// map.remove("sec_level"); + // 遍历并移除(不包含则移除掉) + Map employeeInformation_new = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (String key : listOfEmployeeInformationColumns) { + if (containsKeyIgnoreCase(map,key)&&getIgnoreCase(map, key)!=null) { + employeeInformation_new.put(key,getIgnoreCase(map, key)); + } + } + if(!employeeInformation_new.isEmpty()){ //更新前先处理一下时间 - cleanUpTime(map); - code = update(ebTableName,map,"glyg",ygid); - log.error("SyncRzglPersonInfo.code:{}", code); + cleanUpTime(employeeInformation_new); + log.error("SyncRzglPersonInfo_update.employeeInformation_new:{}", employeeInformation_new); + code = update(ebTableName,employeeInformation_new,"glyg",ygid); + log.error("SyncRzglPersonInfo_update.cod222e:{}", code); } //查询一下员工信息表id String employeeId = getEmployeeId(ygid); diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/cbd/SyncDepartmentChanges.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/cbd/SyncDepartmentChanges.java new file mode 100644 index 0000000..35affcf --- /dev/null +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/cbd/SyncDepartmentChanges.java @@ -0,0 +1,743 @@ +package com.weaver.seconddev.jcl.organization.esb.cbd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.distribution.genid.IdGenerator; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.jcl.organization.util.DatabaseUtils; +import com.weaver.seconddev.jcl.organization.util.RecruitModuleUtils; +import com.weaver.seconddev.jcl.organization.util.SyncDataUtils; +import com.weaver.teams.security.context.UserContext; +import com.weaver.teams.security.user.User; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @use:开放平台-组织人事接口-同步部门-对比前后组织树方式 + * @date 2025年7月31日 + * @author xuxy + */ +@Service("SyncDepartmentChanges_jcl") +public class SyncDepartmentChanges implements EsbServerlessRpcRemoteInterface { + + @Autowired + private DatabaseUtils databaseUtils; + @Autowired + RecruitModuleUtils recruitModuleUtils; + @Autowired + private SyncDataUtils syncDataUtils; + + public static String path = "/api/hrm/restful/syncDepartment"; + public static String deletedPath = "/api/hrm/restful/disableDepartment"; + + private static final Logger log = LoggerFactory.getLogger(SyncDepartmentChanges.class); + + @Override + public WeaResult> execute(Map params) { + Map result = new HashMap<>(); + String bgsxrq = null != params.get("bgsxrq") ? String.valueOf(params.get("bgsxrq").toString()) : ""; + String form_id = null != params.get("form_id") ? String.valueOf(params.get("form_id").toString()) : ""; + String layout_id = null != params.get("layout_id") ? String.valueOf(params.get("layout_id").toString()) : ""; + log.error("SyncDepartmentChanges.form_id:{},layout_id:{}", form_id, layout_id); + /** + * 根据入参查询组织变更前后数据 + */ + List> originalTree = getOriginalTree("0", bgsxrq); + List> changedTree = getOriginalTree("1", bgsxrq); + log.error("SyncDepartmentChanges.changedTree:{}", changedTree); + + // 比对并获取差异 + //List>> differences = findDifferences(changedTree); + + +// /** +// * 需新增的部门 +// */ +// List> addedChanges = differences.stream().filter(map -> "added".equals(map.get("type"))).collect(Collectors.toList()); +// +// /** +// * 需修改的部门 +// */ +// List> modifiedChanges = differences.stream().filter(map -> "modified".equals(map.get("type"))).collect(Collectors.toList()); +// +// /** +// * 需删除的部门 +// */ +// List> deletedChanges = differences.stream().filter(map -> "deleted".equals(map.get("type"))).collect(Collectors.toList()); + + + /** + * 多租户查询主表名称(JCL_开放平台接口配置表) + */ + Map ebTablePzInfo = recruitModuleUtils.getEbTableInfo("uf_jcl_employee_information_apptag", "uf_jcl_kfptjkpzb_tag"); + String objPzId = ebTablePzInfo.get("objId"); + String ebTablePzName = ebTablePzInfo.get("table_name"); + log.error("SyncDepartmentChanges.objPzId:{},ebTablePzName:{}", objPzId, ebTablePzName); + + /** + * 获取token系统参数信息查询 + */ + Map apiInfo = getApiInfo(ebTablePzName); + String host = String.valueOf(apiInfo.get("ipdz")); + log.error("SyncDepartmentChanges.apiInfo:{}", apiInfo); + /** + * 循环changedTree,按照时间顺序判断先执行哪个操作,保存新增部门时上级组织存在 + */ + if (CollectionUtils.isNotEmpty(changedTree)) { + for (Map map : changedTree) { + log.error("SyncDepartmentChanges.map:{}", map); + String czlx = null!=map.get("czlx")?String.valueOf(map.get("czlx").toString()):""; + /** + * 根据时间先后顺序,按照操作类型执行对应操作 + */ + if("0".equals(czlx)){ + /** + * 多次调用接口逻辑(新增) + */ + addSysDept(map, apiInfo, host, form_id, layout_id); + }else if("1".equals(czlx)){ + /** + * 删除部门 + */ + String zz = null!=map.get("zz")?String.valueOf(map.get("zz").toString()):""; + Map deleteMap = deleteSysDept(zz, apiInfo, host); + log.error("SyncDepartmentChanges1111.deleteMap:{}", deleteMap); + }else if("2".equals(czlx)){ + /** + * 多次调用接口逻辑(更新) + */ + updateSysDept(map, apiInfo, host, form_id, layout_id); + }else if("3".equals(czlx)){ + /** + * 多次调用接口逻辑(合并) + */ + //1.新增合并后部门:目标部门(新增这些部门) + Map sysDept = addSysDept(map, apiInfo, host, form_id, layout_id); + log.error("SyncDepartmentChanges.sysDept:{}", sysDept); + //2.先将被合并部门下人员(有的话)迁移到目标合并部门下面 + //查询被合并部门下所有人员 + /** + * 查询被合并部门的一级下级部门 + */ + String bhbbmid = null != map.get("bhbbmid") ? String.valueOf(map.get("bhbbmid").toString()) : ""; + String code = null != map.get("bh") ? String.valueOf(map.get("bh").toString()) : ""; + List firstLevelDepts = getFirstLevelDepts(bhbbmid); + log.error("SyncDepartmentChanges.firstLevelDepts:{}", firstLevelDepts); + /** + * 更改下级部门的上级部门为新增部门以及被合并部门下的全部人员 + */ + updateFirstLevelDeptAndEmployee(code, firstLevelDepts, bhbbmid); + //3.删除被合并部门 + /** + * 根据部门code查询部门id222 + */ + String sql = "select id from eteams.department where code in (" + bhbbmid+ ") and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("SyncDepartmentChanges222.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("SyncDepartmentChanges222.recordList:{}", recordList); + String deptids = recordList.stream() + .map(map1 -> map1.get("id")) // 提取 "id" 对应的值 + .filter(Objects::nonNull) // 过滤掉 null 值(可选) + .map(Object::toString) // 转为 String(如果 id 不是 String 类型) + .collect(Collectors.joining(",")); + log.error("SyncDepartmentChanges222.deptids:{}", deptids); + Map deleteMap = deleteSysDept(deptids, apiInfo, host); + log.error("SyncDepartmentChanges222.deleteMap:{}", deleteMap); + }else if("4".equals(czlx)){ + /** + * 多次调用接口逻辑(拆分) + */ + //1.新增拆分后部门 + addSysDept(map, apiInfo, host, form_id, layout_id); + //2.删除被拆分的部门 + String bcfzzid = null != map.get("bcfzzid") ? String.valueOf(map.get("bcfzzid").toString()) : ""; + log.error("SyncDepartmentChanges3333.bcfzzid:{}", bcfzzid); + //3.将code转化为id + /** + * 4.根据部门code查询部门id222 + */ + String sql = "select id from eteams.department where code in (" + bcfzzid+ ") and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("SyncDepartmentChanges3333.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("SyncDepartmentChanges3333.recordList:{}", recordList); + String deptids = recordList.stream() + .map(map1 -> map1.get("id")) // 提取 "id" 对应的值 + .filter(Objects::nonNull) // 过滤掉 null 值(可选) + .map(Object::toString) // 转为 String(如果 id 不是 String 类型) + .collect(Collectors.joining(",")); + log.error("SyncDepartmentChanges3333.deptids:{}", deptids); + Map deleteMap = deleteSysDept(deptids, apiInfo, host); + log.error("SyncDepartmentChanges3333.deleteMap:{}", deleteMap); + } + } + } + return WeaResult.success(result); + } + + /** + * 删除部门 + * @param bhbbmids + * @return + */ + private Map deleteSysDept(String bhbbmids,Map apiInfo,String host){ + /** + * 3.组装数据 + */ + Map result = new HashMap<>(); + JSONArray paramArray = new JSONArray(); + String[] ids = bhbbmids.split(","); + for (String s : ids) { + JSONObject paramJson = new JSONObject(); + //此处应该有多个id + paramJson.put("id", s); + paramArray.add(paramJson); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("datas", paramArray); + log.error("SyncDepartmentChanges222.jsonObject:{}", jsonObject); + try { + String accessToken = syncDataUtils.getToken(apiInfo); + log.error("SyncDepartmentChanges222.accessToken:{}", accessToken); + if (StringUtils.isNotBlank(accessToken)) { + jsonObject.put("access_token", accessToken); + result = syncDataUtils.doPostHttp(jsonObject, deletedPath, host); + log.error("SyncDepartmentChanges222.result:111{}", result); + } else { + result.put("status2", "fail"); + } + log.error("SyncDepartmentChanges222.result:{}", result); + } catch (Exception e) { + result.put("status2", "exception"); + log.error("Exception_em:" + e); + } + return result; + } + + + /** + * 查询被合并部门的一级下级部门 + * @return deptids + */ + public List getFirstLevelDepts(String dept){ + /** + * 根据部门code查询新增部门id + */ + String sql = "select id from eteams.department where code in (" + dept+ ") and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("getFirstLevelDepts111.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getFirstLevelDepts111.recordList:{}", recordList); + String deptid = recordList.stream() + .map(map -> String.valueOf(map.get("id"))) // 提取 "id" 的值并转为 String + .filter(id -> id != null && !id.isEmpty()) // 过滤掉 null 或空值 + .collect(Collectors.joining(", ")); + log.error("getFirstLevelDepts111.deptid:{}", deptid); + List deptids = new ArrayList<>(); + //String depts = splitStr(deptid); + //log.error("getFirstLevelDepts111.depts:{}", depts); + sql = "select id from eteams.department where parent in (" + deptid+ ") and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("getFirstLevelDepts111.sql:{}", sql); + rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> records = databaseUtils.getDataSourceList(rs); + log.error("getFirstLevelDepts111.records:{}", records); + if(CollectionUtils.isNotEmpty(records)){ + deptids = records.stream() + .map(map -> map.get("id").toString()) + .collect(Collectors.toList()); + } + return deptids; + } + + /** + * 更改下级部门的上级部门为新增部门 + * @return + */ + public void updateFirstLevelDeptAndEmployee(String code,List firstLevelDepts,String dept){ + /** + * 根据部门code查询新增部门id + */ + String sql = "select id from eteams.department where code = '"+ code +"' and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("updateFirstLevelDept111.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("updateFirstLevelDept.recordList:{}", recordList); + String deptid = String.valueOf(recordList.get(0).get("id")); + log.error("updateFirstLevelDept111.deptid:{}", deptid); + if(CollectionUtils.isNotEmpty(firstLevelDepts)){ + String departmentids = String.join(",", firstLevelDepts); + log.error("updateFirstLevelDept111.departmentids:{}", departmentids); + /** + * 更新新增部门id为新上级 + */ + String str = "update eteams.department set parent = '"+deptid+"' where id in (" + departmentids + ") and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("updateFirstLevelDept111.str:{}", str); + Map rt = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", str); + List> records = databaseUtils.getDataSourceList(rt); + log.error("updateFirstLevelDept111.records:{}", records); + } + String depts = splitStr(dept); + log.error("updateFirstLevelDept.depts:{}", depts); + /** + * 更新depts部门中的人员为新部门下人员 + */ + String sdf = "update eteams.employee set department = '"+deptid+"' where department in (" + depts + ") and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("updateFirstLevelDept111.sdf:{}", sdf); + Map rw = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sdf); + List> record = databaseUtils.getDataSourceList(rw); + log.error("updateFirstLevelDept111.record:{}", record); + } + /** + * 字符串转化 + */ + private String splitStr(String str){ + // 使用 split 方法将字符串分割为数组 + String[] parts = str.split(","); + // 使用 StringBuilder 构建结果字符串 + StringBuilder result = new StringBuilder(); + for (String part : parts) { + // 在每个部分前后添加单引号 + result.append("'").append(part).append("',"); + } + // 移除最后一个多余的逗号 + if (result.length() > 0) { + result.setLength(result.length() - 1); + } + return result.toString(); + } + /** + * 新增部门 + * @param map + * @return + */ + private Map addSysDept(Map map,Map apiInfo,String host,String form_id,String layout_id){ + Map result = new HashMap<>(); + //for (Map map : addList) { + String bh = null!=map.get("bh")?String.valueOf(map.get("bh").toString()):""; + String zz = null!=map.get("zz")?String.valueOf(map.get("zz").toString()):""; + String sjzz = null!=map.get("sjzz")?String.valueOf(map.get("sjzz").toString()):""; + String sjzzbh = null!=map.get("sjzzbh")?String.valueOf(map.get("sjzzbh").toString()):""; + String bmfzr = null!=map.get("bmfzr")?String.valueOf(map.get("bmfzr").toString()):""; + String fgld = null!=map.get("fgld")?String.valueOf(map.get("fgld").toString()):""; + String sscb = null!=map.get("sscb")?String.valueOf(map.get("sscb").toString()):""; + String bmsqcj = null!=map.get("bmsqcj")?String.valueOf(map.get("bmsqcj").toString()):""; + String bz = null!=map.get("bz")?String.valueOf(map.get("bz").toString()):""; + String zzmc = null!=map.get("zzmc")?String.valueOf(map.get("zzmc").toString()):""; + + /** + * 3.组装数据 + */ + JSONArray paramArray = new JSONArray(); + + JSONObject paramJson = new JSONObject(); + paramJson.put("name",zzmc); + paramJson.put("code", bh); + paramJson.put("parent", sjzzbh); + paramArray.add(paramJson); + + /*** + * 数据规则 + */ + JSONObject dataRule = new JSONObject(); + dataRule.put("employee","id"); + dataRule.put("department","code"); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data",paramArray); + jsonObject.put("dataRule",dataRule); + log.error("addSysDept.jsonObject:{}", jsonObject); + try { + String accessToken = syncDataUtils.getToken(apiInfo); + log.error("addSysDept.accessToken:{}", accessToken); + if(StringUtils.isNotBlank(accessToken)){ + jsonObject.put("access_token",accessToken); + result = syncDataUtils.doPostHttp(jsonObject, path,host); + log.error("addSysDept.result:111{}", result); + /** + * 新增部门成功之后,需要同步插入部门自定义表字段信息 + */ + String tenant_key = RecruitModuleUtils.getCurrentTenantKey(); + log.error("syncDepartment.tenant_key:{}", tenant_key); + String sql = "select id,module from eteams.FORM where (module='hrm' and ownership='company' and delete_type='0' and SORT=2) and TENANT_KEY= '"+tenant_key+"' "; + log.error("addSysDept.FORM:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> personFormList = databaseUtils.getDataSourceList(rs); + log.error("addSysDept.personFormList:{}", personFormList); + Map deptFormMap = personFormList.stream().collect(Collectors.toMap(e->e.get("module").toString(), e->e.get("id").toString())); + log.error("addSysDept.deptFormMap:{}", deptFormMap); + String deptCustomfieldFormid=deptFormMap.get("hrm"); + String tableName = "ft_"+deptCustomfieldFormid; + + //给部门自定义表插入入参信息 + insertDeptCustomField(tableName,bh,bmfzr,fgld,sscb,bmsqcj,form_id,layout_id); + }else{ + result.put("status2","fail"); + } + log.error("addSysDept.result:{}", result); + }catch (Exception e) { + result.put("status2","exception"); + log.error("Exception_em:"+e); + } + //} + return result; + } + + + /** + * 更新部门 + * @param map + * @return + */ + private Map updateSysDept(Map map,Map apiInfo,String host,String form_id,String layout_id){ + Map result = new HashMap<>(); + //for (Map map : updateList) { + String bh = null!=map.get("bh")?String.valueOf(map.get("bh").toString()):""; + String zz = null!=map.get("zz")?String.valueOf(map.get("zz").toString()):""; + String sjzz = null!=map.get("sjzz")?String.valueOf(map.get("sjzz").toString()):""; + String sjzzbh = null!=map.get("sjzzbh")?String.valueOf(map.get("sjzzbh").toString()):""; + String bmfzr = null!=map.get("bmfzr")?String.valueOf(map.get("bmfzr").toString()):""; + String fgld = null!=map.get("fgld")?String.valueOf(map.get("fgld").toString()):""; + String sscb = null!=map.get("sscb")?String.valueOf(map.get("sscb").toString()):""; + String bmsqcj = null!=map.get("bmsqcj")?String.valueOf(map.get("bmsqcj").toString()):""; + String bz = null!=map.get("bz")?String.valueOf(map.get("bz").toString()):""; + String zzmc = null!=map.get("zzmc")?String.valueOf(map.get("zzmc").toString()):""; + + /** + * 3.组装数据 + */ + JSONArray paramArray = new JSONArray(); + + JSONObject paramJson = new JSONObject(); + paramJson.put("name",zzmc); + paramJson.put("code", bh); + paramJson.put("parent", sjzzbh); + paramArray.add(paramJson); + + /*** + * 数据规则 + */ + JSONObject dataRule = new JSONObject(); + dataRule.put("employee","id"); + dataRule.put("department","code"); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data",paramArray); + jsonObject.put("dataRule",dataRule); + log.error("updateSysDept.jsonObject:{}", jsonObject); + try { + String accessToken = syncDataUtils.getToken(apiInfo); + log.error("updateSysDept.accessToken:{}", accessToken); + if (StringUtils.isNotBlank(accessToken)) { + jsonObject.put("access_token", accessToken); + result = syncDataUtils.doPostHttp(jsonObject, path, host); + log.error("updateSysDept.result:111{}", result); + /** + * 新增部门成功之后,需要同步插入部门自定义表字段信息 + */ + String tenant_key = RecruitModuleUtils.getCurrentTenantKey(); + log.error("updateSysDept.tenant_key:{}", tenant_key); + String sql = "select id,module from eteams.FORM where (module='hrm' and ownership='company' and delete_type='0' and SORT=2) and TENANT_KEY= '" + tenant_key + "' "; + log.error("updateSysDept.FORM:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> personFormList = databaseUtils.getDataSourceList(rs); + log.error("updateSysDept.personFormList:{}", personFormList); + Map deptFormMap = personFormList.stream().collect(Collectors.toMap(e -> e.get("module").toString(), e -> e.get("id").toString())); + log.error("updateSysDept.deptFormMap:{}", deptFormMap); + String deptCustomfieldFormid = deptFormMap.get("hrm"); + String tableName = "ft_" + deptCustomfieldFormid; + + //修改部门信息 + String formData = getDeptFormData(bh); + updatatDeptCustomField(tableName, formData, bmfzr, fgld, sscb, bmsqcj); + } else { + result.put("status2", "fail"); + } + log.error("updateSysDept.result:{}", result); + }catch (Exception e) { + result.put("status2","exception"); + log.error("Exception_em:"+e); + } + //} + return result; + } + + public static List>> findDifferences(List> changedTree) { + List>> mapList = new ArrayList<>(); + // 变更后组织数据分类 + Map> addedChanges = changedTree.stream() + .collect(Collectors.toMap(m -> "0".equals(m.get("czlx")), m -> m)); + + Map> deletedChanges = changedTree.stream() + .collect(Collectors.toMap(m -> "1".equals(m.get("czlx")), m -> m)); + + Map> updatedChanges = changedTree.stream() + .collect(Collectors.toMap(m -> "2".equals(m.get("czlx")), m -> m)); + + Map> mergedChanges = changedTree.stream() + .collect(Collectors.toMap(m -> "3".equals(m.get("czlx")), m -> m)); + + Map> splitChanges = changedTree.stream() + .collect(Collectors.toMap(m -> "4".equals(m.get("czlx")), m -> m)); + + mapList.add(addedChanges); + mapList.add(deletedChanges); + mapList.add(updatedChanges); + mapList.add(mergedChanges); + mapList.add(splitChanges); + log.error("findDifferences.mapList:{}", mapList); + + return mapList; + + } + + + public static List> findDifferences111( + List> originalTree, + List> changedTree) { + + // 原组织数据转化 + Map> originalMap = originalTree.stream() + .collect(Collectors.toMap(m -> m.get("bh"), m -> m)); + + // 变更后组织数据转化 + Map> changedMap = changedTree.stream() + .collect(Collectors.toMap(m -> m.get("bh"), m -> m)); + + // 收集所有不同的id(包括新增、删除和修改的) + Set allBhs = new HashSet<>(); + allBhs.addAll(originalMap.keySet()); + allBhs.addAll(changedMap.keySet()); + + // 筛选出有差异的条目 + return allBhs.stream() + .filter(bh -> { + // 情况1: id只存在于其中一个列表中(新增或删除) + if (!originalMap.containsKey(bh) || !changedMap.containsKey(bh)) { + return true; + } + + // 情况2: 比较两个Map的内容是否不同(排除parentId可能为null的情况) + Map original = originalMap.get(bh); + Map changed = changedMap.get(bh); + + return !Objects.equals(original.get("bh"), changed.get("bh")) || + !Objects.equals(original.get("zz"), changed.get("zz")) || + !Objects.equals(original.get("sjzz"), changed.get("sjzz"))|| + !Objects.equals(original.get("bmfzr"), changed.get("bmfzr"))|| + !Objects.equals(original.get("fgld"), changed.get("fgld"))|| + !Objects.equals(original.get("bmsqcj"), changed.get("bmsqcj"))|| + !Objects.equals(original.get("bz"), changed.get("bz"))|| + !Objects.equals(original.get("sscbzx"), changed.get("sscb"))|| + !Objects.equals(original.get("sjzzbh"), changed.get("sjzzbh")); + }) + .map(bh -> { + // 构建差异结果,标记是新增、删除还是修改 + Map result = new HashMap<>(); + result.put("bh", bh); + + boolean inOriginal = originalMap.containsKey(bh); + boolean inChanged = changedMap.containsKey(bh); + + if (inOriginal && inChanged) { + result.put("type", "modified"); + //result.put("original", originalMap.get(bh)); + result.put("changed", changedMap.get(bh)); + } else if (inOriginal) { + result.put("type", "deleted"); + result.put("original", originalMap.get(bh)); + } else { + result.put("type", "added"); + result.put("changed", changedMap.get(bh)); + } + + return result; + }) + .collect(Collectors.toList()); + } + + public static List> getMapsWithKeyZeroStream(List>> list,String key) { + return list.stream() + .flatMap(outerMap -> outerMap.entrySet().stream()) + .filter(entry -> entry.getKey() != null && + (key.equals(entry.getKey().toString()) || + (entry.getKey() instanceof Number && ((Number) entry.getKey()).intValue() == 0))) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + } + + /** + * 写入部门自定义表 + * @return + */ + public void insertDeptCustomField(String tableName,String code,String bmfzr,String fgld,String cbzx,String sqcj,String form_id,String layout_id){ + // 生成随机 ID + long id = IdGenerator.generate(); + log.error("insertDeptCustomField.id:{}", id); + /** + * 根据部门编号查询部门表:formdata + */ + //String formData = getDepartmentFormData(code); + //当前时间 + // 获取当前时间 + LocalDateTime now = LocalDateTime.now(); + // 定义日期时间格式化器 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // 格式化当前日期 + String nowData = now.format(formatter); + log.error("insertDeptCustomField.nowData:{}", nowData); + String tenant_key = RecruitModuleUtils.getCurrentTenantKey(); + log.error("insertDeptCustomField.tenant_key:{}", tenant_key); + User currentUser = UserContext.getCurrentUser(); + log.error("insertDeptCustomField.currentUser:{}", currentUser); + String userId = "1147262704872284161"; + log.error("insertDeptCustomField.userId:{}", userId); + String tableNameNew = "eteams."+tableName; + String sql="insert into "+tableNameNew+"(ID, FORM_DATA_ID, DATA_INDEX, CREATE_TIME, UPDATE_TIME, TENANT_KEY, " + + " IS_DELETE, CREATOR, UPDATER, DELETE_TYPE, FT_STATUS, bmfzr,fgld,cbzx,sqcj)" + + " values('" + id + "','" + id + "','0','"+nowData+"','" + nowData + "','" + tenant_key + "','0'," + + " '"+userId+"','"+userId+"','0','0','" + bmfzr + "','" + fgld + "','" + cbzx + "','" + sqcj + "')"; + log.error("insertDeptCustomField.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("insertDeptCustomField.recordList:{}", recordList); + /** + * 跟新部门主表的formdata字段 + */ + sql="update eteams.department set formdata = '"+id+"' where code = '"+code+"' "; + log.error("updatatDeptCustomField222.sql:{}", sql); + Map rt = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> records = databaseUtils.getDataSourceList(rt); + log.error("insertDeptCustomField.records:{}", records); + /** + * 插入formdata表 + */ + sql="insert into eteams.formdata(id, form_id, layout_id, data_status, tenant_key, operator, create_time, update_time, " + + " module, client, is_delete, creator, delete_type)" + + " values('" + id + "','" + form_id + "','" + layout_id + "','submit','" + tenant_key + "','" +userId + "','" + nowData + "'," + + " '" + nowData + "','hrm','pc','0','" + userId + "','0')"; + log.error("insertFormdata333.sql:{}", sql); + Map rs2 = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> records2 = databaseUtils.getDataSourceList(rs2); + log.error("insertFormdata.records2:{}", records2); + } + + + /** + * 修改部门自定义表 + * @return + */ + public void updatatDeptCustomField(String tableName,String deptFormData,String bmfzr,String fgld,String cbzx,String sqcj){ + String tableNameNew = "eteams."+tableName; + String sql="update "+tableNameNew+" set bmfzr = '"+bmfzr+"',fgld = '"+fgld+"',cbzx='"+cbzx+"',sqcj='"+sqcj+"'" + + " where FORM_DATA_ID = '"+deptFormData+"' "; + log.error("updatatDeptCustomField.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("updatatDeptCustomField.recordList:{}", recordList); + } + + /** + * 根据部门code获取部门formdata + * @return + */ + public String getDepartmentFormData(String code){ + log.error("getDepartmentFormData.code:{}", code); + String sql = "select formdata from eteams.department where code = '"+ code +"' and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("getDepartmentFormData.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getDepartmentFormData.recordList:{}", recordList); + return String.valueOf(recordList.get(0).get("formdata")); + } + + /** + * 根据部门id获取部门code + * @return + */ + public List getDepartmentId(String bh){ + log.error("getDepartmentId.id:{}", bh); + String sql = "select id from eteams.department where code = '"+ bh +"' and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' "; + log.error("getDepartmentId.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getDepartmentId.recordList:{}", recordList); + return recordList.stream().filter(map -> map.containsKey("id")).map(map -> map.get("id").toString()).collect(Collectors.toList()); + } + + /** + * 根据入参查询变更前信息 + * @return + */ + public List> getOriginalTree(String flag,String bgsxrq){ + log.error("getOriginalTree.bgsxrq:{}", bgsxrq); + String sql = ""; + if("0".equals(flag)){ + sql = "select b.* from uf_organization_zzsj b \n" + + "left join uf_organizational_changes a on a.id = b.form_data_id where a.delete_type = 0 and b.delete_type = 0 ORDER BY b.create_time asc "; + }else if("1".equals(flag)){ + sql = "select b.* from uf_organization_bghzzsj b \n" + + "left join uf_organizational_changes a on a.id = b.form_data_id where a.delete_type = 0 and b.delete_type = 0 ORDER BY b.create_time asc "; + } + if(StringUtils.isNotBlank(bgsxrq)){ + sql += " and a.bgsxrq = '"+bgsxrq+"' "; + } + log.error("getOriginalTree.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getOriginalTree.recordList:{}", recordList); + return recordList; + } + + /** + * 根据接口标识查询开放平台接口参数 + * @return + */ + public Map getApiInfo(String ebTablePzName){ + Map map = new HashMap<>(); + String sql = "select id,ipdz,jkbs,app_key,app_sec,corpid from "+ebTablePzName+" where DELETE_TYPE=0 and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' and jkbs ='syncDepartment' "; + log.error("getApiInfo.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getApiInfo.recordList:{}", recordList); + if(CollectionUtils.isNotEmpty(recordList)){ + map = recordList.get(0); + } + return map; + } + + /** + * 根据部门code查询部门自定义表form_data_id + * @param code + * @return formdata + */ + public String getDeptFormData(String code) { + String formdata = ""; + String sql = "SELECT formdata FROM eteams.department WHERE code = '" + code + "' "; + log.error("getDeptFormData.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getDeptFormData.recordList:{}", recordList); + if(CollectionUtils.isNotEmpty(recordList)){ + Object formdataValue = recordList.get(0).get("formdata"); + if (formdataValue instanceof Long) { + formdata = String.valueOf(formdataValue); // 转换为 String + } else if (formdataValue instanceof String) { + formdata = (String) formdataValue; // 如果是 String 类型,直接赋值 + }else { + formdata = String.valueOf(formdataValue); + } + } + return formdata; + } + +}