From 2087a18137d58fc5a83496640655ef451c293014 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 25 May 2026 14:53:02 +0800 Subject: [PATCH] commit --- dependency-reduced-pom.xml | 2 +- .../sys/controller/SysUnionController.java | 36 ++++++ .../com/budwk/app/sys/models/Sys_user.java | 4 +- .../impl/SysDataUserPullServiceImpl.java | 116 +++++++++++++++++- .../sys/union/branchUnionUserManage.js | 23 +++- .../sys/union/schoolUnionUserManage.js | 23 +++- 6 files changed, 190 insertions(+), 14 deletions(-) diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index dbfb801e..0984c769 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.budwk - zhgh_hdc + mini 5.6.0-plus diff --git a/src/main/java/com/budwk/app/sys/controller/SysUnionController.java b/src/main/java/com/budwk/app/sys/controller/SysUnionController.java index 066ea8c9..1928b45a 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysUnionController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysUnionController.java @@ -48,6 +48,7 @@ import javax.validation.Valid; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; @IocBean @@ -215,6 +216,41 @@ public class SysUnionController { return Result.success(list); } + @At + @SaCheckPermission("sys.manager.union") + @ApiModelProperty("校工会人员角色选项") + public Result schoolUnionRoleOptions() { + return Result.success(roleOptionsByDictCode("SCHOOL_UNION_ROLES")); + } + + @At + @SaCheckPermission("sys.manager.union") + @ApiModelProperty("分工会人员角色选项") + public Result branchUnionRoleOptions() { + return Result.success(roleOptionsByDictCode("BRANCH_UNION_ROLES")); + } + + /** + * 根据角色字典获取下拉选项,只保留系统角色表中存在的角色编码。 + */ + private List roleOptionsByDictCode(String dictCode) { + List dictRoles = sysDictService.getSubListByCode(dictCode); + if (Lang.isEmpty(dictRoles)) { + return new ArrayList<>(); + } + List roleCodes = dictRoles.stream().map(Sys_dict::getCode).filter(StrUtil::isNotBlank).toList(); + if (Lang.isEmpty(roleCodes)) { + return new ArrayList<>(); + } + Set existRoleCodes = sysRoleService.query(Cnd.where(Sys_role::getCode, "in", roleCodes)) + .stream() + .map(Sys_role::getCode) + .collect(Collectors.toSet()); + return dictRoles.stream() + .filter(dict -> existRoleCodes.contains(dict.getCode())) + .toList(); + } + @At @SaCheckPermission("sys.manager.union.schoolOfficer") @ApiModelProperty("添加校工会人员角色") diff --git a/src/main/java/com/budwk/app/sys/models/Sys_user.java b/src/main/java/com/budwk/app/sys/models/Sys_user.java index 55b4203c..870c2045 100644 --- a/src/main/java/com/budwk/app/sys/models/Sys_user.java +++ b/src/main/java/com/budwk/app/sys/models/Sys_user.java @@ -137,13 +137,13 @@ public class Sys_user extends BaseModel implements Serializable { @Column @Comment("职称") @ColDefine(type = ColType.VARCHAR, width = 50) - @DataCenterColumn(name = "职称", key = "DQZC", dict = "USER_PROFESSIONAL_TITLE") + @DataCenterColumn(name = "职称", key = "zyjszwrzzgjb", dict = "USER_PROFESSIONAL_TITLE") private String professionalTitle; @Column @Comment("职级") @ColDefine(type = ColType.VARCHAR, width = 50) - @DataCenterColumn(name = "取得职称等级码", key = "QDZCDJM", dict = "USER_PROFESSIONAL_LEVEL") + @DataCenterColumn(name = "取得职称等级码", key = "xzzwrzjb", dict = "USER_PROFESSIONAL_LEVEL") private String professionalLevel; @Column diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java index f50437e8..8361e895 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java @@ -27,6 +27,7 @@ import com.budwk.app.sys.utils.DataCenterUtil; import lombok.extern.slf4j.Slf4j; import org.nutz.aop.interceptor.async.Async; import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; @@ -107,10 +108,6 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl @Aop(TransAop.READ_COMMITTED) public Date pull() { try { - // 获取数据中心的字典 - List dataDictList = dao().query(Sys_data_dict.class, Cnd.NEW()); - Map> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode)); - // 请求人员数据 HttpRequest httpRequest = HttpUtil.createGet("http://211.82.200.130:10003/api/139/1/5000"); @@ -134,6 +131,13 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl log.warn("当前未获取到数据"); } + // 根据本次拉取的人员字段原始值同步信息中心字典和系统业务字典 + syncUserPullDict(rawDataList); + + // 获取同步后的数据中心字典,用于本次人员字段映射 + List dataDictList = dao().query(Sys_data_dict.class, Cnd.NEW()); + Map> dataDictMap = dataDictList.stream().collect(Collectors.groupingBy(Sys_data_dict::getParentCode)); + Date nowDate = new Date(); List latestSourceList = rawDataList.stream().map(raw -> { @@ -152,7 +156,12 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl String finalValue = value; Sys_data_dict sysDataDict = dictList.stream() .filter(v -> finalValue != null && finalValue.equals(v.getCode())).findFirst().orElse(new Sys_data_dict()); - mapping.field.set(sysUser, sysDataDict.getName()); + if (StrUtil.isNotBlank(sysDataDict.getName())) { + mapping.field.set(sysUser, sysDataDict.getName()); + } else { + mapping.field.set(sysUser, value); + log.warn("未找到字典编码:{},字段:{},使用原始值:{}", mapping.dict, mapping.key, value); + } } else { // 如果找不到对应的字典,直接使用原始值 mapping.field.set(sysUser, value); @@ -253,6 +262,103 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl } } + /** + * 根据本次人员拉取结果同步字典,字典编码和值都采用信息中心返回的原始字段值。 + */ + private void syncUserPullDict(List rawDataList) { + Map> dictValueMap = new LinkedHashMap<>(); + for (FieldMapping mapping : getFieldMappings()) { + if (StrUtil.isBlank(mapping.dict)) { + continue; + } + LinkedHashSet values = dictValueMap.computeIfAbsent(mapping.dict, key -> new LinkedHashSet<>()); + for (JSONObject raw : rawDataList) { + String value = raw.getStr(mapping.key); + if (StrUtil.isNotBlank(value)) { + values.add(value.trim()); + } + } + } + + for (Map.Entry> entry : dictValueMap.entrySet()) { + syncDataDict(entry.getKey(), entry.getValue()); + syncSystemDict(entry.getKey(), entry.getValue()); + } + sysDictService.clearCache(); + } + + /** + * 同步 sys_data_dict,拉取值不存在时删除旧字典内容。 + */ + private void syncDataDict(String parentCode, Set values) { + Set sourceValues = new LinkedHashSet<>(values); + List existingDicts = dao().query(Sys_data_dict.class, Cnd.where(Sys_data_dict::getParentCode, "=", parentCode)); + + if (sourceValues.isEmpty()) { + dao().clear(Sys_data_dict.class, Cnd.where(Sys_data_dict::getParentCode, "=", parentCode)); + return; + } + + dao().clear(Sys_data_dict.class, Cnd.where(Sys_data_dict::getParentCode, "=", parentCode).and(Sys_data_dict::getCode, "not in", sourceValues)); + + Set existingCodes = existingDicts.stream() + .map(Sys_data_dict::getCode) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + for (String value : sourceValues) { + if (existingCodes.contains(value)) { + dao().update(Sys_data_dict.class, + Chain.make("name", value), + Cnd.where(Sys_data_dict::getParentCode, "=", parentCode).and(Sys_data_dict::getCode, "=", value)); + } else { + Sys_data_dict dict = new Sys_data_dict(); + dict.setParentCode(parentCode); + dict.setCode(value); + dict.setName(value); + dao().insert(dict); + } + } + } + + /** + * 同步 sys_dict 子级字典,子级 code 和 name 均采用拉取值。 + */ + private void syncSystemDict(String parentCode, Set values) { + Sys_dict parentDict = dao().fetch(Sys_dict.class, Cnd.where(Sys_dict::getCode, "=", parentCode)); + if (parentDict == null) { + log.warn("系统字典父编码不存在:{},跳过 sys_dict 同步", parentCode); + return; + } + + Set sourceValues = new LinkedHashSet<>(values); + List existingDicts = dao().query(Sys_dict.class, Cnd.where(Sys_dict::getParentId, "=", parentDict.getId())); + + for (Sys_dict existingDict : existingDicts) { + if (!sourceValues.contains(existingDict.getCode())) { + sysDictService.deleteAndChild(existingDict); + } + } + + Set existingCodes = existingDicts.stream() + .map(Sys_dict::getCode) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + for (String value : sourceValues) { + if (existingCodes.contains(value)) { + dao().update(Sys_dict.class, + Chain.make("name", value).add("code", value).add("disabled", false), + Cnd.where(Sys_dict::getParentId, "=", parentDict.getId()).and(Sys_dict::getCode, "=", value)); + } else { + Sys_dict dict = new Sys_dict(); + dict.setCode(value); + dict.setName(value); + dict.setDisabled(false); + dict.setHasChildren(false); + sysDictService.save(dict, parentDict.getId()); + } + } + } + @Async private void updateDict(List userSources) { //判断是否要更新在职状态字典 diff --git a/src/main/resources/views/platform/sys/union/branchUnionUserManage.js b/src/main/resources/views/platform/sys/union/branchUnionUserManage.js index eb7feb00..3938ccb9 100644 --- a/src/main/resources/views/platform/sys/union/branchUnionUserManage.js +++ b/src/main/resources/views/platform/sys/union/branchUnionUserManage.js @@ -45,7 +45,14 @@ const branchUnionUserManage = { - + + + { - this.formData = {} + this.$set(this, "formData", {}) + }) + }, + loadRoleOptions() { + this.$axios.post("/platform/sys/union/branchUnionRoleOptions").then((res) => { + if (res.code === 0) { + this.$set(this, "roleOptions", res.data || []) + } }) }, doSubmit() { @@ -140,6 +156,7 @@ const branchUnionUserManage = { } }, created() { + this.loadRoleOptions() this.pageData() }, style: /*language=CSS*/ ` diff --git a/src/main/resources/views/platform/sys/union/schoolUnionUserManage.js b/src/main/resources/views/platform/sys/union/schoolUnionUserManage.js index c8e05d1f..ee13123f 100644 --- a/src/main/resources/views/platform/sys/union/schoolUnionUserManage.js +++ b/src/main/resources/views/platform/sys/union/schoolUnionUserManage.js @@ -42,7 +42,14 @@ const schoolUnionUserManage = { - + + + @@ -63,14 +70,23 @@ const schoolUnionUserManage = { searchName: "username" }, dialogFormVisible: false, - formData: {} + formData: {}, + roleOptions: [] } }, methods: { openAdd() { this.dialogFormVisible = true + this.loadRoleOptions() this.$nextTick(() => { - this.formData = {} + this.$set(this, "formData", {}) + }) + }, + loadRoleOptions() { + $.get("/platform/sys/union/schoolUnionRoleOptions").then((res) => { + if (res.code === 0) { + this.$set(this, "roleOptions", res.data || []) + } }) }, doSubmit() { @@ -105,6 +121,7 @@ const schoolUnionUserManage = { } }, created() { + this.loadRoleOptions() this.pageData() } }