打印了JENKINS节点日志
This commit is contained in:
parent
d9f084908a
commit
d9d9f2968d
@ -6,6 +6,7 @@ import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import com.qqchen.deploy.backend.system.model.MenuDTO;
|
||||
import com.qqchen.deploy.backend.system.model.query.MenuQuery;
|
||||
import com.qqchen.deploy.backend.system.model.response.MenuResponse;
|
||||
import com.qqchen.deploy.backend.system.model.response.MenuPermissionTreeResponse;
|
||||
import com.qqchen.deploy.backend.system.service.IMenuService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -42,6 +43,12 @@ public class MenuApiController extends BaseController<Menu, MenuDTO, Long, MenuQ
|
||||
return Response.success(menuService.getMenuTree());
|
||||
}
|
||||
|
||||
@Operation(summary = "获取菜单权限树")
|
||||
@GetMapping("/permission-tree")
|
||||
public Response<List<MenuPermissionTreeResponse>> getPermissionTree() {
|
||||
return Response.success(menuService.getPermissionTree());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void exportData(HttpServletResponse response, List<MenuDTO> data) {
|
||||
|
||||
|
||||
@ -6,8 +6,6 @@ import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import com.qqchen.deploy.backend.system.model.PermissionDTO;
|
||||
import com.qqchen.deploy.backend.system.model.RoleDTO;
|
||||
import com.qqchen.deploy.backend.system.model.query.RoleQuery;
|
||||
import com.qqchen.deploy.backend.system.model.response.MenuPermissionTreeResponse;
|
||||
import com.qqchen.deploy.backend.system.service.IMenuService;
|
||||
import com.qqchen.deploy.backend.system.service.IRoleService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@ -27,9 +25,6 @@ public class RoleApiController extends BaseController<Role, RoleDTO, Long, RoleQ
|
||||
@Resource
|
||||
private IRoleService roleService;
|
||||
|
||||
@Resource
|
||||
private IMenuService menuService;
|
||||
|
||||
@Override
|
||||
public Response<RoleDTO> create(RoleDTO dto) {
|
||||
return super.create(dto);
|
||||
@ -70,12 +65,6 @@ public class RoleApiController extends BaseController<Role, RoleDTO, Long, RoleQ
|
||||
return super.batchProcess(dtos);
|
||||
}
|
||||
|
||||
@Operation(summary = "获取菜单权限树")
|
||||
@GetMapping("/permission-tree")
|
||||
public Response<List<MenuPermissionTreeResponse>> getPermissionTree() {
|
||||
return Response.success(menuService.getPermissionTree());
|
||||
}
|
||||
|
||||
@Operation(summary = "分配标签")
|
||||
@PostMapping("/{id}/tags")
|
||||
public Response<Void> assignTags(@PathVariable Long id, @RequestBody List<Long> tagIds) {
|
||||
@ -83,16 +72,6 @@ public class RoleApiController extends BaseController<Role, RoleDTO, Long, RoleQ
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "分配角色")
|
||||
@PostMapping("/{userId}/assignRoles")
|
||||
public Response<Void> assignRoles(
|
||||
@Parameter(description = "用户ID", required = true) @PathVariable Long userId,
|
||||
@Parameter(description = "角色ID列表", required = true) @RequestBody List<Long> roleIds
|
||||
) {
|
||||
roleService.assignRoles(userId, roleIds);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "获取角色权限")
|
||||
@GetMapping("/{id}/permissions")
|
||||
public Response<List<PermissionDTO>> getRolePermissions(
|
||||
|
||||
@ -97,6 +97,13 @@ public class UserApiController extends BaseController<User, UserDTO, Long, UserQ
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/roles")
|
||||
@Operation(summary = "分配用户角色")
|
||||
public Response<Void> assignRoles(@PathVariable Long id, @RequestBody List<Long> roleIds) {
|
||||
userService.assignRoles(id, roleIds);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void exportData(HttpServletResponse response, List<UserDTO> data) {
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
|
||||
@ -30,11 +30,6 @@ public interface IRoleService extends IBaseService<Role, RoleDTO, RoleQuery, Lon
|
||||
*/
|
||||
void assignTags(Long roleId, List<Long> tagIds);
|
||||
|
||||
/**
|
||||
* 分配角色
|
||||
*/
|
||||
void assignRoles(Long userId, List<Long> roleIds);
|
||||
|
||||
/**
|
||||
* 获取角色的权限列表
|
||||
*/
|
||||
|
||||
@ -52,6 +52,14 @@ public interface IUserService extends IBaseService<User, UserDTO, UserQuery, Lon
|
||||
@Transactional(readOnly = false)
|
||||
void assignDepartment(Long userId, Long departmentId);
|
||||
|
||||
/**
|
||||
* 分配用户角色
|
||||
* @param userId 用户ID
|
||||
* @param roleIds 角色ID列表
|
||||
*/
|
||||
@Transactional(readOnly = false)
|
||||
void assignRoles(Long userId, List<Long> roleIds);
|
||||
|
||||
/**
|
||||
* 获取用户角色代码列表
|
||||
* @param userId 用户ID
|
||||
|
||||
@ -6,7 +6,6 @@ import com.qqchen.deploy.backend.system.entity.Menu;
|
||||
import com.qqchen.deploy.backend.system.entity.Permission;
|
||||
import com.qqchen.deploy.backend.system.entity.Role;
|
||||
import com.qqchen.deploy.backend.system.entity.RoleTag;
|
||||
import com.qqchen.deploy.backend.system.entity.User;
|
||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||
import com.qqchen.deploy.backend.framework.exception.BusinessException;
|
||||
import com.qqchen.deploy.backend.framework.exception.UniqueConstraintException;
|
||||
@ -19,7 +18,6 @@ import com.qqchen.deploy.backend.system.repository.IMenuRepository;
|
||||
import com.qqchen.deploy.backend.system.repository.IPermissionRepository;
|
||||
import com.qqchen.deploy.backend.system.repository.IRoleRepository;
|
||||
import com.qqchen.deploy.backend.system.repository.IRoleTagRepository;
|
||||
import com.qqchen.deploy.backend.system.repository.IUserRepository;
|
||||
import com.qqchen.deploy.backend.system.service.IRoleService;
|
||||
import com.qqchen.deploy.backend.framework.annotation.ServiceType;
|
||||
import com.qqchen.deploy.backend.system.service.IPermissionService;
|
||||
@ -47,9 +45,6 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, RoleDTO, RoleQuery, L
|
||||
@Resource
|
||||
private IRoleTagRepository roleTagRepository;
|
||||
|
||||
@Resource
|
||||
private IUserRepository userRepository;
|
||||
|
||||
@Resource
|
||||
private IPermissionService permissionService;
|
||||
|
||||
@ -126,33 +121,6 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, RoleDTO, RoleQuery, L
|
||||
roleRepository.save(role);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void assignRoles(Long userId, List<Long> roleIds) {
|
||||
// 获取用户
|
||||
User user = userRepository.findById(userId)
|
||||
.orElseThrow(() -> new BusinessException(ResponseCode.USER_NOT_FOUND));
|
||||
|
||||
// 不允许修改admin用户的角色
|
||||
if ("admin".equals(user.getUsername())) {
|
||||
throw new BusinessException(ResponseCode.ROLE_ADMIN_CANNOT_UPDATE);
|
||||
}
|
||||
|
||||
// 获取角色列表
|
||||
List<Role> roles = roleRepository.findAllById(roleIds);
|
||||
|
||||
// 验证所有角色ID是否都存在
|
||||
if (roles.size() != roleIds.size()) {
|
||||
throw new BusinessException(ResponseCode.ROLE_NOT_FOUND);
|
||||
}
|
||||
|
||||
// 设置用<EFBFBD><EFBFBD><EFBFBD>角色
|
||||
user.setRoles(new HashSet<>(roles));
|
||||
|
||||
// 保存更新
|
||||
userRepository.save(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PermissionDTO> listRolePermissions(Long roleId) {
|
||||
Role role = roleRepository.findById(roleId)
|
||||
|
||||
@ -21,7 +21,9 @@ import com.qqchen.deploy.backend.system.converter.RoleConverter;
|
||||
import com.qqchen.deploy.backend.system.model.UserDTO;
|
||||
import com.qqchen.deploy.backend.system.model.RoleDTO;
|
||||
import com.qqchen.deploy.backend.system.repository.IDepartmentRepository;
|
||||
import com.qqchen.deploy.backend.system.repository.IRoleRepository;
|
||||
import com.qqchen.deploy.backend.system.entity.Department;
|
||||
import com.qqchen.deploy.backend.system.entity.Role;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.hibernate.Hibernate;
|
||||
@ -34,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -62,6 +65,9 @@ public class UserServiceImpl extends BaseServiceImpl<User, UserDTO, UserQuery, L
|
||||
@Resource
|
||||
private IDepartmentRepository departmentRepository;
|
||||
|
||||
@Resource
|
||||
private IRoleRepository roleRepository;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public UserDTO create(UserDTO dto) {
|
||||
@ -220,6 +226,35 @@ public class UserServiceImpl extends BaseServiceImpl<User, UserDTO, UserQuery, L
|
||||
log.info("用户 {} 已分配到部门 {}", user.getUsername(), department.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@Audited(action = "ASSIGN_ROLES", detail = "分配角色")
|
||||
public void assignRoles(Long userId, List<Long> roleIds) {
|
||||
// 获取用户
|
||||
User user = findEntityById(userId);
|
||||
|
||||
// 不允许修改admin用户的角色
|
||||
if ("admin".equals(user.getUsername())) {
|
||||
throw new BusinessException(ResponseCode.ROLE_ADMIN_CANNOT_UPDATE);
|
||||
}
|
||||
|
||||
// 获取角色列表
|
||||
List<Role> roles = roleRepository.findAllById(roleIds);
|
||||
|
||||
// 验证所有角色ID是否都存在
|
||||
if (roles.size() != roleIds.size()) {
|
||||
throw new BusinessException(ResponseCode.ROLE_NOT_FOUND);
|
||||
}
|
||||
|
||||
// 设置用户角色
|
||||
user.setRoles(new HashSet<>(roles));
|
||||
|
||||
// 保存更新
|
||||
userRepository.save(user);
|
||||
|
||||
log.info("用户 {} 已分配角色: {}", user.getUsername(), roles.stream().map(Role::getName).collect(Collectors.joining(", ")));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validateUniqueConstraints(UserDTO dto) {
|
||||
// 检查用户名唯一性(包括已删除的记录)
|
||||
|
||||
@ -40,8 +40,6 @@ public class WorkflowDefinitionApiController extends BaseController<WorkflowDefi
|
||||
@Resource
|
||||
private IWorkflowDefinitionService workflowDefinitionService;
|
||||
|
||||
@Resource
|
||||
private HistoryService historyService;
|
||||
|
||||
@Operation(summary = "保存工作流设计")
|
||||
@PostMapping("/design")
|
||||
@ -60,178 +58,6 @@ public class WorkflowDefinitionApiController extends BaseController<WorkflowDefi
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
// @Operation(summary = "部署工作流")
|
||||
// @PostMapping("/deploy")
|
||||
// public Response<WorkflowDefinitionDTO> deployWorkflow(@RequestBody WorkflowDefinitionDTO dto) {
|
||||
// return Response.success(workflowDefinitionService.deployWorkflow(dto));
|
||||
// }
|
||||
|
||||
@Operation(summary = "挂起工作流实例")
|
||||
@PostMapping("/{processInstanceId}/suspend")
|
||||
public Response<Void> suspendWorkflow(
|
||||
@Parameter(description = "流程实例ID", required = true) @PathVariable String processInstanceId
|
||||
) {
|
||||
workflowDefinitionService.suspendWorkflow(processInstanceId);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "恢复工作流实例")
|
||||
@PostMapping("/{processInstanceId}/resume")
|
||||
public Response<Void> resumeWorkflow(
|
||||
@Parameter(description = "流程实例ID", required = true) @PathVariable String processInstanceId
|
||||
) {
|
||||
workflowDefinitionService.resumeWorkflow(processInstanceId);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "查询工作流实例")
|
||||
@GetMapping("/instance/{processInstanceId}")
|
||||
public Response<WorkflowInstanceDTO> getWorkflowInstance(
|
||||
@Parameter(description = "流程实例ID", required = true) @PathVariable String processInstanceId
|
||||
) {
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.includeProcessVariables()
|
||||
.singleResult();
|
||||
|
||||
if (historicProcessInstance == null) {
|
||||
return Response.error(ResponseCode.WORKFLOW_NOT_FOUND);
|
||||
}
|
||||
|
||||
WorkflowInstanceDTO instanceDTO = new WorkflowInstanceDTO();
|
||||
// instanceDTO.setId(historicProcessInstance.getId());
|
||||
// instanceDTO.setProcessDefinitionId(historicProcessInstance.getProcessDefinitionId());
|
||||
// instanceDTO.setBusinessKey(historicProcessInstance.getBusinessKey());
|
||||
// instanceDTO.setStartTime(historicProcessInstance.getStartTime());
|
||||
// instanceDTO.setEndTime(historicProcessInstance.getEndTime());
|
||||
// instanceDTO.setDurationInMillis(historicProcessInstance.getDurationInMillis());
|
||||
// instanceDTO.setStartUserId(historicProcessInstance.getStartUserId());
|
||||
// instanceDTO.setStatus(historicProcessInstance.getEndTime() != null ? WorkflowInstanceStatusEnums.COMPLETED : WorkflowInstanceStatusEnums.RUNNING);
|
||||
// instanceDTO.setVariables(historicProcessInstance.getProcessVariables());
|
||||
//
|
||||
// // 查询活动节点历史
|
||||
// List<HistoricActivityInstance> activities = historyService.createHistoricActivityInstanceQuery()
|
||||
// .processInstanceId(processInstanceId)
|
||||
// .orderByHistoricActivityInstanceStartTime()
|
||||
// .asc()
|
||||
// .list();
|
||||
//
|
||||
// List<WorkflowInstanceDTO.ActivityInstance> activityInstances = activities.stream()
|
||||
// .map(activity -> {
|
||||
// WorkflowInstanceDTO.ActivityInstance activityInstance = new WorkflowInstanceDTO.ActivityInstance();
|
||||
// activityInstance.setId(activity.getId());
|
||||
// activityInstance.setActivityId(activity.getActivityId());
|
||||
// activityInstance.setActivityName(activity.getActivityName());
|
||||
// activityInstance.setActivityType(activity.getActivityType());
|
||||
// activityInstance.setStartTime(activity.getStartTime());
|
||||
// activityInstance.setEndTime(activity.getEndTime());
|
||||
// activityInstance.setDurationInMillis(activity.getDurationInMillis());
|
||||
//
|
||||
// // 如果是Shell任务,获取Shell相关变量
|
||||
// if ("serviceTask".equals(activity.getActivityType())) {
|
||||
// Map<String, Object> variables = historicProcessInstance.getProcessVariables();
|
||||
// activityInstance.setShellOutput((String) variables.get("shellOutput"));
|
||||
// activityInstance.setShellError((String) variables.get("shellError"));
|
||||
// activityInstance.setShellExitCode((Integer) variables.get("shellExitCode"));
|
||||
// }
|
||||
//
|
||||
// return activityInstance;
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// instanceDTO.setActivities(activityInstances);
|
||||
//
|
||||
// return Response.success(instanceDTO);'
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "获取工作流执行状态")
|
||||
@GetMapping("/instance/{processInstanceId}/execution")
|
||||
public ResponseEntity<WorkflowExecutionDTO> getWorkflowExecution(@PathVariable String processInstanceId) {
|
||||
return ResponseEntity.ok(workflowDefinitionService.getWorkflowExecution(processInstanceId));
|
||||
}
|
||||
|
||||
@Operation(summary = "查询工作流实例列表")
|
||||
@GetMapping("/instances")
|
||||
public Response<List<WorkflowInstanceDTO>> listWorkflowInstances(
|
||||
@Parameter(description = "流程标识") @RequestParam(required = false) String processKey,
|
||||
@Parameter(description = "业务标识") @RequestParam(required = false) String businessKey
|
||||
) {
|
||||
List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery()
|
||||
.processDefinitionKey(processKey)
|
||||
.processInstanceBusinessKey(businessKey)
|
||||
.includeProcessVariables()
|
||||
.orderByProcessInstanceStartTime()
|
||||
.desc()
|
||||
.list();
|
||||
|
||||
// List<WorkflowInstanceDTO> instanceDTOs = historicProcessInstances.stream()
|
||||
// .map(historicProcessInstance -> {
|
||||
// WorkflowInstanceDTO instanceDTO = new WorkflowInstanceDTO();
|
||||
//// instanceDTO.setId(historicProcessInstance.getId());
|
||||
// instanceDTO.setProcessDefinitionId(historicProcessInstance.getProcessDefinitionId());
|
||||
// instanceDTO.setBusinessKey(historicProcessInstance.getBusinessKey());
|
||||
// instanceDTO.setStartTime(historicProcessInstance.getStartTime());
|
||||
// instanceDTO.setEndTime(historicProcessInstance.getEndTime());
|
||||
// instanceDTO.setDurationInMillis(historicProcessInstance.getDurationInMillis());
|
||||
// instanceDTO.setStartUserId(historicProcessInstance.getStartUserId());
|
||||
// instanceDTO.setStatus(historicProcessInstance.getEndTime() != null ? WorkflowInstanceStatusEnums.COMPLETED : WorkflowInstanceStatusEnums.RUNNING);
|
||||
// instanceDTO.setVariables(historicProcessInstance.getProcessVariables());
|
||||
// return instanceDTO;
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
|
||||
// return Response.success(instanceDTOs);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "获取节点实时日志")
|
||||
@GetMapping("/instance/{processInstanceId}/node/{nodeId}/logs")
|
||||
public Response<Map<String, Object>> getNodeLogs(
|
||||
@Parameter(description = "流程实例ID", required = true) @PathVariable String processInstanceId,
|
||||
@Parameter(description = "节点ID", required = true) @PathVariable String nodeId
|
||||
) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
// 获取历史活动实例
|
||||
HistoricActivityInstance activity = historyService.createHistoricActivityInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.activityId(nodeId)
|
||||
.singleResult();
|
||||
|
||||
if (activity == null) {
|
||||
return Response.error(ResponseCode.WORKFLOW_NODE_NOT_FOUND);
|
||||
}
|
||||
|
||||
// 获取执行ID
|
||||
String executionId = activity.getExecutionId();
|
||||
|
||||
// 获取节点相关的变量
|
||||
List<HistoricVariableInstance> variables = historyService.createHistoricVariableInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.list();
|
||||
|
||||
// 收集日志信息
|
||||
variables.forEach(variable -> {
|
||||
String variableName = variable.getVariableName();
|
||||
if (variableName.startsWith(executionId)) {
|
||||
// 移除executionId前缀
|
||||
String key = variableName.substring(executionId.length() + 1); // +1 for the underscore
|
||||
result.put(key, variable.getValue());
|
||||
}
|
||||
});
|
||||
|
||||
// 添加节点基本信息
|
||||
result.put("nodeId", nodeId);
|
||||
result.put("nodeName", activity.getActivityName());
|
||||
result.put("nodeType", activity.getActivityType());
|
||||
result.put("startTime", activity.getStartTime());
|
||||
result.put("endTime", activity.getEndTime());
|
||||
result.put("status", activity.getEndTime() == null ? "RUNNING" : "COMPLETED");
|
||||
|
||||
return Response.success(result);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "禁用工作流")
|
||||
@PostMapping("/{id}/disable")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user