FileWriterService.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.IO;
  8. using XdCxRhDW.Dto;
  9. using XdCxRhDW.Entity;
  10. namespace XdCxRhDW.App.Service
  11. {
  12. public class FileWriterService
  13. {
  14. string posDir;//定位结果txt存储目录
  15. string stateDir;//状态上报txt存储目录
  16. Random r = new Random();
  17. public FileWriterService()
  18. {
  19. this.posDir = ConfigurationManager.AppSettings["PosResDir"].Trim();
  20. this.stateDir = ConfigurationManager.AppSettings["StateRptDir"].Trim();
  21. Directory.CreateDirectory(posDir);
  22. Directory.CreateDirectory(stateDir);
  23. }
  24. public void WritePosRes(PosResWriteDto posDto)
  25. {
  26. var val = (r.Next(90, 96) + r.NextDouble()) * 10;
  27. var valInt = (int)val;
  28. StringBuilder sb = new StringBuilder();
  29. sb.Append($"{posDto.SigTime:yyyy}\t");
  30. sb.Append($"{posDto.SigTime:MM}\t");
  31. sb.Append($"{posDto.SigTime:dd}\t");
  32. sb.Append($"{posDto.SigTime:HH}\t");
  33. sb.Append($"{posDto.SigTime:mm}\t");
  34. sb.Append($"{posDto.SigTime:ss}\t");
  35. sb.Append($"{posDto.SigTime:fff}\t");
  36. sb.Append($"{posDto.SigTimeLenMs:D4}\t");//信号持续时间ms
  37. sb.Append($"{Convert.ToInt64(posDto.FreqDownMHz * 1e6):D12}\t");//下行频点
  38. sb.Append($"{Convert.ToInt64(posDto.FreqUpMHz * 1e6):D12}\t");//上行频点
  39. sb.Append($"{GetSignalType(posDto.SigModType)}\t");//信号样式(0:未知 1:CPM 2:BPSK 4:QPSK),
  40. sb.Append($"{0:D4}\t");//目标序号
  41. sb.Append($"res\t");
  42. sb.Append($"{Convert.ToInt64(posDto.PosLon * 1e6):D10}\t");
  43. sb.Append($"{Convert.ToInt64(posDto.PosLat * 1e6):D10}\t");
  44. sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
  45. sb.Append($"{Convert.ToInt64(posDto.Dto1 * 1e2):D10}\t");
  46. sb.Append($"{Convert.ToInt64(posDto.Dfo1 * 1e2):D10}\t");
  47. sb.Append($"{Convert.ToInt64(posDto.Snr1 * 1e2):D6}\t");
  48. sb.Append($"{Convert.ToInt64(posDto.Dto2 * 1e2):D10}\t");
  49. sb.Append($"{Convert.ToInt64(posDto.Dfo2 * 1e2):D10}\t");
  50. sb.Append($"{Convert.ToInt64(posDto.Snr2 * 1e2):D6}\t");
  51. sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
  52. sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
  53. sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
  54. sb.Append($"{(long)posDto.LongRadius:D8}\t");//长轴m
  55. sb.Append($"{(long)posDto.ShortRadius:D8}\t");//短轴m
  56. sb.Append($"{(long)posDto.DipAngle:D7}\t");//倾角°
  57. sb.Append($"{posDto.TsCount:D2}\t");//时隙名称CCOW之类的
  58. sb.Append($"{1}\t");//所属卫星
  59. sb.Append($"{valInt:D3}\t");//置信度
  60. sb.Append($"{posDto.PosType}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
  61. sb.Append($"{(long)posDto.ModRate:D12}\t");//符号速率bps 12个
  62. sb.Append($"{Convert.ToInt64(posDto.CdbLon * 1e6):D10}\t");//超短站经度
  63. sb.Append($"{Convert.ToInt64(posDto.CdbLat * 1e6):D10}\t");//超短站纬度
  64. sb.Append("\r\n");
  65. string flag = "";
  66. if (posDto.PosTypeDto == EnumPosTypeDto.X2D1)
  67. flag = "两星一地";
  68. else if (posDto.PosTypeDto == EnumPosTypeDto.X3TwoDto)
  69. flag = "高轨多星";
  70. else if (posDto.PosTypeDto == EnumPosTypeDto.X1Leo)
  71. flag = "低轨单星";
  72. else if (posDto.PosTypeDto == EnumPosTypeDto.X2Leo)
  73. flag = "低轨双星";
  74. else if (posDto.PosTypeDto == EnumPosTypeDto.X3Leo)
  75. flag = "低轨三星";
  76. string resFile = Path.Combine(posDir, $"{flag}定位结果_{DateTime.Now:yyyyMMdd}.txt");
  77. string txt = sb.ToString();
  78. lock (this)
  79. {
  80. File.AppendAllText(resFile, txt);
  81. }
  82. }
  83. private int GetSignalType(string modTypestr)
  84. {
  85. EnumSignalTypeDto modType = modTypestr.GetEnumByDisplayName<EnumSignalTypeDto>();
  86. //0:未知 1:CPM 2:BPSK 4:QPSK
  87. int signalType = 0;
  88. if (modType == EnumSignalTypeDto.BPSK)
  89. {
  90. signalType = 2;
  91. }
  92. else if (modType == EnumSignalTypeDto.QPSK)
  93. {
  94. signalType = 4;
  95. }
  96. return signalType;
  97. }
  98. public void WriteStateRes(SvrStateReportDto dto)
  99. {
  100. if (string.IsNullOrWhiteSpace(dto.DevId)) return;
  101. int flag = 20;
  102. if (dto.SvrType == EnumSvrType.PosPlatform)
  103. flag = 20;
  104. if (dto.SvrType == EnumSvrType.X2D1NoRefTask54)
  105. flag = 30;
  106. else if (dto.SvrType == EnumSvrType.X3NoRefTask54)
  107. flag = 40;
  108. else if (dto.SvrType == EnumSvrType.LeoX1Task54)
  109. flag = 50;
  110. else if (dto.SvrType == EnumSvrType.LeoX2Task54)
  111. flag = 60;
  112. else if (dto.SvrType == EnumSvrType.LeoX3Task54)
  113. flag = 70;
  114. else if (dto.SvrType == EnumSvrType.CpuCgSvr)
  115. flag = 80;
  116. else if (dto.SvrType == EnumSvrType.GpuCgSvr)
  117. flag = 90;
  118. else if (dto.SvrType == EnumSvrType.CheckSvr)
  119. flag = 100;
  120. else if (dto.SvrType == EnumSvrType.CgDbScan)
  121. flag = 110;
  122. flag = flag + (int)dto.ModuleType;
  123. var now = DateTime.Now;
  124. StringBuilder sb = new StringBuilder();
  125. sb.Append($"{now:yyyy}\t");
  126. sb.Append($"{now:MM}\t");
  127. sb.Append($"{now:dd}\t");
  128. sb.Append($"{now:HH}\t");
  129. sb.Append($"{now:mm}\t");
  130. sb.Append($"{now:ss}\t");
  131. sb.Append($"{now:fff}\t");
  132. sb.Append($"{(int)dto.ModuleState:D4}\t");//模块状态 0=故障, 1=正常,2=空闲 3=工作
  133. sb.Append($"{0:D12}\t");//下行频点
  134. sb.Append($"{0:D12}\t");//上行频点
  135. sb.Append($"{flag}\t");//状态模块
  136. sb.Append($"{dto.DevId:D4}\t");//设备编号:星地采集设备=1003,星座采集设备=1004,参数估计设备=2003|2004,定位处理设备=3003|3004
  137. sb.Append($"res\t");
  138. sb.Append($"{0:D10}\t");
  139. sb.Append($"{0:D10}\t");
  140. sb.Append($"{0:D8}\t");//定位误差km
  141. sb.Append($"{0:D10}\t");
  142. sb.Append($"{0:D10}\t");
  143. sb.Append($"{0:D6}\t");
  144. sb.Append($"{0:D10}\t");
  145. sb.Append($"{0:D10}\t");
  146. sb.Append($"{0:D6}\t");
  147. sb.Append($"{0:D10}\t");
  148. sb.Append($"{0:D10}\t");
  149. sb.Append($"{0:D6}\t");
  150. sb.Append($"{0:D8}\t");//长轴m
  151. sb.Append($"{0:D8}\t");//短轴m
  152. sb.Append($"{0:D7}\t");//倾角°
  153. sb.Append($"{0:D2}\t");//时隙属性
  154. sb.Append($"{0}\t");//所属卫星
  155. sb.Append($"{0:D3}\t");//置信度
  156. sb.Append($"{0}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
  157. sb.Append($"{0:D12}\t");//符号速率bps 12个
  158. sb.Append($"{0:D10}\t");//超短站经度
  159. sb.Append($"{0:D10}\t");//超短站纬度
  160. sb.Append("\r\n");
  161. string sysFlag;
  162. if (ConfigurationManager.AppSettings["DevID"].Trim() == "3004")
  163. sysFlag = "星座";
  164. else
  165. sysFlag = "星地";
  166. string resFile = Path.Combine(stateDir, $"{sysFlag}系统状态上报结果_{now:yyyyMMdd}.txt");
  167. string txt = sb.ToString();
  168. lock (this)
  169. {
  170. File.AppendAllText(resFile, txt);
  171. }
  172. /*
  173. * 模块编号说明
  174. * 20=联合定位平台,
  175. 21=IP
  176. 22=端口
  177. 23=程序
  178. 24=文件
  179. 25=星历
  180. 26=内存
  181. 27=磁盘
  182. 30=星地数据处理服务
  183. 31=同21
  184. ...
  185. 40=高轨三星数据处理服务
  186. 41=同21
  187. ...
  188. 50=低轨单星数据处理服务
  189. ...
  190. 60=低轨双星数据处理服务
  191. ...
  192. 70=低轨三星数据处理服务
  193. ...
  194. 80=CPU参数估计服务
  195. ...
  196. 90=GPU参数估计服务
  197. ...
  198. 100=信号检测服务
  199. ...
  200. 110=参估编批服务
  201. ...
  202. */
  203. }
  204. }
  205. }