From f28fe4ecdf5852a3c12e0865e552a3041fc2879e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=BD=87=E5=87=AF?= Date: Fri, 6 Jun 2025 11:35:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E7=AE=A1=E7=90=86=E8=A7=84=E8=8C=83=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../machine/contants/CommonConstants.java | 5 - .../contants/MachineErrorCodeConstants.java | 27 +++ .../controller/MachineEnvController.java | 58 +++--- .../machine/controller/vo/MachineEnvVO.java | 35 ++++ .../{dto => controller/vo}/PageDto.java | 2 +- .../machine/convert/MachineEnvConvert.java | 24 +++ .../dataobject/MachineEnvDO.java} | 17 +- .../machine/dal/mysql/MachineEnvMapper.java | 28 +++ .../module/machine/dto/MachineEnvDTO.java | 28 --- .../module/machine/entity/BaseEntity.java | 28 --- .../machine/exception/ServiceException.java | 55 ------ .../machine/mapper/MachineEnvMapper.java | 14 -- .../machine/service/MachineEnvService.java | 31 +-- .../service/impl/MachineEnvServiceImpl.java | 183 +++++------------- .../module/machine/utils/PageResult.java | 45 ----- 15 files changed, 234 insertions(+), 346 deletions(-) delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/CommonConstants.java create mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/MachineErrorCodeConstants.java create mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/MachineEnvVO.java rename modules/module-ci-machine/src/main/java/cd/casic/module/machine/{dto => controller/vo}/PageDto.java (71%) create mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/convert/MachineEnvConvert.java rename modules/module-ci-machine/src/main/java/cd/casic/module/machine/{entity/MachineEnv.java => dal/dataobject/MachineEnvDO.java} (64%) create mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/mysql/MachineEnvMapper.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineEnvDTO.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/BaseEntity.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/mapper/MachineEnvMapper.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/PageResult.java diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/CommonConstants.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/CommonConstants.java deleted file mode 100644 index 88528544..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/CommonConstants.java +++ /dev/null @@ -1,5 +0,0 @@ -package cd.casic.module.machine.contants; - -public interface CommonConstants { - String DEFAULT_PACKAGE_NAME = "com.casic"; -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/MachineErrorCodeConstants.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/MachineErrorCodeConstants.java new file mode 100644 index 00000000..eba519ef --- /dev/null +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/contants/MachineErrorCodeConstants.java @@ -0,0 +1,27 @@ +package cd.casic.module.machine.contants; + +import cd.casic.framework.commons.exception.ErrorCode; + +/** + * 机器报错 + */ +public interface MachineErrorCodeConstants { + // ========== 机器模块 1-003-000-000 ========== + ErrorCode MACHINE_INFO_NULL = new ErrorCode(1_003_000_000, "机器信息为空"); + ErrorCode UPLOADING_FILE_FAIL = new ErrorCode(1_003_000_001, "上传文件失败"); + ErrorCode DOWNLOAD_FILE_FAIL = new ErrorCode(1_003_000_002, "下载失败"); + ErrorCode FILENAME_NULL = new ErrorCode(1_003_000_003, "文件名为空"); + ErrorCode READ_FILE_FAIL = new ErrorCode(1_003_000_004, "读取文件失败"); + ErrorCode DELETE_FILE_FAIL = new ErrorCode(1_003_000_005, "删除文件失败"); + ErrorCode MACHINE_PROXY_DTO_NULL = new ErrorCode(1_003_000_006, "MachineProxyDTO对象为空"); + ErrorCode MACHINE_PROXY_NULL = new ErrorCode(1_003_000_007, "MachineProxy代理不存在"); + ErrorCode PARAMETER_ERROR = new ErrorCode(1_003_000_008, "参数错误"); + ErrorCode MACHINE_ENV_NULL = new ErrorCode(1_003_000_009, "机器环境变量为空"); + ErrorCode MACHINE_ENV_NOT_EXISTS = new ErrorCode(1_003_000_009, "机器不存在"); + ErrorCode MACHINE_ENV_EXISTS = new ErrorCode(1_003_000_009, "机器已存在"); + ErrorCode MACHINE_ENV_KEY_ILLEGAL = new ErrorCode(1_003_000_010, "机器环境变量键不合法"); + ErrorCode OSS_PARAM_NULL = new ErrorCode(1_003_000_011, "oss参数无法读取"); + ErrorCode SECRETKEY_NULL = new ErrorCode(1_003_000_012, "密钥为空"); +} + + diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineEnvController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineEnvController.java index 86e52621..b61c082d 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineEnvController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineEnvController.java @@ -1,69 +1,83 @@ package cd.casic.module.machine.controller; - import cd.casic.framework.commons.pojo.CommonResult; +import cd.casic.framework.commons.pojo.PageResult; +import cd.casic.framework.commons.util.object.BeanUtils; +import cd.casic.module.machine.dal.dataobject.MachineEnvDO; import cd.casic.module.machine.service.MachineEnvService; -import cd.casic.module.machine.dto.MachineEnvDTO; +import cd.casic.module.machine.controller.vo.MachineEnvVO; +import cn.hutool.core.collection.CollUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import static cd.casic.framework.commons.pojo.CommonResult.success; - /** * 环境变量控制器 */ -@RestController -@RequestMapping("/api/machineEnv") @Tag(name = "环境变量管理") -@RequiredArgsConstructor +@RestController +@RequestMapping("/ci/machineEnv") +@Validated public class MachineEnvController { @Resource private MachineEnvService machineEnvService; - @PostMapping("/add") + @PostMapping("/create") @Operation(summary = "新增环境变量") - public CommonResult add(@RequestBody MachineEnvDTO machineEnvDTO) { - machineEnvService.add(machineEnvDTO); - return success(true); + @PreAuthorize("@ss.hasPermission('ci:machineEnv:create')") + public CommonResult createEnv(@Valid @RequestBody MachineEnvVO machineEnvVO) { + Long id = machineEnvService.createEnv(machineEnvVO); + return success(id); } @PutMapping("/update") @Operation(summary = "修改环境变量") - public CommonResult update(@RequestBody MachineEnvDTO machineEnvDTO) { - machineEnvService.update(machineEnvDTO); + @PreAuthorize("@ss.hasPermission('ci:machineEnv:update')") + public CommonResult updateEnv(@Valid@RequestBody MachineEnvVO machineEnvVO) { + machineEnvService.updateEnv(machineEnvVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除机器的环境变量") - public CommonResult deleteByMachineId(@RequestParam Long machineEvnId) { - machineEnvService.deleteByMachineId(machineEvnId); + @PreAuthorize("@ss.hasPermission('ci:machineEnv:delete')") + public CommonResult deleteEnv(@RequestParam("id") Long id) { + machineEnvService.deleteEnv(id); return success(true); } @DeleteMapping("/deleteList") @Operation(summary = "批量删除机器环境变量") - public CommonResult deleteList(@RequestParam String ids) { - machineEnvService.deleteList(ids); + @PreAuthorize("@ss.hasPermission('ci:machineEnv:delete')") + public CommonResult deleteEnvList(@RequestParam("ids") String ids) { + machineEnvService.deleteEnvList(ids); return success(true); } - @GetMapping("/getByMachineId") + @GetMapping("/getEnv") @Operation(summary = "获取机器的环境变量") - public CommonResult getByMachineId(@RequestParam Long machineId) { - return success(machineEnvService.getByMachineId(machineId)); + public CommonResult getEnv(@RequestParam("id") Long id) { + MachineEnvVO machineEnvVO = machineEnvService.getEnv(id); + return success(machineEnvVO); } @PostMapping("/list") @Operation(summary = "获取环境变量列表") - public CommonResult list(@RequestBody MachineEnvDTO machineEnvDTO) { - return success(machineEnvService.listEnv(machineEnvDTO)); + public CommonResult> getEnvPage(@Valid @RequestBody MachineEnvVO machineEnvVO) { + PageResult pageResult = machineEnvService.getEnvPage(machineEnvVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(new PageResult<>(pageResult.getTotal())); + } + return success(BeanUtils.toBean(pageResult, MachineEnvVO.class)); } } + diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/MachineEnvVO.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/MachineEnvVO.java new file mode 100644 index 00000000..922daaaa --- /dev/null +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/MachineEnvVO.java @@ -0,0 +1,35 @@ +package cd.casic.module.machine.controller.vo; +import cd.casic.framework.commons.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.experimental.Accessors; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 机器环境变量信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) // 添加链式调用支持 +public class MachineEnvVO extends PageParam{ + + @Schema(description = "环境变量ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "环境变量键", requiredMode = Schema.RequiredMode.REQUIRED, example = "JAVA_HOME") + private String envKey; + + @Schema(description = "环境变量值", requiredMode = Schema.RequiredMode.REQUIRED, example = "/usr/java/jdk1.8.0_271") + private String envValue; + + @Schema(description = "环境变量描述", example = "Java运行环境路径") + private String description; + + @Schema(description = "关联的机器ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long machineId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-06-15T10:30:00") + private LocalDateTime createTime; + + @Schema(description = "更新时间", example = "2023-06-15T10:30:00") + private LocalDateTime updateTime; +} \ No newline at end of file diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/PageDto.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/PageDto.java similarity index 71% rename from modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/PageDto.java rename to modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/PageDto.java index 219fb4f8..29202cae 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/PageDto.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/vo/PageDto.java @@ -1,4 +1,4 @@ -package cd.casic.module.machine.dto; +package cd.casic.module.machine.controller.vo; import lombok.Data; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/convert/MachineEnvConvert.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/convert/MachineEnvConvert.java new file mode 100644 index 00000000..741eb553 --- /dev/null +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/convert/MachineEnvConvert.java @@ -0,0 +1,24 @@ +package cd.casic.module.machine.convert; + +import cd.casic.module.machine.controller.vo.MachineEnvVO; +import cd.casic.module.machine.dal.dataobject.MachineEnvDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +@Mapper +public interface MachineEnvConvert { + + MachineEnvConvert INSTANCE = Mappers.getMapper(MachineEnvConvert.class); + + // 转换实体为VO + default MachineEnvVO convertToVO(MachineEnvDO machineEnvDO) { + MachineEnvVO VO = new MachineEnvVO(); + VO.setId(machineEnvDO.getId()); + VO.setEnvKey(machineEnvDO.getEnvKey()); + VO.setEnvValue(machineEnvDO.getEnvValue()); + VO.setDescription(machineEnvDO.getDescription()); + VO.setCreateTime(machineEnvDO.getCreateTime()); + VO.setUpdateTime(machineEnvDO.getUpdateTime()); + return VO; + } + +} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineEnv.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/dataobject/MachineEnvDO.java similarity index 64% rename from modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineEnv.java rename to modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/dataobject/MachineEnvDO.java index c8c229a4..4c4589a4 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineEnv.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/dataobject/MachineEnvDO.java @@ -1,8 +1,10 @@ -package cd.casic.module.machine.entity; +package cd.casic.module.machine.dal.dataobject; +import cd.casic.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.*; import lombok.*; +import lombok.experimental.Accessors; import java.io.Serializable; @@ -12,13 +14,20 @@ import java.io.Serializable; @EqualsAndHashCode(callSuper = true) @Data +@Accessors(chain = true) +@TableName("machine_env") +@Builder @NoArgsConstructor @AllArgsConstructor -@TableName("machine_env") -public class MachineEnv extends BaseEntity implements Serializable { - private static final long serialVersionUID = 1L; +public class MachineEnvDO extends BaseDO { + /** + * 环境变量id + */ + @TableId + private Long id; + /** * 机器ID(唯一关联) */ diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/mysql/MachineEnvMapper.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/mysql/MachineEnvMapper.java new file mode 100644 index 00000000..a51b31fb --- /dev/null +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dal/mysql/MachineEnvMapper.java @@ -0,0 +1,28 @@ +package cd.casic.module.machine.dal.mysql; +import cd.casic.framework.mybatis.core.mapper.BaseMapperX; +import cd.casic.module.machine.controller.vo.MachineEnvVO; +import cd.casic.module.machine.dal.dataobject.MachineEnvDO; +import cd.casic.framework.commons.pojo.PageResult; +import cd.casic.framework.mybatis.core.query.LambdaQueryWrapperX; +import org.apache.ibatis.annotations.Mapper; + +import java.time.LocalDateTime; + +/** + * 环境变量Mapper接口 + */ +@Mapper +public interface MachineEnvMapper extends BaseMapperX { + default PageResultselectPage(MachineEnvVO machineEnvVO){ + return selectPage(machineEnvVO,new LambdaQueryWrapperX() + .likeIfPresent(MachineEnvDO::getEnvKey, machineEnvVO.getEnvKey()) + .likeIfPresent(MachineEnvDO::getDescription, machineEnvVO.getDescription()) + .inIfPresent(MachineEnvDO::getMachineId, machineEnvVO.getMachineId()) + .orderByDesc( MachineEnvDO::getMachineId)); + } + default void deleteBatchByIds(String ids) { + this.delete(new LambdaQueryWrapperX() + .in(MachineEnvDO::getId, ids.split(",")) + ); + } +} \ No newline at end of file diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineEnvDTO.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineEnvDTO.java deleted file mode 100644 index bb2204a6..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineEnvDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package cd.casic.module.machine.dto; - -import lombok.*; - -import java.io.Serializable; -import java.util.Date; - -/** - * 环境变量数据传输对象 - */ - -@EqualsAndHashCode(callSuper = true) -@Data -@NoArgsConstructor -@AllArgsConstructor -public class MachineEnvDTO extends PageDto implements Serializable { - private static final long serialVersionUID = 1L; - - private Long id; - private String envKey; - private String envValue; - private String description; - private Long machineId; - private Date createDate; - private Date updateDate; - private String sortField; - private String sortDirection; -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/BaseEntity.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/BaseEntity.java deleted file mode 100644 index 19669ab1..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/BaseEntity.java +++ /dev/null @@ -1,28 +0,0 @@ -package cd.casic.module.machine.entity; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.AllArgsConstructor; - -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -@Data - -@AllArgsConstructor -@NoArgsConstructor -public class BaseEntity { - @TableId - private Long id; - - @TableField(value = "create_date") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createDate; - - @TableField(value = "update_date") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateDate; -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java deleted file mode 100644 index 90f3b4d8..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/exception/ServiceException.java +++ /dev/null @@ -1,55 +0,0 @@ -package cd.casic.module.machine.exception; - -import cd.casic.module.machine.entity.SecretKey; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; - -/** - * 业务逻辑异常 Exception - */ -@EqualsAndHashCode(callSuper = true) -@Data -@AllArgsConstructor -@NoArgsConstructor -public class ServiceException extends RuntimeException { - //机器信息为空 - public static final int MACHINE_INFO_NULL = 555; - //上传文件失败 - public static final int UPLOADING_FILE_FAIL = 556; - //下载失败 - public static final int DOWNLOAD_FILE_FAIL = 557; - //文件名为空 - public static final int FILENAME_NULL = 558; - //读取文件失败 - public static final int READ_FILE_FAIL = 559; - //删除文件失败 - public static final int DELETE_FILE_FAIL = 560; - //MachineProxyDTO对象为空 - public static final int MACHINE_PROXY_DTO_NULL = 561; - //MachineProxy代理不存在 - public static final int MACHINE_PROXY_NULL = 562; - //参数错误 - public static final int PARAMETER_ERROR = 563; - //机器环境变量为空 - public static final int MACHINE_ENV_NULL = 564; - //机器环境变量键不合法 - public static final int MACHINE_ENV_KEY_ILLEGAL = 565; - //oss参数无法读取 - public static final int OSS_PARAM_NULL = 1001; - //密钥为空 - public static final int SECRETKEY_NULL = 1002; - - /** - * 业务错误码 - * 区间 - * machine-management-module模块(555-1000) - * common-module模块(1001-2000) - */ - private Integer code; - /** - * 错误提示 - */ - private String message; -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/mapper/MachineEnvMapper.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/mapper/MachineEnvMapper.java deleted file mode 100644 index 9e2e7558..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/mapper/MachineEnvMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cd.casic.module.machine.mapper; - - -import cd.casic.module.machine.entity.MachineEnv; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -import org.apache.ibatis.annotations.Mapper; - -/** - * 环境变量Mapper接口 - */ -@Mapper -public interface MachineEnvMapper extends BaseMapper { -} \ No newline at end of file diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineEnvService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineEnvService.java index e71ad993..04f48774 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineEnvService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineEnvService.java @@ -1,26 +1,23 @@ package cd.casic.module.machine.service; - -import cd.casic.module.machine.entity.MachineEnv; -import cd.casic.module.machine.dto.MachineEnvDTO; -import cd.casic.module.machine.utils.PageResult; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.util.List; +import cd.casic.framework.commons.pojo.PageResult; +import cd.casic.module.machine.controller.vo.MachineEnvVO; +import cd.casic.module.machine.dal.dataobject.MachineEnvDO; +import jakarta.validation.Valid; /** * 环境变量服务接口 */ -public interface MachineEnvService extends IService { +public interface MachineEnvService { /** * 创建或更新机器的环境变量(一对一关系) */ - boolean add(MachineEnvDTO machineEnvDTO); + Long createEnv(@Valid MachineEnvVO machineEnvVO); /** * 删除机器的环境变量 */ - void deleteByMachineId(Long machineEvnId); + void deleteEnv(Long machineEvnId); /** * 获取机器的环境变量 @@ -28,14 +25,20 @@ public interface MachineEnvService extends IService { * @param machineId 机器ID * @return 环境变量DTO */ - MachineEnvDTO getByMachineId(Long machineId); + MachineEnvVO getEnv(Long machineId); /** * @return 环境变量列表 */ - PageResult listEnv(MachineEnvDTO machineEnvDTO); + PageResult getEnvPage(@Valid MachineEnvVO machineEnvVO); - void deleteList(String ids); + /** + * 批量删除 + */ + void deleteEnvList(String ids); - boolean update(MachineEnvDTO machineEnvDTO); + /* + * 修改环境变量 + */ + void updateEnv(@Valid MachineEnvVO machineEnvVO); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineEnvServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineEnvServiceImpl.java index fe0d14e8..c17fb6b7 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineEnvServiceImpl.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineEnvServiceImpl.java @@ -1,174 +1,97 @@ package cd.casic.module.machine.service.impl; - -import cd.casic.module.machine.dto.MachineEnvDTO; -import cd.casic.module.machine.entity.MachineEnv; -import cd.casic.module.machine.exception.ServiceException; -import cd.casic.module.machine.mapper.MachineEnvMapper; +import cd.casic.module.machine.convert.MachineEnvConvert; +import cd.casic.module.machine.controller.vo.MachineEnvVO; +import cd.casic.module.machine.dal.dataobject.MachineEnvDO; +import cd.casic.module.machine.dal.mysql.MachineEnvMapper; import cd.casic.module.machine.service.MachineEnvService; -import cd.casic.module.machine.utils.PageResult; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - +import cd.casic.framework.commons.pojo.PageResult; +import com.google.common.annotations.VisibleForTesting; import jakarta.annotation.Resource; -import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; +import cd.casic.framework.commons.util.object.BeanUtils; +import static cd.casic.framework.commons.exception.util.ServiceExceptionUtil.exception; +import static cd.casic.module.machine.contants.MachineErrorCodeConstants.*; /** * 环境变量服务实现类 */ -@Service -public class MachineEnvServiceImpl extends ServiceImpl implements MachineEnvService { +@Service("machineEnvService") +public class MachineEnvServiceImpl implements MachineEnvService { @Resource private MachineEnvMapper machineEnvMapper; @Override @Transactional(rollbackFor = Exception.class) - public boolean add(MachineEnvDTO machineEnvDTO) { - // 参数校验 - if (machineEnvDTO == null) { - throw new ServiceException(ServiceException.MACHINE_ENV_NULL, "环境变量不能为空"); - } - + public Long createEnv(MachineEnvVO machineEnvVO) { + validateMachineEnvAdd(machineEnvVO); // 检查键是否合法 - if (!isValidKey(machineEnvDTO.getEnvKey())) { - throw new ServiceException(ServiceException.MACHINE_ENV_KEY_ILLEGAL, "环境变量键不合法"); - } - - // 判断是否敏感变量 - boolean isSensitive = isSensitive(machineEnvDTO.getEnvKey()); - - MachineEnv machineEnv = new MachineEnv(); - BeanUtils.copyProperties(machineEnvDTO, machineEnv); - return save(machineEnv); + validateKey(machineEnvVO.getEnvKey()); + MachineEnvDO machineEnvDO = BeanUtils.toBean(machineEnvVO, MachineEnvDO.class); + machineEnvMapper.insert(machineEnvDO); + return machineEnvDO.getId(); } @Override - public void deleteByMachineId(Long machineEvnId) { - this.removeById(machineEvnId); + public void deleteEnv(Long machineEvnId) { + machineEnvMapper.deleteById(machineEvnId); } @Override - public MachineEnvDTO getByMachineId(Long machineId) { + public MachineEnvVO getEnv(Long machineId) { if (machineId == null) { return null; } - - MachineEnv machineEnv = getOne( - new LambdaQueryWrapper() - .eq(MachineEnv::getMachineId, machineId) - ); - - return machineEnv != null ? convertToDTO(machineEnv) : null; - + MachineEnvDO machineEnvDO = machineEnvMapper.selectById(machineId); + return machineEnvDO != null ? MachineEnvConvert.INSTANCE.convertToVO(machineEnvDO) : null; } @Override - public PageResult listEnv(MachineEnvDTO machineEnvDTO) { - - // 构建查询条件 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - - // 环境变量键模糊查询 - if (!StringUtils.isEmpty(machineEnvDTO.getEnvKey())) { - queryWrapper.like(MachineEnv::getEnvKey, machineEnvDTO.getEnvKey()); - } - - // 机器ID模糊查询 - if (!StringUtils.isEmpty(machineEnvDTO.getMachineId())) { - queryWrapper.like(MachineEnv::getMachineId, machineEnvDTO.getMachineId()); - } - - // 创建时间范围查询 - if (!StringUtils.isEmpty(machineEnvDTO.getCreateDate())) { - queryWrapper.ge(MachineEnv::getCreateDate, machineEnvDTO.getCreateDate()); - } - - // 排序 - if (!StringUtils.isEmpty(machineEnvDTO.getSortField())) { - boolean isAsc = "asc".equalsIgnoreCase(machineEnvDTO.getSortDirection()); - switch (machineEnvDTO.getSortField()) { - case "envKey": - queryWrapper.orderBy(true, isAsc, MachineEnv::getEnvKey); - break; - case "machineId": - queryWrapper.orderBy(true, isAsc, MachineEnv::getMachineId); - break; - case "createTime": - default: - queryWrapper.orderBy(true, isAsc, MachineEnv::getCreateDate); - break; - } - } - - // 分页查询 - Page page = machineEnvMapper.selectPage(new Page<>(machineEnvDTO.getPageIndex(), machineEnvDTO.getPageSize()), queryWrapper); - - // 转换结果 - List dtoList = page.getRecords().stream() - .map(this::convertToDTO) - .collect(Collectors.toList()); - - // 构建分页结果 - return PageResult.builder() - .pageNum(page.getCurrent()) - .pageSize(page.getSize()) - .total(page.getTotal()) - .pages(page.getPages()) - .list(dtoList) - .build(); + public PageResult getEnvPage(MachineEnvVO machineEnvVO) { + return machineEnvMapper.selectPage(machineEnvVO); } @Override - public void deleteList(String ids) { - List machineEnvIds = Arrays.stream(ids.split(",")) - .map(String::trim) - .filter(s -> !s.isEmpty()) - .map(Long::parseLong) - .toList(); - this.machineEnvMapper.deleteBatchIds(machineEnvIds); + public void deleteEnvList(String ids) { + machineEnvMapper.deleteBatchByIds(ids); } @Override - public boolean update(MachineEnvDTO machineEnvDTO) { - MachineEnv machineEnv = new MachineEnv(); - BeanUtils.copyProperties(machineEnvDTO, machineEnv); - return this.updateById(machineEnv); + public void updateEnv(MachineEnvVO machineEnvVO) { + MachineEnvDO machineEnvDO = validateMachineEnvExists(machineEnvVO.getId()); + BeanUtils.copyProperties(machineEnvVO, machineEnvDO); + machineEnvMapper.updateById(machineEnvDO); } - // 转换实体为DTO - private MachineEnvDTO convertToDTO(MachineEnv machineEnv) { - MachineEnvDTO dto = new MachineEnvDTO(); - dto.setId(machineEnv.getId()); - dto.setEnvKey(machineEnv.getEnvKey()); - dto.setEnvValue(machineEnv.getEnvValue()); - dto.setDescription(machineEnv.getDescription()); - dto.setCreateDate(machineEnv.getCreateDate()); - dto.setUpdateDate(machineEnv.getUpdateDate()); - return dto; + @VisibleForTesting + MachineEnvDO validateMachineEnvExists(Long id) { + if (id == null) { + return null; + } + MachineEnvDO machineEnvDO = machineEnvMapper.selectById(id); + if (machineEnvDO == null) { + throw exception(MACHINE_ENV_NOT_EXISTS); + } + return machineEnvDO; } + @VisibleForTesting + void validateMachineEnvAdd(MachineEnvVO machineEnvVO) { + if (machineEnvVO.getEnvKey()==null||machineEnvVO.getEnvValue()==null) { + throw exception(MACHINE_ENV_NULL); + } + } + + // 检查环境变量键是否合法 - private boolean isValidKey(String key) { - return key.matches("^[a-zA-Z_][a-zA-Z0-9_]*$"); + @VisibleForTesting + private void validateKey(String key) { + if (!key.matches("^[a-zA-Z_][a-zA-Z0-9_]*$")) { + throw exception(MACHINE_ENV_KEY_ILLEGAL); + } } - // 判断是否为敏感变量 - private boolean isSensitive(String key) { - if (key == null) { - return false; - } - String upperKey = key.toUpperCase(); - return upperKey.contains("PASSWORD") || upperKey.contains("SECRET") || - upperKey.contains("TOKEN") || upperKey.contains("KEY"); - } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/PageResult.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/PageResult.java deleted file mode 100644 index 3da67c88..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/PageResult.java +++ /dev/null @@ -1,45 +0,0 @@ -package cd.casic.module.machine.utils; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.util.List; - -/** - * 分页结果通用类 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class PageResult implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * 当前页码 - */ - private Long pageNum; - - /** - * 每页数量 - */ - private Long pageSize; - - /** - * 总记录数 - */ - private Long total; - - /** - * 总页数 - */ - private Long pages; - - /** - * 数据列表 - */ - private List list; -}