Commit 528d33ac authored by shaoan123's avatar shaoan123

对接人工智能方案管理接口

parent e45a7f6d
Pipeline #27247 skipped with stages
# PUBLIC_PATH = reactOMS, 默认转发 /cityinterface
PROXY=/Cityinterface:http://192.168.10.150:8777;/Publish:http://192.168.10.150:8777;/Web4:http://192.168.10.150:8777;/CityTemp:http://192.168.10.150:8777
# PROXY=/Cityinterface:http://192.168.10.150:8777;/Publish:http://192.168.10.150:8777;/Web4:http://192.168.10.150:8777;/CityTemp:http://192.168.10.150:8777
PROXY=/Cityinterface:http://192.168.12.121:8082;/Publish:http://192.168.12.121:8082;/Web4:http://192.168.12.121:8082;/CityTemp:http://192.168.12.121:8082
# 可设置第二个代理,test为转发前缀,后面为代理转发的地址
# PROXY2 = test : http://localhost:8006/
......
......@@ -13,6 +13,9 @@
background-color: #ffffff;
color: #000000;
}
.ant-card-body{
padding-bottom: 0 !important;
}
}
.predict{
display: flex;
......@@ -31,4 +34,13 @@
margin-left:1rem;
text-decoration: underline;
width: 8rem;
}
.deviceList{
max-height: 20rem;
overflow-y: scroll;
}
.deleteItem{
position:relative;
right: -100%;
top: -8rem;
}
\ No newline at end of file
import { Space, Table, Button, Popconfirm, notification } from 'antd';
import { Space, Table, Button, Popconfirm, notification, Spin } from 'antd';
import React, { useState, useEffect } from 'react';
import styles from '../policiesIssued.less'
import {
deleteTaskOptions, taskOptionsList, getIotDeviceType, algorithmList, getEquipmentInfo
getIotDeviceType, getPredictInfo, deletePredictOptions
} from '@/services/intelligence/api';
import AddModal from './AddModal'
const VectorData = props => {
......@@ -18,56 +18,51 @@ const VectorData = props => {
const columns = [
{
title: '序号',
dataIndex: 'serviceName',
key: 'serviceName',
align: 'center'
align: 'center',
render: (text, record, index) => (
<Space>
<span>{(index + 1)}</span>
</Space>
)
},
{
title: '方案名称',
dataIndex: 'GISServerIP',
key: 'GISServerIP',
dataIndex: 'PredictName',
key: 'PredictName',
align: 'center'
},
{
title: '算法名称',
dataIndex: 'GISServerPort',
key: 'GISServerPort',
title: '场景名称',
dataIndex: 'SceneName',
key: 'SceneName',
align: 'center'
},
{
title: '设备类型',
dataIndex: 'GISServerProjectName',
key: 'GISServerProjectName',
align: 'center'
},
{
title: '设备编码',
dataIndex: 'publishTime',
key: 'publishTime',
align: 'center'
},
{
title: '指标名称',
dataIndex: 'publishTime',
key: 'publishTime',
dataIndex: 'DeviceType',
key: 'DeviceType',
align: 'center'
},
{
title: '预测间隔',
dataIndex: 'publishTime',
key: 'publishTime',
align: 'center'
align: 'center',
render: (record) => (
<Space>
{record.CycleValue + record.Cycle}
</Space>
)
},
{
title: '首次执行时间',
dataIndex: 'publishTime',
key: 'publishTime',
dataIndex: 'DateFrom',
key: 'DateFrom',
align: 'center'
},
{
title: '描述',
dataIndex: 'publishTime',
key: 'publishTime',
dataIndex: 'Remarks',
key: 'Remarks',
align: 'center'
},
{
......@@ -75,10 +70,18 @@ const VectorData = props => {
align: 'center',
render: (text, record, index) => (
<Space>
<Button
type="primary"
size="small"
onClick={() => {
changeRecord(record);
}}
>
编辑
</Button>
<div onClick={e => e.stopPropagation()}>
<Popconfirm
title="是否删除该矢量数据?"
title="是否删除该方案?"
okText="确认"
cancelText="取消"
onConfirm={() => {
......@@ -97,16 +100,33 @@ const VectorData = props => {
];
const onSubmit = prop => {
setVisible(false);
setFlag(flag+1)
setFlag(flag + 1)
};
const delConfirm = (record) => {
deletePredictOptions(record.ID).then(res => {
if (res.errMsg === '') {
setFlag(flag + 1)
notification.success({
message: '提示',
duration: 3,
description: '删除成功',
});
} else {
notification.error({
message: '提示',
duration: 3,
description: res.errMsg,
});
};
})
}
const handleAdd = () => {
setFormObj({});
setType('add');
setVisible(true);
}
......@@ -115,51 +135,59 @@ const VectorData = props => {
}, [flag]);
// 获取瓦片数据配置数据
const renderTile = () => {
setTreeLoading(true)
const getIotDevice = getIotDeviceType()
const algorithm = algorithmList()
const taskOption = taskOptionsList()
Promise.all([getIotDevice, algorithm, taskOption]).then(res => {
const getPredictList = getPredictInfo()
Promise.all([getIotDevice, getPredictList]).then(res => {
res[0].getMe && res[0].getMe.length && setDeviceType(res[0].getMe)
res[2].getMe && res[2].getMe.length && setTileData(res[2].getMe)
res[1].getMe && res[1].getMe.length && setTileData(res[1].getMe)
setTreeLoading(false)
}).catch(err => {
setTreeLoading(false)
})
};
const changeRecord = (record) => {
setType('edit');
setFormObj(record);
setVisible(true);
}
return (
<>
<div className={styles.tileBtn}>
<Button type="primary" onClick={() => {
handleAdd();
}} >
新增
<Spin tip="loading..." spinning={treeLoading}>
<div className={styles.tileBtn}>
<Button type="primary" onClick={() => {
handleAdd();
}} >
新增
</Button>
</div>
<Table
columns={columns}
dataSource={tileData}
bordered
rowKey="createTime"
scroll={{ y: 400 }}
pagination={{
showTotal: (total, range) =>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
</div>
<Table
columns={columns}
dataSource={tileData}
bordered
rowKey="ID"
scroll={{ y: 700 }}
pagination={{
pageSize: '10',
showTotal: (total, range) =>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
}}
>
</Table>
<AddModal
visible={visible}
onCancel={() => setVisible(false)}
callBackSubmit={onSubmit}
type={type}
deviceType={deviceType}
formObj={formObj}
/>
}}
>
</Table>
<AddModal
visible={visible}
onCancel={() => setVisible(false)}
callBackSubmit={onSubmit}
type={type}
deviceType={deviceType}
formObj={formObj}
/>
</Spin>
</>
)
}
export default VectorData
\ No newline at end of file
import { Space, Table, Button, Popconfirm, notification } from 'antd';
import { Space, Table, Button, Popconfirm, notification ,Spin} from 'antd';
import React, { useState, useEffect } from 'react';
import styles from '../policiesIssued.less'
import {
GetVectorService, deleteVectorService, getSolutionList, updatePublishedMetaData
} from '@/services/webConfig/api';
taskOptionsList, getIotDeviceType, getStrategyInfo, deleteStrategyOptions
} from '@/services/intelligence/api';
import AddModal from './AddModal'
const VectorData = props => {
const [treeLoading, setTreeLoading] = useState(false);// 弹窗显示
const [tileData, setTileData] = useState([]); // table表格数据
const [visible, setVisible] = useState(false); // 弹窗
const [previewVisible, setPreviewVisible] = useState(false); // 预览弹窗
const [flag, setFlag] = useState(0); // 更新list
const [loading, setLoading] = useState([]); // 更新状态
const [type, setType] = useState(''); // 弹窗类型
const [solutionNames, setSolutionNames] = useState('');
const [formObj, setFormObj] = useState({ user: 'admin', password: 'geoserver' });
const [currentMetaData,setCurrentMetaData] = useState(null)
const [tileData, setTileData] = useState([]); // table表格数据
const [visible, setVisible] = useState(false); // 弹窗
const [deviceType, setDeviceType] = useState([]); //设备类型列表
const columns = [
{
title: '序号',
dataIndex: 'serviceName',
key: 'serviceName',
align: 'center'
align: 'center',
render: (text, record, index) => (
<Space>
<span>{(index + 1)}</span>
</Space>
)
},
{
title: '方案名称',
dataIndex: 'GISServerIP',
key: 'GISServerIP',
title: '策略名称',
dataIndex: 'StrategyName',
key: 'StrategyName',
align: 'center'
},
{
title: '方案类型',
dataIndex: 'GISServerPort',
key: 'GISServerPort',
title: '策略类型',
dataIndex: 'StrategyType',
key: 'StrategyType',
align: 'center'
},
{
title: '任务名称',
dataIndex: 'GISServerProjectName',
key: 'GISServerProjectName',
title: '创建时间',
dataIndex: 'CreateTime',
key: 'CreateTime',
align: 'center'
},
{
title: '创建时间',
dataIndex: 'publishTime',
key: 'publishTime',
title: '设备类型',
dataIndex: 'DeviceType',
key: 'DeviceType',
align: 'center'
},
{
title: '描述',
dataIndex: 'publishTime',
key: 'publishTime',
dataIndex: 'StrategyDes',
key: 'StrategyDes',
align: 'center'
},
{
......@@ -58,10 +62,18 @@ const VectorData = props => {
align: 'center',
render: (text, record, index) => (
<Space>
<Button
type="primary"
size="small"
onClick={() => {
changeRecord(record);
}}
>
编辑
</Button>
<div onClick={e => e.stopPropagation()}>
<Popconfirm
title="是否删除该矢量数据?"
title="是否删除该方案?"
okText="确认"
cancelText="取消"
onConfirm={() => {
......@@ -80,50 +92,63 @@ const VectorData = props => {
];
const onSubmit = prop => {
setVisible(false);
setFlag(flag+1)
setFlag(flag + 1)
};
const delConfirm = (record) => {
let query = {
serviceName: record.serviceName,
_version: 9999,
solution: solutionNames
}
deleteVectorService(query).then(res => {
if (res.success) {
deleteStrategyOptions(record.ID).then(res => {
if (res.errMsg==='') {
setFlag(flag + 1)
notification.success({
message: '提示',
duration: 3,
description: '删除元数据成功',
description: '删除成功',
});
} else {
notification.error({
message: '提示',
duration: 3,
description: '删除元数据失败',
description: res.errMsg,
});
};
})
}
const handleAdd = () => {
// setType('add');
// setVisible(true);
setFormObj({});
setType('add');
setVisible(true);
}
useEffect(() => {
renderTile();
}, [flag]);
// 获取瓦片数据配置数据
const renderTile = () => {
setTreeLoading(true)
const getIotDevice = getIotDeviceType()
const getStrategy = getStrategyInfo()
Promise.all([getIotDevice,getStrategy]).then(res => {
console.log('res[3].getMe',res[1].getMe);
res[0].getMe && res[0].getMe.length && setDeviceType(res[0].getMe)
res[1].getMe && res[1].getMe.length && setTileData(res[1].getMe)
setTreeLoading(false)
}).catch(err => {
setTreeLoading(false)
})
};
const changeRecord =(record)=>{
setType('edit');
setFormObj(record);
setVisible(true);
}
return (
<>
<Spin tip="loading..." spinning={treeLoading}>
<div className={styles.tileBtn}>
<Button type="primary" onClick={() => {
handleAdd();
......@@ -135,9 +160,10 @@ const VectorData = props => {
columns={columns}
dataSource={tileData}
bordered
rowKey="createTime"
scroll={{ y: 400 }}
rowKey="ID"
scroll={{ y: 700 }}
pagination={{
pageSize: '10' ,
showTotal: (total, range) =>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
......@@ -149,10 +175,12 @@ const VectorData = props => {
onCancel={() => setVisible(false)}
callBackSubmit={onSubmit}
type={type}
deviceType={deviceType}
formObj={formObj}
solutionNames={solutionNames}
/>
</Spin>
</>
)
}
export default VectorData
\ No newline at end of file
......@@ -87,7 +87,9 @@ const AddModal = props => {
const handleTaskType =(value)=>{
console.log(value,'value');
}
const layout = {
layout: 'horizontal',
labelCol: {
......@@ -128,18 +130,19 @@ const AddModal = props => {
<Input placeholder="请输入任务名称" allowClear />
</Item>
<Item
label="方案类型"
name="type"
label="任务类型"
name="TaskType"
rules={[{ required: true, message: '请选择类型' }]}
>
<Select>
<Select.Option value='水龄预测'>水龄预测</Select.Option>
<Select.Option value='二供泵房'>二供泵房</Select.Option>
<Select onChange={handleTaskType}>
<Select.Option value='预测'>预测</Select.Option>
<Select.Option value='控制'>控制</Select.Option>
<Select.Option value='http'>http</Select.Option>
</Select>
</Item>
<Item
label="方案名称"
name="strategy"
name="AlgorithmName"
>
<Select >
{/* {workList.length ? workList.map((item, index) => { return <Option key={index} value={item.name}>{item.name}</Option> }) : ''} */}
......@@ -157,7 +160,7 @@ const AddModal = props => {
</Item>
<Item
label="描述"
name="dec"
name="Describe"
>
<TextArea placeholder="可输入描述信息" rows={4} allowClear />
</Item>
......
......@@ -18,8 +18,12 @@ const VectorData = props => {
{
title: '序号',
dataIndex: 'index',
key: 'serviceName',
align: 'center'
align: 'center',
render: (text, record, index) => (
<Space>
<span>{(index + 1)}</span>
</Space>
)
},
{
title: '场景名称',
......@@ -47,8 +51,8 @@ const VectorData = props => {
},
{
title: '间隔',
dataIndex: 'publishTime',
key: 'publishTime',
dataIndex: 'Interval',
key: 'Interval',
align: 'center'
},
{
......@@ -68,7 +72,15 @@ const VectorData = props => {
align: 'center',
render: (text, record, index) => (
<Space>
<Button
type="primary"
size="small"
onClick={() => {
changeRecord(record);
}}
>
编辑
</Button>
<div onClick={e => e.stopPropagation()}>
<Popconfirm
title="是否删除该矢量数据?"
......@@ -101,7 +113,7 @@ const VectorData = props => {
_version: 9999,
solution: solutionNames
}
deleteVectorService(query).then(res => {
deleteTaskOptions(query).then(res => {
if (res.success) {
setFlag(flag + 1)
notification.success({
......@@ -118,6 +130,12 @@ const VectorData = props => {
};
})
}
//编辑任务调度
const changeRecord = (record) => {
setType('edit');
setFormObj(record);
setVisible(true);
}
const handleAdd = () => {
setType('add');
setVisible(true);
......@@ -132,8 +150,9 @@ const VectorData = props => {
const algorithm = algorithmList()
const taskOption = taskOptionsList()
Promise.all([getIotDevice, algorithm, taskOption]).then(res => {
console.log('res', res);
res[0].getMe && res[0].getMe.length && setDeviceType(res[0].getMe)
res[2].getMe && res[2].getMe.length && setDeviceType(res[2].getMe)
res[2].getMe && res[2].getMe.length && setTileData(res[2].getMe)
setTreeLoading(false)
}).catch(err => {
setTreeLoading(false)
......@@ -143,35 +162,38 @@ const VectorData = props => {
return (
<>
<div className={styles.tileBtn}>
<Button type="primary" onClick={() => {
handleAdd();
}} >
新增
<div className={styles.container}>
<div className={styles.tileBtn}>
<Button type="primary" onClick={() => {
handleAdd();
}} >
新增
</Button>
</div>
<Table
columns={columns}
dataSource={tileData}
bordered
rowKey="Id"
scroll={{ y: 400 }}
pagination={{
showTotal: (total, range) =>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
}}
>
</Table>
<AddModal
visible={visible}
onCancel={() => setVisible(false)}
callBackSubmit={onSubmit}
type={type}
deviceType={deviceType}
formObj={formObj}
solutionNames={solutionNames}
/>
</div>
<Table
columns={columns}
dataSource={tileData}
bordered
rowKey="createTime"
scroll={{ y: 400 }}
pagination={{
showTotal: (total, range) =>
`第${range[0]}-${range[1]} 条/共 ${total} 条`
}}
>
</Table>
<AddModal
visible={visible}
onCancel={() => setVisible(false)}
callBackSubmit={onSubmit}
type={type}
deviceType={deviceType}
formObj={formObj}
solutionNames={solutionNames}
/>
</>
)
}
......
.container{
width: 100%;
height: 100%;
background-color: #ffffff;
}
.predict{
display: flex;
align-items: flex-end;
......@@ -8,7 +13,7 @@
display: flex;
justify-content: flex-end;
width: 100%;
padding: 0 0 2rem
padding: 2rem 1rem 2rem 0;
}
.corn{
cursor: pointer;
......
......@@ -114,7 +114,6 @@ const TileData = props => {
})
}
const handleAdd = () => {
console.log('baseMap',baseMap);
if(baseMap.length){
setType('add');
setVisible(true);
......
......@@ -20,6 +20,13 @@ export const algorithmList = () =>
export const getEquipmentInfo = (query) =>
get(`${CITY_SERVICE}/IOTPlatform.svc/AcrossTable/GetEquipmentInfo?equipType=${query}`);
//获取指标列表
export const getQutaList = (query) =>
get(`${CITY_SERVICE}/IOTPlatform.svc/AcrossTable/GetQutaList?AcountName=${query.accountName}&&AddrSchemeID=${query.AddrSchemeID}`);
//获取场景列表
export const getSceneNameInfo = () =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetSceneNameInfo`);
//任务添加
export const addTaskOptions = (params) =>
......@@ -32,3 +39,44 @@ export const updateTaskOptions = (params) =>
//任务删除
export const deleteTaskOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/DeleteTaskOptions`, params);
//预测列表
export const getPredictInfo = () =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetPredictInfo`);
//预测新增
export const addPredictOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/AddPredictOptions`, params);
//预测编辑
export const editPredictOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/EditPredictOptions`, params);
//预测删除
export const deletePredictOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/DeletePredictOptions?PredictID=${params}`);
//策略下发列表
export const getStrategyInfo = () =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetStrategyInfo`);
//策略下发增加
export const addStrategyOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/AddStrategyOptions`, params);
//策略下发编辑
export const editStrategyOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/EditStrategyOptions`, params);
//策略下发删除
export const deleteStrategyOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/DeleteStrategyOptions?StrategyId=${params}`);
//获取预测设备
export const getPredictDevice = (params) =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetPredictDevice?DeviceType=${params}`);
//获取预测指标
export const getPredictDevicePoint = (params) =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetPredictDevicePoint?DeviceType=${params.deviceType}&DeviceCode=${params.DeviceCode}`);
\ No newline at end of file
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