780 lines
26 KiB
JavaScript
780 lines
26 KiB
JavaScript
const util = require("../util/common");
|
|
let dataBase = require("../util/dmDB");
|
|
const moment = require('moment-timezone');
|
|
var { PlanePoint, entityHJ, entityEvent, 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 = moment(starttime).add(t, 'seconds');
|
|
}
|
|
t = Math.round(jl / dmjjsdwh);
|
|
mzsk = moment(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 = moment(starttime).add(t, 'seconds');
|
|
}
|
|
t = Math.round(jl / dmjjsdyt);
|
|
mzsk = moment(starttime).add(t, 'seconds');
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (ts == "尾后") {
|
|
if (dmjjsdwh <= 0) {
|
|
}
|
|
else {
|
|
zdsk = starttime;
|
|
t = Math.round(jl / dmjjsdwh);
|
|
mzsk = moment(starttime).add(t, 'seconds');
|
|
}
|
|
}
|
|
else {
|
|
if (dmjjsdyt <= 0) {
|
|
}
|
|
else {
|
|
zdsk = starttime;
|
|
t = Math.round(jl / dmjjsdyt);
|
|
mzsk = moment(starttime).add(t, 'seconds');
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!mzsk) {
|
|
endtime = moment(starttime).add(10, 'seconds');
|
|
}
|
|
else {
|
|
endtime = mzsk;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
endtime = moment(starttime).add(10, 'seconds');
|
|
}
|
|
|
|
var startms = starttime.diff(zerotime, 'ms');
|
|
var endms = endtime.diff(zerotime, '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 = jhsk.diff(zerotime, 'ms');
|
|
|
|
csmap["制导结束时刻"] = jhms + 1;
|
|
csmap["攻击开始时刻"] = startms;
|
|
csmap["结束时刻"] = endms;
|
|
}
|
|
|
|
var num = kkddhj.size;
|
|
endtime = moment(starttime).add(num * 10, 'ms'); //导弹航迹精度为10ms
|
|
endms = endtime.diff(zerotime, 'ms');
|
|
sjmap["结束时间"] = endms;
|
|
}
|
|
csmap["标识"] = qcdh + fsbh;
|
|
csmap["攻击信息"] = gjxx;
|
|
csmap["命中状态"] = mzyxx;
|
|
csmap["发射机号"] = FS_JH;
|
|
|
|
sjmap["参数"] = csmap;
|
|
//传入Gis的事件
|
|
array.push(sjmap);
|
|
|
|
let eventMap = entityEvent.get(bdid);
|
|
if (!eventMap) {
|
|
eventMap = new Map();
|
|
}
|
|
{
|
|
let event = {};
|
|
event["事件"] = "空空攻击事件";
|
|
event["类型"] = "开始";
|
|
event["参数"] = csmap;
|
|
eventMap.set(startms, event);
|
|
|
|
}
|
|
{
|
|
let event = {};
|
|
event["事件"] = "空空攻击事件";
|
|
event["类型"] = "结束";
|
|
event["参数"] = csmap;
|
|
eventMap.set(endms, event);
|
|
}
|
|
entityEvent.set(bdid, eventMap);
|
|
|
|
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);
|
|
|
|
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');
|
|
|
|
points.set(PlanePoint.get('iRelTime'), pt);
|
|
}
|
|
|
|
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 = starttime.diff(zerotime, 'ms');
|
|
var endms = endtime.diff(zerotime, '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);
|
|
|
|
let eventMap = entityEvent.get(bdid);
|
|
if (!eventMap) {
|
|
eventMap = new Map();
|
|
}
|
|
{
|
|
let event = {};
|
|
event["事件"] = "空地攻击事件";
|
|
event["类型"] = "开始";
|
|
event["参数"] = csmap;
|
|
eventMap.set(startms, event);
|
|
|
|
}
|
|
{
|
|
let event = {};
|
|
event["事件"] = "空地攻击事件";
|
|
event["类型"] = "结束";
|
|
event["参数"] = csmap;
|
|
eventMap.set(endms, event);
|
|
}
|
|
entityEvent.set(bdid, eventMap);
|
|
|
|
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 = moment(grsd).add(30, 'seconds');
|
|
}
|
|
|
|
var grSec = grsd.diff(zerotime, 'ms');
|
|
var grjsSec = grjs.diff(zerotime, '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);
|
|
|
|
let eventMap = entityEvent.get(bdid);
|
|
if (!eventMap) {
|
|
eventMap = new Map();
|
|
}
|
|
var eventType;
|
|
if (grlx == "红外弹") {
|
|
eventType = "红外弹干扰事件";
|
|
} else if (grlx == "箔条弹") {
|
|
eventType = "箔条弹干扰事件";
|
|
} else if (grlx == "有源干扰") {
|
|
eventType = "有源干扰事件";
|
|
} else if (grlx == "机载雷达") {
|
|
eventType = "机载雷达事件";
|
|
}
|
|
{
|
|
let event = {};
|
|
event["事件"] = eventType;
|
|
event["类型"] = "开始";
|
|
event["参数"] = csMap;
|
|
eventMap.set(grSec, event);
|
|
|
|
}
|
|
{
|
|
let event = {};
|
|
event["事件"] = eventType;
|
|
event["类型"] = "结束";
|
|
event["参数"] = csMap;
|
|
eventMap.set(grjsSec, event);
|
|
}
|
|
entityEvent.set(bdid, eventMap);
|
|
|
|
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);
|
|
|
|
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');
|
|
|
|
points.set(PlanePoint.get('iRelTime'), pt);
|
|
}
|
|
|
|
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));
|
|
});
|
|
}; |