using AngleSharp.Dom; using Furion.DatabaseAccessor; using Microsoft.AspNetCore.SignalR; namespace WCS.Application; /// /// 任务表服务 /// [ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)] public class WcsTaskService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _wcsTaskRep; private readonly IHubContext _taskLogHubContext; public WcsTaskService(SqlSugarRepository wcsTaskRep, IHubContext taskLogHubContext) { _wcsTaskRep = wcsTaskRep; _taskLogHubContext = taskLogHubContext; } /// /// 分页查询任务表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Page")] [DisplayName("分页查询任务表")] public async Task> Page(PageWcsTaskInput input) { input.SearchKey = input.SearchKey?.Trim(); var query = _wcsTaskRep.AsQueryable() .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u => u.TaskNo.Contains(input.SearchKey) ) .WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo), u => u.TaskNo.Contains(input.TaskNo.Trim())) .WhereIF(input.TaskType.HasValue, u => u.TaskType == input.TaskType) .WhereIF(input.Status.HasValue, u => u.Status == input.Status) .Select(); return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize); } /// /// 增加任务表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [DisplayName("增加任务表")] public async Task Add(AddWcsTaskInput input) { var entity = input.Adapt(); await _wcsTaskRep.InsertAsync(entity); return entity.Id; } /// /// 删除任务表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [DisplayName("删除任务表")] public async Task Delete(DeleteWcsTaskInput input) { var entity = await _wcsTaskRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); await _wcsTaskRep.FakeDeleteAsync(entity); //假删除 //await _wcsTaskRep.DeleteAsync(entity); //真删除 } /// /// 更新任务表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Update")] [DisplayName("更新任务表")] public async Task Update(UpdateWcsTaskInput input) { var entity = input.Adapt(); await _wcsTaskRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// /// 获取任务表 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [DisplayName("获取任务表")] public async Task Detail([FromQuery] QueryByIdWcsTaskInput input) { return await _wcsTaskRep.GetFirstAsync(u => u.Id == input.Id); } /// /// 获取任务表列表 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] [DisplayName("获取任务表列表")] public async Task> List([FromQuery] PageWcsTaskInput input) { return await _wcsTaskRep.AsQueryable().Select().ToListAsync(); } /// /// 完成/取消任务表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Finsh")] [DisplayName("完成/取消任务表")] [UnitOfWork] public async Task Finsh(UpdateWcsTaskInput input) { if (input.Status == TaskStatusEnum.Complete || input.Status == TaskStatusEnum.Cancell) { var modTask = await _wcsTaskRep.GetByIdAsync(input.Id); if (modTask.Status > TaskStatusEnum.Doing) throw Oops.Oh("任务状态异常"); if (input.Status == TaskStatusEnum.Complete) modTask.IsSuccess = TaskSuccessEnum.Success; else modTask.IsSuccess = TaskSuccessEnum.Fail; modTask.FinishDate = DateTime.Now; modTask.Status = input.Status; await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Status, s.IsSuccess, s.FinishDate, s.UpdateTime,s.UpdateUserId,s.UpdateUserName }).ExecuteCommandAsync(); //写入任务明细表 WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, PlcId = 0, PlcName = "", Status = TaskStatusEnum.Complete, StartLocat = modTask.StartLocate, EndLocat = modTask.EndLocate, InteractiveMsg = input.Status == TaskStatusEnum.Complete ? "任务已手动完成" : "任务已手动取消", PalletNo = modTask.PalletNo }; await _wcsTaskRep.Context.Insertable(modTaskMonitor).ExecuteCommandAsync(); //await _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt()); //await _taskLogHubContext.Clients.All.PublicTaskMonitor(modTaskMonitor.Adapt()); } else { throw Oops.Oh("任务状态异常"); } } }