Leo 2 years ago
parent
commit
ef1f06704d

+ 1 - 1
src/module/datasource/component/DatasourceManage.jsx

@@ -451,7 +451,7 @@ export default function DatasourceManage({ onRef, dataType }) {
         <Space size="middle">
           <Button
             onClick={() => {
-              watchLakeData(record.key)
+              watchLakeData(record.datatable_name)
             }}
             type="link">
             查看

+ 108 - 12
src/module/datasource/component/StepOne.jsx

@@ -1,11 +1,13 @@
 import React, { useState, useEffect } from 'react'
 import { Form, Select, Input, message } from 'antd'
-import { getTableNamesList } from '../services'
+import { getTableNamesList, getAilabList, getLakeTable } from '../services'
 
 export default function StepOne({
   drawDataForm,
   dataSourceList,
   updateTableStruct,
+  updateDrawAilabStruct,
+  updateDrawLakeStruct,
 }) {
   const [datasourceType, setDatasourceType] = useState(null)
 
@@ -13,6 +15,8 @@ export default function StepOne({
 
   const [tableList, setTableList] = useState([])
 
+  const [dsType, setDsType] = useState(null)
+
   // 获取数据源列表
   useEffect(() => {
     if (dataSourceList.length !== 0) {
@@ -31,6 +35,7 @@ export default function StepOne({
   useEffect(() => {
     const ds_id = drawDataForm.getFieldValue('datasource_name')
     const table_name = drawDataForm.getFieldValue('datasource_table')
+    setDsType(drawDataForm.getFieldValue('datasource_type'))
     if (ds_id) {
       const type = dataSourceList.find(item => item.key === ds_id).datasource
       setDatasourceType(type)
@@ -42,7 +47,7 @@ export default function StepOne({
   // 选择数据源
   const selectDatasource = async val => {
     drawDataForm.setFieldValue('datasource_table', null)
-    const type = dataSourceList.find(item => item.key === val).datasource
+    const type = dataSourceList.find(item => item.key === val)?.datasource
     setDatasourceType(type)
     const { data } = await getTableNamesList(val)
     if (data.code === 200) {
@@ -56,10 +61,75 @@ export default function StepOne({
     }
   }
 
+  const selectAilab = async () => {
+    const { data } = await getAilabList()
+    if (data.code === 200) {
+      const list = data.data.map((item, index) => {
+        return {
+          key: index,
+          label: item,
+          value: item,
+        }
+      })
+      setTableList(list)
+    } else {
+      message.error(data.msg)
+    }
+  }
+
+  const selectLake = async () => {
+    const { data } = await getLakeTable()
+    if (data.code === 200) {
+      const list = data.data.map((item, index) => {
+        return {
+          key: index,
+          label: item.table_name,
+          value: item.table_name,
+          table_path: item.table_path,
+        }
+      })
+      setTableList(list)
+    } else {
+      message.error(data.msg)
+    }
+  }
+
   // 选择表
   const selectTable = val => {
-    const ds_id = drawDataForm.getFieldValue('datasource_name')
-    updateTableStruct(ds_id, val)
+    const currentTable = drawDataForm.getFieldValue('datasource_table')
+    switch (dsType) {
+      case 'datasource':
+        const ds_id = drawDataForm.getFieldValue('datasource_name')
+        updateTableStruct(ds_id, val)
+        break
+      case 'datalake':
+        updateDrawLakeStruct(currentTable)
+        drawDataForm.setFieldValue(
+          'reader_path',
+          tableList.find(item => (item.value = currentTable)?.table_path)
+        )
+        break
+      default:
+        updateDrawAilabStruct(currentTable)
+        break
+    }
+  }
+
+  const selectDsType = val => {
+    setDsType(val)
+    switch (val) {
+      case 'datasource':
+        selectDatasource(drawDataForm.getFieldValue('datasource_name'))
+        break
+      case 'datalake':
+        setDatasourceType('hive')
+        selectLake()
+        break
+      default:
+        setDatasourceType('hive')
+        selectAilab()
+        break
+    }
   }
 
   return (
@@ -88,23 +158,49 @@ export default function StepOne({
           delimiter: '',
         }}>
         <Form.Item
-          label="选择数据源"
-          name="datasource_name"
+          label="数据源分类"
+          name="datasource_type"
           rules={[
             {
               required: true,
-              message: '请选择数据源!',
+              message: '请选择数据源分类!',
             },
           ]}>
           <Select
-            showSearch
-            optionFilterProp="label"
             allowClear
-            options={datasources}
-            onSelect={selectDatasource}
-            placeholder="请选择数据源"
+            options={
+              ['1', '2', '3'].includes(sessionStorage.getItem('role'))
+                ? [
+                    { label: '自添加数据源', value: 'datasource' },
+                    { label: 'AIlab', value: 'ailab' },
+                    { label: '数据湖', value: 'datalake' },
+                  ]
+                : [{ label: 'AIlab', value: 'ailab' }]
+            }
+            onSelect={selectDsType}
+            placeholder="请选择数据源分类"
           />
         </Form.Item>
+        {dsType === 'datasource' && (
+          <Form.Item
+            label="选择数据源"
+            name="datasource_name"
+            rules={[
+              {
+                required: true,
+                message: '请选择数据源!',
+              },
+            ]}>
+            <Select
+              showSearch
+              optionFilterProp="label"
+              allowClear
+              options={datasources}
+              onSelect={selectDatasource}
+              placeholder="请选择数据源"
+            />
+          </Form.Item>
+        )}
         <Form.Item
           label="选择表"
           name="datasource_table"

+ 77 - 12
src/module/datasource/component/StepTwo.jsx

@@ -1,6 +1,6 @@
 import React, { useState, useEffect } from 'react'
 import { Form, Select, Input, message, Tooltip } from 'antd'
-import { getTableNamesList } from '../services'
+import { getTableNamesList, getAilabList } from '../services'
 
 const { Option } = Select
 
@@ -8,6 +8,7 @@ export default function LoadFormConfig({
   loadDataForm,
   dataSourceList,
   updateTableStruct,
+  updateLoadAilabStruct,
 }) {
   const [datasourceType, setDatasourceType] = useState(null)
 
@@ -15,6 +16,8 @@ export default function LoadFormConfig({
 
   const [tableList, setTableList] = useState([])
 
+  const [dsType, setDsType] = useState(null)
+
   // 获取数据源列表
   useEffect(() => {
     if (dataSourceList.length !== 0) {
@@ -58,10 +61,47 @@ export default function LoadFormConfig({
     }
   }
 
+  const selectAilab = async () => {
+    const { data } = await getAilabList()
+    if (data.code === 200) {
+      const list = data.data.map((item, index) => {
+        return {
+          key: index,
+          label: item,
+          value: item,
+        }
+      })
+      setTableList(list)
+    } else {
+      message.error(data.msg)
+    }
+  }
+
   // 选择表
   const selectTable = val => {
-    const ds_id = loadDataForm.getFieldValue('datasource_name')
-    updateTableStruct(ds_id, val)
+    const currentTable = loadDataForm.getFieldValue('datasource_table')
+    switch (dsType) {
+      case 'datasource':
+        const ds_id = loadDataForm.getFieldValue('datasource_name')
+        updateTableStruct(ds_id, val)
+        break
+      default:
+        updateLoadAilabStruct(currentTable)
+        break
+    }
+  }
+
+  const selectDsType = val => {
+    setDsType(val)
+    switch (val) {
+      case 'datasource':
+        selectDatasource(loadDataForm.getFieldValue('datasource_name'))
+        break
+      default:
+        setDatasourceType('hive')
+        selectAilab()
+        break
+    }
   }
 
   return (
@@ -72,7 +112,7 @@ export default function LoadFormConfig({
           borderLeft: '3px solid #1890ff',
           paddingLeft: '12px',
         }}>
-        配置加载源
+        配置加载源
       </p>
       <Form
         name="drawForm"
@@ -89,23 +129,48 @@ export default function LoadFormConfig({
           writer_field_delimiter: '',
         }}>
         <Form.Item
-          label="选择数据源"
-          name="datasource_name"
+          label="数据源分类"
+          name="datasource_type"
           rules={[
             {
               required: true,
-              message: '请选择数据源!',
+              message: '请选择数据源分类!',
             },
           ]}>
           <Select
-            showSearch
-            optionFilterProp="label"
-            options={datasources}
-            onSelect={selectDatasource}
-            placeholder="请选择数据源"
             allowClear
+            options={
+              ['1', '2', '3'].includes(sessionStorage.getItem('role'))
+                ? [
+                    { label: '自添加数据源', value: 'datasource' },
+                    { label: 'AIlab', value: 'ailab' },
+                  ]
+                : [{ label: 'AIlab', value: 'ailab' }]
+            }
+            onSelect={selectDsType}
+            placeholder="请选择数据源分类"
           />
         </Form.Item>
+        {dsType === 'datasource' && (
+          <Form.Item
+            label="选择数据源"
+            name="datasource_name"
+            rules={[
+              {
+                required: true,
+                message: '请选择数据源!',
+              },
+            ]}>
+            <Select
+              showSearch
+              optionFilterProp="label"
+              options={datasources}
+              onSelect={selectDatasource}
+              placeholder="请选择数据源"
+              allowClear
+            />
+          </Form.Item>
+        )}
         <Form.Item
           label="选择表"
           name="datasource_table"

+ 65 - 7
src/module/datasource/component/SyncTaskAdd.jsx

@@ -12,6 +12,8 @@ import {
   getTableSchema,
   buildJsonData,
   createJob,
+  ailabSchema,
+  lakeSchema,
 } from '../services'
 import { useNavigate } from 'react-router'
 import moment from 'moment'
@@ -65,12 +67,21 @@ export default function SyncTaskAdd() {
   const updateDrawDataStruct = async (ds_id, table_name) => {
     await updateTableStruct(ds_id, table_name, setDrawDataStruct)
   }
+  const updateDrawAilabStruct = async table_name => {
+    await updateAilabStruct(table_name, setDrawDataStruct)
+  }
+  const updateDrawLakeStruct = async table_name => {
+    await updateLakeStruct(table_name, setDrawDataStruct)
+  }
 
   // 加载源表单表结构
   const [loadDataStruct, setLoadDataStruct] = useState([])
   const updateLoadDataStruct = async (id, table_name) => {
     await updateTableStruct(id, table_name, setLoadDataStruct)
   }
+  const updateLoadAilabStruct = async table_name => {
+    await updateAilabStruct(table_name, setLoadDataStruct)
+  }
 
   // 更新表结构
   const updateTableStruct = async (id, table_name, setFunc) => {
@@ -91,6 +102,42 @@ export default function SyncTaskAdd() {
     }
   }
 
+  const updateAilabStruct = async (table_name, setFunc) => {
+    const { data } = await ailabSchema(table_name)
+    if (data.code === 200) {
+      const tableList = data.data.map(item => {
+        const splitData = item.split(':')
+        return {
+          key: splitData[0],
+          id: splitData[0],
+          field: splitData[1],
+          type: splitData[2],
+        }
+      })
+      setFunc(tableList)
+    } else {
+      message.error('表结构数据加载失败')
+    }
+  }
+
+  const updateLakeStruct = async (table_name, setFunc) => {
+    const { data } = await lakeSchema(table_name)
+    if (data.code === 200) {
+      const tableList = data.data.map(item => {
+        const splitData = item.split(':')
+        return {
+          key: splitData[0],
+          id: splitData[0],
+          field: splitData[1],
+          type: splitData[2],
+        }
+      })
+      setFunc(tableList)
+    } else {
+      message.error('表结构数据加载失败')
+    }
+  }
+
   // 配置提取源表单
   const [drawDataForm] = Form.useForm()
 
@@ -218,6 +265,8 @@ export default function SyncTaskAdd() {
     const writer_datasource_id = writer_form['datasource_name']
     const writer_tables = [writer_form['datasource_table']]
     const writer_filename = writer_form['writer_filename']
+    const reader_type = reader_form['datasource_type']
+    const writer_type = reader_form['datasource_type']
     // 基础固定参数
     const base_params = {
       reader_datasource_id,
@@ -226,14 +275,20 @@ export default function SyncTaskAdd() {
       writer_datasource_id,
       writer_tables,
       writer_columns,
+      reader_type,
+      writer_type,
     }
     // 获取表类型
-    const reader_type = dataSourceList.find(
-      item => item.key === reader_datasource_id
-    ).datasource
-    const writer_type = dataSourceList.find(
-      item => item.key === writer_datasource_id
-    ).datasource
+    const rd_type =
+      reader_type === 'datasource'
+        ? dataSourceList.find(item => item.key === reader_datasource_id)
+            .datasource
+        : 'hive'
+    const wt_type =
+      writer_type === 'datasource'
+        ? dataSourceList.find(item => item.key === writer_datasource_id)
+            .datasource
+        : 'hive'
     // 结构表单参数
     const {
       reader_split_pk,
@@ -254,7 +309,7 @@ export default function SyncTaskAdd() {
       writer_field_delimiter,
     } = writer_form
     // 根据类型区分参数
-    switch (`${reader_type}2${writer_type}`) {
+    switch (`${rd_type}2${wt_type}`) {
       case 'mysql2mysql':
         return {
           ...base_params,
@@ -400,6 +455,8 @@ export default function SyncTaskAdd() {
           drawDataForm={drawDataForm}
           dataSourceList={dataSourceList}
           updateTableStruct={updateDrawDataStruct}
+          updateDrawAilabStruct={updateDrawAilabStruct}
+          updateDrawLakeStruct={updateDrawLakeStruct}
         />
       )}
       {/* 配置加载源 */}
@@ -408,6 +465,7 @@ export default function SyncTaskAdd() {
           loadDataForm={loadDataForm}
           dataSourceList={dataSourceList}
           updateTableStruct={updateLoadDataStruct}
+          updateLoadAilabStruct={updateLoadAilabStruct}
         />
       )}
 

+ 15 - 1
src/module/datasource/page/DatasourceView.jsx

@@ -80,10 +80,12 @@ export default function DatasourceView() {
     datatableForm
       .validateFields()
       .then(async () => {
-        const { database_name, datatable_name } = datatableForm.getFieldValue()
+        const { database_name, datatable_name, datatable_path } =
+          datatableForm.getFieldValue()
         const { data } = await importDatalake({
           database_name,
           table_name: datatable_name,
+          table_path: datatable_path,
         })
         if (data.code === 200) {
           message.success('导入成功')
@@ -131,6 +133,17 @@ export default function DatasourceView() {
           ]}>
           <Input placeholder="输入数据表名称" />
         </FormItem>
+        <FormItem
+          name="datatable_path"
+          label="数据表路径"
+          rules={[
+            {
+              required: true,
+              message: '请输入数据表路径!',
+            },
+          ]}>
+          <Input placeholder="输入数据表路径" />
+        </FormItem>
       </Form>
     </Modal>
   )
@@ -153,6 +166,7 @@ export default function DatasourceView() {
           message.success('创建成功')
           ailabtableForm.resetFields()
           setIsCreateTable(false)
+          updateAilabList()
         } else {
           message.error(data.msg)
         }

+ 1 - 1
src/module/layout/Main.jsx

@@ -183,7 +183,7 @@ const Main = () => {
     sessionStorage.setItem('project_id', option.key)
     const { data } = await getUserRole()
     if (data.code === 200) {
-      sessionStorage.setItem('role', data.data.role_name)
+      sessionStorage.setItem('role', data.data.role_id)
       setCurrentProject(val)
     } else {
       message.error(data.msg)