From 4b8dfe978afed2ff4a3225ea5241c2348bcd26ad Mon Sep 17 00:00:00 2001 From: zyj <2660555181@qq.com> Date: Wed, 4 Jun 2025 11:03:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MachineEnvController.java | 10 ++- .../controller/MachineInfoController.java | 15 ++-- .../controller/MachineProxyController.java | 13 ++-- .../controller/SecretKeyController.java | 12 ++-- .../module/machine/dto/MachineEnvDTO.java | 17 ----- .../module/machine/dto/MachineInfoDto.java | 4 +- .../module/machine/dto/MachineProxyDTO.java | 2 +- .../module/machine/dto/SecretKeyDto.java | 3 + .../module/machine/entity/MachineEnv.java | 5 -- .../module/machine/entity/MachineInfo.java | 3 + .../module/machine/entity/MachineProxy.java | 18 +++-- .../machine/pojo/ErrorResponseData.java | 26 ------- .../module/machine/pojo/ResponseData.java | 72 ------------------- .../machine/pojo/SuccessResponseData.java | 16 ----- .../machine/service/MachineEnvService.java | 5 +- .../machine/service/MachineInfoService.java | 6 +- .../machine/service/MachineProxyService.java | 5 +- .../machine/service/SecretKeyService.java | 4 +- .../service/impl/MachineEnvServiceImpl.java | 20 +++--- .../service/impl/MachineProxyServiceImpl.java | 57 ++++++++------- .../service/impl/MachineinfoServiceImpl.java | 24 +++++-- .../service/impl/SecretKeyServiceImpl.java | 15 ++-- 22 files changed, 123 insertions(+), 229 deletions(-) delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ErrorResponseData.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ResponseData.java delete mode 100644 modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/SuccessResponseData.java 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 cebe922b..d068ee04 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 @@ -44,23 +44,21 @@ public class MachineEnvController { @DeleteMapping("/delete") @Operation(summary = "删除机器的环境变量") - public CommonResult deleteByMachineId( - @RequestParam Long machineId) { - machineEnvService.deleteByMachineId(machineId); + public CommonResult deleteByMachineId(@RequestParam Long machineEvnId) { + machineEnvService.deleteByMachineId(machineEvnId); return success(true); } @DeleteMapping("/deleteList") @Operation(summary = "批量删除机器环境变量") - public CommonResult deleteList(@RequestParam List ids){ + public CommonResult deleteList(@RequestParam String ids){ machineEnvService.deleteList(ids); return success(true); } @GetMapping("/getByMachineId") @Operation(summary = "获取机器的环境变量") - public CommonResult getByMachineId( - @RequestParam Long machineId) { + public CommonResult getByMachineId(@RequestParam Long machineId) { return success(machineEnvService.getByMachineId(machineId)); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java index 80106d2a..ef4d7595 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java @@ -6,7 +6,6 @@ import cd.casic.module.machine.entity.MachineInfo; import cd.casic.module.machine.enums.ConnectionStatus; import cd.casic.module.machine.service.MachineInfoService; import cd.casic.module.machine.dto.MachineInfoDto; -import cd.casic.module.machine.pojo.SuccessResponseData; import cd.casic.module.machine.utils.PageResult; import io.swagger.v3.oas.annotations.Operation; @@ -33,7 +32,7 @@ public class MachineInfoController { } - @GetMapping("/list") + @PostMapping("/list") @Operation(summary = "获取机器信息列表") public CommonResult> list(@RequestBody MachineInfoDto machineInfoDto) { return success(machineInfoService.listMachineInfo(machineInfoDto)); @@ -47,26 +46,26 @@ public class MachineInfoController { @PutMapping("/updateStatus") @Operation(summary = "机器启用/停用") - public CommonResult updateStatus(@RequestParam("machineInfoId") Long machineInfoId, @RequestParam("status") String status) { - return success(machineInfoService.updateStatus(machineInfoId, status)); + public CommonResult updateStatus(@RequestBody MachineInfoDto machineInfoDto) { + return success(machineInfoService.updateStatus(machineInfoDto)); } @PutMapping("/bindingSecretKey") @Operation(summary = "绑定密钥") - public CommonResult bindingSecretKey(@RequestParam("machineInfoId") Long machineInfoId, @RequestParam("secretKeyId") Long secretKeyId) { - return success(machineInfoService.bindingSecretKey(machineInfoId, secretKeyId)); + public CommonResult bindingSecretKey(@RequestBody MachineInfoDto machineInfoDto) { + return success(machineInfoService.bindingSecretKey(machineInfoDto)); } @DeleteMapping("/delete") @Operation(summary = "机器信息删除") - public CommonResult delete(@RequestParam("machineInfoId") Long machineInfoId) { + public CommonResult delete(@RequestParam Long machineInfoId) { machineInfoService.deleteMachineInfo(machineInfoId); return success(true); } @DeleteMapping("/deleteList") @Operation(summary = "批量删除机器信息") - public CommonResult deleteList(@RequestParam("machineInfoIds") List machineInfoIds) { + public CommonResult deleteList(@RequestParam String machineInfoIds) { machineInfoService.deleteList(machineInfoIds); return success(true); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java index 847dd9f3..5bf9cf08 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java @@ -33,7 +33,7 @@ public class MachineProxyController { return success(true); } - @GetMapping("/list") + @PostMapping("/list") @Operation(summary ="获取代理列表") public CommonResult list(MachineProxyDTO machineProxyDTO) { return success(machineProxyService.list(machineProxyDTO)); @@ -52,18 +52,17 @@ public class MachineProxyController { return success(machineProxyService.getStatusStatistics()); } - @PutMapping("/updateConfig") - @Operation(summary ="更新代理配置") + @PutMapping("/update") + @Operation(summary ="更新代理信息") public CommonResult updateConfig(@RequestBody MachineProxyDTO machineProxyDTO) { - machineProxyService.updateConfig(machineProxyDTO); + machineProxyService.update(machineProxyDTO); return success(true); } @DeleteMapping("/batch") @Operation(summary ="批量删除代理") - public CommonResult deleteBatch(@RequestParam List ids) { - machineProxyService.delete(ids); - return success(true); + public CommonResult deleteBatch(@RequestParam String ids) { + return success(machineProxyService.delete(ids)); } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java index cb352d41..ba8f98f4 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java @@ -19,8 +19,6 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.util.List; - import static cd.casic.framework.commons.pojo.CommonResult.success; @RestController @@ -38,8 +36,8 @@ public class SecretKeyController { @PutMapping("/bindingMachine") @Operation(summary ="绑定机器") - public CommonResult bindingMachine(@RequestParam("secretKeyId") Long secretKeyId, @RequestParam("machineInfoIds") List machineInfoIds) { - secretKeyService.bindingMachine(secretKeyId, machineInfoIds); + public CommonResult bindingMachine(@RequestBody SecretKeyDto secretKeyDto) { + secretKeyService.bindingMachine(secretKeyDto); return success(true); } @@ -52,17 +50,17 @@ public class SecretKeyController { @DeleteMapping("/delete") @Operation(summary ="删除密钥") - public CommonResult delete(@RequestParam("secretKeyId") Long secretKeyId) { + public CommonResult delete(@RequestParam Long secretKeyId) { return success(secretKeyService.deleteSecretKey(secretKeyId)); } @DeleteMapping("/deleteList") @Operation(summary ="批量删除密钥") - public CommonResult deleteList(@RequestParam("secretKeyId") List secretKeyIds) { + public CommonResult deleteList(@RequestParam String secretKeyIds) { return success(secretKeyService.deleteList(secretKeyIds)); } - @GetMapping("/list") + @PostMapping("/list") @Operation(summary ="获取密钥信息列表") public CommonResult> list(@RequestBody SecretKeyDto secretKeyDto) { return success(secretKeyService.listSecretKey(secretKeyDto)); 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 index f0da272b..bb2204a6 100644 --- 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 @@ -19,27 +19,10 @@ public class MachineEnvDTO extends PageDto implements Serializable { private Long id; private String envKey; private String envValue; - private Integer sensitive;//(1敏感,0不敏感) private String description; private Long machineId; private Date createDate; private Date updateDate; private String sortField; private String sortDirection; - - - /** - * 获取脱敏后的环境变量值 - */ - public String getMaskedValue() { - if (sensitive==1 || envValue == null) { - return envValue; - } - int length = envValue.length(); - if (length <= 4) { - return "****"; - } else { - return envValue.substring(0, 2) + "****" + envValue.substring(length - 2); - } - } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineInfoDto.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineInfoDto.java index d39a483e..cd5648a1 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineInfoDto.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineInfoDto.java @@ -11,7 +11,7 @@ import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor -public class MachineInfoDto extends cd.casic.module.machine.dto.PageDto { +public class MachineInfoDto extends PageDto { private Long id; private Date createDate; @@ -41,4 +41,6 @@ public class MachineInfoDto extends cd.casic.module.machine.dto.PageDto { private String authenticationType; private String machineInfoType; + + private int isProxy; } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java index dcac8f76..6370edff 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java @@ -23,12 +23,12 @@ public class MachineProxyDTO extends PageDto implements Serializable { private String version; private String status; private Date lastHeartbeatTime; - private String config; private String description; private String hostIp; private String sshPort; private Date createDate; private Date updateDate; + private String password; /** * 计算代理是否在线 diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java index e5aa6c4e..d7fb2beb 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/SecretKeyDto.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.springframework.web.multipart.MultipartFile; import java.util.Date; +import java.util.List; @EqualsAndHashCode(callSuper = true) @Data @@ -33,4 +34,6 @@ public class SecretKeyDto extends PageDto { private Date createDate; private Date updateDate; + + private List machineInfoIds; } 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/entity/MachineEnv.java index 612dad3e..c8c229a4 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/entity/MachineEnv.java @@ -34,11 +34,6 @@ public class MachineEnv extends BaseEntity implements Serializable { */ private String envValue; - /** - * 是否敏感 - */ - @TableField("`sensitive`") - private Integer sensitive;//(1敏感,0不敏感) /** * 描述信息 diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java index b8c21f07..6843dbc4 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java @@ -63,4 +63,7 @@ public class MachineInfo extends BaseEntity{ @TableField(exist = false) private AuthenticationType authenticationType; + + @TableField(value = "is_proxy") + private int isProxy; } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java index 97585314..ef3f80a4 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java @@ -2,6 +2,7 @@ package cd.casic.module.machine.entity; import com.baomidou.mybatisplus.annotation.*; import cd.casic.module.machine.enums.MachineInfoStatus; import cd.casic.module.machine.enums.MachineProxyType; +import jakarta.validation.Valid; import lombok.*; import java.io.Serializable; @@ -19,8 +20,10 @@ import java.util.Date; public class MachineProxy extends BaseEntity implements Serializable { private static final long serialVersionUID = 1L; + @TableField(value = "host_ip") private String hostIp; + @TableField(value = "ssh_port") private String sshPort; /** @@ -29,11 +32,13 @@ public class MachineProxy extends BaseEntity implements Serializable { @TableField(exist = false) private MachineProxyType proxyType; + @TableField(value = "proxy_type_code") private int proxyTypeCode; /** * 代理版本 */ + @TableField(value = "version") private String version; /** @@ -42,22 +47,23 @@ public class MachineProxy extends BaseEntity implements Serializable { @TableField(exist = false) private MachineInfoStatus status; - + @TableField(value = "status_code") private int statusCode; + @TableField(value = "username") + private String username; + /** * 最后心跳时间 */ private Date lastHeartbeatTime; - /** - * 代理配置 (JSON格式) - */ - private String config; - + @TableField(value = "password") + private String password; /** * 描述信息 */ + @TableField(value = "description") private String description; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ErrorResponseData.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ErrorResponseData.java deleted file mode 100644 index c9468b20..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ErrorResponseData.java +++ /dev/null @@ -1,26 +0,0 @@ -package cd.casic.module.machine.pojo; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class ErrorResponseData extends ResponseData { - - /** - * 异常的具体类名称 - */ - private String exceptionClazz; - - public ErrorResponseData(String message) { - super(false, DEFAULT_ERROR_CODE, message, null); - } - - public ErrorResponseData(Integer code, String message) { - super(false, code, message, null); - } - - public ErrorResponseData(Integer code, String message, Object object) { - super(false, code, message, object); - } -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ResponseData.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ResponseData.java deleted file mode 100644 index ad74cb81..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/ResponseData.java +++ /dev/null @@ -1,72 +0,0 @@ -package cd.casic.module.machine.pojo; - -import lombok.Data; - -/** - * 响应结果数据 - */ -@Data -public class ResponseData { - - public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; - - public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; - - public static final Integer DEFAULT_SUCCESS_CODE = 200; - - public static final Integer DEFAULT_ERROR_CODE = 500; - - /** - * 请求是否成功 - */ - private Boolean success; - - /** - * 响应状态码 - */ - private Integer code; - - /** - * 响应信息 - */ - private String message; - - /** - * 响应对象 - */ - private Object data; - - public ResponseData() { - } - - public ResponseData(Boolean success, Integer code, String message, Object data) { - this.success = success; - this.code = code; - this.message = message; - this.data = data; - } - - public static SuccessResponseData success() { - return new SuccessResponseData(); - } - - public static SuccessResponseData success(Object object) { - return new SuccessResponseData(object); - } - - public static SuccessResponseData success(Integer code, String message, Object object) { - return new SuccessResponseData(code, message, object); - } - - public static ErrorResponseData error(String message) { - return new ErrorResponseData(message); - } - - public static ErrorResponseData error(Integer code, String message) { - return new ErrorResponseData(code, message); - } - - public static ErrorResponseData error(Integer code, String message, Object object) { - return new ErrorResponseData(code, message, object); - } -} diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/SuccessResponseData.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/SuccessResponseData.java deleted file mode 100644 index f2ecb844..00000000 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/pojo/SuccessResponseData.java +++ /dev/null @@ -1,16 +0,0 @@ -package cd.casic.module.machine.pojo; - -public class SuccessResponseData extends ResponseData { - - public SuccessResponseData() { - super(true, DEFAULT_SUCCESS_CODE, DEFAULT_SUCCESS_MESSAGE, null); - } - - public SuccessResponseData(Object object) { - super(true, DEFAULT_SUCCESS_CODE, DEFAULT_SUCCESS_MESSAGE, object); - } - - public SuccessResponseData(Integer code, String message, Object object) { - super(true, code, message, object); - } -} \ 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 f27f980f..14d79992 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 @@ -18,9 +18,8 @@ public interface MachineEnvService extends IService { boolean add(MachineEnvDTO machineEnvDTO); /** * 删除机器的环境变量 - * @param machineId 机器ID */ - void deleteByMachineId(Long machineId); + void deleteByMachineId(Long machineEvnId); /** * 获取机器的环境变量 @@ -34,7 +33,7 @@ public interface MachineEnvService extends IService { */ PageResult listEnv(MachineEnvDTO machineEnvDTO); - void deleteList(List ids); + void deleteList(String ids); boolean update(MachineEnvDTO machineEnvDTO); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java index d4bc8a78..fa532b85 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java @@ -16,11 +16,11 @@ public interface MachineInfoService extends IService { boolean updateMachineInfo(MachineInfoDto machineInfoDto); - boolean updateStatus(Long machineInfoId, String status); + boolean updateStatus(MachineInfoDto machineInfoDto); - boolean bindingSecretKey( Long machineInfoId, Long secretKeyId); + boolean bindingSecretKey(MachineInfoDto machineInfoDto); - void deleteList(List machineInfoIds); + void deleteList(String machineInfoIds); void deleteMachineInfo(Long machineInfoId); diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java index 532a790d..cc1bd2e5 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java @@ -33,15 +33,14 @@ public interface MachineProxyService extends IService { /** * 更新代理配置 */ - void updateConfig(MachineProxyDTO machineProxyDTO); - + void update(MachineProxyDTO machineProxyDTO); /** * 批量删除代理 * @param proxyIds 代理ID列表 */ - void delete(List proxyIds); + String delete(String proxyIds); PageResult list(MachineProxyDTO machineProxyDTO); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java index b0cae86a..5a6d2da3 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java @@ -13,7 +13,7 @@ import java.util.List; public interface SecretKeyService extends IService { boolean addSecretKey(SecretKeyDto secretKeyDto, MultipartFile file); - void bindingMachine(Long secretKeyId, List machineInfoIds); + void bindingMachine(SecretKeyDto secretKeyDto); boolean updateSecretKey(SecretKeyDto secretKeyDto,MultipartFile file); @@ -23,6 +23,6 @@ public interface SecretKeyService extends IService { ResponseEntity downloadSecretKeyFile(Long secretKeyId); - boolean deleteList(List secretKeyIds); + boolean deleteList(String secretKeyIds); } 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 d2e3805c..f5dd8f70 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 @@ -15,6 +15,7 @@ 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; @@ -49,8 +50,8 @@ public class MachineEnvServiceImpl extends ServiceImpl ids) { - this.machineEnvMapper.deleteBatchIds(ids); + 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); } @Override @@ -150,7 +151,6 @@ public class MachineEnvServiceImpl extends ServiceImpl ids) { + public String delete(String ids) { + List machineProxyIds = Arrays.stream(ids.split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .map(Long::parseLong) + .toList(); // 参数校验 - if (CollectionUtils.isEmpty(ids)) { + if (CollectionUtils.isEmpty(machineProxyIds)) { throw new ServiceException(ServiceException.PARAMETER_ERROR,"参数错误"); } // 查询在线代理 List onlineProxies = list(new LambdaQueryWrapper() - .in(MachineProxy::getId, ids) + .in(MachineProxy::getId, machineProxyIds) .eq(MachineProxy::getStatusCode, MachineProxyStatus.ONLINE.getCode())); if (!CollectionUtils.isEmpty(onlineProxies)) { List onlineIds = onlineProxies.stream() - .map(MachineProxy::getId) - .collect(Collectors.toList()); - throw new IllegalArgumentException("以下代理处于在线状态,无法删除: " + String.join( ",", (CharSequence) onlineIds)); + .map(MachineProxy::getId) + .toList(); + + // 将 [10, 9] 转换为 "10, 9" + String idStr = onlineIds.toString().replaceAll("[\\[\\]]", ""); + return "以下代理处于在线状态,无法删除: " + idStr; } // 批量逻辑删除 remove(new LambdaQueryWrapper() - .in(MachineProxy::getId, ids)); + .in(MachineProxy::getId, machineProxyIds)); + return ""; } @Override @@ -132,7 +139,7 @@ public class MachineProxyServiceImpl extends ServiceImpl machineProxyDtos = page.getRecords().stream().map(machineProxy -> { MachineProxyDTO dto = new MachineProxyDTO(); BeanUtils.copyProperties(machineProxy, dto); - dto.setProxyType(EnumUtils.getEnumByCode(machineProxy.getStatusCode(), MachineProxyType.class).getMessage()); + dto.setProxyType(EnumUtils.getEnumByCode(machineProxy.getProxyTypeCode(), MachineProxyType.class).getMessage()); dto.setStatus(EnumUtils.getEnumByCode(machineProxy.getStatusCode(), MachineProxyStatus.class).getMessage()); return dto; }).toList(); @@ -148,21 +155,21 @@ public class MachineProxyServiceImpl extends ServiceImpl getMachineProxyQueryWrapper(MachineProxyDTO machineProxyDTO){ QueryWrapper queryWrapper = new QueryWrapper<>(); if (machineProxyDTO.getHostIp() != null && !machineProxyDTO.getHostIp().isEmpty()) { - queryWrapper.eq("host_ip", machineProxyDTO.getHostIp()); + queryWrapper.like("host_ip", machineProxyDTO.getHostIp()); } if (machineProxyDTO.getSshPort() != null && !machineProxyDTO.getSshPort().isEmpty()) { - queryWrapper.eq("ssh_port", machineProxyDTO.getSshPort()); + queryWrapper.like("ssh_port", machineProxyDTO.getSshPort()); } if (machineProxyDTO.getUsername() != null && !machineProxyDTO.getUsername().isEmpty()) { - queryWrapper.eq("username", machineProxyDTO.getUsername()); + queryWrapper.like("username", machineProxyDTO.getUsername()); } if (machineProxyDTO.getDescription() != null && !machineProxyDTO.getDescription().isEmpty()) { - queryWrapper.eq("description", machineProxyDTO.getDescription()); + queryWrapper.like("description", machineProxyDTO.getDescription()); } if (machineProxyDTO.getStatus() != null && !machineProxyDTO.getStatus().isEmpty()) { - queryWrapper.eq("status_code", EnumUtils.getEnumByMessage(machineProxyDTO.getStatus(),MachineProxyStatus.class).getCode()); + queryWrapper.like("status_code", EnumUtils.getEnumByMessage(machineProxyDTO.getStatus(),MachineProxyStatus.class).getCode()); } - return queryWrapper; + return queryWrapper.orderByDesc("create_date"); } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineinfoServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineinfoServiceImpl.java index cb246a6b..53885c2a 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineinfoServiceImpl.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineinfoServiceImpl.java @@ -17,16 +17,21 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; @Slf4j @Service @@ -121,22 +126,27 @@ public class MachineinfoServiceImpl extends ServiceImpl updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", machineInfoId).set("status_code", EnumUtils.getEnumByMessage(status, MachineInfoStatus.class).getCode()); + updateWrapper.eq("id", machineInfoDto.getId()).set("status_code", EnumUtils.getEnumByMessage(machineInfoDto.getStatus(), MachineInfoStatus.class).getCode()); return this.update(updateWrapper); } @Override - public boolean bindingSecretKey(Long machineInfoId, Long secretKeyId) { + public boolean bindingSecretKey(MachineInfoDto machineInfoDto) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", machineInfoId).set("secret_key_id", secretKeyId).set("authentication_type_code",2); + updateWrapper.eq("id", machineInfoDto.getId()).set("secret_key_id", machineInfoDto.getSecretKeyId()).set("authentication_type_code",2); return this.update(updateWrapper); } @Override - public void deleteList(List machineInfoIds) { - machineInfoMapper.selectBatchIds(machineInfoIds).forEach(machineInfo -> { + public void deleteList(String machineInfoIds) { + List machineInfoIdList = Arrays.stream(machineInfoIds.split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .map(Long::parseLong) + .collect(Collectors.toList()); + machineInfoMapper.selectBatchIds(machineInfoIdList).forEach(machineInfo -> { if (machineInfo.getStatusCode() == 1){ this.removeById(machineInfo.getId()); } @@ -168,7 +178,7 @@ public class MachineinfoServiceImpl extends ServiceImpl machineInfoIds) { - List machineInfos = machineInfoService.listByIds(machineInfoIds); - machineInfos.forEach(machineInfo -> machineInfo.setSecretKeyId(secretKeyId)); + public void bindingMachine(SecretKeyDto secretKeyDto) { + List machineInfos = machineInfoService.listByIds(secretKeyDto.getMachineInfoIds()); + machineInfos.forEach(machineInfo -> machineInfo.setSecretKeyId(secretKeyDto.getId())); machineInfoService.updateBatchById(machineInfos); } @@ -97,6 +98,7 @@ public class SecretKeyServiceImpl extends ServiceImpl page = secretServiceMapper.selectPage(new Page<>(secretKeyDto.getPageIndex(), secretKeyDto.getPageSize()), queryWrapper); return new PageResult<>( page.getCurrent(), @@ -114,7 +116,12 @@ public class SecretKeyServiceImpl extends ServiceImpl secretKeyIds) { + public boolean deleteList(String ids) { + List secretKeyIds = Arrays.stream(ids.split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .map(Long::parseLong) + .toList(); List secretKeys = this.listByIds(secretKeyIds); // 提交异步任务到线程池 FILE_DELETE_EXECUTOR.execute(() -> { From ea35ed1f0bbde61682f6fd1aa7b39b5967a497fe Mon Sep 17 00:00:00 2001 From: zyj <2660555181@qq.com> Date: Wed, 4 Jun 2025 14:19:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F=E5=8C=96=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MachineEnvController.java | 5 +- .../controller/MachineInfoController.java | 16 ++--- .../controller/MachineProxyController.java | 17 ++--- .../controller/SecretKeyController.java | 17 ++--- .../module/machine/dto/MachineProxyDTO.java | 3 +- .../cd/casic/module/machine/dto/PageDto.java | 2 +- .../module/machine/entity/MachineInfo.java | 2 +- .../module/machine/entity/MachineProxy.java | 5 +- .../machine/enums/MachineProxyStatus.java | 10 +-- .../machine/enums/MachineProxyType.java | 6 +- .../machine/enums/RequestExceptionEnum.java | 4 +- .../machine/handler/ConnectionSession.java | 60 ++++++++-------- .../machine/service/MachineEnvService.java | 2 + .../machine/service/MachineInfoService.java | 19 +++-- .../machine/service/MachineProxyService.java | 5 +- .../machine/service/SecretKeyService.java | 2 +- .../service/impl/MachineEnvServiceImpl.java | 32 ++++----- .../service/impl/MachineProxyServiceImpl.java | 69 ++++++++----------- .../service/impl/MachineinfoServiceImpl.java | 27 ++++---- .../service/impl/SecretKeyServiceImpl.java | 21 +++--- .../module/machine/utils/AliOssUtil.java | 28 ++++---- 21 files changed, 177 insertions(+), 175 deletions(-) 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 d068ee04..0a60b328 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 @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; + import java.util.List; import static cd.casic.framework.commons.pojo.CommonResult.success; @@ -51,7 +52,7 @@ public class MachineEnvController { @DeleteMapping("/deleteList") @Operation(summary = "批量删除机器环境变量") - public CommonResult deleteList(@RequestParam String ids){ + public CommonResult deleteList(@RequestParam String ids) { machineEnvService.deleteList(ids); return success(true); } @@ -64,7 +65,7 @@ public class MachineEnvController { @PostMapping("/list") - @Operation(summary ="获取环境变量列表") + @Operation(summary = "获取环境变量列表") public CommonResult list(@RequestBody MachineEnvDTO machineEnvDTO) { return success(machineEnvService.listEnv(machineEnvDTO)); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java index ef4d7595..a77e1025 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineInfoController.java @@ -103,8 +103,8 @@ public class MachineInfoController { @PostMapping("/execute/{sessionId}") @Operation(summary = "执行远程命令") public CommonResult executeCommand( - @PathVariable String sessionId, - @RequestBody String command) { + @PathVariable String sessionId, + @RequestBody String command) { return success(machineInfoService.executeCommand(sessionId, command)); } @@ -112,18 +112,18 @@ public class MachineInfoController { @PostMapping("/upload/{sessionId}") @Operation(summary = "上传文件到远程机器") public CommonResult uploadFile( - @PathVariable String sessionId, - @RequestParam String localFilePath, - @RequestParam String remoteFilePath) { + @PathVariable String sessionId, + @RequestParam String localFilePath, + @RequestParam String remoteFilePath) { return success(machineInfoService.uploadFile(sessionId, localFilePath, remoteFilePath)); } @PostMapping("/download/{sessionId}") @Operation(summary = "从远程机器下载文件") public CommonResult downloadFile( - @PathVariable String sessionId, - @RequestParam String remoteFilePath, - @RequestParam String localFilePath) { + @PathVariable String sessionId, + @RequestParam String remoteFilePath, + @RequestParam String localFilePath) { return success(machineInfoService.downloadFile(sessionId, remoteFilePath, localFilePath)); } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java index 5bf9cf08..fa573046 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/MachineProxyController.java @@ -27,42 +27,43 @@ public class MachineProxyController { private MachineProxyService machineProxyService; @PostMapping("/register") - @Operation(summary ="注册新的机器代理") + @Operation(summary = "注册新的机器代理") public CommonResult register(@RequestBody MachineProxyDTO machineProxyDTO) { machineProxyService.register(machineProxyDTO); return success(true); } @PostMapping("/list") - @Operation(summary ="获取代理列表") - public CommonResult list(MachineProxyDTO machineProxyDTO) { + @Operation(summary = "获取代理列表") + public CommonResult list(@RequestBody MachineProxyDTO machineProxyDTO) { return success(machineProxyService.list(machineProxyDTO)); } @PutMapping("/updateStatus") - @Operation(summary ="更新代理状态") + @Operation(summary = "更新代理状态") public CommonResult updateStatus(@RequestBody MachineProxyDTO machineProxyDTO) { machineProxyService.updateStatus(machineProxyDTO); return success(true); } @GetMapping("/statistics/status") - @Operation(summary ="获取所有代理的状态统计") + @Operation(summary = "获取所有代理的状态统计") public CommonResult getStatusStatistics() { return success(machineProxyService.getStatusStatistics()); } @PutMapping("/update") - @Operation(summary ="更新代理信息") + @Operation(summary = "更新代理信息") public CommonResult updateConfig(@RequestBody MachineProxyDTO machineProxyDTO) { machineProxyService.update(machineProxyDTO); return success(true); } @DeleteMapping("/batch") - @Operation(summary ="批量删除代理") + @Operation(summary = "批量删除代理") public CommonResult deleteBatch(@RequestParam String ids) { - return success(machineProxyService.delete(ids)); + machineProxyService.delete(ids); + return success(true); } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java index ba8f98f4..68a2bc7d 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java @@ -1,4 +1,5 @@ package cd.casic.module.machine.controller; + import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.module.machine.entity.SecretKey; import cd.casic.module.machine.service.SecretKeyService; @@ -23,51 +24,51 @@ import static cd.casic.framework.commons.pojo.CommonResult.success; @RestController @RequestMapping("/api/secretKey") -@Tag(name = "密钥管理") +@Tag(name = "密钥管理") public class SecretKeyController { @Resource private SecretKeyService secretKeyService; @PostMapping(value = "/add", consumes = "multipart/form-data") - @Operation(summary ="新增密钥") + @Operation(summary = "新增密钥") public CommonResult add(@RequestBody SecretKeyDto secretKeyDto, @RequestPart("file") MultipartFile file) { return success(secretKeyService.addSecretKey(secretKeyDto, file)); } @PutMapping("/bindingMachine") - @Operation(summary ="绑定机器") + @Operation(summary = "绑定机器") public CommonResult bindingMachine(@RequestBody SecretKeyDto secretKeyDto) { secretKeyService.bindingMachine(secretKeyDto); return success(true); } @PutMapping("/update") - @Operation(summary ="编辑密钥信息") + @Operation(summary = "编辑密钥信息") public CommonResult update(@RequestBody SecretKeyDto secretKeyDto, @RequestPart(value = "file", required = false) MultipartFile file) { return success(secretKeyService.updateSecretKey(secretKeyDto, file)); } @DeleteMapping("/delete") - @Operation(summary ="删除密钥") + @Operation(summary = "删除密钥") public CommonResult delete(@RequestParam Long secretKeyId) { return success(secretKeyService.deleteSecretKey(secretKeyId)); } @DeleteMapping("/deleteList") - @Operation(summary ="批量删除密钥") + @Operation(summary = "批量删除密钥") public CommonResult deleteList(@RequestParam String secretKeyIds) { return success(secretKeyService.deleteList(secretKeyIds)); } @PostMapping("/list") - @Operation(summary ="获取密钥信息列表") + @Operation(summary = "获取密钥信息列表") public CommonResult> list(@RequestBody SecretKeyDto secretKeyDto) { return success(secretKeyService.listSecretKey(secretKeyDto)); } @GetMapping("/downloadSecretKeyFile") - @Operation(summary ="下载密钥文件") + @Operation(summary = "下载密钥文件") public CommonResult downloadSecretKeyFile(@RequestParam("secretKeyId") Long secretKeyId) { return success(secretKeyService.downloadSecretKeyFile(secretKeyId).getBody()); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java index 6370edff..f8d78c27 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/dto/MachineProxyDTO.java @@ -1,4 +1,5 @@ package cd.casic.module.machine.dto; + import cd.casic.module.machine.enums.MachineProxyStatus; import lombok.*; @@ -40,6 +41,6 @@ public class MachineProxyDTO extends PageDto implements Serializable { // 假设5分钟内有心跳为在线 long fiveMinutes = 5 * 60 * 1000; return Objects.equals(MachineProxyStatus.ONLINE.getMessage(), status) && - System.currentTimeMillis() - lastHeartbeatTime.getTime() < fiveMinutes; + System.currentTimeMillis() - lastHeartbeatTime.getTime() < fiveMinutes; } } 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/dto/PageDto.java index 9940d98d..219fb4f8 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/dto/PageDto.java @@ -3,7 +3,7 @@ package cd.casic.module.machine.dto; import lombok.Data; @Data -public class PageDto{ +public class PageDto { private int pageIndex = 1; private int pageSize = 10; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java index 6843dbc4..8aa53f56 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineInfo.java @@ -15,7 +15,7 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @TableName(value = "machine_info") -public class MachineInfo extends BaseEntity{ +public class MachineInfo extends BaseEntity { @TableField(value = "name") private String name; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java index ef3f80a4..f17e251a 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/entity/MachineProxy.java @@ -1,4 +1,6 @@ package cd.casic.module.machine.entity; + +import cd.casic.module.machine.enums.MachineProxyStatus; import com.baomidou.mybatisplus.annotation.*; import cd.casic.module.machine.enums.MachineInfoStatus; import cd.casic.module.machine.enums.MachineProxyType; @@ -45,7 +47,7 @@ public class MachineProxy extends BaseEntity implements Serializable { * 代理状态 (online, offline, installing, updating, error) */ @TableField(exist = false) - private MachineInfoStatus status; + private MachineProxyStatus status; @TableField(value = "status_code") private int statusCode; @@ -67,5 +69,4 @@ public class MachineProxy extends BaseEntity implements Serializable { private String description; - } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyStatus.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyStatus.java index 7478e959..dc7acd77 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyStatus.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyStatus.java @@ -10,11 +10,11 @@ public enum MachineProxyStatus implements CodeEnum { /** * 代理状态 (online, offline, installing, updating, error) */ - ONLINE(1,"online"), - OFFLINE(2,"offline"), - INSTALLING(3,"installing"), - UPDATING(4,"updating"), - ERROR(5,"error"); + ONLINE(1, "online"), + OFFLINE(2, "offline"), + INSTALLING(3, "installing"), + UPDATING(4, "updating"), + ERROR(5, "error"); private final int code; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyType.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyType.java index b6de6358..9cba5df2 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyType.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/MachineProxyType.java @@ -7,9 +7,9 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum MachineProxyType implements CodeEnum { - HTTP(1,"http"), - SOCKS4(2,"socks4"), - SOCKS5(3,"socks5"); + HTTP(1, "http"), + SOCKS4(2, "socks4"), + SOCKS5(3, "socks5"); private final int code; diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/RequestExceptionEnum.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/RequestExceptionEnum.java index 6f01b6f2..17fb4901 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/RequestExceptionEnum.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/enums/RequestExceptionEnum.java @@ -7,8 +7,8 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum RequestExceptionEnum implements CodeEnum { - REQUEST_TYPE_NOT_JSON(1,"传递参数格式错误,请使用json格式"), - REQUEST_JSON_ERROR(2,"json格式错误"), + REQUEST_TYPE_NOT_JSON(1, "传递参数格式错误,请使用json格式"), + REQUEST_JSON_ERROR(2, "json格式错误"), REQUEST_METHOD_NOT_POST(3, "不支持该请求方法,请求方法应为POST"), REQUEST_METHOD_NOT_GET(4, "不支持该请求方法,请求方法应为GET"), PARAM_ERROR(5, "参数错误"); diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java index ddfa59d4..0d52f459 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/handler/ConnectionSession.java @@ -62,13 +62,13 @@ public class ConnectionSession implements AutoCloseable { doConnect(); status = ConnectionStatus.CONNECTED; log.info("SSH connection established successfully to {} (attempt {}/{})", - machineInfo.getHostIp(), attempt, RETRY_COUNT); + machineInfo.getHostIp(), attempt, RETRY_COUNT); return; } catch (JSchException e) { lastException = e; status = ConnectionStatus.CONNECTION_ERROR; log.error("SSH connection attempt {}/{} failed: {}", - attempt, RETRY_COUNT, e.getMessage()); + attempt, RETRY_COUNT, e.getMessage()); // 认证失败直接退出,无需重试 if (e.getMessage().contains("Auth fail")) { @@ -105,9 +105,9 @@ public class ConnectionSession implements AutoCloseable { // 创建SSH会话 sshSession = jsch.getSession( - machineInfo.getUsername(), - machineInfo.getHostIp(), - machineInfo.getSshPort() != null ? machineInfo.getSshPort() : 22 + machineInfo.getUsername(), + machineInfo.getHostIp(), + machineInfo.getSshPort() != null ? machineInfo.getSshPort() : 22 ); // 配置连接参数 @@ -120,7 +120,7 @@ public class ConnectionSession implements AutoCloseable { /** * 配置认证方式(密码或密钥) */ - private void configureAuthentication(JSch jsch) throws JSchException{ + private void configureAuthentication(JSch jsch) throws JSchException { if (machineInfo.getAuthenticationType() == AuthenticationType.SECRET_KEY) { // 密钥认证 if (machineInfo.getSecretKeyId() == null) { @@ -134,10 +134,10 @@ public class ConnectionSession implements AutoCloseable { // 加载私钥(支持密码短语,可从配置中获取) jsch.addIdentity( - machineInfo.getName(), - privateKeyContent.getBytes(StandardCharsets.UTF_8), - null, - null // 密码短语,可为null + machineInfo.getName(), + privateKeyContent.getBytes(StandardCharsets.UTF_8), + null, + null // 密码短语,可为null ); } else if (machineInfo.getAuthenticationType() == AuthenticationType.PASSWORD) { // 密码认证 @@ -158,7 +158,7 @@ public class ConnectionSession implements AutoCloseable { // 安全增强:默认验证主机密钥 if (isTrustedEnvironment()) { log.warn("Running in trusted environment - disabling strict host key checking for {}", - machineInfo.getHostIp()); + machineInfo.getHostIp()); config.put("StrictHostKeyChecking", "no"); } else { config.put("StrictHostKeyChecking", "yes"); @@ -261,7 +261,7 @@ public class ConnectionSession implements AutoCloseable { // 使用线程中断机制实现超时控制 Thread readerThread = new Thread(() -> { - int bytesRead ; + int bytesRead; try { while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); @@ -349,10 +349,10 @@ public class ConnectionSession implements AutoCloseable { // 使用更健壮的上传方式 channel.put( - new FileInputStream(localFile), - remoteFilePath, - new ProgressMonitorAdapter(localFile.length()), - ChannelSftp.OVERWRITE + new FileInputStream(localFile), + remoteFilePath, + new ProgressMonitorAdapter(localFile.length()), + ChannelSftp.OVERWRITE ); uploadSuccess = true; @@ -361,7 +361,7 @@ public class ConnectionSession implements AutoCloseable { } catch (SftpException e) { log.error("SFTP error during file upload ({} -> {}): {}", - localFilePath, remoteFilePath, e.getMessage(), e); + localFilePath, remoteFilePath, e.getMessage(), e); throw new IOException("SFTP error: " + e.getMessage(), e); } catch (FileNotFoundException e) { log.error("Local file not found during upload: {}", localFilePath, e); @@ -418,16 +418,16 @@ public class ConnectionSession implements AutoCloseable { // 执行下载并监控进度 channel.get( - remoteFilePath, - new FileOutputStream(tempFile).toString(), - new ProgressMonitorAdapter(fileSize), - ChannelSftp.OVERWRITE + remoteFilePath, + new FileOutputStream(tempFile).toString(), + new ProgressMonitorAdapter(fileSize), + ChannelSftp.OVERWRITE ); // 验证下载完整性 if (tempFile.length() != fileSize) { throw new IOException("Download incomplete: expected " + fileSize + - " bytes, but got " + tempFile.length() + " bytes"); + " bytes, but got " + tempFile.length() + " bytes"); } // 重命名临时文件为目标文件(原子操作) @@ -441,7 +441,7 @@ public class ConnectionSession implements AutoCloseable { } catch (SftpException e) { log.error("SFTP error during file download ({} -> {}): {}", - remoteFilePath, localFilePath, e.getMessage(), e); + remoteFilePath, localFilePath, e.getMessage(), e); if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { throw new FileNotFoundException("Remote file not found: " + remoteFilePath); } @@ -482,11 +482,13 @@ public class ConnectionSession implements AutoCloseable { log.debug("Created remote directory: {}", directory); } } + // 获取路径的父目录 private String getParentDirectory(String path) { int lastSlash = path.lastIndexOf('/'); return lastSlash > 0 ? path.substring(0, lastSlash) : ""; } + // 断开SFTP通道 private void disconnectChannel(Channel channel) { if (channel != null && channel.isConnected()) { @@ -513,6 +515,7 @@ public class ConnectionSession implements AutoCloseable { disconnectChannel(channel); } } + // 增强的进度监控器 private static class ProgressMonitorAdapter implements SftpProgressMonitor { private final long totalBytes; @@ -538,7 +541,7 @@ public class ConnectionSession implements AutoCloseable { String speedStr = formatTransferSpeed(speed); log.debug("Upload progress: {}% ({}/{} bytes, {})", - progress, bytesWritten, totalBytes, speedStr); + progress, bytesWritten, totalBytes, speedStr); lastProgress = progress; } @@ -552,7 +555,7 @@ public class ConnectionSession implements AutoCloseable { String speedStr = formatTransferSpeed(speed); log.info("Upload completed: {} bytes in {} ms (avg speed: {})", - totalBytes, elapsedTime, speedStr); + totalBytes, elapsedTime, speedStr); } @Override @@ -575,13 +578,12 @@ public class ConnectionSession implements AutoCloseable { } - /** * 检查连接状态 */ public ConnectionStatus getStatus() { if (status == ConnectionStatus.CONNECTED && - (sshSession == null || !sshSession.isConnected())) { + (sshSession == null || !sshSession.isConnected())) { status = ConnectionStatus.DISCONNECTED; } return status; @@ -592,8 +594,8 @@ public class ConnectionSession implements AutoCloseable { */ public boolean isConnected() { return status == ConnectionStatus.CONNECTED && - sshSession != null && - sshSession.isConnected(); + sshSession != null && + sshSession.isConnected(); } 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 14d79992..e71ad993 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 @@ -16,6 +16,7 @@ public interface MachineEnvService extends IService { * 创建或更新机器的环境变量(一对一关系) */ boolean add(MachineEnvDTO machineEnvDTO); + /** * 删除机器的环境变量 */ @@ -23,6 +24,7 @@ public interface MachineEnvService extends IService { /** * 获取机器的环境变量 + * * @param machineId 机器ID * @return 环境变量DTO */ diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java index fa532b85..6da0e94b 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineInfoService.java @@ -25,9 +25,9 @@ public interface MachineInfoService extends IService { void deleteMachineInfo(Long machineInfoId); - /** * 测试机器连接 + * * @param machineInfo 机器信息 * @return 连接是否成功 */ @@ -35,6 +35,7 @@ public interface MachineInfoService extends IService { /** * 获取机器连接状态 + * * @param machineName 机器名称 * @return 连接状态 */ @@ -42,12 +43,14 @@ public interface MachineInfoService extends IService { /** * 获取所有连接状态 + * * @return 机器名称到连接状态的映射 */ Map getAllConnectionStatus(); /** * 建立机器连接 + * * @param machineInfo 机器信息 * @return 连接会话ID */ @@ -55,6 +58,7 @@ public interface MachineInfoService extends IService { /** * 断开机器连接 + * * @param sessionId 会话ID * @return 操作结果 */ @@ -62,16 +66,18 @@ public interface MachineInfoService extends IService { /** * 执行远程命令 + * * @param sessionId 会话ID - * @param command 命令 + * @param command 命令 * @return 命令执行结果 */ String executeCommand(String sessionId, String command); /** * 上传文件到远程机器 - * @param sessionId 会话ID - * @param localFilePath 本地文件路径 + * + * @param sessionId 会话ID + * @param localFilePath 本地文件路径 * @param remoteFilePath 远程文件路径 * @return 操作结果 */ @@ -79,9 +85,10 @@ public interface MachineInfoService extends IService { /** * 从远程机器下载文件 - * @param sessionId 会话ID + * + * @param sessionId 会话ID * @param remoteFilePath 远程文件路径 - * @param localFilePath 本地文件路径 + * @param localFilePath 本地文件路径 * @return 操作结果 */ boolean downloadFile(String sessionId, String remoteFilePath, String localFilePath); diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java index cc1bd2e5..48185546 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/MachineProxyService.java @@ -1,4 +1,5 @@ package cd.casic.module.machine.service; + import cd.casic.module.machine.dto.MachineProxyDTO; import cd.casic.module.machine.entity.MachineProxy; import cd.casic.module.machine.utils.PageResult; @@ -22,7 +23,6 @@ public interface MachineProxyService extends IService { boolean updateStatus(MachineProxyDTO machineProxyDTO); - /** * 获取所有代理的状态统计 * @@ -38,9 +38,10 @@ public interface MachineProxyService extends IService { /** * 批量删除代理 + * * @param proxyIds 代理ID列表 */ - String delete(String proxyIds); + void delete(String proxyIds); PageResult list(MachineProxyDTO machineProxyDTO); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java index 5a6d2da3..95747cc7 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java @@ -15,7 +15,7 @@ public interface SecretKeyService extends IService { void bindingMachine(SecretKeyDto secretKeyDto); - boolean updateSecretKey(SecretKeyDto secretKeyDto,MultipartFile file); + boolean updateSecretKey(SecretKeyDto secretKeyDto, MultipartFile file); boolean deleteSecretKey(Long secretKeyId); 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 f5dd8f70..fe0d14e8 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,4 +1,5 @@ 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; @@ -32,13 +33,13 @@ public class MachineEnvServiceImpl extends ServiceImpl() - .eq(MachineEnv::getMachineId, machineId) + new LambdaQueryWrapper() + .eq(MachineEnv::getMachineId, machineId) ); return machineEnv != null ? convertToDTO(machineEnv) : null; @@ -115,17 +115,17 @@ public class MachineEnvServiceImpl extends ServiceImpl dtoList = page.getRecords().stream() - .map(this::convertToDTO) - .collect(Collectors.toList()); + .map(this::convertToDTO) + .collect(Collectors.toList()); // 构建分页结果 return PageResult.builder() - .pageNum(page.getCurrent()) - .pageSize(page.getSize()) - .total(page.getTotal()) - .pages(page.getPages()) - .list(dtoList) - .build(); + .pageNum(page.getCurrent()) + .pageSize(page.getSize()) + .total(page.getTotal()) + .pages(page.getPages()) + .list(dtoList) + .build(); } @Override @@ -141,7 +141,7 @@ public class MachineEnvServiceImpl extends ServiceImpl getStatusStatistics() { List proxyList = list(); @@ -72,35 +73,34 @@ public class MachineProxyServiceImpl extends ServiceImpl EnumUtils.getEnumByCode(proxy.getStatusCode(), MachineProxyStatus.class).getMessage()) - .collect(Collectors.groupingBy( - Function.identity(), - Collectors.counting() // 统计每个分组的元素数量 - )); + .map(proxy -> EnumUtils.getEnumByCode(proxy.getStatusCode(), MachineProxyStatus.class).getMessage()) + .collect(Collectors.groupingBy( + Function.identity(), + Collectors.counting() // 统计每个分组的元素数量 + )); } @Override public void update(MachineProxyDTO machineProxyDTO) { // 参数校验 if (machineProxyDTO == null) { - throw new ServiceException(ServiceException.MACHINE_PROXY_DTO_NULL,"MachineProxyDTO对象为空"); + throw new ServiceException(ServiceException.MACHINE_PROXY_DTO_NULL, "MachineProxyDTO对象为空"); } MachineProxy machineProxy = new MachineProxy(); BeanUtils.copyProperties(machineProxyDTO, machineProxy); - if (machineProxyDTO.getProxyType()!= null && !machineProxyDTO.getProxyType().isEmpty()){ + if (machineProxyDTO.getProxyType() != null && !machineProxyDTO.getProxyType().isEmpty()) { machineProxy.setProxyTypeCode(EnumUtils.getEnumByMessage(machineProxyDTO.getProxyType(), MachineProxyType.class).getCode()); } - if (machineProxyDTO.getStatus()!= null && !machineProxyDTO.getStatus().isEmpty()){ + if (machineProxyDTO.getStatus() != null && !machineProxyDTO.getStatus().isEmpty()) { machineProxy.setStatusCode(EnumUtils.getEnumByMessage(machineProxyDTO.getStatus(), MachineProxyStatus.class).getCode()); } this.updateById(machineProxy); } - @Override @Transactional(rollbackFor = Exception.class) - public String delete(String ids) { + public void delete(String ids) { List machineProxyIds = Arrays.stream(ids.split(",")) .map(String::trim) .filter(s -> !s.isEmpty()) @@ -108,28 +108,12 @@ public class MachineProxyServiceImpl extends ServiceImpl onlineProxies = list(new LambdaQueryWrapper() - .in(MachineProxy::getId, machineProxyIds) - .eq(MachineProxy::getStatusCode, MachineProxyStatus.ONLINE.getCode())); - - if (!CollectionUtils.isEmpty(onlineProxies)) { - List onlineIds = onlineProxies.stream() - .map(MachineProxy::getId) - .toList(); - - // 将 [10, 9] 转换为 "10, 9" - String idStr = onlineIds.toString().replaceAll("[\\[\\]]", ""); - return "以下代理处于在线状态,无法删除: " + idStr; - } - // 批量逻辑删除 remove(new LambdaQueryWrapper() - .in(MachineProxy::getId, machineProxyIds)); - return ""; + .in(MachineProxy::getId, machineProxyIds) + .ne(MachineProxy::getStatus, MachineProxyStatus.ONLINE.getCode())); } @Override @@ -144,15 +128,15 @@ public class MachineProxyServiceImpl extends ServiceImpl( - page.getCurrent(), - page.getSize(), - page.getTotal(), - page.getPages(), - machineProxyDtos + page.getCurrent(), + page.getSize(), + page.getTotal(), + page.getPages(), + machineProxyDtos ); } - private QueryWrapper getMachineProxyQueryWrapper(MachineProxyDTO machineProxyDTO){ + private QueryWrapper getMachineProxyQueryWrapper(MachineProxyDTO machineProxyDTO) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (machineProxyDTO.getHostIp() != null && !machineProxyDTO.getHostIp().isEmpty()) { queryWrapper.like("host_ip", machineProxyDTO.getHostIp()); @@ -167,7 +151,10 @@ public class MachineProxyServiceImpl extends ServiceImpl implements MachineInfoService { - int ENABLE=1; - int UN_ENABLE=0; + int ENABLE = 1; + int UN_ENABLE = 0; @Resource private MachineInfoMapper machineInfoMapper; @@ -57,6 +57,7 @@ public class MachineinfoServiceImpl extends ServiceImpl 会话ID */ private final Map machineSessionMapping = new ConcurrentHashMap<>(); + @Override public boolean addMachineInfo(MachineInfoDto machineInfoDto) { if (machineInfoDto == null) { @@ -72,8 +73,8 @@ public class MachineinfoServiceImpl extends ServiceImpl updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", machineInfoDto.getId()).set("secret_key_id", machineInfoDto.getSecretKeyId()).set("authentication_type_code",2); + updateWrapper.eq("id", machineInfoDto.getId()).set("secret_key_id", machineInfoDto.getSecretKeyId()).set("authentication_type_code", 2); return this.update(updateWrapper); } @@ -147,7 +148,7 @@ public class MachineinfoServiceImpl extends ServiceImpl { - if (machineInfo.getStatusCode() == 1){ + if (machineInfo.getStatusCode() == 1) { this.removeById(machineInfo.getId()); } }); @@ -156,14 +157,14 @@ public class MachineinfoServiceImpl extends ServiceImpl getMachineInfoQueryWrapper(MachineInfoDto machineInfoDto) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (machineInfoDto.getStatus() != null && !machineInfoDto.getStatus().isEmpty()){ + if (machineInfoDto.getStatus() != null && !machineInfoDto.getStatus().isEmpty()) { queryWrapper.eq("status_code", EnumUtils.getEnumByMessage(machineInfoDto.getStatus(), MachineInfoStatus.class).getCode()); } if (machineInfoDto.getName() != null && !machineInfoDto.getName().isEmpty()) { @@ -182,11 +183,9 @@ public class MachineinfoServiceImpl extends ServiceImpl listSecretKey(SecretKeyDto secretKeyDto) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (secretKeyDto.getName() != null && !secretKeyDto.getName().isEmpty()){ + if (secretKeyDto.getName() != null && !secretKeyDto.getName().isEmpty()) { queryWrapper.like("name", secretKeyDto.getName()); } - if (secretKeyDto.getDescription() != null && !secretKeyDto.getDescription().isEmpty()){ + if (secretKeyDto.getDescription() != null && !secretKeyDto.getDescription().isEmpty()) { queryWrapper.like("description", secretKeyDto.getDescription()); } queryWrapper.orderByDesc("create_date"); Page page = secretServiceMapper.selectPage(new Page<>(secretKeyDto.getPageIndex(), secretKeyDto.getPageSize()), queryWrapper); - return new PageResult<>( + return new PageResult<>( page.getCurrent(), page.getSize(), page.getTotal(), @@ -127,15 +126,15 @@ public class SecretKeyServiceImpl extends ServiceImpl { try { for (SecretKey secretKey : secretKeys) { - if (secretKey.getFileName() != null && !secretKey.getFileName().isEmpty()){ + if (secretKey.getFileName() != null && !secretKey.getFileName().isEmpty()) { aliOssUtil.deleteFile(secretKey.getFileName()); } } } catch (Exception e) { logger.error("异步删除文件失败:{}", e.getMessage()); - throw new ServiceException(ServiceException.DELETE_FILE_FAIL,"异步删除文件失败:"+e.getMessage()); + throw new ServiceException(ServiceException.DELETE_FILE_FAIL, "异步删除文件失败:" + e.getMessage()); } }); - return secretServiceMapper.deleteBatchIds(secretKeyIds) > 0 ; + return secretServiceMapper.deleteBatchIds(secretKeyIds) > 0; } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java index fc185e7e..4bf37ba1 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/AliOssUtil.java @@ -21,12 +21,12 @@ import java.nio.charset.StandardCharsets; @Component -public class AliOssUtil{ +public class AliOssUtil { -// @Autowired + // @Autowired private OSS ossClient; -// @Resource + // @Resource private AliYunConfig aliyunConfig; private static final Logger logger = LoggerFactory.getLogger(AliOssUtil.class); @@ -35,14 +35,14 @@ public class AliOssUtil{ try { String fileName = generateUniqueFileName(file.getName()); ossClient.putObject( - // 存储桶名称 - aliyunConfig.getBucketName(), - //对象键(Object Key),即文件在 OSS 中的完整路径和名称 - fileName, - //文件内容的输入流,用于读取待上传的文件数据。 - file.getInputStream(), - //文件的元数据信息,如内容类型(Content-Type)、缓存策略、文件大小等。 - null + // 存储桶名称 + aliyunConfig.getBucketName(), + //对象键(Object Key),即文件在 OSS 中的完整路径和名称 + fileName, + //文件内容的输入流,用于读取待上传的文件数据。 + file.getInputStream(), + //文件的元数据信息,如内容类型(Content-Type)、缓存策略、文件大小等。 + null ); return fileName; } catch (Exception e) { @@ -58,7 +58,7 @@ public class AliOssUtil{ // 处理文件名编码(防止中文乱码) String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8) - .replaceAll("\\+", "%20"); + .replaceAll("\\+", "%20"); // 设置响应头 HttpHeaders headers = new HttpHeaders(); @@ -67,8 +67,8 @@ public class AliOssUtil{ headers.setCacheControl("no-cache, no-store, must-revalidate"); return ResponseEntity.ok() - .headers(headers) - .body(new InputStreamResource(inputStream)); + .headers(headers) + .body(new InputStreamResource(inputStream)); } catch (Exception e) { logger.error("下载失败:{}", e.getMessage()); throw new ServiceException(ServiceException.DOWNLOAD_FILE_FAIL, "下载失败: " + e.getMessage());