Commit 6a437650 by yuwei

项目初始化

parent 5383e3f4
......@@ -43,10 +43,6 @@ public class ContrastDto implements Serializable {
private String columnComment;
@ApiModelProperty(value = "标准类别主键")
private String gbTypeId;
@ApiModelProperty(value = "标准类别编码")
private String gbTypeCode;
@ApiModelProperty(value = "标准类别名称")
private String gbTypeName;
@ApiModelProperty(value = "绑定标准字段")
private String bindGbColumn;
}
......@@ -69,12 +69,19 @@ public class ContrastDictEntity extends DataScopeBaseEntity {
private String colName;
/**
* 对照的标准字典
*/
private String contrastGbId;
/**
* 对照的标准编码
*/
@TableField(exist = false)
private String contrastGbCode;
/**
* 对照的标准名称
*/
@TableField(exist = false)
private String contrastGbName;
}
package cn.datax.service.data.standard.api.entity;
import cn.datax.common.base.DataScopeBaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -17,7 +18,7 @@ import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("standard_contrast")
@TableName(value = "standard_contrast", autoResultMap = true)
public class ContrastEntity extends DataScopeBaseEntity {
private static final long serialVersionUID=1L;
......@@ -70,11 +71,13 @@ public class ContrastEntity extends DataScopeBaseEntity {
/**
* 标准类别编码
*/
@TableField(exist = false)
private String gbTypeCode;
/**
* 标准类别名称
*/
@TableField(exist = false)
private String gbTypeName;
/**
......
......@@ -27,6 +27,7 @@ public class ContrastDictVo implements Serializable {
private String contrastId;
private String colCode;
private String colName;
private String contrastGbId;
private String contrastGbCode;
private String contrastGbName;
private String sourceName;
......
package cn.datax.service.data.standard.controller;
import cn.datax.common.base.BaseController;
import cn.datax.common.core.R;
import cn.datax.service.data.standard.service.DictMappingService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Api(tags = {"字典对照映射"})
@RestController
@RequestMapping("/mappings")
public class DictMappingController extends BaseController {
@Autowired
private DictMappingService dictMappingService;
@GetMapping("/{id}")
public R getDictMapping(@PathVariable String id) {
Map<String, Object> map = dictMappingService.getDictMapping(id);
return R.ok().setData(map);
}
}
......@@ -4,6 +4,8 @@ import cn.datax.common.base.BaseDao;
import cn.datax.service.data.standard.api.entity.ContrastEntity;
import org.apache.ibatis.annotations.Mapper;
import java.io.Serializable;
/**
* <p>
* 对照表信息表 Mapper 接口
......@@ -15,4 +17,6 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ContrastDao extends BaseDao<ContrastEntity> {
@Override
ContrastEntity selectById(Serializable id);
}
package cn.datax.service.data.standard.service;
import java.util.Map;
public interface DictMappingService {
Map<String, Object> getDictMapping(String id);
}
package cn.datax.service.data.standard.service.impl;
import cn.datax.common.core.DataConstant;
import cn.datax.service.data.standard.api.entity.ContrastDictEntity;
import cn.datax.service.data.standard.api.entity.ContrastEntity;
import cn.datax.service.data.standard.api.entity.DictEntity;
import cn.datax.service.data.standard.api.vo.ContrastDictVo;
import cn.datax.service.data.standard.api.vo.DictVo;
import cn.datax.service.data.standard.dao.ContrastDao;
import cn.datax.service.data.standard.dao.ContrastDictDao;
import cn.datax.service.data.standard.dao.DictDao;
import cn.datax.service.data.standard.mapstruct.ContrastDictMapper;
import cn.datax.service.data.standard.mapstruct.DictMapper;
import cn.datax.service.data.standard.service.DictMappingService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class DictMappingServiceImpl implements DictMappingService {
@Autowired
private ContrastDao contrastDao;
@Autowired
private ContrastDictDao contrastDictDao;
@Autowired
private ContrastDictMapper contrastDictMapper;
@Autowired
private DictDao dictDao;
@Autowired
private DictMapper dictMapper;
@Override
public Map<String, Object> getDictMapping(String id) {
ContrastEntity contrastEntity = contrastDao.selectById(id);
String contrastId = contrastEntity.getId();
String gbTypeId = contrastEntity.getGbTypeId();
List<ContrastDictEntity> contrastDictEntityList = contrastDictDao.selectList(Wrappers.<ContrastDictEntity>lambdaQuery().eq(ContrastDictEntity::getContrastId, contrastId));
List<ContrastDictVo> contrastDictList = contrastDictEntityList.stream().map(contrastDictMapper::toVO).collect(Collectors.toList());
List<DictEntity> dictEntityList = dictDao.selectList(Wrappers.<DictEntity>lambdaQuery().eq(DictEntity::getTypeId, gbTypeId).eq(DictEntity::getStatus, DataConstant.TrueOrFalse.TRUE.getKey()));
List<DictVo> dictList = dictEntityList.stream().map(dictMapper::toVO).collect(Collectors.toList());
Map<String, Object> map = new HashMap<>(4);
String tableName = StrUtil.isBlank(contrastEntity.getTableComment()) ? contrastEntity.getTableName() : contrastEntity.getTableName() + "(" + contrastEntity.getTableComment() + ")";
String columnName = StrUtil.isBlank(contrastEntity.getColumnComment()) ? contrastEntity.getTableName() : contrastEntity.getColumnName() + "(" + contrastEntity.getColumnComment() + ")";
long contrastTotal = contrastDictList.stream().count();
long unContrastTotal = contrastDictList.stream().filter(s -> DataConstant.TrueOrFalse.FALSE.getKey().equals(s.getStatus())).count();
map.put("title", "数据源: " + contrastEntity.getSourceName() + " 数据表: " + tableName + " 对照字段: " + columnName + " 标准类别编码: " + contrastEntity.getGbTypeCode() + " 标准类别名称: " + contrastEntity.getGbTypeName());
map.put("description", "总数: " + contrastTotal + " 未对照: " + unContrastTotal + " 已对照: " + (contrastTotal - unContrastTotal));
map.put("left", contrastDictList);
map.put("right", dictList);
return map;
}
}
......@@ -15,8 +15,7 @@
<result column="contrast_id" property="contrastId" />
<result column="col_code" property="colCode" />
<result column="col_name" property="colName" />
<result column="contrast_gb_code" property="contrastGbCode" />
<result column="contrast_gb_name" property="contrastGbName" />
<result column="contrast_gb_id" property="contrastGbId" />
</resultMap>
<resultMap id="ExtendResultMap" type="cn.datax.service.data.standard.api.entity.ContrastDictEntity" extends="BaseResultMap">
......@@ -25,6 +24,8 @@
<result column="column_name" property="columnName" />
<result column="gb_type_code" property="gbTypeCode" />
<result column="gb_type_name" property="gbTypeName" />
<result column="contrast_gb_code" property="contrastGbCode" />
<result column="contrast_gb_name" property="contrastGbName" />
</resultMap>
<!-- 通用查询结果列 -->
......@@ -37,7 +38,7 @@
update_by,
update_time,
remark,
contrast_id, col_code, col_name, contrast_gb_code, contrast_gb_name
contrast_id, col_code, col_name, contrast_gb_id
</sql>
<sql id="Dict_Column_List">
......@@ -49,14 +50,17 @@
${alias}.update_by,
${alias}.update_time,
${alias}.remark,
${alias}.contrast_id, ${alias}.col_code, ${alias}.col_name, ${alias}.contrast_gb_code, ${alias}.contrast_gb_name
${alias}.contrast_id, ${alias}.col_code, ${alias}.col_name, ${alias}.contrast_gb_id
</sql>
<select id="selectPage" resultMap="ExtendResultMap">
SELECT c.source_name, c.table_name, c.column_name, c.gb_type_code, c.gb_type_name,
SELECT c.source_name, c.table_name, c.column_name, t.gb_type_code, t.gb_type_name,
sd.gb_code AS contrast_gb_code, sd.gb_name AS contrast_gb_name,
<include refid="Dict_Column_List"><property name="alias" value="d"/></include>
FROM standard_contrast_dict d
LEFT JOIN standard_contrast c ON c.id = d.contrast_id
LEFT JOIN standard_type t ON t.id = c.gb_type_id
LEFT JOIN standard_dict sd ON sd.id = d.contrast_gb_id
${ew.customSqlSegment}
</select>
......
......@@ -21,9 +21,12 @@
<result column="column_name" property="columnName" />
<result column="column_comment" property="columnComment" />
<result column="gb_type_id" property="gbTypeId" />
<result column="bind_gb_column" property="bindGbColumn" />
</resultMap>
<resultMap id="ExtendResultMap" type="cn.datax.service.data.standard.api.entity.ContrastEntity" extends="BaseResultMap">
<result column="gb_type_code" property="gbTypeCode" />
<result column="gb_type_name" property="gbTypeName" />
<result column="bind_gb_column" property="bindGbColumn" />
</resultMap>
<!-- 通用查询结果列 -->
......@@ -36,7 +39,28 @@
update_by,
update_time,
remark,
source_id, source_name, table_id, table_name, table_comment, column_id, column_name, column_comment, gb_type_id, gb_type_code, gb_type_name, bind_gb_column
source_id, source_name, table_id, table_name, table_comment, column_id, column_name, column_comment, gb_type_id, bind_gb_column
</sql>
<sql id="Contrast_Column_List">
${alias}.id,
${alias}.status,
${alias}.create_by,
${alias}.create_time,
${alias}.create_dept,
${alias}.update_by,
${alias}.update_time,
${alias}.remark,
${alias}.source_id, ${alias}.source_name, ${alias}.table_id, ${alias}.table_name, ${alias}.table_comment, ${alias}.column_id,
${alias}.column_name, ${alias}.column_comment, ${alias}.gb_type_id, ${alias}.bind_gb_column
</sql>
<select id="selectById" resultMap="ExtendResultMap">
SELECT t.gb_type_code, t.gb_type_name,
<include refid="Contrast_Column_List"><property name="alias" value="c"/></include>
FROM standard_contrast c
LEFT JOIN standard_type t ON t.id = c.gb_type_id
WHERE 1 = 1 AND c.id = #{id}
</select>
</mapper>
......@@ -15,6 +15,9 @@
<result column="type_id" property="typeId" />
<result column="gb_code" property="gbCode" />
<result column="gb_name" property="gbName" />
</resultMap>
<resultMap id="ExtendResultMap" type="cn.datax.service.data.standard.api.entity.DictEntity" extends="BaseResultMap">
<result column="gb_type_code" property="gbTypeCode" />
<result column="gb_type_name" property="gbTypeName" />
</resultMap>
......@@ -42,7 +45,7 @@
${alias}.remark, ${alias}.type_id, ${alias}.gb_code, ${alias}.gb_name
</sql>
<select id="selectById" resultMap="BaseResultMap">
<select id="selectById" resultMap="ExtendResultMap">
SELECT t.gb_type_code, t.gb_type_name,
<include refid="Dict_Column_List"><property name="alias" value="d"/></include>
FROM standard_dict d
......@@ -50,7 +53,7 @@
WHERE 1 = 1 AND d.id = #{id}
</select>
<select id="selectPage" resultMap="BaseResultMap">
<select id="selectPage" resultMap="ExtendResultMap">
SELECT t.gb_type_code, t.gb_type_name,
<include refid="Dict_Column_List"><property name="alias" value="d"/></include>
FROM standard_dict d
......
import request from '@/utils/request'
export function getDictMapping(id) {
return request({
url: '/data/standard/mappings/' + id,
method: 'get'
})
}
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<data-contrast-list v-if="options.showList" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<data-contrast-add v-if="options.showAdd" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<data-contrast-edit v-if="options.showEdit" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-bottom">
<data-contrast-detail v-if="options.showDetail" :data="options.data" @showCard="showCard" />
</transition>
</div>
</template>
<script>
import DataContrastList from './DataContrastList'
import DataContrastAdd from './DataContrastAdd'
import DataContrastEdit from './DataContrastEdit'
import DataContrastDetail from './DataContrastDetail'
export default {
name: 'DataContrast',
components: { DataContrastList, DataContrastAdd, DataContrastEdit, DataContrastDetail },
data() {
return {
options: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
}
}
},
methods: {
showCard(data) {
Object.assign(this.options, data)
}
}
}
</script>
<style lang="scss" scoped>
</style>
......@@ -36,7 +36,7 @@
import { addContrastDict } from '@/api/standard/contrastdict'
export default {
name: 'DataContrastAdd',
name: 'DictContrastAdd',
props: {
data: {
type: Object,
......
......@@ -35,7 +35,7 @@
import { getContrastDict } from '@/api/standard/contrastdict'
export default {
name: 'DataContrastDetail',
name: 'DictContrastDetail',
props: {
data: {
type: Object,
......
......@@ -36,7 +36,7 @@
import { getContrastDict, updateContrastDict } from '@/api/standard/contrastdict'
export default {
name: 'DataContrastEdit',
name: 'DictContrastEdit',
props: {
data: {
type: Object,
......
......@@ -184,7 +184,7 @@ import { pageContrastDict, delContrastDict } from '@/api/standard/contrastdict'
import FormContrast from './components/FormContrast'
export default {
name: 'DataContrastList',
name: 'DictContrastList',
components: { FormContrast },
data() {
return {
......@@ -245,7 +245,7 @@ export default {
}
},
created() {
this.getDicts('sys_common_status').then(response => {
this.getDicts('data_contrast_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
......
......@@ -34,7 +34,7 @@
</el-select>
</el-form-item>
<el-form-item label="标准类别" prop="gbTypeId">
<el-select v-model="form.gbTypeId" placeholder="请选择标准类别" @change="gbTypeSelectChanged">
<el-select v-model="form.gbTypeId" placeholder="请选择标准类别">
<el-option
v-for="type in gbTypeOptions"
:key="type.id"
......@@ -95,8 +95,6 @@ export default {
columnId: undefined,
columnName: undefined,
gbTypeId: undefined,
gbTypeCode: undefined,
gbTypeName: undefined,
bindGbColumn: undefined
},
rules: {
......@@ -197,13 +195,6 @@ export default {
this.form.columnComment = column.columnComment
this.$forceUpdate()
},
gbTypeSelectChanged(val) {
const gbType = this.gbTypeOptions.find(function(item) {
return item.id === val
})
this.form.gbTypeCode = gbType.gbTypeCode
this.form.gbTypeName = gbType.gbTypeName
},
submitForm() {
this.$refs['form'].validate(valid => {
if (valid) {
......
<template>
<div class="app-container">
DictContrast
<transition name="el-zoom-in-center">
<dict-contrast-list v-if="options.showList" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<dict-contrast-add v-if="options.showAdd" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<dict-contrast-edit v-if="options.showEdit" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-bottom">
<dict-contrast-detail v-if="options.showDetail" :data="options.data" @showCard="showCard" />
</transition>
</div>
</template>
<script>
import DictContrastList from './DictContrastList'
import DictContrastAdd from './DictContrastAdd'
import DictContrastEdit from './DictContrastEdit'
import DictContrastDetail from './DictContrastDetail'
export default {
name: 'DictContrast'
name: 'DictContrast',
components: { DictContrastList, DictContrastAdd, DictContrastEdit, DictContrastDetail },
data() {
return {
options: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
}
}
},
methods: {
showCard(data) {
Object.assign(this.options, data)
}
}
}
</script>
......
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="6">
<el-card class="box-card tree-wrapper" shadow="always">
<div class="body-wrapper">
<el-tree
ref="tree"
:data="treeOptions"
node-key="id"
empty-text="加载中,请稍后"
:props="defaultProps"
default-expand-all
highlight-current
:expand-on-click-node="false"
@node-click="handleNodeClick"
>
<template slot-scope="{ node, data }">
<span class="custom-tree-node">
<span><i v-if="node.level === 1" class="iconfont icon-zuzhi tree-folder" />{{ data.name ? node.label + '(' + data.name + ')' : node.label }}</span>
</span>
</template>
</el-tree>
</div>
</el-card>
</el-col>
<el-col :span="18">
<el-card class="box-card" shadow="always">
<el-row>
<el-col :span="24">
<el-button type="primary" size="mini" @click="handleAuto">自动对照</el-button>
<el-button type="primary" size="mini" @click="handleManual">手动对照</el-button>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-alert
type="success"
:closable="false"
>
<span slot="title">
{{ title }}
</span>
</el-alert>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-alert
type="warning"
:closable="false"
>
<span slot="title">
{{ description }}
</span>
</el-alert>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="9">
<el-table
v-loading="loading"
:data="leftTableDataList"
border
tooltip-effect="dark"
:height="tableHeight"
style="width: 100%; margin: 15px 0;"
>
<el-table-column prop="colCode" label="字典编码" align="center" show-overflow-tooltip />
<el-table-column prop="colName" label="字典名称" align="center" show-overflow-tooltip />
<el-table-column prop="contrastGbCode" label="映射编码" align="center" show-overflow-tooltip />
<el-table-column prop="contrastGbName" label="映射名称" align="center" show-overflow-tooltip />
</el-table>
</el-col>
<el-col :span="9" :offset="6">
<el-table
v-loading="loading"
:data="rightTableDataList"
border
tooltip-effect="dark"
:height="tableHeight"
style="width: 100%; margin: 15px 0;"
>
<el-table-column prop="gbCode" label="标准编码" align="center" show-overflow-tooltip />
<el-table-column prop="gbName" label="标准名称" align="center" show-overflow-tooltip />
</el-table>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { getContrastTree } from '@/api/standard/contrast'
import { getDictMapping } from '@/api/standard/dictmapping'
export default {
name: 'DictContrast',
data() {
return {
tableHeight: document.body.offsetHeight - 310 + 'px',
// 遮罩层
loading: false,
// 左侧对照数据
leftTableDataList: [],
// 右侧标准字典数据
rightTableDataList: [],
// 左侧树
treeOptions: [],
defaultProps: {
children: 'children',
label: 'label'
},
contrastId: undefined,
title: '',
description: ''
}
},
created() {
this.getTree()
},
methods: {
getTree() {
getContrastTree().then(response => {
if (response.success) {
const { data } = response
const tree = {}
tree.label = '对照表'
tree.children = data
this.treeOptions = []
this.treeOptions.push(tree)
}
})
},
/** 节点单击事件 */
handleNodeClick(data, node) {
this.contrastId = undefined
if (node.level === 4) {
this.contrastId = data.id
this.getDictMapping()
}
},
getDictMapping() {
this.loading = true
getDictMapping(this.contrastId).then(response => {
this.loading = false
if (response.success) {
const { data } = response
this.leftTableDataList = data.left
this.rightTableDataList = data.right
this.title = data.title
this.description = data.description
}
})
},
handleAuto() {
console.log(this.contrastId)
},
handleManual() {
console.log(this.contrastId)
}
}
}
</script>
<style lang="scss" scoped>
.right-toolbar {
float: right;
}
.el-card ::v-deep .el-card__body {
height: calc(100vh - 170px);
}
.tree-wrapper {
overflow-y: auto;
.body-wrapper {
margin: -10px;
::v-deep .custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
.tree-folder {
margin-right: 5px;
color: #f6cf07;
}
}
}
}
</style>
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