123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- using XdCxRhDW.Dto;
- using XdCxRhDW.Entity;
- namespace XdCxRhDW.App.Service
- {
- public class FileWriterService
- {
- string posDir;//定位结果txt存储目录
- string stateDir;//状态上报txt存储目录
- Random r = new Random();
- public FileWriterService()
- {
- this.posDir = ConfigurationManager.AppSettings["PosResDir"].Trim();
- this.stateDir = ConfigurationManager.AppSettings["StateRptDir"].Trim();
- Directory.CreateDirectory(posDir);
- Directory.CreateDirectory(stateDir);
- }
- public void WritePosRes(PosResWriteDto posDto)
- {
- var val = (r.Next(90, 96) + r.NextDouble()) * 10;
- var valInt = (int)val;
- StringBuilder sb = new StringBuilder();
- sb.Append($"{posDto.SigTime:yyyy}\t");
- sb.Append($"{posDto.SigTime:MM}\t");
- sb.Append($"{posDto.SigTime:dd}\t");
- sb.Append($"{posDto.SigTime:HH}\t");
- sb.Append($"{posDto.SigTime:mm}\t");
- sb.Append($"{posDto.SigTime:ss}\t");
- sb.Append($"{posDto.SigTime:fff}\t");
- sb.Append($"{posDto.SigTimeLenMs:D4}\t");//信号持续时间ms
- sb.Append($"{Convert.ToInt64(posDto.FreqDownMHz * 1e6):D12}\t");//下行频点
- sb.Append($"{Convert.ToInt64(posDto.FreqUpMHz * 1e6):D12}\t");//上行频点
- sb.Append($"{GetSignalType(posDto.SigModType)}\t");//信号样式(0:未知 1:CPM 2:BPSK 4:QPSK),
- sb.Append($"{0:D4}\t");//目标序号
- sb.Append($"res\t");
- sb.Append($"{Convert.ToInt64(posDto.PosLon * 1e6):D10}\t");
- sb.Append($"{Convert.ToInt64(posDto.PosLat * 1e6):D10}\t");
- sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
- sb.Append($"{Convert.ToInt64(posDto.Dto1 * 1e2):D10}\t");
- sb.Append($"{Convert.ToInt64(posDto.Dfo1 * 1e2):D10}\t");
- sb.Append($"{Convert.ToInt64(posDto.Snr1 * 1e2):D6}\t");
- sb.Append($"{Convert.ToInt64(posDto.Dto2 * 1e2):D10}\t");
- sb.Append($"{Convert.ToInt64(posDto.Dfo2 * 1e2):D10}\t");
- sb.Append($"{Convert.ToInt64(posDto.Snr2 * 1e2):D6}\t");
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
- sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
- sb.Append($"{(long)posDto.LongRadius:D8}\t");//长轴m
- sb.Append($"{(long)posDto.ShortRadius:D8}\t");//短轴m
- sb.Append($"{(long)posDto.DipAngle:D7}\t");//倾角°
- sb.Append($"{posDto.TsCount:D2}\t");//时隙名称CCOW之类的
- sb.Append($"{1}\t");//所属卫星
- sb.Append($"{valInt:D3}\t");//置信度
- sb.Append($"{posDto.PosType}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
- sb.Append($"{(long)posDto.ModRate:D12}\t");//符号速率bps 12个
- sb.Append($"{Convert.ToInt64(posDto.CdbLon * 1e6):D10}\t");//超短站经度
- sb.Append($"{Convert.ToInt64(posDto.CdbLat * 1e6):D10}\t");//超短站纬度
- sb.Append("\r\n");
- string flag = "";
- if (posDto.PosTypeDto == EnumPosTypeDto.X2D1)
- flag = "两星一地";
- else if (posDto.PosTypeDto == EnumPosTypeDto.X3TwoDto)
- flag = "高轨多星";
- else if (posDto.PosTypeDto == EnumPosTypeDto.X1Leo)
- flag = "低轨单星";
- else if (posDto.PosTypeDto == EnumPosTypeDto.X2Leo)
- flag = "低轨双星";
- else if (posDto.PosTypeDto == EnumPosTypeDto.X3Leo)
- flag = "低轨三星";
- string resFile = Path.Combine(posDir, $"{flag}定位结果_{DateTime.Now:yyyyMMdd}.txt");
- string txt = sb.ToString();
- lock (this)
- {
- File.AppendAllText(resFile, txt);
- }
- }
- private int GetSignalType(string modTypestr)
- {
- EnumSignalTypeDto modType = modTypestr.GetEnumByDisplayName<EnumSignalTypeDto>();
- //0:未知 1:CPM 2:BPSK 4:QPSK
- int signalType = 0;
- if (modType == EnumSignalTypeDto.BPSK)
- {
- signalType = 2;
- }
- else if (modType == EnumSignalTypeDto.QPSK)
- {
- signalType = 4;
- }
- return signalType;
- }
- public void WriteStateRes(SvrStateReportDto dto)
- {
- if (string.IsNullOrWhiteSpace(dto.DevId)) return;
- int flag = 20;
- if (dto.SvrType == EnumSvrType.PosPlatform)
- flag = 20;
- if (dto.SvrType == EnumSvrType.X2D1NoRefTask54)
- flag = 30;
- else if (dto.SvrType == EnumSvrType.X3NoRefTask54)
- flag = 40;
- else if (dto.SvrType == EnumSvrType.LeoX1Task54)
- flag = 50;
- else if (dto.SvrType == EnumSvrType.LeoX2Task54)
- flag = 60;
- else if (dto.SvrType == EnumSvrType.LeoX3Task54)
- flag = 70;
- else if (dto.SvrType == EnumSvrType.CpuCgSvr)
- flag = 80;
- else if (dto.SvrType == EnumSvrType.GpuCgSvr)
- flag = 90;
- else if (dto.SvrType == EnumSvrType.CheckSvr)
- flag = 100;
- else if (dto.SvrType == EnumSvrType.CgDbScan)
- flag = 110;
- flag = flag + (int)dto.ModuleType;
- var now = DateTime.Now;
- StringBuilder sb = new StringBuilder();
- sb.Append($"{now:yyyy}\t");
- sb.Append($"{now:MM}\t");
- sb.Append($"{now:dd}\t");
- sb.Append($"{now:HH}\t");
- sb.Append($"{now:mm}\t");
- sb.Append($"{now:ss}\t");
- sb.Append($"{now:fff}\t");
- sb.Append($"{(int)dto.ModuleState:D4}\t");//模块状态 0=故障, 1=正常,2=空闲 3=工作
- sb.Append($"{0:D12}\t");//下行频点
- sb.Append($"{0:D12}\t");//上行频点
- sb.Append($"{flag}\t");//状态模块
- sb.Append($"{dto.DevId:D4}\t");//设备编号:星地采集设备=1003,星座采集设备=1004,参数估计设备=2003|2004,定位处理设备=3003|3004
- sb.Append($"res\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D8}\t");//定位误差km
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D6}\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D6}\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D10}\t");
- sb.Append($"{0:D6}\t");
- sb.Append($"{0:D8}\t");//长轴m
- sb.Append($"{0:D8}\t");//短轴m
- sb.Append($"{0:D7}\t");//倾角°
- sb.Append($"{0:D2}\t");//时隙属性
- sb.Append($"{0}\t");//所属卫星
- sb.Append($"{0:D3}\t");//置信度
- sb.Append($"{0}\t");//定位体制(0未知,1高轨多星,2高低轨,3星地,4星座)
- sb.Append($"{0:D12}\t");//符号速率bps 12个
- sb.Append($"{0:D10}\t");//超短站经度
- sb.Append($"{0:D10}\t");//超短站纬度
- sb.Append("\r\n");
- string sysFlag;
- if (ConfigurationManager.AppSettings["DevID"].Trim() == "3004")
- sysFlag = "星座";
- else
- sysFlag = "星地";
- string resFile = Path.Combine(stateDir, $"{sysFlag}系统状态上报结果_{now:yyyyMMdd}.txt");
- string txt = sb.ToString();
- lock (this)
- {
- File.AppendAllText(resFile, txt);
- }
- /*
- * 模块编号说明
- * 20=联合定位平台,
- 21=IP
- 22=端口
- 23=程序
- 24=文件
- 25=星历
- 26=内存
- 27=磁盘
- 30=星地数据处理服务
- 31=同21
- ...
- 40=高轨三星数据处理服务
- 41=同21
- ...
- 50=低轨单星数据处理服务
- ...
- 60=低轨双星数据处理服务
- ...
- 70=低轨三星数据处理服务
- ...
- 80=CPU参数估计服务
- ...
- 90=GPU参数估计服务
- ...
- 100=信号检测服务
- ...
- 110=参估编批服务
- ...
- */
- }
- }
- }
|