using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Http; using XdCxRhDW.Dto; using XdCxRhDW.Api; using XdCxRhDW.Entity; using XdCxRhDW.Repostory; using XdCxRhDW.WebApi; using System.Threading; using System.Diagnostics; namespace XdCxRhDW.App.Controllers { /// /// 任务相关接口 /// public class TaskController : BaseController { /// /// 获取客户端IP地址 /// /// [HttpGet] public async Task> GetClientIP() { try { var ip = RemoteIp; return Success(ip); } catch (Exception ex) { await XdCxRhDW.UI.Lib.LogHelper.Error("获取客户端IP出错", ex); return Error("获取客户端IP出错"); } } /// /// 推算参考时差 /// /// 卫星参数 /// [HttpPost] public async Task> GetRefCalcAsync(SatDto dto) { try { var dtos = await RefCgRepository.GetLatestAsync(dto.SatCode, dto.SigTime); var cgOrderList = dtos.OrderBy(d => d.SigTime).ToList(); var point1 = cgOrderList.Where(c => c.SigTime <= dto.SigTime).FirstOrDefault(); var point2 = cgOrderList.Where(c => c.SigTime >= dto.SigTime).FirstOrDefault(); var refdto = new RefCafResultDto(); if (point1 == null || point2 == null) { refdto.dt = 0; refdto.df = 0; refdto.snr = 0; } else { double refDto = RefCgRepository.CalSigTimeDto(dto.SigTime, point1.SigTime, point2.SigTime, point1.YbDto, point2.YbDto); refdto.dt = refDto * 1e6; } return Success(refdto); } catch (Exception ex) { return Error(ex.Message); } } /// /// 停止任务 /// /// 任务停止参数 /// [HttpPost] public async Task StopTask(TaskStopHandleDto dto) { try { using (RHDWContext db = new RHDWContext()) { var item = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.ID); if (item == null) { return Error($"任务停止失败,找不到ID={dto.ID}的任务"); } if (item.TaskState == EnumTaskState.Stopped) Thread.Sleep(2000); item.TaskState = EnumTaskState.Stopped; await db.SaveChangesAsync(); } using (RHDWLogContext db = new RHDWLogContext()) { LogRes res = new LogRes() { LogTime = DateTime.Now, Module = Process.GetCurrentProcess().ProcessName, LogType = EnumLogType.Info, Msg = $"任务停止完成,ID={dto.ID},停止原因={dto.StopReason}", }; db.LogRes.Add(res); await db.SaveChangesAsync(); } Messenger.Defalut.Pub("任务状态改变", dto.ID); return Success(); } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error($"任务停止异常.ID={dto.ID}", ex); return Error(ex.Message); } } } }