Browse Source

Merge branch 'master' of http://139.155.15.221:3000/zoulei/XdCxRhDW54

wyq 1 year ago
parent
commit
a161240176

BIN
Database.db


+ 28 - 0
Service/Leo1SatTaskServer54/LogHelper.cs

@@ -1,21 +1,42 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XdCxRhDW.Dto;
 
 namespace X1LeoTaskServer54
 {
     public static class LogHelper
     {
         public static Action<LogInfo> Logger;
+        public static string BaseUrl;
         public static void Info(string msg)
         {
+            var pro = Process.GetCurrentProcess();
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Info,
+                Module = pro.ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Information(msg);
+            Serilog.Log.Information("MainWindowTitle=" + pro.MainWindowTitle);
+            Serilog.Log.Information("ModuleName=" + pro.MainModule.ModuleName);
+            Serilog.Log.Information("FileName=" + pro.MainModule.FileName);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Info, Msg = msg });
         }
         public static void Warning(string msg, Exception ex = null)
         {
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Warning,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Warning(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Warning, Msg = msg });
         }
@@ -27,6 +48,13 @@ namespace X1LeoTaskServer54
                 if (iex != null)
                     ex = iex;
             }
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Error,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 28 - 0
Service/Leo2SatTaskServer54/LogHelper.cs

@@ -1,21 +1,42 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XdCxRhDW.Dto;
 
 namespace X2LeoTaskServer54
 {
     public static class LogHelper
     {
         public static Action<LogInfo> Logger;
+        public static string BaseUrl;
         public static void Info(string msg)
         {
+            var pro = Process.GetCurrentProcess();
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Info,
+                Module = pro.ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Information(msg);
+            Serilog.Log.Information("MainWindowTitle=" + pro.MainWindowTitle);
+            Serilog.Log.Information("ModuleName=" + pro.MainModule.ModuleName);
+            Serilog.Log.Information("FileName=" + pro.MainModule.FileName);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Info, Msg = msg });
         }
         public static void Warning(string msg, Exception ex = null)
         {
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Warning,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Warning(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Warning, Msg = msg });
         }
@@ -27,6 +48,13 @@ namespace X2LeoTaskServer54
                 if (iex != null)
                     ex = iex;
             }
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Error,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 28 - 0
Service/Leo3SatTaskServer54/LogHelper.cs

@@ -1,21 +1,42 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XdCxRhDW.Dto;
 
 namespace X3LeoTaskServer54
 {
     public static class LogHelper
     {
         public static Action<LogInfo> Logger;
+        public static string BaseUrl;
         public static void Info(string msg)
         {
+            var pro = Process.GetCurrentProcess();
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Info,
+                Module = pro.ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Information(msg);
+            Serilog.Log.Information("MainWindowTitle=" + pro.MainWindowTitle);
+            Serilog.Log.Information("ModuleName=" + pro.MainModule.ModuleName);
+            Serilog.Log.Information("FileName=" + pro.MainModule.FileName);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Info, Msg = msg });
         }
         public static void Warning(string msg, Exception ex = null)
         {
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Warning,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Warning(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Warning, Msg = msg });
         }
@@ -27,6 +48,13 @@ namespace X3LeoTaskServer54
                 if (iex != null)
                     ex = iex;
             }
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Error,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 4 - 4
Service/X2D1NoRefTaskServer54/App.config

@@ -11,16 +11,16 @@
 		<add key="PosPlatformAddr" value="http://127.0.0.1:8091" />
 
 		<!--检测结果目录-->
-		<add key="DetectDir" value="D:\data\Detect"/>
+		<add key="DetectDir" value="E:\data10\两星一地仿真数据\Detected"/>
 
 		<!--采集数据目录-->
-		<add key="CapDir" value="D:\data\AD"/>
+		<add key="CapDir" value="E:\data10\两星一地仿真数据\AD"/>
 
 		<!--定位结果输出目录-->
-		<add key="PosResDir" value="D:\data\PosRes"/>
+		<add key="PosResDir" value="E:\PosRes"/>
 
 		<!--状态上报目录-->
-		<add key="StateRptDir" value="D:\data\StateRes"/>
+		<add key="StateRptDir" value="E:\StateRes"/>
 
 		<!--卫星及星历-->
 		<add key ="MainSatInfo" value="23467,-41275189.6404,5820330.8446,6331022.0431"/>

+ 28 - 0
Service/X2D1NoRefTaskServer54/LogHelper.cs

@@ -1,21 +1,42 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XdCxRhDW.Dto;
 
 namespace X2D1NoRefTaskServer54
 {
     public static class LogHelper
     {
         public static Action<LogInfo> Logger;
+        public static string BaseUrl;
         public static void Info(string msg)
         {
+            var pro = Process.GetCurrentProcess();
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Info,
+                Module = pro.ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Information(msg);
+            Serilog.Log.Information("MainWindowTitle=" + pro.MainWindowTitle);
+            Serilog.Log.Information("ModuleName=" + pro.MainModule.ModuleName);
+            Serilog.Log.Information("FileName=" + pro.MainModule.FileName);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Info, Msg = msg });
         }
         public static void Warning(string msg, Exception ex = null)
         {
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Warning,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Warning(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Warning, Msg = msg });
         }
@@ -27,6 +48,13 @@ namespace X2D1NoRefTaskServer54
                 if (iex != null)
                     ex = iex;
             }
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Error,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 1 - 0
Service/X2D1NoRefTaskServer54/MainForm.cs

@@ -46,6 +46,7 @@ namespace X2D1NoRefTaskServer54
             var port = Convert.ToInt32(ConfigurationManager.AppSettings["LocalHttpPort"].Trim());
             var svrID = ConfigurationManager.AppSettings["SvrID"].Trim();
             var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();
+            LogHelper.BaseUrl = posPlatformAddr + "/api/";
             this.Text = EnumSvrType.X2D1NoRefTask54.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";

+ 177 - 412
Service/X2D1NoRefTaskServer54/Service/TaskService.cs

@@ -78,6 +78,7 @@ namespace X2D1NoRefTaskServer54.Service
                         }
                         Directory.CreateDirectory("DdcDir");
                         Directory.CreateDirectory(PosResDir);
+                        Directory.CreateDirectory(StateDir);
 
                         try
                         {
@@ -203,436 +204,200 @@ namespace X2D1NoRefTaskServer54.Service
                                     var sig = sigs.FirstOrDefault(p => p.FreqDownHz == (int)(group.Key * 1e6));
 
                                     if (cts.IsCancellationRequested) return;
-                                    if (useGpuCg)
-                                    {
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估开始,共{sig.Slots.Slots.Count}个突发...");
-                                        sw.Start();
-                                        List<GpuCgResponseDto> data1 = new List<GpuCgResponseDto>();
-                                        List<GpuCgResponseDto> data2 = new List<GpuCgResponseDto>();
-                                        foreach (var item in sig.Slots.Slots)
-                                        {
-                                            string f1 = $"tmp\\{Path.GetFileNameWithoutExtension(ch0File.File)}_{item.StartPoint}_{item.Len}.dat";
-                                            string f2 = $"tmp\\{Path.GetFileNameWithoutExtension(ch1File.File)}_{item.StartPoint}_{item.Len}.dat";
-                                            string f3 = $"tmp\\{Path.GetFileNameWithoutExtension(ch2File.File)}_{item.StartPoint}_{item.Len}.dat";
-                                            using (FileStream fs = new FileStream(ch0File.File, FileMode.Open))
-                                            {
-                                                byte[] data = new byte[item.Len * 4];
-                                                fs.Position = item.StartPoint * 4;
-                                                fs.Read(data, 0, data.Length);
-                                                File.WriteAllBytes(f1, data);
-                                            }
-                                            using (FileStream fs = new FileStream(ch1File.File, FileMode.Open))
-                                            {
-                                                byte[] data = new byte[item.Len * 4];
-                                                fs.Position = item.StartPoint * 4;
-                                                fs.Read(data, 0, data.Length);
-                                                File.WriteAllBytes(f2, data);
-                                            }
-                                            using (FileStream fs = new FileStream(ch2File.File, FileMode.Open))
-                                            {
-                                                byte[] data = new byte[item.Len * 4];
-                                                fs.Position = item.StartPoint * 4;
-                                                fs.Read(data, 0, data.Length);
-                                                File.WriteAllBytes(f3, data);
-                                            }
-                                            string mainSlotFile = await HttpHelper.UploadFileAsync(f1, baseUrl, token: cts.Token);//主星文件
-                                            string adja1SlotFile = await HttpHelper.UploadFileAsync(f2, baseUrl, token: cts.Token);//邻1星文件
-                                            string adja2SlotFile = await HttpHelper.UploadFileAsync(f3, baseUrl, token: cts.Token);//邻2星文件
-                                            File.Delete(f1);
-                                            File.Delete(f2);
-                                            File.Delete(f3);
-                                            var gpudto = new GpuCgRequestDto()
-                                            {
-                                                dtCenter = 0,
-                                                dtRange = 40000,
-                                                file1 = mainSlotFile,
-                                                file2 = adja1SlotFile,
-                                                samplingRate = ch0File.Fs,
-                                                smpCount = 0,
-                                                snrThreshold = 15
-                                            };
-                                            var result1 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
-                                            if (result1.code != 200)
-                                            {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星GPU参估出错.{result1.msg}.突发位置{item.StartPoint}-{item.Len}");
-                                                continue;
-                                            }
-                                            var data1First = result1.data.First();
-                                            data1First.TimeSeconds = item.TimeSeconds;
-                                            data1.Add(data1First);
-                                            gpudto = new GpuCgRequestDto()
-                                            {
-                                                dtCenter = 0,
-                                                dtRange = 40000,
-                                                file1 = mainSlotFile,
-                                                file2 = adja2SlotFile,
-                                                samplingRate = ch0File.Fs,
-                                                smpCount = 0,
-                                                snrThreshold = 15
-                                            };
-                                            var result2 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
-                                            if (result2.code != 200)
-                                            {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星GPU参估出错.{result2.msg}.突发位置{item.StartPoint}-{item.Len}");
-                                                continue;
-                                            }
-                                            var data2First = result2.data.First();
-                                            data2First.TimeSeconds = item.TimeSeconds;
-                                            data2.Add(data2First);
-                                        }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
 
-                                        string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
-                                        var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
-                                        var signaldto = new SignalProcDto()
-                                        {
-                                            File = mainFile,
-                                            Fs = ch0File.Fs,
-                                            Smps = smpPositions,
-                                        };
-                                        var signalResult = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(baseUrl + "DetectCg/SignalProc", signaldto);
-                                        if (signalResult.code != 200)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星信号识别出错.{signalResult.msg}");
-                                            return;
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
+                                    sw.Start();
+                                    string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
+                                    string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
+                                    string cdbFile = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//地面信号文件
+                                    var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
+                                    var cgDto = new CpuCgMultiDto()
+                                    {
+                                        dtCenter = 0,
+                                        dtRange = 40000,
+                                        file1 = mainFile,
+                                        file2 = adja1File,
+                                        samplingRate = ch0File.Fs,
+                                        smpPositions = smpPositions,
+                                        snrThreshold = 15,
+                                    };
+                                    var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                    if (result1.code != 200)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻主星邻星CPU参估出错.{result1.msg}");
+                                        return;
+                                    }
+                                    cgDto = new CpuCgMultiDto()
+                                    {
+                                        dtCenter = 260000,
+                                        dtRange = 50000,
+                                        file1 = mainFile,
+                                        file2 = cdbFile,
+                                        samplingRate = ch0File.Fs,
+                                        smpPositions = smpPositions,
+                                        snrThreshold = 15,
+                                    };
+                                    var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                    if (result2.code != 200)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估出错.{result2.msg}");
+                                        return;
+                                    }
+                                    sw.Stop();
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
+                                    var signaldto = new SignalProcDto()
+                                    {
+                                        File = mainFile,
+                                        Fs = ch0File.Fs,
+                                        Smps = smpPositions,
+                                    };
+                                    var signalResult = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(baseUrl + "DetectCg/SignalProc", signaldto);
+                                    if (signalResult.code != 200)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星信号识别出错.{signalResult.msg}");
+                                        return;
 
-                                        }
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
-                                        if (data1.Count != data2.Count || data1.Count != sig.Slots.Slots.Count)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
-                                            return;
-                                        }
+                                    }
 
-                                        if (data1.Count != data2.Count || data1.Count != signalResult.data.Count)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-信号识别结果个数和检测结果个数不匹配");
-                                            return;
-                                        }
-                                        sw.Start();
-                                        for (int i = 0; i < data1.Count; i++)
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估完成");
+                                    var data1 = result1.data;
+                                    var data2 = result2.data;
+                                    if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
+                                        return;
+                                    }
+                                    if (data1.Count != signalResult.data.Count)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-信号识别结果个数和检测结果个数不匹配");
+                                        return;
+                                    }
+                                    sw.Start();
+                                    for (int i = 0; i < data1.Count; i++)
+                                    {
+                                        try
                                         {
-                                            try
+                                            if (cts.IsCancellationRequested) break;
+                                            X2D1NoParPosDto x21d = new X2D1NoParPosDto()
                                             {
-                                                if (cts.IsCancellationRequested) break;
-                                                X2D1NoParPosDto x21d = new X2D1NoParPosDto()
-                                                {
-                                                    TaskID = dto.ID,
-                                                    //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
-                                                    SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
-                                                    MainCode = MainSatCode,
-                                                    AdjaCode = Adja1SatCode,
-                                                    MainX = MainSatXYZ[0],
-                                                    MainY = MainSatXYZ[1],
-                                                    MainZ = MainSatXYZ[2],
-                                                    AdjaX = Adja1SatXYZ[0],
-                                                    AdjaY = Adja1SatXYZ[1],
-                                                    AdjaZ = Adja1SatXYZ[2],
-                                                    SxDto = PosDtoFactor * data1[i].Dt,
-                                                    SxDfo = data1[i].Df,
-                                                    SxSnr = data1[i].Snr,
-                                                    XdDto = PosDtoFactor * data2[i].Dt,
-                                                    XdDfo = data2[i].Df,
-                                                    XdSnr = data2[i].Snr,
-                                                    SatTxLon = dto.CapLon,
-                                                    SatTxLat = dto.CapLat,
-                                                    CdbTxLon = dto.CdbLon,
-                                                    CdbTxLat = dto.CdbLat,
-                                                    FreqDown = ch0File.FreqDownMHz * 1e6,
-                                                    FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
-                                                    CheckRes = new CheckResDto()
-                                                    {
-                                                        FileName = Path.GetFileName(ch0File.File),
-                                                        SmpStart = sig.Slots.Slots[i].StartPoint,
-                                                        SmpCount = sig.Slots.Slots[i].Len,
-                                                        PosCheckType = EnumPosCheckTypeDto.DAMA,
-                                                    }
-                                                };
-                                                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoParAsync", x21d);
-                                                if (result.code != 200)
+                                                TaskID = dto.ID,
+                                                //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
+                                                SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
+                                                MainCode = MainSatCode,
+                                                AdjaCode = Adja1SatCode,
+                                                MainX = MainSatXYZ[0],
+                                                MainY = MainSatXYZ[1],
+                                                MainZ = MainSatXYZ[2],
+                                                AdjaX = Adja1SatXYZ[0],
+                                                AdjaY = Adja1SatXYZ[1],
+                                                AdjaZ = Adja1SatXYZ[2],
+                                                SxDto = PosDtoFactor * data1[i].Dt,
+                                                SxDfo = data1[i].Df,
+                                                SxSnr = data1[i].Snr,
+                                                XdDto = PosDtoFactor * data2[i].Dt,
+                                                XdDfo = data2[i].Df,
+                                                XdSnr = data2[i].Snr,
+                                                SatTxLon = dto.CapLon,
+                                                SatTxLat = dto.CapLat,
+                                                CdbTxLon = dto.CdbLon,
+                                                CdbTxLat = dto.CdbLat,
+                                                FreqDown = ch0File.FreqDownMHz * 1e6,
+                                                FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
+                                                CheckRes = new CheckResDto()
                                                 {
-                                                    LogHelper.Error($"【任务{dto.ID}】-信号{group.Key}MHz-{adTime:yyyyMMddHHmmss}时刻第{i + 1}个突发定位异常.{result.msg}");
-                                                }
-                                                else
-                                                {
-                                                    var posRes = result.data;
-                                                    double posLon = posRes.PosLon;
-                                                    double posLat = posRes.PosLat;
-                                                    if (x21d.SxSnr == 0 || x21d.XdSnr == 0)
-                                                    {
-                                                        posLon = 0;
-                                                        posLat = 0;
-                                                    }
-                                                    ErrEllipseResDto errRes = new ErrEllipseResDto();
-                                                    if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
-                                                    {
-#warning 误差椭圆没有提供无参算法 暂时使用有参
-                                                        var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
-                                                        {
-                                                            MainX = MainSatXYZ[0],
-                                                            MainY = MainSatXYZ[1],
-                                                            MainZ = MainSatXYZ[2],
-                                                            AdjaX = Adja1SatXYZ[0],
-                                                            AdjaY = Adja1SatXYZ[1],
-                                                            AdjaZ = Adja1SatXYZ[2],
-                                                            CdbLon = dto.CdbLon,
-                                                            CdbLat = dto.CdbLat,
-                                                            RefLon = 0,
-                                                            RefLat = 0,
-                                                            PosLon = posLon,
-                                                            PosLat = posLat,
-                                                            OutputErrPoint = false,
-                                                            DtoErrus = DtoErrus,
-                                                            EphErr = EphErrm,
-                                                        };
-                                                        //ErrorEllipse2X1DNoRef
-                                                        var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
-                                                        errRes = errResRsp.data;
-                                                    }
-                                                    StringBuilder sb = new StringBuilder();
-                                                    sb.Append($"{x21d.SigTime:yyyy}\t");
-                                                    sb.Append($"{x21d.SigTime:MM}\t");
-                                                    sb.Append($"{x21d.SigTime:dd}\t");
-                                                    sb.Append($"{x21d.SigTime:HH}\t");
-                                                    sb.Append($"{x21d.SigTime:mm}\t");
-                                                    sb.Append($"{x21d.SigTime:ss}\t");
-                                                    sb.Append($"{x21d.SigTime:fff}\t");
-                                                    sb.Append($"{x21d.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
-                                                    sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
-                                                    sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
-                                                    sb.Append($"{GetSignalType(signalResult.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其他),
-                                                    sb.Append($"{0:D4}\t");//目标序号
-                                                    sb.Append($"res\t");
-                                                    sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
-                                                    sb.Append($"{Convert.ToInt64(x21d.SxDto * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.SxDfo * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.SxSnr * 1e2):D6}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.XdDto * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.XdDfo * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.XdSnr * 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)errRes.LongRadius:D8}\t");//长轴m
-                                                    sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
-                                                    sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
-                                                    sb.Append($"{data1.Count:D2}\t");//时隙属性
-                                                    sb.Append($"{1}\t");//所属卫星
-                                                    sb.Append($"{950:D3}\t");//置信度
-                                                    sb.Append($"{3}\t");//定位体制(星地=3)
-                                                    sb.Append($"{(long)signalResult.data[i].Rate:D12}");//符号速率bps
-                                                    sb.Append("\r\n");
-                                                    string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
-                                                    File.AppendAllText(resFile, sb.ToString());
+                                                    FileName = Path.GetFileName(ch0File.File),
+                                                    SmpStart = sig.Slots.Slots[i].StartPoint,
+                                                    SmpCount = sig.Slots.Slots[i].Len,
+                                                    PosCheckType = EnumPosCheckTypeDto.DAMA,
                                                 }
-                                            }
-                                            catch (Exception ex)
+                                            };
+                                            var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoParAsync", x21d);
+                                            if (result.code != 200)
                                             {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-第{i + 1}个突发定位异常", ex);
+                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
                                             }
-                                        }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
-                                    }
-                                    else
-                                    {
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
-                                        sw.Start();
-                                        string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
-                                        string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
-                                        string cdbFile = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//地面信号文件
-                                        var smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList();
-                                        var cgDto = new CpuCgMultiDto()
-                                        {
-                                            dtCenter = 0,
-                                            dtRange = 40000,
-                                            file1 = mainFile,
-                                            file2 = adja1File,
-                                            samplingRate = ch0File.Fs,
-                                            smpPositions = smpPositions,
-                                            snrThreshold = 15,
-                                        };
-                                        var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                                        if (result1.code != 200)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻主星邻星CPU参估出错.{result1.msg}");
-                                            return;
-                                        }
-                                        cgDto = new CpuCgMultiDto()
-                                        {
-                                            dtCenter = 260000,
-                                            dtRange = 50000,
-                                            file1 = mainFile,
-                                            file2 = cdbFile,
-                                            samplingRate = ch0File.Fs,
-                                            smpPositions = smpPositions,
-                                            snrThreshold = 15,
-                                        };
-                                        var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                                        if (result2.code != 200)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估出错.{result2.msg}");
-                                            return;
-                                        }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
-                                        var signaldto = new SignalProcDto()
-                                        {
-                                            File = mainFile,
-                                            Fs = ch0File.Fs,
-                                            Smps = smpPositions,
-                                        };
-                                        var signalResult = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(baseUrl + "DetectCg/SignalProc", signaldto);
-                                        if (signalResult.code != 200)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星信号识别出错.{signalResult.msg}");
-                                            return;
-
-                                        }
-
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星超短CPU参估完成");
-                                        var data1 = result1.data;
-                                        var data2 = result2.data;
-                                        if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
-                                            return;
-                                        }
-                                        if (data1.Count != signalResult.data.Count)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-信号识别结果个数和检测结果个数不匹配");
-                                            return;
-                                        }
-                                        sw.Start();
-                                        for (int i = 0; i < data1.Count; i++)
-                                        {
-                                            try
+                                            else
                                             {
-                                                if (cts.IsCancellationRequested) break;
-                                                X2D1NoParPosDto x21d = new X2D1NoParPosDto()
-                                                {
-                                                    TaskID = dto.ID,
-                                                    //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
-                                                    SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
-                                                    MainCode = MainSatCode,
-                                                    AdjaCode = Adja1SatCode,
-                                                    MainX = MainSatXYZ[0],
-                                                    MainY = MainSatXYZ[1],
-                                                    MainZ = MainSatXYZ[2],
-                                                    AdjaX = Adja1SatXYZ[0],
-                                                    AdjaY = Adja1SatXYZ[1],
-                                                    AdjaZ = Adja1SatXYZ[2],
-                                                    SxDto = PosDtoFactor * data1[i].Dt,
-                                                    SxDfo = data1[i].Df,
-                                                    SxSnr = data1[i].Snr,
-                                                    XdDto = PosDtoFactor * data2[i].Dt,
-                                                    XdDfo = data2[i].Df,
-                                                    XdSnr = data2[i].Snr,
-                                                    SatTxLon = dto.CapLon,
-                                                    SatTxLat = dto.CapLat,
-                                                    CdbTxLon = dto.CdbLon,
-                                                    CdbTxLat = dto.CdbLat,
-                                                    FreqDown = ch0File.FreqDownMHz * 1e6,
-                                                    FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
-                                                    CheckRes = new CheckResDto()
-                                                    {
-                                                        FileName = Path.GetFileName(ch0File.File),
-                                                        SmpStart = sig.Slots.Slots[i].StartPoint,
-                                                        SmpCount = sig.Slots.Slots[i].Len,
-                                                        PosCheckType = EnumPosCheckTypeDto.DAMA,
-                                                    }
-                                                };
-                                                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoParAsync", x21d);
-                                                if (result.code != 200)
+                                                var posRes = result.data;
+                                                double posLon = posRes.PosLon;
+                                                double posLat = posRes.PosLat;
+                                                if (x21d.SxSnr == 0 || x21d.XdSnr == 0)
                                                 {
-                                                    LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
+                                                    posLon = 0;
+                                                    posLat = 0;
                                                 }
-                                                else
+                                                ErrEllipseResDto errRes = new ErrEllipseResDto();
+                                                if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
                                                 {
-                                                    var posRes = result.data;
-                                                    double posLon = posRes.PosLon;
-                                                    double posLat = posRes.PosLat;
-                                                    if (x21d.SxSnr == 0 || x21d.XdSnr == 0)
-                                                    {
-                                                        posLon = 0;
-                                                        posLat = 0;
-                                                    }
-                                                    ErrEllipseResDto errRes = new ErrEllipseResDto();
-                                                    if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
-                                                    {
 #warning 误差椭圆没有提供无参算法 暂时使用有参
-                                                        var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
-                                                        {
-                                                            MainX = MainSatXYZ[0],
-                                                            MainY = MainSatXYZ[1],
-                                                            MainZ = MainSatXYZ[2],
-                                                            AdjaX = Adja1SatXYZ[0],
-                                                            AdjaY = Adja1SatXYZ[1],
-                                                            AdjaZ = Adja1SatXYZ[2],
-                                                            CdbLon = dto.CdbLon,
-                                                            CdbLat = dto.CdbLat,
-                                                            RefLon = 0,
-                                                            RefLat = 0,
-                                                            PosLon = posLon,
-                                                            PosLat = posLat,
-                                                            OutputErrPoint = false,
-                                                            DtoErrus = DtoErrus,
-                                                            EphErr = EphErrm,
-                                                        };
-                                                        //ErrorEllipse2X1DNoRef
-                                                        var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
-                                                        errRes = errResRsp.data;
-                                                    }
-                                                    StringBuilder sb = new StringBuilder();
-                                                    sb.Append($"{x21d.SigTime:yyyy}\t");
-                                                    sb.Append($"{x21d.SigTime:MM}\t");
-                                                    sb.Append($"{x21d.SigTime:dd}\t");
-                                                    sb.Append($"{x21d.SigTime:HH}\t");
-                                                    sb.Append($"{x21d.SigTime:mm}\t");
-                                                    sb.Append($"{x21d.SigTime:ss}\t");
-                                                    sb.Append($"{x21d.SigTime:fff}\t");
-                                                    sb.Append($"{x21d.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
-                                                    sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
-                                                    sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
-                                                    sb.Append($"{GetSignalType(signalResult.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其他),
-                                                    sb.Append($"{0:D4}\t");//目标序号
-                                                    sb.Append($"res\t");
-                                                    sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
-                                                    sb.Append($"{Convert.ToInt64(x21d.SxDto * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.SxDfo * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.SxSnr * 1e2):D6}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.XdDto * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.XdDfo * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x21d.XdSnr * 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)errRes.LongRadius:D8}\t");//长轴m
-                                                    sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
-                                                    sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
-                                                    sb.Append($"{data1.Count:D2}\t");//时隙属性
-                                                    sb.Append($"{1}\t");//所属卫星
-                                                    sb.Append($"{950:D3}\t");//置信度
-                                                    sb.Append($"{3}\t");//定位体制(星地=3)
-                                                    sb.Append($"{(long)signalResult.data[i].Rate:D12}");//符号速率bps
-                                                    sb.Append("\r\n");
-                                                    string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
-                                                    File.AppendAllText(resFile, sb.ToString());
+                                                    var errDto = new ErrEllipseX2D1Dto()//ErrEllipseX2D1NoRefDto
+                                                    {
+                                                        MainX = MainSatXYZ[0],
+                                                        MainY = MainSatXYZ[1],
+                                                        MainZ = MainSatXYZ[2],
+                                                        AdjaX = Adja1SatXYZ[0],
+                                                        AdjaY = Adja1SatXYZ[1],
+                                                        AdjaZ = Adja1SatXYZ[2],
+                                                        CdbLon = dto.CdbLon,
+                                                        CdbLat = dto.CdbLat,
+                                                        RefLon = 0,
+                                                        RefLat = 0,
+                                                        PosLon = posLon,
+                                                        PosLat = posLat,
+                                                        OutputErrPoint = false,
+                                                        DtoErrus = DtoErrus,
+                                                        EphErr = EphErrm,
+                                                    };
+                                                    //ErrorEllipse2X1DNoRef
+                                                    var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipse2X1D", errDto);
+                                                    errRes = errResRsp.data;
                                                 }
+                                                StringBuilder sb = new StringBuilder();
+                                                sb.Append($"{x21d.SigTime:yyyy}\t");
+                                                sb.Append($"{x21d.SigTime:MM}\t");
+                                                sb.Append($"{x21d.SigTime:dd}\t");
+                                                sb.Append($"{x21d.SigTime:HH}\t");
+                                                sb.Append($"{x21d.SigTime:mm}\t");
+                                                sb.Append($"{x21d.SigTime:ss}\t");
+                                                sb.Append($"{x21d.SigTime:fff}\t");
+                                                sb.Append($"{x21d.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
+                                                sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
+                                                sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
+                                                sb.Append($"{GetSignalType(signalResult.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其他),
+                                                sb.Append($"{0:D4}\t");//目标序号
+                                                sb.Append($"res\t");
+                                                sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
+                                                sb.Append($"{Convert.ToInt64(x21d.SxDto * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x21d.SxDfo * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x21d.SxSnr * 1e2):D6}\t");
+                                                sb.Append($"{Convert.ToInt64(x21d.XdDto * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x21d.XdDfo * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x21d.XdSnr * 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)errRes.LongRadius:D8}\t");//长轴m
+                                                sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
+                                                sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
+                                                sb.Append($"{data1.Count:D2}\t");//时隙属性
+                                                sb.Append($"{1}\t");//所属卫星
+                                                sb.Append($"{950:D3}\t");//置信度
+                                                sb.Append($"{3}\t");//定位体制(星地=3)
+                                                sb.Append($"{(long)signalResult.data[i].Rate:D12}");//符号速率bps
+                                                sb.Append("\r\n");
+                                                string resFile = Path.Combine(PosResDir, $"两星一地定位结果_{posRes.SigTime:yyyyMMdd}.txt");
+                                                File.AppendAllText(resFile, sb.ToString());
                                             }
-                                            catch (Exception ex)
-                                            {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
-                                            }
                                         }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
+                                        catch (Exception ex)
+                                        {
+                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
+                                        }
                                     }
+                                    sw.Stop();
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
                                     //删除DDC文件
                                     File.Delete(ch0File.File);
                                     File.Delete(ch1File.File);

+ 1 - 4
Service/X2D1TaskServer54/App.config

@@ -16,14 +16,11 @@
 		<!--采集数据目录-->
 		<add key="CapDir" value="E:\data10\三星仿真数据\AD"/>
 
-		<!--DDC处理后的目录-->
-		<add key="DdcDir" value="E:\data10\三星仿真数据\DDC"/>
-
 		<!--定位结果输出目录-->
 		<add key="PosResDir" value="E:\PosRes"/>
 
 		<!--状态上报目录-->
-		<add key="StateRptDir" value="D:\data\StateRes"/>
+		<add key="StateRptDir" value="E:\StateRes"/>
 
 		<!--卫星及星历-->
 		<add key ="MainSatInfo" value="23467,-41382191.9136000,5386554.56810000,5909229.48100000"/>

+ 28 - 0
Service/X2D1TaskServer54/LogHelper.cs

@@ -1,21 +1,42 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XdCxRhDW.Dto;
 
 namespace X3TaskServer54
 {
     public static class LogHelper
     {
         public static Action<LogInfo> Logger;
+        public static string BaseUrl;
         public static void Info(string msg)
         {
+            var pro = Process.GetCurrentProcess();
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Info,
+                Module = pro.ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Information(msg);
+            Serilog.Log.Information("MainWindowTitle=" + pro.MainWindowTitle);
+            Serilog.Log.Information("ModuleName=" + pro.MainModule.ModuleName);
+            Serilog.Log.Information("FileName=" + pro.MainModule.FileName);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Info, Msg = msg });
         }
         public static void Warning(string msg, Exception ex = null)
         {
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Warning,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Warning(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Warning, Msg = msg });
         }
@@ -27,6 +48,13 @@ namespace X3TaskServer54
                 if (iex != null)
                     ex = iex;
             }
+            HttpHelper.PostRequestAsync<List<LogModulesResDto>>(BaseUrl + "Query/Add", new LogInfoDto()
+            {
+                LogTime = DateTime.Now,
+                LogType = EnumLogTypeDto.Error,
+                Module = Process.GetCurrentProcess().ProcessName,
+                Msg = msg
+            }).Wait();
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 1 - 0
Service/X2D1TaskServer54/MainForm.cs

@@ -46,6 +46,7 @@ namespace X3TaskServer54
             var port = Convert.ToInt32(ConfigurationManager.AppSettings["LocalHttpPort"].Trim());
             var svrID = ConfigurationManager.AppSettings["SvrID"].Trim();
             var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();
+            LogHelper.BaseUrl = posPlatformAddr+"/api/";
             this.Text = EnumSvrType.X3NoRefTask54.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";

+ 135 - 325
Service/X2D1TaskServer54/Service/TaskService.cs

@@ -33,7 +33,6 @@ namespace X3TaskServer54.Service
                 this.baseUrl = posPlatformAddr + "api/";
             else
                 this.baseUrl = posPlatformAddr + "/api/";
-
             DetectDir = ConfigurationManager.AppSettings["DetectDir"].Trim();
             CapDir = ConfigurationManager.AppSettings["CapDir"].Trim();
             PosResDir = ConfigurationManager.AppSettings["PosResDir"].Trim();
@@ -74,6 +73,7 @@ namespace X3TaskServer54.Service
                         }
                         Directory.CreateDirectory("DdcDir");
                         Directory.CreateDirectory(PosResDir);
+                        Directory.CreateDirectory(StateDir);
                         try
                         {
                             var mainInfo = ConfigurationManager.AppSettings["MainSatInfo"].Replace(",", ",").Trim();
@@ -200,344 +200,154 @@ namespace X3TaskServer54.Service
                                     }
                                     var sig = sigs.FirstOrDefault(p => p.FreqDownHz == (int)(group.Key * 1e6));
                                     if (cts.IsCancellationRequested) return;
-                                    if (useGpuCg)
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
+                                    sw.Start();
+                                    string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
+                                    string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
+                                    string adja2File = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//邻2星文件
+                                    var cgDto = new CpuCgMultiDto()
+                                    {
+                                        dtCenter = 0,
+                                        dtRange = 40000,
+                                        file1 = mainFile,
+                                        file2 = adja1File,
+                                        samplingRate = ch0File.Fs,
+                                        smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
+                                        snrThreshold = 15,
+                                    };
+                                    var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                    if (result1.code != 200)
                                     {
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估开始,共{sig.Slots.Slots.Count}个突发...");
-                                        sw.Start();
-                                        List<GpuCgResponseDto> data1 = new List<GpuCgResponseDto>();
-                                        List<GpuCgResponseDto> data2 = new List<GpuCgResponseDto>();
-                                        foreach (var item in sig.Slots.Slots)
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星CPU参估出错.{result1.msg}");
+                                        return;
+                                    }
+                                    cgDto = new CpuCgMultiDto()
+                                    {
+                                        dtCenter = 0,
+                                        dtRange = 40000,
+                                        file1 = mainFile,
+                                        file2 = adja2File,
+                                        samplingRate = ch0File.Fs,
+                                        smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
+                                        snrThreshold = 15,
+                                    };
+                                    var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                    sw.Stop();
+                                    if (result2.code != 200)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星CPU参估出错.{result2.msg}");
+                                        return;
+                                    }
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
+                                    var data1 = result1.data;
+                                    var data2 = result2.data;
+                                    if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
+                                        return;
+                                    }
+                                    sw.Start();
+                                    for (int i = 0; i < data1.Count; i++)
+                                    {
+                                        try
                                         {
-                                            string f1 = $"tmp\\{Path.GetFileNameWithoutExtension(ch0File.File)}_{item.StartPoint}_{item.Len}.dat";
-                                            string f2 = $"tmp\\{Path.GetFileNameWithoutExtension(ch1File.File)}_{item.StartPoint}_{item.Len}.dat";
-                                            string f3 = $"tmp\\{Path.GetFileNameWithoutExtension(ch2File.File)}_{item.StartPoint}_{item.Len}.dat";
-                                            using (FileStream fs = new FileStream(ch0File.File, FileMode.Open))
-                                            {
-                                                byte[] data = new byte[item.Len * 4];
-                                                fs.Position = item.StartPoint * 4;
-                                                fs.Read(data, 0, data.Length);
-                                                File.WriteAllBytes(f1, data);
-                                            }
-                                            using (FileStream fs = new FileStream(ch1File.File, FileMode.Open))
-                                            {
-                                                byte[] data = new byte[item.Len * 4];
-                                                fs.Position = item.StartPoint * 4;
-                                                fs.Read(data, 0, data.Length);
-                                                File.WriteAllBytes(f2, data);
-                                            }
-                                            using (FileStream fs = new FileStream(ch2File.File, FileMode.Open))
-                                            {
-                                                byte[] data = new byte[item.Len * 4];
-                                                fs.Position = item.StartPoint * 4;
-                                                fs.Read(data, 0, data.Length);
-                                                File.WriteAllBytes(f3, data);
-                                            }
-                                            string mainSlotFile = await HttpHelper.UploadFileAsync(f1, baseUrl, token: cts.Token);//主星文件
-                                            string adja1SlotFile = await HttpHelper.UploadFileAsync(f2, baseUrl, token: cts.Token);//邻1星文件
-                                            string adja2SlotFile = await HttpHelper.UploadFileAsync(f3, baseUrl, token: cts.Token);//邻2星文件
-                                            File.Delete(f1);
-                                            File.Delete(f2);
-                                            File.Delete(f3);
-                                            var gpudto = new GpuCgRequestDto()
-                                            {
-                                                dtCenter = 0,
-                                                dtRange = 40000,
-                                                file1 = mainSlotFile,
-                                                file2 = adja1SlotFile,
-                                                samplingRate = ch0File.Fs,
-                                                smpCount = 0,
-                                                snrThreshold = 15
-                                            };
-                                            var result1 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
-                                            if (result1.code != 200)
+                                            if (cts.IsCancellationRequested) break;
+                                            X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
                                             {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星GPU参估出错.{result1.msg}.突发位置{item.StartPoint}-{item.Len}");
-                                                continue;
-                                            }
-                                            var data1First = result1.data.First();
-                                            data1First.TimeSeconds = item.TimeSeconds;
-                                            data1.Add(data1First);
-                                            gpudto = new GpuCgRequestDto()
-                                            {
-                                                dtCenter = 0,
-                                                dtRange = 40000,
-                                                file1 = mainSlotFile,
-                                                file2 = adja2SlotFile,
-                                                samplingRate = ch0File.Fs,
-                                                smpCount = 0,
-                                                snrThreshold = 15
+                                                TaskID = dto.ID,
+                                                //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
+                                                SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
+                                                MainCode = MainSatCode,
+                                                Adja1Code = Adja1SatCode,
+                                                Adja2Code = Adja2SatCode,
+                                                MainX = MainSatXYZ[0],
+                                                MainY = MainSatXYZ[1],
+                                                MainZ = MainSatXYZ[2],
+                                                Adja1X = Adja1SatXYZ[0],
+                                                Adja1Y = Adja1SatXYZ[1],
+                                                Adja1Z = Adja1SatXYZ[2],
+                                                Adja2X = Adja2SatXYZ[0],
+                                                Adja2Y = Adja2SatXYZ[1],
+                                                Adja2Z = Adja2SatXYZ[2],
+                                                Dto1 = PosDtoFactor * data1[i].Dt,
+                                                Dfo1 = data1[i].Df,
+                                                Snr1 = data1[i].Snr,
+                                                Dto2 = PosDtoFactor * data2[i].Dt,
+                                                Dfo2 = data2[i].Df,
+                                                Snr2 = data2[i].Snr,
+                                                SatTxLon = dto.CapLon,
+                                                SatTxLat = dto.CapLat,
+                                                FreqDown = ch0File.FreqDownMHz * 1e6,
+                                                FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
+                                                CheckRes = new CheckResDto()
+                                                {
+                                                    FileName = Path.GetFileName(ch0File.File),
+                                                    SmpStart = sig.Slots.Slots[i].StartPoint,
+                                                    SmpCount = sig.Slots.Slots[i].Len,
+                                                    PosCheckType = EnumPosCheckTypeDto.DAMA,
+                                                }
                                             };
-                                            var result2 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
-                                            if (result2.code != 200)
+                                            var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
+                                            if (result.code != 200)
                                             {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星GPU参估出错.{result2.msg}.突发位置{item.StartPoint}-{item.Len}");
-                                                continue;
+                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
                                             }
-                                            var data2First = result2.data.First();
-                                            data2First.TimeSeconds = item.TimeSeconds;
-                                            data2.Add(data2First);
-                                        }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
-                                        if (data1.Count != data2.Count || data1.Count != sig.Slots.Slots.Count)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
-                                            return;
-                                        }
-                                        sw.Start();
-                                        for (int i = 0; i < data1.Count; i++)
-                                        {
-                                            try
+                                            else
                                             {
-                                                if (cts.IsCancellationRequested) break;
-                                                X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
+                                                var posRes = result.data;
+                                                double posLon = posRes.PosLon;
+                                                double posLat = posRes.PosLat;
+                                                if (x3.Snr1 == 0 || x3.Snr2 == 0)
                                                 {
-                                                    TaskID = dto.ID,
-                                                    //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
-                                                    SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
-                                                    MainCode = MainSatCode,
-                                                    Adja1Code = Adja1SatCode,
-                                                    Adja2Code = Adja2SatCode,
-                                                    MainX = MainSatXYZ[0],
-                                                    MainY = MainSatXYZ[1],
-                                                    MainZ = MainSatXYZ[2],
-                                                    Adja1X = Adja1SatXYZ[0],
-                                                    Adja1Y = Adja1SatXYZ[1],
-                                                    Adja1Z = Adja1SatXYZ[2],
-                                                    Adja2X = Adja2SatXYZ[0],
-                                                    Adja2Y = Adja2SatXYZ[1],
-                                                    Adja2Z = Adja2SatXYZ[2],
-                                                    Dto1 = PosDtoFactor * data1[i].Dt,
-                                                    Dfo1 = data1[i].Df,
-                                                    Snr1 = data1[i].Snr,
-                                                    Dto2 = PosDtoFactor * data2[i].Dt,
-                                                    Dfo2 = data2[i].Df,
-                                                    Snr2 = data2[i].Snr,
-                                                    FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
-                                                    SatTxLon = dto.CapLon,
-                                                    SatTxLat = dto.CapLat,
-                                                    FreqDown = ch0File.FreqDownMHz * 1e6,
-                                                    CheckRes = new CheckResDto()
-                                                    {
-                                                        FileName = Path.GetFileName(ch0File.File),
-                                                        SmpStart = sig.Slots.Slots[i].StartPoint,
-                                                        SmpCount = sig.Slots.Slots[i].Len,
-                                                        PosCheckType = EnumPosCheckTypeDto.DAMA,
-                                                    }
-                                                };
-                                                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
-                                                if (result.code != 200)
-                                                {
-                                                    LogHelper.Error($"【任务{dto.ID}】-信号{group.Key}MHz-{adTime:yyyyMMddHHmmss}时刻第{i + 1}个突发定位异常.{result.msg}");
+                                                    posLon = 0;
+                                                    posLat = 0;
                                                 }
-                                                else
-                                                {
-                                                    var posRes = result.data;
-                                                    double posLon = posRes.PosLon;
-                                                    double posLat = posRes.PosLat;
-                                                    if (x3.Snr1 == 0 || x3.Snr2 == 0)
-                                                    {
-                                                        posLon = 0;
-                                                        posLat = 0;
-                                                    }
-                                                    StringBuilder sb = new StringBuilder();
-                                                    sb.Append($"{x3.SigTime:yyyy}\t");
-                                                    sb.Append($"{x3.SigTime:MM}\t");
-                                                    sb.Append($"{x3.SigTime:dd}\t");
-                                                    sb.Append($"{x3.SigTime:HH}\t");
-                                                    sb.Append($"{x3.SigTime:mm}\t");
-                                                    sb.Append($"{x3.SigTime:ss}\t");
-                                                    sb.Append($"{x3.SigTime:fff}\t");
-                                                    sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
-                                                    sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
-                                                    sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
-                                                    sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其它),
-                                                    sb.Append($"{0:D4}\t");//目标序号
-                                                    sb.Append($"res\t");
-                                                    sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
-                                                    sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.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($"{0:D8}\t");//长轴
-                                                    sb.Append($"{0:D8}\t");//短轴
-                                                    sb.Append($"{0:D7}\t");//倾角
-                                                    sb.Append($"{data1.Count:D2}\t");//时隙属性
-                                                    sb.Append($"{1}\t");//所属卫星
-                                                    sb.Append($"{950:D3}\t");//置信度
-                                                    sb.Append($"{3}");//定位体制(星地=3)
-                                                    sb.Append($"{1335:D12}");//符号速率bps  12个
-                                                    sb.Append("\r\n");
-                                                    string resFile = Path.Combine(PosResDir, $"三星定位结果_{posRes.SigTime:yyyyMMdd}.txt");
-                                                    File.AppendAllText(resFile, sb.ToString());
-                                                }
-                                            }
-                                            catch (Exception ex)
-                                            {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-第{i + 1}个突发定位异常", ex);
+                                                StringBuilder sb = new StringBuilder();
+                                                sb.Append($"{x3.SigTime:yyyy}\t");
+                                                sb.Append($"{x3.SigTime:MM}\t");
+                                                sb.Append($"{x3.SigTime:dd}\t");
+                                                sb.Append($"{x3.SigTime:HH}\t");
+                                                sb.Append($"{x3.SigTime:mm}\t");
+                                                sb.Append($"{x3.SigTime:ss}\t");
+                                                sb.Append($"{x3.SigTime:fff}\t");
+                                                sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
+                                                sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
+                                                sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
+                                                sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其它),
+                                                sb.Append($"{0:D4}\t");//目标序号
+                                                sb.Append($"res\t");
+                                                sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
+                                                sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.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($"{0:D8}\t");//长轴 
+                                                sb.Append($"{0:D8}\t");//短轴
+                                                sb.Append($"{0:D7}\t");//倾角
+                                                sb.Append($"{data1.Count:D2}\t");//时隙属性
+                                                sb.Append($"{1}\t");//所属卫星
+                                                sb.Append($"{950:D3}\t");//置信度
+                                                sb.Append($"{3}\t");//定位体制(星地=3)
+                                                sb.Append($"{1335:D12}");//符号速率bps  12个
+                                                sb.Append("\r\n");
+                                                string resFile = Path.Combine(PosResDir, $"高轨三星定位结果_{posRes.SigTime:yyyyMMdd}.txt");
+                                                File.AppendAllText(resFile, sb.ToString());
                                             }
                                         }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
-                                    }
-                                    else
-                                    {
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
-                                        sw.Start();
-                                        string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
-                                        string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
-                                        string adja2File = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//邻2星文件
-                                        var cgDto = new CpuCgMultiDto()
-                                        {
-                                            dtCenter = 0,
-                                            dtRange = 40000,
-                                            file1 = mainFile,
-                                            file2 = adja1File,
-                                            samplingRate = ch0File.Fs,
-                                            smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
-                                            snrThreshold = 15,
-                                        };
-                                        var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                                        if (result1.code != 200)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星CPU参估出错.{result1.msg}");
-                                            return;
-                                        }
-                                        cgDto = new CpuCgMultiDto()
-                                        {
-                                            dtCenter = 0,
-                                            dtRange = 40000,
-                                            file1 = mainFile,
-                                            file2 = adja2File,
-                                            samplingRate = ch0File.Fs,
-                                            smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
-                                            snrThreshold = 15,
-                                        };
-                                        var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                                        sw.Stop();
-                                        if (result2.code != 200)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星CPU参估出错.{result2.msg}");
-                                            return;
-                                        }
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
-                                        var data1 = result1.data;
-                                        var data2 = result2.data;
-                                        if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
-                                        {
-                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
-                                            return;
-                                        }
-                                        sw.Start();
-                                        for (int i = 0; i < data1.Count; i++)
+                                        catch (Exception ex)
                                         {
-                                            try
-                                            {
-                                                if (cts.IsCancellationRequested) break;
-                                                X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
-                                                {
-                                                    TaskID = dto.ID,
-                                                    //SigTime = adTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
-                                                    SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
-                                                    MainCode = MainSatCode,
-                                                    Adja1Code = Adja1SatCode,
-                                                    Adja2Code = Adja2SatCode,
-                                                    MainX = MainSatXYZ[0],
-                                                    MainY = MainSatXYZ[1],
-                                                    MainZ = MainSatXYZ[2],
-                                                    Adja1X = Adja1SatXYZ[0],
-                                                    Adja1Y = Adja1SatXYZ[1],
-                                                    Adja1Z = Adja1SatXYZ[2],
-                                                    Adja2X = Adja2SatXYZ[0],
-                                                    Adja2Y = Adja2SatXYZ[1],
-                                                    Adja2Z = Adja2SatXYZ[2],
-                                                    Dto1 = PosDtoFactor * data1[i].Dt,
-                                                    Dfo1 = data1[i].Df,
-                                                    Snr1 = data1[i].Snr,
-                                                    Dto2 = PosDtoFactor * data2[i].Dt,
-                                                    Dfo2 = data2[i].Df,
-                                                    Snr2 = data2[i].Snr,
-                                                    SatTxLon = dto.CapLon,
-                                                    SatTxLat = dto.CapLat,
-                                                    FreqDown = ch0File.FreqDownMHz * 1e6,
-                                                    FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
-                                                    CheckRes = new CheckResDto()
-                                                    {
-                                                        FileName = Path.GetFileName(ch0File.File),
-                                                        SmpStart = sig.Slots.Slots[i].StartPoint,
-                                                        SmpCount = sig.Slots.Slots[i].Len,
-                                                        PosCheckType = EnumPosCheckTypeDto.DAMA,
-                                                    }
-                                                };
-                                                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
-                                                if (result.code != 200)
-                                                {
-                                                    LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
-                                                }
-                                                else
-                                                {
-                                                    var posRes = result.data;
-                                                    double posLon = posRes.PosLon;
-                                                    double posLat = posRes.PosLat;
-                                                    if (x3.Snr1 == 0 || x3.Snr2 == 0)
-                                                    {
-                                                        posLon = 0;
-                                                        posLat = 0;
-                                                    }
-                                                    StringBuilder sb = new StringBuilder();
-                                                    sb.Append($"{x3.SigTime:yyyy}\t");
-                                                    sb.Append($"{x3.SigTime:MM}\t");
-                                                    sb.Append($"{x3.SigTime:dd}\t");
-                                                    sb.Append($"{x3.SigTime:HH}\t");
-                                                    sb.Append($"{x3.SigTime:mm}\t");
-                                                    sb.Append($"{x3.SigTime:ss}\t");
-                                                    sb.Append($"{x3.SigTime:fff}\t");
-                                                    sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
-                                                    sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
-                                                    sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
-                                                    sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其它),
-                                                    sb.Append($"{0:D4}\t");//目标序号
-                                                    sb.Append($"res\t");
-                                                    sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
-                                                    sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
-                                                    sb.Append($"{Convert.ToInt64(x3.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($"{0:D8}\t");//长轴 
-                                                    sb.Append($"{0:D8}\t");//短轴
-                                                    sb.Append($"{0:D7}\t");//倾角
-                                                    sb.Append($"{data1.Count:D2}\t");//时隙属性
-                                                    sb.Append($"{1}\t");//所属卫星
-                                                    sb.Append($"{950:D3}\t");//置信度
-                                                    sb.Append($"{3}\t");//定位体制(星地=3)
-                                                    sb.Append($"{1335:D12}");//符号速率bps  12个
-                                                    sb.Append("\r\n");
-                                                    string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
-                                                    File.AppendAllText(resFile, sb.ToString());
-                                                }
-                                            }
-                                            catch (Exception ex)
-                                            {
-                                                LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
-                                            }
+                                            LogHelper.Error($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
                                         }
-                                        sw.Stop();
-                                        LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
                                     }
+                                    sw.Stop();
+                                    LogHelper.Info($"【任务{dto.ID}】{adTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
                                     //删除DDC文件
                                     File.Delete(ch0File.File);
                                     File.Delete(ch1File.File);

+ 1 - 1
Service/X2D1TaskServer54/X3TaskServer54.csproj

@@ -134,7 +134,7 @@
     <Compile Include="Service\TaskService.cs" />
     <Compile Include="AddIns\时隙获取\SlotHelper.cs" />
     <None Include="packages.config" />
-    <None Include="Properties\licenses.licx" />
+    <EmbeddedResource Include="Properties\licenses.licx" />
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>

+ 140 - 0
XdCxRhDW.App/Controllers/LogController.cs

@@ -0,0 +1,140 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+using System.Linq;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Http;
+using Serilog;
+using XdCxRhDW.Dto;
+using XdCxRhDW.Repostory;
+using System.IO;
+using XdCxRhDW.Entity;
+using XdCxRhDW.Api;
+using XdCxRhDW.WebApi;
+using DPP_YH_Core.Extensions;
+using XdCxRhDW.App.Model;
+using System.Diagnostics;
+using System.Configuration;
+
+namespace XdCxRhDW.App.Controllers
+{
+    /// <summary>
+    /// 日志相关接口
+    /// </summary>
+    public class LogController : BaseController
+    {
+        /// <summary>
+        /// 将日志写入到平台
+        /// </summary>
+        /// <param name="dto">日志信息</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult> Add(LogInfoDto dto)
+        {
+            try
+            {
+                using (RHDWContext db = new RHDWContext())
+                {
+                    LogRes res = new LogRes()
+                    {
+                        LogTime = dto.LogTime,
+                        Module = dto.Module,
+                        LogType = (Entity.EnumLogType)(int)dto.LogType,
+                        Msg = dto.Msg,
+                    };
+                    db.LogRes.Add(res);
+                    await db.SaveChangesAsync();
+                }
+
+                return Success();
+            }
+            catch (TaskCanceledException)
+            {
+                Serilog.Log.Warning("日志信息写入超时");
+                return Error("日志信息写入超时");
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "日志信息写入异常");
+                return Error("日志信息写入异常");
+            }
+        }
+        /// <summary>
+        /// 查询日志信息
+        /// </summary>
+        /// <param name="dto">日志查询参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<List<LogInfoDto>>> Query(LogQueryDto dto)
+        {
+            try
+            {
+                using (RHDWContext db = new RHDWContext())
+                {
+                    var query = db.LogRes.AsQueryable();
+                    if (!string.IsNullOrWhiteSpace(dto.Module))
+                        query = query.Where(p => p.Module == dto.Module);
+                    if (dto.LogTimeBegin != null)
+                        query = query.Where(p => p.LogTime >= dto.LogTimeBegin);
+                    if (dto.LogTimeEnd != null)
+                        query = query.Where(p => p.LogTime <= dto.LogTimeEnd);
+                    var res = await query.OrderBy(p => p.Module).ThenByDescending(t => t.LogTime).ToListAsync();
+                    var dtoRes = res.Select(t => new LogInfoDto
+                    {
+                        LogTime = t.LogTime,
+                        LogType = (EnumLogTypeDto)(int)t.LogType,
+                        Module = t.Module,
+                        Msg = t.Msg,
+                    }).ToList();
+                    return Success(dtoRes);
+                }
+
+            }
+            catch (TaskCanceledException)
+            {
+                Serilog.Log.Warning($"日志信息查询超时.Mudule={dto.Module},TimeStart={dto.LogTimeBegin},TimeEnd={dto.LogTimeEnd}");
+                return Error<List<LogInfoDto>>("日志信息查询超时");
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "日志信息查询异常.Mudule={dto.Module},TimeStart={dto.LogTimeBegin},TimeEnd={dto.LogTimeEnd}");
+                return Error<List<LogInfoDto>>("日志信息查询异常");
+            }
+        }
+        /// <summary>
+        /// 获取所有日志模块
+        /// </summary>
+        /// <param name="dto">日志查询参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<List<LogModulesResDto>>> GetModules()
+        {
+            try
+            {
+                using (RHDWContext db = new RHDWContext())
+                {
+                    var res = await db.LogRes.Select(p => p.Module).Distinct().ToListAsync();
+                    var dtoRes = res.Select(p => new LogModulesResDto()
+                    {
+                        Module = p
+                    }).OrderBy(p => p).ToList();
+
+                    return Success(dtoRes);
+                }
+
+            }
+            catch (TaskCanceledException)
+            {
+                Serilog.Log.Warning($"日志模块查询超时");
+                return Error<List<LogModulesResDto>>("日志模块查询超时");
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "日志模块查询异常");
+                return Error<List<LogModulesResDto>>("日志模块查询异常");
+            }
+        }
+    }
+}

+ 19 - 7
XdCxRhDW.App/MainForm.Designer.cs

@@ -30,8 +30,8 @@
         {
             this.components = new System.ComponentModel.Container();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
-            DevExpress.Utils.SuperToolTip superToolTip5 = new DevExpress.Utils.SuperToolTip();
-            DevExpress.Utils.ToolTipItem toolTipItem5 = new DevExpress.Utils.ToolTipItem();
+            DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip();
+            DevExpress.Utils.ToolTipItem toolTipItem1 = new DevExpress.Utils.ToolTipItem();
             this.ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
             this.skinPaletteDropDownButtonItem1 = new DevExpress.XtraBars.SkinPaletteDropDownButtonItem();
             this.btnOpenApi = new DevExpress.XtraBars.BarButtonItem();
@@ -47,6 +47,7 @@
             this.barButtonItem1 = new DevExpress.XtraBars.BarButtonItem();
             this.btnSvrs = new DevExpress.XtraBars.BarButtonItem();
             this.btnSignal = new DevExpress.XtraBars.BarButtonItem();
+            this.txtSvrLog = new DevExpress.XtraBars.BarButtonItem();
             this.ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
             this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             this.ribbonPageGroup2 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
@@ -83,9 +84,10 @@
             this.btnXlCalculate,
             this.barButtonItem1,
             this.btnSvrs,
-            this.btnSignal});
+            this.btnSignal,
+            this.txtSvrLog});
             this.ribbon.Location = new System.Drawing.Point(0, 0);
-            this.ribbon.MaxItemId = 28;
+            this.ribbon.MaxItemId = 29;
             this.ribbon.Name = "ribbon";
             this.ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
             this.ribbonPage1});
@@ -112,9 +114,9 @@
             this.btnOpenApi.Id = 21;
             this.btnOpenApi.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnOpenApi.ImageOptions.SvgImage")));
             this.btnOpenApi.Name = "btnOpenApi";
-            toolTipItem5.Text = "查看接口文档";
-            superToolTip5.Items.Add(toolTipItem5);
-            this.btnOpenApi.SuperTip = superToolTip5;
+            toolTipItem1.Text = "查看接口文档";
+            superToolTip1.Items.Add(toolTipItem1);
+            this.btnOpenApi.SuperTip = superToolTip1;
             this.btnOpenApi.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnOpenApi_ItemClick);
             // 
             // btnTask
@@ -215,6 +217,14 @@
             this.btnSignal.Name = "btnSignal";
             this.btnSignal.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btn_ItemClick);
             // 
+            // txtSvrLog
+            // 
+            this.txtSvrLog.Caption = "服务日志";
+            this.txtSvrLog.Id = 28;
+            this.txtSvrLog.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("txtSvrLog.ImageOptions.SvgImage")));
+            this.txtSvrLog.Name = "txtSvrLog";
+            this.txtSvrLog.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btn_ItemClick);
+            // 
             // ribbonPage1
             // 
             this.ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
@@ -264,6 +274,7 @@
             // ribbonPageGroup4
             // 
             this.ribbonPageGroup4.ItemLinks.Add(this.btnSvrs);
+            this.ribbonPageGroup4.ItemLinks.Add(this.txtSvrLog);
             this.ribbonPageGroup4.Name = "ribbonPageGroup4";
             this.ribbonPageGroup4.Text = "ribbonPageGroup4";
             // 
@@ -339,5 +350,6 @@
         private DevExpress.XtraBars.BarButtonItem btnSvrs;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup4;
         private DevExpress.XtraBars.BarButtonItem btnSignal;
+        private DevExpress.XtraBars.BarButtonItem txtSvrLog;
     }
 }

+ 1 - 1
XdCxRhDW.App/MainForm.cs

@@ -55,6 +55,7 @@ namespace XdCxRhDW
             ctrlTypes.Add("检测参估", typeof(DetectToolForm));
             ctrlTypes.Add("星历推算", typeof(XlCalculateForm));
             ctrlTypes.Add("服务状态", typeof(CtrlSvrs));
+            ctrlTypes.Add("服务日志", typeof(CtrlSvrLog));
             using (RHDWContext db = new RHDWContext())
             {
                 SysConfig.Config = db.SysSetings.FirstOrDefault();
@@ -387,6 +388,5 @@ namespace XdCxRhDW
             }
         }
 
-
     }
 }

+ 30 - 0
XdCxRhDW.App/MainForm.resx

@@ -555,6 +555,36 @@
         LDI0IDEyLDI4IDE0LDI4IDE0LDI0IDE2LDI0IDE2LDE4IDE4LDE4IDE4LDIwIDIwLDIwIDIwLDE2IDIy
         LDE2IDIyLDEwIDI0LDEwIDI0LDE0IDI2LDE0IDI2LDE4IDI4LDE4IDI4LDE0IDMwLDE0IDMwLDEwICAg
         IDMyLDEwIDMyLDQgICIgY2xhc3M9IkJsdWUiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="txtSvrLog.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi4z
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFcFAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iSG9yaXpvbnRhbF9BeGlzX0xvZ19TY2FsZSIgc3R5bGU9ImVuYWJsZS1i
+        YWNrZ3JvdW5kOm5ldyAwIDAgMzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNr
+        e2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLnN0MHtvcGFjaXR5OjAuNTt9Cjwv
+        c3R5bGU+DQogIDxnIGNsYXNzPSJzdDAiPg0KICAgIDxyZWN0IHg9IjQiIHk9IjIiIHdpZHRoPSIyIiBo
+        ZWlnaHQ9IjI2IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4NCiAgPHBhdGggZD0iTTE0LjYsMTBIMTBW
+        MmgxLjd2Ni41aDIuOVYxMHogTTE4LjYsMTBjLTEuMSwwLTItMC40LTIuNy0xLjFjLTAuNy0wLjctMS0x
+        LjctMS0yLjhjMC0xLjIsMC40LTIuMiwxLjEtMyAgQzE2LjYsMi40LDE3LjYsMiwxOC43LDJjMS4xLDAs
+        MiwwLjQsMi43LDEuMXMxLDEuNywxLDIuOWMwLDEuMi0wLjQsMi4yLTEuMSwyLjlTMTkuNywxMCwxOC42
+        LDEweiBNMTguNywzLjVjLTAuNiwwLTEuMSwwLjItMS40LDAuNyAgYy0wLjQsMC41LTAuNSwxLjEtMC41
+        LDEuOGMwLDAuOCwwLjIsMS40LDAuNSwxLjhjMC40LDAuNCwwLjgsMC43LDEuNCwwLjdjMC42LDAsMS4x
+        LTAuMiwxLjQtMC43czAuNS0xLDAuNS0xLjggIGMwLTAuOC0wLjItMS40LTAuNS0xLjlDMTkuNywzLjcs
+        MTkuMywzLjUsMTguNywzLjV6IE0zMCw5LjNjLTAuOCwwLjQtMS43LDAuNy0yLjgsMC43QzI2LDEwLDI1
+        LDkuNywyNC4zLDlzLTEuMS0xLjYtMS4xLTIuOCAgYzAtMS4yLDAuNC0yLjIsMS4yLTNTMjYuMiwyLDI3
+        LjUsMmMwLjgsMCwxLjUsMC4xLDIuMiwwLjNWNGMtMC42LTAuMy0xLjMtMC41LTIuMi0wLjVjLTAuNyww
+        LTEuMywwLjItMS44LDAuN0MyNS4zLDQuNiwyNSw1LjMsMjUsNiAgYzAsMC44LDAuMiwxLjQsMC42LDEu
+        OHMxLDAuNywxLjYsMC43YzAuNCwwLDAuNy0wLjEsMS0wLjJWNi44aC0xLjVWNS41SDMwVjkuM3oiIGNs
+        YXNzPSJCbHVlIiAvPg0KICA8cG9seWdvbiBwb2ludHM9IjQsMjYgNCwyOCA2LDI4IDYsMzAgOCwzMCA4
+        LDI4IDEwLDI4IDEwLDMwIDEyLDMwIDEyLDI4IDE0LDI4IDE0LDMwIDE2LDMwIDE2LDI4IDE4LDI4IDE4
+        LDMwIDIwLDMwICAgMjAsMjggMjIsMjggMjIsMzAgMjQsMzAgMjQsMjggMjYsMjggMjYsMzAgMjgsMzAg
+        MjgsMjggMzAsMjggMzAsMjYgIiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L
 </value>
   </data>
   <data name="btnTarget.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">

+ 42 - 0
XdCxRhDW.App/Model/LogInfo.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.App.Model
+{
+    public class LogInfo
+    {
+        public LogInfo()
+        {
+            this.LogTime = DateTime.Now;
+            this.LogType = EnumLogType.Info;
+        }
+
+        [Display(Name = "所属模块")]
+        public string Module { get; set; }
+
+        [Display(Name = "时间")]
+        public DateTime LogTime { get;  set; }
+
+        [Display(Name = "日志类型")]
+        public EnumLogType LogType { get; set; }
+
+        [Display(Name = "内容")]
+        public string Msg { get; set; }
+    }
+    public enum EnumLogType
+    {
+        [Display(Name = "消息")]
+        Info,
+
+        [Display(Name = "警告")]
+        Warning,
+
+        [Display(Name = "错误")]
+        Error
+    }
+}

+ 151 - 0
XdCxRhDW.App/UserControl/CtrlSvrLog.Designer.cs

@@ -0,0 +1,151 @@
+namespace XdCxRhDW.App.UserControl
+{
+    partial class CtrlSvrLog
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        ///// <summary> 
+        ///// Clean up any resources being used.
+        ///// </summary>
+        ///// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        //protected override void Dispose(bool disposing)
+        //{
+        //    if (disposing && (components != null))
+        //    {
+        //        components.Dispose();
+        //    }
+        //    base.Dispose(disposing);
+        //}
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
+            this.gridLog = new DevExpress.XtraGrid.GridControl();
+            this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.txtLogModules = new DevExpress.XtraEditors.ImageComboBoxEdit();
+            this.txtStart = new DevExpress.XtraEditors.DateEdit();
+            this.txtEnd = new DevExpress.XtraEditors.DateEdit();
+            this.btnQuery = new DevExpress.XtraEditors.SimpleButton();
+            ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
+            this.panelControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.gridLog)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtLogModules.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtStart.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtStart.Properties.CalendarTimeProperties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtEnd.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtEnd.Properties.CalendarTimeProperties)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // panelControl1
+            // 
+            this.panelControl1.Controls.Add(this.btnQuery);
+            this.panelControl1.Controls.Add(this.txtEnd);
+            this.panelControl1.Controls.Add(this.txtStart);
+            this.panelControl1.Controls.Add(this.txtLogModules);
+            this.panelControl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panelControl1.Location = new System.Drawing.Point(0, 0);
+            this.panelControl1.Name = "panelControl1";
+            this.panelControl1.Size = new System.Drawing.Size(805, 31);
+            this.panelControl1.TabIndex = 2;
+            // 
+            // gridLog
+            // 
+            this.gridLog.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.gridLog.Location = new System.Drawing.Point(0, 31);
+            this.gridLog.MainView = this.gridView1;
+            this.gridLog.Name = "gridLog";
+            this.gridLog.Size = new System.Drawing.Size(805, 459);
+            this.gridLog.TabIndex = 3;
+            this.gridLog.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.gridView1});
+            // 
+            // gridView1
+            // 
+            this.gridView1.GridControl = this.gridLog;
+            this.gridView1.Name = "gridView1";
+            // 
+            // txtLogModules
+            // 
+            this.txtLogModules.Location = new System.Drawing.Point(5, 5);
+            this.txtLogModules.Name = "txtLogModules";
+            this.txtLogModules.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtLogModules.Size = new System.Drawing.Size(187, 20);
+            this.txtLogModules.TabIndex = 0;
+            // 
+            // txtStart
+            // 
+            this.txtStart.EditValue = null;
+            this.txtStart.Location = new System.Drawing.Point(198, 5);
+            this.txtStart.Name = "txtStart";
+            this.txtStart.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtStart.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtStart.Size = new System.Drawing.Size(216, 20);
+            this.txtStart.TabIndex = 1;
+            // 
+            // txtEnd
+            // 
+            this.txtEnd.EditValue = null;
+            this.txtEnd.Location = new System.Drawing.Point(420, 5);
+            this.txtEnd.Name = "txtEnd";
+            this.txtEnd.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtEnd.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtEnd.Size = new System.Drawing.Size(216, 20);
+            this.txtEnd.TabIndex = 1;
+            // 
+            // btnQuery
+            // 
+            this.btnQuery.Location = new System.Drawing.Point(642, 4);
+            this.btnQuery.Name = "btnQuery";
+            this.btnQuery.Size = new System.Drawing.Size(75, 23);
+            this.btnQuery.TabIndex = 2;
+            this.btnQuery.Text = "查询";
+            this.btnQuery.Click += new System.EventHandler(this.btnQuery_Click);
+            // 
+            // CtrlSvrLog
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.gridLog);
+            this.Controls.Add(this.panelControl1);
+            this.Name = "CtrlSvrLog";
+            this.Size = new System.Drawing.Size(805, 490);
+            this.Load += new System.EventHandler(this.CtrlSvrs_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit();
+            this.panelControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.gridLog)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtLogModules.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtStart.Properties.CalendarTimeProperties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtStart.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtEnd.Properties.CalendarTimeProperties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.txtEnd.Properties)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.PanelControl panelControl1;
+        private DevExpress.XtraEditors.SimpleButton btnQuery;
+        private DevExpress.XtraEditors.DateEdit txtEnd;
+        private DevExpress.XtraEditors.DateEdit txtStart;
+        private DevExpress.XtraEditors.ImageComboBoxEdit txtLogModules;
+        private DevExpress.XtraGrid.GridControl gridLog;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+    }
+}

+ 102 - 0
XdCxRhDW.App/UserControl/CtrlSvrLog.cs

@@ -0,0 +1,102 @@
+using DevExpress.Mvvm.Native;
+using DevExpress.Utils;
+using DevExpress.Utils.Html;
+using DevExpress.XtraEditors;
+using DxHelper;
+using ExtensionsDev;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Data.Entity;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Forms;
+using XdCxRhDW.App.Controllers;
+using XdCxRhDW.App.EditForms;
+using XdCxRhDW.App.Model;
+using XdCxRhDW.Dto;
+using XdCxRhDW.Repostory;
+
+namespace XdCxRhDW.App.UserControl
+{
+    public partial class CtrlSvrLog : DevExpress.XtraEditors.XtraUserControl
+    {
+        List<LogInfo> list = new List<LogInfo>();
+        public CtrlSvrLog()
+        {
+            InitializeComponent();
+            this.txtStart.UseDefault();
+            this.txtEnd.UseDefault();
+        }
+
+
+        private async void CtrlSvrs_Load(object sender, EventArgs e)
+        {
+            gridLog.UseDefault(list).UseEmptyText("无结果").UseExportCsv().UseClear<LogInfo>().SetLogImageColumn(nameof(LogInfo.LogType), typeof(EnumLogType));
+            gridView1.Columns[nameof(LogInfo.LogType)].MaxWidth = 100;
+            gridView1.Columns[nameof(LogInfo.LogTime)].MaxWidth = 160;
+            gridView1.Columns[nameof(LogInfo.Msg)].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;
+            this.txtLogModules.Properties.Items.Add("全部", "全部", -1);
+            var res = await HttpHelper.PostRequestAsync<List<LogModulesResDto>>(SysConfig.GetUrl("Log/GetModules"), null);
+            if (res.data != null && res.data.Any())
+            {
+                foreach (var item in res.data)
+                {
+                    this.txtLogModules.Properties.Items.Add(item.Module, item.Module, -1);
+                }
+            }
+            this.txtLogModules.SelectedIndex = 0;
+        }
+
+        private async void btnQuery_Click(object sender, EventArgs e)
+        {
+            btnQuery.Enabled = false;
+            try
+            {
+                LogQueryDto dto = new LogQueryDto()
+                {
+                    Module = this.txtLogModules.Text,
+                    LogTimeBegin = txtStart.DateTime,
+                    LogTimeEnd = txtEnd.DateTime,
+                };
+                var res = await HttpHelper.PostRequestAsync<List<LogInfoDto>>(SysConfig.GetUrl("Log/Query"), dto);
+                if (res.code != 200)
+                {
+                    MsgBoxHelper.ShowError(res.msg);
+                }
+                else
+                {
+                    var items = res.data.Select(t => new LogInfo()
+                    {
+                        LogTime = t.LogTime,
+                        LogType = (Model.EnumLogType)(int)t.LogType,
+                        Module = t.Module,
+                        Msg = t.Msg
+
+                    });
+                    this.list.AddRange(items);
+                    if (!list.Any())
+                    {
+                        await Task.Delay(200);
+                    }
+                    this.BeginInvoke(new Action(() =>
+                    {
+                        gridView1.RefreshData();
+                    }));
+                }
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "查询日志出错");
+                MsgBoxHelper.ShowError("查询日志出错");
+            }
+            btnQuery.Enabled = true;
+        }
+    }
+}

+ 120 - 0
XdCxRhDW.App/UserControl/CtrlSvrLog.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 11 - 0
XdCxRhDW.App/XdCxRhDW.App.csproj

@@ -158,6 +158,7 @@
     <Compile Include="Basic\BindingData.cs" />
     <Compile Include="Basic\IOverlayFormService.cs" />
     <Compile Include="Controllers\DetectCgController.cs" />
+    <Compile Include="Controllers\LogController.cs" />
     <Compile Include="Controllers\ResultController.cs" />
     <Compile Include="Controllers\PosController.cs" />
     <Compile Include="Controllers\SvrReportController.cs" />
@@ -312,6 +313,7 @@
     <Compile Include="MainForm.Designer.cs">
       <DependentUpon>MainForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="Model\LogInfo.cs" />
     <Compile Include="Model\ModelPosRes.cs" />
     <Compile Include="Model\ModelSatEphRes.cs" />
     <Compile Include="Model\ModelSvrs.cs" />
@@ -357,6 +359,12 @@
     <Compile Include="UserControl\CtrlSignal.Designer.cs">
       <DependentUpon>CtrlSignal.cs</DependentUpon>
     </Compile>
+    <Compile Include="UserControl\CtrlSvrLog.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UserControl\CtrlSvrLog.Designer.cs">
+      <DependentUpon>CtrlSvrLog.cs</DependentUpon>
+    </Compile>
     <Compile Include="UserControl\CtrlSvrs.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -542,6 +550,9 @@
     <EmbeddedResource Include="UserControl\CtrlSignal.resx">
       <DependentUpon>CtrlSignal.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="UserControl\CtrlSvrLog.resx">
+      <DependentUpon>CtrlSvrLog.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="UserControl\CtrlSvrs.resx">
       <DependentUpon>CtrlSvrs.cs</DependentUpon>
     </EmbeddedResource>

+ 1 - 0
XdCxRhDW.Entity/03.XdCxRhDW.Entity.csproj

@@ -60,6 +60,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="BaseEntity.cs" />
+    <Compile Include="LogRes.cs" />
     <Compile Include="CgRes.cs" />
     <Compile Include="CgXgfRes.cs" />
     <Compile Include="CheckRes.cs" />

+ 24 - 0
XdCxRhDW.Entity/EntityEnum.cs

@@ -241,4 +241,28 @@ namespace XdCxRhDW.Entity
         [Display(Name = "常规信号")]
         Normal = 8,
     }
+
+    /// <summary>
+    /// 日志类型
+    /// </summary>
+    public enum EnumLogType
+    {
+        /// <summary>
+        /// 消息
+        /// </summary>
+        [Display(Name = "消息")]
+        Info,
+
+        /// <summary>
+        /// 警告
+        /// </summary>
+        [Display(Name = "警告")]
+        Warning,
+
+        /// <summary>
+        /// 错误
+        /// </summary>
+        [Display(Name = "错误")]
+        Error
+    }
 }

+ 37 - 0
XdCxRhDW.Entity/LogRes.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Entity
+{
+    /// <summary>
+    /// 日志表
+    /// </summary>
+    [Table("LogRes")]
+    public class LogRes : BaseEntity<long>
+    {
+        /// <summary>
+        /// 所属模块
+        /// </summary>
+        public string Module { get; set; }
+
+        /// <summary>
+        /// 时间
+        /// </summary>
+        public DateTime LogTime { get;  set; }
+
+        /// <summary>
+        /// 日志类型
+        /// </summary>
+        public EnumLogType LogType { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        public string Msg { get; set; }
+    }
+}

+ 2 - 0
XdCxRhDW.Repostory/EFContext/RHDWContext.cs

@@ -51,6 +51,8 @@ namespace XdCxRhDW.Repostory
 
         public DbSet<SysSetings> SysSetings { get; set; }
 
+        public DbSet<LogRes> LogRes { set; get; }
+
     }
 
     /// <summary>

+ 2 - 0
XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj

@@ -62,6 +62,8 @@
     <Compile Include="ErrEllipseX2D1Dto.cs" />
     <Compile Include="ImageResultDto.cs" />
     <Compile Include="CgResQueryDto.cs" />
+    <Compile Include="LogInfoDto.cs" />
+    <Compile Include="LogQueryDto.cs" />
     <Compile Include="PosDto\LeoX1ParPosDto.cs" />
     <Compile Include="PosDto\X3TwoDtoNoXlNoParPosDto.cs" />
     <Compile Include="SigDelayDto.cs" />

+ 24 - 0
XdCxRhDw.Dto/DtoEnum.cs

@@ -203,4 +203,28 @@ namespace XdCxRhDW.Dto
         Error,
     }
 
+    /// <summary>
+    /// 日志类型
+    /// </summary>
+    public enum EnumLogTypeDto
+    {
+        /// <summary>
+        /// 消息
+        /// </summary>
+        [Display(Name = "消息")]
+        Info,
+
+        /// <summary>
+        /// 警告
+        /// </summary>
+        [Display(Name = "警告")]
+        Warning,
+
+        /// <summary>
+        /// 错误
+        /// </summary>
+        [Display(Name = "错误")]
+        Error
+    }
+
 }

+ 54 - 0
XdCxRhDw.Dto/LogInfoDto.cs

@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 日志信息
+    /// </summary>
+    public class LogInfoDto
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public LogInfoDto()
+        {
+            this.LogTime = DateTime.Now;
+            this.LogType = EnumLogTypeDto.Info;
+        }
+        /// <summary>
+        /// 所属模块
+        /// </summary>
+        public string Module { get; set; }
+
+        /// <summary>
+        /// 时间
+        /// </summary>
+        public DateTime LogTime { get;  set; }
+
+        /// <summary>
+        /// 日志类型
+        /// </summary>
+        public EnumLogTypeDto LogType { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        public string Msg { get; set; }
+    }
+
+    /// <summary>
+    /// 日志模块结果模型
+    /// </summary>
+    public class LogModulesResDto
+    {
+        /// <summary>
+        /// 所属模块
+        /// </summary>
+        public string Module { get; set; }
+    }
+}

+ 29 - 0
XdCxRhDw.Dto/LogQueryDto.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 日志查询参数
+    /// </summary>
+    public class LogQueryDto
+    {
+        /// <summary>
+        /// 模块名称(可空)
+        /// </summary>
+        public string Module { get; set; }
+
+        /// <summary>
+        /// 日志开始时间(空表示从最早开始查询)
+        /// </summary>
+        public DateTime? LogTimeBegin { get; set; }
+
+        /// <summary>
+        /// 日志结束时间(空表示查询到末尾)
+        /// </summary>
+        public DateTime? LogTimeEnd { get; set; } 
+    }
+}

BIN
data.gmdb