You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

380 lines
13 KiB

var RealtimePanel = function (parent) {
this.Parent = parent;
this.ResultList = new ResultList(this, '#realtime-result-list');
this.TaskInfo = null;
this.TaskStateCheckTimer = null;
this.PullGroundData = null;
this.PreValues = {
Longitude: 0,
Latitude: 0,
Height: 0
};
this.Startup = function () {
this.ResultList.Startup();
this.InitReleaseTime();
this.OnFileOnchange('#param-upload');
this.OnFileOnchange('#file-input');
$('#calc-btn').on('click', this.OnCalcButtonClick.bind(this));
$('#reset-btn').on('click', this.OnResetButtonClick.bind(this));
$('#add-label').on('click', this.OnAddLabelButtonClick.bind(this));
$('#control-switch a').on('click', this.OnSwitchButtonClick.bind(this));
};
this.InitReleaseTime = function () {
$('#release-date').datetimebox({
panelWidth: 190,
panelHeight: 230,
panelAlign: 'right',
showSeconds: false,
currentText: '现在'
});
};
this.OnSwitchButtonClick = function (event) {
if ($(event.target).is('a'))
$(event.target).parent().toggleClass('control-switch-on');
else
$(event.target).toggleClass('control-switch-on');
let isPullDown = $("#control-switch").hasClass("control-switch-on");
this.Parent.Map.IsPullGround(isPullDown);
};
this.SwitchValues = function (isPullDown) {
let longitude = $('#longitude').val();
let latitude = $('#latitude').val();
let height = $('#height').val();
if (isPullDown) {
var data = this.PullGroundData[this.PullGroundData.length - 1];
$('#longitude').val(data[0]);
$('#latitude').val(data[1]);
$('#height').val(data[2]);
}
else {
$('#longitude').val(this.PreValues.Longitude);
$('#latitude').val(this.PreValues.Latitude);
$('#height').val(this.PreValues.Height);
}
this.PreValues.Longitude = longitude;
this.PreValues.Latitude = latitude;
this.PreValues.Height = height;
};
this.OnFileOnchange = function (id) {
var uploader = $(id);
uploader.fileinput({
language: 'zh',
uploadUrl: '/Beijing/UploadFile',
showUpload: false,
showRemove: false,
showCancel: false,
showCaption: false,
showPreview: false,
uploadClass: "btn btn-primary"
});
uploader.on('change', function (event) {
uploader.fileinput("upload");
$('.kv-upload-progress').hide();
});
if (id === '#param-upload') {
uploader.on('fileuploaded', function (event, data, previewId, index) {
this.Parent.Map.ClearLiveLayer('compare-layer');
var pullGroundData = [];
$(data.response).each(function (index, point) {
pullGroundData.push([point.Longitude, point.Latitude, point.Height, moment(point.DateTime).format("YYYYMMDD_HHmmss")]);
}.bind(this));
this.PullGroundData = pullGroundData;
var value = this.PullGroundData[this.PullGroundData.length - 1];
var time = moment(value[3], "YYYYMMDD_HHmmss");
$('#longitude').val(value[0]);
$('#latitude').val(value[1]);
$('#height').val(value[2]);
$("#release-date").datetimebox('setValue', moment(time).format('YYYY/MM/DD HH:mm'));
}.bind(this));
} else {
uploader.on('fileuploaded', function (event, data, previewId, index) {
var marks = [];
var newArray = [];
data.response.forEach(function (item, index) {
marks.push(item.Longitude, item.Latitude, moment(item.DateTime).format("YYYYMMDD_HHmmss"));
});
$(data.response).each(function (index, point) {
newArray.push([point.Longitude, point.Latitude, point.Height, moment(point.DateTime).format("YYYYMMDD_HHmmss")]);
});
this.PullGroundData = newArray;
this.Parent.Map.LoadRealTimeData('compare-layer', newArray);
}.bind(this));
}
$('.hidden-xs').text('上传...');
$('.hidden-xs').addClass('realtime-btn');
$('.hidden-xs').css({
'marginLeft': '-2px',
'position': 'absolute',
'text-align': 'center',
'float': 'left'
});
$('.file-input').css({
'width': '86px',
'float': 'left'
});
$('.live-file .hidden-xs').text('实况数据...');
};
this.OnCalcButtonClick = function () {
// Close details
this.ResultList.Reset();
// Submit task
this.TaskInfo = {
Id: this.CreateId(),
Result: null,
CreateTime: new Date()
};
this.SubmitTask(this.TaskInfo.Id);
};
this.OnResetButtonClick = function () {
this.Reboot('success', null);
};
this.OnAddLabelButtonClick = function () {
var value = $('#label-input').val().trim();
if (value.length === 0)
return;
$.ajax({
type: "POST",
dataType: 'json',
data: {
userId: parseInt($('#user-info').attr('userid')),
taskId: this.TaskInfo.Id,
name: value
},
url: '/Beijing/AddTag',
success: function (result) {
var label = $('<a href="javascript:;" tagId="{0}">{1}<span class="clear-btn"><i></i></span></a>'.format(result, value));
label.on('click', this.SetActiveLabel.bind(this));
label.find('.clear-btn').on('click', this.RemoveLabel.bind(this));
$('#realtime-slider').find('.label-list:first').append(label);
this.Relayout();
}.bind(this)
});
};
this.CheckTaskState = function () {
$.ajax({
type: "GET",
dataType: 'json',
url: 'http://{0}/bj/check?num={1}'.format(Config.ApiRoot, this.TaskInfo.Id),
success: function (result) {
this.TaskInfo.Result = result;
if (result.code === 200) {
this.AddTask(this.TaskInfo.Id);
this.LoadData(result);
this.TaskStopped();
}
else if (this.IsTaskTimeout()) {
this.Reboot("error", "任务计算已超时,请重新提交计算。");
this.TaskStopped();
}
}.bind(this)
});
};
this.LoadData = function (result) {
$.getJSON("http://{0}/bj/getresult/{1}.json".format(Config.ApiRoot, result.num), function (data) {
var param = this.GetTaskParams(this.TaskInfo.Id);
this.Parent.Map.LoadAverageData('realtime-layer', {
ReleaseTime: param.releaseTime,
Longitude: param.longitude,
Latitude: param.latitude,
Height: param.height
}, data);
this.Parent.Map.SetForecastData(data);
this.ResultList.SetData('realtime-layer', [param.latitude, param.longitude], data);
}.bind(this));
};
this.Reboot = function (type, text) {
$.ajax({
type: "GET",
dataType: 'json',
url: 'http://{0}/bj/reboot'.format(Config.ApiRoot),
success: function (data) {
this.MessageBox(type, text !== null ? text : data.info);
}.bind(this)
});
};
this.TaskStarted = function (taskId) {
this.TaskStateCheckTimer = setInterval(this.CheckTaskState.bind(this), 10000);
$('#task-id-span').text(taskId);
$('.shade').show();
};
this.TaskStopped = function () {
clearInterval(this.TaskStateCheckTimer);
$('.shade').hide();
};
this.CreateId = function () {
var time = this.GetReleaseTime();
time = time.replace(new RegExp('-', 'g'), "");
var now = new Date();
return time + now.getMilliseconds();
};
this.IsTaskTimeout = function () {
var fromTime = this.TaskInfo.CreateTime.getTime();
var toTime = (new Date).getTime();
var seconds = (toTime - fromTime) / 1000;
return seconds > 600;
};
this.GetCalcPramas = function (taskId) {
return {
lon: $('#longitude').val(),
lat: $('#latitude').val(),
num: taskId,
hgt: $('#height').val(),
rlen: $('#time-length-input').val(),
tlen: $('#interval-length-input').val(),
rlen2: $('#spread-length-input').val(),
tlen2: $('#interval-spread-input').val(),
tpoint: this.GetReleaseTime(),
pullGround: $("#control-switch").hasClass("control-switch-on") ? 1 : -1
};
};
this.GetTaskParams = function (taskId) {
return {
userId: parseInt($('.admin span').attr('userid')),
taskId: taskId,
region: 'bj',
longitude: $('#longitude').val(),
latitude: $('#latitude').val(),
height: $('#height').val(),
simulatedDuration: $('#time-length-input').val(),
simulatedInterval: $('#interval-length-input').val(),
releaseTime: $("#release-date").datetimebox('getValue'),
resultState: this.TaskInfo.Result.code,
resultMessage: this.TaskInfo.Result.code === '200' ? '成功' : this.TaskInfo.Result.info
};
};
this.GetReleaseTime = function () {
var time = $('#release-date').datetimebox('getValue');
return moment(time).format('YYYY-MM-DD-HH-mm');
};
this.SubmitTask = function (taskId) {
var params = this.GetCalcPramas(taskId);
var partten = 'http://{0}/bj/{1}?lon={2}&lat={3}&num={4}&hgt={5}&rlen={6}&tlen={7}&tpoint={8}&rlen2={9}&tlen2={10}&fac={11}';
var url = partten.format(Config.ApiRoot, 'backward', params.lon, params.lat, params.num, params.hgt, params.rlen, params.tlen, params.tpoint, params.rlen2, params.tlen2, params.pullGround);
this.TestModel('202009241710391', parseFloat(params.lat), parseFloat(params.lon));
return;
$.ajax({
type: "GET",
dataType: 'json',
url: url,
beforeSend: function () {
this.Parent.Map.CenterMap(parseFloat(params.lat), parseFloat(params.lon));
this.TaskStarted(taskId);
}.bind(this),
success: function (result) {
this.TaskStopped();
this.MessageBox("warning", result.info);
}.bind(this),
complete: function () {
$('.param-label').removeClass('label-shade');
}.bind(this)
});
};
this.TestModel = function (taskId, lat, lon) {
$.ajax({
type: "GET",
dataType: 'json',
url: 'http://{0}/bj/check?num={1}'.format(Config.ApiRoot, taskId),
success: function (result) {
this.TaskInfo.Id = taskId;
this.TaskInfo.Result = result;
if (result.code === 200) {
this.Parent.Map.CenterMap(lat, lon);
this.LoadData(result);
}
else if (this.IsTaskTimeout()) {
this.Reboot("error", "任务计算已超时,请重新提交计算。");
}
}.bind(this)
});
};
this.AddTask = function (taskId) {
$.ajax({
type: "POST",
dataType: 'json',
url: '/Beijing/AddTask',
data: this.GetTaskParams(taskId),
success: function (result) {
console.log(result);
}.bind(this)
});
};
this.MessageBox = function (type, text) {
swal({
title: "",
text: text,
type: type,
icon: type,
showCancelButton: false,
confirmButtonText: "确定",
closeOnConfirm: true
});
};
this.SetActiveLabel = function (event) {
$(event.target).toggleClass('active');
};
this.RemoveLabel = function (event) {
if ($(event.target).parent().is('a'))
$(event.target).parent().remove();
else
$(event.target).parents('a').remove();
this.Relayout();
};
this.Relayout = function () {
var windowHeight = $(window).height();
var labelHeight = $('#realtime-slider').find('.label-list:first').height();
var resultList = $('#realtime-result-list');
resultList.find('.calc-list ul').height(windowHeight - labelHeight - 726); //684
};
};