Merge pull request '429' (#41) from dev into master
This commit is contained in:
commit
66abdcb13e
|
@ -19,7 +19,7 @@ const Settings: ProLayoutProps & {
|
||||||
title: '智能软件开发平台',
|
title: '智能软件开发平台',
|
||||||
pwa: true,
|
pwa: true,
|
||||||
logo: '/assets/images/left-top-logo.png',
|
logo: '/assets/images/left-top-logo.png',
|
||||||
iconfontUrl: '//at.alicdn.com/t/c/font_4511326_ndnvm4elll.js',
|
iconfontUrl: '//at.alicdn.com/t/c/font_4511326_2511riex401.js',
|
||||||
token: {
|
token: {
|
||||||
// 参见ts声明,demo 见文档,通过token 修改样式
|
// 参见ts声明,demo 见文档,通过token 修改样式
|
||||||
//https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F
|
//https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F
|
||||||
|
|
|
@ -151,14 +151,18 @@ body {
|
||||||
height: 46px;
|
height: 46px;
|
||||||
padding: 1px 11px;
|
padding: 1px 11px;
|
||||||
}
|
}
|
||||||
|
.ant-input-textarea-affix-wrapper.ant-input-affix-wrapper{
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
.ant-modal .ant-select-single {
|
.ant-modal .ant-select-single {
|
||||||
height: 46px;
|
height: 46px;
|
||||||
}
|
}
|
||||||
.ant-modal .ant-select-single .ant-select-selector .ant-select-selection-placeholder {
|
.ant-modal .ant-select-single .ant-select-selector .ant-select-selection-placeholder {
|
||||||
line-height: 46px;
|
line-height: 46px;
|
||||||
}
|
}
|
||||||
|
.ant-menu-light.ant-menu-inline .ant-menu-item{
|
||||||
|
color:#575757;
|
||||||
|
}
|
||||||
.ant-modal .ant-modal-close-x {
|
.ant-modal .ant-modal-close-x {
|
||||||
width: 26px;
|
width: 26px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
|
|
|
@ -389,6 +389,7 @@ const Dataset = () => {
|
||||||
>
|
>
|
||||||
上传文件
|
上传文件
|
||||||
</Button>
|
</Button>
|
||||||
|
<div className={Styles.tipContent}>只允许上传.zip,.tgz格式文件</div>
|
||||||
</Upload>
|
</Upload>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
|
@ -60,10 +60,26 @@ const Dataset = () => {
|
||||||
<div className={Styles.datasetTopBox}></div>
|
<div className={Styles.datasetTopBox}></div>
|
||||||
<div className={Styles.datasetAllBox}>
|
<div className={Styles.datasetAllBox}>
|
||||||
<Tabs defaultActiveKey="1">
|
<Tabs defaultActiveKey="1">
|
||||||
<TabPane tab="数据广场" key="1">
|
<TabPane
|
||||||
|
tab="数据广场"
|
||||||
|
key="1"
|
||||||
|
icon={
|
||||||
|
<svg className="icon" style={{ width: '14px', height: '14px' }} aria-hidden="true">
|
||||||
|
<use xlinkHref="#icon-shujujiguangchang"></use>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
>
|
||||||
<PublicData />
|
<PublicData />
|
||||||
</TabPane>
|
</TabPane>
|
||||||
<TabPane tab="个人数据" key="2">
|
<TabPane
|
||||||
|
tab="个人数据"
|
||||||
|
key="2"
|
||||||
|
icon={
|
||||||
|
<svg className="icon" style={{ width: '14px', height: '14px' }} aria-hidden="true">
|
||||||
|
<use xlinkHref="#icon-gerenshujuji"></use>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
>
|
||||||
<PersonalData />
|
<PersonalData />
|
||||||
</TabPane>
|
</TabPane>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
|
@ -291,6 +291,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.tipContent{
|
||||||
|
color: #c73131;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
.modal {
|
.modal {
|
||||||
:global {
|
:global {
|
||||||
.ant-modal-content {
|
.ant-modal-content {
|
||||||
|
|
|
@ -468,6 +468,7 @@ const PublicData = (React.FC = () => {
|
||||||
>
|
>
|
||||||
上传文件
|
上传文件
|
||||||
</Button>
|
</Button>
|
||||||
|
<div className={Styles.tipContent}>只允许上传.zip,.tgz格式文件</div>
|
||||||
</Upload>
|
</Upload>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
|
@ -59,10 +59,26 @@ const Dataset = () => {
|
||||||
<div className={Styles.datasetTopBox}></div>
|
<div className={Styles.datasetTopBox}></div>
|
||||||
<div className={Styles.datasetAllBox}>
|
<div className={Styles.datasetAllBox}>
|
||||||
<Tabs defaultActiveKey="1">
|
<Tabs defaultActiveKey="1">
|
||||||
<TabPane tab="模型广场" key="1">
|
<TabPane
|
||||||
|
tab="模型广场"
|
||||||
|
key="1"
|
||||||
|
icon={
|
||||||
|
<svg className="icon" style={{ width: '14px', height: '14px' }} aria-hidden="true">
|
||||||
|
<use xlinkHref="#icon-shujujiguangchang"></use>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
>
|
||||||
<PublicData />
|
<PublicData />
|
||||||
</TabPane>
|
</TabPane>
|
||||||
<TabPane tab="个人模型" key="2">
|
<TabPane
|
||||||
|
tab="个人模型"
|
||||||
|
key="2"
|
||||||
|
icon={
|
||||||
|
<svg className="icon" style={{ width: '14px', height: '14px' }} aria-hidden="true">
|
||||||
|
<use xlinkHref="#icon-gerenshujuji"></use>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
>
|
||||||
<PersonalData />
|
<PersonalData />
|
||||||
</TabPane>
|
</TabPane>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
|
@ -281,6 +281,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.tipContent{
|
||||||
|
color: #c73131;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
.modal {
|
.modal {
|
||||||
:global {
|
:global {
|
||||||
.ant-modal-content {
|
.ant-modal-content {
|
||||||
|
|
|
@ -375,7 +375,7 @@ const Dataset = () => {
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<Upload {...props} data={{ uuid: uuid }} accept=".zip,.tgz">
|
<Upload {...props} data={{ uuid: uuid }}>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
fontSize: '14px',
|
fontSize: '14px',
|
||||||
|
|
|
@ -503,7 +503,7 @@ const PublicData = () => {
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="模型文件" name="models_version_vos">
|
<Form.Item label="模型文件" name="models_version_vos">
|
||||||
<Upload {...props} data={{ uuid: uuid }} accept=".zip,.tgz">
|
<Upload {...props} data={{ uuid: uuid }}>
|
||||||
<Button
|
<Button
|
||||||
style={{
|
style={{
|
||||||
fontSize: '14px',
|
fontSize: '14px',
|
||||||
|
|
|
@ -60,6 +60,8 @@ function patchRouteItems(route: any, menu: any, parentPath: string) {
|
||||||
element: React.createElement(lazy(() => import('@/pages/' + path))),
|
element: React.createElement(lazy(() => import('@/pages/' + path))),
|
||||||
path: parentPath + menuItem.path,
|
path: parentPath + menuItem.path,
|
||||||
};
|
};
|
||||||
|
console.log(newRoute);
|
||||||
|
|
||||||
route.children.push(newRoute);
|
route.children.push(newRoute);
|
||||||
route.routes.push(newRoute);
|
route.routes.push(newRoute);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +74,10 @@ export function patchRouteWithRemoteMenus(routes: any) {
|
||||||
}
|
}
|
||||||
let proLayout = null;
|
let proLayout = null;
|
||||||
for (const routeItem of routes) {
|
for (const routeItem of routes) {
|
||||||
|
|
||||||
if (routeItem.id === 'ant-design-pro-layout') {
|
if (routeItem.id === 'ant-design-pro-layout') {
|
||||||
|
|
||||||
|
|
||||||
proLayout = routeItem;
|
proLayout = routeItem;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -96,6 +101,7 @@ export async function refreshToken() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function convertCompatRouters(childrens: API.RoutersMenuItem[]): any[] {
|
export function convertCompatRouters(childrens: API.RoutersMenuItem[]): any[] {
|
||||||
|
|
||||||
return childrens.map((item: API.RoutersMenuItem) => {
|
return childrens.map((item: API.RoutersMenuItem) => {
|
||||||
return {
|
return {
|
||||||
path: item.path,
|
path: item.path,
|
||||||
|
@ -129,6 +135,7 @@ export function getMatchMenuItem(
|
||||||
): MenuDataItem[] {
|
): MenuDataItem[] {
|
||||||
if (!menuData) return [];
|
if (!menuData) return [];
|
||||||
let items: MenuDataItem[] = [];
|
let items: MenuDataItem[] = [];
|
||||||
|
|
||||||
menuData.forEach((item) => {
|
menuData.forEach((item) => {
|
||||||
if (item.path) {
|
if (item.path) {
|
||||||
if (item.path === path) {
|
if (item.path === path) {
|
||||||
|
@ -142,9 +149,12 @@ export function getMatchMenuItem(
|
||||||
const subpath = path.substr(item.path.length + 1);
|
const subpath = path.substr(item.path.length + 1);
|
||||||
const subItem: MenuDataItem[] = getMatchMenuItem(subpath, item.routes);
|
const subItem: MenuDataItem[] = getMatchMenuItem(subpath, item.routes);
|
||||||
items = items.concat(subItem);
|
items = items.concat(subItem);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const paths = path.split('/');
|
const paths = path.split('/');
|
||||||
if (paths.length >= 2 && paths[0] === item.path && paths[1] === 'index') {
|
if (paths.length >= 2 && paths[0] === item.path && paths[1] === 'index') {
|
||||||
|
console.log(item);
|
||||||
|
|
||||||
items.push(item);
|
items.push(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,9 +17,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
@EnableRyFeignClients
|
@EnableRyFeignClients
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
public class
|
public class RuoYiManagementPlatformApplication {
|
||||||
|
|
||||||
RuoYiManagementPlatformApplication {
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(RuoYiManagementPlatformApplication.class, args);
|
SpringApplication.run(RuoYiManagementPlatformApplication.class, args);
|
||||||
System.out.println("(♥◠‿◠)ノ゙ 复杂智能软件管理平台启动成功 ლ(´ڡ`ლ)゙ \n" +
|
System.out.println("(♥◠‿◠)ノ゙ 复杂智能软件管理平台启动成功 ლ(´ڡ`ლ)゙ \n" +
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.ruoyi.common.core.web.controller.BaseController;
|
||||||
import com.ruoyi.common.core.web.domain.GenericsAjaxResult;
|
import com.ruoyi.common.core.web.domain.GenericsAjaxResult;
|
||||||
import com.ruoyi.platform.domain.DatasetVersion;
|
import com.ruoyi.platform.domain.DatasetVersion;
|
||||||
import com.ruoyi.platform.service.DatasetVersionService;
|
import com.ruoyi.platform.service.DatasetVersionService;
|
||||||
import com.ruoyi.platform.vo.LabelDatasetVersion;
|
import com.ruoyi.platform.vo.LabelDatasetVersionVo;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
@ -138,8 +138,10 @@ public class DatasetVersionController extends BaseController {
|
||||||
|
|
||||||
@PostMapping("/addDatasetVersionsFromLabel")
|
@PostMapping("/addDatasetVersionsFromLabel")
|
||||||
@ApiOperation("从数据标注添加数据集版本")
|
@ApiOperation("从数据标注添加数据集版本")
|
||||||
public GenericsAjaxResult<Boolean> addDatasetVersionsFromLabel(@RequestBody LabelDatasetVersion labelDatasetVersion) throws Exception {
|
public GenericsAjaxResult<?> addDatasetVersionsFromLabel(@RequestBody LabelDatasetVersionVo labelDatasetVersionVo) throws Exception {
|
||||||
return genericsSuccess(true);
|
datasetVersionService.addDatasetVersionsFromLabel(labelDatasetVersionVo);
|
||||||
|
|
||||||
|
return GenericsAjaxResult.success();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ public interface ExperimentDao {
|
||||||
* @return 影响行数
|
* @return 影响行数
|
||||||
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
|
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
|
||||||
*/
|
*/
|
||||||
int insertOrUpdateBatch(@Param("entities") List<Experiment> entities);
|
int insertOrUpdateBatch(List<Experiment> entities);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改数据
|
* 修改数据
|
||||||
|
|
|
@ -62,7 +62,7 @@ public interface ExperimentInsDao {
|
||||||
* @return 影响行数
|
* @return 影响行数
|
||||||
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
|
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
|
||||||
*/
|
*/
|
||||||
int insertOrUpdateBatch(@Param("entities") List<ExperimentIns> entities);
|
int insertOrUpdateBatch(List<ExperimentIns> entities);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改数据
|
* 修改数据
|
||||||
|
@ -92,5 +92,7 @@ public interface ExperimentInsDao {
|
||||||
List<ExperimentIns> queryByExperiment(@Param("experimentIns") ExperimentIns experimentIns);
|
List<ExperimentIns> queryByExperiment(@Param("experimentIns") ExperimentIns experimentIns);
|
||||||
|
|
||||||
List<ExperimentIns> queryByExperimentId(Integer id);
|
List<ExperimentIns> queryByExperimentId(Integer id);
|
||||||
|
|
||||||
|
List<ExperimentIns> queryByExperimentIsNotTerminated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
package com.ruoyi.platform.scheduling;
|
||||||
|
|
||||||
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||||
|
import com.ruoyi.platform.domain.Experiment;
|
||||||
|
import com.ruoyi.platform.domain.ExperimentIns;
|
||||||
|
import com.ruoyi.platform.mapper.ExperimentDao;
|
||||||
|
import com.ruoyi.platform.mapper.ExperimentInsDao;
|
||||||
|
import com.ruoyi.platform.service.ExperimentInsService;
|
||||||
|
import com.ruoyi.platform.service.ExperimentService;
|
||||||
|
import com.ruoyi.platform.utils.JsonUtils;
|
||||||
|
import com.ruoyi.system.api.model.LoginUser;
|
||||||
|
import io.swagger.models.auth.In;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Component()
|
||||||
|
public class ExperimentInstanceStatusTask {
|
||||||
|
@Autowired
|
||||||
|
private ExperimentInsService experimentInsService;
|
||||||
|
@Resource
|
||||||
|
private ExperimentDao experimentDao;
|
||||||
|
@Resource
|
||||||
|
private ExperimentInsDao experimentInsDao;
|
||||||
|
|
||||||
|
private List<Integer> experimentIds = new ArrayList<>();
|
||||||
|
@Scheduled(cron = "0/30 * * * * ?") // 每30S执行一次
|
||||||
|
public void executeExperimentInsStatus() throws IOException {
|
||||||
|
// 首先查到所有非终止态的实验实例
|
||||||
|
List<ExperimentIns> experimentInsList = experimentInsService.queryByExperimentIsNotTerminated();
|
||||||
|
// 去argo查询状态
|
||||||
|
List<ExperimentIns> updateList = new ArrayList<>();
|
||||||
|
if (experimentInsList != null && experimentInsList.size() > 0) {
|
||||||
|
for (ExperimentIns experimentIns : experimentInsList) {
|
||||||
|
//当原本状态为null或非终止态时才调用argo接口
|
||||||
|
String oldStatus = experimentIns.getStatus();
|
||||||
|
try {
|
||||||
|
experimentIns = experimentInsService.queryStatusFromArgo(experimentIns);
|
||||||
|
}catch (Exception e){
|
||||||
|
experimentIns.setStatus("Failed");
|
||||||
|
}
|
||||||
|
if (!StringUtils.equals(oldStatus,experimentIns.getStatus())){
|
||||||
|
experimentIns.setUpdateTime(new Date());
|
||||||
|
synchronized (experimentIds) {
|
||||||
|
experimentIds.add(experimentIns.getExperimentId()); // 线程安全的添加操作
|
||||||
|
}
|
||||||
|
updateList.add(experimentIns);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
experimentInsDao.update(experimentIns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updateList.size() > 0){
|
||||||
|
experimentInsDao.insertOrUpdateBatch(updateList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@Scheduled(cron = "0/30 * * * * ?") // / 每30S执行一次
|
||||||
|
public void executeExperimentStatus() throws IOException {
|
||||||
|
if (experimentIds.size()==0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 存储需要更新的实验对象列表
|
||||||
|
List<Experiment> updateExperiments = new ArrayList<>();
|
||||||
|
for (Integer experimentId : experimentIds){
|
||||||
|
// 获取当前实验的所有实例列表
|
||||||
|
List<ExperimentIns> insList = experimentInsService.getByExperimentId(experimentId);
|
||||||
|
List<String> statusList = new ArrayList<String>();
|
||||||
|
// 更新实验状态列表
|
||||||
|
for (int i=0;i<insList.size();i++){
|
||||||
|
statusList.add(insList.get(i).getStatus());
|
||||||
|
}
|
||||||
|
String subStatus = statusList.toString().substring(1, statusList.toString().length() - 1);
|
||||||
|
Experiment experiment = experimentDao.queryById(experimentId);
|
||||||
|
// 如果实验状态列表发生变化,则更新实验对象,并加入到需要更新的列表中
|
||||||
|
if (!StringUtils.equals(subStatus,experiment.getStatusList())){
|
||||||
|
experiment.setStatusList(subStatus);
|
||||||
|
updateExperiments.add(experiment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!updateExperiments.isEmpty()) {
|
||||||
|
experimentDao.insertOrUpdateBatch(updateExperiments);
|
||||||
|
for (int index = 0; index < updateExperiments.size(); index++) {
|
||||||
|
synchronized (experimentIds) {
|
||||||
|
experimentIds.remove(index); // 线程安全的删除操作
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,8 @@
|
||||||
package com.ruoyi.platform.service;
|
package com.ruoyi.platform.service;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import com.ruoyi.platform.domain.Dataset;
|
|
||||||
import com.ruoyi.platform.domain.DatasetVersion;
|
import com.ruoyi.platform.domain.DatasetVersion;
|
||||||
import com.ruoyi.platform.vo.LabelDatasetVersion;
|
import com.ruoyi.platform.vo.LabelDatasetVersionVo;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
|
||||||
|
@ -75,5 +72,6 @@ public interface DatasetVersionService {
|
||||||
|
|
||||||
String addDatasetVersions(List<DatasetVersion> datasetVersions) throws Exception;
|
String addDatasetVersions(List<DatasetVersion> datasetVersions) throws Exception;
|
||||||
|
|
||||||
void addDatasetVersionsFromLabel(LabelDatasetVersion labelDatasetVersion) throws Exception;
|
void
|
||||||
|
addDatasetVersionsFromLabel(LabelDatasetVersionVo labelDatasetVersionVo) throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,4 +98,9 @@ public interface ExperimentInsService {
|
||||||
|
|
||||||
String getRealtimePodLogFromPod(PodLogVo podLogVo);
|
String getRealtimePodLogFromPod(PodLogVo podLogVo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询非终止态的实例
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ExperimentIns> queryByExperimentIsNotTerminated();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import org.springframework.core.io.InputStreamResource;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -11,5 +12,5 @@ public interface MinioService {
|
||||||
ResponseEntity<InputStreamResource> downloadZipFile(String bucketName , String path);
|
ResponseEntity<InputStreamResource> downloadZipFile(String bucketName , String path);
|
||||||
|
|
||||||
Map<String, String> uploadFile(String bucketName, String objectName, MultipartFile file ) throws Exception;
|
Map<String, String> uploadFile(String bucketName, String objectName, MultipartFile file ) throws Exception;
|
||||||
|
void uploaInputStream(String bucketName, String objectName, InputStream inputStream ) throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import com.ruoyi.platform.vo.DatasetVo;
|
||||||
import com.ruoyi.system.api.model.LoginUser;
|
import com.ruoyi.system.api.model.LoginUser;
|
||||||
import io.minio.messages.Item;
|
import io.minio.messages.Item;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.core.io.InputStreamResource;
|
import org.springframework.core.io.InputStreamResource;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageImpl;
|
||||||
|
@ -67,7 +68,8 @@ public class DatasetServiceImpl implements DatasetService {
|
||||||
private MinioService minioService;
|
private MinioService minioService;
|
||||||
|
|
||||||
// 固定存储桶名
|
// 固定存储桶名
|
||||||
private final String bucketName = "platform-data";
|
@Value("${minio.dataReleaseBucketName}")
|
||||||
|
private String bucketName;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MinioUtil minioUtil;
|
private MinioUtil minioUtil;
|
||||||
|
@ -359,6 +361,7 @@ public class DatasetServiceImpl implements DatasetService {
|
||||||
|
|
||||||
// Now we know there's another dataset with the same name
|
// Now we know there's another dataset with the same name
|
||||||
Field[] fields = Dataset.class.getDeclaredFields();
|
Field[] fields = Dataset.class.getDeclaredFields();
|
||||||
|
|
||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
field.setAccessible(true); // Make private fields accessible
|
field.setAccessible(true); // Make private fields accessible
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
package com.ruoyi.platform.service.impl;
|
package com.ruoyi.platform.service.impl;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.utils.DateUtils;
|
||||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||||
import com.ruoyi.platform.annotations.CheckDuplicate;
|
import com.ruoyi.platform.annotations.CheckDuplicate;
|
||||||
import com.ruoyi.platform.domain.Dataset;
|
import com.ruoyi.platform.domain.Dataset;
|
||||||
import com.ruoyi.platform.domain.DatasetVersion;
|
import com.ruoyi.platform.domain.DatasetVersion;
|
||||||
import com.ruoyi.platform.domain.ModelsVersion;
|
import com.ruoyi.platform.mapper.DatasetDao;
|
||||||
import com.ruoyi.platform.domain.Workflow;
|
|
||||||
import com.ruoyi.platform.mapper.DatasetVersionDao;
|
import com.ruoyi.platform.mapper.DatasetVersionDao;
|
||||||
import com.ruoyi.platform.service.DatasetVersionService;
|
import com.ruoyi.platform.service.DatasetVersionService;
|
||||||
|
import com.ruoyi.platform.service.MinioService;
|
||||||
|
import com.ruoyi.platform.utils.FileUtil;
|
||||||
import com.ruoyi.platform.utils.HttpUtils;
|
import com.ruoyi.platform.utils.HttpUtils;
|
||||||
import com.ruoyi.platform.vo.LabelDatasetVersion;
|
import com.ruoyi.platform.vo.LabelDatasetVersionVo;
|
||||||
import com.ruoyi.system.api.model.LoginUser;
|
import com.ruoyi.system.api.model.LoginUser;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
@ -35,9 +38,13 @@ import java.util.Map;
|
||||||
public class DatasetVersionServiceImpl implements DatasetVersionService {
|
public class DatasetVersionServiceImpl implements DatasetVersionService {
|
||||||
@Resource
|
@Resource
|
||||||
private DatasetVersionDao datasetVersionDao;
|
private DatasetVersionDao datasetVersionDao;
|
||||||
|
@Resource
|
||||||
|
private DatasetDao datasetDao;
|
||||||
// 固定存储桶名
|
// 固定存储桶名
|
||||||
private final String bucketName = "platform-data";
|
@Value("${minio.dataReleaseBucketName}")
|
||||||
|
private String bucketName;
|
||||||
|
@Resource
|
||||||
|
private MinioService minioService;
|
||||||
/**
|
/**
|
||||||
* 通过ID查询单条数据
|
* 通过ID查询单条数据
|
||||||
*
|
*
|
||||||
|
@ -198,12 +205,31 @@ public class DatasetVersionServiceImpl implements DatasetVersionService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addDatasetVersionsFromLabel(LabelDatasetVersion labelDatasetVersion) throws Exception{
|
public void addDatasetVersionsFromLabel(LabelDatasetVersionVo labelDatasetVersionVo) throws Exception{
|
||||||
|
Dataset dataset = datasetDao.queryById(labelDatasetVersionVo.getDataset_id());
|
||||||
|
if (dataset == null){
|
||||||
|
throw new Exception("数据集不存在");
|
||||||
|
}
|
||||||
// 获取label-studio数据流
|
// 获取label-studio数据流
|
||||||
InputStream inputStream = HttpUtils.getInputStream("http://127.0.0.1:8080/api/projects/"+labelDatasetVersion.getProject_id()+"/export?exportType="+labelDatasetVersion.getExportType(), labelDatasetVersion.getToken());
|
Map<String, String> headers = new HashMap<String, String>();
|
||||||
// 上传镜像至minio
|
headers.put("Authorization","Token "+labelDatasetVersionVo.getToken());
|
||||||
|
InputStream inputStream = HttpUtils.getIntputStream("http://127.0.0.1:8080/api/projects/"+labelDatasetVersionVo.getProject_id()+"/export?exportType="+labelDatasetVersionVo.getExportType(), headers);
|
||||||
|
// 构建objectName
|
||||||
|
String username = SecurityUtils.getLoginUser().getUsername();
|
||||||
|
String url = username + "/" + DateUtils.dateTimeNow() + "/" + dataset.getName()+"_"+labelDatasetVersionVo.getVersion()+"."+labelDatasetVersionVo.getExportType();
|
||||||
|
String objectName = "datasets/" + url;
|
||||||
|
String formattedSize = FileUtil.formatFileSize(inputStream.available());
|
||||||
|
minioService.uploaInputStream(bucketName,objectName,inputStream);
|
||||||
//保存DatasetVersion
|
//保存DatasetVersion
|
||||||
|
DatasetVersion datasetVersion = new DatasetVersion();
|
||||||
|
datasetVersion.setVersion(labelDatasetVersionVo.getVersion());
|
||||||
|
datasetVersion.setDatasetId(labelDatasetVersionVo.getDataset_id());
|
||||||
|
datasetVersion.setFileName(dataset.getName()+"_"+labelDatasetVersionVo.getVersion()+"."+labelDatasetVersionVo.getExportType());
|
||||||
|
|
||||||
|
datasetVersion.setFileSize(formattedSize);
|
||||||
|
datasetVersion.setUrl(url);
|
||||||
|
datasetVersion.setDescription(labelDatasetVersionVo.getDesc());
|
||||||
|
this.insert(datasetVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertPrepare(DatasetVersion datasetVersion) throws Exception {
|
private void insertPrepare(DatasetVersion datasetVersion) throws Exception {
|
||||||
|
|
|
@ -71,14 +71,16 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
|
||||||
@Override
|
@Override
|
||||||
public ExperimentIns queryById(Integer id) throws IOException {
|
public ExperimentIns queryById(Integer id) throws IOException {
|
||||||
ExperimentIns experimentIns = this.experimentInsDao.queryById(id);
|
ExperimentIns experimentIns = this.experimentInsDao.queryById(id);
|
||||||
if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) {
|
|
||||||
experimentIns = this.queryStatusFromArgo(experimentIns);
|
//已经迁移至定时任务进行更新操作
|
||||||
//只有当新状态是终止态时才更新数据库
|
// if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) {
|
||||||
if (isTerminatedState(experimentIns)) {
|
// experimentIns = this.queryStatusFromArgo(experimentIns);
|
||||||
//同时更新各个节点
|
// //只有当新状态是终止态时才更新数据库
|
||||||
this.update(experimentIns);
|
// if (isTerminatedState(experimentIns)) {
|
||||||
}
|
// //同时更新各个节点
|
||||||
}
|
// this.update(experimentIns);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
return experimentIns;
|
return experimentIns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,40 +95,42 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
|
||||||
@Override
|
@Override
|
||||||
public List<ExperimentIns> getByExperimentId(Integer experimentId) throws IOException {
|
public List<ExperimentIns> getByExperimentId(Integer experimentId) throws IOException {
|
||||||
List<ExperimentIns> experimentInsList = experimentInsDao.getByExperimentId(experimentId);
|
List<ExperimentIns> experimentInsList = experimentInsDao.getByExperimentId(experimentId);
|
||||||
|
|
||||||
|
//代码全部迁移至定时任务
|
||||||
//搞个标记,当状态改变才去改表
|
//搞个标记,当状态改变才去改表
|
||||||
boolean flag = false;
|
// boolean flag = false;
|
||||||
List<ExperimentIns> result = new ArrayList<ExperimentIns>();
|
// List<ExperimentIns> result = new ArrayList<ExperimentIns>();
|
||||||
if (experimentInsList!=null && experimentInsList.size()>0) {
|
// if (experimentInsList!=null && experimentInsList.size()>0) {
|
||||||
for (ExperimentIns experimentIns : experimentInsList) {
|
// for (ExperimentIns experimentIns : experimentInsList) {
|
||||||
//当原本状态为null或非终止态时才调用argo接口
|
// //当原本状态为null或非终止态时才调用argo接口
|
||||||
if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) {
|
// if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) {
|
||||||
experimentIns = this.queryStatusFromArgo(experimentIns);
|
// experimentIns = this.queryStatusFromArgo(experimentIns);
|
||||||
if (!flag){
|
// if (!flag){
|
||||||
flag = true;
|
// flag = true;
|
||||||
}
|
// }
|
||||||
//只有当新状态是终止态时才更新数据库
|
// //只有当新状态是终止态时才更新数据库
|
||||||
if (isTerminatedState(experimentIns)) {
|
// if (isTerminatedState(experimentIns)) {
|
||||||
//同时更新各个节点
|
// //同时更新各个节点
|
||||||
this.update(experimentIns);
|
// this.update(experimentIns);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
// //新增查询tensorBoard容器状态
|
||||||
|
// result.add(experimentIns);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (flag) {
|
||||||
|
// List<String> statusList = new ArrayList<String>();
|
||||||
|
// // 更新实验状态列表
|
||||||
|
// for (int i=0;i<result.size();i++){
|
||||||
|
// statusList.add(result.get(i).getStatus());
|
||||||
|
// }
|
||||||
|
// Experiment experiment = experimentDao.queryById(experimentId);
|
||||||
|
// experiment.setStatusList(statusList.toString().substring(1, statusList.toString().length()-1));
|
||||||
|
// experimentDao.update(experiment);
|
||||||
|
// }
|
||||||
|
|
||||||
//新增查询tensorBoard容器状态
|
return experimentInsList;
|
||||||
result.add(experimentIns);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (flag) {
|
|
||||||
List<String> statusList = new ArrayList<String>();
|
|
||||||
// 更新实验状态列表
|
|
||||||
for (int i=0;i<result.size();i++){
|
|
||||||
statusList.add(result.get(i).getStatus());
|
|
||||||
}
|
|
||||||
Experiment experiment = experimentDao.queryById(experimentId);
|
|
||||||
experiment.setStatusList(statusList.toString().substring(1, statusList.toString().length()-1));
|
|
||||||
experimentDao.update(experiment);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,15 +145,15 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
|
||||||
public Page<ExperimentIns> queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) throws IOException {
|
public Page<ExperimentIns> queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) throws IOException {
|
||||||
long total = this.experimentInsDao.count(experimentIns);
|
long total = this.experimentInsDao.count(experimentIns);
|
||||||
List<ExperimentIns> experimentInsList = this.experimentInsDao.queryAllByLimit(experimentIns, pageRequest);
|
List<ExperimentIns> experimentInsList = this.experimentInsDao.queryAllByLimit(experimentIns, pageRequest);
|
||||||
if (experimentInsList!=null && experimentInsList.size()>0) {
|
// if (experimentInsList!=null && experimentInsList.size()>0) {
|
||||||
for (ExperimentIns ins : experimentInsList) {
|
// for (ExperimentIns ins : experimentInsList) {
|
||||||
//如果实验实例不为空或者
|
// //如果实验实例不为空或者
|
||||||
if (ins != null && StringUtils.isEmpty(ins.getStatus())) {
|
// if (ins != null && StringUtils.isEmpty(ins.getStatus())) {
|
||||||
ins = this.queryStatusFromArgo(ins);
|
// ins = this.queryStatusFromArgo(ins);
|
||||||
this.update(ins);
|
// this.update(ins);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return new PageImpl<>(experimentInsList, pageRequest, total);
|
return new PageImpl<>(experimentInsList, pageRequest, total);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -524,6 +528,11 @@ public class ExperimentInsServiceImpl implements ExperimentInsService {
|
||||||
return k8sClientUtil.getPodLogs(podLogVo.getPodName(), podLogVo.getNamespace(),podLogVo.getContainerName(), logsLines);
|
return k8sClientUtil.getPodLogs(podLogVo.getPodName(), podLogVo.getNamespace(),podLogVo.getContainerName(), logsLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ExperimentIns> queryByExperimentIsNotTerminated() {
|
||||||
|
return experimentInsDao.queryByExperimentIsNotTerminated();
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isTerminatedState(ExperimentIns ins) throws IOException {
|
private boolean isTerminatedState(ExperimentIns ins) throws IOException {
|
||||||
// 定义终止态的列表,例如 "Succeeded", "Failed" 等
|
// 定义终止态的列表,例如 "Succeeded", "Failed" 等
|
||||||
String status = ins.getStatus();
|
String status = ins.getStatus();
|
||||||
|
|
|
@ -256,8 +256,9 @@ public class ExperimentServiceImpl implements ExperimentService {
|
||||||
experimentIns.setExperimentId(experiment.getId());
|
experimentIns.setExperimentId(experiment.getId());
|
||||||
experimentIns.setArgoInsNs((String) metadata.get("namespace"));
|
experimentIns.setArgoInsNs((String) metadata.get("namespace"));
|
||||||
experimentIns.setArgoInsName((String) metadata.get("name"));
|
experimentIns.setArgoInsName((String) metadata.get("name"));
|
||||||
//传入实验全局参数
|
experimentIns.setStatus("Pending");
|
||||||
|
|
||||||
|
//传入实验全局参数
|
||||||
|
|
||||||
experimentIns.setGlobalParam(experiment.getGlobalParam());
|
experimentIns.setGlobalParam(experiment.getGlobalParam());
|
||||||
|
|
||||||
|
|
|
@ -69,4 +69,9 @@ public class MinioServiceImpl implements MinioService {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uploaInputStream(String bucketName, String objectName, InputStream inputStream ) throws Exception {
|
||||||
|
minioUtil.uploadObject(bucketName, objectName, inputStream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.ruoyi.system.api.model.LoginUser;
|
||||||
import io.minio.messages.Item;
|
import io.minio.messages.Item;
|
||||||
import io.netty.util.Version;
|
import io.netty.util.Version;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.core.io.InputStreamResource;
|
import org.springframework.core.io.InputStreamResource;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageImpl;
|
||||||
|
@ -67,7 +68,8 @@ public class ModelsServiceImpl implements ModelsService {
|
||||||
|
|
||||||
|
|
||||||
// 固定存储桶名
|
// 固定存储桶名
|
||||||
private final String bucketName = "platform-data";
|
@Value("${minio.dataReleaseBucketName}")
|
||||||
|
private String bucketName;
|
||||||
@Resource
|
@Resource
|
||||||
private MinioUtil minioUtil;
|
private MinioUtil minioUtil;
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.ruoyi.platform.mapper.ModelsVersionDao;
|
||||||
import com.ruoyi.platform.service.ModelsVersionService;
|
import com.ruoyi.platform.service.ModelsVersionService;
|
||||||
import com.ruoyi.system.api.model.LoginUser;
|
import com.ruoyi.system.api.model.LoginUser;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageImpl;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
@ -35,7 +36,8 @@ public class ModelsVersionServiceImpl implements ModelsVersionService {
|
||||||
private ModelsDao modelsDao;
|
private ModelsDao modelsDao;
|
||||||
|
|
||||||
// 固定存储桶名
|
// 固定存储桶名
|
||||||
private final String bucketName = "platform-data";
|
@Value("${minio.dataReleaseBucketName}")
|
||||||
|
private String bucketName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过ID查询单条数据
|
* 通过ID查询单条数据
|
||||||
|
|
|
@ -375,25 +375,54 @@ public class HttpUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送 HTTP 请求并返回二进制数据流(InputStream)。
|
* 发送 HTTP 请求并返回二进制数据流(OutputStream)。
|
||||||
*
|
*
|
||||||
* @param url 请求的 URL 地址。
|
* @param url 请求的 URL 地址。
|
||||||
* @param token 要携带的 Token。
|
* @param headers 头节点。
|
||||||
* @return 服务器响应的二进制数据流(InputStream)。
|
* @return 服务器响应的二进制数据流(OutputStream)。
|
||||||
* @throws IOException 如果请求失败或发生其他 I/O 错误。
|
* @throws IOException 如果请求失败或发生其他 I/O 错误。
|
||||||
*/
|
*/
|
||||||
public static InputStream getInputStream(String url, String token) throws IOException {
|
public static InputStream getIntputStream(String url, Map<String, String> headers) throws IOException {
|
||||||
URL requestUrl = new URL(url);
|
URL requestUrl = new URL(url);
|
||||||
HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
|
HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
|
||||||
connection.setRequestMethod("GET");
|
|
||||||
connection.setRequestProperty("Authorization", "Bearer " + token); // 添加 Authorization 头部,携带 Token
|
|
||||||
|
|
||||||
|
// Set request headers
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
connection.setRequestProperty(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set other connection properties (e.g., timeouts, request method, etc.)
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setConnectTimeout(5000);
|
||||||
|
connection.setReadTimeout(5000);
|
||||||
|
|
||||||
|
// Connect and get the response code
|
||||||
|
connection.connect();
|
||||||
int responseCode = connection.getResponseCode();
|
int responseCode = connection.getResponseCode();
|
||||||
|
|
||||||
if (responseCode == HttpURLConnection.HTTP_OK) {
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||||
return connection.getInputStream(); // 获取响应的输入流
|
// Get the response InputStream
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
|
||||||
|
// // Create a ByteArrayOutputStream to store the response data
|
||||||
|
// ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
//
|
||||||
|
// // Read data from the InputStream and write it to the ByteArrayOutputStream
|
||||||
|
// byte[] buffer = new byte[1024];
|
||||||
|
// int bytesRead;
|
||||||
|
// while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
|
// outputStream.write(buffer, 0, bytesRead);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Close the InputStream
|
||||||
|
// inputStream.close();
|
||||||
|
|
||||||
|
// Return the ByteArrayOutputStream as an OutputStream
|
||||||
|
return inputStream;
|
||||||
} else {
|
} else {
|
||||||
throw new IOException("HTTP 请求失败,状态码:" + responseCode);
|
throw new IOException("HTTP request failed with response code: " + responseCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
|
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
|
||||||
public class LabelDatasetVersion implements Serializable {
|
public class LabelDatasetVersionVo implements Serializable {
|
||||||
private String token;
|
private String token;
|
||||||
private String project_id;
|
private String project_id;
|
||||||
private String dataset_id;
|
private Integer dataset_id;
|
||||||
private String version;
|
private String version;
|
||||||
private String desc;
|
private String desc;
|
||||||
private String exportType;
|
private String exportType;
|
||||||
|
@ -29,11 +29,11 @@ public class LabelDatasetVersion implements Serializable {
|
||||||
this.project_id = project_id;
|
this.project_id = project_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDataset_id() {
|
public Integer getDataset_id() {
|
||||||
return dataset_id;
|
return dataset_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDataset_id(String dataset_id) {
|
public void setDataset_id(Integer dataset_id) {
|
||||||
this.dataset_id = dataset_id;
|
this.dataset_id = dataset_id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,24 +160,25 @@
|
||||||
</foreach>
|
</foreach>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
|
<update id="insertOrUpdateBatch">
|
||||||
insert into experiment(name,workflow_id, global_param, status_list, description, create_by, create_time, update_by, update_time, state)
|
insert into experiment (id, name, workflow_id, global_param, status_list, description, create_by, create_time, update_by, update_time, state)
|
||||||
values
|
values
|
||||||
<foreach collection="entities" item="entity" separator=",">
|
<foreach collection="list" item="item" index="index" separator=",">
|
||||||
(#{entity.name},#{entity.workflowId}, #{entity.globalParam}, #{entity.statusList}, #{entity.description}, #{entity.createBy}, #{entity.createTime},
|
(#{item.id}, #{item.name}, #{item.workflowId}, #{item.globalParam}, #{item.statusList}, #{item.description}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.state})
|
||||||
#{entity.updateBy}, #{entity.updateTime}, #{entity.state})
|
|
||||||
</foreach>
|
</foreach>
|
||||||
on duplicate key update
|
ON DUPLICATE KEY UPDATE
|
||||||
name=values(name),
|
name = VALUES(name),
|
||||||
workflow_id = values(workflow_id),
|
workflow_id = VALUES(workflow_id),
|
||||||
global_param = values(global_param),
|
global_param = VALUES(global_param),
|
||||||
description = values(description),
|
status_list = VALUES(status_list),
|
||||||
create_by = values(create_by),
|
description = VALUES(description),
|
||||||
create_time = values(create_time),
|
create_by = VALUES(create_by),
|
||||||
update_by = values(update_by),
|
create_time = VALUES(create_time),
|
||||||
update_time = values(update_time),
|
update_by = VALUES(update_by),
|
||||||
state = values(state)
|
update_time = VALUES(update_time),
|
||||||
</insert>
|
state = VALUES(state);
|
||||||
|
</update>
|
||||||
|
|
||||||
|
|
||||||
<!--通过主键修改数据-->
|
<!--通过主键修改数据-->
|
||||||
<update id="update">
|
<update id="update">
|
||||||
|
|
|
@ -21,7 +21,13 @@
|
||||||
<result property="state" column="state" jdbcType="INTEGER"/>
|
<result property="state" column="state" jdbcType="INTEGER"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<!--查询非终止态的实例-->
|
||||||
|
<select id="queryByExperimentIsNotTerminated" resultMap="ExperimentInsMap">
|
||||||
|
select id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status,nodes_result, nodes_logs,global_param, start_time, finish_time, create_by, create_time, update_by, update_time, state
|
||||||
|
from experiment_ins
|
||||||
|
where (status NOT IN ('Terminated', 'Succeeded', 'Failed')
|
||||||
|
OR status IS NULL) and state = 1
|
||||||
|
</select>
|
||||||
|
|
||||||
<!--查询单个-->
|
<!--查询单个-->
|
||||||
<select id="queryById" resultMap="ExperimentInsMap">
|
<select id="queryById" resultMap="ExperimentInsMap">
|
||||||
|
@ -217,18 +223,39 @@
|
||||||
</foreach>
|
</foreach>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
|
<!-- <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">-->
|
||||||
insert into
|
<!-- insert into-->
|
||||||
experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,nodes_result,start_time,finish_time,create_by,create_time,update_by,update_time,state)
|
<!-- experiment_ins(experiment_id,argo_ins_name,argo_ins_ns,status,nodes_status,nodes_result,start_time,finish_time,create_by,create_time,update_by,update_time,state)-->
|
||||||
|
<!-- values-->
|
||||||
|
<!-- <foreach collection="entities" item="entity" separator=",">-->
|
||||||
|
<!-- (#{entity.experimentId},#{entity.argoInsName},#{entity.argoInsNs},#{entity.status},#{entity.nodesStatus},#{entity.nodesResult},#{entity.startTime},#{entity.finishTime},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state})-->
|
||||||
|
<!-- </foreach>-->
|
||||||
|
<!-- on duplicate key update-->
|
||||||
|
<!-- experiment_id = values(experiment_id)argo_ins_name = values(argo_ins_name)argo_ins_ns = values(argo_ins_ns)status = values(status) nodes_status = values(nodes_status) create_by = values(create_by)create_time = values(create_time)update_by = values(update_by)update_time = values(update_time)state = values(state)-->
|
||||||
|
<!-- </insert>-->
|
||||||
|
<update id="insertOrUpdateBatch">
|
||||||
|
insert into experiment_ins (id, experiment_id, argo_ins_name, argo_ins_ns, status, nodes_status, nodes_result, nodes_logs, global_param, start_time, finish_time, create_by, create_time, update_by, update_time, state)
|
||||||
values
|
values
|
||||||
<foreach collection="entities" item="entity" separator=",">
|
<foreach collection="list" item="item" index="index" separator=",">
|
||||||
(#{entity.experimentId},#{entity.argoInsName},#{entity.argoInsNs},#{entity.status},#{entity.nodesStatus},#{entity.nodesResult},#{entity.startTime},#{entity.finishTime},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state})
|
(#{item.id}, #{item.experimentId}, #{item.argoInsName}, #{item.argoInsNs}, #{item.status}, #{item.nodesStatus}, #{item.nodesResult}, #{item.nodesLogs}, #{item.globalParam}, #{item.startTime}, #{item.finishTime}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.state})
|
||||||
</foreach>
|
</foreach>
|
||||||
on duplicate key update
|
ON DUPLICATE KEY UPDATE
|
||||||
experiment_id = values(experiment_id)argo_ins_name = values(argo_ins_name)argo_ins_ns =
|
experiment_id = VALUES(experiment_id),
|
||||||
values(argo_ins_ns)status = values(status) nodes_status = values(nodes_status) create_by = values(create_by)create_time =
|
argo_ins_name = VALUES(argo_ins_name),
|
||||||
values(create_time)update_by = values(update_by)update_time = values(update_time)state = values(state)
|
argo_ins_ns = VALUES(argo_ins_ns),
|
||||||
</insert>
|
status = VALUES(status),
|
||||||
|
nodes_status = VALUES(nodes_status),
|
||||||
|
nodes_result = VALUES(nodes_result),
|
||||||
|
nodes_logs = VALUES(nodes_logs),
|
||||||
|
global_param = VALUES(global_param),
|
||||||
|
start_time = VALUES(start_time),
|
||||||
|
finish_time = VALUES(finish_time),
|
||||||
|
create_by = VALUES(create_by),
|
||||||
|
create_time = VALUES(create_time),
|
||||||
|
update_by = VALUES(update_by),
|
||||||
|
update_time = VALUES(update_time),
|
||||||
|
state = VALUES(state);
|
||||||
|
</update>
|
||||||
|
|
||||||
<update id="update">
|
<update id="update">
|
||||||
update experiment_ins
|
update experiment_ins
|
||||||
|
|
Loading…
Reference in New Issue