From 1fa7416905a84e037e2a2e2f11c46f28561698e0 Mon Sep 17 00:00:00 2001 From: chenbowen Date: Thu, 18 Dec 2025 14:18:56 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E7=BB=9F=E4=B8=80=20iwork=20=E7=9A=84?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=BB=84=E7=BB=87=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/dept/DeptServiceImpl.java | 21 +++++++++++++++++++ .../service/dept/DeptServiceImplTest.java | 5 +++++ .../src/test/resources/sql/create_tables.sql | 7 +++---- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/dept/DeptServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/dept/DeptServiceImpl.java index fe9d98d6..03cadf43 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/dept/DeptServiceImpl.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/dept/DeptServiceImpl.java @@ -16,6 +16,7 @@ import com.zt.plat.module.system.dal.dataobject.dept.DeptDO; import com.zt.plat.module.system.dal.dataobject.userdept.UserDeptDO; import com.zt.plat.module.system.dal.mysql.dept.DeptMapper; import com.zt.plat.module.system.dal.mysql.userdept.UserDeptMapper; +import com.zt.plat.module.system.service.dept.DeptExternalCodeService; import com.zt.plat.module.system.dal.redis.RedisKeyConstants; import com.zt.plat.module.system.enums.dept.DeptSourceEnum; import com.zt.plat.module.system.service.permission.PermissionService; @@ -56,6 +57,8 @@ public class DeptServiceImpl implements DeptService { private PermissionService permissionService; @Resource private com.zt.plat.module.system.mq.producer.databus.DatabusChangeProducer databusChangeProducer; + @Resource + private DeptExternalCodeService deptExternalCodeService; private static final String ROOT_CODE_PREFIX = "ZT"; private static final String EXTERNAL_CODE_PREFIX = "CU"; @@ -101,12 +104,24 @@ public class DeptServiceImpl implements DeptService { } deptMapper.insert(dept); + // 外部编码映射 + upsertExternalMappingIfPresent(dept.getId(), createReqVO); + // 发布部门创建事件 databusChangeProducer.sendDeptCreatedMessage(dept); return dept.getId(); } + private void upsertExternalMappingIfPresent(Long deptId, DeptSaveReqVO reqVO) { + String systemCode = StrUtil.trimToNull(reqVO.getExternalSystemCode()); + String externalCode = StrUtil.trimToNull(reqVO.getExternalDeptCode()); + if (StrUtil.hasEmpty(systemCode, externalCode) || deptId == null) { + return; + } + String externalName = StrUtil.trimToNull(reqVO.getExternalDeptName()); + deptExternalCodeService.saveOrUpdateDeptExternalCode(deptId, systemCode, externalCode, externalName, reqVO.getStatus()); + } @Override @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST, allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存 @@ -141,6 +156,9 @@ public class DeptServiceImpl implements DeptService { DeptDO updateObj = BeanUtils.toBean(updateReqVO, DeptDO.class); deptMapper.updateById(updateObj); + // 外部编码映射 + upsertExternalMappingIfPresent(updateObj.getId(), updateReqVO); + // 发布部门更新事件(重新查询获取完整数据) DeptDO updatedDept = deptMapper.selectById(updateObj.getId()); if (updatedDept != null) { @@ -164,6 +182,9 @@ public class DeptServiceImpl implements DeptService { DeptDO dept = deptMapper.selectById(id); Long tenantId = (dept != null) ? dept.getTenantId() : null; + // 级联删除外部编码映射 + deptExternalCodeService.deleteDeptExternalCodesByDeptId(id); + // 删除部门 deptMapper.deleteById(id); diff --git a/zt-module-system/zt-module-system-server/src/test/java/com/zt/plat/module/system/service/dept/DeptServiceImplTest.java b/zt-module-system/zt-module-system-server/src/test/java/com/zt/plat/module/system/service/dept/DeptServiceImplTest.java index d9e4089f..c136262d 100644 --- a/zt-module-system/zt-module-system-server/src/test/java/com/zt/plat/module/system/service/dept/DeptServiceImplTest.java +++ b/zt-module-system/zt-module-system-server/src/test/java/com/zt/plat/module/system/service/dept/DeptServiceImplTest.java @@ -12,9 +12,11 @@ import com.zt.plat.module.system.dal.mysql.dept.DeptExternalCodeMapper; import com.zt.plat.module.system.dal.mysql.dept.DeptMapper; import com.zt.plat.module.system.dal.redis.RedisKeyConstants; import com.zt.plat.module.system.enums.dept.DeptSourceEnum; +import com.zt.plat.module.system.service.permission.PermissionService; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; @@ -51,6 +53,9 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Resource private CacheManager cacheManager; + @MockBean + private PermissionService permissionService; + @TestConfiguration @EnableCaching static class CacheConfig { diff --git a/zt-module-system/zt-module-system-server/src/test/resources/sql/create_tables.sql b/zt-module-system/zt-module-system-server/src/test/resources/sql/create_tables.sql index fd2321a0..462a52e8 100644 --- a/zt-module-system/zt-module-system-server/src/test/resources/sql/create_tables.sql +++ b/zt-module-system/zt-module-system-server/src/test/resources/sql/create_tables.sql @@ -12,7 +12,7 @@ create table IF NOT EXISTS system_user_dept ( ); CREATE TABLE IF NOT EXISTS "system_dept" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(64) NOT NULL DEFAULT '', + "code" varchar(64) DEFAULT NULL, "name" varchar(30) NOT NULL DEFAULT '', "short_name" varchar(30) DEFAULT '', "parent_id" bigint NOT NULL DEFAULT '0', @@ -51,9 +51,8 @@ CREATE TABLE IF NOT EXISTS "system_dept_external_code" ( PRIMARY KEY ("id") ) COMMENT '部门外部组织编码映射'; -CREATE UNIQUE INDEX IF NOT EXISTS "uk_system_dept_external_code_ext" ON "system_dept_external_code" ("tenant_id", "system_code", "external_dept_code"); -CREATE UNIQUE INDEX IF NOT EXISTS "uk_system_dept_external_code_dept" ON "system_dept_external_code" ("tenant_id", "system_code", "dept_id"); -CREATE INDEX IF NOT EXISTS "idx_system_dept_external_code_dept" ON "system_dept_external_code" ("tenant_id", "dept_id"); +CREATE INDEX IF NOT EXISTS "idx_system_dept_external_code_ext" ON "system_dept_external_code" ("tenant_id", "system_code", "external_dept_code"); +CREATE INDEX IF NOT EXISTS "idx_system_dept_external_code_dept" ON "system_dept_external_code" ("tenant_id", "system_code", "dept_id"); CREATE TABLE IF NOT EXISTS "system_dict_data" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,