Commit ec4dd780 by yuwei

项目初始化

parent eebc6381
......@@ -26,8 +26,6 @@ public class ModelColumnDto implements Serializable {
@ApiModelProperty(value = "主键ID")
@NotBlank(message = "主键ID不能为空", groups = {ValidationGroups.Update.class})
private String id;
@ApiModelProperty(value = "模型表主键")
private String modelId;
@ApiModelProperty(value = "列名称")
@NotBlank(message = "列名称不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String columnName;
......@@ -55,19 +53,14 @@ public class ModelColumnDto implements Serializable {
private String isQuery;
@ApiModelProperty(value = "查询方式(EQ等于、NE不等于、GT大于、GE大于等于、LT小于、LE小于等于、LIKE模糊、BETWEEN范围)")
private String queryType;
@ApiModelProperty(value = "显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件)")
private String htmlType;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "是否绑定数据标准(0否,1是)")
private String isBindDict;
@ApiModelProperty(value = "绑定数据标准类别")
private String bindDictTypeId;
@ApiModelProperty(value = "绑定数据标准字典字段(GB_CODE,GB_NAME)")
private String bindDictColumn;
@ApiModelProperty(value = "显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件)")
private String htmlType;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "状态")
@NotNull(message = "状态不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String status;
@ApiModelProperty(value = "备注")
private String remark;
}
......@@ -33,9 +33,9 @@ public class ModelDto implements Serializable {
@ApiModelProperty(value = "模型名称")
@NotBlank(message = "模型名称不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String modelName;
@ApiModelProperty(value = "模型编码")
@NotBlank(message = "模型编码不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String modelCode;
@ApiModelProperty(value = "逻辑表")
@NotBlank(message = "逻辑表不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String modelLogicTable;
@ApiModelProperty(value = "模型列信息")
@Valid
@NotEmpty(message = "模型列信息不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
......
......@@ -31,14 +31,14 @@ public class ModelEntity extends DataScopeBaseEntity {
private String modelName;
/**
* 模型编码
* 逻辑表
*/
private String modelCode;
private String modelLogicTable;
/**
* 模型数据库
* 物理
*/
private String modelTable;
private String modelPhysicalTable;
@TableField(exist = false)
private List<ModelColumnEntity> modelColumns;
......
......@@ -25,7 +25,7 @@ public class ModelVo implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
private String modelName;
private String modelCode;
private String modelTable;
private String modelLogicTable;
private String modelPhysicalTable;
private List<ModelColumnVo> modelColumns;
}
......@@ -9,12 +9,15 @@ import cn.datax.service.data.masterdata.mapstruct.ModelMapper;
import cn.datax.service.data.masterdata.dao.ModelDao;
import cn.datax.common.base.BaseServiceImpl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
......@@ -42,6 +45,7 @@ public class ModelServiceImpl extends BaseServiceImpl<ModelDao, ModelEntity> imp
@Transactional(rollbackFor = Exception.class)
public ModelEntity saveModel(ModelDto modelDto) {
ModelEntity model = modelMapper.toEntity(modelDto);
model.setModelPhysicalTable("dynamic_" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN));
modelDao.insert(model);
String modelId = model.getId();
List<ModelColumnEntity> modelColumns = model.getModelColumns();
......
......@@ -13,9 +13,11 @@
<result column="update_time" property="updateTime" />
<result column="remark" property="remark" />
<result column="model_name" property="modelName" />
<result column="model_code" property="modelCode" />
<result column="model_table" property="modelTable" />
<result column="model_logic_table" property="modelLogicTable" />
<result column="model_physical_table" property="modelPhysicalTable" />
</resultMap>
<resultMap id="ExtendResultMap" type="cn.datax.service.data.masterdata.api.entity.ModelEntity" extends="BaseResultMap">
<collection property="modelColumns" column="{modelId=id}" select="getModelColumnList"></collection>
</resultMap>
......@@ -29,7 +31,7 @@
update_by,
update_time,
remark,
model_name, model_code, model_table
model_name, model_logic_table, model_physical_table
</sql>
<select id="getModelColumnList" resultType="cn.datax.service.data.masterdata.api.entity.ModelColumnEntity">
......@@ -42,7 +44,7 @@
</if>
</select>
<select id="selectById" resultMap="BaseResultMap">
<select id="selectById" resultMap="ExtendResultMap">
SELECT
<include refid="Base_Column_List"></include>
FROM masterdata_model
......
......@@ -86,7 +86,7 @@ public class MetadataColumnServiceImpl extends BaseServiceImpl<MetadataColumnDao
List<MetadataSourceEntity> sourceList = (List<MetadataSourceEntity>) redisService.get(RedisConstant.METADATA_SOURCE_KEY);
Stream<MetadataSourceEntity> stream = Optional.ofNullable(sourceList).orElseGet(ArrayList::new).stream().filter(s -> DataConstant.EnableState.ENABLE.getKey().equals(s.getStatus()));
if (StrUtil.isNotBlank(metadataColumnQuery.getSourceId())) {
stream.filter(s -> metadataColumnQuery.getSourceId().equals(s.getId()));
stream = stream.filter(s -> metadataColumnQuery.getSourceId().equals(s.getId()));
}
List<MetadataTreeVo> list = stream.map(m -> {
MetadataTreeVo tree = new MetadataTreeVo();
......@@ -105,7 +105,7 @@ public class MetadataColumnServiceImpl extends BaseServiceImpl<MetadataColumnDao
List<MetadataTableEntity> tableList = (List<MetadataTableEntity>) redisService.hget(RedisConstant.METADATA_TABLE_KEY, id);
Stream<MetadataTableEntity> stream = Optional.ofNullable(tableList).orElseGet(ArrayList::new).stream();
if (StrUtil.isNotBlank(tableId)) {
stream.filter(s -> tableId.equals(s.getId()));
stream = stream.filter(s -> tableId.equals(s.getId()));
}
List<MetadataTreeVo> children = stream.map(m -> {
MetadataTreeVo tree = new MetadataTreeVo();
......
import request from '@/utils/request'
export function pageDataModel(data) {
return request({
url: '/data/masterdata/models/page',
method: 'get',
params: data
})
}
export function getDataModel(id) {
return request({
url: '/data/masterdata/models/' + id,
method: 'get'
})
}
export function delDataModel(id) {
return request({
url: '/data/masterdata/models/' + id,
method: 'delete'
})
}
export function delDataModels(ids) {
return request({
url: '/data/masterdata/models/batch/' + ids,
method: 'delete'
})
}
export function addDataModel(data) {
return request({
url: '/data/masterdata/models',
method: 'post',
data: data
})
}
export function updateDataModel(data) {
return request({
url: '/data/masterdata/models/' + data.id,
method: 'put',
data: data
})
}
<template>
<el-card class="box-card" shadow="always">
<div slot="header" class="clearfix">
<span>{{ title }}</span>
<el-button-group style="float: right;">
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button>
</el-button-group>
</div>
<div class="body-wrapper">
<el-tabs v-model="activeName">
<el-tab-pane label="基本信息" name="first">
<el-form ref="form" :model="form" label-width="80px" disabled>
<el-form-item label="模型名称">
<el-input v-model="form.modelName" placeholder="请输入模型名称" />
</el-form-item>
<el-form-item label="逻辑表">
<el-input v-model="form.modelLogicTable" placeholder="请输入逻辑表" />
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in statusOptions"
:key="dict.id"
:label="dict.itemText"
>{{ dict.itemValue }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="字段信息" name="second">
<el-form ref="table" :model="form" size="mini" disabled>
<el-table :data="form.modelColumns" border style="width: 100%; margin: 15px 0;">
<el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column label="列名称">
<template slot-scope="scope">
<el-form-item>
<el-input v-model="scope.row.columnName" clearable placeholder="请输入列名称" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="列描述">
<template slot-scope="scope">
<el-form-item>
<el-input v-model="scope.row.columnComment" clearable placeholder="请输入列描述" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="列类型">
<template slot-scope="scope">
<el-form-item>
<el-input v-model="scope.row.columnType" clearable placeholder="请输入列类型" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="长度" width="70">
<template slot-scope="scope">
<el-form-item>
<el-input-number v-model="scope.row.columnLength" style="width: 50px;" :controls="false" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="小数位" width="70">
<template slot-scope="scope">
<el-form-item>
<el-input-number v-model="scope.row.columnScale" style="width: 50px;" :controls="false" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="主键" align="center" width="55">
<template slot-scope="scope">
<el-form-item>
<el-checkbox v-model="scope.row.isPk" true-label="1" false-label="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="必填" align="center" width="55">
<template slot-scope="scope">
<el-form-item>
<el-checkbox v-model="scope.row.isRequired" true-label="1" false-label="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="插入" align="center" width="55">
<template slot-scope="scope">
<el-form-item>
<el-checkbox v-model="scope.row.isInsert" true-label="1" false-label="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="编辑" align="center" width="55">
<template slot-scope="scope">
<el-form-item>
<el-checkbox v-model="scope.row.isEdit" true-label="1" false-label="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="列表" align="center" width="55">
<template slot-scope="scope">
<el-form-item>
<el-checkbox v-model="scope.row.isList" true-label="1" false-label="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="查询" align="center" width="55">
<template slot-scope="scope">
<el-form-item>
<el-checkbox v-model="scope.row.isQuery" true-label="1" false-label="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="查询方式" width="120">
<template slot-scope="scope">
<el-form-item>
<el-select v-model="scope.row.queryType" clearable placeholder="请选择">
<el-option
v-for="item in queryTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="显示类型" width="120">
<template slot-scope="scope">
<el-form-item>
<el-select v-model="scope.row.htmlType" clearable placeholder="请选择">
<el-option
v-for="item in htmlTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
</el-card>
</template>
<script>
import { getDataModel } from '@/api/masterdata/datamodel'
export default {
name: 'DataModelDetail',
props: {
data: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
title: '数据模型详情',
// 展示切换
showOptions: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
},
// 表单参数
form: {},
// 状态数据字典
statusOptions: [],
activeName: 'first',
queryTypeOptions: [],
htmlTypeOptions: []
}
},
created() {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getDicts('data_query_type').then(response => {
if (response.success) {
this.queryTypeOptions = response.data
}
})
this.getDicts('data_html_type').then(response => {
if (response.success) {
this.htmlTypeOptions = response.data
}
})
},
mounted() {
this.getDataModel(this.data.id)
},
methods: {
showCard() {
this.$emit('showCard', this.showOptions)
},
/** 获取详情 */
getDataModel: function(id) {
getDataModel(id).then(response => {
if (response.success) {
this.form = response.data
}
})
}
}
}
</script>
<style lang="scss" scoped>
.el-card ::v-deep .el-card__body {
height: calc(100vh - 230px);
overflow-y: auto;
}
</style>
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<data-model-list v-if="options.showList" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<data-model-add v-if="options.showAdd" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<data-model-edit v-if="options.showEdit" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-bottom">
<data-model-detail v-if="options.showDetail" :data="options.data" @showCard="showCard" />
</transition>
</div>
</template>
<script>
import DataModelList from './DataModelList'
import DataModelAdd from './DataModelAdd'
import DataModelEdit from './DataModelEdit'
import DataModelDetail from './DataModelDetail'
export default {
name: 'DataModel',
components: { DataModelList, DataModelAdd, DataModelEdit, DataModelDetail },
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>
<template>
<div class="app-container">
Masterdata
</div>
</template>
<script>
export default {
name: 'Masterdata'
}
</script>
<style lang="scss" scoped>
</style>
......@@ -29,7 +29,7 @@
<sql-editor
ref="sqleditor"
:value="sqlText"
style="height: 300px;margin: 20px 0;"
style="height: 300px; margin: 20px 0;"
@changeTextarea="changeTextarea($event)"
/>
</el-col>
......
......@@ -22,7 +22,7 @@ import DataDictEdit from './DataDictEdit'
import DataDictDetail from './DataDictDetail'
export default {
name: 'ChangeRecord',
name: 'DataDict',
components: { DataDictList, DataDictAdd, DataDictEdit, DataDictDetail },
data() {
return {
......
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