Commit 39e57a66 authored by pengxin's avatar pengxin

还原代码以及新增数据接口。

parent d009c5f7
......@@ -3,12 +3,52 @@ package com.yice.webadmin.app.constant;
public class DatasetConstant {
/**
*未发布状态0
* 未发布状态
*/
public static final Integer STATUS_UNPUBLISHED = 0;
/**
*已发布状态
* 已发布状态
*/
public static final Integer STATUS_PUBLISHED = 1;
/**
* 未完成状态
*/
public static final Integer STATUS_UNFINISHED = 0;
/**
* 未标记状态
*/
public static final Integer UNMARK = 0;
/**
* 已完成状态
*/
public static final Integer STATUS_FINISHED = 1 ;
/**
* 文件上传字段
*/
public static final Integer UPLOAD = 1 ;
/**
* 文件上传字段
*/
public static final String KB = "KB" ;
/**
* 文件名称
*/
public static final String FILE_NAME = "output.";
/**
* 导出位置
*/
public static final String OUTPUT_POSTION = "导出至本地" ;
/**
* 导出内容
*/
public static final String OUTPUT_CONTENT = "全部数据" ;
}
......@@ -25,6 +25,22 @@ public final class MongoConstant {
*/
public static final String CREATE_TIME = "createTime";
/**
* 标记状态
*/
public static final String MARK_STATUS = "markStatus";
/**
* 标记状态
*/
public static final String OUTPUT = "output";
/**
* NULL状态
*/
public static final String EMPTY = "";
/**
* 主键id
*/
......
......@@ -56,30 +56,6 @@ public class DatasetDataController {
return ResponseResult.success();
}
/**
* 统计总个数
* @param versionId 版本标识
* @return
*/
@GetMapping("/summaryCount")
public ResponseResult<DatasetDataSummaryDto> summaryCount(@RequestParam Long versionId) {
if (MyCommonUtil.existBlankArgument(versionId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_ID_EXIST);
}
DatasetDataSummaryDto summaryDto = new DatasetDataSummaryDto();
DatasetData datasetDataFilter = new DatasetData();
datasetDataFilter.setVersionId(versionId);
Long allMarkCount = datasetDataService.count(datasetDataFilter);
summaryDto.setAllMarkCount(allMarkCount);
datasetDataFilter.setMarkStatus(DatasetConstant.STATUS_UNPUBLISHED);
Long unMarkCount = datasetDataService.count(datasetDataFilter);
summaryDto.setUnMarkCount(unMarkCount);
summaryDto.setMarkCount(allMarkCount - unMarkCount);
return ResponseResult.success(summaryDto);
}
/**
* 删除数据集版本数据。
*
......@@ -125,6 +101,25 @@ public class DatasetDataController {
return ResponseResult.success(MyPageUtil.makeResponseData(datasetDataList, count));
}
/**
* 根据版本id,查询该数据集列表
* @param datasetDataDtoFilter 数据集对象
* @param pageParam 分页参数
* @return
*/
@PostMapping("/load")
public ResponseResult<MyPageData<DatasetData>> load(
@MyRequestBody DatasetDataDto datasetDataDtoFilter,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetData datasetDataFilter = MyModelUtil.copyTo(datasetDataDtoFilter, DatasetData.class);
List<DatasetData> datasetDataList = datasetDataService.list(datasetDataFilter,pageParam);
Long count = datasetDataService.count(datasetDataFilter);
return ResponseResult.success(MyPageUtil.makeResponseData(datasetDataList, count));
}
/**
* 查看指定数据集版本对象详情。
* @param id 主键标识。
......@@ -147,4 +142,29 @@ public class DatasetDataController {
}
return ResponseResult.success(datasetData);
}
/**
* 统计总个数
* @param versionId 版本标识
* @return
*/
@GetMapping("/summaryCount")
public ResponseResult<DatasetDataSummaryDto> summaryCount(@RequestParam Long versionId) {
if (MyCommonUtil.existBlankArgument(versionId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_ID_EXIST);
}
DatasetDataSummaryDto summaryDto = new DatasetDataSummaryDto();
DatasetData datasetDataFilter = new DatasetData();
datasetDataFilter.setVersionId(versionId);
Long allMarkCount = datasetDataService.count(datasetDataFilter);
summaryDto.setAllMarkCount(allMarkCount);
datasetDataFilter.setMarkStatus(DatasetConstant.STATUS_UNPUBLISHED);
Long unMarkCount = datasetDataService.count(datasetDataFilter);
summaryDto.setUnMarkCount(unMarkCount);
summaryDto.setMarkCount(allMarkCount - unMarkCount);
return ResponseResult.success(summaryDto);
}
}
......@@ -125,6 +125,29 @@ public class DatasetManageController {
return ResponseResult.success(MyPageUtil.makeResponseData(datasetManageList, DatasetManage.INSTANCE));
}
/**
* 查询所有数据集列表最新的记录列表进行分组查询。
*
* @param datasetManageDtoFilter 过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/findDatasets")
public ResponseResult<MyPageData<DatasetManageVo>> findDatasets(
@MyRequestBody DatasetManageDto datasetManageDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetManage datasetManageFilter = MyModelUtil.copyTo(datasetManageDtoFilter, DatasetManage.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, DatasetManage.class);
List<DatasetManage> datasetManageList =
datasetManageService.getDatasetManageGroupList(datasetManageFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(datasetManageList, DatasetManage.INSTANCE));
}
/**
* 列出符合过滤条件的数据集管理列表。
*
......
package com.yice.webadmin.app.controller;
import com.github.pagehelper.page.PageMethod;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.yice.common.core.annotation.MyRequestBody;
import com.yice.common.core.constant.ErrorCodeEnum;
import com.yice.common.core.object.*;
import com.yice.common.core.util.MyCommonUtil;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.core.util.MyPageUtil;
import com.yice.common.log.annotation.OperationLog;
import com.yice.common.log.model.constant.SysOperationLogType;
import com.yice.webadmin.app.dto.DatasetOutputDto;
import com.yice.webadmin.app.model.DatasetOutput;
import com.yice.webadmin.app.service.DatasetOutputService;
import com.yice.webadmin.app.vo.DatasetOutputVo;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 数据集详情操作控制器类。
*
* @author linking
* @date 2023-04-13
*/
@Api(tags = "数据集版本导出管理接口")
@Slf4j
@RestController
@RequestMapping("/admin/app/datasetOutput")
public class DatasetOutputController {
@Autowired
private DatasetOutputService datasetOutputService;
/**
* 新增数据集详情数据。
*
* @param datasetOutputDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。
*/
@ApiOperationSupport(ignoreParameters = {"datasetOutputDto.outputId"})
@OperationLog(type = SysOperationLogType.ADD)
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody DatasetOutputDto datasetOutputDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetOutputDto, false);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetOutput datasetOutput = MyModelUtil.copyTo(datasetOutputDto, DatasetOutput.class);
datasetOutput = datasetOutputService.saveNew(datasetOutput);
return ResponseResult.success(datasetOutput.getOutputId());
}
/**
* 更新数据集详情数据。
*
* @param datasetOutputDto 更新对象。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody DatasetOutputDto datasetOutputDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetOutputDto, true);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetOutput datasetOutput = MyModelUtil.copyTo(datasetOutputDto, DatasetOutput.class);
DatasetOutput originaldatasetOutput = datasetOutputService.getById(datasetOutput.getOutputId());
if (originaldatasetOutput == null) {
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!datasetOutputService.update(datasetOutput, originaldatasetOutput)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
/**
* 删除数据集详情数据。
*
* @param detailId 删除对象主键Id。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.DELETE)
@PostMapping("/delete")
public ResponseResult<Void> delete(@MyRequestBody Long detailId) {
if (MyCommonUtil.existBlankArgument(detailId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return this.doDelete(detailId);
}
/**
* 列出符合过滤条件的数据集详情列表。
*
* @param datasetOutputDtoFilter 过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<DatasetOutputVo>> list(
@MyRequestBody DatasetOutputDto datasetOutputDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetOutput datasetOutputFilter = MyModelUtil.copyTo(datasetOutputDtoFilter, DatasetOutput.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, DatasetOutput.class);
List<DatasetOutput> datasetOutputList =
datasetOutputService.getDatasetOutputListWithRelation(datasetOutputFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(datasetOutputList, DatasetOutput.INSTANCE));
}
/**
* 查看指定数据集详情对象详情。
*
* @param detailId 指定对象主键Id。
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<DatasetOutputVo> view(@RequestParam Long detailId) {
DatasetOutput datasetOutput = datasetOutputService.getByIdWithRelation(detailId, MyRelationParam.full());
if (datasetOutput == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
DatasetOutputVo datasetOutputVo = DatasetOutput.INSTANCE.fromModel(datasetOutput);
return ResponseResult.success(datasetOutputVo);
}
private ResponseResult<Void> doDelete(Long detailId) {
String errorMessage;
// 验证关联Id的数据合法性
DatasetOutput originaldatasetOutput = datasetOutputService.getById(detailId);
if (originaldatasetOutput == null) {
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!datasetOutputService.remove(detailId)) {
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
return ResponseResult.success();
}
}
......@@ -18,11 +18,15 @@ import com.yice.common.core.util.MyPageUtil;
import com.yice.common.log.annotation.OperationLog;
import com.yice.common.log.model.constant.SysOperationLogType;
import com.yice.webadmin.app.config.PythonConfig;
import com.yice.webadmin.app.constant.DatasetConstant;
import com.yice.webadmin.app.data.DatasetData;
import com.yice.webadmin.app.dto.DatasetDetailDto;
import com.yice.webadmin.app.dto.DatasetVersionDto;
import com.yice.webadmin.app.model.DatasetDetail;
import com.yice.webadmin.app.model.DatasetOutput;
import com.yice.webadmin.app.model.DatasetVersion;
import com.yice.webadmin.app.service.DatasetDataService;
import com.yice.webadmin.app.service.DatasetOutputService;
import com.yice.webadmin.app.service.DatasetVersionService;
import com.yice.webadmin.app.vo.DatasetVersionVo;
import io.swagger.annotations.Api;
......@@ -42,10 +46,7 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
/**
* 数据集版本操作控制器类。
......@@ -65,6 +66,8 @@ public class DatasetVersionController {
private PythonConfig pythonConfig;
@Autowired
private DatasetDataService datasetDataService;
@Autowired
private DatasetOutputService datasetOutputService;
/**
* 新增数据集版本数据。
*
......@@ -110,6 +113,40 @@ public class DatasetVersionController {
return ResponseResult.success();
}
/**
* 更新数据集版本数据。
*
* @param versionId 更新对象。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@GetMapping("/publish")
public ResponseResult<Void> publish(@RequestParam("versionId") Long versionId) {
String errorMessage;
if (null == versionId) {
errorMessage = "数据验证失败,参数不能为空!";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetVersion datasetVersion = datasetVersionService.getById(versionId);
if (datasetVersion == null) {
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
DatasetData datasetDataFilter = new DatasetData();
datasetDataFilter.setMarkStatus(DatasetConstant.UNMARK);
datasetDataFilter.setVersionId(versionId);
Long count = datasetDataService.count(datasetDataFilter);
if (count > 0) {
errorMessage = "该数据集不满足发布条件,请确保数据集已完成全部数据标注!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
datasetVersion.setReleaseStatus(DatasetConstant.STATUS_PUBLISHED);
if (!datasetVersionService.update(datasetVersion)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
/**
* 删除数据集版本数据。
*
......@@ -223,7 +260,7 @@ public class DatasetVersionController {
ObjectNode objectNode = (ObjectNode) rootNode;
objectNode.remove(keyToRemove);
} else {
log.error("Root node is not an object.");
log.error("Root node is not an object.");
}
// 将更新后的JSON写回文件
objectMapper.writeValue(jsonFile, rootNode);
......@@ -296,10 +333,10 @@ public class DatasetVersionController {
if (!Files.isWritable(path)) {
Files.createDirectories(Paths.get(pythonConfig.getDatasetFileBaseDir()));
}
// 文件写入指定路径
// 文件写入指定路径、应该是追加到文件里面
Files.write(path, bytes);
// 写入到mongodb中
datasetVersionService.writeDatasetFileForMongo(bytes,importFile.getOriginalFilename(),versionId);
datasetVersionService.writeDatasetFile(bytes,importFile.getOriginalFilename(),versionId);
} catch (IOException e) {
log.error("Failed to write imported file [" + importFile.getOriginalFilename() + " ].", e);
throw e;
......@@ -325,4 +362,30 @@ public class DatasetVersionController {
return ResponseEntity.notFound().build(); // 如果文件不存在,返回404 Not Found状态码
}
}
/**
* 开始导出数据集记录
* @param versionId 版本标识
* @param fileType 文件类型
* @return 返回导出文件链接
*/
@GetMapping("/startExport")
public ResponseResult<String> startExport(@RequestParam Long versionId,
@RequestParam String fileType){
DatasetVersion datasetVersion = this.datasetVersionService.getById(versionId);
datasetVersion.setFileUrl("E:\\自我认知数据集_V2.json");
if (datasetVersion == null) {
String errorMessage = "数据操作失败,查询数据不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST,errorMessage);
}
DatasetOutput datasetOutput = datasetOutputService.saveNew(fileType,datasetVersion.getFileUrl(),versionId);
if (datasetOutput == null) {
String errorMessage = "导出数据操作失败,请刷新后重试或者联系管理员!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST,errorMessage);
}
datasetOutput.setStatus(DatasetConstant.STATUS_FINISHED);
datasetOutput.setOutputEndTime(new Date());
datasetOutputService.updateById(datasetOutput);
return ResponseResult.success(datasetOutput.getDownloadUrl());
}
}
......@@ -44,4 +44,15 @@ public interface DatasetManageMapper extends BaseDaoMapper<DatasetManage> {
@Param("datasetManageFilter") DatasetManage datasetManageFilter,
@Param("datasetVersionFilter") DatasetVersion datasetVersionFilter,
@Param("orderBy") String orderBy);
/**
* 查询最新的数据列表。
*
* @param datasetManageFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<DatasetManage> getDatasetManageGroupList(
@Param("datasetManageFilter") DatasetManage datasetManageFilter,
@Param("orderBy") String orderBy);
}
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.DatasetOutput;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 数据集导出数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetOutputMapper extends BaseDaoMapper<DatasetOutput> {
/**
* 批量插入对象列表。
*
* @param datasetOutputList 新增对象列表。
*/
void insertList(List<DatasetOutput> datasetOutputList);
/**
* 获取过滤后的对象列表。
*
* @param datasetOutputFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<DatasetOutput> getDatasetOutputList(
@Param("datasetOutputFilter") DatasetOutput datasetOutputFilter, @Param("orderBy") String orderBy);
}
......@@ -11,6 +11,10 @@
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="data_type" jdbcType="TINYINT" property="dataType"/>
<result column="data_volume" jdbcType="TINYINT" property="dataVolume"/>
<result column="release_status" jdbcType="TINYINT" property="releaseStatus"/>
<result column="input_status" jdbcType="TINYINT" property="inputStatus"/>
<result column="dataset_version" jdbcType="TINYINT" property="datasetVersion"/>
</resultMap>
<insert id="insertList">
......@@ -95,4 +99,23 @@
ORDER BY ${orderBy}
</if>
</select>
<select id="getDatasetManageGroupList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.DatasetManage">
SELECT lmp_dataset_manage.*, version.release_status, version.input_status, version.data_volume, version.dataset_version
FROM
lmp_dataset_manage lmp_dataset_manage
JOIN (
SELECT dataset_id, MAX(dataset_version) as max_dataset_version
FROM lmp_dataset_version
GROUP BY dataset_id
) v ON lmp_dataset_manage.dataset_id = v.dataset_id
JOIN lmp_dataset_version version ON lmp_dataset_manage.dataset_id = version.dataset_id
AND v.max_dataset_version = version.dataset_version
<where>
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yice.webadmin.app.dao.DatasetOutputMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.app.model.DatasetOutput">
<id column="output_id" jdbcType="BIGINT" property="outputId"/>
<result column="output_postion" jdbcType="VARCHAR" property="outputPostion"/>
<result column="mark_format_type" jdbcType="VARCHAR" property="markFormatType"/>
<result column="output_content" jdbcType="VARCHAR" property="outputContent"/>
<result column="file_size" jdbcType="VARCHAR" property="fileSize"/>
<result column="data_count" jdbcType="BIGINT" property="dataCount"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="version_id" jdbcType="BIGINT" property="versionId"/>
<result column="output_start_time" jdbcType="TIMESTAMP" property="outputStartTime"/>
<result column="output_end_time" jdbcType="TIMESTAMP" property="outputEndTime"/>
<result column="status" jdbcType="TINYINT" property="status"/>
<result column="download_url" jdbcType="VARCHAR" property="downloadUrl"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_data_output
(output_id,
output_postion,
mark_format_type,
output_content,
file_size,
data_count,
create_user_id,
output_start_time,
output_end_time,
status,
download_url,
version_id)
VALUES
<foreach collection="list" index="index" item="item" separator=",">
(#{item.outputId},
#{item.outputPostion},
#{item.markFormatType},
#{item.outputContent},
#{item.fileSize},
#{item.dataCount},
#{item.createUserId},
#{item.outputStartTime},
#{item.outputEndTime},
#{item.status},
#{item.downloadUrl},
#{item.versionId})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.app.dao.DatasetOutputMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="datasetOutputFilter != null">
<if test="datasetOutputFilter.outputId != null">
AND lmp_data_output.output_id = #{datasetOutputFilter.datasetId}
</if>
<if test="datasetOutputFilter.versionId != null">
AND lmp_data_output.version_id = #{datasetOutputFilter.versionId}
</if>
<if test="datasetOutputFilter.markFormatType != null">
AND lmp_data_output.mark_format_type = #{datasetOutputFilter.markFormatType}
</if>
</if>
</sql>
<select id="getDatasetOutputList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.DatasetOutput">
SELECT * FROM lmp_data_output
<where>
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
......@@ -29,4 +29,8 @@ public class DatasetData {
@ApiModelProperty(name = "createTime",value="创建时间")
private Date createTime;
@ApiModelProperty(name = "markStatus",value="标记状态")
private Integer markStatus;
}
......@@ -12,7 +12,7 @@ import java.util.Date;
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataDto视图对象")
@ApiModel("DatasetMongoDto视图对象")
@Data
public class DatasetDataDto {
......@@ -39,4 +39,10 @@ public class DatasetDataDto {
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
/**
* 标记状态。
*/
@ApiModelProperty(value="标记状态:0:未标记,1:已标记")
private Integer markStatus;
}
......@@ -48,6 +48,30 @@ public class DatasetManageDto {
@ApiModelProperty(value = "数据类型")
private Integer dataType;
/**
* 数据量。
*/
@ApiModelProperty(value = "数据量")
private Long dataVolume;
/**
* 发布状态。
*/
@ApiModelProperty(value = "发布状态")
private Integer releaseStatus;
/**
* 导入状态。
*/
@ApiModelProperty(value = "导入状态")
private Integer inputStatus;
/**
* 版本。
*/
@ApiModelProperty(value = "版本")
private Integer datasetVersion;
/**
* dataset_name LIKE搜索字符串。
*/
......
package com.yice.webadmin.app.dto;
import com.yice.common.core.validator.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* DatasetOutputDto对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetOutputDto对象")
@Data
public class DatasetOutputDto {
/**
* 导出任务ID。
*/
@ApiModelProperty(value = "导出任务ID", required = true)
@NotNull(message = "数据验证失败,导出任务ID不能为空!", groups = {UpdateGroup.class})
private Long outputId;
/**
* 导出位置。
*/
@ApiModelProperty(value = "导出位置", required = true)
private String outputPostion;
/**
* 导出格式类型。
*/
@ApiModelProperty(value = "导出格式类型")
private String markFormatType;
/**
* 导出内容。
*/
@ApiModelProperty(value = "导出内容")
private String outputContent;
/**
* 文件大小。
*/
@ApiModelProperty(value = "文件大小")
private String fileSize;
/**
* 数据量。
*/
@ApiModelProperty(value = "数据量")
private Long dataCount;
/**
* 创建人。
*/
@ApiModelProperty(value = "创建人")
private Long createUserId;
/**
* 导出开始时间。
*/
@ApiModelProperty(value = "导出开始时间")
private Date outputStartTime;
/**
* 导出完成时间。
*/
@ApiModelProperty(value = "导出完成时间")
private Date outputEndTime;
/**
* 状态。
*/
@ApiModelProperty(value = "状态:0:标识未完成;1标识已完成")
private Integer status;
/**
* 下载地址。
*/
@ApiModelProperty(value = "下载地址")
private String downloadUrl;
/**
* 版本ID。
*/
@ApiModelProperty(value = "版本ID")
private Long versionId;
}
......@@ -64,7 +64,7 @@ public class DatasetVersionDto {
/**
* 发布状态。
*/
@ApiModelProperty(value = "发布状态")
@ApiModelProperty(value = "发布状态:0标识未发布;1标识已发布")
private Integer releaseStatus;
/**
......
......@@ -51,12 +51,35 @@ public class DatasetManage extends BaseModel {
*/
private Integer template;
/**
* 数据类型。
*/
private Integer dataType;
/**
* 数据量。
*/
@TableField(exist = false)
private Long dataVolume;
/**
* 发布状态。
*/
@TableField(exist = false)
private Integer releaseStatus;
/**
* 导入状态。
*/
@TableField(exist = false)
private Integer inputStatus;
/**
* 版本。
*/
@TableField(exist = false)
private Integer datasetVersion;
/**
* dataset_name LIKE搜索字符串。
*/
......
package com.yice.webadmin.app.model;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.DatasetOutputVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.Date;
/**
* DatasetOutput实体对象。
*
* @author linking
* @date 2023-04-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_data_output")
public class DatasetOutput extends BaseModel {
/**
* 导出任务ID。
*/
@TableId(value = "output_id")
private Long outputId;
/**
* 导出位置。
*/
private String outputPostion;
/**
* 导出文件格式类型。
*/
private String markFormatType;
/**
* 版本标识。
*/
private Long versionId;
/**
* 导出内容。
*/
private String outputContent;
/**
* 文件大小。
*/
private String fileSize;
/**
* 数据量。
*/
private Long dataCount;
/**
* 创建人。
*/
private Long createUserId;
/**
* 导出开始时间。
*/
private Date outputStartTime;
/**
* 导出完成时间。
*/
private Date outputEndTime;
/**
* 状态。
*/
private Integer status;
/**
* 下载地址。
*/
private String downloadUrl;
@Mapper
public interface DatasetOutputModelMapper extends BaseModelMapper<DatasetOutputVo, DatasetOutput> {
/**
* 转换Vo对象到实体对象。
*
* @param datasetOutputVo 域对象。
* @return 实体对象。
*/
@Override
DatasetOutput toModel(DatasetOutputVo datasetOutputVo);
/**
* 转换实体对象到VO对象。
*
* @param datasetOutput 实体对象。
* @return 域对象。
*/
@Override
DatasetOutputVo fromModel(DatasetOutput datasetOutput);
}
public static final DatasetOutput.DatasetOutputModelMapper INSTANCE = Mappers.getMapper(DatasetOutput.DatasetOutputModelMapper.class);
}
......@@ -45,6 +45,14 @@ public interface DatasetDataService {
*/
Long count(Long versionId);
/**
* 查询列表集合总条数
* @param filter 过滤条件
* @return 返回总条数
*/
Long count(DatasetData filter);
/**
* 查询列表集合
* @param versionId 版本标识
......@@ -53,6 +61,15 @@ public interface DatasetDataService {
*/
List<DatasetData> list(Long versionId, MyPageParam pageParam);
/**
* 根据条件查询数据集数据。
*
* @param filter 过滤对象。
* @param pageParam 分页对象。
* @return 查询结果集。
*/
List<DatasetData> list(DatasetData filter, MyPageParam pageParam);
/**
* 更新数据对象。
*
......
......@@ -68,5 +68,20 @@ public interface DatasetManageService extends IBaseService<DatasetManage, Long>
*/
List<DatasetManage> getDatasetManageListWithRelation(DatasetManage filter, DatasetVersion datasetVersionFilter, String orderBy);
/**
* 获取数据集管理对象
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetManage> getDatasetManageGroupList(DatasetManage filter, String orderBy);
/**
* 保存和创建数据集版本管理
* @param datasetManage 数据集管理对象
* @return 数据集管理对象
*/
DatasetManage saveAndCreateVersion(DatasetManage datasetManage);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.webadmin.app.model.DatasetOutput;
import java.util.List;
/**
* 数据集导出数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetOutputService extends IBaseService<DatasetOutput, Long> {
/**
* 保存新增对象。
*
* @param datasetOutput 新增对象。
* @return 返回新增对象。
*/
DatasetOutput saveNew(DatasetOutput datasetOutput);
/**
* 记录地址并保存到minio中。
* @param fileType 文件类型。
* @param fileUrl 文件地址。
* @param versionId 版本标识。
* @return 返回新增对象。
*/
DatasetOutput saveNew(String fileType, String fileUrl, Long versionId);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetOutputList 新增对象列表。
*/
void saveNewBatch(List<DatasetOutput> datasetOutputList);
/**
* 更新数据对象。
*
* @param DatasetOutput 更新的对象。
* @param originalDatasetOutput 原有数据对象。
* @return 成功返回true,否则false。
*/
boolean update(DatasetOutput DatasetOutput, DatasetOutput originalDatasetOutput);
/**
* 删除指定数据。
*
* @param outputId 主键Id。
* @return 成功返回true,否则false。
*/
boolean remove(Long outputId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getDatasetOutputListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetOutput> getDatasetOutputList(DatasetOutput filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getDatasetOutputList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetOutput> getDatasetOutputListWithRelation(DatasetOutput filter, String orderBy);
}
......@@ -43,7 +43,7 @@ public interface DatasetVersionService extends IBaseService<DatasetVersion, Long
* @param originalFilename 导入文件名称
* @param versionId 版本标识
*/
void writeDatasetFileForMongo(byte[] bytes, String originalFilename, Long versionId);
void writeDatasetFile(byte[] bytes, String originalFilename, Long versionId);
/**
* 更新数据对象。
......@@ -54,6 +54,14 @@ public interface DatasetVersionService extends IBaseService<DatasetVersion, Long
*/
boolean update(DatasetVersion datasetVersion, DatasetVersion originalDatasetVersion);
/**
* 更新数据对象。
*
* @param datasetVersion 更新的对象。
* @return 成功返回true,否则false。
*/
boolean update(DatasetVersion datasetVersion);
/**
* 删除指定数据。
*
......
package com.yice.webadmin.app.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yice.common.core.object.MyPageParam;
import com.yice.webadmin.app.constant.MongoConstant;
import com.yice.webadmin.app.data.DatasetData;
......@@ -36,15 +37,20 @@ public class DatasetDataServiceImpl implements DatasetDataService {
* @param datasetData 新增对象。
* @return 返回新增对象。
*/
@Override
public void save(DatasetData datasetData) {
if (StringUtils.isNotBlank(datasetData.getData())) {
List<Document> documents = new ArrayList<>();
JSONArray jsonArray = JSONArray.parseArray(datasetData.getData());
if (null != jsonArray && jsonArray.size() > 0) {
for (int i = 0; i < jsonArray.size(); i++) {
Document document = new Document(MongoConstant.DATA, jsonArray.getJSONObject(i))
JSONObject jsonObject = jsonArray.getJSONObject(i);
Integer markStatus = jsonObject.getString(MongoConstant.OUTPUT) != null
&& !jsonObject.getString(MongoConstant.OUTPUT).equals(MongoConstant.EMPTY) ? 1 : 0;
Document document = new Document(MongoConstant.DATA,jsonObject)
.append(MongoConstant.VERSION, datasetData.getVersionId())
.append(MongoConstant.CREATE_TIME, datasetData.getCreateTime());
.append(MongoConstant.CREATE_TIME, datasetData.getCreateTime())
.append(MongoConstant.MARK_STATUS, markStatus);
documents.add(document);
}
}
......@@ -59,6 +65,7 @@ public class DatasetDataServiceImpl implements DatasetDataService {
* @param pageParam 页码参数
* @return 返回查看对象列表
*/
@Override
public List<DatasetData> list(Long versionId, MyPageParam pageParam) {
Query query = new Query(Criteria.where(MongoConstant.VERSION).is(versionId))
.skip((pageParam.getPageNum() - 1) * pageParam.getPageSize())
......@@ -68,11 +75,48 @@ public class DatasetDataServiceImpl implements DatasetDataService {
MongoConstant.COLLECT_NAME + versionId);
}
/**
* 根据条件查询数据集数据。
*
* @param filter 过滤对象。
* @param pageParam 分页对象。
* @return 查询结果集。
*/
@Override
public List<DatasetData> list(DatasetData filter, MyPageParam pageParam) {
Query query = new Query();
query.addCriteria(Criteria.where(MongoConstant.VERSION).is(filter.getVersionId()));
if (filter.getMarkStatus() != null) {
query.addCriteria(Criteria.where(MongoConstant.MARK_STATUS).is(filter.getMarkStatus()));
}
query.skip((pageParam.getPageNum() - 1) * pageParam.getPageSize())
.limit(pageParam.getPageSize());
return mongoTemplate.find(query, DatasetData.class,
MongoConstant.COLLECT_NAME + filter.getVersionId());
}
/**
* 根据条件查询列表集合总条数
* @param filter 版本标识
* @return 返回总条数
*/
@Override
public Long count(DatasetData filter) {
Query query = new Query();
query.addCriteria(Criteria.where(MongoConstant.VERSION).is(filter.getVersionId()));
if (filter.getMarkStatus() != null) {
query.addCriteria(Criteria.where(MongoConstant.MARK_STATUS).is(filter.getMarkStatus()));
}
return mongoTemplate.count(query, DatasetData.class,
MongoConstant.COLLECT_NAME + filter.getVersionId());
}
/**
* 查询列表集合总条数
* @param versionId 版本标识
* @return 返回总条数
*/
@Override
public Long count(Long versionId) {
Query query = new Query(Criteria.where(MongoConstant.VERSION).is(versionId));
return mongoTemplate.count(query, DatasetData.class,
......@@ -86,6 +130,7 @@ public class DatasetDataServiceImpl implements DatasetDataService {
* @param versionId 版本标识。
* @return 返回查看对象。
*/
@Override
public DatasetData view(String id, Long versionId) {
return mongoTemplate.findById(id, DatasetData.class,
MongoConstant.COLLECT_NAME + versionId);
......@@ -97,9 +142,10 @@ public class DatasetDataServiceImpl implements DatasetDataService {
* @param datasetData 更新的对象。
* @return 成功返回true,否则false。
*/
@Override
public void update(DatasetData datasetData) {
mongoTemplate.save(datasetData,
MongoConstant.COLLECT_NAME + datasetData.getVersionId());
mongoTemplate.save(datasetData,
MongoConstant.COLLECT_NAME + datasetData.getVersionId());
}
/**
......@@ -109,6 +155,7 @@ public class DatasetDataServiceImpl implements DatasetDataService {
* @param versionId 版本标识。
* @return 返回受影响的行数。
*/
@Override
public Long remove(String id, Long versionId) {
Query query = new Query(Criteria.where(MongoConstant.ID).is(id));
return mongoTemplate.remove(query, DatasetData.class,
......@@ -121,6 +168,7 @@ public class DatasetDataServiceImpl implements DatasetDataService {
* @param versionId 版本标识。
* @return 返回受影响的行数。
*/
@Override
public void delete(Long versionId) {
mongoTemplate.dropCollection(MongoConstant.COLLECT_NAME + versionId);
}
......
......@@ -140,6 +140,17 @@ public class DatasetManageServiceImpl extends BaseService<DatasetManage, Long> i
return resultList;
}
/**
* 分组进行查询数据集列表
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetManage> getDatasetManageGroupList(DatasetManage filter, String orderBy) {
return datasetManageMapper.getDatasetManageGroupList(filter, orderBy);
}
@Transactional
@Override
public DatasetManage saveAndCreateVersion(DatasetManage datasetManage) {
......
package com.yice.webadmin.app.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.Page;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.common.core.base.service.BaseService;
import com.yice.common.core.object.MyRelationParam;
import com.yice.common.core.object.TokenData;
import com.yice.common.core.upload.BaseUpDownloader;
import com.yice.common.core.upload.UpDownloaderFactory;
import com.yice.common.core.upload.UploadResponseInfo;
import com.yice.common.core.upload.UploadStoreTypeEnum;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.minio.config.MinioProperties;
import com.yice.common.sequence.wrapper.IdGeneratorWrapper;
import com.yice.webadmin.app.constant.DatasetConstant;
import com.yice.webadmin.app.dao.DatasetOutputMapper;
import com.yice.webadmin.app.model.DatasetOutput;
import com.yice.webadmin.app.service.DatasetOutputService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.List;
/**
* 数据集详情数据操作服务类。
*
* @author linking
* @date 2023-04-13
*/
@Slf4j
@Service("datasetOutputService")
public class DatasetOutputServiceImpl extends BaseService<DatasetOutput, Long> implements DatasetOutputService {
@Autowired
private DatasetOutputMapper datasetOutputMapper;
@Autowired
private IdGeneratorWrapper idGenerator;
@Autowired
private UpDownloaderFactory upDownloaderFactory;
@Autowired
private MinioProperties minioProperties;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<DatasetOutput> mapper() {
return datasetOutputMapper;
}
/**
* 保存新增对象。
*
* @param datasetOutput 新增对象。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public DatasetOutput saveNew(DatasetOutput datasetOutput) {
datasetOutputMapper.insert(this.buildDefaultValue(datasetOutput));
return datasetOutput;
}
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetOutputList 新增对象列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveNewBatch(List<DatasetOutput> datasetOutputList) {
if (CollUtil.isNotEmpty(datasetOutputList)) {
datasetOutputList.forEach(this::buildDefaultValue);
datasetOutputMapper.insertList(datasetOutputList);
}
}
/**
* 记录地址并保存到minio中。
* @param fileType 文件类型。
* @param fileUrl 文件地址。
* @param versionId 版本标识。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public DatasetOutput saveNew(String fileType, String fileUrl, Long versionId) {
DatasetOutput datasetOutput = new DatasetOutput();
String uploadUrl = doUpload(fileUrl,fileType,datasetOutput);
if(StringUtils.isEmpty(uploadUrl)) return null;
datasetOutput.setOutputId(idGenerator.nextLongId());
datasetOutput.setCreateUserId(TokenData.takeFromRequest().getUserId());
datasetOutput.setVersionId(versionId);
datasetOutput.setOutputStartTime(new Date());
datasetOutput.setStatus(DatasetConstant.STATUS_UNFINISHED);
datasetOutput.setDownloadUrl(uploadUrl);
datasetOutput.setMarkFormatType(fileType);
datasetOutput.setOutputPostion(DatasetConstant.OUTPUT_POSTION);
datasetOutput.setOutputContent(DatasetConstant.OUTPUT_CONTENT);
datasetOutputMapper.insert(datasetOutput);
return datasetOutput;
}
/**
* 根据类型,生成对应的文件类型名称
* @param fileUrl 文件地址
* @param fileType 文件类型
*/
private String doUpload(String fileUrl, String fileType, DatasetOutput datasetOutput) {
String fileName = null;
try {
Path file = Paths.get(fileUrl);
Resource resource = new UrlResource(file.toUri());
byte[] data = IOUtils.toByteArray(resource.getInputStream());
datasetOutput.setDataCount(Long.valueOf(JSON.parseArray(new String(data, StandardCharsets.UTF_8)).size()));
double sizeInMb = (double) resource.contentLength() / 1024;
DecimalFormat df = new DecimalFormat("#.##");
datasetOutput.setFileSize(df.format(sizeInMb) + DatasetConstant.KB);
UploadStoreTypeEnum uploadStoreType = UploadStoreTypeEnum.values()[DatasetConstant.UPLOAD];
BaseUpDownloader upDownloader = upDownloaderFactory.get(uploadStoreType);
UploadResponseInfo responseInfo = upDownloader.doUpload(resource.getInputStream(),
DatasetConstant.FILE_NAME + fileType);
if (!Boolean.TRUE.equals(responseInfo.getUploadFailed())) {
fileName = buildDownloadUrl(responseInfo.getFilename());
}
}catch (IOException ex){
log.error("上传文件错误信息为:", ex);
}
return fileName;
}
/**
* 构建文件下载链接
* @param fileUrl
* @return
*/
private String buildDownloadUrl(String fileUrl) {
StringBuilder sb = new StringBuilder();
sb.append(minioProperties.getEndpoint()).
append("/").append(minioProperties.getBucketName()).
append("/").append(fileUrl);
return sb.toString();
}
/**
* 更新数据对象。
*
* @param datasetOutput 更新的对象。
* @param originalDatasetOutput 原有数据对象。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(DatasetOutput datasetOutput, DatasetOutput originalDatasetOutput) {
MyModelUtil.fillCommonsForUpdate(datasetOutput, originalDatasetOutput);
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<DatasetOutput> uw = this.createUpdateQueryForNullValue(datasetOutput, datasetOutput.getOutputId());
return datasetOutputMapper.update(datasetOutput, uw) == 1;
}
/**
* 删除指定数据。
*
* @param outputId 主键Id。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long outputId) {
return datasetOutputMapper.deleteById(outputId) == 1;
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getDatasetOutputListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetOutput> getDatasetOutputList(DatasetOutput filter, String orderBy) {
return datasetOutputMapper.getDatasetOutputList(filter, orderBy);
}
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getDatasetOutputList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetOutput> getDatasetOutputListWithRelation(DatasetOutput filter, String orderBy) {
List<DatasetOutput> resultList = datasetOutputMapper.getDatasetOutputList(filter, orderBy);
// 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
}
private DatasetOutput buildDefaultValue(DatasetOutput datasetOutput) {
if (datasetOutput.getOutputId() == null) {
datasetOutput.setOutputId(idGenerator.nextLongId());
}
MyModelUtil.fillCommonsForInsert(datasetOutput);
return datasetOutput;
}
}
......@@ -174,6 +174,7 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
* @param versionName 版本名称
* @throws IOException 异常操作
*/
@Override
public void saveDatasetInfo(String versionName) throws IOException {
File file = new File(pythonConfig.getDatasetFileBaseDir(), pythonConfig.getDatasetInfo());
if (!file.exists()) {
......@@ -198,7 +199,7 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
* @param fileName 文件名称
* @return 返回截取后的字符串
*/
private static String extractFileName(String fileName) {
private String extractFileName(String fileName) {
int lastSlashIndex = fileName.lastIndexOf('/');
if (lastSlashIndex != -1) {
fileName = fileName.substring(0, lastSlashIndex + 1);
......@@ -225,7 +226,7 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
// 文件写入指定路径
Files.write(path, bytes);
// 写入到mongodb中
writeDatasetFileForMongo(bytes,fullName,versionId);
writeDatasetFile(bytes,fullName,versionId);
} catch (IOException e) {
log.error("Failed to write imported file [" + fullName + " ].", e);
throw e;
......@@ -253,14 +254,15 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
* @param originalFilename 导入文件名称
* @param versionId 版本标识
*/
public void writeDatasetFileForMongo(byte[] bytes, String originalFilename, Long versionId) {
@Override
public void writeDatasetFile(byte[] bytes, String originalFilename, Long versionId) {
try {
// 或者指定字符集进行转换,替换"UTF-8"为你想要使用的字符集
String result = new String(bytes, StandardCharsets.UTF_8);
//先删除数据集
datasetDataService.delete(versionId);
//保存到mongodb中
datasetDataService.save(new DatasetData(null, versionId, result, new Date()));
datasetDataService.save(new DatasetData(null, versionId, result, new Date(), null));
}catch (Exception ex) {
log.error("Failed to write mongodb database [" + originalFilename + " ].", ex);
}
......@@ -296,6 +298,18 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
return datasetVersionMapper.update(datasetVersion, uw) == 1;
}
/**
* 更新数据对象。
*
* @param datasetVersion 更新的对象。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(DatasetVersion datasetVersion) {
return datasetVersionMapper.updateById(datasetVersion) > 0;
}
/**
* 删除指定数据。
*
......
......@@ -39,4 +39,10 @@ public class DatasetDataVo {
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
/**
* 标记状态。
*/
@ApiModelProperty(value="标记状态:0:未标记,1:已标记")
private Integer markStatus;
}
......@@ -44,13 +44,36 @@ public class DatasetManageVo extends BaseVo {
@ApiModelProperty(value = "模板")
private Integer template;
/**
* 数据类型。
*/
@ApiModelProperty(value = "数据类型")
private Integer dataType;
/**
* 数据量。
*/
@ApiModelProperty(value = "数据量")
private Long dataVolume;
/**
* 发布状态。
*/
@ApiModelProperty(value = "发布状态")
private Integer releaseStatus;
/**
* 导入状态。
*/
@ApiModelProperty(value = "导入状态")
private Integer inputStatus;
/**
* 版本。
*/
@ApiModelProperty(value = "版本")
private Integer datasetVersion;
/**
* DatasetVersion 的一对多关联表数据对象。数据对应类型为DatasetVersion。
*/
......
package com.yice.webadmin.app.vo;
import com.yice.common.core.validator.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* DatasetOutputVo对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetOutputVo对象")
@Data
public class DatasetOutputVo {
/**
* 导出任务ID。
*/
@ApiModelProperty(value = "导出任务ID", required = true)
@NotNull(message = "数据验证失败,导出任务ID不能为空!", groups = {UpdateGroup.class})
private Long outputId;
/**
* 导出位置。
*/
@ApiModelProperty(value = "导出位置", required = true)
private String outputPostion;
/**
* 导出格式类型。
*/
@ApiModelProperty(value = "导出格式类型")
private String markFormatType;
/**
* 导出内容。
*/
@ApiModelProperty(value = "导出内容")
private String outputContent;
/**
* 文件大小。
*/
@ApiModelProperty(value = "文件大小")
private String fileSize;
/**
* 数据量。
*/
@ApiModelProperty(value = "数据量")
private Long dataCount;
/**
* 创建人。
*/
@ApiModelProperty(value = "创建人")
private Long createUserId;
/**
* 导出开始时间。
*/
@ApiModelProperty(value = "导出开始时间")
private Date outputStartTime;
/**
* 导出完成时间。
*/
@ApiModelProperty(value = "导出完成时间")
private Date outputEndTime;
/**
* 状态。
*/
@ApiModelProperty(value = "状态")
private Integer status;
/**
* 下载地址。
*/
@ApiModelProperty(value = "下载地址")
private String downloadUrl;
/**
* 版本ID。
*/
@ApiModelProperty(value = "版本ID")
private Long versionId;
}
......@@ -64,7 +64,7 @@ public class DatasetVersionVo extends BaseVo {
/**
* 发布状态。
*/
@ApiModelProperty(value = "发布状态")
@ApiModelProperty(value = "发布状态:0标识未发布;1标识已发布")
private Integer releaseStatus;
/**
......
......@@ -196,9 +196,9 @@ redis:
# 连接池中最小空闲数量。
minIdle: 5
#minio:
# enabled: true
# endpoint: http://192.168.0.145:9090
# accessKey: minioadmin
# secretKey: minioadmin
# bucketName: application
minio:
enabled: true
endpoint: http://192.168.0.145:9090
accessKey: minioadmin
secretKey: minioadmin
bucketName: lmp
......@@ -16,6 +16,7 @@ import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Objects;
......@@ -84,6 +85,17 @@ public abstract class BaseUpDownloader {
responseInfo.setFilename(filenameBuilder.toString());
}
/**
* 方法重置写入Minio里面中,保留文件名称
* 执行文件上传操作,将文件数据存入Minio。
*
* @param inputStream 上传地址。
* @param fileName 文件名称。
* @return 上传应答信息对象。该对象始终不为null。
* @throws IOException minio抛出的异常。
*/
public abstract UploadResponseInfo doUpload(InputStream inputStream, String fileName);
/**
* 执行下载操作,从本地文件系统读取数据,并将读取的数据直接写入到HttpServletResponse应答对象。
*
......@@ -159,7 +171,7 @@ public abstract class BaseUpDownloader {
}
return false;
}
protected UploadResponseInfo verifyUploadArgument(
Boolean asImage, MultipartFile uploadFile) throws IOException {
UploadResponseInfo responseInfo = new UploadResponseInfo();
......
......@@ -147,6 +147,20 @@ public class LocalUpDownloader extends BaseUpDownloader {
return responseInfo;
}
/**
* 方法重置写入Minio里面中,保留文件名称
* 执行文件上传操作,将文件数据存入Minio。
*
* @param inputStream 上传地址。
* @param fileName 文件名称。
* @return 上传应答信息对象。该对象始终不为null。
* @throws IOException minio抛出的异常。
*/
@Override
public UploadResponseInfo doUpload(InputStream inputStream, String fileName){
return new UploadResponseInfo();
}
/**
* 判断filename参数指定的文件名,是否被包含在fileInfoJson参数中。
*
......
......@@ -6,8 +6,10 @@ import com.yice.common.core.upload.UpDownloaderFactory;
import com.yice.common.core.upload.UploadResponseInfo;
import com.yice.common.core.upload.BaseUpDownloader;
import com.yice.common.core.upload.UploadStoreTypeEnum;
import com.yice.common.core.util.MyCommonUtil;
import com.yice.common.minio.wrapper.MinioTemplate;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
......@@ -81,6 +83,26 @@ public class MinioUpDownloader extends BaseUpDownloader {
this.downloadInternal(fullFileanme, fileName, response);
}
/**
* 方法重置写入Minio里面中,保留文件名称
* 执行文件上传操作,将文件数据存入Minio。
*
* @param inputStream 上传地址。
* @param fileName 文件名称。
* @return 上传应答信息对象。该对象始终不为null。
* @throws IOException minio抛出的异常。
*/
@Override
public UploadResponseInfo doUpload(InputStream inputStream, String fileName){
UploadResponseInfo responseInfo = new UploadResponseInfo();
StringBuilder filenameBuilder = new StringBuilder(64);
filenameBuilder.append(MyCommonUtil.generateUuid())
.append(".").append(FilenameUtils.getExtension(fileName));
responseInfo.setFilename(filenameBuilder.toString());
minioTemplate.putObject(responseInfo.getFilename(), inputStream);
return responseInfo;
}
private void downloadInternal(String fullFileanme, String fileName, HttpServletResponse response) throws IOException {
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment