Commit ce18ebb5 authored by linpeiqin's avatar linpeiqin

删除数据集详情无用部分

parent a3940966
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.ImportUtil;
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.DatasetDetailDto;
import com.yice.webadmin.app.model.DatasetDetail;
import com.yice.webadmin.app.service.DatasetDetailService;
import com.yice.webadmin.app.vo.DatasetDetailVo;
import com.yice.webadmin.config.ApplicationConfig;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
/**
* 数据集详情操作控制器类。
*
* @author linking
* @date 2023-04-13
*/
@Api(tags = "数据集详情管理接口")
@Slf4j
@RestController
@RequestMapping("/admin/app/datasetDetail")
public class DatasetDetailController {
@Autowired
private DatasetDetailService datasetDetailService;
@Autowired
private ApplicationConfig appConfig;
/**
* 新增数据集详情数据。
*
* @param datasetDetailDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。
*/
@ApiOperationSupport(ignoreParameters = {"datasetDetailDto.detailId"})
@OperationLog(type = SysOperationLogType.ADD)
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody DatasetDetailDto datasetDetailDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetDetailDto, false);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetDetail datasetDetail = MyModelUtil.copyTo(datasetDetailDto, DatasetDetail.class);
datasetDetail = datasetDetailService.saveNew(datasetDetail);
return ResponseResult.success(datasetDetail.getDetailId());
}
/**
* 更新数据集详情数据。
*
* @param datasetDetailDto 更新对象。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody DatasetDetailDto datasetDetailDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetDetailDto, true);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetDetail datasetDetail = MyModelUtil.copyTo(datasetDetailDto, DatasetDetail.class);
DatasetDetail originalDatasetDetail = datasetDetailService.getById(datasetDetail.getDetailId());
if (originalDatasetDetail == null) {
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!datasetDetailService.update(datasetDetail, originalDatasetDetail)) {
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 datasetDetailDtoFilter 过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<DatasetDetailVo>> list(
@MyRequestBody DatasetDetailDto datasetDetailDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetDetail datasetDetailFilter = MyModelUtil.copyTo(datasetDetailDtoFilter, DatasetDetail.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, DatasetDetail.class);
List<DatasetDetail> datasetDetailList =
datasetDetailService.getDatasetDetailListWithRelation(datasetDetailFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(datasetDetailList, DatasetDetail.INSTANCE));
}
/**
* 查看指定数据集详情对象详情。
*
* @param detailId 指定对象主键Id。
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<DatasetDetailVo> view(@RequestParam Long detailId) {
DatasetDetail datasetDetail = datasetDetailService.getByIdWithRelation(detailId, MyRelationParam.full());
if (datasetDetail == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
DatasetDetailVo datasetDetailVo = DatasetDetail.INSTANCE.fromModel(datasetDetail);
return ResponseResult.success(datasetDetailVo);
}
private ResponseResult<Void> doDelete(Long detailId) {
String errorMessage;
// 验证关联Id的数据合法性
DatasetDetail originalDatasetDetail = datasetDetailService.getById(detailId);
if (originalDatasetDetail == null) {
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!datasetDetailService.remove(detailId)) {
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
return ResponseResult.success();
}
/**
* 导入主表数据列表。
*
* @param importFile 上传的文件,目前仅仅支持xlsx和xls两种格式。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.IMPORT)
@PostMapping("/import")
public ResponseResult<Void> importBatch(
@RequestParam Long datasetId,
@RequestParam Long versionId,
@RequestParam Boolean skipHeader,
@RequestParam("importFile") MultipartFile importFile) throws IOException {
String errorMessage;
if (Objects.isNull(importFile) || importFile.isEmpty()) {
errorMessage = "数据验证失败,导入文件不能为空!";
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST, errorMessage);
}
ImportUtil.saveImportFile(appConfig.getUploadFileBaseDir(), null, importFile);
// 这里可以指定需要忽略导入的字段集合。如创建时间、创建人、更新时间、更新人、主键Id和逻辑删除,
// 以及一些存在缺省值且无需导入的字段。其中主键字段和逻辑删除字段不需要在这里设置,批量插入逻辑会自动处理的。
/*Set<String> ignoreFieldSet = new HashSet<>();
ignoreFieldSet.add("createUserId");
ignoreFieldSet.add("createTime");
ignoreFieldSet.add("updateUserId");
ignoreFieldSet.add("updateTime");
List<ImportUtil.ImportHeaderInfo> headerInfoList = ImportUtil.makeHeaderInfoList(DatasetDetail.class, ignoreFieldSet);
// TODO: 下面是导入时需要注意的地方,如果我们缺省生成的代码,与实际情况存在差异,请手动修改。
// 1. 头信息数据字段,我们只是根据当前的主表实体对象生成了缺省数组,开发者可根据实际情况,对headerInfoList进行修改。
ImportUtil.ImportHeaderInfo[] headerInfos = headerInfoList.toArray(new ImportUtil.ImportHeaderInfo[]{});
// 2. 这里需要根据实际情况决定,导入文件中第一行是否为中文头信息,如果是可以跳过。这里我们默认为true。
// 这里根据自己的实际需求,为doImport的最后一个参数,传递需要进行字典转换的字段集合。
// 注意,集合中包含需要翻译的Java字段名,如: gradeId。
Set<String> translatedDictFieldSet = new HashSet<>();
List<DatasetDetail> dataList =
ImportUtil.doImport(headerInfos, skipHeader, filename, DatasetDetail.class, translatedDictFieldSet);
datasetDetailService.saveNewBatch(dataList, -1);*/
return ResponseResult.success();
}
}
......@@ -22,9 +22,7 @@ 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;
......@@ -167,7 +165,6 @@ public class DatasetVersionController {
* 列出符合过滤条件的数据集版本列表。
*
* @param datasetVersionDtoFilter 过滤对象。
* @param datasetDetailDtoFilter 一对一从表过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
......@@ -175,17 +172,15 @@ public class DatasetVersionController {
@PostMapping("/list")
public ResponseResult<MyPageData<DatasetVersionVo>> list(
@MyRequestBody DatasetVersionDto datasetVersionDtoFilter,
@MyRequestBody DatasetDetailDto datasetDetailDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetVersion datasetVersionFilter = MyModelUtil.copyTo(datasetVersionDtoFilter, DatasetVersion.class);
DatasetDetail datasetDetailFilter = MyModelUtil.copyTo(datasetDetailDtoFilter, DatasetDetail.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, DatasetVersion.class);
List<DatasetVersion> datasetVersionList =
datasetVersionService.getDatasetVersionListWithRelation(datasetVersionFilter, datasetDetailFilter, orderBy);
datasetVersionService.getDatasetVersionList(datasetVersionFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(datasetVersionList, DatasetVersion.INSTANCE));
}
......@@ -193,7 +188,6 @@ public class DatasetVersionController {
* 列出符合过滤条件的数据集版本列表。
*
* @param datasetVersionDtoFilter 过滤对象。
* @param datasetDetailDtoFilter 一对一从表过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
......@@ -201,20 +195,18 @@ public class DatasetVersionController {
@PostMapping("/load")
public ResponseResult<MyPageData<DatasetVersionVo>> load(
@MyRequestBody DatasetVersionDto datasetVersionDtoFilter,
@MyRequestBody DatasetDetailDto datasetDetailDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetVersion datasetVersionFilter = MyModelUtil.copyTo(datasetVersionDtoFilter, DatasetVersion.class);
DatasetDetail datasetDetailFilter = MyModelUtil.copyTo(datasetDetailDtoFilter, DatasetDetail.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, DatasetVersion.class);
//查询我的数据集,如果是管理员可以查询所有,否则只能查看自己
TokenData tokenData = TokenData.takeFromRequest();
datasetVersionFilter.setCreateUserId(BooleanUtil.isTrue(tokenData.getIsAdmin()) ? null : tokenData.getUserId());
List<DatasetVersion> datasetVersionList =
datasetVersionService.getDatasetVersionListWithRelation(datasetVersionFilter, datasetDetailFilter, orderBy);
datasetVersionService.getDatasetVersionList(datasetVersionFilter, orderBy);
if(CollUtil.isNotEmpty(datasetVersionList)){
for(DatasetVersion datasetVersion: datasetVersionList){
datasetVersion.setMarkProgress(calcMarkProgress(datasetVersion.getVersionId(),datasetVersion.getDataVolume()));
......
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.DatasetDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 数据集详情数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetDetailMapper extends BaseDaoMapper<DatasetDetail> {
/**
* 批量插入对象列表。
*
* @param datasetDetailList 新增对象列表。
*/
void insertList(List<DatasetDetail> datasetDetailList);
/**
* 获取过滤后的对象列表。
*
* @param datasetDetailFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<DatasetDetail> getDatasetDetailList(
@Param("datasetDetailFilter") DatasetDetail datasetDetailFilter, @Param("orderBy") String orderBy);
}
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.DatasetDetail;
import com.yice.webadmin.app.model.DatasetVersion;
import org.apache.ibatis.annotations.Param;
......@@ -31,17 +30,4 @@ public interface DatasetVersionMapper extends BaseDaoMapper<DatasetVersion> {
*/
List<DatasetVersion> getDatasetVersionList(
@Param("datasetVersionFilter") DatasetVersion datasetVersionFilter, @Param("orderBy") String orderBy);
/**
* 获取过滤后的对象列表。同时支持基于一对一从表字段的过滤条件。
*
* @param datasetVersionFilter 主表过滤对象。
* @param datasetDetailFilter 一对一从表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<DatasetVersion> getDatasetVersionListEx(
@Param("datasetVersionFilter") DatasetVersion datasetVersionFilter,
@Param("datasetDetailFilter") DatasetDetail datasetDetailFilter,
@Param("orderBy") String orderBy);
}
<?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.DatasetDetailMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.app.model.DatasetDetail">
<id column="detail_id" jdbcType="BIGINT" property="detailId"/>
<result column="dataset_id" jdbcType="BIGINT" property="datasetId"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="version_id" jdbcType="BIGINT" property="versionId"/>
<result column="dataset_value" jdbcType="LONGVARCHAR" property="datasetValue"/>
<result column="serial_number" jdbcType="BIGINT" property="serialNumber"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_dataset_detail
(detail_id,
dataset_id,
create_user_id,
create_time,
update_user_id,
update_time,
version_id,
dataset_value,
serial_number)
VALUES
<foreach collection="list" index="index" item="item" separator=",">
(#{item.detailId},
#{item.datasetId},
#{item.createUserId},
#{item.createTime},
#{item.updateUserId},
#{item.updateTime},
#{item.versionId},
#{item.datasetValue},
#{item.serialNumber})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.app.dao.DatasetDetailMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="datasetDetailFilter != null">
<if test="datasetDetailFilter.datasetId != null">
AND lmp_dataset_detail.dataset_id = #{datasetDetailFilter.datasetId}
</if>
<if test="datasetDetailFilter.versionId != null">
AND lmp_dataset_detail.version_id = #{datasetDetailFilter.versionId}
</if>
</if>
</sql>
<select id="getDatasetDetailList" resultMap="BaseResultMap"
parameterType="com.yice.webadmin.app.model.DatasetDetail">
SELECT * FROM lmp_dataset_detail
<where>
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
......@@ -111,21 +111,4 @@
ORDER BY ${orderBy}
</if>
</select>
<!-- 支持基于一对一或者一对多从表字段过滤的SQL_ID -->
<select id="getDatasetVersionListEx" resultMap="BaseResultMap">
SELECT
lmp_dataset_version.*
FROM
lmp_dataset_version
LEFT JOIN
lmp_dataset_detail ON lmp_dataset_version.version_id = lmp_dataset_detail.version_id
<where>
<include refid="filterRef"/>
<include refid="com.yice.webadmin.app.dao.DatasetDetailMapper.inputFilterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
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;
/**
* DatasetDetailDto对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDetailDto对象")
@Data
public class DatasetDetailDto {
/**
* 详情ID。
*/
@ApiModelProperty(value = "详情ID", required = true)
@NotNull(message = "数据验证失败,详情ID不能为空!", groups = {UpdateGroup.class})
private Long detailId;
/**
* 数据集ID。
*/
@ApiModelProperty(value = "数据集ID", required = true)
@NotNull(message = "数据验证失败,数据集ID不能为空!")
private Long datasetId;
/**
* 版本ID。
*/
@ApiModelProperty(value = "版本ID")
private Long versionId;
/**
* 数据集值。
*/
@ApiModelProperty(value = "数据集值")
private String datasetValue;
/**
* 序号。
*/
@ApiModelProperty(value = "序号")
private Long serialNumber;
}
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.DatasetDetailVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* DatasetDetail实体对象。
*
* @author linking
* @date 2023-04-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_dataset_detail")
public class DatasetDetail extends BaseModel {
/**
* 详情ID。
*/
@TableId(value = "detail_id")
private Long detailId;
/**
* 数据集ID。
*/
private Long datasetId;
/**
* 版本ID。
*/
private Long versionId;
/**
* 数据集值。
*/
private String datasetValue;
/**
* 序号。
*/
private Long serialNumber;
@Mapper
public interface DatasetDetailModelMapper extends BaseModelMapper<DatasetDetailVo, DatasetDetail> {
}
public static final DatasetDetailModelMapper INSTANCE = Mappers.getMapper(DatasetDetailModelMapper.class);
}
......@@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yice.common.core.annotation.RelationDict;
import com.yice.common.core.annotation.RelationOneToOne;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.DatasetVersionVo;
import com.yice.webadmin.app.vo.KGManageVo;
import com.yice.webadmin.upms.model.SysUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -108,13 +108,6 @@ public class DatasetVersion extends BaseModel {
private String versionName;
@RelationOneToOne(
masterIdField = "versionId",
slaveModelClass = DatasetDetail.class,
slaveIdField = "versionId")
@TableField(exist = false)
private DatasetDetail datasetDetail;
/**
* 创建人名称字典。
*/
......@@ -127,26 +120,6 @@ public class DatasetVersion extends BaseModel {
private Map<String, Object> createUserIdDictMap;
@Mapper
public interface DatasetVersionModelMapper extends BaseModelMapper<DatasetVersionVo, DatasetVersion> {
/**
* 转换Vo对象到实体对象。
*
* @param datasetVersionVo 域对象。
* @return 实体对象。
*/
@Mapping(target = "datasetDetail", expression = "java(mapToBean(datasetVersionVo.getDatasetDetail(), com.yice.webadmin.app.model.DatasetDetail.class))")
@Override
DatasetVersion toModel(DatasetVersionVo datasetVersionVo);
/**
* 转换实体对象到VO对象。
*
* @param datasetVersion 实体对象。
* @return 域对象。
*/
@Mapping(target = "datasetDetail", expression = "java(beanToMap(datasetVersion.getDatasetDetail(), false))")
@Override
DatasetVersionVo fromModel(DatasetVersion datasetVersion);
}
}
public static final DatasetVersionModelMapper INSTANCE = Mappers.getMapper(DatasetVersionModelMapper.class);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.webadmin.app.model.DatasetDetail;
import java.util.List;
/**
* 数据集详情数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetDetailService extends IBaseService<DatasetDetail, Long> {
/**
* 保存新增对象。
*
* @param datasetDetail 新增对象。
* @return 返回新增对象。
*/
DatasetDetail saveNew(DatasetDetail datasetDetail);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetDetailList 新增对象列表。
*/
void saveNewBatch(List<DatasetDetail> datasetDetailList);
/**
* 利用数据库的insertList语法,批量插入对象列表。通常适用于更大的插入数据量,如批量导入。
*
* @param datasetDetailList 新增对象列表。
* @param batchSize 每批插入的数量。如果该值小于等于0,则使用缺省值10000。
*/
void saveNewBatch(List<DatasetDetail> datasetDetailList, int batchSize);
/**
* 更新数据对象。
*
* @param datasetDetail 更新的对象。
* @param originalDatasetDetail 原有数据对象。
* @return 成功返回true,否则false。
*/
boolean update(DatasetDetail datasetDetail, DatasetDetail originalDatasetDetail);
/**
* 删除指定数据。
*
* @param detailId 主键Id。
* @return 成功返回true,否则false。
*/
boolean remove(Long detailId);
/**
* 当前服务的支持表为从表,根据主表的关联Id,删除一对多的从表数据。
*
* @param versionId 从表关联字段。
* @return 删除数量。
*/
int removeByVersionId(Long versionId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getDatasetDetailListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetDetail> getDatasetDetailList(DatasetDetail filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getDatasetDetailList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetDetail> getDatasetDetailListWithRelation(DatasetDetail filter, String orderBy);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.webadmin.app.model.DatasetDetail;
import com.yice.webadmin.app.model.DatasetVersion;
import java.io.IOException;
......@@ -101,11 +100,9 @@ public interface DatasetVersionService extends IBaseService<DatasetVersion, Long
* 如果仅仅需要获取主表数据,请移步(getDatasetVersionList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param datasetDetailFilter 一对一从表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetVersion> getDatasetVersionListWithRelation(DatasetVersion filter, DatasetDetail datasetDetailFilter, String orderBy);
List<DatasetVersion> getDatasetVersionListWithRelation(DatasetVersion filter, String orderBy);
/* boolean remove(DatasetVersion originalDatasetVersion);*/
}
package com.yice.webadmin.app.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.util.MyModelUtil;
import com.yice.common.sequence.wrapper.IdGeneratorWrapper;
import com.yice.webadmin.app.dao.DatasetDetailMapper;
import com.yice.webadmin.app.model.DatasetDetail;
import com.yice.webadmin.app.service.DatasetDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 数据集详情数据操作服务类。
*
* @author linking
* @date 2023-04-13
*/
@Slf4j
@Service("datasetDetailService")
public class DatasetDetailServiceImpl extends BaseService<DatasetDetail, Long> implements DatasetDetailService {
@Autowired
private DatasetDetailMapper datasetDetailMapper;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<DatasetDetail> mapper() {
return datasetDetailMapper;
}
/**
* 保存新增对象。
*
* @param datasetDetail 新增对象。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public DatasetDetail saveNew(DatasetDetail datasetDetail) {
datasetDetailMapper.insert(this.buildDefaultValue(datasetDetail));
return datasetDetail;
}
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetDetailList 新增对象列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveNewBatch(List<DatasetDetail> datasetDetailList) {
if (CollUtil.isNotEmpty(datasetDetailList)) {
datasetDetailList.forEach(this::buildDefaultValue);
datasetDetailMapper.insertList(datasetDetailList);
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void saveNewBatch(List<DatasetDetail> datasetDetailList, int batchSize) {
if (CollUtil.isEmpty(datasetDetailList)) {
return;
}
if (batchSize <= 0) {
batchSize = 10000;
}
int start = 0;
do {
int end = Math.min(datasetDetailList.size(), start + batchSize);
List<DatasetDetail> subList = datasetDetailList.subList(start, end);
// TODO 如果数据量过大,同时当前表中存在createTime或updateTime等字段,可以考虑在外部创建一次 new Date(),
// 然后传入buildDefaultValue,这样可以减少对象的创建次数,降低GC,提升效率。橙单之所以没有这样生成,是因为
// 有些业务场景下需要按照这两个日期字段排序,因此我们只是在这里给出优化建议。
subList.forEach(this::buildDefaultValue);
datasetDetailMapper.insertList(subList);
if (end == datasetDetailList.size()) {
break;
}
start += batchSize;
} while (true);
}
/**
* 更新数据对象。
*
* @param datasetDetail 更新的对象。
* @param originalDatasetDetail 原有数据对象。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(DatasetDetail datasetDetail, DatasetDetail originalDatasetDetail) {
MyModelUtil.fillCommonsForUpdate(datasetDetail, originalDatasetDetail);
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<DatasetDetail> uw = this.createUpdateQueryForNullValue(datasetDetail, datasetDetail.getDetailId());
return datasetDetailMapper.update(datasetDetail, uw) == 1;
}
/**
* 删除指定数据。
*
* @param detailId 主键Id。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long detailId) {
return datasetDetailMapper.deleteById(detailId) == 1;
}
/**
* 当前服务的支持表为从表,根据主表的关联Id,删除一对多的从表数据。
*
* @param versionId 从表关联字段。
* @return 删除数量。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public int removeByVersionId(Long versionId) {
DatasetDetail deletedObject = new DatasetDetail();
deletedObject.setVersionId(versionId);
return datasetDetailMapper.delete(new QueryWrapper<>(deletedObject));
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getDatasetDetailListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetDetail> getDatasetDetailList(DatasetDetail filter, String orderBy) {
return datasetDetailMapper.getDatasetDetailList(filter, orderBy);
}
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getDatasetDetailList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetDetail> getDatasetDetailListWithRelation(DatasetDetail filter, String orderBy) {
List<DatasetDetail> resultList = datasetDetailMapper.getDatasetDetailList(filter, orderBy);
// 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
}
private DatasetDetail buildDefaultValue(DatasetDetail datasetDetail) {
if (datasetDetail.getDetailId() == null) {
datasetDetail.setDetailId(idGenerator.nextLongId());
}
MyModelUtil.fillCommonsForInsert(datasetDetail);
return datasetDetail;
}
}
......@@ -12,18 +12,15 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
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.constant.ErrorCodeEnum;
import com.yice.common.core.object.CallResult;
import com.yice.common.core.object.MyPageParam;
import com.yice.common.core.object.MyRelationParam;
import com.yice.common.core.object.ResponseResult;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.sequence.wrapper.IdGeneratorWrapper;
import com.yice.webadmin.app.config.PythonConfig;
import com.yice.webadmin.app.constant.DatasetConstant;
import com.yice.webadmin.app.dao.DatasetVersionMapper;
import com.yice.webadmin.app.data.DatasetData;
import com.yice.webadmin.app.model.DatasetDetail;
import com.yice.webadmin.app.model.DatasetManage;
import com.yice.webadmin.app.model.DatasetVersion;
import com.yice.webadmin.app.service.DatasetCleanService;
......@@ -456,14 +453,13 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
* 如果仅仅需要获取主表数据,请移步(getDatasetVersionList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param datasetDetailFilter 一对一从表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetVersion> getDatasetVersionListWithRelation(DatasetVersion filter, DatasetDetail datasetDetailFilter, String orderBy) {
public List<DatasetVersion> getDatasetVersionListWithRelation(DatasetVersion filter, String orderBy) {
List<DatasetVersion> resultList =
datasetVersionMapper.getDatasetVersionListEx(filter, datasetDetailFilter, orderBy);
datasetVersionMapper.getDatasetVersionList(filter, orderBy);
// 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
......
package com.yice.webadmin.app.vo;
import com.yice.common.core.base.vo.BaseVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* DatasetDetailVO视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDetailVO视图对象")
@Data
@EqualsAndHashCode(callSuper = true)
public class DatasetDetailVo extends BaseVo {
/**
* 详情ID。
*/
@ApiModelProperty(value = "详情ID")
private Long detailId;
/**
* 数据集ID。
*/
@ApiModelProperty(value = "数据集ID")
private Long datasetId;
/**
* 版本ID。
*/
@ApiModelProperty(value = "版本ID")
private Long versionId;
/**
* 数据集值。
*/
@ApiModelProperty(value = "数据集值")
private String datasetValue;
/**
* 序号。
*/
@ApiModelProperty(value = "序号")
private Long serialNumber;
}
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