机器环境变量管理规范化
This commit is contained in:
parent
56150c156b
commit
f28fe4ecdf
@ -1,5 +0,0 @@
|
|||||||
package cd.casic.module.machine.contants;
|
|
||||||
|
|
||||||
public interface CommonConstants {
|
|
||||||
String DEFAULT_PACKAGE_NAME = "com.casic";
|
|
||||||
}
|
|
@ -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, "密钥为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,69 +1,83 @@
|
|||||||
package cd.casic.module.machine.controller;
|
package cd.casic.module.machine.controller;
|
||||||
|
|
||||||
import cd.casic.framework.commons.pojo.CommonResult;
|
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.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.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import static cd.casic.framework.commons.pojo.CommonResult.success;
|
import static cd.casic.framework.commons.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环境变量控制器
|
* 环境变量控制器
|
||||||
*/
|
*/
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api/machineEnv")
|
|
||||||
@Tag(name = "环境变量管理")
|
@Tag(name = "环境变量管理")
|
||||||
@RequiredArgsConstructor
|
@RestController
|
||||||
|
@RequestMapping("/ci/machineEnv")
|
||||||
|
@Validated
|
||||||
public class MachineEnvController {
|
public class MachineEnvController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MachineEnvService machineEnvService;
|
private MachineEnvService machineEnvService;
|
||||||
|
|
||||||
@PostMapping("/add")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "新增环境变量")
|
@Operation(summary = "新增环境变量")
|
||||||
public CommonResult add(@RequestBody MachineEnvDTO machineEnvDTO) {
|
@PreAuthorize("@ss.hasPermission('ci:machineEnv:create')")
|
||||||
machineEnvService.add(machineEnvDTO);
|
public CommonResult<Long> createEnv(@Valid @RequestBody MachineEnvVO machineEnvVO) {
|
||||||
return success(true);
|
Long id = machineEnvService.createEnv(machineEnvVO);
|
||||||
|
return success(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "修改环境变量")
|
@Operation(summary = "修改环境变量")
|
||||||
public CommonResult update(@RequestBody MachineEnvDTO machineEnvDTO) {
|
@PreAuthorize("@ss.hasPermission('ci:machineEnv:update')")
|
||||||
machineEnvService.update(machineEnvDTO);
|
public CommonResult<Boolean> updateEnv(@Valid@RequestBody MachineEnvVO machineEnvVO) {
|
||||||
|
machineEnvService.updateEnv(machineEnvVO);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/delete")
|
@DeleteMapping("/delete")
|
||||||
@Operation(summary = "删除机器的环境变量")
|
@Operation(summary = "删除机器的环境变量")
|
||||||
public CommonResult deleteByMachineId(@RequestParam Long machineEvnId) {
|
@PreAuthorize("@ss.hasPermission('ci:machineEnv:delete')")
|
||||||
machineEnvService.deleteByMachineId(machineEvnId);
|
public CommonResult<Boolean> deleteEnv(@RequestParam("id") Long id) {
|
||||||
|
machineEnvService.deleteEnv(id);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/deleteList")
|
@DeleteMapping("/deleteList")
|
||||||
@Operation(summary = "批量删除机器环境变量")
|
@Operation(summary = "批量删除机器环境变量")
|
||||||
public CommonResult deleteList(@RequestParam String ids) {
|
@PreAuthorize("@ss.hasPermission('ci:machineEnv:delete')")
|
||||||
machineEnvService.deleteList(ids);
|
public CommonResult<Boolean> deleteEnvList(@RequestParam("ids") String ids) {
|
||||||
|
machineEnvService.deleteEnvList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getByMachineId")
|
@GetMapping("/getEnv")
|
||||||
@Operation(summary = "获取机器的环境变量")
|
@Operation(summary = "获取机器的环境变量")
|
||||||
public CommonResult getByMachineId(@RequestParam Long machineId) {
|
public CommonResult<MachineEnvVO> getEnv(@RequestParam("id") Long id) {
|
||||||
return success(machineEnvService.getByMachineId(machineId));
|
MachineEnvVO machineEnvVO = machineEnvService.getEnv(id);
|
||||||
|
return success(machineEnvVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@Operation(summary = "获取环境变量列表")
|
@Operation(summary = "获取环境变量列表")
|
||||||
public CommonResult list(@RequestBody MachineEnvDTO machineEnvDTO) {
|
public CommonResult<PageResult<MachineEnvVO>> getEnvPage(@Valid @RequestBody MachineEnvVO machineEnvVO) {
|
||||||
return success(machineEnvService.listEnv(machineEnvDTO));
|
PageResult<MachineEnvDO> pageResult = machineEnvService.getEnvPage(machineEnvVO);
|
||||||
|
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||||
|
return success(new PageResult<>(pageResult.getTotal()));
|
||||||
|
}
|
||||||
|
return success(BeanUtils.toBean(pageResult, MachineEnvVO.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.module.machine.dto;
|
package cd.casic.module.machine.controller.vo;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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 com.baomidou.mybatisplus.annotation.*;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@ -12,13 +14,20 @@ import java.io.Serializable;
|
|||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("machine_env")
|
||||||
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@TableName("machine_env")
|
public class MachineEnvDO extends BaseDO {
|
||||||
public class MachineEnv extends BaseEntity implements Serializable {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 环境变量id
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 机器ID(唯一关联)
|
* 机器ID(唯一关联)
|
||||||
*/
|
*/
|
@ -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<MachineEnvDO> {
|
||||||
|
default PageResult<MachineEnvDO>selectPage(MachineEnvVO machineEnvVO){
|
||||||
|
return selectPage(machineEnvVO,new LambdaQueryWrapperX<MachineEnvDO>()
|
||||||
|
.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<MachineEnvDO>()
|
||||||
|
.in(MachineEnvDO::getId, ids.split(","))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
@ -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<MachineEnv> {
|
|
||||||
}
|
|
@ -1,26 +1,23 @@
|
|||||||
package cd.casic.module.machine.service;
|
package cd.casic.module.machine.service;
|
||||||
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import cd.casic.module.machine.entity.MachineEnv;
|
import cd.casic.module.machine.controller.vo.MachineEnvVO;
|
||||||
import cd.casic.module.machine.dto.MachineEnvDTO;
|
import cd.casic.module.machine.dal.dataobject.MachineEnvDO;
|
||||||
import cd.casic.module.machine.utils.PageResult;
|
import jakarta.validation.Valid;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环境变量服务接口
|
* 环境变量服务接口
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public interface MachineEnvService extends IService<MachineEnv> {
|
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<MachineEnv> {
|
|||||||
* @param machineId 机器ID
|
* @param machineId 机器ID
|
||||||
* @return 环境变量DTO
|
* @return 环境变量DTO
|
||||||
*/
|
*/
|
||||||
MachineEnvDTO getByMachineId(Long machineId);
|
MachineEnvVO getEnv(Long machineId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 环境变量列表
|
* @return 环境变量列表
|
||||||
*/
|
*/
|
||||||
PageResult<MachineEnvDTO> listEnv(MachineEnvDTO machineEnvDTO);
|
PageResult<MachineEnvDO> getEnvPage(@Valid MachineEnvVO machineEnvVO);
|
||||||
|
|
||||||
void deleteList(String ids);
|
/**
|
||||||
|
* 批量删除
|
||||||
|
*/
|
||||||
|
void deleteEnvList(String ids);
|
||||||
|
|
||||||
boolean update(MachineEnvDTO machineEnvDTO);
|
/*
|
||||||
|
* 修改环境变量
|
||||||
|
*/
|
||||||
|
void updateEnv(@Valid MachineEnvVO machineEnvVO);
|
||||||
}
|
}
|
||||||
|
@ -1,174 +1,97 @@
|
|||||||
package cd.casic.module.machine.service.impl;
|
package cd.casic.module.machine.service.impl;
|
||||||
|
import cd.casic.module.machine.convert.MachineEnvConvert;
|
||||||
import cd.casic.module.machine.dto.MachineEnvDTO;
|
import cd.casic.module.machine.controller.vo.MachineEnvVO;
|
||||||
import cd.casic.module.machine.entity.MachineEnv;
|
import cd.casic.module.machine.dal.dataobject.MachineEnvDO;
|
||||||
import cd.casic.module.machine.exception.ServiceException;
|
import cd.casic.module.machine.dal.mysql.MachineEnvMapper;
|
||||||
import cd.casic.module.machine.mapper.MachineEnvMapper;
|
|
||||||
import cd.casic.module.machine.service.MachineEnvService;
|
import cd.casic.module.machine.service.MachineEnvService;
|
||||||
import cd.casic.module.machine.utils.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.StringUtils;
|
import cd.casic.framework.commons.util.object.BeanUtils;
|
||||||
|
import static cd.casic.framework.commons.exception.util.ServiceExceptionUtil.exception;
|
||||||
import java.util.Arrays;
|
import static cd.casic.module.machine.contants.MachineErrorCodeConstants.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环境变量服务实现类
|
* 环境变量服务实现类
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service("machineEnvService")
|
||||||
public class MachineEnvServiceImpl extends ServiceImpl<MachineEnvMapper, MachineEnv> implements MachineEnvService {
|
public class MachineEnvServiceImpl implements MachineEnvService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MachineEnvMapper machineEnvMapper;
|
private MachineEnvMapper machineEnvMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean add(MachineEnvDTO machineEnvDTO) {
|
public Long createEnv(MachineEnvVO machineEnvVO) {
|
||||||
// 参数校验
|
validateMachineEnvAdd(machineEnvVO);
|
||||||
if (machineEnvDTO == null) {
|
|
||||||
throw new ServiceException(ServiceException.MACHINE_ENV_NULL, "环境变量不能为空");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查键是否合法
|
// 检查键是否合法
|
||||||
if (!isValidKey(machineEnvDTO.getEnvKey())) {
|
validateKey(machineEnvVO.getEnvKey());
|
||||||
throw new ServiceException(ServiceException.MACHINE_ENV_KEY_ILLEGAL, "环境变量键不合法");
|
MachineEnvDO machineEnvDO = BeanUtils.toBean(machineEnvVO, MachineEnvDO.class);
|
||||||
}
|
machineEnvMapper.insert(machineEnvDO);
|
||||||
|
return machineEnvDO.getId();
|
||||||
// 判断是否敏感变量
|
|
||||||
boolean isSensitive = isSensitive(machineEnvDTO.getEnvKey());
|
|
||||||
|
|
||||||
MachineEnv machineEnv = new MachineEnv();
|
|
||||||
BeanUtils.copyProperties(machineEnvDTO, machineEnv);
|
|
||||||
return save(machineEnv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteByMachineId(Long machineEvnId) {
|
public void deleteEnv(Long machineEvnId) {
|
||||||
this.removeById(machineEvnId);
|
machineEnvMapper.deleteById(machineEvnId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MachineEnvDTO getByMachineId(Long machineId) {
|
public MachineEnvVO getEnv(Long machineId) {
|
||||||
if (machineId == null) {
|
if (machineId == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
MachineEnvDO machineEnvDO = machineEnvMapper.selectById(machineId);
|
||||||
MachineEnv machineEnv = getOne(
|
return machineEnvDO != null ? MachineEnvConvert.INSTANCE.convertToVO(machineEnvDO) : null;
|
||||||
new LambdaQueryWrapper<MachineEnv>()
|
|
||||||
.eq(MachineEnv::getMachineId, machineId)
|
|
||||||
);
|
|
||||||
|
|
||||||
return machineEnv != null ? convertToDTO(machineEnv) : null;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<MachineEnvDTO> listEnv(MachineEnvDTO machineEnvDTO) {
|
public PageResult<MachineEnvDO> getEnvPage(MachineEnvVO machineEnvVO) {
|
||||||
|
return machineEnvMapper.selectPage(machineEnvVO);
|
||||||
// 构建查询条件
|
|
||||||
LambdaQueryWrapper<MachineEnv> 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<MachineEnv> page = machineEnvMapper.selectPage(new Page<>(machineEnvDTO.getPageIndex(), machineEnvDTO.getPageSize()), queryWrapper);
|
|
||||||
|
|
||||||
// 转换结果
|
|
||||||
List<MachineEnvDTO> dtoList = page.getRecords().stream()
|
|
||||||
.map(this::convertToDTO)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
// 构建分页结果
|
|
||||||
return PageResult.<MachineEnvDTO>builder()
|
|
||||||
.pageNum(page.getCurrent())
|
|
||||||
.pageSize(page.getSize())
|
|
||||||
.total(page.getTotal())
|
|
||||||
.pages(page.getPages())
|
|
||||||
.list(dtoList)
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteList(String ids) {
|
public void deleteEnvList(String ids) {
|
||||||
List<Long> machineEnvIds = Arrays.stream(ids.split(","))
|
machineEnvMapper.deleteBatchByIds(ids);
|
||||||
.map(String::trim)
|
|
||||||
.filter(s -> !s.isEmpty())
|
|
||||||
.map(Long::parseLong)
|
|
||||||
.toList();
|
|
||||||
this.machineEnvMapper.deleteBatchIds(machineEnvIds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(MachineEnvDTO machineEnvDTO) {
|
public void updateEnv(MachineEnvVO machineEnvVO) {
|
||||||
MachineEnv machineEnv = new MachineEnv();
|
MachineEnvDO machineEnvDO = validateMachineEnvExists(machineEnvVO.getId());
|
||||||
BeanUtils.copyProperties(machineEnvDTO, machineEnv);
|
BeanUtils.copyProperties(machineEnvVO, machineEnvDO);
|
||||||
return this.updateById(machineEnv);
|
machineEnvMapper.updateById(machineEnvDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 转换实体为DTO
|
@VisibleForTesting
|
||||||
private MachineEnvDTO convertToDTO(MachineEnv machineEnv) {
|
MachineEnvDO validateMachineEnvExists(Long id) {
|
||||||
MachineEnvDTO dto = new MachineEnvDTO();
|
if (id == null) {
|
||||||
dto.setId(machineEnv.getId());
|
return null;
|
||||||
dto.setEnvKey(machineEnv.getEnvKey());
|
|
||||||
dto.setEnvValue(machineEnv.getEnvValue());
|
|
||||||
dto.setDescription(machineEnv.getDescription());
|
|
||||||
dto.setCreateDate(machineEnv.getCreateDate());
|
|
||||||
dto.setUpdateDate(machineEnv.getUpdateDate());
|
|
||||||
return dto;
|
|
||||||
}
|
}
|
||||||
|
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) {
|
@VisibleForTesting
|
||||||
return key.matches("^[a-zA-Z_][a-zA-Z0-9_]*$");
|
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");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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<T> implements Serializable {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 当前页码
|
|
||||||
*/
|
|
||||||
private Long pageNum;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 每页数量
|
|
||||||
*/
|
|
||||||
private Long pageSize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 总记录数
|
|
||||||
*/
|
|
||||||
private Long total;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 总页数
|
|
||||||
*/
|
|
||||||
private Long pages;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 数据列表
|
|
||||||
*/
|
|
||||||
private List<T> list;
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user