Commit 9fc1bcf8 by zhaochengxiang

模型自动建表

parent ab53a797
...@@ -189,3 +189,15 @@ export function* autocomplete(payload) { ...@@ -189,3 +189,15 @@ export function* autocomplete(payload) {
export function* recommandEnglishWords(payload) { export function* recommandEnglishWords(payload) {
return yield call(datamodelerService.recommandEnglishWords, payload); return yield call(datamodelerService.recommandEnglishWords, payload);
} }
export function* getDatasourcesByEnv(payload) {
return yield call(datamodelerService.getDatasourcesByEnv, payload);
}
export function* getSchemasByDatasourceId(payload) {
return yield call(datamodelerService.getSchemasByDatasourceId, payload);
}
export function* autoCreateTable(payload) {
return yield call(datamodelerService.autoCreateTable, payload);
}
...@@ -144,3 +144,15 @@ export function autocomplete(payload) { ...@@ -144,3 +144,15 @@ export function autocomplete(payload) {
export function recommandEnglishWords(payload) { export function recommandEnglishWords(payload) {
return PostJSON("/datamodeler/easyDataModelerDesign/recommandEnglishWords", payload); return PostJSON("/datamodeler/easyDataModelerDesign/recommandEnglishWords", payload);
} }
export function getDatasourcesByEnv (payload) {
return GetJSON("/metadatarepo/rest/metadata/findByModelAndSys", payload);
}
export function getSchemasByDatasourceId(payload) {
return GetJSON("/metadatarepo/rest/query/getChild", payload);
}
export function autoCreateTable(payload) {
return PostJSON("/metadataharvester/datasource/createTableByDDLList", payload);
}
...@@ -419,21 +419,13 @@ const ImportActionTable = (props) => { ...@@ -419,21 +419,13 @@ const ImportActionTable = (props) => {
if (changedValues.nullable && allValues.partOfPrimaryKey) { if (changedValues.nullable && allValues.partOfPrimaryKey) {
showMessage('info', '主键不允许为空'); showMessage('info', '主键不允许为空');
} }
} else if (changedValues.hasOwnProperty('partOfDistributionKey')) { }
if (changedValues.partOfDistributionKey && !allValues.partOfPrimaryKey) {
showMessage('info', '分布键必须是主键的子集');
}
}
if (allValues.partOfPrimaryKey) { if (allValues.partOfPrimaryKey) {
form.setFieldsValue({ form.setFieldsValue({
nullable: false nullable: false
}); });
} else { }
form.setFieldsValue({
partOfDistributionKey: false
})
}
}; };
......
...@@ -34,7 +34,7 @@ const ResizeableHeaderCell = props => { ...@@ -34,7 +34,7 @@ const ResizeableHeaderCell = props => {
const ModelTable = (props) => { const ModelTable = (props) => {
const { data, onChange, onItemAction, onSelect, catalogId, onSearchInputChange, onModelStateChange, loadingStates, currentModelState, modelStates, view, keyword, onRecatalog } = props; const { data, onChange, onItemAction, onSelect, catalogId, onSearchInputChange, onModelStateChange, loadingStates, currentModelState, modelStates, view, keyword, onRecatalog, onAutoCreateTable } = props;
const [ selectedRowKeys, setSelectedRowKeys ] = useState([]); const [ selectedRowKeys, setSelectedRowKeys ] = useState([]);
const [ columns, setColumns ] = useState([ const [ columns, setColumns ] = useState([
...@@ -71,15 +71,19 @@ const ModelTable = (props) => { ...@@ -71,15 +71,19 @@ const ModelTable = (props) => {
render: (_,record) => { render: (_,record) => {
return ( return (
<Space size='small'> <Space size='small'>
<Tooltip placement='bottom' title={'修改'}> {
<Button icon={<EditOutlined />} size='small' onClick={() => { editItem(record); }} /> record.editable && <Tooltip placement='bottom' title={'修改'}>
</Tooltip> <Button icon={<EditOutlined />} size='small' onClick={() => { editItem(record); }} />
</Tooltip>
}
<Tooltip placement='bottom' title={'详情'}> <Tooltip placement='bottom' title={'详情'}>
<Button icon={<ReconciliationOutlined />} size='small' onClick={() => { detailItem(record); }} /> <Button icon={<ReconciliationOutlined />} size='small' onClick={() => { detailItem(record); }} />
</Tooltip> </Tooltip>
<Tooltip placement='bottom' title={'删除'}> {
<Button icon={<DeleteOutlined />} size='small' onClick={() => { deleteItem(record); }} /> record.editable && <Tooltip placement='bottom' title={'删除'}>
</Tooltip> <Button icon={<DeleteOutlined />} size='small' onClick={() => { deleteItem(record); }} />
</Tooltip>
}
{ {
(record?.state?.supportedActions||[]).length>0 && record?.state?.supportedActions.map((item, index) => { (record?.state?.supportedActions||[]).length>0 && record?.state?.supportedActions.map((item, index) => {
return ( return (
...@@ -92,6 +96,9 @@ const ModelTable = (props) => { ...@@ -92,6 +96,9 @@ const ModelTable = (props) => {
); );
}) })
} }
{
record?.deployable && <Button size='small' onClick={() => { deployAction(record); }} >建表</Button>
}
</Space> </Space>
) )
} }
...@@ -144,8 +151,11 @@ const ModelTable = (props) => { ...@@ -144,8 +151,11 @@ const ModelTable = (props) => {
onItemAction && onItemAction(record.id||'', 'detail'); onItemAction && onItemAction(record.id||'', 'detail');
} }
const stateAction = (record, action) => { const deployAction = (record) => {
onAutoCreateTable && onAutoCreateTable(record);
}
const stateAction = (record, action) => {
modal.confirm({ modal.confirm({
title: '提示!', title: '提示!',
content: `您确定要${action.cnName||''}该模型吗?`, content: `您确定要${action.cnName||''}该模型吗?`,
......
...@@ -14,6 +14,7 @@ import RecatalogModal from './Component/RecatalogModal'; ...@@ -14,6 +14,7 @@ import RecatalogModal from './Component/RecatalogModal';
import { showMessage, showNotifaction } from '../../../util'; import { showMessage, showNotifaction } from '../../../util';
import { dispatch } from '../../../model'; import { dispatch } from '../../../model';
import { Action, CatalogId, ModelerId, Hints } from '../../../util/constant'; import { Action, CatalogId, ModelerId, Hints } from '../../../util/constant';
import { AppContext } from '../../../App';
import './index.less'; import './index.less';
...@@ -44,6 +45,8 @@ class Model extends React.Component { ...@@ -44,6 +45,8 @@ class Model extends React.Component {
modelStates: [], modelStates: [],
currentModelState: '', currentModelState: '',
currentView: '', currentView: '',
exportDDLModalReference: 'exportDDL',
currentModel: {},
} }
} }
...@@ -247,7 +250,7 @@ class Model extends React.Component { ...@@ -247,7 +250,7 @@ class Model extends React.Component {
}); });
this.setState({ exportDDLModalVisible: true, selectModelerNames: _selectModelerNames }); this.setState({ exportDDLModalVisible: true, selectModelerNames: _selectModelerNames, exportDDLModalReference: 'exportDDL' });
} }
onExportErwinBtnClick = () => { onExportErwinBtnClick = () => {
...@@ -306,6 +309,11 @@ class Model extends React.Component { ...@@ -306,6 +309,11 @@ class Model extends React.Component {
this.setState({ recatalogModalVisible: true }); this.setState({ recatalogModalVisible: true });
} }
onAutoCreateTable = (item) => {
this.setState({ exportDDLModalVisible: true, selectModelerNames: [item.name||''], exportDDLModalReference: 'createTable', currentModel: item });
}
onImportExcelVisibleChange = (visible = false, hint = null) => { onImportExcelVisibleChange = (visible = false, hint = null) => {
this.setState({ importExcelVisible: visible }); this.setState({ importExcelVisible: visible });
} }
...@@ -354,10 +362,26 @@ class Model extends React.Component { ...@@ -354,10 +362,26 @@ class Model extends React.Component {
} }
render() { render() {
const { importModalVisible, catalogId, loadingTableData, selectModelerIds, keyword, filterTableData, selectModelerNames, importModalAddMode, exportErwinLoading, exportDDLModalVisible, templateCURDDrawerVisible, wordTemplateModalVisible, constraintDetailDrawerVisible, importWordModalVisible, loadingStates, modelStates, currentModelState, currentView, recatalogModalVisible } = this.state; const { importModalVisible, catalogId, loadingTableData, selectModelerIds, keyword, filterTableData, selectModelerNames, importModalAddMode, exportErwinLoading, exportDDLModalVisible, templateCURDDrawerVisible, wordTemplateModalVisible, constraintDetailDrawerVisible, importWordModalVisible, loadingStates, modelStates, currentModelState, currentView, recatalogModalVisible, exportDDLModalReference, currentModel } = this.state;
const content = ( const content = (
<ModelTable loading={loadingTableData} catalogId={catalogId} data={filterTableData} view={currentView} loadingStates={loadingStates} modelStates={modelStates} currentModelState={currentModelState} keyword={keyword} onChange={this.onTableChange} onSelect={this.onTableSelect} onItemAction={this.onTableItemAction} onModelStateChange={this.onModelStateChange} onSearchInputChange={this.onSearchInputChange} onRecatalog={this.onRecatalogBtnClick} {...this.props} /> <ModelTable
loading={loadingTableData}
catalogId={catalogId}
data={filterTableData}
view={currentView}
loadingStates={loadingStates}
modelStates={modelStates}
currentModelState={currentModelState}
keyword={keyword}
onChange={this.onTableChange}
onSelect={this.onTableSelect}
onItemAction={this.onTableItemAction}
onModelStateChange={this.onModelStateChange}
onSearchInputChange={this.onSearchInputChange}
onRecatalog={this.onRecatalogBtnClick}
onAutoCreateTable={this.onAutoCreateTable}
{...this.props} />
); );
return ( return (
...@@ -446,13 +470,20 @@ class Model extends React.Component { ...@@ -446,13 +470,20 @@ class Model extends React.Component {
onCancel={this.onImportWordModalCancel} onCancel={this.onImportWordModalCancel}
catalogId={catalogId} catalogId={catalogId}
/> />
<AppContext.Consumer>
{
value => <ExportDDLModal
visible={exportDDLModalVisible}
reference={exportDDLModalReference}
ids={(exportDDLModalReference==='exportDDL')?selectModelerIds:[currentModel.id]}
names={selectModelerNames}
env={value?.env}
onCancel={this.onExportDDLModalCancel}
/>
}
</AppContext.Consumer>
<ExportDDLModal
visible={exportDDLModalVisible}
ids={selectModelerIds}
names={selectModelerNames}
onCancel={this.onExportDDLModalCancel}
/>
<RecatalogModal <RecatalogModal
visible={recatalogModalVisible} visible={recatalogModalVisible}
......
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