get获取数据已完成
This commit is contained in:
commit
5433cf3323
54
app.js
Normal file
54
app.js
Normal file
@ -0,0 +1,54 @@
|
||||
var createError = require('http-errors');
|
||||
var express = require('express');
|
||||
var path = require('path');
|
||||
var cookieParser = require('cookie-parser');
|
||||
var logger = require('morgan');
|
||||
|
||||
var missionRouter = require('./routes/Mission');
|
||||
var simuRouter = require('./routes/simu');
|
||||
|
||||
let dataBase = require("./util/dmDB");
|
||||
dataBase.initDB();
|
||||
|
||||
var createServer = require('./controller/socket')
|
||||
|
||||
var app = express();
|
||||
|
||||
// view engine setup
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
app.set('view engine', 'jade');
|
||||
|
||||
app.use(logger('dev'));
|
||||
app.use(express.json());
|
||||
app.use(express.urlencoded({ extended: false }));
|
||||
app.use(cookieParser());
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
//设置允许跨域访问该服务.
|
||||
//设置跨域访问
|
||||
app.all('*', function (req, res, next) {
|
||||
res.header("Access-Control-Allow-Origin", "*");
|
||||
res.header("Access-Control-Allow-Headers", "*");
|
||||
next();
|
||||
});
|
||||
|
||||
app.use('/Mission', missionRouter);
|
||||
app.use('/Simu', simuRouter);
|
||||
|
||||
// catch 404 and forward to error handler
|
||||
app.use(function (req, res, next) {
|
||||
next(createError(404));
|
||||
});
|
||||
|
||||
// error handler
|
||||
app.use(function (err, req, res, next) {
|
||||
// set locals, only providing error in development
|
||||
res.locals.message = err.message;
|
||||
res.locals.error = req.app.get('env') === 'development' ? err : {};
|
||||
|
||||
// render the error page
|
||||
res.status(err.status || 500);
|
||||
res.render('error');
|
||||
});
|
||||
|
||||
module.exports = app;
|
90
bin/www
Normal file
90
bin/www
Normal file
@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var app = require('../app');
|
||||
var debug = require('debug')('dmserve:server');
|
||||
var http = require('http');
|
||||
|
||||
/**
|
||||
* Get port from environment and store in Express.
|
||||
*/
|
||||
|
||||
var port = normalizePort(process.env.PORT || '3000');
|
||||
app.set('port', port);
|
||||
|
||||
/**
|
||||
* Create HTTP server.
|
||||
*/
|
||||
|
||||
var server = http.createServer(app);
|
||||
|
||||
/**
|
||||
* Listen on provided port, on all network interfaces.
|
||||
*/
|
||||
|
||||
server.listen(port);
|
||||
server.on('error', onError);
|
||||
server.on('listening', onListening);
|
||||
|
||||
/**
|
||||
* Normalize a port into a number, string, or false.
|
||||
*/
|
||||
|
||||
function normalizePort(val) {
|
||||
var port = parseInt(val, 10);
|
||||
|
||||
if (isNaN(port)) {
|
||||
// named pipe
|
||||
return val;
|
||||
}
|
||||
|
||||
if (port >= 0) {
|
||||
// port number
|
||||
return port;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "error" event.
|
||||
*/
|
||||
|
||||
function onError(error) {
|
||||
if (error.syscall !== 'listen') {
|
||||
throw error;
|
||||
}
|
||||
|
||||
var bind = typeof port === 'string'
|
||||
? 'Pipe ' + port
|
||||
: 'Port ' + port;
|
||||
|
||||
// handle specific listen errors with friendly messages
|
||||
switch (error.code) {
|
||||
case 'EACCES':
|
||||
console.error(bind + ' requires elevated privileges');
|
||||
process.exit(1);
|
||||
break;
|
||||
case 'EADDRINUSE':
|
||||
console.error(bind + ' is already in use');
|
||||
process.exit(1);
|
||||
break;
|
||||
default:
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "listening" event.
|
||||
*/
|
||||
|
||||
function onListening() {
|
||||
var addr = server.address();
|
||||
var bind = typeof addr === 'string'
|
||||
? 'pipe ' + addr
|
||||
: 'port ' + addr.port;
|
||||
debug('Listening on ' + bind);
|
||||
}
|
8
config/db.json
Normal file
8
config/db.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"db_config":{
|
||||
"host" : "192.168.0.105",
|
||||
"port" : "30236",
|
||||
"username" : "SYSDBA",
|
||||
"password" : "SYSDBA_dm001"
|
||||
}
|
||||
}
|
673
controller/Mission.js
Normal file
673
controller/Mission.js
Normal file
@ -0,0 +1,673 @@
|
||||
const util = require("../util/common");
|
||||
let dataBase = require("../util/dmDB");
|
||||
const moment = require('moment-timezone');
|
||||
var { PlanePoint, entityHJ, simuStatus } = require("../util/variable");
|
||||
|
||||
//加载航空兵数据
|
||||
exports.loadHKBData = (req, res, next) => {
|
||||
simuStatus["参考时间"] = req.query.RQ;
|
||||
|
||||
var params = ["bdid", "jx", "jh", "qc_dh", "zy", "dwjc", "dwdm", "fxsj_ly", "hc_dm", "hc_xm", "txbg_sk", "rwlx"];
|
||||
var whereSql = "RWBS = '" + req.query.RWBS + "' and RQ = '" + req.query.RQ + "' and BC = " + req.query.BC;
|
||||
dataBase.queryTable("kzdk.RW_FXJC", params, whereSql).then(async (data) => {
|
||||
var array = [];
|
||||
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
console.log(result);
|
||||
|
||||
var bdid = result[0];
|
||||
var zy = result[4];
|
||||
var qcdh = result[3];
|
||||
let obj = {};
|
||||
obj["BDID"] = bdid;
|
||||
obj["型号"] = result[1];
|
||||
obj["机号"] = result[2];
|
||||
obj["编号"] = qcdh;
|
||||
obj["阵营"] = zy;
|
||||
obj["单位简称"] = result[5];
|
||||
obj["单位代码"] = result[6];
|
||||
obj["数据来源"] = result[7];
|
||||
obj["后舱代号"] = result[8];
|
||||
obj["后舱姓名"] = result[9];
|
||||
obj["体系摧毁时刻"] = result[10];
|
||||
obj["装备类别"] = "飞机";
|
||||
obj["执行任务"] = result[11];
|
||||
obj["体系摧毁文本信息"] = "体系摧毁时间为:" + moment(result[10]).format('HH:mm:ss');
|
||||
obj["体系摧毁文本颜色"] = "255,0,0,255";
|
||||
|
||||
var hj = await getHjFromDb(obj, bdid, "航迹", 1000, 1, "飞机");
|
||||
if (!hj) {
|
||||
hj = await getHjFromDb(obj, bdid, "航迹", 1000, 0, "飞机");
|
||||
}
|
||||
|
||||
//存入空空攻击事件map
|
||||
var kksjlist = await getKkwqsyList(bdid, "有效", qcdh, zy, req.query.RQ, req.query.RWBS);
|
||||
|
||||
//存入空地攻击事件map
|
||||
var kdsjlist = await getKdwqsyList(bdid, "有效", req.query.RQ);
|
||||
|
||||
//红外弹事件
|
||||
var hwdList = await getGrqkList(bdid, "红外弹", qcdh, req.query.RQ);
|
||||
|
||||
//箔条弹事件
|
||||
var hwdList = await getGrqkList(bdid, "箔条弹", qcdh, req.query.RQ);
|
||||
|
||||
//有源干扰事件
|
||||
var yyList = await getGrqkList(bdid, "有源干扰", qcdh, req.query.RQ);
|
||||
|
||||
//机载雷达事件
|
||||
var ldList = await getGrqkList(bdid, "机载雷达", qcdh, req.query.RQ);
|
||||
|
||||
array.push(obj);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
res.json(util.getReturnData(1, '查询成功', array));
|
||||
});
|
||||
}
|
||||
|
||||
//加载飞机航迹
|
||||
getHjFromDb = async (obj, bdid, sjlx, sjjd, zsj, zblb) => {
|
||||
var params = ["nr"];
|
||||
var whereSql = "jcid = '" + bdid + "' and sjlx = '" + sjlx + "' and sjjd = " + sjjd + " and zsj = " + zsj;
|
||||
var data = await dataBase.queryTable("kzdk.rw_fj_sj", params, whereSql);
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
if (result) {
|
||||
var lob = result[0];
|
||||
var buffer = await dataBase.readLob(lob);
|
||||
await lob.close();
|
||||
|
||||
var points = new Map();
|
||||
var size = PlanePoint.length();
|
||||
var count = buffer.length / size;
|
||||
for (let i = 0; i < count; i++) {
|
||||
var offset = i * size;
|
||||
const byte = buffer.subarray(offset, offset + size);
|
||||
PlanePoint.setBuffer(byte);
|
||||
|
||||
let pt = {};
|
||||
pt["iNum"] = PlanePoint.get('iNum');
|
||||
pt["iRelTime"] = PlanePoint.get('iRelTime');
|
||||
pt["空速"] = PlanePoint.get('dAirspeed');
|
||||
pt["升降率"] = PlanePoint.get('dSjl');
|
||||
pt["过载"] = PlanePoint.get('dOverload');
|
||||
pt["马赫数"] = PlanePoint.get('dMach');
|
||||
pt["经度"] = PlanePoint.get('dLongitude');
|
||||
pt["纬度"] = PlanePoint.get('dLatitude');
|
||||
pt["海拔"] = PlanePoint.get('dAlitidude');
|
||||
pt["航向角"] = PlanePoint.get('dHxj');
|
||||
pt["俯仰角"] = PlanePoint.get('dFyj');
|
||||
pt["倾斜角"] = PlanePoint.get('dQxj');
|
||||
|
||||
if (zblb == "飞机") {
|
||||
if (i == 0) {
|
||||
obj["经度"] = PlanePoint.get('dLongitude');
|
||||
obj["纬度"] = PlanePoint.get('dLatitude');
|
||||
obj["海拔"] = PlanePoint.get('dAlitidude');
|
||||
obj["航向角"] = PlanePoint.get('dHxj');
|
||||
obj["俯仰角"] = PlanePoint.get('dFyj');
|
||||
obj["倾斜角"] = PlanePoint.get('dQxj');
|
||||
}
|
||||
}
|
||||
|
||||
points.set(PlanePoint.get('iRelTime'), pt);
|
||||
}
|
||||
|
||||
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
||||
|
||||
if (sortMap.size > 0) {
|
||||
var startSimu = simuStatus["开始时间"];
|
||||
var endSimu = simuStatus["结束时间"];
|
||||
const keysArray = [...sortMap.keys()];
|
||||
var start = keysArray[0];
|
||||
var end = keysArray[keysArray.length - 1];
|
||||
if (startSimu < 0.0) {
|
||||
startSimu = start;
|
||||
}
|
||||
if (start < startSimu) {
|
||||
startSimu = start;
|
||||
}
|
||||
if (end > endSimu) {
|
||||
endSimu = end;
|
||||
}
|
||||
simuStatus["开始时间"] = startSimu;
|
||||
simuStatus["当前时间"] = startSimu;
|
||||
simuStatus["结束时间"] = endSimu;
|
||||
}
|
||||
|
||||
entityHJ.set(bdid, sortMap);
|
||||
|
||||
return points;
|
||||
}
|
||||
}
|
||||
|
||||
//空空攻击事件
|
||||
getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
||||
//查询空空武器攻击事件
|
||||
var params = ["dx", "fsbh", "GJ_JL", "GJ_FW", "gj_sk", "GJTS", "DMZYSK", "ZD_JSSK", "gjxg_qrmb", "MZYXX", "FS_JH"];
|
||||
var whereSql = "sjlx = '空空' and gjxg_qrxg = '" + qrxg + "' and bdid = '" + bdid + "'";
|
||||
var data = await dataBase.queryTable("kzdk.rw_fxjc_wqsy", params, whereSql);
|
||||
var array = [];
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
let sjmap = {};
|
||||
var zerotime = moment(rq);
|
||||
var starttime = moment(result[4]);
|
||||
var endtime = moment(result[6]);
|
||||
var jhsk = moment(result[7]);
|
||||
var dx = result[0];
|
||||
var mzyxx = result[9];
|
||||
var fsbh = result[1];
|
||||
var mbdh = result[8];
|
||||
var ddbh = "/" + fsbh + " " + dx + "->" + mbdh;
|
||||
var gjxx = qcdh + ddbh;
|
||||
var strNewBH = bdid + "-" + fsbh;
|
||||
//添加引导发射飞机信息
|
||||
var FS_JH = result[10];
|
||||
var ts = result[5];
|
||||
var jl = result[2];
|
||||
|
||||
if (mzyxx == "命中") {
|
||||
//没有结束时间进行简易弹道计算
|
||||
if (!endtime) {
|
||||
var zdsk, mzsk;
|
||||
var obj = await getDxInfoFromDb(dx, rwbs);
|
||||
var lb = obj["lb"];
|
||||
var mzdjlyt = obj["MZDJL_YT"];
|
||||
var mzdjlwh = obj["MZDJL_WH"];
|
||||
var dmjjsdyt = obj["DMJJSD_YT"];
|
||||
var dmjjsdwh = obj["DMJJSD_WH"];
|
||||
var t = 0;
|
||||
if (lb == "中距") {
|
||||
if (ts == "尾后") {
|
||||
if (dmjjsdwh <= 0) {
|
||||
}
|
||||
else {
|
||||
var x = jl - mzdjlyt;
|
||||
if (x < 0) {
|
||||
zdsk = starttime;
|
||||
}
|
||||
else {
|
||||
t = Math.round(x / dmjjsdwh);
|
||||
zdsk = starttime.add(t, 'seconds');
|
||||
}
|
||||
t = Math.round(jl / dmjjsdwh);
|
||||
mzsk = starttime.add(t, 'seconds');
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (dmjjsdyt <= 0) {
|
||||
}
|
||||
else {
|
||||
var x = jl - mzdjlyt;
|
||||
if (x < 0) {
|
||||
zdsk = starttime;
|
||||
}
|
||||
else {
|
||||
t = Math.round(x / dmjjsdyt);
|
||||
zdsk = starttime.add(t, 'seconds');
|
||||
}
|
||||
t = Math.round(jl / dmjjsdyt);
|
||||
mzsk = starttime.add(t, 'seconds');
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (ts == "尾后") {
|
||||
if (dmjjsdwh <= 0) {
|
||||
|
||||
}
|
||||
else {
|
||||
zdsk = starttime;
|
||||
t = Math.round(jl / dmjjsdwh);
|
||||
mzsk = starttime.add(t, 'seconds');
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (dmjjsdyt <= 0) {
|
||||
}
|
||||
else {
|
||||
zdsk = starttime;
|
||||
t = Math.round(jl / dmjjsdyt);
|
||||
mzsk = starttime.add(t, 'seconds');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
endtime = starttime.add(10, 'seconds');
|
||||
}
|
||||
|
||||
var startms = zerotime.diff(starttime, 'ms');
|
||||
var endms = zerotime.diff(endtime, 'ms');
|
||||
|
||||
sjmap["开始时间"] = startms;
|
||||
sjmap["结束时间"] = endms;
|
||||
sjmap["被攻击目标"] = mbdh;
|
||||
|
||||
//事件附加参数
|
||||
let csmap = {};
|
||||
var kkddhj = await getKkddFromDb(bdid, fsbh);
|
||||
if (kkddhj) {
|
||||
csmap["型号"] = dx;
|
||||
csmap["编号"] = strNewBH;
|
||||
csmap["阵营"] = zy;
|
||||
csmap["攻击目标"] = mbdh;
|
||||
csmap["装备类别"] = "空空弹";
|
||||
csmap["航迹"] = kkddhj;
|
||||
if (jhsk) {
|
||||
var jhms = zerotime.diff(jhsk, 'ms');
|
||||
|
||||
csmap["制导结束时刻"] = jhms + 1;
|
||||
csmap["攻击开始时刻"] = startms;
|
||||
csmap["结束时刻"] = endms;
|
||||
}
|
||||
|
||||
var num = kkddhj.size;
|
||||
endtime = starttime.add(num * 10, 'ms'); //导弹航迹精度为10ms
|
||||
var endms = zerotime.diff(endtime, 'ms');
|
||||
sjmap["结束时间"] = endms;
|
||||
}
|
||||
csmap["标识"] = qcdh + fsbh;
|
||||
csmap["攻击信息"] = gjxx;
|
||||
csmap["命中状态"] = mzyxx;
|
||||
csmap["发射机号"] = FS_JH;
|
||||
|
||||
sjmap["参数"] = csmap;
|
||||
//传入Gis的事件
|
||||
array.push(sjmap);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
//导弹类型信息
|
||||
getDxInfoFromDb = async (dx, rwbs) => {
|
||||
var params = ["lb", "MZDJL_YT", "MZDJL_WH", "DMJJSD_YT", "DMJJSD_WH"];
|
||||
var whereSql = "rwbs = '" + rwbs + "' and dx = '" + dx + "'";
|
||||
var data = await dataBase.queryTable("kzdk.rw_pggz_kkdcs", params, whereSql);
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
var obj = {};
|
||||
obj["lb"] = result[0];
|
||||
obj["MZDJL_YT"] = result[1];
|
||||
obj["MZDJL_WH"] = result[2];
|
||||
obj["DMJJSD_YT"] = result[3];
|
||||
obj["DMJJSD_WH"] = result[4];
|
||||
return obj;
|
||||
}
|
||||
|
||||
//空空导弹航迹
|
||||
getKkddFromDb = async (bdid, gjcx) => {
|
||||
var params = ["ddsj"];
|
||||
var whereSql = "jcid = '" + bdid + "' and gjcx = '" + gjcx + "'";
|
||||
var data = await dataBase.queryTable("kzdk.rw_kzdd_sj", params, whereSql);
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
if (result) {
|
||||
var lob = result[0];
|
||||
var buffer = await dataBase.readLob(lob);
|
||||
await lob.close();
|
||||
|
||||
var points = new Map();
|
||||
var size = PlanePoint.length();
|
||||
var count = buffer.length / size;
|
||||
for (let i = 0; i < count; i++) {
|
||||
var offset = i * size;
|
||||
const byte = buffer.subarray(offset, offset + size);
|
||||
PlanePoint.setBuffer(byte);
|
||||
|
||||
points.set(PlanePoint.get('iRelTime'), PlanePoint);
|
||||
}
|
||||
|
||||
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
||||
return sortMap;
|
||||
}
|
||||
}
|
||||
|
||||
//空地攻击事件
|
||||
getKdwqsyList = async (bdid, qrxg, rq) => {
|
||||
//查询空地武器攻击事件
|
||||
var params = ["gj_sk", "DMZYSK", "gjxg_qrmb", "dx", "fsbh"];
|
||||
var whereSql = "sjlx = '空地' and gjxg_qrxg = '" + qrxg + "' and bdid = '" + bdid + "'";
|
||||
var data = await dataBase.queryTable("kzdk.rw_fxjc_wqsy", params, whereSql);
|
||||
var array = [];
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
let sjmap = {};
|
||||
|
||||
var zerotime = moment(rq);
|
||||
var starttime = moment(result[0]);
|
||||
var endtime = moment(result[1]);
|
||||
var fsbh = result[4];
|
||||
var startms = zerotime.diff(starttime, 'ms');
|
||||
var endms = zerotime.diff(endtime, 'ms');
|
||||
|
||||
if (startms <= endms || endms == 0) {
|
||||
endms = startms + 10000;
|
||||
}
|
||||
|
||||
sjmap["开始时间"] = startms;
|
||||
sjmap["结束时间"] = endms;
|
||||
sjmap["被攻击目标"] = result[2];
|
||||
|
||||
//事件附加参数
|
||||
let csmap = {};
|
||||
csmap["弹型"] = result[3];
|
||||
csmap["攻击信息"] = bdid + fsbh;
|
||||
csmap["事件标识"] = bdid + fsbh;
|
||||
sjmap["参数"] = csmap;
|
||||
|
||||
//传入Gis的事件
|
||||
array.push(sjmap);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
//干扰事件
|
||||
getGrqkList = async (bdid, grlx, qcdh, rq) => {
|
||||
var params = [];
|
||||
var whereSql = "grlx = '" + grlx + "' and bdid = '" + bdid + "'";
|
||||
var data = await dataBase.queryTable("kzdk.rw_fxjc_grqk", params, whereSql);
|
||||
|
||||
var zerotime = moment(rq);
|
||||
|
||||
var array = [];
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
var grsd = moment(result[1]);
|
||||
var grjs = moment(result[4]);
|
||||
if (grjs < grsd) {
|
||||
grjs = grsd.add(30, 'seconds');
|
||||
}
|
||||
|
||||
var grSec = zerotime.diff(grsd, 'ms');
|
||||
var grjsSec = zerotime.diff(grjs, 'ms');
|
||||
var grfx = result[5];
|
||||
var tfsl = result[3];
|
||||
|
||||
let map = {};
|
||||
map["干扰时刻"] = grSec;
|
||||
if (grlx != "有源干扰" && !grjs) {
|
||||
grjsSec = grSec + 10 * 1000;
|
||||
}
|
||||
|
||||
map["干扰结束时刻"] = grjsSec;
|
||||
|
||||
let csMap = {};
|
||||
csMap["干扰方向"] = grfx;
|
||||
csMap["干扰类型"] = grlx;
|
||||
csMap["事件标识"] = qcdh + "-" + grSec + grlx + tfsl;
|
||||
csMap["编号"] = qcdh;
|
||||
map["参数"] = csMap;
|
||||
array.push(map);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
//加载地导部队数据和地导攻击事件
|
||||
exports.loadDDData = (req, res, next) => {
|
||||
var params = ["bdid", "dwjc", "zy", "wqxh", "zdzb_jd", "zdzb_wd", "zdzb_hb", "DYLB", "txbg_sk"];
|
||||
var whereSql = "RWBS = '" + req.query.RWBS + "' and RQ = '" + req.query.RQ + "' and BC = " + req.query.BC;
|
||||
dataBase.queryTable("kzdk.RW_DD_KJJL", params, whereSql).then(async (data) => {
|
||||
var array = [];
|
||||
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
console.log(result);
|
||||
|
||||
var bdid = result[0];
|
||||
var dwjc = result[1];
|
||||
var zy = result[2];
|
||||
var wqxh = result[3];
|
||||
var dylb = result[7];
|
||||
|
||||
let obj = {};
|
||||
obj["BDID"] = bdid;
|
||||
obj["型号"] = dwjc;
|
||||
obj["编号"] = dwjc;
|
||||
obj["阵营"] = zy;
|
||||
obj["经度"] = result[4];
|
||||
obj["纬度"] = result[5];
|
||||
obj["海拔"] = result[6];
|
||||
obj["装备类别"] = "地导阵地";
|
||||
obj["武器型号"] = wqxh;
|
||||
obj["名称"] = "地导阵地";
|
||||
obj["体系摧毁时刻"] = result[8];
|
||||
obj["体系摧毁文本信息"] = "体系摧毁时间为:" + moment(result[8]).format('HH:mm:ss');
|
||||
obj["体系摧毁文本颜色"] = "255,0,0,255";
|
||||
//obj["参数"] = "255,0,0,255";
|
||||
|
||||
if (dylb == "舰艇") {
|
||||
var hj = await getHjFromDb(obj, bdid, "航迹", 100, 1, "地导阵地");
|
||||
if (!hj) {
|
||||
hj = await getHjFromDb(obj, bdid, "航迹", 100, 0, "地导阵地");
|
||||
}
|
||||
}
|
||||
|
||||
//当前地导阵地所有地空攻击事件
|
||||
var dksjlist = await getDkwqsyList(bdid, zy, dwjc, req.query.RQ);
|
||||
|
||||
array.push(obj);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
res.json(util.getReturnData(1, '查询成功', array));
|
||||
});
|
||||
}
|
||||
|
||||
//查询地空武器攻击事件
|
||||
//地导武器发射
|
||||
getDkwqsyList = async (bdid, zy, dwjc, rq) => {
|
||||
var params = ["gjcx", "gjd", "qrxg_mbxh", "qrxg_qrmb", "sk", "qrxg_ywx", "ddbh"];
|
||||
var whereSql = "jd = '发射' and bdid = '" + bdid + "'";
|
||||
var data = await dataBase.queryTable("kzdk.rw_dd_wqgj", params, whereSql);
|
||||
var array = [];
|
||||
|
||||
var zerotime = moment(rq);
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
var starttime = moment(result[4]);
|
||||
var gjcx = result[0];
|
||||
var gjd = result[1];
|
||||
var qrxg_mbxh = result[2];
|
||||
var qrxg_qrmb = result[3];
|
||||
var qrxg_ywx = result[5];
|
||||
var ddbh = result[6];
|
||||
if (qrxg_ywx == "有效") {
|
||||
var endtime = await getDdwqzyList(bdid, gjcx, ddbh, gjd);
|
||||
if (endtime) {
|
||||
let sjmap = {};
|
||||
|
||||
var startms = zerotime.diff(starttime, 'ms');
|
||||
var endms = zerotime.diff(endtime, 'ms');
|
||||
if (endms == 0 || endms <= startms) {
|
||||
endms = startms + 10000;
|
||||
}
|
||||
//事件附加参数
|
||||
let csmap = {};
|
||||
var Dkddhj = await getDkddFromDb(bdid, gjcx, ddbh);
|
||||
if (Dkddhj) {
|
||||
var wqxh = await getWqXhFromDb(bdid);
|
||||
if (wqxh) {
|
||||
csmap["型号"] = wqxh;
|
||||
}
|
||||
csmap["编号"] = bdid + "-" + gjcx + "-" + ddbh;
|
||||
csmap["阵营"] = zy;
|
||||
csmap["攻击目标"] = qrxg_qrmb;
|
||||
csmap["装备类别"] = "地空弹";
|
||||
csmap["航迹"] = Dkddhj;
|
||||
}
|
||||
csmap["攻击信息"] = wqxh + "/" + dwjc + "-" + qrxg_qrmb + "-" + gjcx + "-" + ddbh;
|
||||
csmap["命中状态"] = "命中";
|
||||
csmap["事件标识"] = bdid + gjcx + ddbh;
|
||||
|
||||
sjmap["开始时间"] = startms;
|
||||
sjmap["结束时间"] = endms;
|
||||
sjmap["被攻击目标"] = qrxg_qrmb;
|
||||
sjmap["参数"] = csmap;
|
||||
|
||||
//传入Gis的事件
|
||||
array.push(sjmap);
|
||||
}
|
||||
}
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
//地导武器遭遇
|
||||
getDdwqzyList = async (bdid, gjcx, ddbh, gjd) => {
|
||||
var params = ["sk", "qrxg_ywx"];
|
||||
var whereSql = "jd = '遭遇' and bdid = '" + bdid + "' and gjcx = " + gjcx + " and ddbh = " + ddbh + " and gjd = " + gjd;
|
||||
var data = await dataBase.queryTable("kzdk.rw_dd_wqgj", params, whereSql);
|
||||
var array = [];
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
var sk = moment(result[0]);
|
||||
var qrxg_ywx = result[1];
|
||||
if (qrxg_ywx == "有效") {
|
||||
return sk;
|
||||
}
|
||||
result = await data.getRow();
|
||||
}
|
||||
}
|
||||
|
||||
//地空导弹轨迹
|
||||
getDkddFromDb = async (bdid, gjcx, ddbh) => {
|
||||
var params = ["ddsj"];
|
||||
var whereSql = "bdid = '" + bdid + "' and gjcx = " + gjcx + " and ddbh = " + ddbh;
|
||||
var data = await dataBase.queryTable("kzdk.RW_DDDD_SJ", params, whereSql);
|
||||
var array = [];
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
if (result) {
|
||||
var lob = result[0];
|
||||
var buffer = await dataBase.readLob(lob);
|
||||
await lob.close();
|
||||
|
||||
var points = new Map();
|
||||
var size = PlanePoint.length();
|
||||
var count = buffer.length / size;
|
||||
for (let i = 0; i < count; i++) {
|
||||
var offset = i * size;
|
||||
const byte = buffer.subarray(offset, offset + size);
|
||||
PlanePoint.setBuffer(byte);
|
||||
|
||||
points.set(PlanePoint.get('iRelTime'), PlanePoint);
|
||||
}
|
||||
|
||||
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
||||
return sortMap;
|
||||
}
|
||||
}
|
||||
|
||||
//查询地导武器型号
|
||||
getWqXhFromDb = async (bdid) => {
|
||||
var params = ["WQXH"];
|
||||
var whereSql = "bdid = '" + bdid + "'";
|
||||
var data = await dataBase.queryTable("kzdk.RW_DD_KJJL", params, whereSql);
|
||||
var array = [];
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
if (result) {
|
||||
var WQXH = result[0];
|
||||
return WQXH;
|
||||
}
|
||||
}
|
||||
|
||||
//加载地面目标名称和坐标(包含机动目标和打击目标)
|
||||
// exports.loadDMMBData = async (req, res, next) => {
|
||||
// await loadDJMBData(req, res, next);
|
||||
// await loadJDMBData(req, res, next);
|
||||
// }
|
||||
|
||||
//加载打击目标数据
|
||||
exports.loadDJMBData = (req, res, next) => {
|
||||
var params = ["mbmc", "mbbh", "mbjd", "mbwd", "mbgd", "ssdw", "mblx"];
|
||||
var whereSql = "rwbs = '" + req.query.RWBS + "'";
|
||||
dataBase.queryTable("kzdk.rw_djmb", params, whereSql).then(async (data) => {
|
||||
var array = [];
|
||||
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
console.log(result);
|
||||
|
||||
var dwjc = result[0];
|
||||
var zy = result[5];
|
||||
|
||||
let obj = {};
|
||||
obj["型号"] = dwjc;
|
||||
obj["编号"] = result[1];
|
||||
obj["阵营"] = zy;
|
||||
obj["经度"] = result[2];
|
||||
obj["纬度"] = result[3];
|
||||
obj["海拔"] = result[4];
|
||||
obj["装备类别"] = "打击目标";
|
||||
//obj["参数"] = "255,0,0,255";
|
||||
|
||||
array.push(obj);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
res.json(util.getReturnData(1, '查询成功', array));
|
||||
});
|
||||
};
|
||||
|
||||
//加载机动目标数据
|
||||
exports.loadJDMBData = (req, res, next) => {
|
||||
var params = ["mbmc", "mbbh", "mbjd", "mbwd", "mbgd", "ssdw", "mblx", "ckqx"];
|
||||
var whereSql = "rwbs = '" + req.query.RWBS + "' and rwrq = '" + req.query.RQ + "' and bc = " + req.query.BC;
|
||||
dataBase.queryTable("kzdk.rw_jdmb", params, whereSql).then(async (data) => {
|
||||
var array = [];
|
||||
|
||||
// 从结果集中获取一行
|
||||
var result = await data.getRow();
|
||||
while (result) {
|
||||
console.log(result);
|
||||
|
||||
var dwjc = result[0];
|
||||
var zy = result[5];
|
||||
|
||||
let obj = {};
|
||||
obj["型号"] = dwjc;
|
||||
obj["编号"] = result[1];
|
||||
obj["阵营"] = zy;
|
||||
obj["经度"] = result[2];
|
||||
obj["纬度"] = result[3];
|
||||
obj["海拔"] = result[4];
|
||||
obj["装备类别"] = "机动目标";
|
||||
//obj["参数"] = "255,0,0,255";
|
||||
|
||||
array.push(obj);
|
||||
|
||||
result = await data.getRow();
|
||||
}
|
||||
|
||||
res.json(util.getReturnData(1, '查询成功', array));
|
||||
});
|
||||
};
|
123
controller/socket.js
Normal file
123
controller/socket.js
Normal file
@ -0,0 +1,123 @@
|
||||
const WebSocket = require('ws');
|
||||
const util = require("../util/common");
|
||||
var { entityHJ, simuStatus } = require("../util/variable");
|
||||
|
||||
const deltaT = 1000;
|
||||
|
||||
const createServer = () => {
|
||||
// 创建WebSocket服务器
|
||||
const wss = new WebSocket.Server({ port: 9000 });
|
||||
|
||||
wss.on('connection', function connection(ws) {
|
||||
console.log('新客户端已连接');
|
||||
|
||||
// 定时发送消息
|
||||
const intervalId = setInterval(() => {
|
||||
var simType = simuStatus["运行状态"];
|
||||
if (simType == 1) {
|
||||
var currRadio = simuStatus["仿真倍速"];
|
||||
var currTime = simuStatus["当前时间"];
|
||||
if (entityHJ.size > 0) {
|
||||
var array = [];
|
||||
for (const [key, value] of entityHJ) {
|
||||
const keysArray = [...value.keys()];
|
||||
var indexKey = util.lower_bound(keysArray, currTime);
|
||||
if (indexKey < keysArray.length) {
|
||||
let point = {};
|
||||
var second = keysArray[indexKey];
|
||||
if (indexKey == 0) {
|
||||
point = value.get(second);
|
||||
}
|
||||
else {
|
||||
var first = keysArray[indexKey - 1];
|
||||
var delta_time = second - first;
|
||||
if (delta_time == 0.0) {
|
||||
point = value.get(first);
|
||||
}
|
||||
else {
|
||||
var pointfirst = value.get(first);
|
||||
var pointsecond = value.get(second);
|
||||
|
||||
point["空速"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["空速"],
|
||||
pointsecond["空速"]);
|
||||
|
||||
point["升降率"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["升降率"],
|
||||
pointsecond["升降率"]);
|
||||
|
||||
point["过载"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["过载"],
|
||||
pointsecond["过载"]);
|
||||
|
||||
point["马赫数"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["马赫数"],
|
||||
pointsecond["马赫数"]);
|
||||
|
||||
point["经度"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["经度"],
|
||||
pointsecond["经度"]);
|
||||
|
||||
point["纬度"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["纬度"],
|
||||
pointsecond["纬度"]);
|
||||
|
||||
point["海拔"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["海拔"],
|
||||
pointsecond["海拔"]);
|
||||
|
||||
point["航向角"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["航向角"],
|
||||
pointsecond["航向角"]);
|
||||
|
||||
point["俯仰角"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["俯仰角"],
|
||||
pointsecond["俯仰角"]);
|
||||
|
||||
point["倾斜角"] = util.interpolate(
|
||||
(currTime - first) / delta_time,
|
||||
pointfirst["倾斜角"],
|
||||
pointsecond["倾斜角"]);
|
||||
}
|
||||
}
|
||||
|
||||
point["BDID"] = key;
|
||||
array.push(point);
|
||||
}
|
||||
}
|
||||
|
||||
const message = {
|
||||
time: currTime,
|
||||
data: array
|
||||
};
|
||||
ws.send(JSON.stringify(message)); // 发送JSON格式的消息
|
||||
}
|
||||
|
||||
var accTime = deltaT * currRadio;
|
||||
currTime += accTime;
|
||||
|
||||
simuStatus["当前时间"] = currTime;
|
||||
}
|
||||
|
||||
}, deltaT); // 每5秒发送一次消息
|
||||
|
||||
// 可以在这里添加更多的逻辑,例如当客户端关闭连接时清除定时器等
|
||||
ws.on('close', () => {
|
||||
clearInterval(intervalId); // 清除定时器,防止内存泄漏
|
||||
console.log('客户端已断开连接');
|
||||
});
|
||||
});
|
||||
|
||||
console.log('WebSocket服务器正在运行在ws://localhost:9000');
|
||||
}
|
||||
|
||||
module.exports = createServer()
|
1249
package-lock.json
generated
Normal file
1249
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
20
package.json
Normal file
20
package.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "dmserve",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "node ./bin/www"
|
||||
},
|
||||
"dependencies": {
|
||||
"cookie-parser": "~1.4.4",
|
||||
"debug": "~2.6.9",
|
||||
"dmdb": "^1.0.33801",
|
||||
"express": "~4.16.1",
|
||||
"http-errors": "~1.6.3",
|
||||
"jade": "~1.11.0",
|
||||
"moment-timezone": "^0.5.47",
|
||||
"morgan": "~1.9.1",
|
||||
"struct": "^0.0.12",
|
||||
"ws": "^8.18.1"
|
||||
}
|
||||
}
|
8
public/stylesheets/style.css
Normal file
8
public/stylesheets/style.css
Normal file
@ -0,0 +1,8 @@
|
||||
body {
|
||||
padding: 50px;
|
||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #00B7FF;
|
||||
}
|
21
routes/Mission.js
Normal file
21
routes/Mission.js
Normal file
@ -0,0 +1,21 @@
|
||||
var express = require('express');
|
||||
var router = express.Router();
|
||||
|
||||
var { loadHKBData, loadDDData, loadDJMBData, loadJDMBData } = require('../controller/Mission');
|
||||
|
||||
//航空兵数据
|
||||
router.get('/HKBData', loadHKBData);
|
||||
|
||||
//地导部队数据
|
||||
router.get('/DDData', loadDDData);
|
||||
|
||||
//地面目标数据
|
||||
// router.get('/DMMBData', loadDMMBData);
|
||||
|
||||
//打击目标数据
|
||||
router.get('/DJMBData', loadDJMBData);
|
||||
|
||||
//机动目标数据
|
||||
router.get('/JDMBData', loadJDMBData);
|
||||
|
||||
module.exports = router;
|
24
routes/simu.js
Normal file
24
routes/simu.js
Normal file
@ -0,0 +1,24 @@
|
||||
var express = require('express');
|
||||
var router = express.Router();
|
||||
const util = require("../util/common");
|
||||
var { simuStatus } = require("../util/variable");
|
||||
|
||||
router.post('/SimuType', function (req, res, next) {
|
||||
const simuType = req.body.simuType;
|
||||
simuStatus["运行状态"] = simuType;
|
||||
res.json(util.getReturnData(1, '修改运行状态成功'));
|
||||
});
|
||||
|
||||
router.post('/SimuRadio', function (req, res, next) {
|
||||
const simuRadio = req.body.simuRadio;
|
||||
simuStatus["仿真倍速"] = simuRadio;
|
||||
res.json(util.getReturnData(1, '修改仿真倍速成功'));
|
||||
});
|
||||
|
||||
router.post('/SimuTime', function (req, res, next) {
|
||||
const simuTime = req.body.simuTime;
|
||||
simuStatus["当前时间"] = simuTime;
|
||||
res.json(util.getReturnData(1, '修改仿真当前时间成功'));
|
||||
});
|
||||
|
||||
module.exports = router;
|
70
util/common.js
Normal file
70
util/common.js
Normal file
@ -0,0 +1,70 @@
|
||||
let util = {};
|
||||
util.getReturnData = (code, message = '', data = []) => {
|
||||
//保证数据格式
|
||||
if (!data) {
|
||||
data = [];
|
||||
}
|
||||
return { code: code, message: message, data: data };
|
||||
}
|
||||
|
||||
//转换为格式化时间
|
||||
util.getLocalDate = (t) => {
|
||||
let date = new Date(parseInt(t));
|
||||
return date.getFullYear() + "-" + (parseInt(date.getMonth()) + 1) + "-" +
|
||||
date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" +
|
||||
date.getSeconds();
|
||||
}
|
||||
|
||||
/**
|
||||
* 寻找>=target的最小下标
|
||||
* @param {number[]} nums
|
||||
* @param {number} target
|
||||
* @return {number}
|
||||
*/
|
||||
util.lower_bound = (nums, target) => {
|
||||
let first = 0;
|
||||
let len = nums.length;
|
||||
|
||||
while (len > 0) {
|
||||
let half = len >> 1;
|
||||
let middle = first + half;
|
||||
if (nums[middle] < target) {
|
||||
first = middle + 1;
|
||||
len = len - half - 1;
|
||||
} else {
|
||||
len = half;
|
||||
}
|
||||
}
|
||||
return first;
|
||||
}
|
||||
|
||||
/**
|
||||
* 寻找>target的最小下标
|
||||
* @param {number[]} nums
|
||||
* @param {number} target
|
||||
* @return {number}
|
||||
*/
|
||||
util.upper_bound = (nums, target) => {
|
||||
let first = 0;
|
||||
let len = nums.length;
|
||||
|
||||
while (len > 0) {
|
||||
let half = len >> 1;
|
||||
let middle = first + half;
|
||||
if (nums[middle] > target) {
|
||||
len = half;
|
||||
} else {
|
||||
first = middle + 1;
|
||||
len = len - half - 1;
|
||||
}
|
||||
}
|
||||
return first;
|
||||
}
|
||||
|
||||
util.interpolate = (ratio, first, second) => {
|
||||
let one_minus_ratio = 1.0 - ratio;
|
||||
let data = first * one_minus_ratio + second * ratio;
|
||||
return data;
|
||||
}
|
||||
|
||||
module.exports = util;
|
102
util/dmDB.js
Normal file
102
util/dmDB.js
Normal file
@ -0,0 +1,102 @@
|
||||
//引入 dmdb 包
|
||||
var db = require('dmdb');
|
||||
var fs = require('fs');
|
||||
const dbConfig = require("../config/db.json").db_config;
|
||||
var pool, conn;
|
||||
let dataBase = {};
|
||||
|
||||
//创建连接池
|
||||
async function createPool() {
|
||||
try {
|
||||
var connect = "dm://" + dbConfig.username + ":" + dbConfig.password + "\@" + dbConfig.host + ":" + dbConfig.port + "?autoCommit=false&loginEncrypt=false";
|
||||
console.log(connect);
|
||||
|
||||
return db.createPool({
|
||||
connectString: connect,
|
||||
poolMax: 10,
|
||||
poolMin: 1
|
||||
});
|
||||
} catch (err) {
|
||||
throw new Error("createPool error: " + err.message);
|
||||
}
|
||||
}
|
||||
|
||||
//获取数据库连接
|
||||
async function getConnection() {
|
||||
try {
|
||||
return pool.getConnection();
|
||||
} catch (err) {
|
||||
throw new Error("getConnection error: " + err.message);
|
||||
}
|
||||
}
|
||||
|
||||
//读取数据库返回的 Lob 对象
|
||||
dataBase.readLob = (lob) => {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var blobData = Buffer.alloc(0);
|
||||
var totalLength = 0;
|
||||
lob.on('data', function (chunk) {
|
||||
totalLength += chunk.length;
|
||||
blobData = Buffer.concat([blobData, chunk], totalLength);
|
||||
});
|
||||
lob.on('error', function (err) {
|
||||
reject(err);
|
||||
});
|
||||
lob.on('end', function () {
|
||||
resolve(blobData);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
dataBase.initDB = async () => {
|
||||
pool = await createPool();
|
||||
conn = await getConnection();
|
||||
}
|
||||
|
||||
dataBase.closeDB = async () => {
|
||||
try {
|
||||
await conn.close();
|
||||
await pool.close();
|
||||
} catch (err) {
|
||||
throw new Error("closeDB error: " + err.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询表中字段
|
||||
* @param tableName 数据库表名
|
||||
* @param params 需要查询的字段
|
||||
* @param whereSql 查询条件
|
||||
*/
|
||||
dataBase.queryTable = async (tableName, params, whereSql) => {
|
||||
try {
|
||||
var sql = "";
|
||||
if (params != "") {
|
||||
for (let index in params) {
|
||||
if (sql != "") {
|
||||
sql += ", ";
|
||||
}
|
||||
sql += params[index];
|
||||
}
|
||||
}
|
||||
else {
|
||||
sql = "*";
|
||||
}
|
||||
|
||||
var sql = "SELECT " + sql + " FROM " + tableName;
|
||||
|
||||
if (whereSql != "") {
|
||||
sql += " WHERE " + whereSql;
|
||||
}
|
||||
|
||||
console.log(sql);
|
||||
|
||||
var result = await conn.execute(sql, [], { resultSet: true });
|
||||
var resultSet = result.resultSet;
|
||||
return resultSet;
|
||||
} catch (err) {
|
||||
throw new Error("queryTable error: " + err.message);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = dataBase;
|
30
util/variable.js
Normal file
30
util/variable.js
Normal file
@ -0,0 +1,30 @@
|
||||
var Struct = require('struct');
|
||||
|
||||
exports.PlanePoint = Struct()
|
||||
.word32Sle('iNum')
|
||||
.word32Sle('iRelTime')
|
||||
.doublele('dTimestamp')
|
||||
.doublele('dLongitude')
|
||||
.doublele('dLatitude')
|
||||
.doublele('dHxj')
|
||||
.doublele('dFyj')
|
||||
.doublele('dQxj')
|
||||
.doublele('dAlitidude')
|
||||
.doublele('dAirspeed')
|
||||
.doublele('dSjl')
|
||||
.doublele('dOverload')
|
||||
.doublele('dMach');
|
||||
|
||||
exports.entityHJ = new Map();
|
||||
|
||||
exports.entityEvent = new Map();
|
||||
|
||||
exports.simuStatus = {
|
||||
"运行状态": 0,
|
||||
"开始时间": -1,
|
||||
"结束时间": -1,
|
||||
"参考时间": "",
|
||||
"当前时间": 0,
|
||||
"仿真倍速": 1
|
||||
}
|
||||
|
6
views/error.jade
Normal file
6
views/error.jade
Normal file
@ -0,0 +1,6 @@
|
||||
extends layout
|
||||
|
||||
block content
|
||||
h1= message
|
||||
h2= error.status
|
||||
pre #{error.stack}
|
5
views/index.jade
Normal file
5
views/index.jade
Normal file
@ -0,0 +1,5 @@
|
||||
extends layout
|
||||
|
||||
block content
|
||||
h1= title
|
||||
p Welcome to #{title}
|
7
views/layout.jade
Normal file
7
views/layout.jade
Normal file
@ -0,0 +1,7 @@
|
||||
doctype html
|
||||
html
|
||||
head
|
||||
title= title
|
||||
link(rel='stylesheet', href='/stylesheets/style.css')
|
||||
body
|
||||
block content
|
112
说明.txt
Normal file
112
说明.txt
Normal file
@ -0,0 +1,112 @@
|
||||
WebSocket监听端口为9000
|
||||
http 监听端口为3000
|
||||
|
||||
get
|
||||
http://localhost:3000/Mission/HKBData?RWBS=测试2019&RQ=2019-11-04&BC=1 //航空兵数据(后面3个参数是从界面选择的)
|
||||
{
|
||||
"code": 1,
|
||||
"message": "查询成功",
|
||||
"data": [
|
||||
{
|
||||
"BDID": "{8D08C120-CE62-452F-AD52-3DB88EED97CE}",
|
||||
"型号": "F-14",
|
||||
"机号": "69165",
|
||||
"编号": "8505",
|
||||
"阵营": "红军",
|
||||
"单位简称": "K85L",
|
||||
"单位代码": "10085",
|
||||
"数据来源": null,
|
||||
"后舱代号": "8512",
|
||||
"后舱姓名": "李 勇",
|
||||
"体系摧毁时刻": "2019-11-04T09:18:35.000Z",
|
||||
"装备类别": "飞机",
|
||||
"执行任务": "对地突击",
|
||||
"体系摧毁文本信息": "体系摧毁时间为:17:18:35",
|
||||
"体系摧毁文本颜色": "255,0,0,255",
|
||||
"经度": 106.004173,
|
||||
"纬度": 38.466488,
|
||||
"海拔": 1117,
|
||||
"航向角": 99.99,
|
||||
"俯仰角": -1.47,
|
||||
"倾斜角": -1.38
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
http://localhost:3000/Mission/DDData?RWBS=测试2019&RQ=2019-11-04&BC=1 //地导部队数据
|
||||
{
|
||||
"code": 1,
|
||||
"message": "查询成功",
|
||||
"data": [
|
||||
{
|
||||
"BDID": "{96B781E2-E633-4176-82C2-6EF0750C1A0B}",
|
||||
"型号": "D7",
|
||||
"编号": "D7",
|
||||
"阵营": "红军",
|
||||
"经度": 104.1703,
|
||||
"纬度": 40.1789,
|
||||
"海拔": 1426,
|
||||
"装备类别": "地导阵地",
|
||||
"武器型号": "BZ3",
|
||||
"名称": "地导阵地",
|
||||
"体系摧毁时刻": null,
|
||||
"体系摧毁文本信息": "体系摧毁时间为:Invalid date",
|
||||
"体系摧毁文本颜色": "255,0,0,255"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
http://localhost:3000/Mission/DJMBData?RWBS=测试2019&RQ=2019-11-04&BC=1 //打击目标数据
|
||||
{
|
||||
"code": 1,
|
||||
"message": "查询成功",
|
||||
"data": [
|
||||
{
|
||||
"型号": "桥梁目标",
|
||||
"编号": "桥梁目标",
|
||||
"阵营": "蓝军",
|
||||
"经度": 100.6858,
|
||||
"纬度": 40.6932,
|
||||
"海拔": 0,
|
||||
"装备类别": "打击目标"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
http://localhost:3000/Mission/JDMBData?RWBS=测试2019&RQ=2019-11-04&BC=1 //机动目标数据
|
||||
{
|
||||
"code": 1,
|
||||
"message": "查询成功",
|
||||
"data": [
|
||||
{
|
||||
"型号": "假阵地1",
|
||||
"编号": "假阵地1",
|
||||
"阵营": "蓝军",
|
||||
"经度": 100.604,
|
||||
"纬度": 40.7526,
|
||||
"海拔": null,
|
||||
"装备类别": "机动目标"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
post
|
||||
//运行状态
|
||||
http://localhost:3000/Simu/SimuType
|
||||
{
|
||||
"simuType":1 (1:开始; 0:其他)
|
||||
}
|
||||
|
||||
//设置当前仿真时间
|
||||
http://localhost:3000/Simu/SimuTime
|
||||
{
|
||||
"simuTime":1
|
||||
}
|
||||
|
||||
//仿真倍速
|
||||
http://localhost:3000/Simu/SimuRadio
|
||||
{
|
||||
"simuRadio":1
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user