| @@ -8,6 +8,7 @@ import org.springframework.data.domain.PageRequest; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.annotation.Resource; | |||
| import java.util.List; | |||
| /** | |||
| * (DatasetVersion)表控制层 | |||
| @@ -69,7 +70,7 @@ public class DatasetVersionController { | |||
| /** | |||
| * 新增数据 | |||
| * 新增单条数据 | |||
| * | |||
| * @param datasetVersion 实体 | |||
| * @return 新增结果 | |||
| @@ -80,6 +81,20 @@ public class DatasetVersionController { | |||
| return AjaxResult.success(this.datasetVersionService.insert(datasetVersion)); | |||
| } | |||
| /** | |||
| * 批量新增数据集版本 | |||
| * | |||
| * @param datasetVersions 实体 | |||
| * @return 新增结果 | |||
| */ | |||
| @PostMapping(("/addDatasetVersions")) | |||
| @ApiOperation("添加数据集版本") | |||
| public AjaxResult addDatasetVersions(@RequestBody List<DatasetVersion> datasetVersions) throws Exception { | |||
| return AjaxResult.success(this.datasetVersionService.addDatasetVersions(datasetVersions)); | |||
| } | |||
| /** | |||
| * 编辑数据 | |||
| * | |||
| @@ -12,6 +12,7 @@ import org.springframework.data.domain.Page; | |||
| import org.springframework.data.domain.PageRequest; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import org.springframework.web.multipart.MultipartFile; | |||
| import javax.annotation.Resource; | |||
| @@ -84,7 +85,7 @@ public class ImageController { | |||
| /** | |||
| * 新增镜像和版本 | |||
| * | |||
| * @param datasetVo 实体 | |||
| * @param imageVo 实体 | |||
| * @return 新增结果 | |||
| */ | |||
| @PostMapping("/addImageAndVersion") | |||
| @@ -109,13 +110,36 @@ public class ImageController { | |||
| * 删除数据 | |||
| * | |||
| * @param id 主键 | |||
| * | |||
| * @return 删除是否成功 | |||
| */ | |||
| @DeleteMapping("{id}") | |||
| public AjaxResult deleteById(@PathVariable("id") Integer id) { | |||
| return AjaxResult.success(this.imageService.removeById(id)); | |||
| } | |||
| @PostMapping("/local") | |||
| @ApiOperation("从本地上传构建镜像") | |||
| public AjaxResult createImageFromLocal(@RequestParam("name") String imageName, | |||
| @RequestParam("tag") String imageTag, | |||
| @RequestParam("description") String imageDescription){ | |||
| return AjaxResult.success(this.imageService.createImageFromLocal(imageName,imageTag,imageDescription)); | |||
| } | |||
| /** | |||
| * 镜像上传 | |||
| * | |||
| * | |||
| * @param files 文件 | |||
| * @return 上传结果 | |||
| */ | |||
| @PostMapping("/upload") | |||
| @ApiOperation(value = "上传镜像文件", notes = "上传镜像tar包,返回存储路径") | |||
| public AjaxResult uploadImageFiles(@RequestParam("files") MultipartFile[] files) throws Exception { | |||
| return AjaxResult.success(this.imageService.uploadImageFiles(files)); | |||
| } | |||
| } | |||
| @@ -124,14 +124,13 @@ public class ModelsController { | |||
| * | |||
| * @param files 文件 | |||
| * @param modelsId 模型表主键 | |||
| * @param version 模型版本表主键 | |||
| * @return 上传结果 | |||
| */ | |||
| @PostMapping("/upload") | |||
| @ApiOperation(value = "上传模型", notes = "根据模型id和版本号上传模型文件,并将信息存入数据库。") | |||
| public AjaxResult uploadModels(@RequestParam("files") MultipartFile[] files, @RequestParam("models_id") Integer modelsId, @RequestParam("version") String version) throws Exception { | |||
| return AjaxResult.success(this.modelsService.uploadModels(files,modelsId,version)); | |||
| @ApiOperation(value = "上传模型", notes = "根据模型id上传模型文件,并将信息存入数据库。") | |||
| public AjaxResult uploadModels(@RequestParam("files") MultipartFile[] files, @RequestParam("models_id") Integer modelsId) throws Exception { | |||
| return AjaxResult.success(this.modelsService.uploadModels(files,modelsId)); | |||
| } | |||
| @@ -10,6 +10,7 @@ import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.annotation.Resource; | |||
| import java.util.List; | |||
| /** | |||
| * (ModelsVersion)表控制层 | |||
| @@ -80,6 +81,18 @@ public class ModelsVersionController { | |||
| return AjaxResult.success(this.modelsVersionService.insert(modelsVersion)); | |||
| } | |||
| /** | |||
| * 批量新增模型版本 | |||
| * | |||
| * @param datasetVersions 实体 | |||
| * @return 新增结果 | |||
| */ | |||
| @PostMapping(("/addDatasetVersions")) | |||
| @ApiOperation("添加数据集版本") | |||
| public AjaxResult addModelVersions(@RequestBody List<ModelsVersion> modelsVersions) throws Exception { | |||
| return AjaxResult.success(this.modelsVersionService.addModelVersions(modelsVersions)); | |||
| } | |||
| /** | |||
| * 编辑数据 | |||
| * | |||
| @@ -28,12 +28,13 @@ public class DatasetVersion implements Serializable { | |||
| * 版本 | |||
| */ | |||
| @ApiModelProperty(name = "version") | |||
| @CheckDuplicate | |||
| //@CheckDuplicate | |||
| private String version; | |||
| /** | |||
| * 数据集存储地址 | |||
| */ | |||
| @ApiModelProperty(name = "url") | |||
| @CheckDuplicate | |||
| private String url; | |||
| /** | |||
| * 文件名 | |||
| @@ -71,4 +71,6 @@ public interface DatasetVersionService { | |||
| Map<Integer,String> deleteDatasetVersion(Integer datasetId, String version); | |||
| void checkDeclaredVersion(DatasetVersion insert) throws Exception; | |||
| String addDatasetVersions(List<DatasetVersion> datasetVersions); | |||
| } | |||
| @@ -5,6 +5,7 @@ import com.ruoyi.platform.domain.Workflow; | |||
| import com.ruoyi.platform.vo.ImageVo; | |||
| import org.springframework.data.domain.Page; | |||
| import org.springframework.data.domain.PageRequest; | |||
| import org.springframework.web.multipart.MultipartFile; | |||
| import java.util.Collection; | |||
| @@ -64,4 +65,9 @@ public interface ImageService { | |||
| Page<Image> queryByName(String name); | |||
| String insertImageAndVersion(ImageVo imageVo) throws Exception; | |||
| String createImageFromLocal(String imageName, String imageTag, String imageDescription); | |||
| String uploadImageFiles(MultipartFile[] files); | |||
| } | |||
| @@ -11,6 +11,7 @@ import org.springframework.data.domain.PageRequest; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.multipart.MultipartFile; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| @@ -69,7 +70,7 @@ public interface ModelsService { | |||
| Map uploadModels(MultipartFile[] files, Integer id, String version) throws Exception; | |||
| List<Map<String, String>> uploadModels(MultipartFile[] files, Integer id) throws Exception; | |||
| Map uploadModelsPipeline(ModelsVersion modelsVersion) throws Exception; | |||
| @@ -69,4 +69,6 @@ public interface ModelsVersionService { | |||
| List<ModelsVersion> queryByModelsIdAndVersion(Integer modelsId, String version); | |||
| Map<Integer, String> deleteModelsVersion(Integer modelsId, String version); | |||
| String addModelVersions(List<ModelsVersion> modelsVersions); | |||
| } | |||
| @@ -340,7 +340,7 @@ public class DatasetServiceImpl implements DatasetService { | |||
| datasetVersion.setAvailableCluster(datasetVo.getAvailableCluster()); | |||
| DatasetVersion datasetVersionInsert = datasetVersionService.insert(datasetVersion); | |||
| if (datasetVersionInsert == null) { | |||
| throw new Exception("新增数据集失败"); | |||
| throw new Exception("新增数据集版本失败"); | |||
| } | |||
| return "新增数据集成功"; | |||
| } | |||
| @@ -65,13 +65,8 @@ public class DatasetVersionServiceImpl implements DatasetVersionService { | |||
| */ | |||
| @Override | |||
| public DatasetVersion insert(DatasetVersion datasetVersion) throws Exception { | |||
| checkDeclaredVersion(datasetVersion); | |||
| LoginUser loginUser = SecurityUtils.getLoginUser(); | |||
| datasetVersion.setCreateBy(loginUser.getUsername()); | |||
| datasetVersion.setUpdateBy(loginUser.getUsername()); | |||
| datasetVersion.setUpdateTime(new Date()); | |||
| datasetVersion.setCreateTime(new Date()); | |||
| datasetVersion.setState(1); | |||
| //插入预备 | |||
| insertPrepare(datasetVersion); | |||
| this.datasetVersionDao.insert(datasetVersion); | |||
| return datasetVersion; | |||
| } | |||
| @@ -161,13 +156,39 @@ public class DatasetVersionServiceImpl implements DatasetVersionService { | |||
| public void checkDeclaredVersion(DatasetVersion insert) throws Exception { | |||
| DatasetVersion datasetVersion = datasetVersionDao.queryByDatasetVersion(insert); | |||
| if (datasetVersion != null) { | |||
| Field[] fields = Dataset.class.getDeclaredFields(); | |||
| Field[] fields = DatasetVersion.class.getDeclaredFields(); | |||
| for (Field field : fields) { | |||
| if (field.isAnnotationPresent(CheckDuplicate.class)) { | |||
| CheckDuplicate annotation = field.getAnnotation(CheckDuplicate.class); | |||
| throw new Exception(annotation.value() + "不能重复"); | |||
| throw new Exception(annotation.value() + "数据集版本不能重复"); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| public String addDatasetVersions(List<DatasetVersion> datasetVersions) { | |||
| try { | |||
| // 遍历传入的 datasetVersions 列表 | |||
| for(DatasetVersion datasetVersion : datasetVersions) { | |||
| insertPrepare(datasetVersion); | |||
| } | |||
| this.datasetVersionDao.insertBatch(datasetVersions); | |||
| return "新增数据集版本成功"; | |||
| } catch (Exception e) { | |||
| // 如果出现异常,返回异常消息 | |||
| return "新增数据集版本失败: " + e.getMessage(); | |||
| } | |||
| } | |||
| private void insertPrepare(DatasetVersion datasetVersion) throws Exception { | |||
| //checkDeclaredVersion(datasetVersion); | |||
| LoginUser loginUser = SecurityUtils.getLoginUser(); | |||
| datasetVersion.setCreateBy(loginUser.getUsername()); | |||
| datasetVersion.setUpdateBy(loginUser.getUsername()); | |||
| datasetVersion.setUpdateTime(new Date()); | |||
| datasetVersion.setCreateTime(new Date()); | |||
| datasetVersion.setState(1); | |||
| } | |||
| } | |||
| @@ -6,6 +6,7 @@ import com.ruoyi.platform.mapper.ImageDao; | |||
| import com.ruoyi.platform.mapper.ImageVersionDao; | |||
| import com.ruoyi.platform.service.ImageService; | |||
| import com.ruoyi.platform.service.ImageVersionService; | |||
| import com.ruoyi.platform.utils.FileUtil; | |||
| import com.ruoyi.platform.vo.ImageVo; | |||
| import com.ruoyi.system.api.model.LoginUser; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| @@ -13,9 +14,14 @@ 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.transaction.annotation.Transactional; | |||
| import org.springframework.web.multipart.MultipartFile; | |||
| import javax.annotation.Resource; | |||
| import java.io.InputStream; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| /** | |||
| * (Image)表服务实现类 | |||
| @@ -142,6 +148,7 @@ public class ImageServiceImpl implements ImageService { | |||
| } | |||
| @Override | |||
| @Transactional | |||
| public String insertImageAndVersion(ImageVo imageVo) throws Exception { | |||
| Image image = new Image(); | |||
| image.setName(imageVo.getName()); | |||
| @@ -165,4 +172,56 @@ public class ImageServiceImpl implements ImageService { | |||
| } | |||
| return "新增镜像成功"; | |||
| } | |||
| @Override | |||
| public String createImageFromLocal(String imageName, String imageTag, String imageDescription) { | |||
| return null; | |||
| } | |||
| @Override | |||
| public String uploadImageFiles(MultipartFile[] files) { | |||
| // Map<Integer, Object> results = new HashMap<Integer, Object>(); | |||
| // | |||
| // // 验证模型是否存在 | |||
| // Models models = this.modelsDao.queryById(id); | |||
| // if (models == null) { | |||
| // throw new Exception("未找到模型记录"); | |||
| // } | |||
| // | |||
| // for (MultipartFile file:files){ | |||
| // if (file.isEmpty()) { | |||
| // throw new Exception("文件为空,无法上传"); | |||
| // } | |||
| // // 获取文件大小并转换为KB | |||
| // long sizeInBytes = file.getSize(); | |||
| // String formattedSize = FileUtil.formatFileSize(sizeInBytes); // 格式化文件大小 | |||
| // | |||
| // // 其余操作基于 modelsVersionToUse | |||
| // String username = SecurityUtils.getLoginUser().getUsername(); | |||
| // String fileName = file.getOriginalFilename(); | |||
| // // String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); | |||
| // String objectName = "models/" + username + "/" + models.getName() + "/" + version + "/" + fileName; | |||
| // | |||
| // // 上传文件到MinIO并将记录新增到数据库中 | |||
| // try (InputStream inputStream = file.getInputStream()) { | |||
| // minioUtil.uploadObject(bucketName, objectName, inputStream); | |||
| // ModelsVersion modelsVersion = new ModelsVersion(); | |||
| // modelsVersion.setModelsId(id); | |||
| // modelsVersion.setVersion(version); | |||
| // modelsVersion.setUrl(objectName); | |||
| // modelsVersion.setFileName(fileName); | |||
| // modelsVersion.setFileSize(formattedSize); | |||
| // //返回插入结果 | |||
| // ModelsVersion insertedModelsVersion = modelsVersionService.insert(modelsVersion); | |||
| // Map<String, String> fileResult = new HashMap<>(); | |||
| // fileResult.put("fileName", file.getOriginalFilename()); | |||
| // fileResult.put("url", objectName); // objectName根据实际情况定义 | |||
| // results.put(insertedModelsVersion.getId(), fileResult); | |||
| // } catch (Exception e) { | |||
| // throw new Exception("上传到模型失败: " + e.getMessage(), e); | |||
| // } | |||
| // } | |||
| // return results; | |||
| return null; | |||
| } | |||
| } | |||
| @@ -1,8 +1,6 @@ | |||
| package com.ruoyi.platform.service.impl; | |||
| import com.ruoyi.common.security.utils.SecurityUtils; | |||
| import com.ruoyi.platform.domain.Dataset; | |||
| import com.ruoyi.platform.domain.DatasetVersion; | |||
| import com.ruoyi.platform.domain.Models; | |||
| import com.ruoyi.platform.domain.ModelsVersion; | |||
| import com.ruoyi.platform.mapper.ModelsDao; | |||
| @@ -10,6 +8,7 @@ import com.ruoyi.platform.mapper.ModelsVersionDao; | |||
| import com.ruoyi.platform.service.ModelsService; | |||
| import com.ruoyi.platform.service.ModelsVersionService; | |||
| import com.ruoyi.platform.utils.BeansUtils; | |||
| import com.ruoyi.platform.utils.FileUtil; | |||
| import com.ruoyi.platform.utils.MinioUtil; | |||
| import com.ruoyi.platform.vo.ModelsVo; | |||
| import com.ruoyi.system.api.model.LoginUser; | |||
| @@ -32,10 +31,8 @@ import javax.annotation.Resource; | |||
| import java.io.ByteArrayInputStream; | |||
| import java.io.ByteArrayOutputStream; | |||
| import java.io.InputStream; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.text.SimpleDateFormat; | |||
| import java.util.*; | |||
| import java.util.stream.Collectors; | |||
| import java.util.zip.ZipEntry; | |||
| import java.util.zip.ZipOutputStream; | |||
| @@ -209,15 +206,14 @@ public class ModelsServiceImpl implements ModelsService { | |||
| /** | |||
| * 上传模型 | |||
| * | |||
| * @param files 文件 | |||
| * @param id 模型id | |||
| * @param version 模型版本 | |||
| * @param files 文件 | |||
| * @param id 模型id | |||
| * @return 是否成功 | |||
| */ | |||
| @Override | |||
| public Map uploadModels(MultipartFile[] files, Integer id, String version) throws Exception { | |||
| public List<Map<String, String>> uploadModels(MultipartFile[] files, Integer id) throws Exception { | |||
| Map<Integer, Object> results = new HashMap<Integer, Object>(); | |||
| List<Map<String, String>> results = new ArrayList<>(); | |||
| // 验证模型是否存在 | |||
| Models models = this.modelsDao.queryById(id); | |||
| @@ -231,33 +227,36 @@ public class ModelsServiceImpl implements ModelsService { | |||
| } | |||
| // 获取文件大小并转换为KB | |||
| long sizeInBytes = file.getSize(); | |||
| double sizeInKB = sizeInBytes / 1024.0; | |||
| String formattedSize = FileUtil.formatFileSize(sizeInBytes); // 格式化文件大小 | |||
| // 其余操作基于 modelsVersionToUse | |||
| String username = SecurityUtils.getLoginUser().getUsername(); | |||
| String fileName = file.getOriginalFilename(); | |||
| // String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); | |||
| String objectName = "models/" + username + "/" + models.getName() + "/" + version + "/" + fileName; | |||
| Date createTime = new Date(); | |||
| String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); | |||
| String objectName = "models/" + username + "/" + models.getName() + "/" + timestamp + "/" + fileName; | |||
| // 上传文件到MinIO并将记录新增到数据库中 | |||
| try (InputStream inputStream = file.getInputStream()) { | |||
| minioUtil.uploadObject(bucketName, objectName, inputStream); | |||
| ModelsVersion modelsVersion = new ModelsVersion(); | |||
| modelsVersion.setModelsId(id); | |||
| modelsVersion.setVersion(version); | |||
| modelsVersion.setUrl(objectName); | |||
| modelsVersion.setFileName(fileName); | |||
| modelsVersion.setFileSize(String.valueOf(sizeInKB)); | |||
| //返回插入结果 | |||
| ModelsVersion insertedModelsVersion = modelsVersionService.insert(modelsVersion); | |||
| // ModelsVersion modelsVersion = new ModelsVersion(); | |||
| // modelsVersion.setModelsId(id); | |||
| // modelsVersion.setVersion(version); | |||
| // modelsVersion.setUrl(objectName); | |||
| // modelsVersion.setFileName(fileName); | |||
| // modelsVersion.setFileSize(formattedSize); | |||
| // //返回插入结果 | |||
| // ModelsVersion insertedModelsVersion = modelsVersionService.insert(modelsVersion); | |||
| Map<String, String> fileResult = new HashMap<>(); | |||
| fileResult.put("fileName", file.getOriginalFilename()); | |||
| fileResult.put("url", objectName); // objectName根据实际情况定义 | |||
| results.put(insertedModelsVersion.getId(), fileResult); | |||
| fileResult.put("fileSize", formattedSize); | |||
| results.add(fileResult); | |||
| } catch (Exception e) { | |||
| throw new Exception("上传到模型失败: " + e.getMessage(), e); | |||
| throw new Exception("上传模型失败: " + e.getMessage(), e); | |||
| } | |||
| } | |||
| return results; | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| package com.ruoyi.platform.service.impl; | |||
| import com.ruoyi.common.security.utils.SecurityUtils; | |||
| import com.ruoyi.platform.domain.DatasetVersion; | |||
| import com.ruoyi.platform.domain.ModelsVersion; | |||
| import com.ruoyi.platform.mapper.ModelsDao; | |||
| import com.ruoyi.platform.mapper.ModelsVersionDao; | |||
| @@ -64,12 +65,8 @@ public class ModelsVersionServiceImpl implements ModelsVersionService { | |||
| */ | |||
| @Override | |||
| public ModelsVersion insert(ModelsVersion modelsVersion) { | |||
| LoginUser loginUser = SecurityUtils.getLoginUser(); | |||
| modelsVersion.setCreateBy(loginUser.getUsername()); | |||
| modelsVersion.setUpdateBy(loginUser.getUsername()); | |||
| modelsVersion.setUpdateTime(new Date()); | |||
| modelsVersion.setCreateTime(new Date()); | |||
| modelsVersion.setState(1); | |||
| //插入预备 | |||
| insertPrepare(modelsVersion); | |||
| this.modelsVersionDao.insert(modelsVersion); | |||
| return modelsVersion; | |||
| } | |||
| @@ -179,4 +176,29 @@ public class ModelsVersionServiceImpl implements ModelsVersionService { | |||
| return results; | |||
| } | |||
| @Override | |||
| public String addModelVersions(List<ModelsVersion> modelsVersions) { | |||
| try { | |||
| // 遍历传入的 datasetVersions 列表 | |||
| for(ModelsVersion modelsVersion : modelsVersions) { | |||
| insertPrepare(modelsVersion); | |||
| } | |||
| this.modelsVersionDao.insertBatch(modelsVersions); | |||
| return "新增模型版本成功"; | |||
| } catch (Exception e) { | |||
| // 如果出现异常,返回异常消息 | |||
| return "新增模型版本失败: " + e.getMessage(); | |||
| } | |||
| } | |||
| private void insertPrepare(ModelsVersion modelsVersion) { | |||
| LoginUser loginUser = SecurityUtils.getLoginUser(); | |||
| modelsVersion.setCreateBy(loginUser.getUsername()); | |||
| modelsVersion.setUpdateBy(loginUser.getUsername()); | |||
| modelsVersion.setUpdateTime(new Date()); | |||
| modelsVersion.setCreateTime(new Date()); | |||
| modelsVersion.setState(1); | |||
| } | |||
| } | |||
| @@ -21,4 +21,7 @@ public class FileUtil { | |||
| } | |||
| } | |||
| } | |||
| @@ -171,7 +171,7 @@ | |||
| </insert> | |||
| <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true"> | |||
| insert into dataset_version(dataset_idversionurlfile_namefile_sizeavailable_clusterstatuscreate_bycreate_timeupdate_byupdate_timestate) | |||
| insert into dataset_version(dataset_id,version,url,file_name,file_size,available_cluster,status,create_by,create_time,update_by,update_time,state) | |||
| values | |||
| <foreach collection="entities" item="entity" separator=","> | |||
| (#{entity.datasetId},#{entity.version},#{entity.url},#{entity.fileName},#{entity.fileSize},#{entity.availableCluster},#{entity.status},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state}) | |||
| @@ -179,7 +179,7 @@ | |||
| </insert> | |||
| <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true"> | |||
| insert into dataset_version(dataset_idversionurlfile_namefile_sizeavailable_clusterstatuscreate_bycreate_timeupdate_byupdate_timestate) | |||
| insert into dataset_version(dataset_id,version,url,file_name,file_size,available_cluster,status,create_by,create_time,update_by,update_time,state) | |||
| values | |||
| <foreach collection="entities" item="entity" separator=","> | |||
| (#{entity.datasetId},#{entity.version},#{entity.url},#{entity.fileName},#{entity.fileSize},#{entity.availableCluster},#{entity.status},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state}) | |||