Commit 25e78a21 authored by pengxin's avatar pengxin

数据清洗。

parent 242c85c6
...@@ -61,4 +61,19 @@ public class DatasetConstant { ...@@ -61,4 +61,19 @@ public class DatasetConstant {
* 已标记 * 已标记
*/ */
public static final Integer MARK = 1; public static final Integer MARK = 1;
/**
* 清洗中
*/
public static final Integer CLEAN_PROGRESS = 1;
/**
* 分页个数
*/
public static final Integer PAGE_NUM = 1;
/**
* 过滤100个
*/
public static final Integer MAX_PAGE_SIZE = 100;
} }
...@@ -8,7 +8,27 @@ public final class MongoConstant { ...@@ -8,7 +8,27 @@ public final class MongoConstant {
/** /**
*数据集名称 *数据集名称
*/ */
public static final String COLLECT_NAME = "DATASET-DATA-"; public static final String COLLECT_NAME = "dataset_data_";
/**
*数据集清洗集合名称
*/
public static final String DATASET_DATA_CLEAN = "dataset_data_clean";
/**
*数据集过滤集合名称
*/
public static final String DATASET_DATA_FILTER = "dataset_data_filter";
/**
*数据集去重集合名称
*/
public static final String DATASET_DATA_DEDUPLICATE = "dataset_data_deduplicate";
/**
*数据集去隐私集合名称
*/
public static final String DATASET_DATA_DESENSITIVE = "dataset_data_desensitive";
/** /**
* 数据集 * 数据集
...@@ -18,17 +38,37 @@ public final class MongoConstant { ...@@ -18,17 +38,37 @@ public final class MongoConstant {
/** /**
* 版本标识 * 版本标识
*/ */
public static final String VERSION = "versionId"; public static final String VERSION = "version_id";
/**
* 清洗标识
*/
public static final String CLEAN_ID = "clean_id";
/**
* 清洗完的内容
*/
public static final String CONTENT = "content";
/**
* 清洗前数据
*/
public static final String CLEAN_BEFORE_DATA = "clean_before_data";
/**
* 清洗后数据
*/
public static final String CLEAN_AFTER_DATA = "clean_after_data";
/** /**
* 创建时间 * 创建时间
*/ */
public static final String CREATE_TIME = "createTime"; public static final String CREATE_TIME = "create_time";
/** /**
* 标记状态 * 标记状态
*/ */
public static final String MARK_STATUS = "markStatus"; public static final String MARK_STATUS = "mark_status";
/** /**
* 标记状态 * 标记状态
......
package com.yice.webadmin.app.controller;
import cn.hutool.core.collection.CollUtil;
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.DatasetCleanConfigDto;
import com.yice.webadmin.app.dto.DatasetCleanDto;
import com.yice.webadmin.app.model.DatasetClean;
import com.yice.webadmin.app.model.DatasetCleanConfig;
import com.yice.webadmin.app.service.DatasetCleanConfigService;
import com.yice.webadmin.app.service.DatasetCleanService;
import com.yice.webadmin.app.util.JsonNameExtractor;
import com.yice.webadmin.app.vo.DatasetCleanVo;
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.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 数据清洗操作控制器类。
*
* @author linking
* @date 2023-04-13
*/
@Api(tags = "数据清洗管理接口")
@Slf4j
@RestController
@RequestMapping("/admin/app/datasetClean")
public class DatasetCleanController {
@Autowired
private DatasetCleanService datasetCleanService;
@Autowired
private DatasetCleanConfigService datasetCleanConfigService;
/**
* 新增数据集清洗数据。
*
* @param datasetCleanDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。
*/
@ApiOperationSupport(ignoreParameters = {"datasetCleanDto.outputId"})
@OperationLog(type = SysOperationLogType.ADD)
@PostMapping("/add")
public ResponseResult<DatasetClean> add(@MyRequestBody DatasetCleanDto datasetCleanDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetCleanDto, false);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetClean datasetClean = MyModelUtil.copyTo(datasetCleanDto, DatasetClean.class);
datasetClean = datasetCleanService.saveNew(datasetClean);
return ResponseResult.success(datasetClean);
}
/**
* 新增数据集清洗数据。
*
* @param datasetCleanDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。
*/
@ApiOperationSupport(ignoreParameters = {"datasetCleanDto.cleanId","datasetCleanConfigDto.cleanConfigId"})
@OperationLog(type = SysOperationLogType.ADD_ALL)
@PostMapping("/addAll")
public ResponseResult<DatasetClean> addAll(@MyRequestBody DatasetCleanDto datasetCleanDto,
@MyRequestBody DatasetCleanConfigDto datasetCleanConfigDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetCleanDto, false);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetClean datasetClean = MyModelUtil.copyTo(datasetCleanDto, DatasetClean.class);
DatasetCleanConfig datasetCleanConfig = MyModelUtil.copyTo(datasetCleanConfigDto, DatasetCleanConfig.class);
datasetClean = datasetCleanService.saveNew(datasetClean,datasetCleanConfig);
return ResponseResult.success(datasetClean);
}
/**
* 更新数据集清洗数据。
*
* @param datasetCleanDto 更新对象。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody DatasetCleanDto datasetCleanDto) {
String errorMessage = MyCommonUtil.getModelValidationError(datasetCleanDto, true);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
DatasetClean datasetClean = MyModelUtil.copyTo(datasetCleanDto, DatasetClean.class);
DatasetClean originaldatasetClean = datasetCleanService.getById(datasetClean.getCleanId());
if (originaldatasetClean == null) {
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!datasetCleanService.update(datasetClean, originaldatasetClean)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
/**
* 删除数据集清洗数据。
*
* @param cleanId 删除对象主键Id。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.DELETE)
@PostMapping("/delete")
public ResponseResult<Void> delete(@MyRequestBody Long cleanId) {
if (MyCommonUtil.existBlankArgument(cleanId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return this.doDelete(cleanId);
}
/**
* 列出符合过滤条件的数据集清洗列表。
*
* @param datasetCleanDtoFilter 过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<DatasetCleanVo>> list(
@MyRequestBody DatasetCleanDto datasetCleanDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
DatasetClean datasetCleanFilter = MyModelUtil.copyTo(datasetCleanDtoFilter, DatasetClean.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, DatasetClean.class);
List<DatasetClean> datasetCleanList =
datasetCleanService.getDatasetCleanListWithRelation(datasetCleanFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(datasetCleanList, DatasetClean.INSTANCE));
}
/**
* 查看指定数据集清洗对象清洗。
*
* @param cleanId 指定对象主键Id。
* @return 应答结果对象,包含对象清洗。
*/
@GetMapping("/view")
public ResponseResult<DatasetCleanVo> view(@RequestParam Long cleanId) {
DatasetClean datasetClean = datasetCleanService.getByIdWithRelation(cleanId, MyRelationParam.full());
if (datasetClean == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
DatasetCleanVo datasetCleanVo = DatasetClean.INSTANCE.fromModel(datasetClean);
return ResponseResult.success(datasetCleanVo);
}
private ResponseResult<Void> doDelete(Long cleanId) {
String errorMessage;
// 验证关联Id的数据合法性
DatasetClean originaldatasetClean = datasetCleanService.getById(cleanId);
if (originaldatasetClean == null) {
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!datasetCleanService.remove(cleanId)) {
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
return ResponseResult.success();
}
}
...@@ -22,12 +22,12 @@ import org.springframework.web.bind.annotation.*; ...@@ -22,12 +22,12 @@ import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
/** /**
* 数据集详情操作控制器类。 * 数据集导出操作控制器类。
* *
* @author linking * @author linking
* @date 2023-04-13 * @date 2023-04-13
*/ */
@Api(tags = "数据集版本导出管理接口") @Api(tags = "数据集导出管理接口")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/admin/app/datasetOutput") @RequestMapping("/admin/app/datasetOutput")
...@@ -37,7 +37,7 @@ public class DatasetOutputController { ...@@ -37,7 +37,7 @@ public class DatasetOutputController {
private DatasetOutputService datasetOutputService; private DatasetOutputService datasetOutputService;
/** /**
* 新增数据集详情数据。 * 新增数据集导出数据。
* *
* @param datasetOutputDto 新增对象。 * @param datasetOutputDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。 * @return 应答结果对象,包含新增对象主键Id。
...@@ -56,7 +56,7 @@ public class DatasetOutputController { ...@@ -56,7 +56,7 @@ public class DatasetOutputController {
} }
/** /**
* 更新数据集详情数据。 * 更新数据集导出数据。
* *
* @param datasetOutputDto 更新对象。 * @param datasetOutputDto 更新对象。
* @return 应答结果对象。 * @return 应答结果对象。
...@@ -81,22 +81,22 @@ public class DatasetOutputController { ...@@ -81,22 +81,22 @@ public class DatasetOutputController {
} }
/** /**
* 删除数据集详情数据。 * 删除数据集导出数据。
* *
* @param detailId 删除对象主键Id。 * @param outputId 删除对象主键Id。
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@OperationLog(type = SysOperationLogType.DELETE) @OperationLog(type = SysOperationLogType.DELETE)
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<Void> delete(@MyRequestBody Long detailId) { public ResponseResult<Void> delete(@MyRequestBody Long outputId) {
if (MyCommonUtil.existBlankArgument(detailId)) { if (MyCommonUtil.existBlankArgument(outputId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
} }
return this.doDelete(detailId); return this.doDelete(outputId);
} }
/** /**
* 列出符合过滤条件的数据集详情列表。 * 列出符合过滤条件的数据集导出列表。
* *
* @param datasetOutputDtoFilter 过滤对象。 * @param datasetOutputDtoFilter 过滤对象。
* @param orderParam 排序参数。 * @param orderParam 排序参数。
...@@ -119,14 +119,14 @@ public class DatasetOutputController { ...@@ -119,14 +119,14 @@ public class DatasetOutputController {
} }
/** /**
* 查看指定数据集详情对象详情 * 查看指定数据集导出对象导出
* *
* @param detailId 指定对象主键Id。 * @param outputId 指定对象主键Id。
* @return 应答结果对象,包含对象详情 * @return 应答结果对象,包含对象导出
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<DatasetOutputVo> view(@RequestParam Long detailId) { public ResponseResult<DatasetOutputVo> view(@RequestParam Long outputId) {
DatasetOutput datasetOutput = datasetOutputService.getByIdWithRelation(detailId, MyRelationParam.full()); DatasetOutput datasetOutput = datasetOutputService.getByIdWithRelation(outputId, MyRelationParam.full());
if (datasetOutput == null) { if (datasetOutput == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
} }
...@@ -134,15 +134,15 @@ public class DatasetOutputController { ...@@ -134,15 +134,15 @@ public class DatasetOutputController {
return ResponseResult.success(datasetOutputVo); return ResponseResult.success(datasetOutputVo);
} }
private ResponseResult<Void> doDelete(Long detailId) { private ResponseResult<Void> doDelete(Long outputId) {
String errorMessage; String errorMessage;
// 验证关联Id的数据合法性 // 验证关联Id的数据合法性
DatasetOutput originaldatasetOutput = datasetOutputService.getById(detailId); DatasetOutput originaldatasetOutput = datasetOutputService.getById(outputId);
if (originaldatasetOutput == null) { if (originaldatasetOutput == null) {
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!datasetOutputService.remove(detailId)) { if (!datasetOutputService.remove(outputId)) {
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
......
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.DatasetCleanConfig;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 数据集清理配置数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetCleanConfigMapper extends BaseDaoMapper<DatasetCleanConfig> {
/**
* 批量插入对象列表。
*
* @param datasetCleanConfigList 新增对象列表。
*/
void insertList(List<DatasetCleanConfig> datasetCleanConfigList);
/**
* 获取过滤后的对象列表。
*
* @param datasetCleanConfigFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<DatasetCleanConfig> getDatasetCleanConfigList(
@Param("DatasetCleanFilter") DatasetCleanConfig datasetCleanConfigFilter, @Param("orderBy") String orderBy);
}
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.DatasetClean;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 数据集清理接口数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetCleanMapper extends BaseDaoMapper<DatasetClean> {
/**
* 批量插入对象列表。
*
* @param datasetCleanList 新增对象列表。
*/
void insertList(List<DatasetClean> datasetCleanList);
/**
* 获取过滤后的对象列表。
*
* @param datasetCleanFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<DatasetClean> getDatasetCleanList(
@Param("DatasetCleanFilter") DatasetClean datasetCleanFilter, @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.DatasetCleanConfigMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.app.model.DatasetCleanConfig">
<id column="clean_config_id" jdbcType="BIGINT" property="cleanConfigId"/>
<result column="clean_config" jdbcType="VARCHAR" property="cleanConfig"/>
<result column="filter_config" jdbcType="VARCHAR" property="filterConfig"/>
<result column="desensitive_config" jdbcType="VARCHAR" property="desensitiveConfig"/>
<result column="deduplicate_config" jdbcType="VARCHAR" property="deduplicateConfig"/>
<result column="clean_id" jdbcType="BIGINT" property="cleanId"/>
<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"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_data_clean_config
(clean_config_id,
clean_config,
filter_config,
desensitive_config,
deduplicate_config,
clean_id,
create_user_id,
create_time,
update_user_id,
update_time)
VALUES
<foreach collection="list" index="index" item="item" separator=",">
(#{item.cleanConfigId},
#{item.cleanConfig},
#{item.filterConfig},
#{item.desensitiveConfig},
#{item.deduplicateConfig},
#{item.cleanId},
#{item.createUserId},
#{item.createTime},
#{item.updateUserId},
#{item.updateTime})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.app.dao.DatasetCleanConfigMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="datasetCleanConfigFilter != null">
<if test="datasetCleanConfigFilter.cleanConfigId != null">
AND lmp_data_clean_config.clean_config_id = #{datasetCleanConfigFilter.cleanConfigId}
</if>
<if test="datasetCleanConfigFilter.datasetId != null">
AND lmp_data_clean_config.dataset_id = #{datasetCleanConfigFilter.datasetId}
</if>
</if>
</sql>
<select id="getDatasetCleanConfigList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.DatasetCleanConfig">
SELECT * FROM lmp_data_clean_config
<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.DatasetCleanMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.app.model.DatasetClean">
<id column="clean_id" jdbcType="BIGINT" property="cleanId"/>
<result column="dataset_id" jdbcType="BIGINT" property="datasetId"/>
<result column="dataset_name" jdbcType="VARCHAR" property="datasetName"/>
<result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
<result column="clean_type" jdbcType="INTEGER" property="cleanType"/>
<result column="clean_status" jdbcType="INTEGER" property="cleanStatus"/>
<result column="finish_time" jdbcType="TIMESTAMP" property="finishTime"/>
<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"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_data_clean
(clean_id,
dataset_id,
dataset_name,
start_time,
clean_type,
clean_status,
finish_time,
create_user_id,
create_time,
update_user_id,
update_time)
VALUES
<foreach collection="list" index="index" item="item" separator=",">
(#{item.cleanId},
#{item.datasetId},
#{item.datasetName},
#{item.startTime},
#{item.cleanType},
#{item.cleanStatus},
#{item.finishTime},
#{item.createUserId},
#{item.createTime},
#{item.updateUserId},
#{item.updateTime})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.app.dao.DatasetCleanMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="datasetCleanFilter != null">
<if test="datasetCleanFilter.cleanId != null">
AND lmp_data_clean.clean_id = #{datasetCleanFilter.cleanId}
</if>
<if test="datasetCleanFilter.datasetId != null">
AND lmp_data_clean.dataset_id = #{datasetCleanFilter.datasetId}
</if>
</if>
</sql>
<select id="getDatasetCleanList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.DatasetClean">
SELECT * FROM lmp_data_clean
<where>
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
...@@ -14,23 +14,23 @@ import java.util.Date; ...@@ -14,23 +14,23 @@ import java.util.Date;
@ApiModel @ApiModel
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Document(collection = "DATASET-DATA") @Document(collection = "dataset_data")
public class DatasetData { public class DatasetData {
@Id @Id
@ApiModelProperty(name = "_id",value = "文档标识") @ApiModelProperty(name = "_id",value = "文档标识")
private String _id; private String id;
@ApiModelProperty(name = "versionId",value = "版本标识") @ApiModelProperty(name = "version_id",value = "版本标识")
private Long versionId; private Long versionId;
@ApiModelProperty(name = "data",value = "json格式数据") @ApiModelProperty(name = "data",value = "json格式数据")
private String data; private String data;
@ApiModelProperty(name = "createTime",value="创建时间") @ApiModelProperty(name = "create_time",value="创建时间")
private Date createTime; private Date createTime;
@ApiModelProperty(name = "markStatus",value="标记状态") @ApiModelProperty(name = "mark_status",value="标记状态")
private Integer markStatus; private Integer markStatus;
} }
package com.yice.webadmin.app.data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Data
@ApiModel
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "dataset_data_clean")
public class DatasetDataClean {
@Id
@ApiModelProperty(name = "_id",value = "文档标识")
private String id;
@ApiModelProperty(name = "clean_id",value = "清洗任务标识id")
private Long cleanId;
@ApiModelProperty(name = "clean_before_data",value = "清洗前数据")
private String cleanBeforeData;
@ApiModelProperty(name = "clean_after_data",value="清洗后数据")
private String cleanAfterData;
@ApiModelProperty(name = "create_time",value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Data
@ApiModel
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "dataset_data_deduplicate")
public class DatasetDataDeduplicate {
@Id
@ApiModelProperty(name = "_id",value = "文档标识")
private String id;
@ApiModelProperty(name = "clean_id",value = "清洗任务标识id")
private Long cleanId;
@ApiModelProperty(name = "content",value = "去重内容")
private String content;
@ApiModelProperty(name = "create_time",value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Data
@ApiModel
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "dataset_data_desensitive")
public class DatasetDataDesensitive {
@Id
@ApiModelProperty(name = "_id",value = "文档标识")
private String id;
@ApiModelProperty(name = "clean_id",value = "清洗任务标识id")
private Long cleanId;
@ApiModelProperty(name = "content",value = "去隐私内容")
private String content;
@ApiModelProperty(name = "create_time",value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Data
@ApiModel
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "dataset_data_filter")
public class DatasetDataFilter {
@Id
@ApiModelProperty(name = "_id",value = "文档标识")
private String id;
@ApiModelProperty(name = "clean_id",value = "清洗任务标识id")
private Long cleanId;
@ApiModelProperty(name = "content",value = "过滤内容")
private String content;
@ApiModelProperty(name = "create_time",value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* DatasetCleanConfigDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetCleanConfigDto视图对象")
@Data
public class DatasetCleanConfigDto {
/**
* 数据清理配置id。
*/
@ApiModelProperty(value = "数据清理配置id")
private Long cleanConfigId;
/**
* 清洗配置。
*/
@ApiModelProperty(value = "清洗配置")
private String cleanConfig;
/**
* 过滤配置。
*/
@ApiModelProperty(value = "过滤配置")
private String filterConfig;
/**
* 去隐私配置。
*/
@ApiModelProperty(value = "去隐私配置")
private String desensitiveConfig;
/**
* 去重配置。
*/
@ApiModelProperty(value = "去重配置")
private String deduplicateConfig;
/**
* 清理任务配置id。
*/
@ApiModelProperty(value = "清理任务配置id")
private Long cleanId;
/**
* 创建人ID。
*/
@ApiModelProperty(value = "创建人ID")
private Long createUserId;
/**
* 创建时间。
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 创建人名称字典。
*/
@ApiModelProperty(value = "创建人名称字典")
private Map<String, Object> createUserIdDictMap;
/**
* 更新人。
*/
@ApiModelProperty(value = "更新人")
private Long updateUserId;
/**
* 更新时间。
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* DatasetCleanDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetCleanDto视图对象")
@Data
public class DatasetCleanDto {
/**
* 清洗任务ID。
*/
@ApiModelProperty(value = "清洗任务ID")
private Long cleanId;
/**
* 清洗数据集ID。
*/
@ApiModelProperty(value = "清洗数据集ID")
private Long datasetId;
/**
* 清洗数据集名称。
*/
@ApiModelProperty(value = "清洗数据集名称")
private String datasetName;
/**
* 清洗方式。
*/
@ApiModelProperty(value = "清洗方式")
private List<String> cleanMethod;
/**
* 开始时间。
*/
@ApiModelProperty(value = "开始时间")
private Date startTime;
/**
* 清洗类型。
*/
@ApiModelProperty(value = "清洗类型")
private Integer cleanType;
/**
* 清洗状态。
*/
@ApiModelProperty(value = "清洗状态:0:进行中;1:已完成")
private Integer cleanStatus;
/**
* 完成时间。
*/
@ApiModelProperty(value = "完成时间")
private Date finishTime;
/**
* 创建人。
*/
@ApiModelProperty(value = "创建人")
private Long createUserId;
/**
* 创建时间。
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 创建人名称字典。
*/
@ApiModelProperty(value = "创建人名称字典")
private Map<String, Object> createUserIdDictMap;
/**
* 更新人。
*/
@ApiModelProperty(value = "更新人")
private Long updateUserId;
/**
* 更新时间。
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataCleanDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataCleanDto视图对象")
@Data
public class DatasetDataCleanDto {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 清洗前数据。
*/
@ApiModelProperty(value = "清洗前数据")
private String cleanBeforeData;
/**
* 清洗后数据。
*/
@ApiModelProperty(value="清洗后数据")
private String cleanAfterData;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataDeduplicateDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataDeduplicateDto视图对象")
@Data
public class DatasetDataDeduplicateDto {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 过滤内容。
*/
@ApiModelProperty(value = "过滤内容")
private String content;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataDesensitiveDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataDesensitiveDto视图对象")
@Data
public class DatasetDataDesensitiveDto {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 过滤内容。
*/
@ApiModelProperty(value = "过滤内容")
private String content;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
...@@ -20,7 +20,7 @@ public class DatasetDataDto { ...@@ -20,7 +20,7 @@ public class DatasetDataDto {
* 文档标识 * 文档标识
*/ */
@ApiModelProperty(value = "文档标识") @ApiModelProperty(value = "文档标识")
private String _id; private String id;
/** /**
* 版本标识。 * 版本标识。
......
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataFilterDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataFilterDto视图对象")
@Data
public class DatasetDataFilterDto {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 过滤内容。
*/
@ApiModelProperty(value = "过滤内容")
private String content;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
...@@ -52,7 +52,7 @@ public class DatasetVersionDto { ...@@ -52,7 +52,7 @@ public class DatasetVersionDto {
/** /**
* 清洗状态。 * 清洗状态。
*/ */
@ApiModelProperty(value = "清洗状态") @ApiModelProperty(value = "清洗状态:未清洗;1清洗中;2已清洗")
private Integer cleanStatus; private Integer cleanStatus;
/** /**
......
package com.yice.webadmin.app.model;
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.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.DatasetCleanVo;
import com.yice.webadmin.upms.model.SysUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* DatasetClean实体对象。
*
* @author linking
* @date 2023-04-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_dataset_clean")
public class DatasetClean extends BaseModel {
/**
* 清洗任务ID。
*/
@TableId(value = "clean_id")
private Long cleanId;
/**
* 清洗数据集ID。
*/
private Long datasetId;
/**
* 清洗数据集名称。
*/
private String datasetName;
/**
* 开始时间。
*/
private Date startTime;
/**
* 清洗类型。
*/
private Integer cleanType;
/**
* 清洗状态。
*/
private Integer cleanStatus;
/**
* 完成时间。
*/
private Date finishTime;
/**
* 创建人。
*/
private Long createUserId;
/**
* 创建时间。
*/
private Date createTime;
/**
* 清洗方式。
*/
@TableField(exist = false)
private List<String> cleanMethod;
/**
* 创建人名称字典。
*/
@RelationDict(
masterIdField = "createUserId",
slaveModelClass = SysUser.class,
slaveIdField = "userId",
slaveNameField = "showName")
@TableField(exist = false)
private Map<String, Object> createUserIdDictMap;
/**
* 更新人。
*/
private Long updateUserId;
/**
* 更新时间。
*/
private Date updateTime;
@Mapper
public interface DatasetCleanModelMapper extends BaseModelMapper<DatasetCleanVo, DatasetClean> {
/**
* 转换Vo对象到实体对象。
*
* @param datasetCleanVo 域对象。
* @return 实体对象。
*/
@Override
DatasetClean toModel(DatasetCleanVo datasetCleanVo);
/**
* 转换实体对象到VO对象。
*
* @param datasetClean 实体对象。
* @return 域对象。
*/
@Override
DatasetCleanVo fromModel(DatasetClean datasetClean);
}
public static final DatasetClean.DatasetCleanModelMapper INSTANCE = Mappers.getMapper(DatasetClean.DatasetCleanModelMapper.class);
}
package com.yice.webadmin.app.model;
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.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.DatasetCleanConfigVo;
import com.yice.webadmin.upms.model.SysUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.Date;
import java.util.Map;
/**
* DatasetCleanConfig实体对象。
*
* @author linking
* @date 2023-04-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_dataset_clean_config")
public class DatasetCleanConfig extends BaseModel {
/**
* 数据清理配置id。
*/
@TableId(value = "clean_config_id")
private Long cleanConfigId;
/**
* 清洗配置。
*/
private String cleanConfig;
/**
* 过滤配置。
*/
private String filterConfig;
/**
* 去隐私配置。
*/
private String desensitiveConfig;
/**
* 去重配置。
*/
private String deduplicateConfig;
/**
* 清理任务配置id。
*/
private Long cleanId;
/**
* 创建人。
*/
private Long createUserId;
/**
* 创建时间。
*/
private Date createTime;
/**
* 创建人名称字典。
*/
@RelationDict(
masterIdField = "createUserId",
slaveModelClass = SysUser.class,
slaveIdField = "userId",
slaveNameField = "showName")
@TableField(exist = false)
private Map<String, Object> createUserIdDictMap;
/**
* 更新人。
*/
private Long updateUserId;
/**
* 更新时间。
*/
private Date updateTime;
@Mapper
public interface DatasetCleanConfigModelMapper extends BaseModelMapper<DatasetCleanConfigVo, DatasetCleanConfig> {
/**
* 转换Vo对象到实体对象。
*
* @param datasetCleanConfigVo 域对象。
* @return 实体对象。
*/
@Override
DatasetCleanConfig toModel(DatasetCleanConfigVo datasetCleanConfigVo);
/**
* 转换实体对象到VO对象。
*
* @param datasetCleanConfig 实体对象。
* @return 域对象。
*/
@Override
DatasetCleanConfigVo fromModel(DatasetCleanConfig datasetCleanConfig);
}
public static final DatasetCleanConfig.DatasetCleanConfigModelMapper INSTANCE = Mappers.getMapper(DatasetCleanConfig.DatasetCleanConfigModelMapper.class);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.common.core.object.MyPageParam;
import com.yice.webadmin.app.data.DatasetDataClean;
import com.yice.webadmin.app.data.DatasetDataDeduplicate;
import com.yice.webadmin.app.data.DatasetDataDesensitive;
import com.yice.webadmin.app.data.DatasetDataFilter;
import com.yice.webadmin.app.model.DatasetCleanConfig;
import java.util.List;
/**
* 数据集导出数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetCleanConfigService extends IBaseService<DatasetCleanConfig, Long> {
/**
* 保存新增对象。
*
* @param datasetCleanConfig 新增对象。
* @return 返回新增对象。
*/
DatasetCleanConfig saveNew(DatasetCleanConfig datasetCleanConfig);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetCleanConfigList 新增对象列表。
*/
void saveNewBatch(List<DatasetCleanConfig> datasetCleanConfigList);
/**
* 更新数据对象。
*
* @param datasetCleanConfig 更新的对象。
* @param originalDatasetCleanConfig 原有数据对象。
* @return 成功返回true,否则false。
*/
boolean update(DatasetCleanConfig datasetCleanConfig, DatasetCleanConfig originalDatasetCleanConfig);
/**
* 删除指定数据。
*
* @param cleanId 主键Id。
* @return 成功返回true,否则false。
*/
boolean remove(Long cleanId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getDatasetCleanConfigListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetCleanConfig> getDatasetCleanConfigList(DatasetCleanConfig filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getDatasetCleanConfigListWithRelation),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetCleanConfig> getDatasetCleanConfigListWithRelation(DatasetCleanConfig filter, String orderBy);
/**
* 查询数据集重复列表集合
* @param filter 清洗标识
* @param pageParam 页码参数
* @return 返回查看对象列表
*/
List<DatasetDataDeduplicate> getDatasetDeduplicateList(DatasetDataDeduplicate filter, MyPageParam pageParam);
/**
* 查询数据集过滤列表集合
* @param filter 清洗标识
* @param pageParam 页码参数
* @return 返回查看对象列表
*/
List<DatasetDataFilter> getDatasetFilterList(DatasetDataFilter filter, MyPageParam pageParam);
/**
* 查询数据集清洗列表集合
* @param filter 清洗标识
* @param pageParam 页码参数
* @return 返回查看对象列表
*/
List<DatasetDataClean> getDatasetCleanList(DatasetDataClean filter, MyPageParam pageParam);
/**
* 查询数据集隐私列表集合
* @param filter 清洗标识
* @param pageParam 页码参数
* @return 返回查看对象列表
*/
List<DatasetDataDesensitive> getDatasetDesensitiveList(DatasetDataDesensitive filter, MyPageParam pageParam);
/**
* 保存数据集去隐私100条数据新增对象。
*
* @param desensitives 新增对象。
* @return 返回新增对象。
*/
void saveDatasetDesensitive(List<DatasetDataDesensitive> desensitives);
/**
* 保存数据集去重100条数据新增对象。
*
* @param deduplicates 新增对象。
* @return 返回新增对象。
*/
void saveDatasetDeduplicate(List<DatasetDataDeduplicate> deduplicates);
/**
* 保存数据集过滤100条数据新增对象。
*
* @param filters 新增对象。
* @return 返回新增对象。
*/
void saveDatasetFilter(List<DatasetDataFilter> filters);
/**
* 保存数据集清洗100条数据新增对象。
*
* @param cleans 新增对象。
* @return 返回新增对象。
*/
void saveDatasetClean(List<DatasetDataClean> cleans);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.webadmin.app.model.DatasetClean;
import com.yice.webadmin.app.model.DatasetCleanConfig;
import java.util.List;
/**
* 数据集导出数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetCleanService extends IBaseService<DatasetClean, Long> {
/**
* 保存新增对象。
*
* @param datasetClean 新增对象。
* @return 返回新增对象。
*/
DatasetClean saveNew(DatasetClean datasetClean);
/**
* 保存清洗对象以及清洗配置对象。
*
* @param datasetClean 新增对象。
* @param datasetCleanConfig 新增配置对象。
* @return 返回新增对象。
*/
DatasetClean saveNew(DatasetClean datasetClean, DatasetCleanConfig datasetCleanConfig);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetCleanList 新增对象列表。
*/
void saveNewBatch(List<DatasetClean> datasetCleanList);
/**
* 更新数据对象。
*
* @param datasetClean 更新的对象。
* @param originalDatasetClean 原有数据对象。
* @return 成功返回true,否则false。
*/
boolean update(DatasetClean datasetClean, DatasetClean originalDatasetClean);
/**
* 删除指定数据。
*
* @param cleanId 主键Id。
* @return 成功返回true,否则false。
*/
boolean remove(Long cleanId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getdatasetCleanListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetClean> getDatasetCleanList(DatasetClean filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getdatasetCleanList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<DatasetClean> getDatasetCleanListWithRelation(DatasetClean filter, String orderBy);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.object.MyPageParam;
import com.yice.webadmin.app.data.DatasetData;
import java.util.List;
/**
* 数据集版本数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface DatasetDataRecordService {
/**
* 保存新增对象。
*
* @param datasetData 新增对象。
* @return 返回新增对象。
*/
void save(DatasetData datasetData);
/**
* 删除整个集合中的文档数据。
*
* @param versionId 版本标识。
* @return 返回受影响的行数。
*/
void delete(Long versionId);
/**
* 根据id查询该条信息。
*
* @param id 文档标识。
* @param versionId 版本标识。
* @return 返回查看对象。
*/
DatasetData view(String id, Long versionId);
/**
* 查询列表集合总条数
* @param versionId 版本标识
* @return 返回总条数
*/
Long count(Long versionId);
/**
* 查询列表集合总条数
* @param filter 过滤条件
* @return 返回总条数
*/
Long count(DatasetData filter);
/**
* 查询列表集合
* @param versionId 版本标识
* @param pageParam 页码参数
* @return 返回查看对象列表
*/
List<DatasetData> list(Long versionId, MyPageParam pageParam);
/**
* 根据条件查询数据集数据。
*
* @param filter 过滤对象。
* @param pageParam 分页对象。
* @return 查询结果集。
*/
List<DatasetData> list(DatasetData filter, MyPageParam pageParam);
/**
* 更新数据对象。
*
* @param datasetData 更新的对象。
* @return 返回修改后的对象。
*/
void update(DatasetData datasetData);
/**
* 删除指定数据。
*
* @param id 主键Id。
* @param versionId 版本标识。
* @return 返回受影响的行数。
*/
Long remove(String id,Long versionId);
}
package com.yice.webadmin.app.service.impl;
import cn.hutool.core.collection.CollUtil;
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.MyPageParam;
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.constant.DatasetConstant;
import com.yice.webadmin.app.dao.DatasetCleanConfigMapper;
import com.yice.webadmin.app.dao.DatasetCleanMapper;
import com.yice.webadmin.app.data.DatasetData;
import com.yice.webadmin.app.data.DatasetDataFilter;
import com.yice.webadmin.app.model.DatasetClean;
import com.yice.webadmin.app.model.DatasetCleanConfig;
import com.yice.webadmin.app.model.DatasetVersion;
import com.yice.webadmin.app.service.DatasetCleanConfigService;
import com.yice.webadmin.app.service.DatasetCleanService;
import com.yice.webadmin.app.service.DatasetDataService;
import com.yice.webadmin.app.service.DatasetVersionService;
import com.yice.webadmin.app.util.JsonNameExtractor;
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.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 数据集详情数据操作服务类。
*
* @author linking
* @date 2023-04-13
*/
@Slf4j
@Service("datasetCleanService")
public class DatasetCleanServiceImpl extends BaseService<DatasetClean, Long> implements DatasetCleanService {
@Autowired
private DatasetCleanMapper datasetCleanMapper;
@Autowired
private DatasetCleanConfigMapper datasetCleanConfigMapper;
@Autowired
private IdGeneratorWrapper idGenerator;
@Autowired
private DatasetCleanConfigService datasetCleanConfigService;
@Autowired
private DatasetDataService datasetDataService;
@Autowired
private DatasetVersionService datasetVersionService;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<DatasetClean> mapper() {
return datasetCleanMapper;
}
/**
* 保存新增对象。
*
* @param datasetClean 新增对象。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public DatasetClean saveNew(DatasetClean datasetClean) {
datasetCleanMapper.insert(this.buildDefaultValue(datasetClean));
return datasetClean;
}
/**
* 保存清洗对象以及清洗配置对象。
*
* @param datasetClean 新增对象。
* @param datasetCleanConfig 新增配置对象。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public DatasetClean saveNew(DatasetClean datasetClean, DatasetCleanConfig datasetCleanConfig) {
datasetCleanMapper.insert(this.buildDefaultValue(datasetClean));
datasetCleanConfig.setCleanId(datasetClean.getCleanId());
datasetCleanConfig.setCleanConfigId(idGenerator.nextLongId());
MyModelUtil.fillCommonsForInsert(datasetCleanConfig);
datasetCleanConfigMapper.insert(datasetCleanConfig);
DatasetVersion datasetVersion = new DatasetVersion();
datasetVersion.setVersionId(datasetClean.getDatasetId());
datasetVersion.setCleanStatus(DatasetConstant.CLEAN_PROGRESS);
datasetVersionService.updateById(datasetVersion);
return datasetClean;
}
/**
* 清洗100个样本
* @param datasetId 数据集对应的版本
*/
private void doDatasetCleanHandler(Long datasetId, Long cleanId) {
MyPageParam param = new MyPageParam();
param.setPageNum(DatasetConstant.PAGE_NUM);
param.setPageSize(DatasetConstant.MAX_PAGE_SIZE);
List<DatasetData> dataList = datasetDataService.list(datasetId, param);
if(CollUtil.isNotEmpty(dataList)) {
}
datasetCleanConfigService.saveDatasetClean(null);
datasetCleanConfigService.saveDatasetDeduplicate(null);
}
private void doCleanDatasetHandler(List<DatasetData> dataList, Long cleanId) {
if(CollUtil.isNotEmpty(dataList)) {
for(DatasetData datasetData: dataList) {
DatasetCleanConfig filter = new DatasetCleanConfig();
filter.setCleanId(cleanId);
DatasetCleanConfig cleanConfig = datasetCleanConfigService.getOne(filter);
}
}
}
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param datasetCleanList 新增对象列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveNewBatch(List<DatasetClean> datasetCleanList) {
if (CollUtil.isNotEmpty(datasetCleanList)) {
datasetCleanList.forEach(this::buildDefaultValue);
datasetCleanMapper.insertList(datasetCleanList);
}
}
/**
* 更新数据对象。
*
* @param datasetClean 更新的对象。
* @param originalDatasetClean 原有数据对象。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(DatasetClean datasetClean, DatasetClean originalDatasetClean) {
MyModelUtil.fillCommonsForUpdate(datasetClean, originalDatasetClean);
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<DatasetClean> uw = this.createUpdateQueryForNullValue(datasetClean, datasetClean.getCleanId());
return datasetCleanMapper.update(datasetClean, uw) == 1;
}
/**
* 删除指定数据。
*
* @param cleanId 主键Id。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long cleanId) {
return datasetCleanMapper.deleteById(cleanId) == 1;
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getDatasetCleanListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetClean> getDatasetCleanList(DatasetClean filter, String orderBy) {
return datasetCleanMapper.getDatasetCleanList(filter, orderBy);
}
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getDatasetCleanList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<DatasetClean> getDatasetCleanListWithRelation(DatasetClean filter, String orderBy) {
List<DatasetClean> resultList = datasetCleanMapper.getDatasetCleanList(filter, orderBy);
// 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
this.buildDatasetMethod(resultList);
return resultList;
}
/**
* 构建数据集方法
* @param datasetCleanList 数据集列表
*/
private void buildDatasetMethod(List<DatasetClean> datasetCleanList){
List<String> jsonStrings = new ArrayList<>();
if(CollUtil.isNotEmpty(datasetCleanList)){
for(DatasetClean datasetClean: datasetCleanList) {
DatasetCleanConfig filter = new DatasetCleanConfig();
filter.setCleanId(datasetClean.getCleanId());
DatasetCleanConfig cleanConfig = datasetCleanConfigService.getOne(filter);
jsonStrings.add(cleanConfig.getCleanConfig());
jsonStrings.add(cleanConfig.getDeduplicateConfig());
jsonStrings.add(cleanConfig.getFilterConfig());
jsonStrings.add(cleanConfig.getDesensitiveConfig());
List<String> nonEmptyJsonStrings = jsonStrings.stream()
.filter(s -> s != null && !s.isEmpty())
.collect(Collectors.toList());
datasetClean.setCleanMethod(JsonNameExtractor.extractNames(nonEmptyJsonStrings));
}
}
}
/**
* 新增清理对象
* @param DatasetClean 数据集清理对象
* @return 清理对象
*/
private DatasetClean buildDefaultValue(DatasetClean DatasetClean) {
if (DatasetClean.getCleanId() == null) {
DatasetClean.setCleanId(idGenerator.nextLongId());
}
MyModelUtil.fillCommonsForInsert(DatasetClean);
return DatasetClean;
}
}
...@@ -94,7 +94,7 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long> ...@@ -94,7 +94,7 @@ public class DatasetVersionServiceImpl extends BaseService<DatasetVersion, Long>
version = datasetVersionList.get(datasetVersionList.size() - 1).getDatasetVersion() + 1; version = datasetVersionList.get(datasetVersionList.size() - 1).getDatasetVersion() + 1;
} }
datasetVersion.setDatasetVersion(version); datasetVersion.setDatasetVersion(version);
datasetVersion.setVersionName(reDatasetManage.getDatasetName() + "_V" + datasetVersion.getDatasetVersion()); datasetVersion.setVersionName("V" + datasetVersion.getDatasetVersion());
datasetVersion.setDatasetId(reDatasetManage.getDatasetId()); datasetVersion.setDatasetId(reDatasetManage.getDatasetId());
datasetVersion.setCleanStatus(0); datasetVersion.setCleanStatus(0);
datasetVersion.setDataVolume(0L); datasetVersion.setDataVolume(0L);
......
package com.yice.webadmin.app.util;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class JsonNameExtractor {
/**
* 拼接名字
* @param jsonStrings json名字
* @return 名字列表
*/
public static List<String> extractNames(List<String> jsonStrings) {
ObjectMapper mapper = new ObjectMapper();
List<String> names = new ArrayList<>();
for (String jsonString : jsonStrings) {
try {
JsonNode rootNode = mapper.readTree(jsonString);
if (rootNode.isArray()) {
for (JsonNode jsonNode : rootNode) {
JsonNode nameNode = jsonNode.get("name");
if (nameNode != null && nameNode.isTextual()) {
names.add(nameNode.asText());
}
}
}
} catch (IOException e) {
log.error("extract name is error", e);
continue;
}
}
return names;
}
}
package com.yice.webadmin.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* DatasetCleanConfigVo视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetCleanConfigVo视图对象")
@Data
public class DatasetCleanConfigVo {
/**
* 数据清理配置id。
*/
@ApiModelProperty(value = "数据清理配置id")
private Long cleanConfigId;
/**
* 清洗配置。
*/
@ApiModelProperty(value = "清洗配置")
private String cleanConfig;
/**
* 过滤配置。
*/
@ApiModelProperty(value = "过滤配置")
private String filterConfig;
/**
* 去隐私配置。
*/
@ApiModelProperty(value = "去隐私配置")
private String desensitiveConfig;
/**
* 去重配置。
*/
@ApiModelProperty(value = "去重配置")
private String deduplicateConfig;
/**
* 清理任务配置id。
*/
@ApiModelProperty(value = "清理任务配置id")
private String cleanId;
/**
* 创建人ID。
*/
@ApiModelProperty(value = "创建人ID")
private Integer cleanType;
/**
* 创建时间。
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 创建人名称字典。
*/
@ApiModelProperty(value = "创建人名称字典")
private Map<String, Object> createUserIdDictMap;
/**
* 更新人。
*/
@ApiModelProperty(value = "更新人")
private Long updateUserId;
/**
* 更新时间。
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
package com.yice.webadmin.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* DatasetCleanVo视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetCleanVo视图对象")
@Data
public class DatasetCleanVo {
/**
* 清洗任务ID。
*/
@ApiModelProperty(value = "清洗任务ID")
private Long cleanId;
/**
* 清洗数据集ID。
*/
@ApiModelProperty(value = "清洗数据集ID")
private Long datasetId;
/**
* 清洗方式。
*/
@ApiModelProperty(value = "清洗方式")
private List<String> cleanMethod;
/**
* 清洗数据集名称。
*/
@ApiModelProperty(value = "清洗数据集名称")
private String datasetName;
/**
* 开始时间。
*/
@ApiModelProperty(value = "开始时间")
private Date startTime;
/**
* 清洗类型。
*/
@ApiModelProperty(value = "清洗类型")
private Integer cleanType;
/**
* 清洗状态。
*/
@ApiModelProperty(value = "清洗状态")
private Integer cleanStatus;
/**
* 完成时间。
*/
@ApiModelProperty(value = "完成时间")
private Date finishTime;
/**
* 创建人。
*/
@ApiModelProperty(value = "创建人")
private Long createUserId;
/**
* 创建时间。
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 创建人名称字典。
*/
@ApiModelProperty(value = "创建人名称字典")
private Map<String, Object> createUserIdDictMap;
/**
* 更新人。
*/
@ApiModelProperty(value = "更新人")
private Long updateUserId;
/**
* 更新时间。
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
package com.yice.webadmin.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataCleanVo视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataCleanVo视图对象")
@Data
public class DatasetDataCleanVo {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 清洗前数据。
*/
@ApiModelProperty(value = "清洗前数据")
private String cleanBeforeData;
/**
* 清洗后数据。
*/
@ApiModelProperty(value="清洗后数据")
private String cleanAfterData;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataDeduplicateVo视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataDeduplicateVo视图对象")
@Data
public class DatasetDataDeduplicateVo {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 过滤内容。
*/
@ApiModelProperty(value = "过滤内容")
private String content;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataDesensitiveVo视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataDesensitiveVo视图对象")
@Data
public class DatasetDataDesensitiveVo {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 过滤内容。
*/
@ApiModelProperty(value = "过滤内容")
private String content;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
package com.yice.webadmin.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* DatasetDataFilterVo视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataFilterVo视图对象")
@Data
public class DatasetDataFilterVo {
/**
* 文档标识
*/
@ApiModelProperty(value = "文档标识")
private String id;
/**
* 版本标识。
*/
@ApiModelProperty(value = "清洗任务标识id")
private Long cleanId;
/**
* 过滤内容。
*/
@ApiModelProperty(value = "过滤内容")
private String content;
/**
* 创建时间。
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
}
...@@ -20,7 +20,7 @@ public class DatasetDataVo { ...@@ -20,7 +20,7 @@ public class DatasetDataVo {
* 文档标识 * 文档标识
*/ */
@ApiModelProperty(value = "文档标识") @ApiModelProperty(value = "文档标识")
private String _id; private String id;
/** /**
* 版本标识。 * 版本标识。
......
...@@ -52,7 +52,7 @@ public class DatasetVersionVo extends BaseVo { ...@@ -52,7 +52,7 @@ public class DatasetVersionVo extends BaseVo {
/** /**
* 清洗状态。 * 清洗状态。
*/ */
@ApiModelProperty(value = "清洗状态") @ApiModelProperty(value = "清洗状态:未清洗;1清洗中;2已清洗")
private Integer cleanStatus; private Integer cleanStatus;
/** /**
......
...@@ -45,7 +45,7 @@ spring: ...@@ -45,7 +45,7 @@ spring:
data: data:
mongodb: mongodb:
uri: mongodb://root:123456@192.168.0.36:27017/ uri: mongodb://root:123456@192.168.0.36:27017/
database: imp database: lmp
authentication-database: admin authentication-database: admin
auto-index-creation: true auto-index-creation: true
connections-num-min-size: 5 connections-num-min-size: 5
......
...@@ -27,6 +27,10 @@ public final class SysOperationLogType { ...@@ -27,6 +27,10 @@ public final class SysOperationLogType {
* 新增。 * 新增。
*/ */
public static final int ADD = 10; public static final int ADD = 10;
/**
* 新增多个。
*/
public static final int ADD_ALL = 11;
/** /**
* 修改。 * 修改。
*/ */
...@@ -134,6 +138,7 @@ public final class SysOperationLogType { ...@@ -134,6 +138,7 @@ public final class SysOperationLogType {
DICT_MAP.put(LOGIN, "登录"); DICT_MAP.put(LOGIN, "登录");
DICT_MAP.put(LOGOUT, "登出"); DICT_MAP.put(LOGOUT, "登出");
DICT_MAP.put(ADD, "新增"); DICT_MAP.put(ADD, "新增");
DICT_MAP.put(ADD_ALL, "新增多个");
DICT_MAP.put(UPDATE, "修改"); DICT_MAP.put(UPDATE, "修改");
DICT_MAP.put(DELETE, "删除"); DICT_MAP.put(DELETE, "删除");
DICT_MAP.put(ADD_M2M, "新增多对多关联"); DICT_MAP.put(ADD_M2M, "新增多对多关联");
......
This diff is collapsed.
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