PosController.cs 108 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Entity;
  4. using System.Linq;
  5. using System.Net.Http;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Web.Http;
  9. using Serilog;
  10. using XdCxRhDW.Dto;
  11. using XdCxRhDW.Repostory;
  12. using System.IO;
  13. using XdCxRhDW.Entity;
  14. using XdCxRhDW.Api;
  15. using XdCxRhDw.Dto;
  16. using XdCxRhDW.WebApi;
  17. using DPP_YH_Core.Extensions;
  18. namespace XdCxRhDW.App.Controllers
  19. {
  20. /// <summary>
  21. /// 定位功能相关接口
  22. /// </summary>
  23. public class PosController : BaseController
  24. {
  25. #region 一星一地测向定位
  26. /// <summary>
  27. /// 一星一地测向带参定位(含星历)
  28. /// </summary>
  29. /// <param name="dto">定位参数</param>
  30. /// <returns></returns>
  31. [HttpPost]
  32. public async Task<AjaxResult<PosResDto>> PosX1D1Async(X1D1PosDto dto)
  33. {
  34. TaskInfo runTask;
  35. using (RHDWContext db = new RHDWContext())
  36. {
  37. if (dto.TaskID == null)
  38. {
  39. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  40. && p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
  41. if (runTask == null)
  42. {
  43. Serilog.Log.Warning($"接收到一星一地测向带参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  44. return Error<PosResDto>($"多模式融合定位平台没有启动一星一地测向定位任务");
  45. }
  46. }
  47. else
  48. {
  49. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  50. if (runTask == null)
  51. {
  52. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  53. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  54. }
  55. }
  56. }
  57. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  58. {
  59. var StationRes = db.StationRes.Add(new StationRes()
  60. {
  61. SatTxLon = dto.SatTxLon,
  62. SatTxLat = dto.SatTxLat,
  63. CdbTxLon = dto.CdbTxLon,
  64. CdbTxLat = dto.CdbTxLat,
  65. CxLon = dto.CxLon,
  66. CxLat = dto.CxLat,
  67. RefLon = dto.RefLon,
  68. RefLat = dto.RefLat,
  69. });
  70. CheckRes CheckRes = null;
  71. if (dto.CheckRes != null)
  72. {
  73. //var CheckRes = db.CheckRes.Add(dto.CheckRes.MapTo<Entity.CheckRes>());
  74. CheckRes cres = new CheckRes();
  75. cres.SigTime = dto.CheckRes.SigTime;
  76. cres.FileName = dto.CheckRes.FileName;
  77. cres.StartSamp = dto.CheckRes.StartSamp;
  78. cres.SampCount = dto.CheckRes.SampCount;
  79. if (dto.CheckRes.DetectionWay.HasValue)
  80. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  81. else
  82. cres.DetectionWay = null;
  83. CheckRes = db.CheckRes.Add(cres);
  84. }
  85. var cgRes = db.CgRes.Add(new CgRes()
  86. {
  87. SigTime = dto.SigTime,
  88. DtoCdb = dto.XdDto,
  89. DfoCdb = dto.XdDfo,
  90. SnrCdb = dto.XdSnr,
  91. YbMainDto = dto.MainYbDto,
  92. StationResID = StationRes.ID,
  93. MainCode = dto.MainCode,
  94. TaskID = runTask.ID,
  95. MainX = dto.MainX,
  96. MainY = dto.MainY,
  97. MainZ = dto.MainZ,
  98. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  99. TarFreqDown = dto.FreqDown,
  100. });
  101. var cxRes = db.CxRes.Add(new CxRes()
  102. {
  103. SigTime = dto.SigTime,
  104. Fx = dto.CxRes,
  105. });
  106. var res = PosApi.X1D1_Pos(cgRes, StationRes, cxRes);
  107. long? checkResId = null;
  108. PosRes posRes = new PosRes()
  109. {
  110. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  111. SigTime = cgRes.SigTime,
  112. TaskInfoID = runTask.ID,
  113. CxResID = cxRes.ID,
  114. CgResID = cgRes.ID,
  115. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  116. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  117. TsName = dto.TsName,
  118. PosLon = res[0],
  119. PosLat = res[1],
  120. MirrLon = res[3],
  121. MirrLat = res[4],
  122. PosResType = EnumPosResType.X1D1CX,
  123. };
  124. posRes = db.PosRes.Add(posRes);
  125. await db.SaveChangesAsync();
  126. Messenger.Defalut.Pub("新增定位点", posRes);
  127. return Success(MapDto(posRes));
  128. }
  129. }
  130. /// <summary>
  131. /// 一星一地测向带参定位(无星历)
  132. /// </summary>
  133. /// <returns>返回定位结果ID</returns>
  134. [HttpPost]
  135. public async Task<AjaxResult<PosResDto>> PosX1D1NoXlAsync(X1D1NoXlPosDto dto)
  136. {
  137. TaskInfo runTask;
  138. SysSetings settings;
  139. using (RHDWContext db = new RHDWContext())
  140. {
  141. if (dto.TaskID == null)
  142. {
  143. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  144. && p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
  145. if (runTask == null)
  146. {
  147. Serilog.Log.Warning($"接收到一星一地测向带参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  148. return Error<PosResDto>($"多模式融合定位平台没有启动一星一地测向定位任务");
  149. }
  150. }
  151. else
  152. {
  153. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  154. if (runTask == null)
  155. {
  156. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  157. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  158. }
  159. }
  160. settings = await db.SysSetings.FirstOrDefaultAsync();
  161. }
  162. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  163. if (xl1 == null)
  164. {
  165. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  166. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  167. }
  168. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  169. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  170. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  171. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  172. if (ephMain.code != 200)
  173. {
  174. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  175. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  176. }
  177. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  178. {
  179. var StationRes = db.StationRes.Add(new StationRes()
  180. {
  181. SatTxLon = dto.SatTxLon,
  182. SatTxLat = dto.SatTxLat,
  183. CdbTxLon = dto.CdbTxLon,
  184. CdbTxLat = dto.CdbTxLat,
  185. CxLon = dto.CxLon,
  186. CxLat = dto.CxLat,
  187. RefLon = dto.RefLon,
  188. RefLat = dto.RefLat,
  189. });
  190. CheckRes CheckRes = null;
  191. if (dto.CheckRes != null)
  192. {
  193. CheckRes cres = new CheckRes();
  194. cres.SigTime = dto.CheckRes.SigTime;
  195. cres.FileName = dto.CheckRes.FileName;
  196. cres.StartSamp = dto.CheckRes.StartSamp;
  197. cres.SampCount = dto.CheckRes.SampCount;
  198. if (dto.CheckRes.DetectionWay.HasValue)
  199. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  200. else
  201. cres.DetectionWay = null;
  202. CheckRes = db.CheckRes.Add(cres);
  203. }
  204. var cgRes = db.CgRes.Add(new CgRes()
  205. {
  206. SigTime = dto.SigTime,
  207. DtoCdb = dto.XdDto,
  208. DfoCdb = dto.XdDfo,
  209. SnrCdb = dto.XdSnr,
  210. YbMainDto = dto.MainYbDto,
  211. StationResID = StationRes.ID,
  212. MainCode = dto.MainCode,
  213. TaskID = runTask.ID,
  214. MainX = ephMain.data.X,
  215. MainY = ephMain.data.Y,
  216. MainZ = ephMain.data.Z,
  217. MainVx = ephMain.data.VX,
  218. MainVy = ephMain.data.VY,
  219. MainVz = ephMain.data.VZ,
  220. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  221. TarFreqDown = dto.FreqDown,
  222. });
  223. var cxRes = db.CxRes.Add(new CxRes()
  224. {
  225. SigTime = dto.SigTime,
  226. Fx = dto.CxRes,
  227. });
  228. var res = PosApi.X1D1_Pos(cgRes, StationRes, cxRes);
  229. long? checkResId = null;
  230. PosRes posRes = new PosRes()
  231. {
  232. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  233. SigTime = dto.SigTime,
  234. TaskInfoID = runTask.ID,
  235. CgResID = cgRes.ID,
  236. CxResID = cxRes.ID,
  237. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  238. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  239. TsName = dto.TsName,
  240. PosLon = res[0],
  241. PosLat = res[1],
  242. MirrLon = res[3],
  243. MirrLat = res[4],
  244. PosResType = EnumPosResType.X1D1CX,
  245. };
  246. posRes = db.PosRes.Add(posRes);
  247. await db.SaveChangesAsync();
  248. Messenger.Defalut.Pub("新增定位点", posRes);
  249. return Success(MapDto(posRes));
  250. }
  251. }
  252. #endregion
  253. #region 两星一地定位
  254. /// <summary>
  255. /// 两星一地带参定位(含星历)
  256. /// </summary>
  257. /// <param name="dto">定位参数</param>
  258. /// <returns></returns>
  259. [HttpPost]
  260. public async Task<AjaxResult<PosResDto>> PosX2D1Async(X2D1PosDto dto)
  261. {
  262. TaskInfo runTask;
  263. SysSetings settings;
  264. using (RHDWContext db = new RHDWContext())
  265. {
  266. if (dto.TaskID == null)
  267. {
  268. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  269. && p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  270. if (runTask == null)
  271. {
  272. Serilog.Log.Warning($"接收到两星一地带参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  273. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  274. }
  275. }
  276. else
  277. {
  278. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  279. if (runTask == null)
  280. {
  281. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  282. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  283. }
  284. }
  285. settings = await db.SysSetings.FirstOrDefaultAsync();
  286. }
  287. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  288. {
  289. var StationRes = db.StationRes.Add(new StationRes()
  290. {
  291. SatTxLon = dto.SatTxLon,
  292. SatTxLat = dto.SatTxLat,
  293. CdbTxLon = dto.CdbTxLon,
  294. CdbTxLat = dto.CdbTxLat,
  295. RefLon = dto.RefLon,
  296. RefLat = dto.RefLat,
  297. });
  298. CheckRes CheckRes = null;
  299. if (dto.CheckRes != null)
  300. {
  301. CheckRes cres = new CheckRes();
  302. cres.SigTime = dto.CheckRes.SigTime;
  303. cres.FileName = dto.CheckRes.FileName;
  304. cres.StartSamp = dto.CheckRes.StartSamp;
  305. cres.SampCount = dto.CheckRes.SampCount;
  306. if (dto.CheckRes.DetectionWay.HasValue)
  307. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  308. else
  309. cres.DetectionWay = null;
  310. CheckRes = db.CheckRes.Add(cres);
  311. }
  312. var cgRes = db.CgRes.Add(new CgRes()
  313. {
  314. SigTime = dto.SigTime,
  315. Dto1 = dto.SxDto,
  316. Dfo1 = dto.SxDfo,
  317. Snr1 = dto.SxSnr,
  318. DtoCdb = dto.XdDto,
  319. DfoCdb = dto.XdDfo,
  320. SnrCdb = dto.XdSnr,
  321. YbMainDto = dto.MainYbDto,
  322. YbAdja1Dto = dto.AdjaYbDto,
  323. StationResID = StationRes.ID,
  324. MainCode = dto.MainCode,
  325. Adja1Code = dto.AdjaCode,
  326. TaskID = runTask.ID,
  327. MainX = dto.MainX,
  328. MainY = dto.MainY,
  329. MainZ = dto.MainZ,
  330. Adja1X = dto.AdjaX,
  331. Adja1Y = dto.AdjaY,
  332. Adja1Z = dto.AdjaZ,
  333. MainVx = dto.MainVX,
  334. MainVy = dto.MainVY,
  335. MainVz = dto.MainVZ,
  336. Adja1Vx = dto.AdjaVX,
  337. Adja1Vy = dto.AdjaVY,
  338. Adja1Vz = dto.AdjaVZ,
  339. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  340. TarFreqDown = dto.FreqDown,
  341. });
  342. var res = PosApi.X2D1_Pos(cgRes, StationRes);
  343. long? checkResId = null;
  344. PosRes posRes = new PosRes()
  345. {
  346. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  347. SigTime = cgRes.SigTime,
  348. TaskInfoID = runTask.ID,
  349. CgResID = cgRes.ID,
  350. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  351. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  352. TsName = dto.TsName,
  353. PosLon = res[0],
  354. PosLat = res[1],
  355. MirrLon = res[3],
  356. MirrLat = res[4],
  357. PosResType = EnumPosResType.X2D1,
  358. };
  359. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  360. posRes = db.PosRes.Add(posRes);
  361. await db.SaveChangesAsync();
  362. Messenger.Defalut.Pub("新增定位点", posRes);
  363. return Success(MapDto(posRes));
  364. }
  365. }
  366. /// <summary>
  367. /// 两星一地带参定位(无星历)
  368. /// </summary>
  369. /// <returns>返回定位结果ID</returns>
  370. [HttpPost]
  371. public async Task<AjaxResult<PosResDto>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
  372. {
  373. TaskInfo runTask;
  374. SysSetings settings;
  375. using (RHDWContext db = new RHDWContext())
  376. {
  377. if (dto.TaskID == null)
  378. {
  379. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  380. && p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  381. if (runTask == null)
  382. {
  383. Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  384. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  385. }
  386. }
  387. else
  388. {
  389. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  390. if (runTask == null)
  391. {
  392. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  393. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  394. }
  395. }
  396. settings = await db.SysSetings.FirstOrDefaultAsync();
  397. }
  398. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  399. if (xl1 == null)
  400. {
  401. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  402. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  403. }
  404. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  405. var xl2 = await XlRepository.GetLatestAsync(dto.AdjaCode, dto.SigTime);
  406. if (xl2 == null)
  407. {
  408. Serilog.Log.Error($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  409. return Error<PosResDto>($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  410. }
  411. Serilog.Log.Information($"卫星{dto.AdjaCode}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  412. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  413. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  414. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  415. if (ephMain.code != 200)
  416. {
  417. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  418. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  419. }
  420. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  421. var ephAdja = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  422. if (ephAdja.code != 200)
  423. {
  424. Serilog.Log.Error($"推算卫星{dto.AdjaCode}的ECEF星历出错.{ephAdja.msg}");
  425. return Error<PosResDto>($"推算卫星{dto.AdjaCode}的ECEF星历出错");
  426. }
  427. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  428. {
  429. var StationRes = db.StationRes.Add(new StationRes()
  430. {
  431. SatTxLon = dto.SatTxLon,
  432. SatTxLat = dto.SatTxLat,
  433. CdbTxLon = dto.CdbTxLon,
  434. CdbTxLat = dto.CdbTxLat,
  435. RefLon = dto.RefLon,
  436. RefLat = dto.RefLat,
  437. });
  438. CheckRes CheckRes = null;
  439. if (dto.CheckRes != null)
  440. {
  441. CheckRes cres = new CheckRes();
  442. cres.SigTime = dto.CheckRes.SigTime;
  443. cres.FileName = dto.CheckRes.FileName;
  444. cres.StartSamp = dto.CheckRes.StartSamp;
  445. cres.SampCount = dto.CheckRes.SampCount;
  446. if (dto.CheckRes.DetectionWay.HasValue)
  447. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  448. else
  449. cres.DetectionWay = null;
  450. CheckRes = db.CheckRes.Add(cres);
  451. }
  452. var cgRes = db.CgRes.Add(new CgRes()
  453. {
  454. SigTime = dto.SigTime,
  455. Dto1 = dto.SxDto,
  456. Dfo1 = dto.SxDfo,
  457. Snr1 = dto.SxSnr,
  458. DtoCdb = dto.XdDto,
  459. DfoCdb = dto.XdDfo,
  460. SnrCdb = dto.XdSnr,
  461. YbMainDto = dto.MainYbDto,
  462. YbAdja1Dto = dto.AdjaYbDto,
  463. StationResID = StationRes.ID,
  464. MainCode = dto.MainCode,
  465. Adja1Code = dto.AdjaCode,
  466. TaskID = runTask.ID,
  467. MainX = ephMain.data.X,
  468. MainY = ephMain.data.Y,
  469. MainZ = ephMain.data.Z,
  470. MainVx = ephMain.data.VX,
  471. MainVy = ephMain.data.VY,
  472. MainVz = ephMain.data.VZ,
  473. Adja1Vx = ephAdja.data.VX,
  474. Adja1Vy = ephAdja.data.VY,
  475. Adja1Vz = ephAdja.data.VZ,
  476. Adja1X = ephAdja.data.X,
  477. Adja1Y = ephAdja.data.Y,
  478. Adja1Z = ephAdja.data.Z,
  479. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  480. TarFreqDown = dto.FreqDown,
  481. });
  482. var res = PosApi.X2D1_Pos(cgRes, StationRes);
  483. long? checkResId = null;
  484. PosRes posRes = new PosRes()
  485. {
  486. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  487. SigTime = dto.SigTime,
  488. TaskInfoID = runTask.ID,
  489. CgResID = cgRes.ID,
  490. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  491. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  492. TsName = dto.TsName,
  493. PosLon = res[0],
  494. PosLat = res[1],
  495. MirrLon = res[3],
  496. MirrLat = res[4],
  497. PosResType = EnumPosResType.X2D1,
  498. };
  499. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  500. posRes = db.PosRes.Add(posRes);
  501. await db.SaveChangesAsync();
  502. Messenger.Defalut.Pub("新增定位点", posRes);
  503. return Success(MapDto(posRes));
  504. }
  505. }
  506. /// <summary>
  507. /// 两星一地无参定位(含星历)
  508. /// </summary>
  509. /// <param name="dto">定位参数</param>
  510. /// <returns></returns>
  511. [HttpPost]
  512. public async Task<AjaxResult<PosResDto>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
  513. {
  514. TaskInfo runTask;
  515. SysSetings settings;
  516. using (RHDWContext db = new RHDWContext())
  517. {
  518. if (dto.TaskID == null)
  519. {
  520. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  521. && p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  522. if (runTask == null)
  523. {
  524. Serilog.Log.Warning($"接收到两星一地无参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  525. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  526. }
  527. }
  528. else
  529. {
  530. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  531. if (runTask == null)
  532. {
  533. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  534. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  535. }
  536. }
  537. settings = await db.SysSetings.FirstOrDefaultAsync();
  538. }
  539. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  540. {
  541. var StationRes = db.StationRes.Add(new StationRes()
  542. {
  543. SatTxLon = dto.SatTxLon,
  544. SatTxLat = dto.SatTxLat,
  545. CdbTxLon = dto.CdbTxLon,
  546. CdbTxLat = dto.CdbTxLat,
  547. });
  548. CheckRes CheckRes = null;
  549. if (dto.CheckRes != null)
  550. {
  551. CheckRes cres = new CheckRes();
  552. cres.SigTime = dto.CheckRes.SigTime;
  553. cres.FileName = dto.CheckRes.FileName;
  554. cres.StartSamp = dto.CheckRes.StartSamp;
  555. cres.SampCount = dto.CheckRes.SampCount;
  556. if (dto.CheckRes.DetectionWay.HasValue)
  557. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  558. else
  559. cres.DetectionWay = null;
  560. CheckRes = db.CheckRes.Add(cres);
  561. }
  562. var cgRes = db.CgRes.Add(new CgRes()
  563. {
  564. SigTime = dto.SigTime,
  565. Dto1 = dto.SxDto,
  566. Dfo1 = dto.SxDfo,
  567. Snr1 = dto.SxSnr,
  568. DtoCdb = dto.XdDto,
  569. DfoCdb = dto.XdDfo,
  570. SnrCdb = dto.XdSnr,
  571. StationResID = StationRes.ID,
  572. MainCode = dto.MainCode,
  573. Adja1Code = dto.AdjaCode,
  574. TaskID = runTask.ID,
  575. MainX = dto.MainX,
  576. MainY = dto.MainY,
  577. MainZ = dto.MainZ,
  578. Adja1X = dto.AdjaX,
  579. Adja1Y = dto.AdjaY,
  580. Adja1Z = dto.AdjaZ,
  581. MainVx = dto.MainVX,
  582. MainVy = dto.MainVY,
  583. MainVz = dto.MainVZ,
  584. Adja1Vx = dto.AdjaVX,
  585. Adja1Vy = dto.AdjaVY,
  586. Adja1Vz = dto.AdjaVZ,
  587. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  588. TarFreqDown = dto.FreqDown,
  589. });
  590. var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
  591. long? checkResId = null;
  592. PosRes posRes = new PosRes()
  593. {
  594. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  595. SigTime = cgRes.SigTime,
  596. TaskInfoID = runTask.ID,
  597. CgResID = cgRes.ID,
  598. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  599. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  600. TsName = dto.TsName,
  601. PosLon = res[0],
  602. PosLat = res[1],
  603. MirrLon = res[3],
  604. MirrLat = res[4],
  605. PosResType = EnumPosResType.X2D1NoRef,
  606. };
  607. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  608. posRes = db.PosRes.Add(posRes);
  609. await db.SaveChangesAsync();
  610. Messenger.Defalut.Pub("新增定位点", posRes);
  611. return Success(MapDto(posRes));
  612. }
  613. }
  614. /// <summary>
  615. /// 两星一地无参定位(无星历)
  616. /// </summary>
  617. /// <returns>返回定位结果ID</returns>
  618. [HttpPost]
  619. public async Task<AjaxResult<PosResDto>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
  620. {
  621. TaskInfo runTask;
  622. SysSetings settings;
  623. using (RHDWContext db = new RHDWContext())
  624. {
  625. if (dto.TaskID == null)
  626. {
  627. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  628. && p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  629. if (runTask == null)
  630. {
  631. Serilog.Log.Warning($"接收到两星一地无参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  632. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  633. }
  634. }
  635. else
  636. {
  637. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  638. if (runTask == null)
  639. {
  640. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  641. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  642. }
  643. }
  644. settings = await db.SysSetings.FirstOrDefaultAsync();
  645. }
  646. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  647. if (xl1 == null)
  648. {
  649. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  650. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  651. }
  652. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  653. var xl2 = await XlRepository.GetLatestAsync(dto.AdjaCode, dto.SigTime);
  654. if (xl2 == null)
  655. {
  656. Serilog.Log.Error($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  657. return Error<PosResDto>($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  658. }
  659. Serilog.Log.Information($"卫星{dto.AdjaCode}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  660. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  661. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  662. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  663. if (ephMain.code != 200)
  664. {
  665. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  666. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  667. }
  668. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  669. var ephAdja = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  670. if (ephAdja.code != 200)
  671. {
  672. Serilog.Log.Error($"推算卫星{dto.AdjaCode}的ECEF星历出错.{ephAdja.msg}");
  673. return Error<PosResDto>($"推算卫星{dto.AdjaCode}的ECEF星历出错");
  674. }
  675. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  676. {
  677. var StationRes = db.StationRes.Add(new StationRes()
  678. {
  679. SatTxLon = dto.SatTxLon,
  680. SatTxLat = dto.SatTxLat,
  681. CdbTxLon = dto.CdbTxLon,
  682. CdbTxLat = dto.CdbTxLat,
  683. });
  684. CheckRes CheckRes = null;
  685. if (dto.CheckRes != null)
  686. {
  687. CheckRes cres = new CheckRes();
  688. cres.SigTime = dto.CheckRes.SigTime;
  689. cres.FileName = dto.CheckRes.FileName;
  690. cres.StartSamp = dto.CheckRes.StartSamp;
  691. cres.SampCount = dto.CheckRes.SampCount;
  692. if (dto.CheckRes.DetectionWay.HasValue)
  693. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  694. else
  695. cres.DetectionWay = null;
  696. CheckRes = db.CheckRes.Add(cres);
  697. }
  698. var cgRes = db.CgRes.Add(new CgRes()
  699. {
  700. SigTime = dto.SigTime,
  701. Dto1 = dto.SxDto,
  702. Dfo1 = dto.SxDfo,
  703. Snr1 = dto.SxSnr,
  704. DtoCdb = dto.XdDto,
  705. DfoCdb = dto.XdDfo,
  706. SnrCdb = dto.XdSnr,
  707. StationResID = StationRes.ID,
  708. MainCode = dto.MainCode,
  709. Adja1Code = dto.AdjaCode,
  710. TaskID = runTask.ID,
  711. MainX = ephMain.data.X,
  712. MainY = ephMain.data.Y,
  713. MainZ = ephMain.data.Z,
  714. Adja1X = ephAdja.data.X,
  715. Adja1Y = ephAdja.data.Y,
  716. Adja1Z = ephAdja.data.Z,
  717. MainVx = ephMain.data.VX,
  718. MainVy = ephMain.data.VY,
  719. MainVz = ephMain.data.VZ,
  720. Adja1Vx = ephAdja.data.VX,
  721. Adja1Vy = ephAdja.data.VY,
  722. Adja1Vz = ephAdja.data.VZ,
  723. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  724. TarFreqDown = dto.FreqDown,
  725. });
  726. var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
  727. long? checkResId = null;
  728. PosRes posRes = new PosRes()
  729. {
  730. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  731. SigTime = dto.SigTime,
  732. TaskInfoID = runTask.ID,
  733. CgResID = cgRes.ID,
  734. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  735. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  736. TsName = dto.TsName,
  737. PosLon = res[0],
  738. PosLat = res[1],
  739. MirrLon = res[3],
  740. MirrLat = res[4],
  741. PosResType = EnumPosResType.X2D1NoRef,
  742. };
  743. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  744. posRes = db.PosRes.Add(posRes);
  745. await db.SaveChangesAsync();
  746. Messenger.Defalut.Pub("新增定位点", posRes);
  747. return Success(MapDto(posRes));
  748. }
  749. }
  750. #endregion
  751. #region 融合定位
  752. /// <summary>
  753. /// 融合带参定位(含星历)
  754. /// </summary>
  755. /// <param name="dto">定位参数</param>
  756. /// <returns></returns>
  757. [HttpPost]
  758. public async Task<AjaxResult<PosResDto>> PosRhAsync(RHPosDto dto)
  759. {
  760. TaskInfo runTask;
  761. SysSetings settings;
  762. using (RHDWContext db = new RHDWContext())
  763. {
  764. if (dto.TaskID == null)
  765. {
  766. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  767. && p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
  768. if (runTask == null)
  769. {
  770. Serilog.Log.Warning($"接收到融合带参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  771. return Error<PosResDto>($"多模式融合定位平台没有启动融合定位任务");
  772. }
  773. }
  774. else
  775. {
  776. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  777. if (runTask == null)
  778. {
  779. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  780. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  781. }
  782. }
  783. settings = await db.SysSetings.FirstOrDefaultAsync();
  784. }
  785. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  786. {
  787. var StationRes = db.StationRes.Add(new StationRes()
  788. {
  789. SatTxLon = dto.SatTxLon,
  790. SatTxLat = dto.SatTxLat,
  791. CdbTxLon = dto.CdbTxLon,
  792. CdbTxLat = dto.CdbTxLat,
  793. CxLon = dto.CxLon,
  794. CxLat = dto.CxLat,
  795. RefLon = dto.RefLon,
  796. RefLat = dto.RefLat,
  797. });
  798. CheckRes CheckRes = null;
  799. if (dto.CheckRes != null)
  800. {
  801. CheckRes cres = new CheckRes();
  802. cres.SigTime = dto.CheckRes.SigTime;
  803. cres.FileName = dto.CheckRes.FileName;
  804. cres.StartSamp = dto.CheckRes.StartSamp;
  805. cres.SampCount = dto.CheckRes.SampCount;
  806. if (dto.CheckRes.DetectionWay.HasValue)
  807. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  808. else
  809. cres.DetectionWay = null;
  810. CheckRes = db.CheckRes.Add(cres);
  811. }
  812. var cgRes = db.CgRes.Add(new CgRes()
  813. {
  814. SigTime = dto.SigTime,
  815. Dto1 = dto.SxDto,
  816. Dfo1 = dto.SxDfo,
  817. Snr1 = dto.SxSnr,
  818. DtoCdb = dto.XdDto,
  819. DfoCdb = dto.XdDfo,
  820. SnrCdb = dto.XdSnr,
  821. YbMainDto = dto.MainYbDto,
  822. YbAdja1Dto = dto.AdjaYbDto,
  823. StationResID = StationRes.ID,
  824. MainCode = dto.MainCode,
  825. Adja1Code = dto.AdjaCode,
  826. TaskID = runTask.ID,
  827. MainX = dto.MainX,
  828. MainY = dto.MainY,
  829. MainZ = dto.MainZ,
  830. Adja1X = dto.AdjaX,
  831. Adja1Y = dto.AdjaY,
  832. Adja1Z = dto.AdjaZ,
  833. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  834. TarFreqDown = dto.FreqDown,
  835. });
  836. var cxRes = db.CxRes.Add(new CxRes()
  837. {
  838. SigTime = dto.SigTime,
  839. Fx = dto.CxRes,
  840. });
  841. var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
  842. long? checkResId = null;
  843. PosRes posRes = new PosRes()
  844. {
  845. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  846. SigTime = cgRes.SigTime,
  847. TaskInfoID = runTask.ID,
  848. CxResID = cxRes.ID,
  849. CgResID = cgRes.ID,
  850. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  851. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  852. TsName = dto.TsName,
  853. PosLon = res[0],
  854. PosLat = res[1],
  855. MirrLon = res[3],
  856. MirrLat = res[4],
  857. PosResType = EnumPosResType.RH,
  858. };
  859. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  860. posRes = db.PosRes.Add(posRes);
  861. await db.SaveChangesAsync();
  862. Messenger.Defalut.Pub("新增定位点", posRes);
  863. return Success(MapDto(posRes));
  864. }
  865. }
  866. /// <summary>
  867. /// 融合带参定位(无星历)
  868. /// </summary>
  869. /// <returns>返回定位结果ID</returns>
  870. [HttpPost]
  871. public async Task<AjaxResult<PosResDto>> PosRhNoXlAsync(RHNoXlPosDto dto)
  872. {
  873. TaskInfo runTask;
  874. SysSetings settings;
  875. using (RHDWContext db = new RHDWContext())
  876. {
  877. if (dto.TaskID == null)
  878. {
  879. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  880. && p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
  881. if (runTask == null)
  882. {
  883. Serilog.Log.Warning($"接收到融合带参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  884. return Error<PosResDto>($"多模式融合定位平台没有启动融合定位任务");
  885. }
  886. }
  887. else
  888. {
  889. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  890. if (runTask == null)
  891. {
  892. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  893. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  894. }
  895. }
  896. settings = await db.SysSetings.FirstOrDefaultAsync();
  897. }
  898. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  899. if (xl1 == null)
  900. {
  901. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  902. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  903. }
  904. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  905. var xl2 = await XlRepository.GetLatestAsync(dto.AdjaCode, dto.SigTime);
  906. if (xl2 == null)
  907. {
  908. Serilog.Log.Error($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  909. return Error<PosResDto>($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  910. }
  911. Serilog.Log.Information($"卫星{dto.AdjaCode}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  912. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  913. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  914. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  915. if (ephMain.code != 200)
  916. {
  917. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  918. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  919. }
  920. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  921. var ephAdja = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  922. if (ephAdja.code != 200)
  923. {
  924. Serilog.Log.Error($"推算卫星{dto.AdjaCode}的ECEF星历出错.{ephAdja.msg}");
  925. return Error<PosResDto>($"推算卫星{dto.AdjaCode}的ECEF星历出错");
  926. }
  927. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  928. {
  929. var StationRes = db.StationRes.Add(new StationRes()
  930. {
  931. SatTxLon = dto.SatTxLon,
  932. SatTxLat = dto.SatTxLat,
  933. CdbTxLon = dto.CdbTxLon,
  934. CdbTxLat = dto.CdbTxLat,
  935. CxLon = dto.CxLon,
  936. CxLat = dto.CxLat,
  937. RefLon = dto.RefLon,
  938. RefLat = dto.RefLat,
  939. });
  940. CheckRes CheckRes = null;
  941. if (dto.CheckRes != null)
  942. {
  943. CheckRes cres = new CheckRes();
  944. cres.SigTime = dto.CheckRes.SigTime;
  945. cres.FileName = dto.CheckRes.FileName;
  946. cres.StartSamp = dto.CheckRes.StartSamp;
  947. cres.SampCount = dto.CheckRes.SampCount;
  948. if (dto.CheckRes.DetectionWay.HasValue)
  949. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  950. else
  951. cres.DetectionWay = null;
  952. CheckRes = db.CheckRes.Add(cres);
  953. }
  954. var cgRes = db.CgRes.Add(new CgRes()
  955. {
  956. SigTime = dto.SigTime,
  957. Dto1 = dto.SxDto,
  958. Dfo1 = dto.SxDfo,
  959. Snr1 = dto.SxSnr,
  960. DtoCdb = dto.XdDto,
  961. DfoCdb = dto.XdDfo,
  962. SnrCdb = dto.XdSnr,
  963. YbMainDto = dto.MainYbDto,
  964. YbAdja1Dto = dto.AdjaYbDto,
  965. StationResID = StationRes.ID,
  966. MainCode = dto.MainCode,
  967. Adja1Code = dto.AdjaCode,
  968. TaskID = runTask.ID,
  969. MainX = ephMain.data.X,
  970. MainY = ephMain.data.Y,
  971. MainZ = ephMain.data.Z,
  972. MainVx = ephMain.data.VX,
  973. MainVy = ephMain.data.VY,
  974. MainVz = ephMain.data.VZ,
  975. Adja1X = ephAdja.data.X,
  976. Adja1Y = ephAdja.data.Y,
  977. Adja1Z = ephAdja.data.Z,
  978. Adja1Vx = ephAdja.data.VX,
  979. Adja1Vy = ephAdja.data.VY,
  980. Adja1Vz = ephAdja.data.VZ,
  981. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  982. TarFreqDown = dto.FreqDown,
  983. });
  984. var cxRes = db.CxRes.Add(new CxRes()
  985. {
  986. SigTime = dto.SigTime,
  987. Fx = dto.CxRes,
  988. });
  989. var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
  990. long? checkResId = null;
  991. PosRes posRes = new PosRes()
  992. {
  993. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  994. SigTime = cgRes.SigTime,
  995. TaskInfoID = runTask.ID,
  996. CxResID = cxRes.ID,
  997. CgResID = cgRes.ID,
  998. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  999. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1000. TsName = dto.TsName,
  1001. PosLon = res[0],
  1002. PosLat = res[1],
  1003. MirrLon = res[3],
  1004. MirrLat = res[4],
  1005. PosResType = EnumPosResType.RH,
  1006. };
  1007. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1008. posRes = db.PosRes.Add(posRes);
  1009. await db.SaveChangesAsync();
  1010. Messenger.Defalut.Pub("新增定位点", posRes);
  1011. return Success(MapDto(posRes));
  1012. }
  1013. }
  1014. #endregion
  1015. #region 三星双时差定位
  1016. /// <summary>
  1017. /// 三星双时差带参定位(含星历)
  1018. /// </summary>
  1019. /// <param name="dto">定位参数</param>
  1020. /// <returns></returns>
  1021. [HttpPost]
  1022. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoAsync(X3TwoDtoPosDto dto)
  1023. {
  1024. TaskInfo runTask;
  1025. SysSetings settings;
  1026. using (RHDWContext db = new RHDWContext())
  1027. {
  1028. if (dto.TaskID == null)
  1029. {
  1030. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1031. && p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
  1032. if (runTask == null)
  1033. {
  1034. Serilog.Log.Warning($"接收到三星双时差带参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  1035. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  1036. }
  1037. }
  1038. else
  1039. {
  1040. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1041. if (runTask == null)
  1042. {
  1043. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1044. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1045. }
  1046. }
  1047. settings = await db.SysSetings.FirstOrDefaultAsync();
  1048. }
  1049. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1050. {
  1051. var StationRes = db.StationRes.Add(new StationRes()
  1052. {
  1053. SatTxLon = dto.SatTxLon,
  1054. SatTxLat = dto.SatTxLat,
  1055. RefLon = dto.RefLon,
  1056. RefLat = dto.RefLat,
  1057. });
  1058. CheckRes CheckRes = null;
  1059. if (dto.CheckRes != null)
  1060. {
  1061. CheckRes cres = new CheckRes();
  1062. cres.SigTime = dto.CheckRes.SigTime;
  1063. cres.FileName = dto.CheckRes.FileName;
  1064. cres.StartSamp = dto.CheckRes.StartSamp;
  1065. cres.SampCount = dto.CheckRes.SampCount;
  1066. if (dto.CheckRes.DetectionWay.HasValue)
  1067. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1068. else
  1069. cres.DetectionWay = null;
  1070. CheckRes = db.CheckRes.Add(cres);
  1071. }
  1072. var cgRes = db.CgRes.Add(new CgRes()
  1073. {
  1074. SigTime = dto.SigTime,
  1075. Dto1 = dto.Dto1,
  1076. Dfo1 = dto.Dfo1,
  1077. Snr1 = dto.Snr1,
  1078. Dto2 = dto.Dto2,
  1079. Dfo2 = dto.Dfo2,
  1080. Snr2 = dto.Snr2,
  1081. YbMainDto = dto.YbMainDto,
  1082. YbAdja1Dto = dto.YbAdja1Dto,
  1083. YbAdja2Dto = dto.YbAdja2Dto,
  1084. StationResID = StationRes.ID,
  1085. MainCode = dto.MainCode,
  1086. Adja1Code = dto.Adja1Code,
  1087. Adja2Code = dto.Adja2Code,
  1088. TaskID = runTask.ID,
  1089. MainX = dto.MainX,
  1090. MainY = dto.MainY,
  1091. MainZ = dto.MainZ,
  1092. MainVx = dto.MainVX,
  1093. MainVy = dto.MainVY,
  1094. MainVz = dto.MainVZ,
  1095. Adja1X = dto.Adja1X,
  1096. Adja1Y = dto.Adja1Y,
  1097. Adja1Z = dto.Adja1Z,
  1098. Adja1Vx = dto.Adja1VX,
  1099. Adja1Vy = dto.Adja1VY,
  1100. Adja1Vz = dto.Adja1VZ,
  1101. Adja2X = dto.Adja2X,
  1102. Adja2Y = dto.Adja2Y,
  1103. Adja2Z = dto.Adja2Z,
  1104. Adja2Vx = dto.Adja2VX,
  1105. Adja2Vy = dto.Adja2VY,
  1106. Adja2Vz = dto.Adja2VZ,
  1107. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  1108. TarFreqDown = dto.FreqDown,
  1109. });
  1110. var res = PosApi.X3_Pos(cgRes, StationRes);
  1111. long? checkResId = null;
  1112. PosRes posRes = new PosRes()
  1113. {
  1114. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1115. SigTime = cgRes.SigTime,
  1116. TaskInfoID = runTask.ID,
  1117. CgResID = cgRes.ID,
  1118. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1119. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1120. TsName = dto.TsName,
  1121. PosLon = res[0],
  1122. PosLat = res[1],
  1123. MirrLon = res[3],
  1124. MirrLat = res[4],
  1125. PosResType = EnumPosResType.X3,
  1126. };
  1127. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1128. posRes = db.PosRes.Add(posRes);
  1129. await db.SaveChangesAsync();
  1130. Messenger.Defalut.Pub("新增定位点", posRes);
  1131. return Success(MapDto(posRes));
  1132. }
  1133. }
  1134. /// <summary>
  1135. /// 三星双时差带参定位(无星历)
  1136. /// </summary>
  1137. /// <returns>返回定位结果ID</returns>
  1138. [HttpPost]
  1139. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoXlAsync(X3TwoDtoNoXlPosDto dto)
  1140. {
  1141. TaskInfo runTask;
  1142. SysSetings settings;
  1143. using (RHDWContext db = new RHDWContext())
  1144. {
  1145. if (dto.TaskID == null)
  1146. {
  1147. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1148. && p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
  1149. if (runTask == null)
  1150. {
  1151. Serilog.Log.Warning($"接收到三星双时差带参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  1152. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  1153. }
  1154. }
  1155. else
  1156. {
  1157. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1158. if (runTask == null)
  1159. {
  1160. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1161. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1162. }
  1163. }
  1164. settings = await db.SysSetings.FirstOrDefaultAsync();
  1165. }
  1166. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  1167. if (xl1 == null)
  1168. {
  1169. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  1170. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  1171. }
  1172. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1173. var xl2 = await XlRepository.GetLatestAsync(dto.Adja1Code, dto.SigTime);
  1174. if (xl2 == null)
  1175. {
  1176. Serilog.Log.Error($"系统缺少编号{dto.Adja1Code}卫星的星历!");
  1177. return Error<PosResDto>($"系统缺少编号{dto.Adja1Code}卫星的星历!");
  1178. }
  1179. Serilog.Log.Information($"卫星{dto.Adja1Code}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1180. var xl3 = await XlRepository.GetLatestAsync(dto.Adja2Code, dto.SigTime);
  1181. if (xl3 == null)
  1182. {
  1183. Serilog.Log.Error($"系统缺少编号{dto.Adja2Code}卫星的星历!");
  1184. return Error<PosResDto>($"系统缺少编号{dto.Adja2Code}卫星的星历!");
  1185. }
  1186. Serilog.Log.Information($"卫星{dto.Adja2Code}使用发布时刻为{xl3.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1187. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  1188. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  1189. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  1190. if (ephMain.code != 200)
  1191. {
  1192. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  1193. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  1194. }
  1195. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  1196. var ephAdja1 = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  1197. if (ephAdja1.code != 200)
  1198. {
  1199. Serilog.Log.Error($"推算卫星{dto.Adja1Code}的ECEF星历出错.{ephAdja1.msg}");
  1200. return Error<PosResDto>($"推算卫星{dto.Adja1Code}的ECEF星历出错");
  1201. }
  1202. var XlCalcDto3 = new XlCalcDto() { tleStr = xl3.TwoLine, dt = dto.SigTime };
  1203. var ephAdja2 = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto3);
  1204. if (ephAdja2.code != 200)
  1205. {
  1206. Serilog.Log.Error($"推算卫星{dto.Adja2Code}的ECEF星历出错.{ephAdja2.msg}");
  1207. return Error<PosResDto>($"推算卫星{dto.Adja2Code}的ECEF星历出错");
  1208. }
  1209. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1210. {
  1211. var StationRes = db.StationRes.Add(new StationRes()
  1212. {
  1213. SatTxLon = dto.SatTxLon,
  1214. SatTxLat = dto.SatTxLat,
  1215. RefLon = dto.RefLon,
  1216. RefLat = dto.RefLat,
  1217. });
  1218. CheckRes CheckRes = null;
  1219. if (dto.CheckRes != null)
  1220. {
  1221. CheckRes cres = new CheckRes();
  1222. cres.SigTime = dto.CheckRes.SigTime;
  1223. cres.FileName = dto.CheckRes.FileName;
  1224. cres.StartSamp = dto.CheckRes.StartSamp;
  1225. cres.SampCount = dto.CheckRes.SampCount;
  1226. if (dto.CheckRes.DetectionWay.HasValue)
  1227. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1228. else
  1229. cres.DetectionWay = null;
  1230. CheckRes = db.CheckRes.Add(cres);
  1231. }
  1232. var cgRes = db.CgRes.Add(new CgRes()
  1233. {
  1234. SigTime = dto.SigTime,
  1235. Dto1 = dto.Dto1,
  1236. Dfo1 = dto.Dfo1,
  1237. Snr1 = dto.Snr1,
  1238. Dto2 = dto.Dto2,
  1239. Dfo2 = dto.Dfo2,
  1240. Snr2 = dto.Snr2,
  1241. YbMainDto = dto.YbMainDto,
  1242. YbAdja1Dto = dto.YbAdja1Dto,
  1243. YbAdja2Dto = dto.YbAdja2Dto,
  1244. StationResID = StationRes.ID,
  1245. MainCode = dto.MainCode,
  1246. Adja1Code = dto.Adja1Code,
  1247. Adja2Code = dto.Adja2Code,
  1248. TaskID = runTask.ID,
  1249. MainX = ephMain.data.X,
  1250. MainY = ephMain.data.Y,
  1251. MainZ = ephMain.data.Z,
  1252. MainVx = ephMain.data.VX,
  1253. MainVy = ephMain.data.VY,
  1254. MainVz = ephMain.data.VZ,
  1255. Adja1X = ephAdja1.data.X,
  1256. Adja1Y = ephAdja1.data.Y,
  1257. Adja1Z = ephAdja1.data.Z,
  1258. Adja1Vx = ephAdja1.data.VX,
  1259. Adja1Vy = ephAdja1.data.VY,
  1260. Adja1Vz = ephAdja1.data.VZ,
  1261. Adja2X = ephAdja2.data.X,
  1262. Adja2Y = ephAdja2.data.Y,
  1263. Adja2Z = ephAdja2.data.Z,
  1264. Adja2Vx = ephAdja2.data.VX,
  1265. Adja2Vy = ephAdja2.data.VY,
  1266. Adja2Vz = ephAdja2.data.VZ,
  1267. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  1268. TarFreqDown = dto.FreqDown,
  1269. });
  1270. var res = PosApi.X3_Pos(cgRes, StationRes);
  1271. long? checkResId = null;
  1272. PosRes posRes = new PosRes()
  1273. {
  1274. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1275. SigTime = dto.SigTime,
  1276. TaskInfoID = runTask.ID,
  1277. CgResID = cgRes.ID,
  1278. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1279. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1280. TsName = dto.TsName,
  1281. PosLon = res[0],
  1282. PosLat = res[1],
  1283. MirrLon = res[3],
  1284. MirrLat = res[4],
  1285. PosResType = EnumPosResType.X3,
  1286. };
  1287. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1288. posRes = db.PosRes.Add(posRes);
  1289. await db.SaveChangesAsync();
  1290. Messenger.Defalut.Pub("新增定位点", posRes);
  1291. return Success(MapDto(posRes));
  1292. }
  1293. }
  1294. /// <summary>
  1295. /// 三星双时差无参定位(含星历)
  1296. /// </summary>
  1297. /// <param name="dto">定位参数</param>
  1298. /// <returns></returns>
  1299. [HttpPost]
  1300. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoParAsync(X3TwoDtoNoParPosDto dto)
  1301. {
  1302. TaskInfo runTask;
  1303. SysSetings settings;
  1304. using (RHDWContext db = new RHDWContext())
  1305. {
  1306. if (dto.TaskID == null)
  1307. {
  1308. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1309. && p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
  1310. if (runTask == null)
  1311. {
  1312. Serilog.Log.Warning($"接收到三星双时差无参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  1313. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  1314. }
  1315. }
  1316. else
  1317. {
  1318. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1319. if (runTask == null)
  1320. {
  1321. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1322. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1323. }
  1324. }
  1325. settings = await db.SysSetings.FirstOrDefaultAsync();
  1326. }
  1327. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1328. {
  1329. var StationRes = db.StationRes.Add(new StationRes()
  1330. {
  1331. SatTxLon = dto.SatTxLon,
  1332. SatTxLat = dto.SatTxLat,
  1333. });
  1334. CheckRes CheckRes = null;
  1335. if (dto.CheckRes != null)
  1336. {
  1337. CheckRes cres = new CheckRes();
  1338. cres.SigTime = dto.CheckRes.SigTime;
  1339. cres.FileName = dto.CheckRes.FileName;
  1340. cres.StartSamp = dto.CheckRes.StartSamp;
  1341. cres.SampCount = dto.CheckRes.SampCount;
  1342. if (dto.CheckRes.DetectionWay.HasValue)
  1343. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1344. else
  1345. cres.DetectionWay = null;
  1346. CheckRes = db.CheckRes.Add(cres);
  1347. }
  1348. var cgRes = db.CgRes.Add(new CgRes()
  1349. {
  1350. SigTime = dto.SigTime,
  1351. Dto1 = dto.Dto1,
  1352. Dfo1 = dto.Dfo1,
  1353. Snr1 = dto.Snr1,
  1354. Dto2 = dto.Dto2,
  1355. Dfo2 = dto.Dfo2,
  1356. Snr2 = dto.Snr2,
  1357. StationResID = StationRes.ID,
  1358. MainCode = dto.MainCode,
  1359. Adja1Code = dto.Adja1Code,
  1360. Adja2Code = dto.Adja2Code,
  1361. TaskID = runTask.ID,
  1362. MainX = dto.MainX,
  1363. MainY = dto.MainY,
  1364. MainZ = dto.MainZ,
  1365. MainVx = dto.MainVX,
  1366. MainVy = dto.MainVY,
  1367. MainVz = dto.MainVZ,
  1368. Adja1X = dto.Adja1X,
  1369. Adja1Y = dto.Adja1Y,
  1370. Adja1Z = dto.Adja1Z,
  1371. Adja1Vx = dto.Adja1VX,
  1372. Adja1Vy = dto.Adja1VY,
  1373. Adja1Vz = dto.Adja1VZ,
  1374. Adja2X = dto.Adja2X,
  1375. Adja2Y = dto.Adja2Y,
  1376. Adja2Z = dto.Adja2Z,
  1377. Adja2Vx = dto.Adja2VX,
  1378. Adja2Vy = dto.Adja2VY,
  1379. Adja2Vz = dto.Adja2VZ,
  1380. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  1381. TarFreqDown = dto.FreqDown,
  1382. });
  1383. var res = PosApi.X3_PosNoRef(cgRes, StationRes);
  1384. long? checkResId = null;
  1385. PosRes posRes = new PosRes()
  1386. {
  1387. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1388. SigTime = cgRes.SigTime,
  1389. TaskInfoID = runTask.ID,
  1390. CgResID = cgRes.ID,
  1391. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1392. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1393. TsName = dto.TsName,
  1394. PosLon = res[0],
  1395. PosLat = res[1],
  1396. MirrLon = res[3],
  1397. MirrLat = res[4],
  1398. PosResType = EnumPosResType.X3NoRef,
  1399. };
  1400. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1401. posRes = db.PosRes.Add(posRes);
  1402. await db.SaveChangesAsync();
  1403. Messenger.Defalut.Pub("新增定位点", posRes);
  1404. return Success(MapDto(posRes));
  1405. }
  1406. }
  1407. /// <summary>
  1408. /// 三星双时差无参定位(无星历)
  1409. /// </summary>
  1410. /// <returns>返回定位结果ID</returns>
  1411. [HttpPost]
  1412. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoXlNoParAsync(X3TwoDtoNoXlNoParPosDto dto)
  1413. {
  1414. TaskInfo runTask;
  1415. SysSetings settings;
  1416. using (RHDWContext db = new RHDWContext())
  1417. {
  1418. if (dto.TaskID == null)
  1419. {
  1420. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1421. && p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
  1422. if (runTask == null)
  1423. {
  1424. Serilog.Log.Warning($"接收到三星双时差无参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  1425. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  1426. }
  1427. }
  1428. else
  1429. {
  1430. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1431. if (runTask == null)
  1432. {
  1433. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1434. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1435. }
  1436. }
  1437. settings = await db.SysSetings.FirstOrDefaultAsync();
  1438. }
  1439. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  1440. if (xl1 == null)
  1441. {
  1442. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  1443. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  1444. }
  1445. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1446. var xl2 = await XlRepository.GetLatestAsync(dto.Adja1Code, dto.SigTime);
  1447. if (xl2 == null)
  1448. {
  1449. Serilog.Log.Error($"系统缺少编号{dto.Adja1Code}卫星的星历!");
  1450. return Error<PosResDto>($"系统缺少编号{dto.Adja1Code}卫星的星历!");
  1451. }
  1452. Serilog.Log.Information($"卫星{dto.Adja1Code}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1453. var xl3 = await XlRepository.GetLatestAsync(dto.Adja2Code, dto.SigTime);
  1454. if (xl3 == null)
  1455. {
  1456. Serilog.Log.Error($"系统缺少编号{dto.Adja2Code}卫星的星历!");
  1457. return Error<PosResDto>($"系统缺少编号{dto.Adja2Code}卫星的星历!");
  1458. }
  1459. Serilog.Log.Information($"卫星{dto.Adja2Code}使用发布时刻为{xl3.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1460. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  1461. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  1462. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  1463. if (ephMain.code != 200)
  1464. {
  1465. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  1466. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  1467. }
  1468. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  1469. var ephAdja1 = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  1470. if (ephAdja1.code != 200)
  1471. {
  1472. Serilog.Log.Error($"推算卫星{dto.Adja1Code}的ECEF星历出错.{ephAdja1.msg}");
  1473. return Error<PosResDto>($"推算卫星{dto.Adja1Code}的ECEF星历出错");
  1474. }
  1475. var XlCalcDto3 = new XlCalcDto() { tleStr = xl3.TwoLine, dt = dto.SigTime };
  1476. var ephAdja2 = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto3);
  1477. if (ephAdja2.code != 200)
  1478. {
  1479. Serilog.Log.Error($"推算卫星{dto.Adja2Code}的ECEF星历出错.{ephAdja2.msg}");
  1480. return Error<PosResDto>($"推算卫星{dto.Adja2Code}的ECEF星历出错");
  1481. }
  1482. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1483. {
  1484. var StationRes = db.StationRes.Add(new StationRes()
  1485. {
  1486. SatTxLon = dto.SatTxLon,
  1487. SatTxLat = dto.SatTxLat,
  1488. });
  1489. CheckRes CheckRes = null;
  1490. if (dto.CheckRes != null)
  1491. {
  1492. CheckRes cres = new CheckRes();
  1493. cres.SigTime = dto.CheckRes.SigTime;
  1494. cres.FileName = dto.CheckRes.FileName;
  1495. cres.StartSamp = dto.CheckRes.StartSamp;
  1496. cres.SampCount = dto.CheckRes.SampCount;
  1497. if (dto.CheckRes.DetectionWay.HasValue)
  1498. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1499. else
  1500. cres.DetectionWay = null;
  1501. CheckRes = db.CheckRes.Add(cres);
  1502. }
  1503. var cgRes = db.CgRes.Add(new CgRes()
  1504. {
  1505. SigTime = dto.SigTime,
  1506. Dto1 = dto.Dto1,
  1507. Dfo1 = dto.Dfo1,
  1508. Snr1 = dto.Snr1,
  1509. Dto2 = dto.Dto2,
  1510. Dfo2 = dto.Dfo2,
  1511. Snr2 = dto.Snr2,
  1512. StationResID = StationRes.ID,
  1513. MainCode = dto.MainCode,
  1514. Adja1Code = dto.Adja1Code,
  1515. Adja2Code = dto.Adja2Code,
  1516. TaskID = runTask.ID,
  1517. MainX = ephMain.data.X,
  1518. MainY = ephMain.data.Y,
  1519. MainZ = ephMain.data.Z,
  1520. MainVx = ephMain.data.VX,
  1521. MainVy = ephMain.data.VY,
  1522. MainVz = ephMain.data.VZ,
  1523. Adja1X = ephAdja1.data.X,
  1524. Adja1Y = ephAdja1.data.Y,
  1525. Adja1Z = ephAdja1.data.Z,
  1526. Adja1Vx = ephAdja1.data.VX,
  1527. Adja1Vy = ephAdja1.data.VY,
  1528. Adja1Vz = ephAdja1.data.VZ,
  1529. Adja2X = ephAdja2.data.X,
  1530. Adja2Y = ephAdja2.data.Y,
  1531. Adja2Z = ephAdja2.data.Z,
  1532. Adja2Vx = ephAdja2.data.VX,
  1533. Adja2Vy = ephAdja2.data.VY,
  1534. Adja2Vz = ephAdja2.data.VZ,
  1535. TarFreqUp = dto.FreqUp == null ? runTask.Freq : dto.FreqUp,
  1536. TarFreqDown = dto.FreqDown,
  1537. });
  1538. var res = PosApi.X3_PosNoRef(cgRes, StationRes);
  1539. long? checkResId = null;
  1540. PosRes posRes = new PosRes()
  1541. {
  1542. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1543. SigTime = dto.SigTime,
  1544. TaskInfoID = runTask.ID,
  1545. CgResID = cgRes.ID,
  1546. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1547. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1548. TsName = dto.TsName,
  1549. PosLon = res[0],
  1550. PosLat = res[1],
  1551. MirrLon = res[3],
  1552. MirrLat = res[4],
  1553. PosResType = EnumPosResType.X3NoRef,
  1554. };
  1555. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1556. posRes = db.PosRes.Add(posRes);
  1557. await db.SaveChangesAsync();
  1558. Messenger.Defalut.Pub("新增定位点", posRes);
  1559. return Success(MapDto(posRes));
  1560. }
  1561. }
  1562. #endregion
  1563. #region 三星双频差定位
  1564. /// <summary>
  1565. /// 三星双频差带参定位(含星历)
  1566. /// </summary>
  1567. /// <param name="dto">定位参数</param>
  1568. /// <returns></returns>
  1569. [HttpPost]
  1570. public async Task<AjaxResult<PosResDto>> PosX3TwoDfoAsync(X3TwoDfoPosDto dto)
  1571. {
  1572. TaskInfo runTask;
  1573. SysSetings settings;
  1574. using (RHDWContext db = new RHDWContext())
  1575. {
  1576. if (dto.TaskID == null)
  1577. {
  1578. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1579. && p.PosType == EnumPosType.X3TwoDfo && p.TaskState == EnumTaskState.Running);
  1580. if (runTask == null)
  1581. {
  1582. Serilog.Log.Warning($"接收到三星双频差带参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  1583. return Error<PosResDto>($"多模式融合定位平台没有启动三星双频差定位任务");
  1584. }
  1585. }
  1586. else
  1587. {
  1588. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1589. if (runTask == null)
  1590. {
  1591. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1592. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1593. }
  1594. }
  1595. settings = await db.SysSetings.FirstOrDefaultAsync();
  1596. }
  1597. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1598. {
  1599. var StationRes = db.StationRes.Add(new StationRes()
  1600. {
  1601. SatTxLon = dto.SatTxLon,
  1602. SatTxLat = dto.SatTxLat,
  1603. RefLon = dto.RefLon,
  1604. RefLat = dto.RefLat,
  1605. });
  1606. CheckRes CheckRes = null;
  1607. if (dto.CheckRes != null)
  1608. {
  1609. CheckRes cres = new CheckRes();
  1610. cres.SigTime = dto.CheckRes.SigTime;
  1611. cres.FileName = dto.CheckRes.FileName;
  1612. cres.StartSamp = dto.CheckRes.StartSamp;
  1613. cres.SampCount = dto.CheckRes.SampCount;
  1614. if (dto.CheckRes.DetectionWay.HasValue)
  1615. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1616. else
  1617. cres.DetectionWay = null;
  1618. CheckRes = db.CheckRes.Add(cres);
  1619. }
  1620. var cgRes = db.CgRes.Add(new CgRes()
  1621. {
  1622. SigTime = dto.SigTime,
  1623. Dto1 = dto.Dto1,
  1624. Dfo1 = dto.Dfo1,
  1625. Snr1 = dto.Snr1,
  1626. Dto2 = dto.Dto2,
  1627. Dfo2 = dto.Dfo2,
  1628. Snr2 = dto.Snr2,
  1629. YbMainDfo = dto.YbMainDfo,
  1630. YbAdja1Dfo = dto.YbAdja1Dfo,
  1631. YbAdja2Dfo = dto.YbAdja2Dfo,
  1632. TarFreqUp = dto.TarFreqUp,
  1633. TarFreqDown = dto.TarFreqDown,
  1634. RefFreqUp = dto.RefFreqUp,
  1635. RefFreqDown = dto.RefFreqDown,
  1636. StationResID = StationRes.ID,
  1637. MainCode = dto.MainCode,
  1638. Adja1Code = dto.Adja1Code,
  1639. Adja2Code = dto.Adja2Code,
  1640. TaskID = runTask.ID,
  1641. MainX = dto.MainX,
  1642. MainY = dto.MainY,
  1643. MainZ = dto.MainZ,
  1644. MainVx = dto.MainVx,
  1645. MainVy = dto.MainVy,
  1646. MainVz = dto.MainVz,
  1647. Adja1X = dto.Adja1X,
  1648. Adja1Y = dto.Adja1Y,
  1649. Adja1Z = dto.Adja1Z,
  1650. Adja1Vx = dto.Adja1Vx,
  1651. Adja1Vy = dto.Adja1Vy,
  1652. Adja1Vz = dto.Adja1Vz,
  1653. Adja2X = dto.Adja2X,
  1654. Adja2Y = dto.Adja2Y,
  1655. Adja2Z = dto.Adja2Z,
  1656. Adja2Vx = dto.Adja2Vx,
  1657. Adja2Vy = dto.Adja2Vy,
  1658. Adja2Vz = dto.Adja2Vz,
  1659. });
  1660. var res = PosApi.X3_PosTwoDfo(cgRes, StationRes);
  1661. long? checkResId = null;
  1662. PosRes posRes = new PosRes()
  1663. {
  1664. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1665. SigTime = cgRes.SigTime,
  1666. TaskInfoID = runTask.ID,
  1667. CgResID = cgRes.ID,
  1668. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1669. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1670. TsName = dto.TsName,
  1671. PosLon = res[0],
  1672. PosLat = res[1],
  1673. MirrLon = res[3],
  1674. MirrLat = res[4],
  1675. PosResType = EnumPosResType.X3TwoDfo,
  1676. };
  1677. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1678. posRes = db.PosRes.Add(posRes);
  1679. await db.SaveChangesAsync();
  1680. Messenger.Defalut.Pub("新增定位点", posRes);
  1681. return Success(MapDto(posRes));
  1682. }
  1683. }
  1684. /// <summary>
  1685. /// 三星双频差带参定位(无星历)
  1686. /// </summary>
  1687. /// <returns>返回定位结果ID</returns>
  1688. [HttpPost]
  1689. public async Task<AjaxResult<PosResDto>> PosX3TwoDfoNoXlAsync(X3TwoDfoNoXlPosDto dto)
  1690. {
  1691. TaskInfo runTask;
  1692. SysSetings settings;
  1693. using (RHDWContext db = new RHDWContext())
  1694. {
  1695. if (dto.TaskID == null)
  1696. {
  1697. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1698. && p.PosType == EnumPosType.X3TwoDfo && p.TaskState == EnumTaskState.Running);
  1699. if (runTask == null)
  1700. {
  1701. Serilog.Log.Warning($"接收到三星双频差带参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  1702. return Error<PosResDto>($"多模式融合定位平台没有启动三星双频差定位任务");
  1703. }
  1704. }
  1705. else
  1706. {
  1707. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1708. if (runTask == null)
  1709. {
  1710. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1711. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1712. }
  1713. }
  1714. settings = await db.SysSetings.FirstOrDefaultAsync();
  1715. }
  1716. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  1717. if (xl1 == null)
  1718. {
  1719. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  1720. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  1721. }
  1722. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1723. var xl2 = await XlRepository.GetLatestAsync(dto.Adja1Code, dto.SigTime);
  1724. if (xl2 == null)
  1725. {
  1726. Serilog.Log.Error($"系统缺少编号{dto.Adja1Code}卫星的星历!");
  1727. return Error<PosResDto>($"系统缺少编号{dto.Adja1Code}卫星的星历!");
  1728. }
  1729. Serilog.Log.Information($"卫星{dto.Adja1Code}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1730. var xl3 = await XlRepository.GetLatestAsync(dto.Adja2Code, dto.SigTime);
  1731. if (xl3 == null)
  1732. {
  1733. Serilog.Log.Error($"系统缺少编号{dto.Adja2Code}卫星的星历!");
  1734. return Error<PosResDto>($"系统缺少编号{dto.Adja2Code}卫星的星历!");
  1735. }
  1736. Serilog.Log.Information($"卫星{dto.Adja2Code}使用发布时刻为{xl3.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1737. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  1738. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  1739. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  1740. if (ephMain.code != 200)
  1741. {
  1742. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  1743. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  1744. }
  1745. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  1746. var ephAdja1 = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  1747. if (ephAdja1.code != 200)
  1748. {
  1749. Serilog.Log.Error($"推算卫星{dto.Adja1Code}的ECEF星历出错.{ephAdja1.msg}");
  1750. return Error<PosResDto>($"推算卫星{dto.Adja1Code}的ECEF星历出错");
  1751. }
  1752. var XlCalcDto3 = new XlCalcDto() { tleStr = xl3.TwoLine, dt = dto.SigTime };
  1753. var ephAdja2 = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto3);
  1754. if (ephAdja2.code != 200)
  1755. {
  1756. Serilog.Log.Error($"推算卫星{dto.Adja2Code}的ECEF星历出错.{ephAdja2.msg}");
  1757. return Error<PosResDto>($"推算卫星{dto.Adja2Code}的ECEF星历出错");
  1758. }
  1759. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1760. {
  1761. var StationRes = db.StationRes.Add(new StationRes()
  1762. {
  1763. SatTxLon = dto.SatTxLon,
  1764. SatTxLat = dto.SatTxLat,
  1765. RefLon = dto.RefLon,
  1766. RefLat = dto.RefLat,
  1767. });
  1768. CheckRes CheckRes = null;
  1769. if (dto.CheckRes != null)
  1770. {
  1771. CheckRes cres = new CheckRes();
  1772. cres.SigTime = dto.CheckRes.SigTime;
  1773. cres.FileName = dto.CheckRes.FileName;
  1774. cres.StartSamp = dto.CheckRes.StartSamp;
  1775. cres.SampCount = dto.CheckRes.SampCount;
  1776. if (dto.CheckRes.DetectionWay.HasValue)
  1777. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1778. else
  1779. cres.DetectionWay = null;
  1780. CheckRes = db.CheckRes.Add(cres);
  1781. }
  1782. var cgRes = db.CgRes.Add(new CgRes()
  1783. {
  1784. SigTime = dto.SigTime,
  1785. Dto1 = dto.Dto1,
  1786. Dfo1 = dto.Dfo1,
  1787. Snr1 = dto.Snr1,
  1788. Dto2 = dto.Dto2,
  1789. Dfo2 = dto.Dfo2,
  1790. Snr2 = dto.Snr2,
  1791. YbMainDfo = dto.YbMainDfo,
  1792. YbAdja1Dfo = dto.YbAdja1Dfo,
  1793. YbAdja2Dfo = dto.YbAdja2Dfo,
  1794. TarFreqUp = dto.TarFreqUp,
  1795. TarFreqDown = dto.TarFreqDown,
  1796. RefFreqUp = dto.RefFreqUp,
  1797. RefFreqDown = dto.RefFreqDown,
  1798. StationResID = StationRes.ID,
  1799. MainCode = dto.MainCode,
  1800. Adja1Code = dto.Adja1Code,
  1801. Adja2Code = dto.Adja2Code,
  1802. TaskID = runTask.ID,
  1803. MainX = ephMain.data.X,
  1804. MainY = ephMain.data.Y,
  1805. MainZ = ephMain.data.Z,
  1806. MainVx = ephMain.data.VX,
  1807. MainVy = ephMain.data.VY,
  1808. MainVz = ephMain.data.VZ,
  1809. Adja1X = ephAdja1.data.X,
  1810. Adja1Y = ephAdja1.data.Y,
  1811. Adja1Z = ephAdja1.data.Z,
  1812. Adja1Vx = ephAdja1.data.VX,
  1813. Adja1Vy = ephAdja1.data.VY,
  1814. Adja1Vz = ephAdja1.data.VZ,
  1815. Adja2X = ephAdja2.data.X,
  1816. Adja2Y = ephAdja2.data.Y,
  1817. Adja2Z = ephAdja2.data.Z,
  1818. Adja2Vx = ephAdja2.data.VX,
  1819. Adja2Vy = ephAdja2.data.VY,
  1820. Adja2Vz = ephAdja2.data.VZ,
  1821. });
  1822. var res = PosApi.X3_PosTwoDfo(cgRes, StationRes);
  1823. long? checkResId = null;
  1824. PosRes posRes = new PosRes()
  1825. {
  1826. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1827. SigTime = dto.SigTime,
  1828. TaskInfoID = runTask.ID,
  1829. CgResID = cgRes.ID,
  1830. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1831. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1832. TsName = dto.TsName,
  1833. PosLon = res[0],
  1834. PosLat = res[1],
  1835. MirrLon = res[3],
  1836. MirrLat = res[4],
  1837. PosResType = EnumPosResType.X3TwoDfo,
  1838. };
  1839. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1840. posRes = db.PosRes.Add(posRes);
  1841. await db.SaveChangesAsync();
  1842. Messenger.Defalut.Pub("新增定位点", posRes);
  1843. return Success(MapDto(posRes));
  1844. }
  1845. }
  1846. #endregion
  1847. #region 双星时频差定位
  1848. /// <summary>
  1849. /// 双星时频差带参定位(含星历)
  1850. /// </summary>
  1851. /// <param name="dto">定位参数</param>
  1852. /// <returns></returns>
  1853. [HttpPost]
  1854. public async Task<AjaxResult<PosResDto>> PosX2DtoDfoAsync(X2DtoDfoPosDto dto)
  1855. {
  1856. TaskInfo runTask;
  1857. SysSetings settings;
  1858. using (RHDWContext db = new RHDWContext())
  1859. {
  1860. if (dto.TaskID == null)
  1861. {
  1862. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1863. && p.PosType == EnumPosType.X2Dfo && p.TaskState == EnumTaskState.Running);
  1864. if (runTask == null)
  1865. {
  1866. Serilog.Log.Warning($"接收到双星时频差带参定位(含星历)参数,由于找不到执行中的任务忽略本次定位");
  1867. return Error<PosResDto>($"多模式融合定位平台没有启动双星时频差定位任务");
  1868. }
  1869. }
  1870. else
  1871. {
  1872. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1873. if (runTask == null)
  1874. {
  1875. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1876. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1877. }
  1878. }
  1879. settings = await db.SysSetings.FirstOrDefaultAsync();
  1880. }
  1881. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  1882. {
  1883. var StationRes = db.StationRes.Add(new StationRes()
  1884. {
  1885. SatTxLon = dto.SatTxLon,
  1886. SatTxLat = dto.SatTxLat,
  1887. RefLon = dto.RefLon,
  1888. RefLat = dto.RefLat,
  1889. });
  1890. CheckRes CheckRes = null;
  1891. if (dto.CheckRes != null)
  1892. {
  1893. CheckRes cres = new CheckRes();
  1894. cres.SigTime = dto.CheckRes.SigTime;
  1895. cres.FileName = dto.CheckRes.FileName;
  1896. cres.StartSamp = dto.CheckRes.StartSamp;
  1897. cres.SampCount = dto.CheckRes.SampCount;
  1898. if (dto.CheckRes.DetectionWay.HasValue)
  1899. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  1900. else
  1901. cres.DetectionWay = null;
  1902. CheckRes = db.CheckRes.Add(cres);
  1903. }
  1904. var cgRes = db.CgRes.Add(new CgRes()
  1905. {
  1906. SigTime = dto.SigTime,
  1907. Dto1 = dto.Dto,
  1908. Dfo1 = dto.Dfo,
  1909. Snr1 = dto.Snr,
  1910. YbMainDto = dto.YbMainDto,
  1911. YbAdja1Dto = dto.YbAdjaDto,
  1912. YbMainDfo = dto.YbMainDfo,
  1913. YbAdja1Dfo = dto.YbAdjaDfo,
  1914. TarFreqUp = dto.TarFreqUp,
  1915. TarFreqDown = dto.TarFreqDown,
  1916. RefFreqUp = dto.RefFreqUp,
  1917. RefFreqDown = dto.RefFreqDown,
  1918. StationResID = StationRes.ID,
  1919. MainCode = dto.MainCode,
  1920. Adja1Code = dto.AdjaCode,
  1921. TaskID = runTask.ID,
  1922. MainX = dto.MainX,
  1923. MainY = dto.MainY,
  1924. MainZ = dto.MainZ,
  1925. MainVx = dto.MainVx,
  1926. MainVy = dto.MainVy,
  1927. MainVz = dto.MainVz,
  1928. Adja1X = dto.AdjaX,
  1929. Adja1Y = dto.AdjaY,
  1930. Adja1Z = dto.AdjaZ,
  1931. Adja1Vx = dto.AdjaVx,
  1932. Adja1Vy = dto.AdjaVy,
  1933. Adja1Vz = dto.AdjaVz,
  1934. });
  1935. var res = PosApi.X2_PosDtoDfo(cgRes, StationRes);
  1936. long? checkResId = null;
  1937. PosRes posRes = new PosRes()
  1938. {
  1939. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  1940. SigTime = cgRes.SigTime,
  1941. TaskInfoID = runTask.ID,
  1942. CgResID = cgRes.ID,
  1943. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  1944. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1945. TsName = dto.TsName,
  1946. PosLon = res[0],
  1947. PosLat = res[1],
  1948. MirrLon = res[3],
  1949. MirrLat = res[4],
  1950. PosResType = EnumPosResType.X2Dfo,
  1951. };
  1952. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  1953. posRes = db.PosRes.Add(posRes);
  1954. await db.SaveChangesAsync();
  1955. Messenger.Defalut.Pub("新增定位点", posRes);
  1956. return Success(MapDto(posRes));
  1957. }
  1958. }
  1959. /// <summary>
  1960. /// 双星时频差带参定位(无星历)
  1961. /// </summary>
  1962. /// <returns>返回定位结果ID</returns>
  1963. [HttpPost]
  1964. public async Task<AjaxResult<PosResDto>> PosX2DtoDfoNoXlAsync(X2DtoDfoNoXlPosDto dto)
  1965. {
  1966. TaskInfo runTask;
  1967. SysSetings settings;
  1968. using (RHDWContext db = new RHDWContext())
  1969. {
  1970. if (dto.TaskID == null)
  1971. {
  1972. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskType == EnumTaskType.Real
  1973. && p.PosType == EnumPosType.X2Dfo && p.TaskState == EnumTaskState.Running);
  1974. if (runTask == null)
  1975. {
  1976. Serilog.Log.Warning($"接收到双星时频差带参定位(无星历)参数,由于找不到执行中的任务忽略本次定位");
  1977. return Error<PosResDto>($"多模式融合定位平台没有启动双星时频差定位任务");
  1978. }
  1979. }
  1980. else
  1981. {
  1982. runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
  1983. if (runTask == null)
  1984. {
  1985. Serilog.Log.Warning($"找不到任务,ID={dto.TaskID}");
  1986. return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
  1987. }
  1988. }
  1989. settings = await db.SysSetings.FirstOrDefaultAsync();
  1990. }
  1991. var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
  1992. if (xl1 == null)
  1993. {
  1994. Serilog.Log.Error($"系统缺少编号{dto.MainCode}卫星的星历!");
  1995. return Error<PosResDto>($"系统缺少编号{dto.MainCode}卫星的星历!");
  1996. }
  1997. Serilog.Log.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  1998. var xl2 = await XlRepository.GetLatestAsync(dto.AdjaCode, dto.SigTime);
  1999. if (xl2 == null)
  2000. {
  2001. Serilog.Log.Error($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  2002. return Error<PosResDto>($"系统缺少编号{dto.AdjaCode}卫星的星历!");
  2003. }
  2004. Serilog.Log.Information($"卫星{dto.AdjaCode}使用发布时刻为{xl2.TimeBJ:yyyyMMddHHmmss}的星历进行推算");
  2005. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  2006. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, dt = dto.SigTime };
  2007. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto);
  2008. if (ephMain.code != 200)
  2009. {
  2010. Serilog.Log.Error($"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}");
  2011. return Error<PosResDto>($"推算卫星{dto.MainCode}的ECEF星历出错");
  2012. }
  2013. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, dt = dto.SigTime };
  2014. var ephAdja = await HttpHelper.PostRequestAsync<SatEphResDto>(url, XlCalcDto2);
  2015. if (ephAdja.code != 200)
  2016. {
  2017. Serilog.Log.Error($"推算卫星{dto.AdjaCode}的ECEF星历出错.{ephAdja.msg}");
  2018. return Error<PosResDto>($"推算卫星{dto.AdjaCode}的ECEF星历出错");
  2019. }
  2020. using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
  2021. {
  2022. var StationRes = db.StationRes.Add(new StationRes()
  2023. {
  2024. SatTxLon = dto.SatTxLon,
  2025. SatTxLat = dto.SatTxLat,
  2026. RefLon = dto.RefLon,
  2027. RefLat = dto.RefLat,
  2028. });
  2029. CheckRes CheckRes = null;
  2030. if (dto.CheckRes != null)
  2031. {
  2032. CheckRes cres = new CheckRes();
  2033. cres.SigTime = dto.CheckRes.SigTime;
  2034. cres.FileName = dto.CheckRes.FileName;
  2035. cres.StartSamp = dto.CheckRes.StartSamp;
  2036. cres.SampCount = dto.CheckRes.SampCount;
  2037. if (dto.CheckRes.DetectionWay.HasValue)
  2038. cres.DetectionWay = (EnumDetectionWay)dto.CheckRes.DetectionWay;
  2039. else
  2040. cres.DetectionWay = null;
  2041. CheckRes = db.CheckRes.Add(cres);
  2042. }
  2043. var cgRes = db.CgRes.Add(new CgRes()
  2044. {
  2045. SigTime = dto.SigTime,
  2046. Dto1 = dto.Dto,
  2047. Dfo1 = dto.Dfo,
  2048. Snr1 = dto.Snr,
  2049. YbMainDto = dto.YbMainDto,
  2050. YbAdja1Dto = dto.YbAdjaDto,
  2051. YbMainDfo = dto.YbMainDfo,
  2052. YbAdja1Dfo = dto.YbAdjaDfo,
  2053. TarFreqUp = dto.TarFreqUp,
  2054. TarFreqDown = dto.TarFreqDown,
  2055. RefFreqUp = dto.RefFreqUp,
  2056. RefFreqDown = dto.RefFreqDown,
  2057. StationResID = StationRes.ID,
  2058. MainCode = dto.MainCode,
  2059. Adja1Code = dto.AdjaCode,
  2060. TaskID = runTask.ID,
  2061. MainX = ephMain.data.X,
  2062. MainY = ephMain.data.Y,
  2063. MainZ = ephMain.data.Z,
  2064. MainVx = ephMain.data.VX,
  2065. MainVy = ephMain.data.VY,
  2066. MainVz = ephMain.data.VZ,
  2067. Adja1X = ephAdja.data.X,
  2068. Adja1Y = ephAdja.data.Y,
  2069. Adja1Z = ephAdja.data.Z,
  2070. Adja1Vx = ephAdja.data.VX,
  2071. Adja1Vy = ephAdja.data.VY,
  2072. Adja1Vz = ephAdja.data.VZ,
  2073. });
  2074. var res = PosApi.X2_PosDtoDfo(cgRes, StationRes);
  2075. long? checkResId = null;
  2076. PosRes posRes = new PosRes()
  2077. {
  2078. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  2079. SigTime = dto.SigTime,
  2080. TaskInfoID = runTask.ID,
  2081. CgResID = cgRes.ID,
  2082. CheckResID = CheckRes == null ? checkResId : CheckRes.ID,
  2083. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  2084. TsName = dto.TsName,
  2085. PosLon = res[0],
  2086. PosLat = res[1],
  2087. MirrLon = res[3],
  2088. MirrLat = res[4],
  2089. PosResType = EnumPosResType.X2Dfo,
  2090. };
  2091. posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, settings.YDPZThreshold);
  2092. posRes = db.PosRes.Add(posRes);
  2093. await db.SaveChangesAsync();
  2094. Messenger.Defalut.Pub("新增定位点", posRes);
  2095. return Success(MapDto(posRes));
  2096. }
  2097. }
  2098. #endregion
  2099. #region 定位结果查询接口
  2100. /// <summary>
  2101. /// 根据时间范围查询定位结果
  2102. /// </summary>
  2103. /// <param name="dto"><see cref="PosRequestByTimeRangeDto"/>查询参数</param>
  2104. /// <returns></returns>
  2105. /// <exception cref="Exception"></exception>
  2106. [HttpPost]
  2107. public async Task<AjaxResult<List<PosResDto>>> GetPosResByTimeRange(PosRequestByTimeRangeDto dto)
  2108. {
  2109. #pragma warning disable CS0612 // 类型或成员已过时
  2110. var response = (await GetPosResByTimeRangeObsolete(dto));
  2111. #pragma warning restore CS0612 // 类型或成员已过时
  2112. if (response.code == 200)
  2113. {
  2114. var listDto = response.data?.Select(p => MapDto(p)).ToList();
  2115. return Success(listDto);
  2116. }
  2117. else
  2118. {
  2119. return Error<List<PosResDto>>(response.msg);
  2120. }
  2121. }
  2122. /// <summary>
  2123. /// 查询最后X小时的的定位结果
  2124. /// </summary>
  2125. /// <param name="dto"><see cref="PosRequestByLastRangeDto"/>查询参数</param>
  2126. /// <returns></returns>
  2127. /// <exception cref="Exception"></exception>
  2128. [HttpPost]
  2129. public async Task<AjaxResult<List<PosResDto>>> GetPosResByLastHours(PosRequestByLastRangeDto dto)
  2130. {
  2131. #pragma warning disable CS0612 // 类型或成员已过时
  2132. var response = (await GetPosResByLastHoursObsolete(dto));
  2133. #pragma warning restore CS0612 // 类型或成员已过时
  2134. if (response.code == 200)
  2135. {
  2136. var listDto = response.data?.Select(p => MapDto(p)).ToList();
  2137. return Success(listDto);
  2138. }
  2139. else
  2140. {
  2141. return Error<List<PosResDto>>(response.msg);
  2142. }
  2143. }
  2144. /// <summary>
  2145. /// 根据时间范围查询定位结果(此方法内部调用)
  2146. /// </summary>
  2147. /// <param name="dto"><see cref="PosRequestByTimeRangeDto"/>查询参数</param>
  2148. /// <returns></returns>
  2149. /// <exception cref="Exception"></exception>
  2150. [HttpPost]
  2151. [Obsolete]
  2152. public async Task<AjaxResult<List<ModelPosRes>>> GetPosResByTimeRangeObsolete(PosRequestByTimeRangeDto dto)
  2153. {
  2154. List<ModelPosRes> posList = new List<ModelPosRes>();
  2155. try
  2156. {
  2157. DateTime start = dto.BeginTime;
  2158. DateTime end = dto.EndTime;
  2159. var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
  2160. if (!Directory.Exists(dir)) return Success(posList);
  2161. List<string> list = new List<string>();
  2162. while (end >= start)
  2163. {
  2164. list.Add(end.ToString("yyyy") + "\\" + end.ToString("MMdd") + ".db");
  2165. end = end.AddDays(-1);
  2166. }
  2167. end = dto.EndTime;
  2168. foreach (var item in list)
  2169. {
  2170. var dayFile = Path.Combine(dir, item);
  2171. using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile))
  2172. {
  2173. var query = db.PosRes.Where(p => p.SigTime >= start && p.SigTime <= end && p.TaskInfoID == dto.TaskInfoID);
  2174. if (!dto.IncludeInvalidate)
  2175. query = query.Where(p => p.PosLon != 999);
  2176. if (dto.TarFrequpHz != null)
  2177. query = query.Where(p => p.FreqUpHz == dto.TarFrequpHz.Value);
  2178. var posRes = await query.OrderByDescending(p => p.SigTime).ToListAsync();
  2179. posList.AddRange(posRes.Select(p => MapModel(p)));
  2180. if (posList.Count > 5000)
  2181. {
  2182. return Success(posList.Take(5000).ToList(), "数据过多,只返回前5000条数据!");
  2183. }
  2184. }
  2185. }
  2186. return Success(posList);
  2187. }
  2188. catch (Exception ex)
  2189. {
  2190. string msg = $"定位结果时间范围查询异常.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}";
  2191. Serilog.Log.Error(ex, msg);
  2192. return Error<List<ModelPosRes>>("定位结果时间范围查询异常");
  2193. }
  2194. }
  2195. /// <summary>
  2196. /// 查询最后X小时的的定位结果(此方法内部调用)
  2197. /// </summary>
  2198. /// <param name="dto"><see cref="PosRequestByLastRangeDto"/>查询参数</param>
  2199. /// <returns></returns>
  2200. /// <exception cref="Exception"></exception>
  2201. [HttpPost]
  2202. [Obsolete]
  2203. public async Task<AjaxResult<List<ModelPosRes>>> GetPosResByLastHoursObsolete(PosRequestByLastRangeDto dto)
  2204. {
  2205. List<ModelPosRes> posList = new List<ModelPosRes>();
  2206. try
  2207. {
  2208. var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
  2209. if (!Directory.Exists(dir)) return Success(posList);
  2210. var yearDirs = Directory.EnumerateDirectories(dir).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列
  2211. DateTime max = DateTime.MinValue;
  2212. foreach (var yearDir in yearDirs)
  2213. {
  2214. if (max != DateTime.MinValue) break;
  2215. //每一天的db文件,倒序排列
  2216. var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4)));
  2217. foreach (var dayFile in dayFiles)
  2218. {
  2219. using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile))
  2220. {
  2221. var query = db.PosRes.Where(p => p.TaskInfoID == dto.TaskInfoID);
  2222. if (!dto.IncludeInvalidate)
  2223. {
  2224. query = query.Where(p => p.PosLon != 999);
  2225. }
  2226. if (dto.TarFrequpHz != null)
  2227. {
  2228. query = query.Where(p => p.FreqUpHz == dto.TarFrequpHz);
  2229. }
  2230. bool any = await query.AnyAsync();
  2231. if (any)
  2232. max = await query.MaxAsync(p => p.SigTime);
  2233. }
  2234. if (max != DateTime.MinValue)
  2235. {
  2236. break;
  2237. }
  2238. }
  2239. }
  2240. if (max == DateTime.MinValue) return Success(posList);
  2241. DateTime min = max.AddHours(-dto.Hours);
  2242. var res = await GetPosResByTimeRangeObsolete(new PosRequestByTimeRangeDto()
  2243. {
  2244. TaskInfoID = dto.TaskInfoID,
  2245. BeginTime = min,
  2246. EndTime = max,
  2247. IncludeInvalidate = dto.IncludeInvalidate,
  2248. TarFrequpHz = dto.TarFrequpHz,
  2249. });
  2250. return res;
  2251. }
  2252. catch (Exception ex)
  2253. {
  2254. string msg = $"定位结果查询最新数据异常-任务编号:{dto.TaskInfoID},Hours:{dto.Hours}";
  2255. Serilog.Log.Error(ex, msg);
  2256. return Error<List<ModelPosRes>>("定位结果查询最新数据异常");
  2257. }
  2258. }
  2259. #endregion
  2260. private PosResDto MapDto(PosRes res)
  2261. {
  2262. return new PosResDto()
  2263. {
  2264. ID = res.ID,
  2265. FreqUpHz = res.FreqUpHz,
  2266. UserName = res.TsName,
  2267. SigTime = res.SigTime,
  2268. TaskInfoID = res.TaskInfoID,
  2269. TarName = string.IsNullOrWhiteSpace(res.TarName) ? "未知目标" : res.TarName,
  2270. PosLon = res.PosLon,
  2271. PosLat = res.PosLat,
  2272. MirrLon = res.MirrLon,
  2273. MirrLat = res.MirrLat,
  2274. TargetState = (EnumTargetStateDto)(int)res.TargetState,
  2275. PosResType = (EnumPosResTypeDto)(int)res.PosResType
  2276. };
  2277. }
  2278. private PosResDto MapDto(ModelPosRes res)
  2279. {
  2280. return new PosResDto()
  2281. {
  2282. ID = res.ID,
  2283. UserName = res.TsName,
  2284. FreqUpHz = res.FreqUpHz,
  2285. TargetState = (EnumTargetStateDto)(int)res.TargetState,
  2286. SigTime = res.SigTime,
  2287. TaskInfoID = res.TaskInfoID,
  2288. TarName = string.IsNullOrWhiteSpace(res.TarName) ? "未知目标" : res.TarName,
  2289. PosLon = res.PosLon,
  2290. PosLat = res.PosLat,
  2291. MirrLon = res.MirrLon,
  2292. MirrLat = res.MirrLat,
  2293. PosResType = (EnumPosResTypeDto)((int)res.PosResType)
  2294. };
  2295. }
  2296. private ModelPosRes MapModel(PosRes res)
  2297. {
  2298. return new ModelPosRes()
  2299. {
  2300. ID = res.ID,
  2301. CgResID = res.CgResID,
  2302. ClusterCount = res.ClusterCount,
  2303. ClusterKey = res.ClusterKey,
  2304. ColorKey = res.ColorKey,
  2305. CreateTime = res.CreateTime,
  2306. CxResID = res.CxResID,
  2307. CheckResID=res.CheckResID,
  2308. Selected = res.Selected,
  2309. StationResID = res.StationResID,
  2310. TargetID = res.TargetID,
  2311. TargetState = res.TargetState,
  2312. TsName = res.TsName,
  2313. UpdateTime = res.UpdateTime,
  2314. Visible = res.Visible,
  2315. SigTime = res.SigTime,
  2316. TaskInfoID = res.TaskInfoID,
  2317. TarName = string.IsNullOrWhiteSpace(res.TarName) ? "未知目标" : res.TarName,
  2318. PosLon = res.PosLon,
  2319. PosLat = res.PosLat,
  2320. MirrLon = res.MirrLon,
  2321. MirrLat = res.MirrLat,
  2322. PosResType = (EnumPosResType)((int)res.PosResType),
  2323. FreqUpHz = res.FreqUpHz,
  2324. };
  2325. }
  2326. }
  2327. }