diff --git a/sql/dm/扩充用户表部门表名称字段,匹配e办数据.sql b/sql/dm/扩充用户表部门表名称字段,匹配e办数据.sql new file mode 100644 index 00000000..d1f70f3a --- /dev/null +++ b/sql/dm/扩充用户表部门表名称字段,匹配e办数据.sql @@ -0,0 +1,9 @@ +-- 修改部门表名称字段长度为 250 +ALTER TABLE SYSTEM_DEPT + MODIFY NAME VARCHAR(250) DEFAULT ''; + +-- 修改用户表昵称字段长度为 100 +ALTER TABLE SYSTEM_USERS + MODIFY NICKNAME VARCHAR(100) NOT NULL; +ALTER TABLE SYSTEM_USERS + MODIFY USERNAME VARCHAR(100) NOT NULL; \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index a53f2de7..24bd9590 100644 --- a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -80,9 +80,9 @@ public class CodegenEngine { .put(javaTemplatePath("dal/do_sub"), // 特殊:主子表专属逻辑 javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${subTable.className}DO")) .put(javaTemplatePath("dal/mapper"), - javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper")) + javaModuleImplMainFilePath("dal/dao/${table.businessName}/${table.className}Mapper")) .put(javaTemplatePath("dal/mapper_sub"), // 特殊:主子表专属逻辑 - javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${subTable.className}Mapper")) + javaModuleImplMainFilePath("dal/dao/${table.businessName}/${subTable.className}Mapper")) .put(javaTemplatePath("dal/mapper.xml"), mapperXmlFilePath()) .put(javaTemplatePath("service/serviceImpl"), javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl")) diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index abe18bdc..0138fc1d 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -61,6 +61,8 @@ public interface ErrorCodeConstants { ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1_002_004_006, "部门({})不处于开启状态,不允许选择"); ErrorCode DEPT_PARENT_IS_CHILD = new ErrorCode(1_002_004_007, "不能设置自己的子部门为父部门"); ErrorCode DEPT_TENANT_RELATION_EXISTS = new ErrorCode(1_002_004_008, "当前租户已经关联组织机构"); + ErrorCode DEPT_CODE_NOT_NULL = new ErrorCode(1_002_004_009, "部门编码不能为空"); + ErrorCode DEPT_CODE_DUPLICATE = new ErrorCode(1_002_004_010, "已经存在该编码的部门"); // ========== 岗位模块 1-002-005-000 ========== diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java index 0ade83b1..9067f359 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqV import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.service.dept.DeptService; -import jakarta.annotation.Resource; +import org.springframework.context.annotation.Bean; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java index da376c2d..7da517bd 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptRespVO.java @@ -15,9 +15,15 @@ public class DeptRespVO { @Schema(description = "部门编号", example = "1024") private Long id; + @Schema(description = "部门编码", example = "DEPT_001") + private String code; + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") private String name; + @Schema(description = "部门简称", example = "芋道科技") + private String shortName; + @Schema(description = "父部门 ID", example = "1024") private Long parentId; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java index 97b4ea36..3f9f0f46 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java @@ -19,11 +19,20 @@ public class DeptSaveReqVO { @Schema(description = "部门编号", example = "1024") private Long id; + @Schema(description = "部门编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "DEPT_001") + @NotBlank(message = "部门编码不能为空") + @Size(max = 50, message = "部门编码长度不能超过 50 个字符") + private String code; + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") @NotBlank(message = "部门名称不能为空") @Size(max = 30, message = "部门名称长度不能超过 30 个字符") private String name; + @Schema(description = "部门简称", example = "科技") + @Size(max = 20, message = "部门简称长度不能超过 20 个字符") + private String shortName; + @Schema(description = "父部门 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024(顶级部门父级 Id 为 0)") private Long parentId; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java index 8b5f9a18..30f4d6f2 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java @@ -17,6 +17,9 @@ public class DeptSimpleRespVO { @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long id; + @Schema(description = "部门编码", example = "DEPT_001") + private String code; + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") private String name; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java index c82026fa..389413ae 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java @@ -30,11 +30,19 @@ public class DeptDO extends TenantBaseDO { */ @TableId(type = IdType.ASSIGN_ID) private Long id; + /** + * 部门编码 + */ + private String code; /** * 部门名称 */ @NotEmpty private String name; + /** + * 部门简称 + */ + private String shortName; /** * 父部门ID * diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java index b30459f3..2bbcbf76 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java @@ -88,4 +88,14 @@ public interface DeptMapper extends BaseMapperX { ); } + /** + * 根据部门编码查询部门 + * + * @param code 部门编码 + * @return 部门信息 + */ + default DeptDO selectByCode(String code) { + return selectOne(DeptDO::getCode, code); + } + } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index 78f31449..078e1727 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.service.dept; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CompanyDeptInfo; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -31,6 +32,8 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +import cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum; + /** * 部门 Service 实现类 * @@ -59,6 +62,8 @@ public class DeptServiceImpl implements DeptService { validateParentDept(null, createReqVO.getParentId()); // 校验部门名的唯一性 validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName()); + // 校验部门编码的唯一性 + validateDeptCodeUnique(null, createReqVO.getCode()); // 插入部门 DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class); @@ -165,6 +170,24 @@ public class DeptServiceImpl implements DeptService { } } + @VisibleForTesting + void validateDeptCodeUnique(Long id, String code) { + if (StrUtil.isBlank(code)) { + throw exception(DEPT_CODE_NOT_NULL); + } + DeptDO dept = deptMapper.selectByCode(code); + if (dept == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的部门 + if (id == null) { + throw exception(DEPT_CODE_DUPLICATE); + } + if (ObjectUtil.notEqual(dept.getId(), id)) { + throw exception(DEPT_CODE_DUPLICATE); + } + } + @Override public DeptDO getDept(Long id) { return deptMapper.selectById(id); diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java index fa69be23..08368ab5 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; import cn.iocoder.yudao.module.system.util.sync.SyncVerifyUtil; +import cn.iocoder.yudao.module.system.enums.user.UserSourceEnum; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 86b9ad04..3123d8b7 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -29,6 +29,7 @@ import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; +import cn.iocoder.yudao.module.system.enums.user.UserSourceEnum; import com.google.common.annotations.VisibleForTesting; import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; diff --git a/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImplTest.java b/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImplTest.java index c1942f76..19e2ae0b 100644 --- a/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImplTest.java @@ -82,7 +82,6 @@ public class UserSyncServiceImplTest extends BaseMockitoUnitTest { // Arrange UserDeleteRequestVO requestVO = randomPojo(UserDeleteRequestVO.class); AdminUserDO existingUser = randomPojo(AdminUserDO.class); - when(adminUserService.getUserByUsername(requestVO.getBimRemoteUser())).thenReturn(existingUser); // Act UserDeleteResponseVO response = userSyncService.deleteUser(requestVO); diff --git a/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/controller/admin/contract/DemoContractController.java b/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/controller/admin/contract/DemoContractController.java index 5e9e5cc6..30516eb1 100644 --- a/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/controller/admin/contract/DemoContractController.java +++ b/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/controller/admin/contract/DemoContractController.java @@ -12,12 +12,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.infra.api.businessfile.BusinessFileApi; import cn.iocoder.yudao.module.infra.api.businessfile.dto.BusinessFilePageReqDTO; -import cn.iocoder.yudao.module.infra.api.businessfile.dto.BusinessFileWithUrlRespDTO; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.CompanyDeptInfoRespDTO; import cn.iocoder.yudao.module.template.controller.admin.contract.vo.DemoContractPageReqVO; import cn.iocoder.yudao.module.template.controller.admin.contract.vo.DemoContractRespVO; import cn.iocoder.yudao.module.template.controller.admin.contract.vo.DemoContractSaveReqVO; import cn.iocoder.yudao.module.template.dal.dataobject.contract.DemoContractDO; import cn.iocoder.yudao.module.template.service.contract.DemoContractService; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -30,9 +32,11 @@ import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.List; +import java.util.Set; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 合同") @RestController @@ -54,6 +58,9 @@ public class DemoContractController extends AbstractFileUploadController impleme @Resource private BusinessFileApi businessFileApi; + @Resource + private DeptApi deptApi; + @PostMapping("/create") @Operation(summary = "创建合同") @PreAuthorize("@ss.hasPermission('template:demo-contract:create')") @@ -101,8 +108,9 @@ public class DemoContractController extends AbstractFileUploadController impleme @PreAuthorize("@ss.hasPermission('template:demo-contract:query')") public CommonResult> getDemoContractPage(@Valid DemoContractPageReqVO pageReqVO) { BusinessFilePageReqDTO pageReqDTO = new BusinessFilePageReqDTO(); - pageReqDTO.setBusinessCode("22323"); - CommonResult> businessFilePageWithUrl = businessFileApi.getBusinessFilePageWithUrl(pageReqDTO); + CommonResult> companyDeptInfoListByUserId = deptApi.getCompanyDeptInfoListByUserId(getLoginUserId()); + Long id = IdWorker.getId(); + System.out.println("Generated ID: " + id); PageResult pageResult = demoContractService.getDemoContractPage(pageReqVO); return success(BeanUtils.toBean(pageResult, DemoContractRespVO.class)); } diff --git a/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/framework/rpc/config/RpcConfiguration.java b/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 00000000..9bf7b2f5 --- /dev/null +++ b/yudao-module-template/yudao-module-template-server/src/main/java/cn/iocoder/yudao/module/template/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.template.framework.rpc.config; + +import cn.iocoder.yudao.module.infra.api.config.ConfigApi; +import cn.iocoder.yudao.module.infra.api.file.FileApi; +import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(value = "templateRpcConfiguration", proxyBeanMethods = false) +@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, ConfigApi.class, DeptApi.class}) +public class RpcConfiguration { +}