From 32883beac69bbbc90d16471d6f8958153e4deed1 Mon Sep 17 00:00:00 2001 From: chenzhihang <709011834@qq.com> Date: Tue, 18 Mar 2025 11:10:44 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=A7=AF=E5=88=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/system/api/domain/SysUser.java | 10 ++ .../controller/jupyter/JupyterController.java | 9 +- .../platform/domain/ComputingResource.java | 123 ++++-------------- .../com/ruoyi/platform/domain/Resource.java | 25 ++++ .../ruoyi/platform/domain/ResourceOccupy.java | 39 ++++++ .../platform/mapper/ResourceOccupyDao.java | 15 +++ .../service/ResourceOccupyService.java | 13 ++ .../impl/ResourceOccupyServiceImpl.java | 71 ++++++++++ .../ComputingResourceDaoMapper.xml | 24 ++-- .../managementPlatform/ResourceOccupy.xml | 31 +++++ 10 files changed, 242 insertions(+), 118 deletions(-) create mode 100644 ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java create mode 100644 ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java create mode 100644 ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java create mode 100644 ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java create mode 100644 ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java create mode 100644 ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java index fc1aa78c..67457175 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java @@ -131,6 +131,8 @@ public class SysUser extends BaseEntity { private String gitLinkPassword; + private Float credit; + public SysUser() { } @@ -315,6 +317,14 @@ public class SysUser extends BaseEntity { return gitLinkPassword; } + public void setCredit(Float credit) { + this.credit = credit; + } + + public Float getCredit() { + return credit; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java index 6234820b..2772cd5b 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java @@ -6,9 +6,7 @@ import com.ruoyi.common.core.web.domain.GenericsAjaxResult; import com.ruoyi.platform.domain.DevEnvironment; import com.ruoyi.platform.service.JupyterService; import com.ruoyi.platform.service.NewDatasetService; -import com.ruoyi.platform.vo.NewDatasetVo; import com.ruoyi.platform.vo.PodStatusVo; -import com.ruoyi.platform.vo.VersionVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -19,8 +17,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; @RestController @RequestMapping("/jupyter") @@ -30,6 +26,7 @@ public class JupyterController extends BaseController { private JupyterService jupyterService; @Resource private NewDatasetService newDatasetService; + @GetMapping(value = "/getURL") @ApiOperation("得到访问地址") public GenericsAjaxResult getURL() throws IOException { @@ -47,7 +44,7 @@ public class JupyterController extends BaseController { @ApiOperation("根据开发环境id启动jupyter pod") @ApiResponse public GenericsAjaxResult runJupyter(@PathVariable("id") Integer id) throws Exception { - return genericsSuccess(this.jupyterService.runJupyterService(id)); + return genericsSuccess(this.jupyterService.runJupyterService(id)); } @@ -68,7 +65,7 @@ public class JupyterController extends BaseController { @ApiOperation("查询jupyter pod状态") @ApiResponse public GenericsAjaxResult getStatus(DevEnvironment devEnvironment) throws Exception { - return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment)); + return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment)); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java index d0551fa8..9a52bd6b 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java @@ -3,9 +3,10 @@ package com.ruoyi.platform.domain; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; -import java.util.Date; import java.io.Serializable; +import java.util.Date; /** * (ComputingResource)实体类 @@ -14,13 +15,17 @@ import java.io.Serializable; * @since 2023-11-29 14:23:01 */ @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data public class ComputingResource implements Serializable { private static final long serialVersionUID = -42500298368776666L; -/** + /** * 主键 */ -@ApiModelProperty(value = "编号", notes = "唯一标识符") -private Integer id; + @ApiModelProperty(value = "编号", notes = "唯一标识符") + private Integer id; + + @ApiModelProperty("资源id") + private Integer resourceId; @ApiModelProperty("计算资源的描述") private String computingResource; @@ -31,6 +36,24 @@ private Integer id; @ApiModelProperty("资源的详细描述") private String description; + @ApiModelProperty("cpu核数") + private Integer cpuCores; + + @ApiModelProperty("内存大小GB") + private Integer memoryGb; + + @ApiModelProperty("显存大小GB") + private Integer gpuMemoryGb; + + @ApiModelProperty("GPU个数") + private Integer gpuNums; + + @ApiModelProperty("积分/小时") + private Float creditPerHour; + + @ApiModelProperty("标签") + private String labels; + @ApiModelProperty(value = "创建者的用户名", example = "admin") private String createBy; @@ -46,100 +69,8 @@ private Integer id; @ApiModelProperty(value = "状态标识", notes = "0表示失效,1表示生效") private Integer state; - @ApiModelProperty(value = "占用情况(1-占用,0-未占用)") - private Integer usedState; - @ApiModelProperty(value = "节点") private String node; - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getComputingResource() { - return computingResource; - } - - public void setComputingResource(String computingResource) { - this.computingResource = computingResource; - } - - - - public String getStandard() { - return standard; - } - - public void setStandard(String standard) { - this.standard = standard; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public Integer getState() { - return state; - } - - public void setState(Integer state) { - this.state = state; - } - - public Integer getUsedState() { - return usedState; - } - - public void setUsedState(Integer usedState) { - this.usedState = usedState; - } - - public String getNode() { - return node; - } - - public void setNode(String node) { - this.node = node; - } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java new file mode 100644 index 00000000..bdb92893 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java @@ -0,0 +1,25 @@ +package com.ruoyi.platform.domain; + +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data +public class Resource { + @ApiModelProperty(value = "编号", notes = "唯一标识符") + private Integer id; + + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("gpu") + private String gpu; + + @ApiModelProperty("总数") + private Integer total; + + @ApiModelProperty("已被占用的数量") + private Integer used; +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java new file mode 100644 index 00000000..80bf9b88 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java @@ -0,0 +1,39 @@ +package com.ruoyi.platform.domain; + +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data +public class ResourceOccupy { + @ApiModelProperty(value = "编号", notes = "唯一标识符") + private Integer id; + + @ApiModelProperty("用户") + private Long userId; + + @ApiModelProperty("计算资源") + private Integer computingResourceId; + + @ApiModelProperty("积分/小时") + private Float creditPerHour; + + @ApiModelProperty("上一次扣分时间") + private Date deduceLastTime; + + @ApiModelProperty("状态") + private Integer state; + + @ApiModelProperty("开始时间") + private Date startTime; + + @ApiModelProperty("任务类型") + private String taskType; + + @ApiModelProperty("类型id") + private Integer taskId; +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java new file mode 100644 index 00000000..e434f494 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java @@ -0,0 +1,15 @@ +package com.ruoyi.platform.mapper; + +import com.ruoyi.platform.domain.ResourceOccupy; +import org.apache.ibatis.annotations.Param; + +public interface ResourceOccupyDao { + + Boolean haveResource(@Param("id") Integer id, @Param("need") Integer need); + + int save(@Param("resourceOccupy") ResourceOccupy resourceOccupy); + + int edit(@Param("resourceOccupy") ResourceOccupy resourceOccupy); + + ResourceOccupy getResourceOccupyById(@Param("id") Integer id); +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java new file mode 100644 index 00000000..1f50706d --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java @@ -0,0 +1,13 @@ +package com.ruoyi.platform.service; + +public interface ResourceOccupyService { + + Boolean haveResource(Integer computingResourceId) throws Exception; + + void startDeduce(Integer computingResourceId); + + void endDeduce(Integer id); + + void deducing(); + +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java new file mode 100644 index 00000000..3cbbfe0b --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java @@ -0,0 +1,71 @@ +package com.ruoyi.platform.service.impl; + +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.platform.constant.Constant; +import com.ruoyi.platform.domain.ComputingResource; +import com.ruoyi.platform.domain.ResourceOccupy; +import com.ruoyi.platform.mapper.ComputingResourceDao; +import com.ruoyi.platform.mapper.ResourceOccupyDao; +import com.ruoyi.platform.service.ResourceOccupyService; +import com.ruoyi.system.api.model.LoginUser; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service("resourceOccupyService") +public class ResourceOccupyServiceImpl implements ResourceOccupyService { + @Resource + private ResourceOccupyDao resourceOccupyDao; + + @Resource + private ComputingResourceDao computingResourceDao; + + @Override + public Boolean haveResource(Integer computingResourceId) throws Exception { + ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); + + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser.getSysUser().getCredit() < computingResource.getCreditPerHour()) { + throw new Exception("积分不足"); + } + if (Constant.Computing_Resource_GPU.equals(computingResource.getComputingResource())) { + if (resourceOccupyDao.haveResource(computingResource.getResourceId(), computingResource.getGpuNums())) { + return true; + } else { + throw new Exception("资源不足,GPU资源已被占用"); + } + } else { + if (resourceOccupyDao.haveResource(computingResource.getResourceId(), computingResource.getCpuCores())) { + return true; + } else { + throw new Exception("资源不足,CPU资源已被占用完"); + } + } + } + + @Override + public void startDeduce(Integer computingResourceId) { + ResourceOccupy resourceOccupy = new ResourceOccupy(); + ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); + resourceOccupy.setComputingResourceId(computingResourceId); + LoginUser loginUser = SecurityUtils.getLoginUser(); + resourceOccupy.setUserId(loginUser.getUserid()); + resourceOccupy.setCreditPerHour(computingResource.getCreditPerHour()); + resourceOccupyDao.save(resourceOccupy); + } + + @Override + public void endDeduce(Integer id) { + ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyById(id); + resourceOccupy.setState(Constant.State_invalid); + deducing(); + resourceOccupy.setDeduceLastTime(new Date()); + resourceOccupyDao.edit(resourceOccupy); + } + + @Override + public void deducing() { + + } +} diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml index 162a12f7..25981868 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml @@ -2,30 +2,22 @@ - - - - - - - - - - - - - select - id,computing_resource,standard,description,create_by,create_time,update_by,update_time,state + id,resource_id,computing_resource,standard,description, + cpu_cores,memory_gb,gpu_memory_gb,gpu_nums,credit_per_hour,labels, + create_by,create_time,update_by,update_time,state from computing_resource where id = #{id} and state = 1 - select - id,computing_resource,standard,description,create_by,create_time,update_by,update_time,state + id,resource_id,computing_resource,standard,description, + cpu_cores,memory_gb,gpu_memory_gb,gpu_nums,credit_per_hour,labels, + create_by,create_time,update_by,update_time,state from computing_resource state = 1 diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml new file mode 100644 index 00000000..5a7d9cc6 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml @@ -0,0 +1,31 @@ + + + + + insert into resource_occupy (user_id, computing_resource_id, credit_per_hour) + values (#{resourceOccupy.userId}, #{resourceOccupy.computingResourceId}, #{resourceOccupy.creditPerHour}) + + + + update resource_occupy + + + state = #{resourceOccupy.state}, + + + deduce_last_time = #{resourceOccupy.deduceLastTime}, + + + where id = #{resourceOccupy.id} + + + + + + \ No newline at end of file From 64b62830af89648afdd4bcc6e953897f48484eff Mon Sep 17 00:00:00 2001 From: chenzhihang <709011834@qq.com> Date: Tue, 18 Mar 2025 16:55:10 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=A7=AF=E5=88=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/platform/constant/Constant.java | 8 ++ .../controller/service/ServiceController.java | 2 +- .../ruoyi/platform/domain/DevEnvironment.java | 134 +----------------- .../java/com/ruoyi/platform/domain/Ray.java | 2 + .../ruoyi/platform/domain/ResourceOccupy.java | 2 +- .../ruoyi/platform/domain/ServiceVersion.java | 2 + .../platform/mapper/DevEnvironmentDao.java | 19 +-- .../platform/mapper/ResourceOccupyDao.java | 4 +- .../com/ruoyi/platform/mapper/ServiceDao.java | 2 + .../platform/scheduling/RayInsStatusTask.java | 7 + .../scheduling/ResourceOccupyTask.java | 44 ++++++ .../service/ResourceOccupyService.java | 6 +- .../platform/service/ServiceService.java | 4 +- .../impl/DevEnvironmentServiceImpl.java | 18 +-- .../service/impl/JupyterServiceImpl.java | 16 +-- .../service/impl/RayInsServiceImpl.java | 6 + .../platform/service/impl/RayServiceImpl.java | 111 ++++++++------- .../impl/ResourceOccupyServiceImpl.java | 17 ++- .../service/impl/ServiceServiceImpl.java | 42 ++++-- .../ruoyi/platform/utils/K8sClientUtil.java | 16 +-- .../ruoyi/platform/vo/DevEnvironmentVo.java | 3 + .../vo/serviceVos/ServiceVersionVo.java | 2 + .../DevEnvironmentDaoMapper.xml | 56 ++------ .../managementPlatform/RayDaoMapper.xml | 13 +- .../managementPlatform/RayInsDaoMapper.xml | 2 +- .../managementPlatform/ResourceOccupy.xml | 13 +- .../managementPlatform/ServiceDaoMapper.xml | 5 + 27 files changed, 254 insertions(+), 302 deletions(-) create mode 100644 ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java index fd86febd..80480fca 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java @@ -49,4 +49,12 @@ public class Constant { public final static String Asset_Type_Image = "image"; public final static String Asset_Type_Code = "code"; public final static String Asset_Type_Service = "service"; + + // 任务类型 + public final static String TaskType_Dev = "dev_environment"; + public final static String TaskType_Workflow = "workflow"; + public final static String TaskType_AutoMl = "auto_ml"; + public final static String TaskType_Ray = "ray"; + public final static String TaskType_ActiveLearn = "active_learn"; + public final static String TaskType_Service = "service"; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java index de372f21..11d8f07d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java @@ -61,7 +61,7 @@ public class ServiceController extends BaseController { @PostMapping("/serviceVersion") @ApiOperation("新增服务版本") - public GenericsAjaxResult addServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) { + public GenericsAjaxResult addServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) throws Exception { return genericsSuccess(serviceService.addServiceVersion(serviceVersionVo)); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java index cb4ebf3c..90a67719 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java @@ -2,6 +2,7 @@ package com.ruoyi.platform.domain; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; +import lombok.Data; import java.util.Date; import java.io.Serializable; @@ -13,6 +14,7 @@ import java.io.Serializable; * @since 2024-06-03 15:17:37 */ @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data public class DevEnvironment implements Serializable { private static final long serialVersionUID = 936999018935545992L; /** @@ -31,6 +33,9 @@ public class DevEnvironment implements Serializable { * 计算资源 */ private String computingResource; + + private Integer computingResourceId; + /** * 资源规格 */ @@ -80,134 +85,5 @@ public class DevEnvironment implements Serializable { */ private Integer state; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getComputingResource() { - return computingResource; - } - - public void setComputingResource(String computingResource) { - this.computingResource = computingResource; - } - - public String getStandard() { - return standard; - } - - public void setStandard(String standard) { - this.standard = standard; - } - - public String getEnvVariable() { - return envVariable; - } - - public void setEnvVariable(String envVariable) { - this.envVariable = envVariable; - } - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - public String getDataset() { - return dataset; - } - - public void setDataset(String dataset) { - this.dataset = dataset; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getAltField2() { - return altField2; - } - - public void setAltField2(String altField2) { - this.altField2 = altField2; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public Integer getState() { - return state; - } - - public void setState(Integer state) { - this.state = state; - } - } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java index 674c6e34..ebf06de2 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java @@ -67,6 +67,8 @@ public class Ray { private String resource; + private Integer computingResourceId; + private Integer state; private String createBy; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java index 80bf9b88..4a030c5c 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java @@ -35,5 +35,5 @@ public class ResourceOccupy { private String taskType; @ApiModelProperty("类型id") - private Integer taskId; + private Long taskId; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java index 0ca0b8ed..0afa77cc 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java @@ -26,6 +26,8 @@ public class ServiceVersion implements Serializable { private String resource; + private Integer computingResourceId; + private Integer replicas; private String mountPath; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java index e4f4bbe7..0c1df5fe 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java @@ -46,24 +46,6 @@ public interface DevEnvironmentDao { */ int insert(@Param("devEnvironment") DevEnvironment devEnvironment); - /** - * 批量新增数据(MyBatis原生foreach方法) - * - * @param entities List 实例对象列表 - * @return 影响行数 - */ - int insertBatch(@Param("entities") List entities); - - /** - * 批量新增或按主键更新数据(MyBatis原生foreach方法) - * - * @param entities List 实例对象列表 - * - * @return 影响行数 - * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参 - */ - int insertOrUpdateBatch(@Param("entities") List entities); - /** * 修改数据 * @@ -80,5 +62,6 @@ public interface DevEnvironmentDao { */ int deleteById(Integer id); + List getRunning(); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java index e434f494..7f3cf4a4 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java @@ -11,5 +11,7 @@ public interface ResourceOccupyDao { int edit(@Param("resourceOccupy") ResourceOccupy resourceOccupy); - ResourceOccupy getResourceOccupyById(@Param("id") Integer id); + ResourceOccupy getResourceOccupyByTask(@Param("taskType") String taskType, @Param("taskId") Long taskId); + + int deduceCredit(@Param("credit") Float credit, @Param("userId") Long userId); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java index b359812c..6b65a33d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java @@ -36,4 +36,6 @@ public interface ServiceDao { Service getServiceByName(@Param("serviceName") String serviceName); ServiceVersion getSvByVersion(@Param("version") String version, @Param("serviceId") Long serviceId); + + List getRunning(); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java index 23d03164..e0327431 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java @@ -6,6 +6,7 @@ import com.ruoyi.platform.domain.RayIns; import com.ruoyi.platform.mapper.RayDao; import com.ruoyi.platform.mapper.RayInsDao; import com.ruoyi.platform.service.RayInsService; +import com.ruoyi.platform.service.ResourceOccupyService; import org.apache.commons.lang3.StringUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -25,6 +26,9 @@ public class RayInsStatusTask { @Resource private RayDao rayDao; + @Resource + private ResourceOccupyService resourceOccupyService; + private List rayIds = new ArrayList<>(); @Scheduled(cron = "0/30 * * * * ?") // 每30S执行一次 @@ -38,6 +42,9 @@ public class RayInsStatusTask { //当原本状态为null或非终止态时才调用argo接口 try { rayIns = rayInsService.queryStatusFromArgo(rayIns); + if (Constant.Running.equals(rayIns.getStatus())) { + resourceOccupyService.deducing(Constant.TaskType_Ray, rayIns.getId()); + } } catch (Exception e) { rayIns.setStatus(Constant.Failed); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java new file mode 100644 index 00000000..1ae0d2f1 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java @@ -0,0 +1,44 @@ +package com.ruoyi.platform.scheduling; + +import com.ruoyi.platform.constant.Constant; +import com.ruoyi.platform.domain.DevEnvironment; +import com.ruoyi.platform.domain.ServiceVersion; +import com.ruoyi.platform.mapper.DevEnvironmentDao; +import com.ruoyi.platform.mapper.ServiceDao; +import com.ruoyi.platform.service.ResourceOccupyService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component() +public class ResourceOccupyTask { + + @Resource + private ResourceOccupyService resourceOccupyService; + + @Resource + private DevEnvironmentDao devEnvironmentDao; + + @Resource + private ServiceDao serviceDao; + + // 开发环境功能扣除积分 + @Scheduled(cron = "0 0/10 * * * ?") // 每10分钟执行一次 + public void devDeduceCredit() { + List devEnvironments = devEnvironmentDao.getRunning(); + for (DevEnvironment devEnvironment : devEnvironments) { + resourceOccupyService.deducing(Constant.TaskType_Dev, Long.valueOf(devEnvironment.getId())); + } + } + + // 服务功能扣除积分 + @Scheduled(cron = "0 0/10 * * * ?") // 每10分钟执行一次 + public void serviceDeduceCredit() { + List serviceVersions = serviceDao.getRunning(); + for (ServiceVersion serviceVersion : serviceVersions) { + resourceOccupyService.deducing(Constant.TaskType_Service, serviceVersion.getId()); + } + } +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java index 1f50706d..f8aed04b 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java @@ -4,10 +4,10 @@ public interface ResourceOccupyService { Boolean haveResource(Integer computingResourceId) throws Exception; - void startDeduce(Integer computingResourceId); + void startDeduce(Integer computingResourceId, String taskType, Long taskId); - void endDeduce(Integer id); + void endDeduce(String taskType, Long taskId); - void deducing(); + void deducing(String taskType, Long taskId); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java index 9e3dd48d..947a4a6d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java @@ -18,7 +18,7 @@ public interface ServiceService { Service addService(Service service); - ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo); + ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception; Service editService(Service service); @@ -34,7 +34,7 @@ public interface ServiceService { String deleteServiceVersion(Long id); - String runServiceVersion(Long id); + String runServiceVersion(Long id) throws Exception; String stopServiceVersion(Long id); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java index 606d35aa..0180d88d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java @@ -10,18 +10,16 @@ import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.vo.DevEnvironmentVo; import com.ruoyi.platform.vo.PodStatusVo; import com.ruoyi.system.api.model.LoginUser; -import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; -import java.util.Map; /** * (DevEnvironment)表服务实现类 @@ -54,7 +52,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { * 分页查询 * * @param devEnvironment 筛选条件 - * @param pageRequest 分页对象 + * @param pageRequest 分页对象 * @return 查询结果 */ @Override @@ -64,12 +62,15 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { //查询每个开发环境的pod状态,注意:只有pod为非终止态时才去调状态接口 devEnvironmentList.forEach(devEnv -> { - try{ + try { if (!devEnv.getStatus().equals(PodStatus.Terminated.getName()) && !devEnv.getStatus().equals(PodStatus.Failed.getName())) { PodStatusVo podStatusVo = this.jupyterService.getJupyterStatus(devEnv); devEnv.setStatus(podStatusVo.getStatus()); devEnv.setUrl(podStatusVo.getUrl()); + if(!devEnv.getStatus().equals(podStatusVo.getStatus())){ + this.devEnvironmentDao.update(devEnv); + } } } catch (Exception e) { devEnv.setStatus(PodStatus.Unknown.getName()); @@ -94,6 +95,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { //状态先设为未知 devEnvironment.setStatus("Unknown"); devEnvironment.setComputingResource(devEnvironmentVo.getComputingResource()); + devEnvironment.setComputingResourceId(devEnvironmentVo.getComputingResourceId()); devEnvironment.setStandard(devEnvironmentVo.getStandard()); devEnvironment.setEnvVariable(devEnvironmentVo.getEnvVariable()); devEnvironment.setImage(devEnvironmentVo.getImage()); @@ -140,7 +142,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { @Override public String removeById(Integer id) throws Exception { DevEnvironment devEnvironment = this.devEnvironmentDao.queryById(id); - if (devEnvironment == null){ + if (devEnvironment == null) { return "开发环境信息不存在"; } @@ -148,13 +150,13 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { LoginUser loginUser = SecurityUtils.getLoginUser(); String username = loginUser.getUsername(); String createdBy = devEnvironment.getCreateBy(); - if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){ + if (!(StringUtils.equals(username, "admin") || StringUtils.equals(username, createdBy))) { return "无权限删除该开发环境"; } jupyterService.stopJupyterService(id); devEnvironment.setState(0); - return this.devEnvironmentDao.update(devEnvironment)>0?"删除成功":"删除失败"; + return this.devEnvironmentDao.update(devEnvironment) > 0 ? "删除成功" : "删除失败"; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java index 02cb59a2..c37a920f 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.platform.mapper.ComputingResourceDao; import com.ruoyi.platform.mapper.DevEnvironmentDao; import com.ruoyi.platform.service.DevEnvironmentService; import com.ruoyi.platform.service.JupyterService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.utils.K8sClientUtil; import com.ruoyi.platform.utils.MinioUtil; @@ -56,9 +57,6 @@ public class JupyterServiceImpl implements JupyterService { @Resource private DevEnvironmentDao devEnvironmentDao; - @Resource - private ComputingResourceDao computingResourceDao; - @Resource @Lazy private DevEnvironmentService devEnvironmentService; @@ -66,6 +64,9 @@ public class JupyterServiceImpl implements JupyterService { @Resource private RedisService redisService; + @Resource + private ResourceOccupyService resourceOccupyService; + public JupyterServiceImpl(MinioUtil minioUtil) { this.minioUtil = minioUtil; } @@ -109,7 +110,7 @@ public class JupyterServiceImpl implements JupyterService { Integer podPort = k8sClientUtil.createConfiguredPod(podName, namespace, port, mountPath, null, devEnvironment, minioPvcName, datasetPath, modelPath); String url = masterIp + ":" + podPort; redisService.setCacheObject(podName, masterIp + ":" + podPort); - devEnvironment.setStatus("Pending"); + devEnvironment.setStatus(Constant.Pending); devEnvironment.setUrl(url); this.devEnvironmentService.update(devEnvironment); return url; @@ -133,16 +134,15 @@ public class JupyterServiceImpl implements JupyterService { return "pod不存在!"; } - if (Constant.Computing_Resource_GPU.equals(devEnvironment.getComputingResource())) { - computingResourceDao.updateUsedStateByNode(pod.getSpec().getNodeName(), Constant.Used_State_unused); - } + // 结束扣积分 + resourceOccupyService.endDeduce(Constant.TaskType_Dev, Long.valueOf(id)); // 使用 Kubernetes API 删除 Pod String deleteResult = k8sClientUtil.deletePod(podName, namespace); // 删除service k8sClientUtil.deleteService(svcName, namespace); - devEnvironment.setStatus("Terminated"); + devEnvironment.setStatus(Constant.Terminated); this.devEnvironmentService.update(devEnvironment); return deleteResult + ",编辑器已停止"; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java index 0f6b7412..2ae6a5de 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.platform.domain.RayIns; import com.ruoyi.platform.mapper.RayDao; import com.ruoyi.platform.mapper.RayInsDao; import com.ruoyi.platform.service.RayInsService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.*; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -48,6 +49,9 @@ public class RayInsServiceImpl implements RayInsService { @Resource private RayDao rayDao; + @Resource + private ResourceOccupyService resourceOccupyService; + @Resource private MinioUtil minioUtil; @@ -163,6 +167,8 @@ public class RayInsServiceImpl implements RayInsService { ins.setUpdateTime(new Date()); rayInsDao.update(ins); updateRayStatus(rayIns.getRayId()); + // 结束扣积分 + resourceOccupyService.endDeduce(Constant.TaskType_Ray, id); return true; } else { return false; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java index 67f30d29..1050499f 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.platform.mapper.RayDao; import com.ruoyi.platform.mapper.RayInsDao; import com.ruoyi.platform.service.RayInsService; import com.ruoyi.platform.service.RayService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.HttpUtils; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.utils.JsonUtils; @@ -42,8 +43,8 @@ public class RayServiceImpl implements RayService { @Value("${argo.workflowRun}") private String argoWorkflowRun; - @Value("${minio.endpoint}") - private String minioEndpoint; + @Resource + private ResourceOccupyService resourceOccupyService; @Resource private RayDao rayDao; @@ -151,58 +152,62 @@ public class RayServiceImpl implements RayService { throw new Exception("自动超参数寻优配置不存在"); } - RayParamVo rayParamVo = new RayParamVo(); - BeanUtils.copyProperties(ray, rayParamVo); - rayParamVo.setCodeConfig(JsonUtils.jsonToMap(ray.getCodeConfig())); - rayParamVo.setDataset(JsonUtils.jsonToMap(ray.getDataset())); - rayParamVo.setModel(JsonUtils.jsonToMap(ray.getModel())); - rayParamVo.setImage(JsonUtils.jsonToMap(ray.getImage())); - String param = JsonUtils.objectToJson(rayParamVo); - - // 调argo转换接口 - try { - String convertRes = HttpUtils.sendPost(argoUrl + convertRay, param); - if (convertRes == null || StringUtils.isEmpty(convertRes)) { - throw new RuntimeException("转换流水线失败"); - } - Map converMap = JsonUtils.jsonToMap(convertRes); - // 组装运行接口json - Map output = (Map) converMap.get("output"); - Map runReqMap = new HashMap<>(); - runReqMap.put("data", converMap.get("data")); - // 调argo运行接口 - String runRes = HttpUtils.sendPost(argoUrl + argoWorkflowRun, JsonUtils.mapToJson(runReqMap)); - if (runRes == null || StringUtils.isEmpty(runRes)) { - throw new RuntimeException("Failed to run workflow."); - } - Map runResMap = JsonUtils.jsonToMap(runRes); - Map data = (Map) runResMap.get("data"); - //判断data为空 - if (data == null || MapUtils.isEmpty(data)) { - throw new RuntimeException("Failed to run workflow."); + // 记录开始扣积分 + if (resourceOccupyService.haveResource(ray.getComputingResourceId())) { + RayParamVo rayParamVo = new RayParamVo(); + BeanUtils.copyProperties(ray, rayParamVo); + rayParamVo.setCodeConfig(JsonUtils.jsonToMap(ray.getCodeConfig())); + rayParamVo.setDataset(JsonUtils.jsonToMap(ray.getDataset())); + rayParamVo.setModel(JsonUtils.jsonToMap(ray.getModel())); + rayParamVo.setImage(JsonUtils.jsonToMap(ray.getImage())); + String param = JsonUtils.objectToJson(rayParamVo); + + // 调argo转换接口 + try { + String convertRes = HttpUtils.sendPost(argoUrl + convertRay, param); + if (convertRes == null || StringUtils.isEmpty(convertRes)) { + throw new RuntimeException("转换流水线失败"); + } + Map converMap = JsonUtils.jsonToMap(convertRes); + // 组装运行接口json + Map output = (Map) converMap.get("output"); + Map runReqMap = new HashMap<>(); + runReqMap.put("data", converMap.get("data")); + // 调argo运行接口 + String runRes = HttpUtils.sendPost(argoUrl + argoWorkflowRun, JsonUtils.mapToJson(runReqMap)); + if (runRes == null || StringUtils.isEmpty(runRes)) { + throw new RuntimeException("运行失败"); + } + Map runResMap = JsonUtils.jsonToMap(runRes); + Map data = (Map) runResMap.get("data"); + //判断data为空 + if (data == null || MapUtils.isEmpty(data)) { + throw new RuntimeException("运行失败"); + } + Map metadata = (Map) data.get("metadata"); + + // 插入记录到实验实例表 + RayIns rayIns = new RayIns(); + rayIns.setRayId(ray.getId()); + rayIns.setArgoInsNs((String) metadata.get("namespace")); + rayIns.setArgoInsName((String) metadata.get("name")); + rayIns.setParam(param); + rayIns.setStatus(Constant.Pending); + //替换argoInsName + String outputString = JsonUtils.mapToJson(output); + rayIns.setNodeResult(outputString.replace("{{workflow.name}}", (String) metadata.get("name"))); + + Map param_output = (Map) output.get("param_output"); + List output1 = (ArrayList) param_output.values().toArray()[0]; + Map output2 = (Map) output1.get(0); + String outputPath = output2.get("path").replace("{{workflow.name}}", (String) metadata.get("name")) + "/hpo"; + rayIns.setResultPath(outputPath); + rayInsDao.insert(rayIns); + rayInsService.updateRayStatus(id); + resourceOccupyService.startDeduce(ray.getComputingResourceId(), Constant.TaskType_Ray, rayIns.getId()); + } catch (Exception e) { + throw new RuntimeException(e); } - Map metadata = (Map) data.get("metadata"); - - // 插入记录到实验实例表 - RayIns rayIns = new RayIns(); - rayIns.setRayId(ray.getId()); - rayIns.setArgoInsNs((String) metadata.get("namespace")); - rayIns.setArgoInsName((String) metadata.get("name")); - rayIns.setParam(param); - rayIns.setStatus(Constant.Pending); - //替换argoInsName - String outputString = JsonUtils.mapToJson(output); - rayIns.setNodeResult(outputString.replace("{{workflow.name}}", (String) metadata.get("name"))); - - Map param_output = (Map) output.get("param_output"); - List output1 = (ArrayList) param_output.values().toArray()[0]; - Map output2 = (Map) output1.get(0); - String outputPath = output2.get("path").replace("{{workflow.name}}", (String) metadata.get("name")) + "/hpo"; - rayIns.setResultPath(outputPath); - rayInsDao.insert(rayIns); - rayInsService.updateRayStatus(id); - } catch (Exception e) { - throw new RuntimeException(e); } return "执行成功"; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java index 3cbbfe0b..3809629f 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java @@ -45,27 +45,34 @@ public class ResourceOccupyServiceImpl implements ResourceOccupyService { } @Override - public void startDeduce(Integer computingResourceId) { + public void startDeduce(Integer computingResourceId, String taskType, Long taskId) { ResourceOccupy resourceOccupy = new ResourceOccupy(); ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); resourceOccupy.setComputingResourceId(computingResourceId); LoginUser loginUser = SecurityUtils.getLoginUser(); resourceOccupy.setUserId(loginUser.getUserid()); resourceOccupy.setCreditPerHour(computingResource.getCreditPerHour()); + resourceOccupy.setTaskType(taskType); + resourceOccupy.setTaskId(taskId); resourceOccupyDao.save(resourceOccupy); } @Override - public void endDeduce(Integer id) { - ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyById(id); + public void endDeduce(String taskType, Long taskId) { + ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyByTask(taskType, taskId); + deducing(taskType, taskId); resourceOccupy.setState(Constant.State_invalid); - deducing(); resourceOccupy.setDeduceLastTime(new Date()); resourceOccupyDao.edit(resourceOccupy); } @Override - public void deducing() { + public void deducing(String taskType, Long taskId) { + ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyByTask(taskType, taskId); + long timeDifferenceMillis = new Date().getTime() - resourceOccupy.getDeduceLastTime().getTime(); + Float hours = (float) (timeDifferenceMillis / (1000 * 60 * 60)); + float deduceCredit = resourceOccupy.getCreditPerHour() * hours; + resourceOccupyDao.deduceCredit(deduceCredit, resourceOccupy.getUserId()); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java index 0244bba6..8e613098 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.platform.domain.AssetWorkflow; import com.ruoyi.platform.domain.ServiceVersion; import com.ruoyi.platform.mapper.AssetWorkflowDao; import com.ruoyi.platform.mapper.ServiceDao; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.service.ServiceService; import com.ruoyi.platform.utils.ConvertUtil; import com.ruoyi.platform.utils.HttpUtils; @@ -45,6 +46,9 @@ public class ServiceServiceImpl implements ServiceService { @Resource private AssetWorkflowDao assetWorkflowDao; + @Resource + private ResourceOccupyService resourceOccupyService; + @Override public Page queryByPageService(com.ruoyi.platform.domain.Service service, PageRequest pageRequest) { long total = serviceDao.countService(service); @@ -110,7 +114,7 @@ public class ServiceServiceImpl implements ServiceService { } @Override - public ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo) { + public ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception { ServiceVersion svByVersion = serviceDao.getSvByVersion(serviceVersionVo.getVersion(), serviceVersionVo.getServiceId()); if (svByVersion != null) { throw new RuntimeException("服务版本已存在,无法新增"); @@ -234,7 +238,7 @@ public class ServiceServiceImpl implements ServiceService { } @Override - public String runServiceVersion(Long id) { + public String runServiceVersion(Long id) throws Exception { ServiceVersion serviceVersion = serviceDao.getServiceVersionById(id); com.ruoyi.platform.domain.Service service = serviceDao.getServiceById(serviceVersion.getServiceId()); HashMap paramMap = new HashMap<>(); @@ -249,23 +253,29 @@ public class ServiceServiceImpl implements ServiceService { paramMap.put("model", JSONObject.parseObject(serviceVersion.getModel())); paramMap.put("service_type", service.getServiceType()); paramMap.put("deploy_type", serviceVersion.getDeployType()); - String req = HttpUtils.sendPost(argoUrl + modelService + "/create", JSON.toJSONString(paramMap)); - if (StringUtils.isNotEmpty(req)) { - Map reqMap = JacksonUtil.parseJSONStr2Map(req); - if ((Integer) reqMap.get("code") == 200) { - Map data = (Map) reqMap.get("data"); - serviceVersion.setUrl(data.get("url")); - serviceVersion.setDeploymentName(data.get("deployment_name")); - serviceVersion.setSvcName(data.get("svc_name")); - serviceVersion.setRunState(Constant.Pending); - serviceDao.updateServiceVersion(serviceVersion); - return "启动成功"; + + // 记录开始扣积分 + if (resourceOccupyService.haveResource(serviceVersion.getComputingResourceId())) { + String req = HttpUtils.sendPost(argoUrl + modelService + "/create", JSON.toJSONString(paramMap)); + if (StringUtils.isNotEmpty(req)) { + Map reqMap = JacksonUtil.parseJSONStr2Map(req); + if ((Integer) reqMap.get("code") == 200) { + resourceOccupyService.startDeduce(serviceVersion.getComputingResourceId(), Constant.TaskType_Service, serviceVersion.getId()); + Map data = (Map) reqMap.get("data"); + serviceVersion.setUrl(data.get("url")); + serviceVersion.setDeploymentName(data.get("deployment_name")); + serviceVersion.setSvcName(data.get("svc_name")); + serviceVersion.setRunState(Constant.Pending); + serviceDao.updateServiceVersion(serviceVersion); + return "启动成功"; + } else { + throw new RuntimeException("启动失败"); + } } else { throw new RuntimeException("启动失败"); } - } else { - throw new RuntimeException("启动失败"); } + return "启动失败"; } @Override @@ -277,6 +287,8 @@ public class ServiceServiceImpl implements ServiceService { if (StringUtils.isNotEmpty(req)) { serviceVersion.setRunState(Constant.Stopped); serviceDao.updateServiceVersion(serviceVersion); + // 结束扣积分 + resourceOccupyService.endDeduce(Constant.TaskType_Service, id); return "停止成功"; } else { throw new RuntimeException("停止失败"); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java index 17d36177..a3b73160 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java @@ -3,7 +3,7 @@ package com.ruoyi.platform.utils; import com.alibaba.fastjson2.JSON; import com.ruoyi.platform.constant.Constant; import com.ruoyi.platform.domain.DevEnvironment; -import com.ruoyi.platform.mapper.ComputingResourceDao; +import com.ruoyi.platform.service.ResourceOccupyService; import io.kubernetes.client.Exec; import io.kubernetes.client.custom.IntOrString; import io.kubernetes.client.custom.Quantity; @@ -12,9 +12,7 @@ import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.apis.AppsV1Api; import io.kubernetes.client.openapi.apis.CoreV1Api; import io.kubernetes.client.openapi.models.*; -import io.kubernetes.client.util.ClientBuilder; import io.kubernetes.client.util.Config; -import io.kubernetes.client.util.credentials.AccessTokenAuthentication; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.json.JSONObject; @@ -50,7 +48,7 @@ public class K8sClientUtil { private static ApiClient apiClient; @Resource - private ComputingResourceDao computingResourceDao; + private ResourceOccupyService resourceOccupyService; /** * 构建集群POD内通过SA访问的客户端 @@ -509,10 +507,12 @@ public class K8sClientUtil { .build(); try { - pod = api.createNamespacedPod(namespace, pod, null, null, null); - String nodeName = getNodeName(podName, namespace); - if (Constant.Computing_Resource_GPU.equals(devEnvironment.getComputingResource())) { - computingResourceDao.updateUsedStateByNode(nodeName, Constant.Used_State_used); + // 记录开始扣积分 + if (resourceOccupyService.haveResource(devEnvironment.getComputingResourceId())) { + pod = api.createNamespacedPod(namespace, pod, null, null, null); + String nodeName = getNodeName(podName, namespace); + + resourceOccupyService.startDeduce(devEnvironment.getComputingResourceId(), Constant.TaskType_Dev, Long.valueOf(devEnvironment.getId())); } } catch (ApiException e) { throw new RuntimeException("创建pod异常:" + e.getResponseBody()); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java index 14089f14..0d019417 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java @@ -19,6 +19,9 @@ public class DevEnvironmentVo implements Serializable { * 计算资源 */ private String computingResource; + + private Integer computingResourceId; + /** * 资源规格 */ diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java index 2cf03f47..d1cb79cd 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java @@ -28,6 +28,8 @@ public class ServiceVersionVo { private String resource; + private Integer computingResourceId; + private Integer replicas; private String mountPath; diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml index cfab27a7..82e92a56 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml @@ -1,38 +1,18 @@ - - - - - - - - - - - - - - - - - - - - - select - id,name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state + id,name,status,computing_resource,computing_resource_id, standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state from dev_environment where id = #{id} and state = 1 - select - id,name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state + id,name,status,computing_resource,computing_resource_id,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state from dev_environment state = 1 @@ -146,12 +126,17 @@ + + - insert into dev_environment(name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state) + insert into dev_environment(name,status,computing_resource,computing_resource_id,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state) values (#{devEnvironment.name}, #{devEnvironment.status}, #{devEnvironment.computingResource}, + #{devEnvironment.computingResourceId}, #{devEnvironment.standard}, #{devEnvironment.envVariable}, #{devEnvironment.image}, @@ -167,24 +152,6 @@ ) - - insert into dev_environment(name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state ) - values - - (#{entity.name},#{entity.status},#{entity.computingResource},#{entity.standard},#{entity.envVariable},#{entity.image},#{entity.dataset},#{entity.model},#{entity.url},#{entity.altField2},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state}) - - - - - insert into dev_environment(name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state) - values - - (#{entity.name}#{entity.status}#{entity.computingResource}#{entity.standard}#{entity.envVariable}#{entity.image}#{entity.dataset}#{entity.model}#{entity.url}#{entity.altField2}#{entity.createBy}#{entity.createTime}#{entity.updateBy}#{entity.updateTime}#{entity.state}) - - on duplicate key update -name = values(name)status = values(status)computing_resource = values(computing_resource)standard = values(standard)env_variable = values(env_variable)image = values(image)dataset = values(dataset)model = values(model)url = values(url)alt_field2 = values(alt_field2)create_by = values(create_by)create_time = values(create_time)update_by = values(update_by)update_time = values(update_time)state = values(state) - - update dev_environment @@ -198,6 +165,9 @@ name = values(name)status = values(status)computing_resource = values(computing_ computing_resource = #{devEnvironment.computingResource}, + + computing_resource_id = #{devEnvironment.computingResourceId}, + standard = #{devEnvironment.standard}, diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml index 236141c4..72aebb6e 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml @@ -2,13 +2,15 @@ - insert into ray(name, description, dataset, model, code_config, main_py, num_samples, parameters, points_to_evaluate, storage_path, + insert into ray(name, description, dataset, model, code_config, main_py, num_samples, parameters, + points_to_evaluate, storage_path, search_alg, scheduler, metric, mode, max_t, - min_samples_required, resource, image, create_by, update_by) - values (#{ray.name}, #{ray.description}, #{ray.dataset}, #{ray.model}, #{ray.codeConfig}, #{ray.mainPy}, #{ray.numSamples}, #{ray.parameters}, + min_samples_required, resource, computing_resource_id, image, create_by, update_by) + values (#{ray.name}, #{ray.description}, #{ray.dataset}, #{ray.model}, #{ray.codeConfig}, #{ray.mainPy}, + #{ray.numSamples}, #{ray.parameters}, #{ray.pointsToEvaluate}, #{ray.storagePath}, #{ray.searchAlg}, #{ray.scheduler}, #{ray.metric}, #{ray.mode}, #{ray.maxT}, #{ray.minSamplesRequired}, - #{ray.resource}, #{ray.image}, #{ray.createBy}, #{ray.updateBy}) + #{ray.resource}, #{ray.computingResourceId}, #{ray.image}, #{ray.createBy}, #{ray.updateBy}) @@ -68,6 +70,9 @@ resource = #{ray.resource}, + + computing_resource_id = #{ray.computingResourceId}, + update_by = #{ray.updateBy}, diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml index 2b9c12ac..2a5a3c20 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml @@ -1,7 +1,7 @@ - + insert into ray_ins(ray_id, result_path, argo_ins_name, argo_ins_ns, node_status, node_result, param, source, status) values (#{rayIns.rayId}, #{rayIns.resultPath}, #{rayIns.argoInsName}, #{rayIns.argoInsNs}, diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml index 5a7d9cc6..6b87f09c 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml @@ -19,13 +19,22 @@ where id = #{resourceOccupy.id} + + update sys_user + set credit = credit - #{credit} + where user_id = #{userId} + + - + select * + from resource_occupy + where task_type = #{task_type} + and task_id = #{task_id} \ No newline at end of file diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml index cfa98aa1..bec944af 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml @@ -84,6 +84,11 @@ where service_id = #{serviceId} and version = #{version} and state = 1 + + insert into service(service_name, service_type, description, create_by, update_by) values (#{service.serviceName}, #{service.serviceType}, #{service.description}, #{service.createBy}, #{service.updateBy}) From 7bbe6835749d7da54d381c65bb1db890fbea1dc9 Mon Sep 17 00:00:00 2001 From: chenzhihang <709011834@qq.com> Date: Tue, 18 Mar 2025 17:56:07 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=A7=AF=E5=88=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevEnvironmentController.java | 4 ++-- .../controller/service/ServiceController.java | 2 +- .../platform/mapper/ResourceOccupyDao.java | 4 ++++ .../platform/service/DevEnvironmentService.java | 4 ++-- .../ruoyi/platform/service/ServiceService.java | 2 +- .../service/impl/DevEnvironmentServiceImpl.java | 13 +++++++++++-- .../platform/service/impl/RayServiceImpl.java | 8 ++++++++ .../service/impl/ResourceOccupyServiceImpl.java | 17 ++++++++++++++++- .../service/impl/ServiceServiceImpl.java | 8 +++++++- .../main/java/com/ruoyi/platform/vo/RayVo.java | 2 ++ .../managementPlatform/ResourceOccupy.xml | 12 ++++++++++++ 11 files changed, 66 insertions(+), 10 deletions(-) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java index 0a3b608d..f7451a23 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java @@ -61,7 +61,7 @@ public class DevEnvironmentController extends BaseController { * @return 新增结果 */ @PostMapping - public GenericsAjaxResult add(@RequestBody DevEnvironmentVo devEnvironmentVo) { + public GenericsAjaxResult add(@RequestBody DevEnvironmentVo devEnvironmentVo) throws Exception { return genericsSuccess(this.devEnvironmentService.insert(devEnvironmentVo)); } @@ -72,7 +72,7 @@ public class DevEnvironmentController extends BaseController { * @return 编辑结果 */ @PutMapping - public GenericsAjaxResult edit(@RequestBody DevEnvironment devEnvironment) { + public GenericsAjaxResult edit(@RequestBody DevEnvironment devEnvironment) throws Exception { return genericsSuccess(this.devEnvironmentService.update(devEnvironment)); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java index 11d8f07d..e18d0899 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java @@ -73,7 +73,7 @@ public class ServiceController extends BaseController { @PutMapping("/serviceVersion") @ApiOperation("编辑服务版本") - public GenericsAjaxResult editServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) { + public GenericsAjaxResult editServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) throws Exception { return genericsSuccess(serviceService.editServiceVersion(serviceVersionVo)); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java index 7f3cf4a4..8a92d4b2 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java @@ -14,4 +14,8 @@ public interface ResourceOccupyDao { ResourceOccupy getResourceOccupyByTask(@Param("taskType") String taskType, @Param("taskId") Long taskId); int deduceCredit(@Param("credit") Float credit, @Param("userId") Long userId); + + int updateUsed(@Param("id") Integer id, @Param("used") Integer used); + + int updateUnUsed(@Param("id") Integer id, @Param("used") Integer used); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java index 4562c7d4..4b6723ab 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java @@ -36,7 +36,7 @@ public interface DevEnvironmentService { * @param devEnvironment 实例对象 * @return 实例对象 */ - DevEnvironment insert(DevEnvironmentVo devEnvironmentVo); + DevEnvironment insert(DevEnvironmentVo devEnvironmentVo) throws Exception; /** * 修改数据 @@ -44,7 +44,7 @@ public interface DevEnvironmentService { * @param devEnvironment 实例对象 * @return 实例对象 */ - DevEnvironment update(DevEnvironment devEnvironment); + DevEnvironment update(DevEnvironment devEnvironment) throws Exception; /** * 通过主键删除数据 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java index 947a4a6d..12b34188 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java @@ -22,7 +22,7 @@ public interface ServiceService { Service editService(Service service); - String editServiceVersion(ServiceVersionVo serviceVersionVo); + String editServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception; Service getService(Long id); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java index 0180d88d..6488b967 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.platform.domain.PodStatus; import com.ruoyi.platform.mapper.DevEnvironmentDao; import com.ruoyi.platform.service.DevEnvironmentService; import com.ruoyi.platform.service.JupyterService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.vo.DevEnvironmentVo; import com.ruoyi.platform.vo.PodStatusVo; @@ -36,6 +37,8 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { @Lazy private JupyterService jupyterService; + @Resource + private ResourceOccupyService resourceOccupyService; /** * 通过ID查询单条数据 @@ -87,7 +90,10 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { * @return 实例对象 */ @Override - public DevEnvironment insert(DevEnvironmentVo devEnvironmentVo) { + public DevEnvironment insert(DevEnvironmentVo devEnvironmentVo) throws Exception { + // 判断是否有资源 + resourceOccupyService.haveResource(devEnvironmentVo.getComputingResourceId()); + //插入预备,此时不需要判断版本重复 DevEnvironment devEnvironment = new DevEnvironment(); LoginUser loginUser = SecurityUtils.getLoginUser(); @@ -120,7 +126,10 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { * @return 实例对象 */ @Override - public DevEnvironment update(DevEnvironment devEnvironment) { + public DevEnvironment update(DevEnvironment devEnvironment) throws Exception { + // 判断是否有资源 + resourceOccupyService.haveResource(devEnvironment.getComputingResourceId()); + LoginUser loginUser = SecurityUtils.getLoginUser(); devEnvironment.setUpdateBy(loginUser.getUsername()); devEnvironment.setUpdateTime(new Date()); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java index 1050499f..8ea5d473 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java @@ -66,6 +66,10 @@ public class RayServiceImpl implements RayService { if (rayByName != null) { throw new RuntimeException("实验名称已存在"); } + + // 判断是否有资源 + resourceOccupyService.haveResource(rayVo.getComputingResourceId()); + Ray ray = new Ray(); BeanUtils.copyProperties(rayVo, ray); String username = SecurityUtils.getLoginUser().getUsername(); @@ -87,6 +91,10 @@ public class RayServiceImpl implements RayService { if (oldRay != null && !oldRay.getId().equals(rayVo.getId())) { throw new RuntimeException("实验名称已存在"); } + + // 判断是否有资源 + resourceOccupyService.haveResource(rayVo.getComputingResourceId()); + Ray ray = new Ray(); BeanUtils.copyProperties(rayVo, ray); ray.setUpdateBy(SecurityUtils.getLoginUser().getUsername()); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java index 3809629f..ea0f12c7 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java @@ -55,6 +55,12 @@ public class ResourceOccupyServiceImpl implements ResourceOccupyService { resourceOccupy.setTaskType(taskType); resourceOccupy.setTaskId(taskId); resourceOccupyDao.save(resourceOccupy); + + if (Constant.Computing_Resource_GPU.equals(computingResource.getComputingResource())) { + resourceOccupyDao.updateUsed(computingResource.getResourceId(), computingResource.getGpuNums()); + } else { + resourceOccupyDao.updateUsed(computingResource.getResourceId(), computingResource.getCpuCores()); + } } @Override @@ -62,8 +68,14 @@ public class ResourceOccupyServiceImpl implements ResourceOccupyService { ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyByTask(taskType, taskId); deducing(taskType, taskId); resourceOccupy.setState(Constant.State_invalid); - resourceOccupy.setDeduceLastTime(new Date()); resourceOccupyDao.edit(resourceOccupy); + + ComputingResource computingResource = computingResourceDao.queryById(resourceOccupy.getComputingResourceId()); + if (Constant.Computing_Resource_GPU.equals(computingResource.getComputingResource())) { + resourceOccupyDao.updateUnUsed(computingResource.getResourceId(), computingResource.getGpuNums()); + } else { + resourceOccupyDao.updateUnUsed(computingResource.getResourceId(), computingResource.getCpuCores()); + } } @Override @@ -74,5 +86,8 @@ public class ResourceOccupyServiceImpl implements ResourceOccupyService { float deduceCredit = resourceOccupy.getCreditPerHour() * hours; resourceOccupyDao.deduceCredit(deduceCredit, resourceOccupy.getUserId()); + + resourceOccupy.setDeduceLastTime(new Date()); + resourceOccupyDao.edit(resourceOccupy); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java index 8e613098..d046fe25 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java @@ -120,6 +120,9 @@ public class ServiceServiceImpl implements ServiceService { throw new RuntimeException("服务版本已存在,无法新增"); } + // 判断是否有资源 + resourceOccupyService.haveResource(serviceVersionVo.getComputingResourceId()); + ServiceVersion serviceVersion = getServiceVersion(serviceVersionVo); LoginUser loginUser = SecurityUtils.getLoginUser(); serviceVersion.setCreateBy(loginUser.getUsername()); @@ -139,7 +142,10 @@ public class ServiceServiceImpl implements ServiceService { } @Override - public String editServiceVersion(ServiceVersionVo serviceVersionVo) { + public String editServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception { + // 判断是否有资源 + resourceOccupyService.haveResource(serviceVersionVo.getComputingResourceId()); + ServiceVersion serviceVersion = getServiceVersion(serviceVersionVo); ServiceVersion oldServiceVersion = serviceDao.getServiceVersionById(serviceVersionVo.getId()); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java index 4cf000e5..fe3cc30b 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java @@ -57,6 +57,8 @@ public class RayVo { private String resource; + private Integer computingResourceId; + private String createBy; private Date createTime; diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml index 6b87f09c..b20b9215 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml @@ -25,6 +25,18 @@ where user_id = #{userId} + + update resource + set used = used + #{used} + where id = #{id} + + + + update resource + set used = used - #{used} + where id = #{id} + + + + + + \ No newline at end of file diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml index bec944af..5ece071a 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml @@ -86,7 +86,7 @@ diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 085ab4f4..c205566f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -25,6 +25,7 @@ + @@ -59,6 +60,7 @@ u.password, u.git_link_username, u.git_link_password, + u.credit, u.sex, u.status, u.del_flag, @@ -88,7 +90,7 @@