diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/ImageVirtualMachinesController.java b/nex-be/src/main/java/com/unisinsight/project/controller/ImageVirtualMachinesController.java index e0f6d5a..2ed7099 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/ImageVirtualMachinesController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/ImageVirtualMachinesController.java @@ -3,8 +3,9 @@ package com.unisinsight.project.controller; import cn.hutool.json.JSONUtil; import com.unisinsight.project.entity.req.DeleteIdReq; -import com.unisinsight.project.entity.req.ImageDesktopReq; import com.unisinsight.project.entity.req.ImageVirtualMachinesReq; +import com.unisinsight.project.entity.req.SnapShotCreateReq; +import com.unisinsight.project.entity.req.SnapShotReq; import com.unisinsight.project.entity.res.ImageVirtualMachinesRes; import com.unisinsight.project.entity.res.PageResult; import com.unisinsight.project.exception.BaseErrorCode; @@ -158,6 +159,34 @@ public class ImageVirtualMachinesController { log.info("获取VNC信息请求参数为:{}", vmName); return service.getVncData(vmName); } + @ApiOperation(value = "获取快照列表") + @GetMapping("/snapshot/list/{vmName}") + public Result snapshotList(@PathVariable("vmName") String vmName) { + + log.info("获取快照列表请求参数为:{}", vmName); + return service.snapshotList(vmName); + } + @ApiOperation(value = "创建快照") + @PostMapping("/snapshot/create") + public Result createSnapshot(@RequestBody SnapShotCreateReq snapShotCreateReq) { + + log.info("创建快照请求参数为:{}", snapShotCreateReq); + return service.createSnapshot(snapShotCreateReq); + } + @ApiOperation(value = "删除快照") + @PostMapping("/snapshot/delete") + public Result deleteSnapshot(@RequestBody SnapShotReq snapShotCreateReq) { + + log.info("删除快照请求参数为:{}", snapShotCreateReq); + return service.deleteSnapshot(snapShotCreateReq); + } + @ApiOperation(value = "还原快照") + @GetMapping("/snapshot/revert") + public Result revertSnapshot(@RequestBody SnapShotReq snapShotCreateReq) { + + log.info("还原快照请求参数为:{}", snapShotCreateReq); + return service.revertSnapshot(snapShotCreateReq); + } } diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/SnapShotCreateReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/SnapShotCreateReq.java new file mode 100644 index 0000000..c5b038d --- /dev/null +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/SnapShotCreateReq.java @@ -0,0 +1,26 @@ +package com.unisinsight.project.entity.req; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : SnapShotCreateReq + * @Description : + * @DATE : Created in 16:48 2025/9/9 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/09/09 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +public class SnapShotCreateReq { + @JsonProperty("vm_name") + private String vmName; + private String name; + private String description; +} diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/SnapShotReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/SnapShotReq.java new file mode 100644 index 0000000..98892fc --- /dev/null +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/SnapShotReq.java @@ -0,0 +1,26 @@ +package com.unisinsight.project.entity.req; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @author : ch + * @version : 1.0 + * @ClassName : SnapShotCreateReq + * @Description : + * @DATE : Created in 16:48 2025/9/9 + *
       Copyright: Copyright(c) 2025     
+ *
       Company :   	紫光汇智信息技术有限公司		           
+ * Modification History: + * Date Author Version Discription + * -------------------------------------------------------------------------- + * 2025/09/09 ch 1.0 Why & What is modified: <修改原因描述> * + */ +@Data +public class SnapShotReq { + @JsonProperty("vm_name") + private String vmName; + @JsonProperty("snapshot_name") + private String snapshotName; +} diff --git a/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java b/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java index ca889bb..5d61f10 100644 --- a/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java +++ b/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java @@ -93,5 +93,17 @@ public interface ExternalApiClient { ApiResponse> getBridgeInterfaces(); @GetMapping("/api/v1/vm/{vmName}/vnc") ApiResponse getVncData(@PathVariable("vmName") String vmName); + @GetMapping("/api/v1/snapshot/list/{vm_name}") + ApiResponse snapshotList(@PathVariable("vm_name") String vmName); + @PostMapping("/api/v1/snapshot/create/{vm_name}") + ApiResponse createSnapshot(@PathVariable("vm_name") String vmName,@RequestBody SnapShotCreateReq snapshotCreateReq); + @PostMapping("/api/v1/snapshot/revert/{vm_name}/{snapshot_name}") + ApiResponse revertSnapshot(@PathVariable("vm_name") String vmName,@PathVariable("snapshot_name") String snapshotName); + @DeleteMapping("/api/v1/snapshot/delete/{vm_name}/{snapshot_name}") + ApiResponse deleteSnapshot(@PathVariable("vm_name") String vmName,@PathVariable("snapshot_name") String snapshotName); + + + + } diff --git a/nex-be/src/main/java/com/unisinsight/project/service/ImageVirtualMachinesService.java b/nex-be/src/main/java/com/unisinsight/project/service/ImageVirtualMachinesService.java index 641e958..5f13373 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/ImageVirtualMachinesService.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/ImageVirtualMachinesService.java @@ -3,8 +3,9 @@ package com.unisinsight.project.service; import com.baomidou.mybatisplus.extension.service.IService; import com.unisinsight.project.entity.dao.ImageVirtualMachines; import com.unisinsight.project.entity.req.DeleteIdReq; -import com.unisinsight.project.entity.req.ImageDesktopReq; import com.unisinsight.project.entity.req.ImageVirtualMachinesReq; +import com.unisinsight.project.entity.req.SnapShotCreateReq; +import com.unisinsight.project.entity.req.SnapShotReq; import com.unisinsight.project.entity.res.ImageVirtualMachinesRes; import com.unisinsight.project.entity.res.PageResult; import com.unisinsight.project.exception.Result; @@ -63,5 +64,13 @@ public interface ImageVirtualMachinesService extends IService attachIso(ImageVirtualMachinesReq req); Result getVncData(String vmName); + + Result snapshotList(String vmName); + + Result createSnapshot(SnapShotCreateReq snapShotCreateReq); + + Result deleteSnapshot(SnapShotReq snapShotCreateReq); + + Result revertSnapshot(SnapShotReq snapShotCreateReq); } diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/ClientServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/ClientServiceImpl.java index bad1d18..ed8c3e7 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/ClientServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/ClientServiceImpl.java @@ -65,6 +65,9 @@ public class ClientServiceImpl implements ClientService { if (StringUtils.isNotBlank(e.getDesktopName())) { map.put("name", e.getDesktopName()+"."+e.getDesktopType()); } + if (StringUtils.isNotBlank(e.getCloneName())) { + map.put("clone_name", e.getCloneName()); + } if (StringUtils.isNotBlank(e.getFileSize())) { map.put("file_size", StringUtils.isNotEmpty(e.getFileSize()) ? Long.parseLong(e.getFileSize()) : 0L); } diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageVirtualMachinesServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageVirtualMachinesServiceImpl.java index 829e329..e1a6e84 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageVirtualMachinesServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageVirtualMachinesServiceImpl.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.unisinsight.project.entity.dao.*; import com.unisinsight.project.entity.dto.ApiResponse; +import com.unisinsight.project.entity.dto.SnapshotsResponseDTO; import com.unisinsight.project.entity.dto.VmInfoDTO; import com.unisinsight.project.entity.req.*; import com.unisinsight.project.entity.res.ImageStatusRes; @@ -435,7 +436,7 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl snapshotList(String vmName) { + ApiResponse response = externalApiClient.snapshotList(vmName); + if ( !"200".equals(response.getCode()) ||response.getData() == null) { + return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500, response.getMessage()); + } + PageResult pageResult = new PageResult<>(); + SnapshotsResponseDTO data = response.getData(); + pageResult.setPageNum(data.getPage()); + pageResult.setTotal(data.getTotal()); + pageResult.setPageSize(data.getPage_size()); + pageResult.setData(data.getItems()); + pageResult.setTotal(data.getTotal()); + return Result.successResult(pageResult); + } + + @Override + public Result createSnapshot(SnapShotCreateReq snapShotCreateReq) { + externalApiClient.createSnapshot(snapShotCreateReq.getVmName(), snapShotCreateReq); + return Result.successResult(); + } + + @Override + public Result deleteSnapshot(SnapShotReq snapShotCreateReq) { + if (StringUtils.isEmpty(snapShotCreateReq.getVmName())|| StringUtils.isEmpty(snapShotCreateReq.getSnapshotName())){ + return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500, "参数错误"); + } + ApiResponse apiResponse = externalApiClient.deleteSnapshot(snapShotCreateReq.getVmName(), snapShotCreateReq.getSnapshotName()); + return Result.successResult(apiResponse.getData()); + } + + @Override + public Result revertSnapshot(SnapShotReq snapShotCreateReq) { + if (StringUtils.isEmpty(snapShotCreateReq.getVmName())|| StringUtils.isEmpty(snapShotCreateReq.getSnapshotName())){ + return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500, "参数错误"); + } + ApiResponse apiResponse = externalApiClient.revertSnapshot(snapShotCreateReq.getVmName(), snapShotCreateReq.getSnapshotName()); + return Result.successResult(apiResponse.getData()); + } }