Commit 5cbf9408 by lixinming

no message

parent 05ef74bf
No preview for this file type
...@@ -26,6 +26,14 @@ ...@@ -26,6 +26,14 @@
<vehicleAlert>http://10.51.50.203:8000/icv-openapi/v1/vehicle/alert</vehicleAlert> <vehicleAlert>http://10.51.50.203:8000/icv-openapi/v1/vehicle/alert</vehicleAlert>
<!-- 车辆监控视频 --> <!-- 车辆监控视频 -->
<videoPlay>http://10.51.50.203:8000/icv-openapi/v1/video/play</videoPlay> <videoPlay>http://10.51.50.203:8000/icv-openapi/v1/video/play</videoPlay>
<!-- 车辆图片 -->
<videoPicture>http://10.51.50.203:8000/icv-openapi/v1/vehicle/picture</videoPicture>
<!-- 车辆监控视频心跳 -->
<videoBeat>http://10.51.50.203:8000/icv-openapi/v1/video/beat</videoBeat>
<!-- 道路建设数据 -->
<roadConstructionInfo>http://10.51.50.203:8000/icv-openapi/v1/static/roadConstructionInfo</roadConstructionInfo>
<!-- 企业测试车辆列表 -->
<enterpriseVehicleList>http://10.51.50.203:8000/icv-openapi/v1/static/enterpriseVehicleList</enterpriseVehicleList>
</dataCenterInterface> </dataCenterInterface>
<leftView> <leftView>
......
import { dataCenterInterfaceConfig } from "../config/serverConfig";
import { getInterfaceByInterfaceName } from "../data/cronJob";
import { controlGetOnlieCarList } from "../data/interface/wsData"; import { controlGetOnlieCarList } from "../data/interface/wsData";
import { Socket } from "../net/socket_server"; import { Socket } from "../net/socket_server";
import { logError } from "../util/log"; import { logError } from "../util/log";
...@@ -45,25 +47,27 @@ export async function initControlSocketServer(port) { ...@@ -45,25 +47,27 @@ export async function initControlSocketServer(port) {
ws.userType = paramater.role; ws.userType = paramater.role;
if (paramater.role == "view") { if (paramater.role == "view") {
viewPool[userId] = ws; viewPool[userId] = ws;
console.log(`连接成功至:${paramater.pageName}页面`); // console.log(`连接成功至:${paramater.pageName}页面`);
} else { } else {
if (controlWs) console.log("重复连接"); if (controlWs) console.log("重复连接");
controlWs = ws; controlWs = ws;
console.log(`控制端已连接:${userId}`); // console.log(`控制端已连接:${userId}`);
} }
//==============连接成功 //==============连接成功
ws.on('message', function(msg) { ws.on('message', function(msg) {
let {type, pageName, data} = JSON.parse(msg); let {type, pageName, data} = JSON.parse(msg);
if (type == 'heart') { //回应心跳包 if (type == 'heart') { //回应心跳包
ws.send(JSON.stringify({success:true, code:199})); ws.send(JSON.stringify({success:true, code:199}));
return; return;
} }
//接收控制端消息 判断控制端还是展示端 //不接收控制端之外的消息
if (ws.userType != "control") { if (ws.userType != "control") {
return; return;
} }
//过滤器
filter(data);
//下发消息给展示端 //下发消息给展示端
broadcastMsg(data); broadcastMsg(data);
}); });
...@@ -77,7 +81,7 @@ export async function initControlSocketServer(port) { ...@@ -77,7 +81,7 @@ export async function initControlSocketServer(port) {
delete viewPool[userId]; delete viewPool[userId];
} }
console.log("close", userId); // console.log("close", userId);
} }
}); });
...@@ -91,7 +95,61 @@ export async function initControlSocketServer(port) { ...@@ -91,7 +95,61 @@ export async function initControlSocketServer(port) {
//控制端获取小车列表 //控制端获取小车列表
export async function controlGetCarList(req, res) { export async function controlGetCarList(req, res) {
let {enterpriseVehicleList} = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.enterpriseVehicleList, {});
//todo 最后加鉴权 //todo 最后加鉴权
let carList = controlGetOnlieCarList(); let carList = controlGetOnlieCarList();//todo 改这里
res.send({carList}); res.send({carList});
}
//小车详情 点击播放视频
let carVideoQueue = {vin:"", sessionId:"", index:"", isOpen:false};//{sessionId:"", isOpen }
export function updateSessionId(vin, sessionId) {
if (!vin && vin != carVideoQueue.vin) {
console.log("逻辑错误 ");
}
carVideoQueue.sessionId = sessionId;
}
let carHeart;
export async function filter(msg) {
if (msg.pageName == "数据服务平台" ) {
switch (msg.type) {
case "打开监控":
carVideoQueue.isOpen = true;
carVideoQueue.index = msg.index;
carHeart = setInterval( () => {
videoBeat();
}, 120*1000);
break;
case "暂停监控":
carVideoQueue.isOpen = false;
clearInterval(carHeart);
break;
case "继续监控":
if (!carVideoQueue.isOpen) break;
carVideoQueue.isOpen = true;
carHeart = setInterval( () => {
videoBeat();
}, 120*1000);
break;
case "小车详情弹框":
let carId = msg.id;
carVideoQueue.vin = carId;
carVideoQueue.sessionId = "";
carVideoQueue.index = "";
carVideoQueue.isOpen = false;
clearInterval(carHeart);
break;
}
console.log(msg);
}
}
async function videoBeat() {
//心跳
if (!carVideoQueue.vin) clearInterval(carHeart);
await getInterfaceByInterfaceName(dataCenterInterfaceConfig.videoBeat, {vin:carVideoQueue.vin});
} }
\ No newline at end of file
...@@ -32,19 +32,48 @@ export async function getData(req, res) { ...@@ -32,19 +32,48 @@ export async function getData(req, res) {
}); });
onceNode["title"] = splitStr(onceNode["title"]); onceNode["title"] = splitStr(onceNode["title"]);
onceNode["titleImgUrl"] = splitStr(onceNode["titleImgUrl"]); onceNode["titleImgUrl"] = splitStr(onceNode["titleImgUrl"]);
for (let i = 0; i < onceNode["titleImgUrl"].length; i++) {
if (onceNode["titleImgUrl"][i]) onceNode["titleImgUrl"][i] = `/dsj/${onceNode["titleImgUrl"][i]}`;
}
onceNode["popDes"] = splitDesStr(onceNode["popDes"]); onceNode["popDes"] = splitDesStr(onceNode["popDes"]);
result.push(onceNode); result.push(onceNode);
}); });
res.send({"dsjList":result}); res.send({"dsjList":result});
} }
export function dsjNodeList(req, res) {
let excelData:any = get大事记();
let tableData = getListOutData("大事记节点",excelData["大事记节点内容"]);
let ditinctMap = {};
let indexMap = {};
let data = [];
tableData.valueList.forEach(info => {
let txt = info[0];
if (info[3] != "是") return
if (!ditinctMap[txt]) ditinctMap[txt] = 1;
else ditinctMap[txt] += 1;
});
tableData.valueList.forEach(info => {
let txt = info[0];
if (info[3] != "是") return
if (ditinctMap[txt]>1) {
if (!indexMap[txt]) indexMap[txt] = 0;
let str = `${txt}_${indexMap[txt]+1}`
indexMap[txt] += 1;
data.push({txt, id:str});
} else data.push({txt, id:txt});
});
res.send({data});
}
function splitStr(str) { function splitStr(str) {
let splitList = str.split("\r\n"); if (!str) return [];
let splitList = str.indexOf("\r\n") > -1 ? str.split("\r\n") : str.split("\n");
return splitList return splitList
} }
function splitDesStr(str) { function splitDesStr(str) {
let splitList = str.split("\r\n"); let splitList = str.indexOf("\r\n") > -1 ? str.split("\r\n") : str.split("\n");
let list = []; let list = [];
splitList.forEach(info => { splitList.forEach(info => {
if (info) list.push(info); if (info) list.push(info);
......
...@@ -8,7 +8,10 @@ import { getMap } from "../../data/interface/mapInterfaceData"; ...@@ -8,7 +8,10 @@ import { getMap } from "../../data/interface/mapInterfaceData";
import { getOnlieCarCount } from "../../data/interface/wsData"; import { getOnlieCarCount } from "../../data/interface/wsData";
import { getQycs, getQytlzdjs, getYdcs } from "../../data/dataCenterInterface/csfxData"; import { getQycs, getQytlzdjs, getYdcs } from "../../data/dataCenterInterface/csfxData";
import { getInterfaceData, getJrsj } from "../../data/dataCenterInterface/csgkData"; import { getInterfaceData, getJrsj } from "../../data/dataCenterInterface/csgkData";
import { getInterfaceByInterfaceName } from "../../data/cronJob"; import { getCarVideo, getInterfaceByInterfaceName } from "../../data/cronJob";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import { updateSessionId } from "../control";
//云资源 //云资源
export async function getYZY(req, res) { export async function getYZY(req, res) {
...@@ -84,19 +87,25 @@ export async function mapData(req, res) { ...@@ -84,19 +87,25 @@ export async function mapData(req, res) {
let mapInfoData = await getMap(); let mapInfoData = await getMap();
let {cameraData, lidarData, millimeterWaveRadarData, RSUData, SIBOXData} = mapInfoData; let {cameraData, lidarData, millimeterWaveRadarData, RSUData, SIBOXData} = mapInfoData;
let { cameraCount, holographicIntersectionCount, laserRadarCount, mecCount, mmwCount, roadMileage, rsuCount, siboxCount, smartIntersectionCount } = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.roadConstructionInfo, {});
let 基础数据data = { let 基础数据data = {
"摄像头":cameraData.length, "摄像机": cameraCount,
"激光雷达":lidarData.length, "激光雷达":laserRadarCount,
"毫米波雷达":millimeterWaveRadarData.length, "毫米波雷达":mmwCount,
"路侧单元":RSUData.length, "RSU":rsuCount,
"信号灯数据采集器":SIBOXData.length "MEC":mecCount,
"SiBox":siboxCount,
}; };
ret["base"] = getKeyValueNumberOutData("基础数据右", 基础数据data ); ret["base"] = getKeyValueNumberOutData("基础数据右", 基础数据data );
let roadData = { let roadData = {
"已建道路里程":2002, "车路协同建设里程":roadMileage,
"已建路口":102, "智慧路口数":smartIntersectionCount,
"全息路口数":holographicIntersectionCount
}; };
ret["roadBase"] = getKeyValueNumberOutData("基础数据左", roadData ); ret["roadBase"] = getKeyValueNumberOutData("基础数据左", roadData );
...@@ -131,113 +140,8 @@ export async function mapData(req, res) { ...@@ -131,113 +140,8 @@ export async function mapData(req, res) {
res.send(ret); res.send(ret);
} }
/*老的 数据逻辑
export async function getCSGKold(req, res) {
let ret:any = {};
let today = moment().format("YYYYMMDD");
if (today == csgkQueueTime) {
let 今日数据data = {"在线车辆数":`${getOnlieCarCount()}辆`};
csgkQueue["api2"] = getKeyValueNumberOutData("今日数据", 今日数据data);
res.send(csgkQueue);
return;
}
csgkQueueTime = today;
let {测试牌照分布data, result, 今日数据, 今日测试, 今日功能测试} = await getCsgkData();
let 基础数据Info = []; //当前监控的sessionId
result.forEach((info, index) => {
let {key, value} = info;
let {dataNum, dataUnit} = separateDataAndUint(value);
基础数据Info.push({key, value:dataNum, unit:dataUnit, icon:`http://${getImageIp()}:${systemConfig.port}/csgk/${index+1}.png`});
});
ret["api1"] = ({title:"基础数据", dataList: 基础数据Info});
let 今日数据data = {"在线车辆数":`${getOnlieCarCount()}辆`};
ret["api2"] = getKeyValueNumberOutData("今日数据", 今日数据data);
ret["api3"] = getKeyValueNumberOutData("今日测试", 今日测试);
ret["api4"] = getKeyValueNumberOutData("今日功能测试", 今日功能测试);
ret["api5"] = getKeyValueNumberOutData("测试牌照分布", 测试牌照分布data);
let 路侧监控视频data = {"src": appConfig.surveillanceVideo, "type": 'application/x-mpegURL'};
ret["api6"] = ({title:"路侧监控视频", dataList: 路侧监控视频data});
csgkQueue = JSON.parse(JSON.stringify(ret));
res.send(ret);
}
//测试分析
export async function getCSFXold(req, res) {
let ret:any = {};
let today = moment().format("YYYYMMDD");
if (today == csfxQueueTime) {
res.send(csfxQueue);
return;
}
csfxQueueTime = today;
getDetachmentRatio().then((data) => {
let 企业脱离自动驾驶比率data = data;
企业脱离自动驾驶比率data.forEach( item => {
let frequency = separateDataAndUint(item.次数).dataNum;
let kilometer = separateDataAndUint(item.里程).dataNum;
let ratio = Math.ceil(frequency/kilometer*100);
if (ratio > 100) ratio = 100;
item["比率"] = ratio;
})
企业脱离自动驾驶比率data.sort((a, b) => {
return b.比率 - a.比率;
})
let 企业脱离自动驾驶比率Top10 = 企业脱离自动驾驶比率data.slice(0, 10);
let 企业名称data = [];
let 次数data = [];
let 里程data = [];
let 比率data = [];
企业脱离自动驾驶比率Top10.forEach( info => {
let {企业名称, 次数, 里程, 比率} = info;
企业名称data.push(企业名称);
次数data.push(次数);
里程data.push(里程);
比率data.push(比率 + "%");
})
let 企业测试自动驾驶比率Info = [
{key:"企业名称", values: 企业名称data},
{key:"次数", values: 次数data},
{key:"里程", values: 里程data},
{key:"比率", values: 比率data},
];
ret["api5"] = getListOutData("企业脱离自动驾驶比率", 企业测试自动驾驶比率Info);
});
let {testMileage, functionTestMileage, testMileageEnterprise, functionTestMileageEnterprise} = await getTestAnalysis();
let 月度测试里程分布data = {测试: {unit:'km', dataInfo: testMileage}, 功能测试: {unit:'km', dataInfo: functionTestMileage}};
ret["api1"] = getChartOutData("月度测试里程分布", 月度测试里程分布data);
let {月度测试时长data, 企业测试时长data} = await getTestTotalTime();
let {testTime, functionTestTime} = 月度测试时长data;
let 月度测试时长分布data = {测试: {unit:'h', dataInfo: testTime}, 功能测试: {unit:'h', dataInfo: functionTestTime}};
ret["api2"] = getChartOutData("月度测试时长分布", 月度测试时长分布data);
let 企业测试里程分布data = {测试: {unit:'km', dataInfo: testMileageEnterprise}, 功能测试: {unit:'km', dataInfo: functionTestMileageEnterprise}};
ret["api3"] = getChartOutData("企业测试里程分布", 企业测试里程分布data);
let {testTimeEnterprise, functionTestTimeEnterprise} = 企业测试时长data;
let 企业测试时长分布data = {测试: {unit:'h', dataInfo: testTimeEnterprise}, 功能测试: {unit:'h', dataInfo: functionTestTimeEnterprise}};
ret["api4"] = getChartOutData("企业测试时长分布", 企业测试时长分布data);
csfxQueue = JSON.parse(JSON.stringify(ret));
res.send(ret);
}
*/
//小车详情 //小车详情
export async function carInfo(req, res) { export async function carInfo(req, res) {
...@@ -245,7 +149,7 @@ export async function carInfo(req, res) { ...@@ -245,7 +149,7 @@ export async function carInfo(req, res) {
if ( !carId) { if ( !carId) {
//参数错误 throw new BizError(ERRORENUM.参数错误);
} }
let carInfo = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.vehicleInfo, {vin:carId}); let carInfo = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.vehicleInfo, {vin:carId});
...@@ -313,26 +217,37 @@ export async function carInfo(req, res) { ...@@ -313,26 +217,37 @@ export async function carInfo(req, res) {
dataList:车辆违规列表 dataList:车辆违规列表
} }
//测试车辆 //测试车辆监控地址
let testVideoData = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.videoPlay, {vin:carId}); let testVideoData:any = await getCarVideo(dataCenterInterfaceConfig.videoPlay, {vin:carId});
//测试车辆监控图片封面
let videoPictureData:any = await getCarVideo(dataCenterInterfaceConfig.videoPicture, {vin:carId});
let isNull = false
let 监控视频列表 = [];
if (testVideoData && videoPictureData) {
let map = {};
videoPictureData.vehiclePhotoList.forEach(info => {
let { photo, photoChannel } = info;
map[photoChannel] = photo;
});
let {sessionId, rtmpAddresss} = testVideoData;
rtmpAddresss.forEach(info => {
let { channelNo, address } = info;
监控视频列表.push({
video:address,
img:map[channelNo],
type: 'application/x-mpegURL'
});
});
updateSessionId(carId, sessionId);
} else isNull = true;
ret["csclsp"] = { ret["csclsp"] = {
title:"测试车辆视频", title:"测试车辆视频",
dataList: [ dataList: 监控视频列表,
{img:"http://1safas.png", video:"http://10.51.50.53:8278/live/13060200882000000001@31011402601318800184@34020000001320000001.m3u8?vhost=bduv0utmss4c3nzidjn.a.e-web.com.cn"}, isNull
{img:"http://1sdfsd.png", video:"http://10.51.50.53:8278/live/13060200882000000001@31011402601318800184@34020000001320000001.m3u8?vhost=bduv0utmss4c3nzidjn.a.e-web.com.cn"},
{img:"http://1dsfasdf.png", video:"http://10.51.50.53:8278/live/13060200882000000001@31011402601318800184@34020000001320000001.m3u8?vhost=bduv0utmss4c3nzidjn.a.e-web.com.cn"}
]
} }
res.send(ret); res.send(ret);
} }
//获取小车列表接口
export async function getCarList(req, res) {
let carList = [{}];
res.send({carList});
}
\ No newline at end of file
...@@ -7,9 +7,11 @@ let connectionPool = {}; ...@@ -7,9 +7,11 @@ let connectionPool = {};
//广播消息 //广播消息
export function broadcastMsg(data) { export function broadcastMsg(data) {
data.show = true;
for (let key in connectionPool) { for (let key in connectionPool) {
let result = {code:200, success:true, data}; let result = {code:200, success:true, data};
try { try {
if (data.vin == "LZFH18T19LD019241") console.log(data.lat + "======"+ data.lng)
connectionPool[key].send(JSON.stringify(result)); connectionPool[key].send(JSON.stringify(result));
} catch(err) { } catch(err) {
logError(`广播消息失败: ${err}`); logError(`广播消息失败: ${err}`);
...@@ -44,7 +46,7 @@ export async function initSocketServer(port) { ...@@ -44,7 +46,7 @@ export async function initSocketServer(port) {
}); });
let {initList, count} = getDpData(); let {initList, count} = getDpData();
console.log(`前端连接本服务成功 => userId:${ip}, 发送初始化车辆:${count} 辆`); // console.log(`前端连接本服务成功 => userId:${ip}, 发送初始化车辆:${count} 辆`);
initList.forEach(info => { initList.forEach(info => {
ws.send(JSON.stringify({code:200, success:true, data:info})); ws.send(JSON.stringify({code:200, success:true, data:info}));
}); });
......
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_RSU发送量 } from "../data/analysisExcelData";
//弃用
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_RSU发送量();
ret["api1"] = getListOutData("RSU", excelData.RSU );
res.send(ret);
}
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_车辆测试总览 } from "../data/analysisExcelData";
//
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_车辆测试总览();
ret["api1"] = getChartOutData("每月测试里程和时长分布", excelData.每月测试里程和时长分布 );
ret["api2"] = getKeyValueNumberOutData("各企业违规次数", excelData.各企业违规次数 );
ret["api3"] = getKeyValueNumberOutData("企业脱离自动驾驶比率", excelData.企业脱离自动驾驶比率 );
ret["api4"] = getListOutData("测试车辆列表", excelData.测试车辆列表 );
res.send(ret);
}
import moment = require("moment");
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_企业测试分析 } from "../data/analysisExcelData";
//企业测试
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_企业测试分析();
ret["api1"] = getKeyValueNumberOutData("企业测试分析", excelData.企业测试分析 );
ret["api2"] = getChartOutData("各企业测试里程和时长分析", excelData.各企业测试里程和时长分析 );
ret["api3"] = getKeyValueNumberOutData("功能测试总和", excelData.功能测试总和 );
ret["api4"] = getChartOutData("各企业功能测试里程碑和时长分析", excelData.各企业功能测试里程碑和时长分析 );
res.send(ret);
}
export function getInterfaceData(req, res) {
let ret:any = {};
//月度测试
let {newDateArr, whereDateArr} = getPreMonthDay(12);
let mileageInfo;
let timeInfo;
let dataArr;
for( let i = 0; i < 12; i++) {
dataArr = newDateArr[i];
let yearDate = whereDateArr[i]; //2207
let st = yearDate + '01';
let et = yearDate + '31';
mileageInfo = getmileageInfo(1, st, et, yearDate); //企业日里程
}
let 月度测试里程分布Data = {测试: {unit:'km', dataInfo: mileageInfo}, 功能测试: {unit:'km', dataInfo: timeInfo}}
ret["api5"] = getChartOutData("月度测试里程分布", 月度测试里程分布Data);
//企业测试
let corporateDayMileage:any = `http://10.51.50.136:8090/sql/execute?index=1&st=220701&et=220731`;
let corporateDayMileageData = corporateDayMileage.result;
let enterpriseData;//企业里程
let enterpriseInfo;
let mileageData;
corporateDayMileageData.forEach( element => {
let {time_day, enterprise, total_mileage} = element; //日 企业 总里程
mileageData += total_mileage;
enterpriseInfo = {key: enterprise, value: mileageData};
})
enterpriseData.push(enterpriseInfo);
let 企业测试里程分布Data = {测试: {unit:'km', dataInfo: enterpriseData}, 功能测试: {unit:'km', dataInfo: timeInfo}}
ret["api6"] = getChartOutData("企业测试里程分布", 企业测试里程分布Data);
//企业脱离自动驾驶比率
let st = moment().subtract(1, "days").format("YYMMDD"+" 00:00:00");
let et = moment().subtract(1, "days").format("YYMMDD"+" 24:00:00");
let businessDisengagementRate:any = `http://10.51.50.136:8090/sql/execute?index=13&st=${st}&et=${et}`;
let businessDisengagementRateData = businessDisengagementRate.result;
let businessDisengagement = {};
businessDisengagementRateData.forEach( enterpriseInfo => {
let {enterprise, auto_mileage, disengagement} = enterpriseInfo;
businessDisengagement[enterprise] = disengagement + "/" + auto_mileage;
})
ret["api7"] = getKeyValueNumberOutData("企业脱离自动驾驶比率", businessDisengagement);
// ret["api1"] = getKeyValueNumberOutData("企业测试分析", excelData.企业测试分析 );// {}
// ret["api2"] = getChartOutData("各企业测试里程和时长分析", excelData.各企业测试里程和时长分析 );
// ret["api3"] = getKeyValueNumberOutData("功能测试总和", excelData.功能测试总和 );
// ret["api4"] = getChartOutData("各企业功能测试里程碑和时长分析", excelData.各企业功能测试里程碑和时长分析 );
res.send(ret);
}
function getmileageInfo(index, st, et, ...yearDate) {
let mileageInfo; //月度测试里程
let mileageData;//月里程
let time_month;
//获取企业日里程接口 index st et
let corporateDayMileage:any = `http://10.51.50.136:8090/sql/execute?index=${index}&st=${st}&et=${et}`; //[{},...] 接口数据
let corporateDayMileageData = corporateDayMileage.result;
//月度测试
corporateDayMileageData.forEach(element => {
let {time_day, enterprise, total_mileage} = element; //日 企业 总里程
mileageData += total_mileage;
});
mileageInfo.push({key: yearDate, value: mileageData});
return mileageInfo;
}
/**
* 获取几个月前的日期
* @param monthNum 月数
* @returns
*/
function getPreMonthDay(monthNum) {
let whereDateArr = [];
let newDateArr = [];
for (let i = 1; i <= monthNum; i++) {
let whereDate = moment().subtract(i, "months").format("YYMM");
whereDateArr.push(whereDate);
let newDate = moment().subtract(i, "months").format("YYYY.MM");
newDateArr.push(newDate);
}
return {newDateArr, whereDateArr};
}
\ No newline at end of file
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_视频 } from "../data/analysisExcelData";
//路侧监控视频
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_视频();
ret["api1"] = getKeyValueNumberOutData("设备", excelData.设备 );
ret["api2"] = getKeyValueNotNumberOutData("视频", excelData.视频 );
res.send(ret);
}
\ No newline at end of file
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_物理资源 } from "../data/analysisExcelData";
//物理资源 老版本,弃用
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_物理资源();
ret["api1"] = getKeyValueNumberOutData("物理资源", excelData.物理资源 );
ret["api2"] = getKeyValueNumberOutData("设备型号", excelData.设备型号 );
ret["api3"] = getKeyValueNumberOutData("设备故障", excelData.设备故障 );
ret["api4"] = getChartOutData("每月故障趋势", excelData.每月故障趋势 );
res.send(ret);
}
//物理资源
export function getInterfaceData(req, res) {
}
\ No newline at end of file
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_云资源 } from "../data/analysisExcelData";
//云资源
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_云资源();
ret["api1"] = getKeyValueNumberOutData("云资源", excelData.云资源 );
ret["api2"] = getKeyValueNumberOutData("Pass", excelData.Pass );
ret["api3"] = getKeyValueNumberOutData("Default_Group", excelData.Default_Group );
ret["api4"] = getKeyValueNumberOutData("Gpu", excelData.Gpu );
ret["api5"] = getKeyValueNumberOutData("存储", excelData.存储 );
// ret["api6"] = getKeyValueNumberOutData("ECS实例1", excelData.ECS实例1 );
// ret["api7"] = getKeyValueNumberOutData("ECS实例2", excelData.ECS实例2 );
// ret["api8"] = getKeyValueNumberOutData("ECS实例3", excelData.ECS实例3 );
let ECS图例data = excelData.ECS图例;
let list = [];
for (let key in ECS图例data) {
list.push(ECS图例data[key]);
}
ret["api9"] = {title:"ECS图例", dataList: list };
//getKeyValueNumberOutData("ECS图例", excelData.ECS图例 )
let 实例data = [
getKeyValueNumberOutData("ECS实例1", excelData.ECS实例1),
getKeyValueNumberOutData("ECS实例2", excelData.ECS实例2),
getKeyValueNumberOutData("ECS实例3", excelData.ECS实例3)
];
ret["api10"] = {name: "资源利用率", dataList: 实例data};
res.send(ret);
}
//-----------已舍弃
//云资源
export async function getYZY(req, res) {
let ret:any = {};
res.send(ret);
}
//测试概况
export async function getCSGK(req, res) {
let ret:any = {};
res.send(ret);
}
//测试分析
export async function getCSFX(req, res) {
let ret:any = {};
res.send(ret);
}
//地图数据结构
export async function mapData(req, res) {
let ret:any = {};
res.send(ret);
}
\ No newline at end of file
export enum ERRORENUM { export enum ERRORENUM {
未找到数据, 未找到数据,
参数错误
} }
export enum SYSTEMERRORENUM { export enum SYSTEMERRORENUM {
初始化配置失败 = 1, 初始化配置失败 = 1,
......
...@@ -34,6 +34,10 @@ export let dataCenterInterfaceConfig = { ...@@ -34,6 +34,10 @@ export let dataCenterInterfaceConfig = {
testHistory:"",//小车历史测试数据 testHistory:"",//小车历史测试数据
vehicleAlert:"",//车辆违规信息 vehicleAlert:"",//车辆违规信息
videoPlay:"",//小车监控 videoPlay:"",//小车监控
videoPicture:"",//小车图片
videoBeat:"",//小车监控心跳
roadConstructionInfo:"",//道路建设数据
enterpriseVehicleList:"",//企业测试车辆列表
}; };
//todo 地图数据 //todo 地图数据
...@@ -66,7 +70,8 @@ export async function initConfig() { ...@@ -66,7 +70,8 @@ export async function initConfig() {
"vehicleInfo", "vehicleInfo",
"testHistory", "testHistory",
"vehicleAlert", "vehicleAlert",
"videoPlay" "videoPlay",
"videoPicture"
]}, {"leftView":["cloudResource", "physicalResource"] }, ]}, {"leftView":["cloudResource", "physicalResource"] },
{"mapView":["mapPort", "online","broken", "token" ] }, "imagePath", {"mapCenter":["lng", "lat"]}, "zoom", {"mapView":["mapPort", "online","broken", "token" ] }, "imagePath", {"mapCenter":["lng", "lat"]}, "zoom",
"surveillanceVideo", "wsPath" "surveillanceVideo", "wsPath"
...@@ -99,6 +104,10 @@ export async function initConfig() { ...@@ -99,6 +104,10 @@ export async function initConfig() {
dataCenterInterfaceConfig.testHistory = dataCenterInterface[0].testHistory[0]; dataCenterInterfaceConfig.testHistory = dataCenterInterface[0].testHistory[0];
dataCenterInterfaceConfig.vehicleAlert = dataCenterInterface[0].vehicleAlert[0]; dataCenterInterfaceConfig.vehicleAlert = dataCenterInterface[0].vehicleAlert[0];
dataCenterInterfaceConfig.videoPlay = dataCenterInterface[0].videoPlay[0]; dataCenterInterfaceConfig.videoPlay = dataCenterInterface[0].videoPlay[0];
dataCenterInterfaceConfig.videoPicture = dataCenterInterface[0].videoPicture[0];
dataCenterInterfaceConfig.videoBeat = dataCenterInterface[0].videoBeat[0];
dataCenterInterfaceConfig.roadConstructionInfo = dataCenterInterface[0].roadConstructionInfo[0];
dataCenterInterfaceConfig.enterpriseVehicleList = dataCenterInterface[0].enterpriseVehicleList[0];
//地图中心点 //地图中心点
appConfig.lng = mapCenter[0].lng[0]; appConfig.lng = mapCenter[0].lng[0];
......
...@@ -3,137 +3,6 @@ import { limitEnteNameString, changeDataName } from "../util/tools"; ...@@ -3,137 +3,6 @@ import { limitEnteNameString, changeDataName } from "../util/tools";
import { planarArrBecomeKeyValueData, planarArrBecomeChartData, planarArrBecomeStringListData, planarArrBecomeListData} from "../cal/excelEnter"; import { planarArrBecomeKeyValueData, planarArrBecomeChartData, planarArrBecomeStringListData, planarArrBecomeListData} from "../cal/excelEnter";
import { getExcelDataBySheetName } from "../util/analysisExcel"; import { getExcelDataBySheetName } from "../util/analysisExcel";
export function get监管服务能力_云资源() {
let bolckDataList = getExcelDataBySheetName('安亭汽车城数据模板.xlsx', '监管服务能力_云资源');
let result = {};
let forKeyValueList = ["云资源","Pass","Default_Group","Gpu","存储","ECS实例1","ECS实例2","ECS实例3","ECS实例4","ECS实例5","ECS实例6","ECS图例"];
let forChartList = [];
let forStringList = [];
let forListData = [];
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (forKeyValueList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeKeyValueData(blockData);
if (forChartList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeChartData(blockData);
if (forStringList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeStringListData(blockData);
if (forListData.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeListData(blockData);
}
return result;
}
export function get监管服务能力_物理资源() {
let bolckDataList = getExcelDataBySheetName('安亭汽车城数据模板.xlsx', '监管服务能力_物理资源');
let result = {};
let forKeyValueList = ["物理资源","设备型号","设备故障"];
let forChartList = ["每月故障趋势"];
let forStringList = [];
let forListData = [];
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (forKeyValueList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeKeyValueData(blockData);
if (forChartList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeChartData(blockData);
if (forStringList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeStringListData(blockData);
if (forListData.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeListData(blockData);
}
return result;
}
export function get监管服务能力_视频() {
let bolckDataList = getExcelDataBySheetName('安亭汽车城数据模板.xlsx', '监管服务能力_视频');
let result = {};
let forKeyValueList = ["设备", "视频"];
let forChartList = [];
let forStringList = [];
let forListData = [];
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (forKeyValueList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeKeyValueData(blockData);
if (forChartList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeChartData(blockData);
if (forStringList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeStringListData(blockData);
if (forListData.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeListData(blockData);
}
return result;
}
export function get监管服务能力_企业测试分析() {
let bolckDataList = getExcelDataBySheetName('安亭汽车城数据模板.xlsx', '监管服务能力_企业测试分析');
let result = {};
let forKeyValueList = ["企业测试分析", "功能测试总和"];
let forChartList = ["各企业测试里程和时长分析","各企业功能测试里程碑和时长分析"];
let forStringList = [];
let forListData = [];
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (forKeyValueList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeKeyValueData(blockData);
if (forChartList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeChartData(blockData);
if (forStringList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeStringListData(blockData);
if (forListData.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeListData(blockData);
}
return result;
}
export function get监管服务能力_车辆测试总览() {
let bolckDataList = getExcelDataBySheetName('安亭汽车城数据模板.xlsx', '监管服务能力_车辆测试总览');
let result = {};
let forKeyValueList = ["各企业违规次数","企业脱离自动驾驶比率"];
let forChartList = ["每月测试里程和时长分布"];
let forStringList = [];
let forListData = ["测试车辆列表"];
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (forKeyValueList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeKeyValueData(blockData);
if (forChartList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeChartData(blockData);
if (forStringList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeStringListData(blockData);
if (forListData.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeListData(blockData);
}
return result;
}
export function get监管服务能力_RSU发送量() {
let bolckDataList = getExcelDataBySheetName('安亭汽车城数据模板.xlsx', '监管服务能力_RSU列表');
let result = {};
let forKeyValueList = [];
let forChartList = [];
let forStringList = [];
let forListData = ["RSU"];
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (forKeyValueList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeKeyValueData(blockData);
if (forChartList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeChartData(blockData);
if (forStringList.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeStringListData(blockData);
if (forListData.indexOf(changeName) > -1 ) result[changeName] = planarArrBecomeListData(blockData);
}
return result;
}
export function get大事记() { export function get大事记() {
let bolckDataList = getExcelDataBySheetName('大事记节点.xlsx', '大事记'); let bolckDataList = getExcelDataBySheetName('大事记节点.xlsx', '大事记');
let result = {}; let result = {};
......
//接口任务 定期更新 //接口任务 定期更新
import moment = require('moment'); import moment = require('moment');
import * as request from 'request'; import * as request from 'request';
import { INTERFACEREQUESTTYPEENUM } from "../config/enum"; import { SYSTEMERRORENUM } from '../config/errorEnum';
import { BizError } from "../util/bizError"; import { BizError, SysError } from "../util/bizError";
import { logError } from '../util/log';
import { Config } from './interfaceConfig';
let accToken = "";//todo token let accToken = "";//todo token
export async function getInterfaceByInterfaceName(url, body) { export async function getInterfaceByInterfaceName(url, body) {
let {data, code}:any = await get(url, body, {}); let reqResult = await get(url, body, {});
let {err, res, reqData}:any = reqResult;
let reqErrorMsg = "";
if (err) reqErrorMsg = err.msg || err.message;
else if (!reqData.code) reqErrorMsg = reqData.error_msg;
else {
switch (reqData.code) {
case 401: throw new SysError(SYSTEMERRORENUM.获取第三方接口数据失败, url, ` 请求未鉴权`);
case 404: throw new SysError(SYSTEMERRORENUM.获取第三方接口数据失败, url, ` 请求路径不存在`);
case 503: throw new SysError(SYSTEMERRORENUM.获取第三方接口数据失败, url, ` 请求频率过高`);
case 500: throw new SysError(SYSTEMERRORENUM.获取第三方接口数据失败, url, reqData.msg);
}
}
if (reqErrorMsg) throw new SysError(SYSTEMERRORENUM.获取第三方接口数据失败, url, reqErrorMsg);
let {msg, data, resultData} = reqData;
if (msg) return //小车心跳
switch (code) { if (!data && !resultData) {
case 401: throw new BizError(`${url} 请求未鉴权`); throw new SysError(SYSTEMERRORENUM.获取第三方接口数据失败, url, `缺少返回参数 data`);
case 404: throw new BizError(`${url} 请求路径不存在`);
case 503: throw new BizError(`${url} 请求频率过高`);
} }
if (!data) throw new BizError(`${url} 缺少返回参数 data`);
return data; return data || resultData;
} }
//接口方会返回500错误,但是这说明没有监控视频
export async function getCarVideo(url, body) {
let {err, res, reqData}:any = await get(url, body, {});
if (reqData.code == 500) {
return {};
}
if (reqData.data || reqData.resultData) return reqData.data || reqData.resultData;
// return reqData.data;
return false;
}
function get(url:string, query?, headers?, timeOut?) { function get(url:string, query?, headers?, timeOut?) {
...@@ -30,8 +54,8 @@ function get(url:string, query?, headers?, timeOut?) { ...@@ -30,8 +54,8 @@ function get(url:string, query?, headers?, timeOut?) {
let paramater:any = { url, json:true, timeout:timeOut }; let paramater:any = { url, json:true, timeout:timeOut };
if (query) paramater.qs = query; if (query) paramater.qs = query;
if (headers) paramater.headers = headers; if (headers) paramater.headers = headers;
request.get(paramater, function (err, res, data) { request.get(paramater, function (err, res, reqData) {
resolve(data); resolve({err, res, reqData});
}) })
}) })
} }
......
...@@ -22,7 +22,7 @@ export async function getQycs() { ...@@ -22,7 +22,7 @@ export async function getQycs() {
let 企业测试里程功能数据 = []; let 企业测试里程功能数据 = [];
enterpriseTestStatusList.forEach( info => { enterpriseTestStatusList.forEach( info => {
let { enterpriseName, testStatistics } = info; let { enterpriseName, testStatistics } = info;
if ( !enterpriseName || !testStatistics ) // if ( !enterpriseName || !testStatistics )
企业测试时长数据.push({ key: enterpriseName, value: testStatistics.duration } ); 企业测试时长数据.push({ key: enterpriseName, value: testStatistics.duration } );
企业测试时长功能数据.push({ key: enterpriseName, value: testStatistics.autoDuration } ); 企业测试时长功能数据.push({ key: enterpriseName, value: testStatistics.autoDuration } );
企业测试里程数据.push({ key: enterpriseName, value: testStatistics.mileage } ); 企业测试里程数据.push({ key: enterpriseName, value: testStatistics.mileage } );
...@@ -40,19 +40,18 @@ export async function getYdcs() { ...@@ -40,19 +40,18 @@ export async function getYdcs() {
let 月度测试里程数据 = []; let 月度测试里程数据 = [];
let 月度测试里程功能数据 = []; let 月度测试里程功能数据 = [];
let startTime = moment().subtract(22, 'months').format("YYYY-M"); // let startTime = moment().subtract(1, 'months').format("YYYY-M");
let endTime = moment().format("YYYY-M"); // let endTime = moment().format("YYYY-M");
let 月度历史里程及时长 = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.monthlyTestStatus, { startTime, endTime }); let 月度历史里程及时长 = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.monthlyTestStatus, {});
let { monthlyTestStatusList } = 月度历史里程及时长; let { monthlyTestStatusList } = 月度历史里程及时长;
if ( !Array.isArray(monthlyTestStatusList) ) throw new SysError(SYSTEMERRORENUM.未按接口协议返回, interfaceName, "monthlyTestStatusList 不是数组", monthlyTestStatusList); if ( !Array.isArray(monthlyTestStatusList) ) throw new SysError(SYSTEMERRORENUM.未按接口协议返回, interfaceName, "monthlyTestStatusList 不是数组", monthlyTestStatusList);
//100个月
let nowTime = new Date( moment().format('YYYY-MM') ).valueOf(); let nowTime = new Date( moment().format('YYYY-MM') ).valueOf();
monthlyTestStatusList.forEach( info => { monthlyTestStatusList.forEach( info => {
let { date, testStatistics } = info; let { date, testStatistics } = info;
let timeMs = new Date( moment(date).add(21, 'months').format('YYYY-MM') ).valueOf(); let timeMs = new Date( moment(date).add(20, 'months').format('YYYY-MM') ).valueOf();
if (timeMs < nowTime) return; if (timeMs < nowTime) return;
月度测试时长数据.push({key: date, value: testStatistics.duration}); 月度测试时长数据.push({key: date, value: testStatistics.duration});
...@@ -66,7 +65,7 @@ export async function getYdcs() { ...@@ -66,7 +65,7 @@ export async function getYdcs() {
//企业脱离自动驾驶比率 //企业脱离自动驾驶比率
export async function getQytlzdjs() { export async function getQytlzdjs() {
// "企业历史脱离率统计接口"; // "企业历史脱离率统计接口";
let startTime = moment().format("YYYY-MM") + "-01"; let startTime = moment().format("YYYY-MM") + "-01";
let endTime = moment().format('YYYY-MM-DD'); let endTime = moment().format('YYYY-MM-DD');
let data = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.enterpriseExitRate, {startTime, endTime}); let data = await getInterfaceByInterfaceName(dataCenterInterfaceConfig.enterpriseExitRate, {startTime, endTime});
......
import { getInterfaceByInterfaceName } from "../cronJob";
//token
export async function getToken() {
let interfaceName = "鉴权url接口";
// let {token} = await getInterfaceByInterfaceName(interfaceName);
let token = "4vs5df6r4dg58d45gdes";
return token;
}
\ No newline at end of file
...@@ -31,10 +31,7 @@ let heart = { ...@@ -31,10 +31,7 @@ let heart = {
start:(ws) => { start:(ws) => {
if (!heartCount) { if (!heartCount) {
heartCount = 1; heartCount = 1;
// console.log("i'm heartStart");
} }
//消除延时器
heart.timeoutObj && clearInterval(heart.timeoutObj); heart.timeoutObj && clearInterval(heart.timeoutObj);
...@@ -88,6 +85,10 @@ export async function initWSData() { ...@@ -88,6 +85,10 @@ export async function initWSData() {
let dp = {};//数据池 {"id":{lastMs:最新的时间, list:[{},{},{}], index:0 } } let dp = {};//数据池 {"id":{lastMs:最新的时间, list:[{},{},{}], index:0 } }
let dpNewDate = ''; let dpNewDate = '';
let test = {};
export function stats(data) { export function stats(data) {
let dateFormat = moment().format('YYYYMMDD'); let dateFormat = moment().format('YYYYMMDD');
if (!dpNewDate) dpNewDate = dateFormat; if (!dpNewDate) dpNewDate = dateFormat;
...@@ -97,10 +98,32 @@ export function stats(data) { ...@@ -97,10 +98,32 @@ export function stats(data) {
// console.log(data); // console.log(data);
let dataJson = JSON.parse(data); let dataJson = JSON.parse(data);
let 变化 = 0;
let 无变化 = 0;
let 有速度的车 = 0;
let 速度为0的车 = 0;
dataJson.VehicleLoc.forEach(info => { dataJson.VehicleLoc.forEach(info => {
let {vin, latitude, longitude, positiontime, vehicleId} = info; let {vin, latitude, longitude, positiontime, vehicleId, velocity} = info;
// if (velocity != 0 && vin == "LZFH18T13KD005883") {
broadcastMsg({lng:longitude||0.0, lat:latitude||0.0, vin}); // console.log(vin, "车速==",velocity, "经纬度", latitude, longitude);
// }
if (velocity != 0 ) {
有速度的车 += 1;
if ( !test[vin] ) test[vin] = {latitude, longitude, type:"无变化"};
else {
if (latitude != test[vin].latitude || longitude != test[vin].longitude) {
test[vin].type = "有变化"
test[vin].latitude = latitude;
test[vin].longitude = longitude;
变化 += 1;
} else {
无变化 += 1;
}
}
} else {
速度为0的车 += 1;
}
broadcastMsg({lng:longitude||0.0, lat:latitude||0.0, vin, vehicleid:vehicleId});
//加入到缓存 //加入到缓存
let lastMs = positiontime || new Date().valueOf(); let lastMs = positiontime || new Date().valueOf();
if ( lastMs ) {//数据包里有时间就缓存 if ( lastMs ) {//数据包里有时间就缓存
...@@ -109,10 +132,13 @@ export function stats(data) { ...@@ -109,10 +132,13 @@ export function stats(data) {
//每个小车缓存4个数据,新连接进来的时候下发缓存好的数据,看起来不会很突兀 //每个小车缓存4个数据,新连接进来的时候下发缓存好的数据,看起来不会很突兀
dp[vin].list[dp[vin].index] = {lng:longitude||0.0, lat:latitude||0.0, vin, lastMs, vehicleid:vehicleId}; dp[vin].list[dp[vin].index] = {lng:longitude||0.0, lat:latitude||0.0, vin, lastMs, vehicleid:vehicleId};
dp[vin].index += 1; dp[vin].index += 1;
if (dp[vin].index >= 4) dp[vin].index = 0; if (dp[vin].index > 4) dp[vin].index = 0;
} }
}); });
console.log(`本次消息总共发了:${有速度的车}辆有速度, 其中变化的 ${变化} 辆;没有变化的${无变化}, 速度为0的车${速度为0的车}`);
} catch(err) { } catch(err) {
logHandle("ws 返回数据不是json --> "+ data); logHandle("ws 返回数据不是json --> "+ data);
...@@ -122,6 +148,8 @@ export function stats(data) { ...@@ -122,6 +148,8 @@ export function stats(data) {
} }
} }
function checkData(time) { function checkData(time) {
if (time != dpNewDate) { if (time != dpNewDate) {
dpNewDate = time; dpNewDate = time;
...@@ -139,8 +167,8 @@ export function getDpData() { ...@@ -139,8 +167,8 @@ export function getDpData() {
result.sort( (a, b) => {return a.lastMs - b.lastMs}); result.sort( (a, b) => {return a.lastMs - b.lastMs});
let initList = []; let initList = [];
result.forEach(info => { result.forEach(info => {
let {lng, lat, vehicleid, lastMs} = info; let {lng, lat, vehicleid, vin, lastMs} = info;
initList.push({lng, lat, vehicleid}); initList.push({lng, lat, vin});
}); });
return {initList, count:Object.keys(dp).length}; return {initList, count:Object.keys(dp).length};
} }
...@@ -156,8 +184,9 @@ export function controlGetOnlieCarList() { ...@@ -156,8 +184,9 @@ export function controlGetOnlieCarList() {
let onlineCarList = []; let onlineCarList = [];
for (let key in dp) { for (let key in dp) {
let {lastMs, list, index} = dp[key]; let {lastMs, list, index} = dp[key];
if ((ms -lastMs) > 5*60*1000) continue; if ((ms -lastMs) > 1*60*1000) continue;
let {vin, vehicleid} = list[index]; if (index == 0) continue;
let {vin, vehicleid} = list[index-1];
onlineCarList.push({id:vin, vehicleid}); onlineCarList.push({id:vin, vehicleid});
} }
return onlineCarList; return onlineCarList;
......
...@@ -14,157 +14,4 @@ async function lanuch() { ...@@ -14,157 +14,4 @@ async function lanuch() {
console.log('This indicates that the server is started successfully.'); console.log('This indicates that the server is started successfully.');
} }
function test() {
let enterpriseVehicleList = [
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGN9jCqAPEVpAAAm6sRT_IA756.jpg",
"enterpriseName": "云骥",
"totalVehicle": 1
},
{
"enterpriseLogo": null,
"enterpriseName": "临港公交",
"totalVehicle": 3
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM2lHCASyYTAAEDUVmM2m0938.png",
"enterpriseName": "上汽乘用车",
"totalVehicle": 6
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM1ch-AcgrDAAByDdvtn6k677.png",
"enterpriseName": "酷移",
"totalVehicle": 3
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM1ciyAedpJAAG2siiJo0w193.png",
"enterpriseName": "友道",
"totalVehicle": 44
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM1LK-AIsLkAAAKYhI9eR0154.png",
"enterpriseName": "临港捷运",
"totalVehicle": 1
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM1LGWATddkAAEK1eJjpVM191.png",
"enterpriseName": "依行",
"totalVehicle": 2
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-b6ALJEbAAH7eWqp0bE733.png",
"enterpriseName": "赛可",
"totalVehicle": 118
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-duARquaAAC8mHN7yqg957.png",
"enterpriseName": "小马",
"totalVehicle": 28
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-gGAcBiPAADtjwwbuqE946.png",
"enterpriseName": "百度",
"totalVehicle": 106
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-g6AJtXIAANj_AVn0wM695.png",
"enterpriseName": "商汤",
"totalVehicle": 9
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-hyAefROAABWKnMLAdo369.png",
"enterpriseName": "阿利昂斯",
"totalVehicle": 4
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-i2ANds6AADLub0EZT0345.png",
"enterpriseName": "通用中国",
"totalVehicle": 1
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-r6AL0T0AAApBxEtDUU721.png",
"enterpriseName": "上汽大通",
"totalVehicle": 2
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-myAIhJ5AAAqjEIMfFw960.png",
"enterpriseName": "丰田",
"totalVehicle": 7
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-nqALg--AAC0YqlTbOQ313.png",
"enterpriseName": "AutoX",
"totalVehicle": 81
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-pOADhIiAAFDNIhavW8152.png",
"enterpriseName": "上汽通用",
"totalVehicle": 1
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-qyAez_GAAALxjs3x4I609.png",
"enterpriseName": "中智行",
"totalVehicle": 5
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-tiAT8XYAAAiB_U3mkY795.png",
"enterpriseName": "深兰",
"totalVehicle": 1
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-uqAMfpIAAAjg9Trrt0609.png",
"enterpriseName": "吉利",
"totalVehicle": 2
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-v-ACoYtAAAdSG61mok324.png",
"enterpriseName": "滴滴",
"totalVehicle": 60
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-w-AC-UOAAA9n932Q5U842.png",
"enterpriseName": "上汽大众",
"totalVehicle": 6
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-ySAWzDmAAAsek9ZJXk572.png",
"enterpriseName": "华为",
"totalVehicle": 1
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM1LMGAXySoAAGXZUOHtgA299.png",
"enterpriseName": "图森",
"totalVehicle": 12
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-2CAWHJMAAA6TBhy5EE928.png",
"enterpriseName": "仙途",
"totalVehicle": 2
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-2yAeap1AAA6yCs-OLw861.png",
"enterpriseName": "宝马",
"totalVehicle": 2
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-32ACnKgAACRLkClP-M405.png",
"enterpriseName": "蔚来",
"totalVehicle": 1
},
{
"enterpriseLogo": "https://management.icv-sh.com:9991/data/file/download?url=group1/M00/00/00/CjMyvGM0-5OAfEi2AAD3V0bQ31A753.png",
"enterpriseName": "初速度",
"totalVehicle": 1
}
];
let urlMap = {};
enterpriseVehicleList.forEach( info => {
let {enterpriseLogo, enterpriseName} = info;
// if (enterpriseLogo) urlMap[enterpriseLogo] = enterpriseName;
console.log(`"${enterpriseLogo}":"${enterpriseName}.png"`);
});
console.log(JSON.stringify(urlMap) );
console.log();
}
lanuch(); lanuch();
\ No newline at end of file
...@@ -28,7 +28,7 @@ export class httpServer { ...@@ -28,7 +28,7 @@ export class httpServer {
}); });
httpServer.use(express.static(path.join(__dirname, "../../images")) ); httpServer.use(express.static("./images") );
// httpServer.use(express.static(path.join(__dirname, "../../video")) ); // httpServer.use(express.static(path.join(__dirname, "../../video")) );
httpServer.use(express.static("./video" ) ); httpServer.use(express.static("./video" ) );
httpServer.use(bodyParser.json({limit:"10kb"})); httpServer.use(bodyParser.json({limit:"10kb"}));
......
import * as asyncHandler from 'express-async-handler' import * as asyncHandler from 'express-async-handler'
import * as jgfwnl_yzyBiz from '../biz/jgfwnl_yzy';
import * as jgfwnl_wlzyBiz from '../biz/jgfwnl_wlzy';
import * as jgfwnl_spBiz from '../biz/jgfwnl_sp';
import * as jgfwnl_qycsfxBiz from '../biz/jgfwnl_qycsfx';
import * as jgfwnl_clcszlBiz from '../biz/jgfwnl_clcszl';
import * as jgfwnl_RSUfslBiz from '../biz/jgfwnl_RSUfsl';
import * as jgfwnlBiz from '../biz/jgfwnl/data'; import * as jgfwnlBiz from '../biz/jgfwnl/data';
import * as controlBiz from '../biz/control'; import * as controlBiz from '../biz/control';
import * as dsjBiz from '../biz/dsj'; import * as dsjBiz from '../biz/dsj';
export function setRouter(httpServer){ export function setRouter(httpServer){
httpServer.get('/jgfwnl_yzy', asyncHandler(jgfwnl_yzyBiz.getData));
httpServer.get('/jgfwnl_wlzy', asyncHandler(jgfwnl_wlzyBiz.getData));
httpServer.get('/jgfwnl_sp', asyncHandler(jgfwnl_spBiz.getData));
httpServer.get('/jgfwnl_qycsfx', asyncHandler(jgfwnl_qycsfxBiz.getData));
httpServer.get('/jgfwnl_clcszl', asyncHandler(jgfwnl_clcszlBiz.getData));
httpServer.get('/jgfwnl_RSUfsl', asyncHandler(jgfwnl_RSUfslBiz.getData));
httpServer.post('/jgfwnl_yzy', asyncHandler(jgfwnl_yzyBiz.getData));
httpServer.post('/jgfwnl_wlzy', asyncHandler(jgfwnl_wlzyBiz.getData));
httpServer.post('/jgfwnl_sp', asyncHandler(jgfwnl_spBiz.getData));
httpServer.post('/jgfwnl_qycsfx', asyncHandler(jgfwnl_qycsfxBiz.getData));
httpServer.post('/jgfwnl_clcszl', asyncHandler(jgfwnl_clcszlBiz.getData));
httpServer.post('/jgfwnl_RSUfsl', asyncHandler(jgfwnl_RSUfslBiz.getData));
//新版本 //新版本
httpServer.get('/yzy', asyncHandler(jgfwnlBiz.getYZY)); httpServer.get('/yzy', asyncHandler(jgfwnlBiz.getYZY));
httpServer.get('/csgk', asyncHandler(jgfwnlBiz.getCSGK)); httpServer.get('/csgk', asyncHandler(jgfwnlBiz.getCSGK));
...@@ -36,4 +15,5 @@ export function setRouter(httpServer){ ...@@ -36,4 +15,5 @@ export function setRouter(httpServer){
httpServer.get('/dsj', asyncHandler(dsjBiz.getData)); httpServer.get('/dsj', asyncHandler(dsjBiz.getData));
//控制端小车列表接口 //控制端小车列表接口
httpServer.get('/carlist', asyncHandler(controlBiz.controlGetCarList)); httpServer.get('/carlist', asyncHandler(controlBiz.controlGetCarList));
httpServer.get('/dsjnodelist', asyncHandler(dsjBiz.dsjNodeList));
} }
\ No newline at end of file
...@@ -12,7 +12,9 @@ const moment = require('moment'); ...@@ -12,7 +12,9 @@ const moment = require('moment');
*/ */
export function getExcelDataBySheetName(fileName, sheetName) { export function getExcelDataBySheetName(fileName, sheetName) {
let {sheetMap, sheetList} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName )); //todo 这里使用win10的打包方式 要写成根目录
let {sheetMap, sheetList} = getExcel(`./res/${fileName}` );
// let {sheetMap, sheetList} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
let thisBlockData = getBlockData(sheetMap[sheetName]); let thisBlockData = getBlockData(sheetMap[sheetName]);
return thisBlockData; return thisBlockData;
} }
......
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