diff --git a/1-sql/2026-01-08/simulation_role_permission.sql b/1-sql/2026-01-08/simulation_role_permission.sql new file mode 100644 index 00000000..6fb679d4 --- /dev/null +++ b/1-sql/2026-01-08/simulation_role_permission.sql @@ -0,0 +1,9 @@ +CREATE TABLE `simulation_role_permission` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `roleId` bigint NOT NULL COMMENT '角色id(对应CID)', + `permissionCode` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单权限编码', + `tenantId` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', + `creator` bigint NOT NULL DEFAULT '0' COMMENT '模版创建者ID', + `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '模版创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单权限表'; \ No newline at end of file diff --git a/1-sql/2026-01-08/system_form_configure.sql b/1-sql/2026-01-08/system_form_configure.sql new file mode 100644 index 00000000..c85a37eb --- /dev/null +++ b/1-sql/2026-01-08/system_form_configure.sql @@ -0,0 +1 @@ +ALTER TABLE spdm_baseline.system_form_configure MODIFY COLUMN comment mediumtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '描述信息'; diff --git a/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java b/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java index 92888019..efb715ca 100644 --- a/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java +++ b/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java @@ -74,13 +74,15 @@ public class SimulationReportTemplateServiceImpl extends ServiceImpl response = dataFeignClient.uploadReportTemplateFile(req); - if (!response.isSuccess()) { - return response; + if (templateDto.getFile() != null) { + UploadFilesReq req = new UploadFilesReq(); + req.setFile(templateDto.getFile()); + SdmResponse response = dataFeignClient.uploadReportTemplateFile(req); + if (!response.isSuccess()) { + return response; + } + upgradeTemplate.setFileId(response.getData()); } - upgradeTemplate.setFileId(response.getData()); this.save(upgradeTemplate); return SdmResponse.success(upgradeTemplate.getUuid()); } diff --git a/system/src/main/java/com/sdm/system/controller/SysRoleController.java b/system/src/main/java/com/sdm/system/controller/SysRoleController.java index 9644229c..ba82e920 100644 --- a/system/src/main/java/com/sdm/system/controller/SysRoleController.java +++ b/system/src/main/java/com/sdm/system/controller/SysRoleController.java @@ -7,6 +7,7 @@ import com.sdm.system.model.req.role.QueryRoleReq; import com.sdm.system.model.req.role.UpdateRoleReq; import com.sdm.system.model.req.system.AssignRolePermissionReq; import com.sdm.system.model.resp.SysRoleResp; +import com.sdm.system.service.ISimulationRolePermissionService; import com.sdm.system.service.ISysRoleService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -20,6 +21,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import java.util.List; + @Tag(name = "角色管理", description = "角色相关操作接口") @RestController @RequestMapping("/role") @@ -29,6 +32,9 @@ public class SysRoleController { @Qualifier("roleService") private ISysRoleService sysRoleService; + @Autowired + private ISimulationRolePermissionService rolePermissionService; + /** * 角色列表查询 */ @@ -102,7 +108,7 @@ public class SysRoleController { @Operation(summary = "分配角色权限", description = "为指定角色分配权限") @PostMapping("/assignPermissions") public SdmResponse assignPermissions(@RequestBody @Valid AssignRolePermissionReq req) { - return sysRoleService.assignPermissions(req); + return rolePermissionService.assignPermissions(req); } /** @@ -110,8 +116,7 @@ public class SysRoleController { */ @Operation(summary = "查询角色权限", description = "获取指定角色拥有的权限列表") @GetMapping("/getRolePermissions") - public SdmResponse getRolePermissions( - @Parameter(description = "角色ID") @RequestParam("id") Long id) { - return sysRoleService.getRolePermissions(id); + public SdmResponse> getRolePermissions(@Parameter(description = "角色ID") @RequestParam("roleId") String roleId) { + return rolePermissionService.getRolePermissions(Long.valueOf(roleId)); } } \ No newline at end of file diff --git a/system/src/main/java/com/sdm/system/controller/SysUserController.java b/system/src/main/java/com/sdm/system/controller/SysUserController.java index 4f2175a2..6240a27a 100644 --- a/system/src/main/java/com/sdm/system/controller/SysUserController.java +++ b/system/src/main/java/com/sdm/system/controller/SysUserController.java @@ -8,6 +8,7 @@ import com.sdm.common.entity.resp.system.*; import com.sdm.common.entity.resp.PageDataResp; import com.sdm.common.feign.inter.system.ISysUserFeignClient; import com.sdm.system.model.req.user.*; +import com.sdm.system.service.ISimulationRolePermissionService; import com.sdm.system.service.ISysUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -29,6 +30,9 @@ public class SysUserController implements ISysUserFeignClient { @Qualifier("userService") private ISysUserService ISysUserService; + @Autowired + private ISimulationRolePermissionService rolePermissionService; + /** * 新增用户 * @@ -138,7 +142,7 @@ public class SysUserController implements ISysUserFeignClient { */ @Operation(summary = "查询用户角色", description = "查询用户角色接口,用于查询指定用户的角色列表") @GetMapping("/queryUserRole") - public SdmResponse queryUserRole(@Parameter(description = "用户id") @RequestParam("userId") Long userId) { + public SdmResponse> queryUserRole(@Parameter(description = "用户id") @RequestParam("userId") Long userId) { return ISysUserService.queryUserRole(userId); } @@ -235,5 +239,11 @@ public class SysUserController implements ISysUserFeignClient { return ISysUserService.getUserByRoleCode(roleCode, tenantId); } + @Operation(summary = "查询用户菜单权限", description = "查询用户菜单权限") + @GetMapping("/getUserPermissions") + public SdmResponse> getUserPermissions(@Parameter(description = "查询用户菜单权限请求参数") @RequestParam("userId") String userId) { + return rolePermissionService.getUserPermissions(Long.valueOf(userId)); + } + } \ No newline at end of file diff --git a/system/src/main/java/com/sdm/system/dao/SimulationRolePermissionMapper.java b/system/src/main/java/com/sdm/system/dao/SimulationRolePermissionMapper.java new file mode 100644 index 00000000..2a50111e --- /dev/null +++ b/system/src/main/java/com/sdm/system/dao/SimulationRolePermissionMapper.java @@ -0,0 +1,8 @@ +package com.sdm.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sdm.system.model.entity.SimulationRolePermission; + +public interface SimulationRolePermissionMapper extends BaseMapper { + +} diff --git a/system/src/main/java/com/sdm/system/model/entity/SimulationRolePermission.java b/system/src/main/java/com/sdm/system/model/entity/SimulationRolePermission.java new file mode 100644 index 00000000..c0974153 --- /dev/null +++ b/system/src/main/java/com/sdm/system/model/entity/SimulationRolePermission.java @@ -0,0 +1,52 @@ +package com.sdm.system.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("simulation_role_permission") +@ApiModel(value="SimulationRolePermission对象", description="角色菜单权限表") +public class SimulationRolePermission implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "表单ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "角色id(对应CID") + @TableField("roleId") + private Long roleId; + + @Schema(description = "菜单权限编码") + @TableField("permissionCode") + private String permissionCode; + + @Schema(description = "所属租户ID") + @TableField("tenantId") + private Long tenantId; + + @Schema(description = "创建人") + @TableField("creator") + private Long creator; + + @Schema(description = "创建时间") + @TableField("createTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/system/src/main/java/com/sdm/system/model/req/system/AssignRolePermissionReq.java b/system/src/main/java/com/sdm/system/model/req/system/AssignRolePermissionReq.java index 6998ecab..75dded9b 100644 --- a/system/src/main/java/com/sdm/system/model/req/system/AssignRolePermissionReq.java +++ b/system/src/main/java/com/sdm/system/model/req/system/AssignRolePermissionReq.java @@ -10,8 +10,8 @@ import java.util.List; public class AssignRolePermissionReq { @NotBlank(message = "角色ID不能为空") - private Integer roleId; + private String roleId; - @NotEmpty(message = "权限ID列表不能为空") - private List permissionIds; + @NotEmpty(message = "菜单权限编码不能为空") + private List permissionCodes; } \ No newline at end of file diff --git a/system/src/main/java/com/sdm/system/service/ISimulationRolePermissionService.java b/system/src/main/java/com/sdm/system/service/ISimulationRolePermissionService.java new file mode 100644 index 00000000..5bd16ef6 --- /dev/null +++ b/system/src/main/java/com/sdm/system/service/ISimulationRolePermissionService.java @@ -0,0 +1,18 @@ +package com.sdm.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdm.common.common.SdmResponse; +import com.sdm.system.model.entity.SimulationRolePermission; +import com.sdm.system.model.req.system.AssignRolePermissionReq; + +import java.util.List; + +public interface ISimulationRolePermissionService extends IService { + + SdmResponse assignPermissions(AssignRolePermissionReq req); + + SdmResponse> getRolePermissions(Long roleId); + + SdmResponse> getUserPermissions(Long userId); + +} diff --git a/system/src/main/java/com/sdm/system/service/ISysUserService.java b/system/src/main/java/com/sdm/system/service/ISysUserService.java index 7b62c842..4fc1adf2 100644 --- a/system/src/main/java/com/sdm/system/service/ISysUserService.java +++ b/system/src/main/java/com/sdm/system/service/ISysUserService.java @@ -33,7 +33,7 @@ public interface ISysUserService extends IService { SdmResponse updateUserRole(UpdateUserRole req); - SdmResponse queryUserRole(Long userId); + SdmResponse> queryUserRole(Long userId); SdmResponse addGroup(GroupAddReq req); diff --git a/system/src/main/java/com/sdm/system/service/impl/CID/CIDISysUserServiceImpl.java b/system/src/main/java/com/sdm/system/service/impl/CID/CIDISysUserServiceImpl.java index 04546715..f32968e9 100644 --- a/system/src/main/java/com/sdm/system/service/impl/CID/CIDISysUserServiceImpl.java +++ b/system/src/main/java/com/sdm/system/service/impl/CID/CIDISysUserServiceImpl.java @@ -172,7 +172,7 @@ public class CIDISysUserServiceImpl extends ServiceImpl } @Override - public SdmResponse queryUserRole(Long userId) { + public SdmResponse> queryUserRole(Long userId) { try { Map paramMap = new HashMap<>(); paramMap.put("userId", userId); @@ -180,7 +180,7 @@ public class CIDISysUserServiceImpl extends ServiceImpl log.info("正在向CID用户角色API发送请求: {},参数: {}", cidUrl + queryUserRole, paramMap); String resultJson = HttpUtil.get(cidUrl + queryUserRole, paramMap); log.info("收到CID用户角色API的响应: {}", resultJson); - SdmResponse result = JSON.parseObject(resultJson, SdmResponse.class); + SdmResponse> result = JSON.parseObject(resultJson, SdmResponse.class); return result; } catch (Exception e) { log.error("查询用户角色失败", e); diff --git a/system/src/main/java/com/sdm/system/service/impl/LocalUserServiceImpl.java b/system/src/main/java/com/sdm/system/service/impl/LocalUserServiceImpl.java index 9440c1f0..75817eaa 100644 --- a/system/src/main/java/com/sdm/system/service/impl/LocalUserServiceImpl.java +++ b/system/src/main/java/com/sdm/system/service/impl/LocalUserServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Slf4j @@ -169,7 +170,7 @@ public class LocalUserServiceImpl extends ServiceImpl im } @Override - public SdmResponse queryUserRole(Long userId) { + public SdmResponse> queryUserRole(Long userId) { SysUserRoleRelation userRoleRelation = sysUserRoleRelationService.lambdaQuery().eq(SysUserRoleRelation::getUserId, userId).one(); if (userRoleRelation == null) { return SdmResponse.failed("用户角色不存在"); @@ -177,7 +178,7 @@ public class LocalUserServiceImpl extends ServiceImpl im SysRole role = sysRoleService.getById(userRoleRelation.getRoleId()); CIDRoleResp cidRoleResp = new CIDRoleResp(); BeanUtils.copyProperties(role, cidRoleResp); - return SdmResponse.success(cidRoleResp); + return SdmResponse.success(Arrays.asList(cidRoleResp)); } /** diff --git a/system/src/main/java/com/sdm/system/service/impl/SimulationRolePermissionServiceImpl.java b/system/src/main/java/com/sdm/system/service/impl/SimulationRolePermissionServiceImpl.java new file mode 100644 index 00000000..37f500a2 --- /dev/null +++ b/system/src/main/java/com/sdm/system/service/impl/SimulationRolePermissionServiceImpl.java @@ -0,0 +1,74 @@ +package com.sdm.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdm.common.common.SdmResponse; +import com.sdm.common.common.ThreadLocalContext; +import com.sdm.common.entity.resp.system.CIDRoleResp; +import com.sdm.system.dao.SimulationRolePermissionMapper; +import com.sdm.system.model.entity.SimulationRolePermission; +import com.sdm.system.model.req.system.AssignRolePermissionReq; +import com.sdm.system.service.ISimulationRolePermissionService; +import com.sdm.system.service.ISysRoleService; +import com.sdm.system.service.ISysUserService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class SimulationRolePermissionServiceImpl extends ServiceImpl implements ISimulationRolePermissionService { + + @Autowired + @Qualifier("userService") + private ISysUserService sysUserService; + + @Override + @Transactional(rollbackFor = Exception.class) + public SdmResponse assignPermissions(AssignRolePermissionReq req) { + List rolePermissionList = new ArrayList<>(); + String roleId = req.getRoleId(); + Long tenantId = ThreadLocalContext.getTenantId(); + Long userId = ThreadLocalContext.getUserId(); + this.lambdaUpdate().eq(SimulationRolePermission::getRoleId, roleId).remove(); + for (String permissionCode : req.getPermissionCodes()) { + SimulationRolePermission rolePermission = new SimulationRolePermission(); + rolePermission.setRoleId(Long.valueOf(roleId)); + rolePermission.setPermissionCode(permissionCode); + rolePermission.setTenantId(tenantId); + rolePermission.setCreator(userId); + rolePermissionList.add(rolePermission); + } + return SdmResponse.success(this.saveBatch(rolePermissionList)); + } + + @Override + public SdmResponse> getRolePermissions(Long roleId) { + List rolePermissionList = this.lambdaQuery().eq(SimulationRolePermission::getRoleId, roleId).list(); + if (CollectionUtils.isNotEmpty(rolePermissionList)) { + return SdmResponse.success(rolePermissionList.stream().map(SimulationRolePermission::getPermissionCode).toList()); + } else { + return SdmResponse.success(new ArrayList<>()); + } + } + + @Override + public SdmResponse> getUserPermissions(Long userId) { + SdmResponse> cidRoleRespSdmResponse = sysUserService.queryUserRole(userId); + if (cidRoleRespSdmResponse.getData() != null) { + List cidRoleRespList = cidRoleRespSdmResponse.getData(); + List userPermissionList = new ArrayList<>(); + for (CIDRoleResp cidRoleResp : cidRoleRespList) { + List rolePermissionList = getRolePermissions(cidRoleResp.getRoleId()).getData(); + if (!CollectionUtils.isNotEmpty(rolePermissionList)) { + userPermissionList.addAll(rolePermissionList); + } + } + return SdmResponse.success(userPermissionList.stream().distinct().toList()); + } + return SdmResponse.success(new ArrayList<>()); + } +} diff --git a/task/src/main/java/com/sdm/task/model/dto/TaskPerformanceDto.java b/task/src/main/java/com/sdm/task/model/dto/TaskPerformanceDto.java index 61dd3750..952db88e 100644 --- a/task/src/main/java/com/sdm/task/model/dto/TaskPerformanceDto.java +++ b/task/src/main/java/com/sdm/task/model/dto/TaskPerformanceDto.java @@ -3,6 +3,7 @@ package com.sdm.task.model.dto; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -69,6 +70,7 @@ public class TaskPerformanceDto { private String tenantId; @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @Schema(description = "父ID")