Commit 56a87d51 by yuwei

项目初始化

parent 221e59bc
...@@ -22,4 +22,16 @@ public class DictMappingController extends BaseController { ...@@ -22,4 +22,16 @@ public class DictMappingController extends BaseController {
Map<String, Object> map = dictMappingService.getDictMapping(id); Map<String, Object> map = dictMappingService.getDictMapping(id);
return R.ok().setData(map); return R.ok().setData(map);
} }
@PostMapping("/auto/{id}")
public R dictAutoMapping(@PathVariable String id) {
dictMappingService.dictAutoMapping(id);
return R.ok();
}
@PostMapping("/manual/{id}")
public R dictManualMapping(@PathVariable String id) {
dictMappingService.dictManualMapping(id);
return R.ok();
}
} }
...@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; ...@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* <p> * <p>
* 字典对照信息表 Mapper 接口 * 字典对照信息表 Mapper 接口
...@@ -20,5 +22,8 @@ import org.apache.ibatis.annotations.Param; ...@@ -20,5 +22,8 @@ import org.apache.ibatis.annotations.Param;
public interface ContrastDictDao extends BaseDao<ContrastDictEntity> { public interface ContrastDictDao extends BaseDao<ContrastDictEntity> {
@Override @Override
List<ContrastDictEntity> selectList(@Param(Constants.WRAPPER) Wrapper<ContrastDictEntity> queryWrapper);
@Override
<E extends IPage<ContrastDictEntity>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<ContrastDictEntity> queryWrapper); <E extends IPage<ContrastDictEntity>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<ContrastDictEntity> queryWrapper);
} }
...@@ -5,4 +5,8 @@ import java.util.Map; ...@@ -5,4 +5,8 @@ import java.util.Map;
public interface DictMappingService { public interface DictMappingService {
Map<String, Object> getDictMapping(String id); Map<String, Object> getDictMapping(String id);
void dictAutoMapping(String id);
void dictManualMapping(String id);
} }
...@@ -13,6 +13,7 @@ import cn.datax.service.data.standard.mapstruct.ContrastDictMapper; ...@@ -13,6 +13,7 @@ import cn.datax.service.data.standard.mapstruct.ContrastDictMapper;
import cn.datax.service.data.standard.mapstruct.DictMapper; import cn.datax.service.data.standard.mapstruct.DictMapper;
import cn.datax.service.data.standard.service.DictMappingService; import cn.datax.service.data.standard.service.DictMappingService;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -20,6 +21,7 @@ import org.springframework.stereotype.Service; ...@@ -20,6 +21,7 @@ import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -40,12 +42,17 @@ public class DictMappingServiceImpl implements DictMappingService { ...@@ -40,12 +42,17 @@ public class DictMappingServiceImpl implements DictMappingService {
@Autowired @Autowired
private DictMapper dictMapper; private DictMapper dictMapper;
private static String BIND_GB_CODE = "gb_code";
private static String BIND_GB_NAME = "gb_name";
@Override @Override
public Map<String, Object> getDictMapping(String id) { public Map<String, Object> getDictMapping(String id) {
ContrastEntity contrastEntity = contrastDao.selectById(id); ContrastEntity contrastEntity = contrastDao.selectById(id);
String contrastId = contrastEntity.getId(); String contrastId = contrastEntity.getId();
String gbTypeId = contrastEntity.getGbTypeId(); String gbTypeId = contrastEntity.getGbTypeId();
List<ContrastDictEntity> contrastDictEntityList = contrastDictDao.selectList(Wrappers.<ContrastDictEntity>lambdaQuery().eq(ContrastDictEntity::getContrastId, contrastId)); QueryWrapper<ContrastDictEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("d.contrast_id", contrastId);
List<ContrastDictEntity> contrastDictEntityList = contrastDictDao.selectList(queryWrapper);
List<ContrastDictVo> contrastDictList = contrastDictEntityList.stream().map(contrastDictMapper::toVO).collect(Collectors.toList()); 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<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()); List<DictVo> dictList = dictEntityList.stream().map(dictMapper::toVO).collect(Collectors.toList());
...@@ -60,4 +67,39 @@ public class DictMappingServiceImpl implements DictMappingService { ...@@ -60,4 +67,39 @@ public class DictMappingServiceImpl implements DictMappingService {
map.put("right", dictList); map.put("right", dictList);
return map; return map;
} }
@Override
public void dictAutoMapping(String id) {
ContrastEntity contrastEntity = contrastDao.selectById(id);
String contrastId = contrastEntity.getId();
String gbTypeId = contrastEntity.getGbTypeId();
String bindGbColumn = contrastEntity.getBindGbColumn();
// 查询未对照数据
QueryWrapper<ContrastDictEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("d.contrast_id", contrastId);
queryWrapper.eq("d.status", DataConstant.TrueOrFalse.FALSE.getKey());
List<ContrastDictEntity> contrastDictEntityList = contrastDictDao.selectList(queryWrapper);
// 查询标准字典数据
List<DictEntity> dictEntityList = dictDao.selectList(Wrappers.<DictEntity>lambdaQuery().eq(DictEntity::getTypeId, gbTypeId).eq(DictEntity::getStatus, DataConstant.TrueOrFalse.TRUE.getKey()));
contrastDictEntityList.stream().forEach(c -> {
dictEntityList.stream().filter(d -> {
if (BIND_GB_CODE.equals(bindGbColumn)) {
return Objects.equals(c.getColCode(), d.getGbCode());
} else {
return Objects.equals(c.getColName(), d.getGbName());
}
}).forEach(s -> {
// 更新对照结果
String contrastGbId = s.getId();
c.setStatus(DataConstant.TrueOrFalse.TRUE.getKey());
c.setContrastGbId(contrastGbId);
contrastDictDao.updateById(c);
});
});
}
@Override
public void dictManualMapping(String id) {
}
} }
...@@ -53,6 +53,17 @@ ...@@ -53,6 +53,17 @@
${alias}.contrast_id, ${alias}.col_code, ${alias}.col_name, ${alias}.contrast_gb_id ${alias}.contrast_id, ${alias}.col_code, ${alias}.col_name, ${alias}.contrast_gb_id
</sql> </sql>
<select id="selectList" resultMap="ExtendResultMap">
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>
<select id="selectPage" resultMap="ExtendResultMap"> <select id="selectPage" resultMap="ExtendResultMap">
SELECT c.source_name, c.table_name, c.column_name, t.gb_type_code, t.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, sd.gb_code AS contrast_gb_code, sd.gb_name AS contrast_gb_name,
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
"echarts": "^4.8.0", "echarts": "^4.8.0",
"element-ui": "2.13.2", "element-ui": "2.13.2",
"good-storage": "^1.1.1", "good-storage": "^1.1.1",
"jsplumb": "^2.14.6",
"normalize.css": "7.0.0", "normalize.css": "7.0.0",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"path-to-regexp": "2.4.0", "path-to-regexp": "2.4.0",
......
...@@ -6,3 +6,10 @@ export function getDictMapping(id) { ...@@ -6,3 +6,10 @@ export function getDictMapping(id) {
method: 'get' method: 'get'
}) })
} }
export function dictAutoMapping(id) {
return request({
url: '/data/standard/mappings/auto/' + id,
method: 'post'
})
}
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
<el-col :span="24"> <el-col :span="24">
<el-button type="primary" size="mini" @click="handleAuto">自动对照</el-button> <el-button type="primary" size="mini" @click="handleAuto">自动对照</el-button>
<el-button type="primary" size="mini" @click="handleManual">手动对照</el-button> <el-button type="primary" size="mini" @click="handleManual">手动对照</el-button>
<el-button type="primary" size="mini">取消对照</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
...@@ -57,34 +58,42 @@ ...@@ -57,34 +58,42 @@
</el-alert> </el-alert>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row id="jsplumbContainer" :gutter="20">
<el-col :span="9"> <el-col :span="9">
<el-table <table id="leftTable">
v-loading="loading" <thead>
:data="leftTableDataList" <tr>
border <th>字典编码</th>
tooltip-effect="dark" <th>字典名称</th>
:height="tableHeight" <th>映射编码</th>
style="width: 100%; margin: 15px 0;" <th>映射名称</th>
> </tr>
<el-table-column prop="colCode" label="字典编码" align="center" show-overflow-tooltip /> </thead>
<el-table-column prop="colName" label="字典名称" align="center" show-overflow-tooltip /> <tbody>
<el-table-column prop="contrastGbCode" label="映射编码" align="center" show-overflow-tooltip /> <tr v-for="(data, index) in leftTableDataList" :key="index" :id="'item_left_' + data.id">
<el-table-column prop="contrastGbName" label="映射名称" align="center" show-overflow-tooltip /> <td>{{ data.colCode }}</td>
</el-table> <td>{{ data.colName }}</td>
<td>{{ data.contrastGbCode }}</td>
<td>{{ data.contrastGbName }}</td>
</tr>
</tbody>
</table>
</el-col> </el-col>
<el-col :span="9" :offset="6"> <el-col :span="9" :offset="6">
<el-table <table id="rightTable">
v-loading="loading" <thead>
:data="rightTableDataList" <tr>
border <th>标准编码</th>
tooltip-effect="dark" <th>标准名称</th>
:height="tableHeight" </tr>
style="width: 100%; margin: 15px 0;" </thead>
> <tbody>
<el-table-column prop="gbCode" label="标准编码" align="center" show-overflow-tooltip /> <tr v-for="(data, index) in rightTableDataList" :key="index" :id="'item_right_' + data.id">
<el-table-column prop="gbName" label="标准名称" align="center" show-overflow-tooltip /> <td>{{ data.gbCode }}</td>
</el-table> <td>{{ data.gbName }}</td>
</tr>
</tbody>
</table>
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
...@@ -95,7 +104,8 @@ ...@@ -95,7 +104,8 @@
<script> <script>
import { getContrastTree } from '@/api/standard/contrast' import { getContrastTree } from '@/api/standard/contrast'
import { getDictMapping } from '@/api/standard/dictmapping' import { getDictMapping, dictAutoMapping } from '@/api/standard/dictmapping'
import { jsPlumb } from 'jsplumb'
export default { export default {
name: 'DictMapping', name: 'DictMapping',
...@@ -116,13 +126,54 @@ export default { ...@@ -116,13 +126,54 @@ export default {
}, },
contrastId: undefined, contrastId: undefined,
title: '', title: '',
description: '' description: '',
jsPlumb: null
} }
}, },
created() { created() {
this.getTree() this.getTree()
}, },
mounted() {
this.jsPlumb = jsPlumb.getInstance({
// 锚点位置;对任何没有声明描点的Endpoint设置锚点,用于source及target节点
Anchor: ['Right', 'Left'],
// 连线的source和target Anchor
Anchors: ['Right', 'Left'],
// 鼠标不能拖动删除线
ConnectionsDetachable: false,
// 删除线的时候节点不删除
DeleteEndpointsOnDetach: false,
// 连线的样式,有四种默认类型:Bezier(贝塞尔曲线),Straight(直线),Flowchart(流程图),State machine(状态机)
Connector: 'Bezier',
// 父级元素id;假如页面元素所在上层不同,最外层父级一定要设置
Container: 'jsplumbContainer'
})
this.$nextTick(() => {
this.initJsPlumb()
})
},
methods: { methods: {
initJsPlumb() {
const _this = this
this.jsPlumb.ready(function() {
// 双击连接线(删除)
_this.jsPlumb.bind('dblclick', function(conn, originalEvent) {
console.log('dblclick', conn)
})
// 连线
_this.jsPlumb.bind('connection', function(evt) {
console.log('connection', evt)
})
// 删除连线
_this.jsPlumb.bind('connectionDetached', function(evt) {
console.log('connectionDetached', evt)
})
// beforeDrop
_this.jsPlumb.bind('beforeDrop', function(evt) {
console.log('beforeDrop', evt)
})
})
},
getTree() { getTree() {
getContrastTree().then(response => { getContrastTree().then(response => {
if (response.success) { if (response.success) {
...@@ -152,11 +203,35 @@ export default { ...@@ -152,11 +203,35 @@ export default {
this.rightTableDataList = data.right this.rightTableDataList = data.right
this.title = data.title this.title = data.title
this.description = data.description this.description = data.description
this.$nextTick(() => {
this.initEndpoint()
})
} }
}) })
}, },
initEndpoint() {
console.log(this.leftTableDataList.length)
this.leftTableDataList.filter(item => item.status === '1').forEach(function(item, index, arr) {
this.jsPlumb.addEndpoint('item_left_' + item.id, {
anchors: ['Right'],
uuid: item.id
})
})
// this.jsPlumb.addEndpoint('item_right', {
// anchors: ['Left'],
// uuid: 'toId'
// })
// const connection = this.jsPlumb.connect({ uuids: ['fromId', 'toId'] })
// // 初始化label
// connection.getOverlay('label-1').setLabel('映射连线')
},
handleAuto() { handleAuto() {
console.log(this.contrastId) dictAutoMapping(this.contrastId).then(response => {
if (response.success) {
this.$message.success('对照成功')
this.getDictMapping()
}
})
}, },
handleManual() { handleManual() {
console.log(this.contrastId) console.log(this.contrastId)
...@@ -189,4 +264,18 @@ export default { ...@@ -189,4 +264,18 @@ export default {
} }
} }
} }
#leftTable, #rightTable {
width: 100%;
margin: 15px 0;
border-collapse: collapse;
tr th {
color: #909399;
font-weight: bold;
}
tr th, tr td {
font-size: 14px;
border: 1px solid #EBEEF5;
padding: 5px 10px;
}
}
</style> </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