组织变更新版

This commit is contained in:
Administrator 2025-08-06 17:50:56 +08:00
parent cc6f21487c
commit 74aa8a4eb9
2 changed files with 801 additions and 40 deletions

View File

@ -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<String> 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<String, Object> 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<String, Object> 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);

View File

@ -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<Map<String, Object>> execute(Map<String, Object> params) {
Map<String, Object> 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<Map<String, Object>> originalTree = getOriginalTree("0", bgsxrq);
List<Map<String, Object>> changedTree = getOriginalTree("1", bgsxrq);
log.error("SyncDepartmentChanges.changedTree:{}", changedTree);
// 比对并获取差异
//List<Map<Object, Map<String, Object>>> differences = findDifferences(changedTree);
// /**
// * 需新增的部门
// */
// List<Map<String, Object>> addedChanges = differences.stream().filter(map -> "added".equals(map.get("type"))).collect(Collectors.toList());
//
// /**
// * 需修改的部门
// */
// List<Map<String, Object>> modifiedChanges = differences.stream().filter(map -> "modified".equals(map.get("type"))).collect(Collectors.toList());
//
// /**
// * 需删除的部门
// */
// List<Map<String, Object>> deletedChanges = differences.stream().filter(map -> "deleted".equals(map.get("type"))).collect(Collectors.toList());
/**
* 多租户查询主表名称JCL_开放平台接口配置表
*/
Map<String, String> 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<String, Object> apiInfo = getApiInfo(ebTablePzName);
String host = String.valueOf(apiInfo.get("ipdz"));
log.error("SyncDepartmentChanges.apiInfo:{}", apiInfo);
/**
* 循环changedTree按照时间顺序判断先执行哪个操作保存新增部门时上级组织存在
*/
if (CollectionUtils.isNotEmpty(changedTree)) {
for (Map<String, Object> 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<String, Object> 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<String, Object> 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<String> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> deleteMap = deleteSysDept(deptids, apiInfo, host);
log.error("SyncDepartmentChanges3333.deleteMap:{}", deleteMap);
}
}
}
return WeaResult.success(result);
}
/**
* 删除部门
* @param bhbbmids
* @return
*/
private Map<String, Object> deleteSysDept(String bhbbmids,Map<String, Object> apiInfo,String host){
/**
* 3.组装数据
*/
Map<String, Object> 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<String> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String> 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<Map<String, Object>> 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<String> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> rt = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", str);
List<Map<String, Object>> 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<String, Object> rw = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sdf);
List<Map<String, Object>> 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<String, Object> addSysDept(Map<String, Object> map,Map<String, Object> apiInfo,String host,String form_id,String layout_id){
Map<String, Object> result = new HashMap<>();
//for (Map<String, Object> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> personFormList = databaseUtils.getDataSourceList(rs);
log.error("addSysDept.personFormList:{}", personFormList);
Map<String,String> 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<String, Object> updateSysDept(Map<String, Object> map,Map<String, Object> apiInfo,String host,String form_id,String layout_id){
Map<String, Object> result = new HashMap<>();
//for (Map<String, Object> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> personFormList = databaseUtils.getDataSourceList(rs);
log.error("updateSysDept.personFormList:{}", personFormList);
Map<String, String> 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<Map<Object, Map<String, Object>>> findDifferences(List<Map<String, Object>> changedTree) {
List<Map<Object, Map<String, Object>>> mapList = new ArrayList<>();
// 变更后组织数据分类
Map<Object, Map<String, Object>> addedChanges = changedTree.stream()
.collect(Collectors.toMap(m -> "0".equals(m.get("czlx")), m -> m));
Map<Object, Map<String, Object>> deletedChanges = changedTree.stream()
.collect(Collectors.toMap(m -> "1".equals(m.get("czlx")), m -> m));
Map<Object, Map<String, Object>> updatedChanges = changedTree.stream()
.collect(Collectors.toMap(m -> "2".equals(m.get("czlx")), m -> m));
Map<Object, Map<String, Object>> mergedChanges = changedTree.stream()
.collect(Collectors.toMap(m -> "3".equals(m.get("czlx")), m -> m));
Map<Object, Map<String, Object>> 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<Map<String, Object>> findDifferences111(
List<Map<String, Object>> originalTree,
List<Map<String, Object>> changedTree) {
// 原组织数据转化
Map<Object, Map<String, Object>> originalMap = originalTree.stream()
.collect(Collectors.toMap(m -> m.get("bh"), m -> m));
// 变更后组织数据转化
Map<Object, Map<String, Object>> changedMap = changedTree.stream()
.collect(Collectors.toMap(m -> m.get("bh"), m -> m));
// 收集所有不同的id包括新增删除和修改的
Set<Object> 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<String, Object> original = originalMap.get(bh);
Map<String, Object> 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<String, Object> 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<Map<String, Object>> getMapsWithKeyZeroStream(List<Map<Object, Map<String, Object>>> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> rt = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> rs2 = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> recordList = databaseUtils.getDataSourceList(rs);
log.error("getDepartmentFormData.recordList:{}", recordList);
return String.valueOf(recordList.get(0).get("formdata"));
}
/**
* 根据部门id获取部门code
* @return
*/
public List<String> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<Map<String, Object>> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> recordList = databaseUtils.getDataSourceList(rs);
log.error("getOriginalTree.recordList:{}", recordList);
return recordList;
}
/**
* 根据接口标识查询开放平台接口参数
* @return
*/
public Map<String, Object> getApiInfo(String ebTablePzName){
Map<String, Object> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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<String, Object> rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql);
List<Map<String, Object>> 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;
}
}