Commit 619ddce8 authored by suhuiguang's avatar suhuiguang

1.王珂动态预案调整为mqtt

parent ddd1d79e
......@@ -13,7 +13,7 @@
// websocket 地址
wsURI: {
baseURI: 'ws://172.16.11.40:10600/',
ruleURI: 'ws://172.16.3.77:8083/'
ruleURI: 'ws://172.16.10.85:8083/mqtt'
},
// 外部链接地址
outterURI: {
......
......@@ -62,7 +62,10 @@ export const FscSerUrl = {
statisticsDutyUrl: completePrefix(convertorURI, 'api/view3d/statistics/duty'), //今日值班统计
onlineDayUrl: completePrefix(convertorURI, 'api/view3d/online/date'),//消防安全执行天数
exceptionRegionListUrl: completePrefix(baseURI, 'api/view3d/region/exception/list'),//异常区域查询
listPointsByRegionIdUrl: completePrefix(baseURI, 'api/view3d/point/list/{regionId}') //查询区域下点
listPointsByRegionIdUrl: completePrefix(baseURI, 'api/view3d/point/list/{regionId}'), //查询区域下点
// completePrefix(FscSerUrl.planCloseUrl,`${rUrl}?batchNo=${content.batchNo}&stepCode=${content.stepCode}&=${content.code}&confirm=${confirm}&stepState=${content.stepState}`);
// 关闭预案
planCloseUrl: completePrefix(baseURI, 'api/timeline/fire/exit/?batchNo={batchNo}&stepCode={stepCode}&buttonCode={buttonCode}&confirm={confirm}&stepState={stepState}')
};
export const FasSerUrl = {
......
......@@ -17,6 +17,7 @@ const getToken = () => {
export default {
rulews: completePrefix(ruleURI, 'rule.ws?token={token}'),
mqttUrl: ruleURI,
convertorView3d: completePrefix(convertorView3dURI, '3dViewMessage')
};
......
......@@ -25,3 +25,11 @@ export const ruleAction = (content,confirm) => {
export const ruleRePlayAction = (batchNo) => {
return commonGet(formatUrl(FscSerUrl.ruleRePlayUrl,{ batchNo }));
};
/**
* 关闭预案
*/
export const planCloseAction = (batchNo, stepCode, buttonCode, confirm, stepState) => {
return commonPut(formatUrl(FscSerUrl.planCloseUrl, { batchNo, stepCode, buttonCode, confirm, stepState }));
};
......@@ -2,8 +2,10 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Connect } from 'amos-framework';
import AmosWebSocket from 'amos-websocket';
import { MQTTProvider } from 'amos-mqtt';
import SysWsURL, { completeToken } from './../consts/wsUrlConsts';
import SideControl from './sideControl';
import MessageEvent from './MessageEvent';
import globalMsg from './pagefactory/msgFactory';
import { eventTopics, rulesDataFactory } from './consts';
import LayerPool from './LayerPool';
......@@ -96,10 +98,12 @@ class MaskContent extends Component {
isPermissionControl,
bizPerActionBars,
isInitModel,
isPanoramic
isPanoramic,
hiddenScreenSaver,
trigger
} = this.props;
alarmStarted && this.props.editModelChange(true);
const wsURL = completeToken(SysWsURL.rulews);
const wsURL = SysWsURL.mqttUrl;
const controlAnimation = {
animateName: 'zoom-comb-left',
visible: !planStarted,
......@@ -118,9 +122,15 @@ class MaskContent extends Component {
transitionAppear: true
}
};
const messageEvent ={
hiddenScreenSaver,
trigger
}
return (
<div className="mask-content">
<AmosWebSocket ref={node => this.aws = node} url={wsURL} onMessage={this.handleData} reconnect debug />
<MQTTProvider url={wsURL}>
<MessageEvent {...messageEvent} />
</MQTTProvider>
{ !alarmStarted && sideControlShow && <SideControl multiple={multiple} errorAreaId={errorAreaId} onItemClick={onItemClick} layerConfig={layerConfig} animationProps={controlAnimation} activeAction={activeAction} />}
{ !alarmStarted && isShowActionBar && <SearchPane visible={searchPaneVisible} focusPosition={focusPosition} changeSearchPaneVisible={this.changeSearchPaneVisible} />}
<TopMsg alarmStart={alarmStart} />
......
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import _amosTool, { fastDeepEqual } from 'amos-tool';
import globalMsg from './pagefactory/msgFactory';
import { eventTopics, rulesDataFactory } from './consts';
import { withSubscribeMQTT } from 'amos-mqtt';
let oldData;
/**
* 订阅主题
*/
@withSubscribeMQTT({
topic: '/Amos-autosys/yinan/plan'
})
/**
* 消息组件
*
* @class MessageEvent
* @extends {Basic}
*/
class MessageEvent extends Component {
constructor(props) {
super(props);
this.state = {};
}
/**
* 获取订阅信息并修改
* @param {*} nextProps
*/
componentWillReceiveProps({data}) {
if (data) {
const { msgType, msgContext } = data;
const context = this.props.data ? this.props.data.msgContext : null;
const { hiddenScreenSaver, trigger } = this.props;
if (!fastDeepEqual(msgContext, context)) {
// 去掉全局消息 待规则调整后进行调试
// if (msgType === eventTopics.global_msg) {
// hiddenScreenSaver();
// globalMsg(msgContext);
// return;
// }
trigger(`${eventTopics.MQTT}.${msgType}`, data);
}
}
}
render() {
return (
<div />
);
}
}
MessageEvent.propTypes = {
data: PropTypes.array,
hiddenScreenSaver: PropTypes.func,
trigger: PropTypes.func
};
export default MessageEvent;
......@@ -304,7 +304,7 @@ class View3D extends Component {
}
_bindPubSubEvents = () => {
this.props.subscribe(eventTopics.base3d_view, (topic, data) => {
console.log(`subscribe base3d_view${data}`);
// console.log(topic, data);
if (isControllerEvent(topic)) {
executeView3dCMD(this, topic, data);
} else if (isManualOperate(topic)) {
......@@ -322,169 +322,252 @@ class View3D extends Component {
};
_bindRulesPubSubEvents = () => {
this.props.subscribe(eventTopics.fromws, (topic, content) => {
let data = content.data;
console.log(`消息类型--->${topic}`);
console.log(`data==${JSON.stringify(data)}`);
switch (topic) {
case 'base3d.fromws.mapArea_action1-1': //“极I高端8111换流变A相”所在建筑高亮+报警logo+建筑模型上气泡弹出(极I高端8111换流变A相)
// this.equipmentId = data.equipmentId;
if (data.contingencyRo && data.contingencyRo.fireEquipmentPosition) {
let fireEquipmentPosition = data.contingencyRo.fireEquipmentPosition.split(',');
this.setState({ fireEquipmentPosition });
this.props.subscribe(eventTopics.MQTT, (tyep, data) => {
const { msgType, msgContext, contingency } = data;
console.log(data);
let msgKey;
let msgContent;
let mapKey;
let mapAction;
switch (msgType) {
case 'message': // 消息数据
msgKey = msgContext.type;
switch (msgKey) {
case 'marquee' : //跑马灯消息
this.props.trigger(eventTopics.top_afe_msg, { content: msgContext });
dealTroubleMarkers(this, contingency); //处理设备报警:切换图层到探测器、显示报警的探测器(闪烁-报警,不闪烁-报警解除)--已完成
break;
case 'tips' : //预案头部
this.props.trigger(eventTopics.top_ae_msg, {...contingency, content: msgContext.content});
break;
case 'message' :
break;
case 'event' : // 处理事件
msgContent = msgContext.content;
switch(msgContent) {
case 'stopPlan' :
this.planQuit(); //恢复至预控系统监控初始界面
break;
}
break;
}
this.handleExceptModel('out_except_model');
assembleTroubleView(this, data, this.state.markers);
break;
case 'base3d.fromws.mapArea_action1-2': //镜头切换(旋转+推进)
changeGoodView(this, data);
break;
case 'base3d.fromws.mapArea_action1-3': //沙盘出现人员和报警点之间的轨迹;人员模型气泡弹出(人员名称+当前任务标识)
setMinPictureDisPlay(this, data, 'picture3');
break;
case 'base3d.fromws.mapArea_action1-4': //监控屏“极I高端8111换流变A相”所在建筑显示配套摄像头——极Ⅰ 高端#4 换流变
setTimeout(() => {
equipReleteCameraOpen(this, data);
}, 5000);
break;
case 'base3d.fromws.mapArea_action1-5': //切换为预案执行场景
this.props.trigger(eventTopics.fire_confirm_msg, { data });
tirggerTransTopic(CONSTS.forward, { details: { type: 'prePlan', show: true } });
matchingFireEquipDisPlay(this, data); //3D界面显示着火重点设备配套的消防设施-tb--已完成-已完成
break;
case 'base3d.fromws.mapArea_action1-6': //3D沙盘调整为顶视图
break;
case 'base3d.fromws.mapArea_action1-7': //恢复至预控系统监控初始界面
this.planQuit();
break;
case 'base3d.fromws.topArea_MESSAGE': //消防报警
this.props.trigger(eventTopics.top_afe_msg, { content: data.content });
// this.pauseScreenSaver(); // 暂停屏保
dealTroubleMarkers(this, data); //处理设备报警:切换图层到探测器、显示报警的探测器(闪烁-报警,不闪烁-报警解除)--已完成
break;
case 'base3d.fromws.topArea_CONTINGENCY': //消防报警
data['contingencyPlanId'] = this.state.contingencyPlanId;
this.props.trigger(eventTopics.top_ae_msg, data);
break;
case 'base3d.fromws.recordArea_refresh': //记录区刷新
this.props.trigger(eventTopics.record_view, data);
break;
case 'base3d.fromws.stepArea_overview': //步骤区推数据
this.props.trigger(eventTopics.stepArea_view, content);
break;
case 'base3d.fromws.helpArea_': //辅助区推数据
// batchNo: "76a4dbee-962e-4623-80d1-62effe5c7c72"
// content: "S2和 A2 携带必要器材( 防毒面具、 对讲机、 万能 钥匙) 查看火情, 其向主控室传达现场情况, 立即开展现场 应急处置。"
// contingencyRo: {dateTime: "Aug 14, 2019 6:20:45 PM", batchNo: "76a4dbee-962e-4623-80d1-62effe5c7c72", fireTruckRoute: "[[-60, -14, 95], [-60, -14, 76],[-120, -14, 76],[-120, -14, -65],[-125, -14, -65]]", runstep: false, isDelete: false, …}
// icon: "无"
tirggerPlanTopic(CONSTS.plan_detail, { type: 'helpArea', data });
break;
case 'base3d.fromws.optionArea_': //交互区推数据
this.props.trigger(eventTopics.optionArea_view, data);
this.setState({ contingencyPlanId: data.contingencyPlanId });
break;
case eventTopics.map_bubble:
parseBubbleMarkers(this, content); // 监控屏气泡
break;
case 'base3d.fromws.default_setDetectorAlerm':
// this.pauseScreenSaver(); //暂停屏保
dealTroubleMarkers(this, data); //处理设备报警:切换图层到探测器、显示报警的探测器(闪烁-报警,不闪烁-报警解除)--已完成
break;
case 'base3d.fromws.default_focusing':
assembleTroubleView(this, data, this.state.markers); //场景聚焦到报警设备,冒泡显示重点设备名称-dd-已完成
break;
case 'base3d.fromws.default_Switchtothebest':
// changeGoodView(this, data);//探测器切换到最佳视角-dd--已完成
break;
case 'base3d.fromws.default_showTimeLine':
this.props.trigger(eventTopics.plan_step, {
key: 'broadcast',
batchNo: data.paramObj.batchNo,
type: 'equipment',
equipmentId: data.paramObj.equipmentId
}); //右侧按照时间倒叙显示执行记录数据-shg--已完成
break;
case 'base3d.fromws.default_showcamera':
equipReleteCameraOpen(this, data); //3d显示重点设备配套的摄像头图标及编号--已完成
break;
case 'base3d.fromws.default_showConfirmButton':
this.props.trigger(eventTopics.plan_step, {
key: 'broadcast',
batchNo: data.paramObj.batchNo,
type: 'equipment',
equipmentId: data.paramObj.equipmentId
}); //右侧按照时间倒叙显示,显示确认着火和消除误报按钮,点击按钮弹出确认或者消除确认弹出消息(具体展示内容、调用后台接口url规则返回)-已完成
break;
case 'base3d.fromws.default_contingencyAction8':
fireIconDisplay(this, data); //原来探测器图标替换为着火图标显示-dd-已完成
break;
case 'base3d.fromws.default_contingencyAction9':
this.props.trigger(eventTopics.plan_step, { type: 'powerload', equipmentId: data.paramObj.equipmentId }); //修改右侧菜单下部电源图按钮可用-tb--已完成
break;
case 'base3d.fromws.default_contingencyAction22':
setMinPictureDisPlay(this, data, 'picture3'); //3D界面显示消防车进站行车路线图,点击进入业务屏重点设备详情查看行车路线图详情
this.props.trigger(eventTopics.plan_step, { type: 'route', equipmentId: data.paramObj.equipmentId });
break;
case 'base3d.fromws.default_contingencyAction10':
setMinPictureDisPlay(this, data, 'picture1'); //3D界面着火图表上方显示电源负荷图缩略图,点击进入业务屏重点设备详情查看行车路线图详情
break;
case 'base3d.fromws.default_contingencyAction21':
setMinPictureDisPlay(this, data, 'picture2'); //3D界面显示电缆沟封堵图,点击进入业务屏重点设备详情查看电缆沟封堵图详情
this.props.trigger(eventTopics.plan_step, { type: 'blockage', equipmentId: data.paramObj.equipmentId });
break;
case 'base3d.fromws.default_contingencyAction23':
setMinPictureDisPlay(this, data, 'picture4'); //3D界面显示消防取水图,点击进入业务屏重点设备详情查看消防取水图详情
this.props.trigger(eventTopics.plan_step, { type: 'waterintake', equipmentId: data.paramObj.equipmentId });
break;
case 'base3d.fromws.default_contingencyAction11':
fireCarDisPlay(this, data); //3D界面消防车上弹出气泡,显示消防车责任人及电话-tb-已完成
break;
case 'base3d.fromws.default_contingencyAction12': //fireCarLineDisPlay(this, data);//3D界面显示消防车,绘制消防车到达火灾现场行进路线。-tb--已完成
break;
case 'base3d.fromws.default_contingencyAction13':
matchingFireEquipDisPlay(this, data); //3D界面显示着火重点设备配套的消防设施-tb--已完成-已完成
this.props.trigger(eventTopics.plan_step, { type: 'resource' });
break;
case 'base3d.fromws.default_contingencyAction14':
fireDetailBussiness(this, data); //火灾详情-----------------页面待定
break;
case 'base3d.fromws.default_refreshTimeLine':
case 'base3d.fromws.default_contingencyAction15':
case 'base3d.fromws.default_contingencyAction16':
case 'base3d.fromws.default_contingencyAction17':
case 'base3d.fromws.default_contingencyAction18':
case 'base3d.fromws.default_contingencyAction19':
case 'base3d.fromws.default_contingencyAction20':
case 'base3d.fromws.default_contingencyAction24':
case 'base3d.fromws.default_contingencyAction25':
case 'base3d.fromws.default_contingencyAction26':
case 'base3d.fromws.default_contingencyAction27':
case 'base3d.fromws.default_contingencyAction28':
this.props.trigger(eventTopics.plan_step, {
key: 'broadcast',
batchNo: data.paramObj.batchNo,
type: 'equipment',
equipmentId: data.paramObj.equipmentId
}); //时间轴数据刷新-shg--已完成
case 'maparea': // 三维模型
mapKey = msgContext.key;
mapAction = msgContext.content;
switch(mapKey){
case 'cameraAction':
break;
case 'areaFlashing':
break;
case 'changeColor':
break;
case 'command':
switch(mapAction) {
case 'action1-1':
if (contingency && contingency.fireEquipmentPosition) {
let fireEquipmentPosition = contingency.fireEquipmentPosition.split(',');
this.setState({ fireEquipmentPosition });
}
this.handleExceptModel('out_except_model');
assembleTroubleView(this, contingency, this.state.markers);
break;
case 'action1-2': //镜头切换(旋转+推进)
changeGoodView(this, contingency);
break;
case 'action1-4': //监控屏“极I高端8111换流变A相”所在建筑显示配套摄像头——极Ⅰ 高端#4 换流变
setTimeout(() => {
equipReleteCameraOpen(this, contingency);
}, 5000);
break;
case 'action1-5': //切换为预案执行场景
this.props.trigger(eventTopics.fire_confirm_msg, { contingency });
tirggerTransTopic(CONSTS.forward, { details: { type: 'prePlan', show: true } });
matchingFireEquipDisPlay(this, contingency); //3D界面显示着火重点设备配套的消防设施-tb--已完成-已完成
break;
case 'action1-6': //3D沙盘调整为顶视图
this.disabledCamera();
break;
case 'action1-7': //恢复至预控系统监控初始界面
this.planQuit();
break;
}
break;
}
break;
case 'base3d.fromws.default_contingencyAction31':
initView3d(this, data); //监控屏恢初始状态-tb-已完成
// this.resumeScreenSaver(); 打开屏保
case 'recordarea': // 记录区
this.props.trigger(eventTopics.record_view, contingency);
break;
case 'base3d.fromws.default_contingencyAction29':
removeFireAlarm(this, data); //监控屏解除报警状态-suhg-已完成
case 'helparea': // 智能辅助
tirggerPlanTopic(CONSTS.plan_detail, { type: 'helpArea', data: {...msgContext} });
break;
case 'base3d.fromws.riskSituation_flicker':
console.log('风险触发风险点闪烁~~~~~~~~~~~~~~~~~~~~');
flickerTroubleMarkers(this, data);//风险触发风险点闪烁
case 'optionarea': // 交互
this.props.trigger(eventTopics.optionArea_view, {...msgContext, batchNo: contingency.batchNo});
this.setState({ contingencyPlanId: contingency.contingencyPlanId });
break;
case 'base3d.fromws.riskSituation_colour':
console.log('风险触发风险点颜色改变~~~~~~~~~~~~~~~~~~~~');
flickerTroubleMarkers(this, data);//风险触发风险点闪烁
case 'steparea': // 步骤
this.props.trigger(eventTopics.stepArea_view, msgContext);
break;
default:
console.log(topic,':类型不支持');
}
// switch (msgType) {
// case 'base3d.fromws.mapArea_action1-1': //“极I高端8111换流变A相”所在建筑高亮+报警logo+建筑模型上气泡弹出(极I高端8111换流变A相)
// // this.equipmentId = data.equipmentId;
// if (data.contingencyRo && data.contingencyRo.fireEquipmentPosition) {
// let fireEquipmentPosition = data.contingencyRo.fireEquipmentPosition.split(',');
// this.setState({ fireEquipmentPosition });
// }
// this.handleExceptModel('out_except_model');
// assembleTroubleView(this, data, this.state.markers);
// break;
// case 'base3d.fromws.mapArea_action1-2': //镜头切换(旋转+推进)
// changeGoodView(this, data);
// break;
// case 'base3d.fromws.mapArea_action1-3': //沙盘出现人员和报警点之间的轨迹;人员模型气泡弹出(人员名称+当前任务标识)
// setMinPictureDisPlay(this, data, 'picture3');
// break;
// case 'base3d.fromws.mapArea_action1-4': //监控屏“极I高端8111换流变A相”所在建筑显示配套摄像头——极Ⅰ 高端#4 换流变
// setTimeout(() => {
// equipReleteCameraOpen(this, data);
// }, 5000);
// break;
// case 'base3d.fromws.mapArea_action1-5': //切换为预案执行场景
// this.props.trigger(eventTopics.fire_confirm_msg, { data });
// tirggerTransTopic(CONSTS.forward, { details: { type: 'prePlan', show: true } });
// matchingFireEquipDisPlay(this, data); //3D界面显示着火重点设备配套的消防设施-tb--已完成-已完成
// break;
// case 'base3d.fromws.mapArea_action1-6': //3D沙盘调整为顶视图
// break;
// case 'base3d.fromws.mapArea_action1-7': //恢复至预控系统监控初始界面
// this.planQuit();
// break;
// case 'base3d.fromws.topArea_MESSAGE': //消防报警
// this.props.trigger(eventTopics.top_afe_msg, { content: data.content });
// // this.pauseScreenSaver(); // 暂停屏保
// dealTroubleMarkers(this, data); //处理设备报警:切换图层到探测器、显示报警的探测器(闪烁-报警,不闪烁-报警解除)--已完成
// break;
// case 'base3d.fromws.topArea_CONTINGENCY': //消防报警
// data['contingencyPlanId'] = this.state.contingencyPlanId;
// this.props.trigger(eventTopics.top_ae_msg, data);
// break;
// case 'base3d.fromws.recordArea_refresh': //记录区刷新
// this.props.trigger(eventTopics.record_view, data);
// break;
// case 'base3d.fromws.stepArea_overview': //步骤区推数据
// this.props.trigger(eventTopics.stepArea_view, content);
// break;
// case 'base3d.fromws.helpArea_': //辅助区推数据
// // batchNo: "76a4dbee-962e-4623-80d1-62effe5c7c72"
// // content: "S2和 A2 携带必要器材( 防毒面具、 对讲机、 万能 钥匙) 查看火情, 其向主控室传达现场情况, 立即开展现场 应急处置。"
// // contingencyRo: {dateTime: "Aug 14, 2019 6:20:45 PM", batchNo: "76a4dbee-962e-4623-80d1-62effe5c7c72", fireTruckRoute: "[[-60, -14, 95], [-60, -14, 76],[-120, -14, 76],[-120, -14, -65],[-125, -14, -65]]", runstep: false, isDelete: false, …}
// // icon: "无"
// tirggerPlanTopic(CONSTS.plan_detail, { type: 'helpArea', data });
// break;
// case 'base3d.fromws.optionArea_': //交互区推数据
// this.props.trigger(eventTopics.optionArea_view, data);
// this.setState({ contingencyPlanId: data.contingencyPlanId });
// break;
// case eventTopics.map_bubble:
// parseBubbleMarkers(this, content); // 监控屏气泡
// break;
// case 'base3d.fromws.default_setDetectorAlerm':
// // this.pauseScreenSaver(); //暂停屏保
// dealTroubleMarkers(this, data); //处理设备报警:切换图层到探测器、显示报警的探测器(闪烁-报警,不闪烁-报警解除)--已完成
// break;
// case 'base3d.fromws.default_focusing':
// assembleTroubleView(this, data, this.state.markers); //场景聚焦到报警设备,冒泡显示重点设备名称-dd-已完成
// break;
// case 'base3d.fromws.default_Switchtothebest':
// // changeGoodView(this, data);//探测器切换到最佳视角-dd--已完成
// break;
// case 'base3d.fromws.default_showTimeLine':
// this.props.trigger(eventTopics.plan_step, {
// key: 'broadcast',
// batchNo: data.paramObj.batchNo,
// type: 'equipment',
// equipmentId: data.paramObj.equipmentId
// }); //右侧按照时间倒叙显示执行记录数据-shg--已完成
// break;
// case 'base3d.fromws.default_showcamera':
// equipReleteCameraOpen(this, data); //3d显示重点设备配套的摄像头图标及编号--已完成
// break;
// case 'base3d.fromws.default_showConfirmButton':
// this.props.trigger(eventTopics.plan_step, {
// key: 'broadcast',
// batchNo: data.paramObj.batchNo,
// type: 'equipment',
// equipmentId: data.paramObj.equipmentId
// }); //右侧按照时间倒叙显示,显示确认着火和消除误报按钮,点击按钮弹出确认或者消除确认弹出消息(具体展示内容、调用后台接口url规则返回)-已完成
// break;
// case 'base3d.fromws.default_contingencyAction8':
// fireIconDisplay(this, data); //原来探测器图标替换为着火图标显示-dd-已完成
// break;
// case 'base3d.fromws.default_contingencyAction9':
// this.props.trigger(eventTopics.plan_step, { type: 'powerload', equipmentId: data.paramObj.equipmentId }); //修改右侧菜单下部电源图按钮可用-tb--已完成
// break;
// case 'base3d.fromws.default_contingencyAction22':
// setMinPictureDisPlay(this, data, 'picture3'); //3D界面显示消防车进站行车路线图,点击进入业务屏重点设备详情查看行车路线图详情
// this.props.trigger(eventTopics.plan_step, { type: 'route', equipmentId: data.paramObj.equipmentId });
// break;
// case 'base3d.fromws.default_contingencyAction10':
// setMinPictureDisPlay(this, data, 'picture1'); //3D界面着火图表上方显示电源负荷图缩略图,点击进入业务屏重点设备详情查看行车路线图详情
// break;
// case 'base3d.fromws.default_contingencyAction21':
// setMinPictureDisPlay(this, data, 'picture2'); //3D界面显示电缆沟封堵图,点击进入业务屏重点设备详情查看电缆沟封堵图详情
// this.props.trigger(eventTopics.plan_step, { type: 'blockage', equipmentId: data.paramObj.equipmentId });
// break;
// case 'base3d.fromws.default_contingencyAction23':
// setMinPictureDisPlay(this, data, 'picture4'); //3D界面显示消防取水图,点击进入业务屏重点设备详情查看消防取水图详情
// this.props.trigger(eventTopics.plan_step, { type: 'waterintake', equipmentId: data.paramObj.equipmentId });
// break;
// case 'base3d.fromws.default_contingencyAction11':
// fireCarDisPlay(this, data); //3D界面消防车上弹出气泡,显示消防车责任人及电话-tb-已完成
// break;
// case 'base3d.fromws.default_contingencyAction12': //fireCarLineDisPlay(this, data);//3D界面显示消防车,绘制消防车到达火灾现场行进路线。-tb--已完成
// break;
// case 'base3d.fromws.default_contingencyAction13':
// matchingFireEquipDisPlay(this, data); //3D界面显示着火重点设备配套的消防设施-tb--已完成-已完成
// this.props.trigger(eventTopics.plan_step, { type: 'resource' });
// break;
// case 'base3d.fromws.default_contingencyAction14':
// fireDetailBussiness(this, data); //火灾详情-----------------页面待定
// break;
// case 'base3d.fromws.default_refreshTimeLine':
// case 'base3d.fromws.default_contingencyAction15':
// case 'base3d.fromws.default_contingencyAction16':
// case 'base3d.fromws.default_contingencyAction17':
// case 'base3d.fromws.default_contingencyAction18':
// case 'base3d.fromws.default_contingencyAction19':
// case 'base3d.fromws.default_contingencyAction20':
// case 'base3d.fromws.default_contingencyAction24':
// case 'base3d.fromws.default_contingencyAction25':
// case 'base3d.fromws.default_contingencyAction26':
// case 'base3d.fromws.default_contingencyAction27':
// case 'base3d.fromws.default_contingencyAction28':
// this.props.trigger(eventTopics.plan_step, {
// key: 'broadcast',
// batchNo: data.paramObj.batchNo,
// type: 'equipment',
// equipmentId: data.paramObj.equipmentId
// }); //时间轴数据刷新-shg--已完成
// break;
// case 'base3d.fromws.default_contingencyAction31':
// initView3d(this, data); //监控屏恢初始状态-tb-已完成
// // this.resumeScreenSaver(); 打开屏保
// break;
// case 'base3d.fromws.default_contingencyAction29':
// removeFireAlarm(this, data); //监控屏解除报警状态-suhg-已完成
// break;
// case 'base3d.fromws.riskSituation_flicker':
// console.log('风险触发风险点闪烁~~~~~~~~~~~~~~~~~~~~');
// flickerTroubleMarkers(this, data);//风险触发风险点闪烁
// break;
// case 'base3d.fromws.riskSituation_colour':
// console.log('风险触发风险点颜色改变~~~~~~~~~~~~~~~~~~~~');
// flickerTroubleMarkers(this, data);//风险触发风险点闪烁
// break;
// default:
// console.log(message,':类型不支持');
// }
});
};
......@@ -1966,7 +2049,7 @@ View3D.propTypes = {
subscribe: PropTypes.func,
hiddenScreenSaver: PropTypes.func,
onLoadCompleted: PropTypes.func,
alarmStart: PropTypes.func,
// alarmStart: PropTypes.func,
planStart: PropTypes.func,
editModelChange: PropTypes.func,
isPermissionControl: PropTypes.bool,
......
......@@ -36,6 +36,8 @@ export const pointTopicMapping = {
};
export const eventTopics = {
// mqtt 消息前缀
MQTT: 'MQTT',
// 双屏通信主题
transtopic: 'transtopic',
......
......@@ -33,12 +33,13 @@ class AssistCard extends Component{
render() {
const { display, data } = this.state;
let titleStyle = `detailCardTitle-${data.icon}`;
let cls = pointIcon[data.icon] ? data.icon : 'zhuyi';
let titleStyle = `detailCardTitle-${cls}`;
return (
<div className="detailCard">
<div className={titleStyle}>
<Row className="cardRow">
<Col span={24} className="cardCol"><img src={pointIcon[data.icon]} className="precontrol-assist-card-img" /><span title={data.title || ''} className="cardTitleName">{data.title || ''}</span></Col>
<Col span={24} className="cardCol"><img src={pointIcon[data.icon] || pointIcon['zhuyi']} className="precontrol-assist-card-img" /><span title={data.title || ''} className="cardTitleName">{data.title || ''}</span></Col>
</Row>
</div>
<div className={display ? "detailAssistCardContxt" : "detailAssistCardContxt-notDisplay"}>
......
......@@ -116,7 +116,7 @@ class MonitorView extends Component {
}
MonitorView.propTypes = {
planStart: PropTypes.bool,
// planStart: PropTypes.bool,
// fireResourceData: PropTypes.object
};
......
......@@ -11,38 +11,36 @@ class StepView extends Component {
constructor(props) {
super(props);
this.state = {
stepName: '',
nextStepName: '',
step: [],
display: 'none'
};
}
componentDidMount() {
this.props.subscribe(eventTopics.stepArea_view, (topic, content) => {
const { data } = content;
const { stepName, nextStepName } = data;
this.setState({ stepName, nextStepName, display: '' });
const { preStep, step } = content;
this.setState({ preStep, step, display: '' });
});
}
render() {
let { stepName, nextStepName, display } = this.state;
let planEnd = stepName && !nextStepName;
let { display, step } = this.state;
let planEnd = step.length > 1 ? false : true;
return (
<div className="precontrol-step-view" style={{ display }} >
{ !planEnd ?
(
<div style={{ height: '100%' }}>
<Item />
<Item className="previous-step" dot={<img src={require('./../../../assets/convertor/3dview/prePlan/buzhouqu-dangqianbu.png')} alt="" />}><p>{stepName}</p></Item>
<Item className="next-step" dot={<img src={require('./../../../assets/convertor/3dview/prePlan/buzhouqu-xiayibu.png')} alt="" />} >{nextStepName}</Item>
<Item className="previous-step" dot={<img src={require('./../../../assets/convertor/3dview/prePlan/buzhouqu-dangqianbu.png')} alt="" />}><p>{ step[0] && step[0].stepName}</p></Item>
<Item className="next-step" dot={<img src={require('./../../../assets/convertor/3dview/prePlan/buzhouqu-xiayibu.png')} alt="" />} >{step[1] && step[1].stepName}</Item>
</div>
)
:
(
<div style={{ height: '100%' }}>
<Item />
<Item className="previous-step" dot={<img src={require('../../../assets/convertor/3dview/prePlan/buzhouqu-dangqianbu.png')} alt="" />}><p>{stepName}</p></Item>
<Item className="previous-step" dot={<img src={require('../../../assets/convertor/3dview/prePlan/buzhouqu-dangqianbu.png')} alt="" />}><p>{ step[0] && step[0].stepName}</p></Item>
</div>
)
}
......
......@@ -4,7 +4,7 @@ import { Connect, Modal } from 'amos-framework';
import { CONSTS } from './../../../consts/storageConsts';
import { eventTopics } from '../../consts';
import { tirggerTransTopic } from '../../dataProcessor';
import { ruleAction } from './../../../services/ruleService';
import { planCloseAction } from './../../../services/ruleService';
const eventConnect = Connect.eventConnect;
const closeImgPath = require('./../../../assets/convertor/3dview/prePlan/dingbu-tuichu.png');
......@@ -25,9 +25,9 @@ class TopView extends Component {
componentDidMount() {
this.props.subscribe(eventTopics.top_ae_msg, (topic, data) => {
const { content, batchNo, contingencyPlanId } = data;
const { content, batchNo } = data;
this.props.planStart(data);
this.setState( { content, showContent: 'block', batchNo, contingencyPlanId } );
this.setState( { content, showContent: 'block', batchNo } );
let { planStart } = this.props;
this.prepareChangeTimeText(planStart);
});
......@@ -50,13 +50,14 @@ class TopView extends Component {
// 执行删除逻辑
tirggerTransTopic(CONSTS.forward, { details: { type: 'prePlan', show: false } });
_this.props.planQuit();
let content = { batchNo: _this.state.batchNo,
stepCode: 0,
code: 'FIRE_CANCEL',
requestUrl: '/api/timeline/fire',
contingencyPlanId: _this.state.contingencyPlanId,
stepState: 'B' };
ruleAction(content, 'CONFIRM').then(e=>{
// let content = { batchNo: _this.state.batchNo,
// stepCode: 0,
// code: 'FIRE_CANCEL',
// requestUrl: '/api/timeline/fire',
// contingencyPlanId: _this.state.contingencyPlanId,
// stepState: 'B' };
const { batchNo } = _this.state;
planCloseAction(batchNo, 0, 'FIRE_CANCEL', 'CONFIRM', 'B').then(e=>{
});
},
onCancel() {}
......
......@@ -209,7 +209,7 @@ class MonitorView extends Component {
}
MonitorView.propTypes = {
planStart: PropTypes.bool,
// planStarted: PropTypes.bool,
fireResourceData: PropTypes.object
};
......
......@@ -10,7 +10,7 @@ class EmptyPage extends Component {
onOpenButtonList =()=>{
const { openStepCxt,batchNo } = this.props;
batchNo && openStepCxt(batchNo);
openStepCxt();
}
render() {
......
......@@ -46,10 +46,10 @@ class OperateButton extends Component {
registerTimer =()=> {
this.timer && clearTimeout(this.timer);
const { message = {} } = this.props;
let json = message.buttonJson ? JSON.parse(message.buttonJson) : {};
let json = message.button ? JSON.parse(message.button) : {};
let button = json.operate[0] || [];
button.batchNo = message.batchNo;
button.contingencyPlanId = message.contingencyPlanId;
button.contingencyPlanId = message.caseId;
button.stepCode = json.stepCode;
let delayedArry = button.delayed || [];
if (delayedArry.includes(count)) {
......@@ -63,10 +63,10 @@ class OperateButton extends Component {
autoClick = () => {
const { message = {} } = this.props;
let json = message.buttonJson ? JSON.parse(message.buttonJson) : {};
let json = message.button ? JSON.parse(message.button) : {};
let button = json.operate[0] || [];
button.batchNo = message.batchNo;
button.contingencyPlanId = message.contingencyPlanId;
button.contingencyPlanId = message.caseId;
button.stepCode = json.stepCode;
this.props.onAutoClick(button, 'CANCEL_' + button.hide);
}
......@@ -77,11 +77,11 @@ class OperateButton extends Component {
}
renderBtn =(message) =>{
let json = message.buttonJson ? JSON.parse(message.buttonJson) : {};
let json = message.button ? JSON.parse(message.button) : {};
let btnList = json.operate || [];
if (btnList && btnList.length === 1) {
btnList[0].batchNo = message.batchNo;
btnList[0].contingencyPlanId = message.contingencyPlanId;
btnList[0].contingencyPlanId = message.caseId;
btnList[0].stepCode = json.stepCode;
return (<Button
className="operate-button-button"
......@@ -94,7 +94,7 @@ class OperateButton extends Component {
} else if (btnList && btnList.length === 2) {
return (btnList || []).map(btn =>{
btn.batchNo = message.batchNo;
btn.contingencyPlanId = message.contingencyPlanId;
btn.contingencyPlanId = message.caseId;
btn.stepCode = json.stepCode;
return <Button
className="operate-button-button"
......@@ -110,8 +110,8 @@ class OperateButton extends Component {
render() {
const { message = {} } = this.props;
let display = message.hiddPlanButton ? 'none' : '' ;
let url = opeateIcon[message.icon];
let json = message.buttonJson ? JSON.parse(message.buttonJson) : {};
let url = opeateIcon[message.icon] || opeateIcon['jiaohuqu-zhihuiquan'];
let json = message.button ? JSON.parse(message.button) : {};
let btnJsonArry = json.operate || [];
return (
<div className={display ? 'operate-button-display-root' : 'operate-button-root'} onClick={this.onOpenButtonList} style={{ display }} >
......@@ -120,7 +120,7 @@ class OperateButton extends Component {
<div className='operate-button-content'>
<div className="button-name">
{message.actionName}
{btnJsonArry.length > 0 && btnJsonArry[0].hide ? <TimerTool ref={timer =>this[message.contingencyPlanId] = timer} autoClick={() => this.hiddenButtonRoot(message)} delayed={btnJsonArry[0].hide} /> : ''}
{btnJsonArry.length > 0 && btnJsonArry[0].hide ? <TimerTool ref={timer =>this[message.caseId] = timer} autoClick={() => this.hiddenButtonRoot(message)} delayed={btnJsonArry[0].hide} /> : ''}
</div>
<div className="button-desc">{message.tips}</div>
</div>
......
......@@ -15,6 +15,7 @@ const eventConnect = Connect.eventConnect;
const recordType = 'OPERATE';
const confirmState = 'CONFIRM';
let batchNo;
/**
*
......@@ -43,6 +44,10 @@ class ReservePlan extends Component {
}
componentWillUnmount () {
batchNo = null;
}
componentDidMount(){
this.props.subscribe(eventTopics.optionArea_view, (topic, data) => {//按钮接收
this.readyOptionAreaData(data);
......@@ -90,7 +95,7 @@ class ReservePlan extends Component {
});
}
getPlanExeRecord =(batchNo)=>{
getPlanExeRecord =()=>{
batchNo && this.refshTimeLine(batchNo);
}
......@@ -100,10 +105,10 @@ class ReservePlan extends Component {
if (cxtArry.length === 0 ) {
cxtArry.push(data);
} else {
const index = cxtArry.findIndex(item=>item.contingencyPlanId === data.contingencyPlanId);
const index = cxtArry.findIndex(item=>item.caseId === data.contingencyPlanId);
if (index < 0 ) {
newArry = cxtArry.map(item=>{
if ((JSON.parse(item.buttonJson) || {}).stepCode !== (JSON.parse(data.buttonJson) || {}).stepCode) {
if ((JSON.parse(item.button) || {}).stepCode !== (JSON.parse(data.button) || {}).stepCode) {
item.hiddPlanButton = true;
}
return item;
......@@ -139,14 +144,14 @@ class ReservePlan extends Component {
this.setState({ expanded: false });
}
openStepCxt =(batchNo)=>{
this.getPlanExeRecord(batchNo);//查询数据
openStepCxt =()=>{
this.getPlanExeRecord();//查询数据
}
hiddPlanRoot =(content)=>{
const { cxtArry } = this.state;
cxtArry.map(cxt => {
if (cxt.contingencyPlanId === content.contingencyPlanId ) {
if (cxt.caseId === content.contingencyPlanId ) {
cxt.hiddPlanButton = true;
}
return cxt;
......@@ -154,9 +159,9 @@ class ReservePlan extends Component {
let exixtButtonArry = cxtArry.filter(item=>!item.hiddPlanButton);
let lastStep = [];
if (exixtButtonArry.length === 0) {
lastStep = cxtArry.filter(item=>parseInt((JSON.parse(item.buttonJson) || {}).stepCode) === parseInt((JSON.parse(content.buttonJson) || {}).stepCode) - 1 && (JSON.parse(item.buttonJson) || {}).operate[0].hide);//上一步挂起的按钮
lastStep = cxtArry.filter(item=>parseInt((JSON.parse(item.button) || {}).stepCode) === parseInt((JSON.parse(content.button) || {}).stepCode) - 1 && (JSON.parse(item.button) || {}).operate[0].hide);//上一步挂起的按钮
lastStep.length > 0 && cxtArry.forEach(item=>{
if (parseInt((JSON.parse(item.buttonJson) || {}).stepCode) === parseInt((JSON.parse(content.buttonJson) || {}).stepCode) - 1 && (JSON.parse(item.buttonJson) || {}).operate[0].hide){
if (parseInt((JSON.parse(item.button) || {}).stepCode) === parseInt((JSON.parse(content.button) || {}).stepCode) - 1 && (JSON.parse(item.button) || {}).operate[0].hide){
item.hiddPlanButton = false;
}
});
......@@ -168,19 +173,19 @@ class ReservePlan extends Component {
dealCxtArryAfterClick =(content)=>{
const { cxtArry } = this.state;
const index = cxtArry.findIndex(item=>item.contingencyPlanId === content.contingencyPlanId);
const index = cxtArry.findIndex(item=>item.caseId === content.contingencyPlanId);
index > -1 ? cxtArry.splice(index,1) : '';//删除点击过的数据
let exixtButtonArry = cxtArry.filter(item=>!item.hiddPlanButton);
let lastStep = [];
if (parseInt(content.stepCode) === 9) {
if (parseInt(content.stepCode) === 14) {
this.setState({ cxtArry,isShowOver: false, display: 'none' });
} else {
if (cxtArry.length > 0 && exixtButtonArry.length > 0) {
this.setState({ cxtArry,isShowOver: false });
} else if (cxtArry.length > 0 && exixtButtonArry.length === 0) {
lastStep = cxtArry.filter(item=>parseInt((JSON.parse(item.buttonJson) || {}).stepCode) === parseInt(content.stepCode) - 1 && (JSON.parse(item.buttonJson) || {}).operate[0].hide);//上一步挂起的按钮
lastStep = cxtArry.filter(item=>parseInt((JSON.parse(item.button) || {}).stepCode) === parseInt(content.stepCode) - 1 && (JSON.parse(item.button) || {}).operate[0].hide);//上一步挂起的按钮
lastStep.length > 0 && cxtArry.forEach(item=>{
if (parseInt((JSON.parse(item.buttonJson) || {}).stepCode) === parseInt(content.stepCode) - 1 && (JSON.parse(item.buttonJson) || {}).operate[0].hide){
if (parseInt((JSON.parse(item.button) || {}).stepCode) === parseInt(content.stepCode) - 1 && (JSON.parse(item.button) || {}).operate[0].hide){
item.hiddPlanButton = false;
}
});
......@@ -193,7 +198,8 @@ class ReservePlan extends Component {
renderInteractiveZone =(cxtArry)=>{
return cxtArry.map(e=>{
return <OperateButton message={e} key={e.contingencyPlanId} hiddPlanRoot={this.hiddPlanRoot} onButtonClick={this.onButtonClick} onAutoClick={this.onAutoClick} openStepCxt={()=>this.openStepCxt(e.batchNo)} />;
batchNo = e.batchNo;
return <OperateButton message={e} key={e.caseId} hiddPlanRoot={this.hiddPlanRoot} onButtonClick={this.onButtonClick} onAutoClick={this.onAutoClick} openStepCxt={()=>this.openStepCxt(e.batchNo)} />;
});
}
......
......@@ -6,7 +6,7 @@ import { desigerHelperConfig } from './conf';
const typeEum = { picture1: '电源负荷图',picture2: '电缆沟封堵图',picture3: '消防车进站行车路线图',picture4: '消防取水图' };
const parseTroubleMarkers = (instance,content,markers)=> {//处理设备报警:切换图层到探测器、显示报警的探测器(闪烁-报警,不闪烁-报警解除)
const { type, fireEquipmentId: id, equipmentName: title } = content.contingencyRo;//数据结构待定
const { type, fireEquipmentId: id, equipmentName: title } = content;//数据结构待定
const markersArr = markers[type] || [];
if (markersArr.length > 0){
let needUpdate = false;
......@@ -38,14 +38,14 @@ const parseTroubleMarkers = (instance,content,markers)=> {//处ç†è®¾å¤‡æŠ¥è­¦ï¼
};
export const assembleTroubleView = (instance, content, markers)=>{//跳转最佳视角,冒泡显示重点设备名称
if (void 0 === content || void 0 === content.contingencyRo || void 0 === content.contingencyRo.fireEquipmentPosition) {
if (void 0 === content || void 0 === content || void 0 === content.fireEquipmentPosition) {
return;
}
let equipCameraObj = new Object();
equipCameraObj.position = content.contingencyRo.fireEquipmentPosition.split(',');
equipCameraObj.position = content.fireEquipmentPosition.split(',');
// instance.cameraFactory.flyTo(equipCameraObj);
instance.focusPosition(content.contingencyRo.fireEquipmentPosition.split(','));
const { fireEquipmentId, type = 'monitorEquipment', equipmentId, equipmentName } = content.contingencyRo;//数据结构待定
instance.focusPosition(content.fireEquipmentPosition.split(','));
const { fireEquipmentId, type = 'monitorEquipment', equipmentId, equipmentName } = content;//数据结构待定
const markersArr = markers[type] || [];
if (markersArr.length > 0){
let needUpdate = false;
......@@ -77,7 +77,7 @@ export const executorRecord = (instance,content)=>{//å³ä¾§æŒ‰ç…§æ—¶é—´å€’噿˜
};
const dealEquipReleteCameraOpen = (instance,content,markers)=>{//3d显示重点设备配套的摄像头图标及编号
const { type,cameraIds } = content.contingencyRo;//数据结构待定
const { type,cameraIds } = content;//数据结构待定
let arry = cameraIds ? cameraIds.split(',') : [];//摄像头数组
const oldMarkers = instance.state.markers;
const { monitorEquipment = [] } = oldMarkers || {};
......@@ -282,7 +282,7 @@ export const dealTroubleMarkers = (instance, content) => {
let markers = {};
const type = 'monitorEquipment';
hiddenFireTruckRoute(instance);
content.contingencyRo.type = type;
content.type = type;
initView3DAction(type,'',false).then(d => {
markers[type] = d;
parseTroubleMarkers(instance,content,markers);
......@@ -349,7 +349,7 @@ export const flickerTroubleMarkers = (instance, content) => {
export const equipReleteCameraOpen = (instance, content) => {
let markers = {};
let type = 'video';
content.contingencyRo.type = type;
content.type = type;
initView3DAction(type,'',false).then(d => {
markers[type] = d;
dealEquipReleteCameraOpen(instance,content,markers);
......@@ -357,13 +357,13 @@ export const equipReleteCameraOpen = (instance, content) => {
};
export const changeGoodView = (instance, content)=>{
if (void 0 === content || void 0 === content.contingencyRo) {
if (void 0 === content || void 0 === content) {
return;
}
const equipCameraEffect = {};
const defaultPosition = '44.23,395.41,296.57';
const defaultRotation = '-0.93,-0.01,-0.01';
equipCameraEffect.position = (content.contingencyRo.fireEquipmentPosition || defaultPosition).split(',');
equipCameraEffect.position = (content.fireEquipmentPosition || defaultPosition).split(',');
// equipCameraEffect.rotation = (content.contingencyRo.rotation || defaultRotation).split(',');
equipCameraEffect.duration = 5000;
instance.cameraFactory.flyTo(equipCameraEffect);
......@@ -411,7 +411,7 @@ const parseFireTruckMarkers = (instance, content, markers) => {// 3Dç•Œé¢æ¶ˆé˜²
};
const parseMatchFireEquipMarkers = (instance, content, markers) => {// 3D界面显示着火重点设备配套的消防设施
const { equipmentId } = content.contingencyRo;//数据结构待定
const { equipmentId } = content;//数据结构待定
getMatchEquipmentListAction([], equipmentId, -1, -1).then(data => {
let matchEquipIds = [];
data.content.map(item => matchEquipIds.push(item.id));
......
......@@ -42,7 +42,7 @@ class TopMsg extends Component {
<div className="precontrol-top-view" style={{ display: this.state.showContent }}>
<div className="top-view-2">
<div className="text-content-alarm">
{this.state.content}
{this.state.content.content}
</div>
</div>
</div>
......
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