private static string _returnArea = "";//缓存damagearea/area接口 public DamageAnalysisService(IMongoService mongoService, ILogger <DamageAnalysisService> logger, IConfiguration configuration) { Configuration = configuration; _mongoService = mongoService ?? throw new ArgumentNullException(nameof(mongoService)); this._logger = logger; _infos = _mongoService.GetInfos(); //_configs = _mongoService.GetConfigs(); _overlays = _mongoService.GetOverlays(); foreach (var overlay in _overlays) { additionTable.Add(Damage2String(overlay.addend) + Damage2String(overlay.augend), Int32.Parse(Damage2String(overlay.result))); } //创建线程,并启动 //Thread th = new Thread(new ThreadStart(ThreadMethod)); //th.Start(); task = new Task(Run, cts.Token, TaskCreationOptions.LongRunning); task.Start(); }
public int InfoChanged() { lock (_infoLocker) { _infos = _mongoService.GetInfos(); } return(1); }
public List <TestResultVO> TestStart(ref double damageR) { List <TestResultVO> result = new List <TestResultVO>(); DD dd = null; // 1. 访问DD接口,拿到数据 var url = Configuration["ServiceUrls:MissileInfo"];//http://localhost:5000/nuclearthreatanalysis/missileinfo try { Task <string> s = MyCore.Utils.HttpCli.GetAsyncJson(url); s.Wait(); //JObject jo = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(s.Result); dd = Newtonsoft.Json.JsonConvert.DeserializeObject <DD>(s.Result); } catch (Exception e) { _logger.LogInformation("DD访问接口出错" + e.ToString()); //Console.WriteLine(e.Message); } finally { } // 2. 读取info表里的井和车 // 3. 计算井和车距离爆点的距离 var infos = _mongoService.GetInfos(); foreach (var info in infos) { // 只要井和车 if (info.platform != "发射井" && info.platform != "发射车") { continue; } double dis = MyCore.Utils.Translate.GetDistance(dd.return_data[0].lat, dd.return_data[0].lon, info.lat, info.lon); result.Add(new TestResultVO(info.platform, info.lon, info.lat, dis)); } double r1 = MyCore.NuclearAlgorithm.GetShockWaveRadius(dd.return_data[0].yield, dd.return_data[0].alt, 1); double r2 = MyCore.NuclearAlgorithm.GetNuclearRadiationRadius(dd.return_data[0].yield, dd.return_data[0].alt, 100); double r3 = MyCore.NuclearAlgorithm.GetThermalRadiationRadius(dd.return_data[0].yield, dd.return_data[0].alt, 1.9); double r4 = MyCore.NuclearAlgorithm.GetNuclearPulseRadius(dd.return_data[0].yield, dd.return_data[0].alt, 200); // 4. 返回距离和综合损伤半径 damageR = r4; return(result); }