using System.ComponentModel; using System.Threading.Tasks; using ServiceCenter.Extensions; using ServiceCenter.SqlSugars; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.WebApi.Controllers; using WCS.WorkEngineering.WebApi.Models.WMS.Response; using WCS.WorkEngineering.Worlds; using TaskStatus = WCS.Entity.TaskStatus; namespace WCS.WorkEngineering.Systems; /// /// UpLoadSystems /// [BelongTo(typeof(UpLoadWorld))] [Description("UpLoadSystems")] public class UpLoadSystems : DeviceSystem> { protected override bool ParallelDo => true; public override void Do(Device obj) { //更新出库放货完成状态 SqlSugarHelper.Do(_db => { var taskIdList = new List(); var nowTime = DateTime.Now; var db = _db.Default; var taskList = db.Queryable().UpdLock().Where(x => x.Uploaded != TaskStatus.ConveyorExecution && x.Status == TaskStatus.StackerCompleted && x.Type == TaskType.OutDepot).ToList(); var isEnd = false; //一次就同步一条数据即可 foreach (var task in taskList) { if (isEnd) continue; var res = WmsApi.SrmPickOutCompleted(task.ID); if (res.ResCode == ResponseStatusCodeEnum.Sucess) { taskIdList.Add(task); //更新成功 isEnd = true; } else { World.Log($"出库任务完成同步:出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]"); } } //拆分防止锁表 foreach (var task in taskIdList) { task.Uploaded = TaskStatus.ConveyorExecution; task.Status = TaskStatus.ConveyorExecution; task.EditTime = nowTime; db.UpdateableRowLock(task).UpdateColumns(x => new { x.Uploaded, x.EditTime, x.Status }).ExecuteCommand(); task.AddWCS_TASK_DTL(db, "", $"同步出库任务放货完成状态同步至WMS"); } }); //环形库组盘任务/立库入库任务/二楼立库出库//芯股叫料 更新完成 SqlSugarHelper.Do(_db => { var taskIdList = new List(); var nowTime = DateTime.Now; var db = _db.Default; var taskList = db.Queryable().NoLock() .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R")) || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) && !x.WarehouseCode.Contains("R")) || (x.Type == TaskType.EnterDepot && x.WarehouseCode.Contains("CRZP")) || (x.Type == TaskType.OutDepot && x.Device == "CR") || (x.Type == TaskType.OutDepot && x.AddrFrom.Contains("NSTJ") && x.AddrTo.Contains("NSTJ"))) && x.Status == TaskStatus.Finish && x.Uploaded != TaskStatus.Finish) .SplitTable(x => x.Take(2)).ToList(); var isEnd = false; foreach (var taskId in taskList.Select(x=>x.Id)) { if (isEnd) continue; var task=db.Queryable().UpdLock().Where(x => x.Id == taskId).SplitTable(x=>x.Take(2)).First(); if (task==null) { World.Log($"入库任务完成同步:没有找到对应的任务:[{taskId}]"); continue; } if (task is { Status: TaskStatus.Finish, Uploaded: TaskStatus.Finish }) { World.Log($"入库任务完成同步:任务状态不符合条件:任务号[{task.Id}]状态[{task.Status.GetDescription()}]同步状态[{task.Uploaded.GetDescription()}]"); continue; } var res = WmsApi.CompleteTask(taskId); if (res.ResCode == ResponseStatusCodeEnum.Sucess) { taskIdList.Add(task); isEnd = true; } else { World.Log($"入库任务完成同步:入库完成状态同步失败:{taskId}[{res.ResMsg}]"); } } //拆分防止锁表 foreach (var task in taskIdList) { task.Uploaded = TaskStatus.Finish; task.EditTime = nowTime; db.UpdateableRowLock(task).SplitTable(x => x.Take(2)).ExecuteCommand(); task.AddWCS_TASK_DTL(db, "", $"同步入库完成状态同步至WMS"); } }); ////立库二楼出库更新完成 //SqlSugarHelper.Do(_db => //{ // var taskIdList = new List(); // var nowTime = DateTime.Now; // var db = _db.Default; // var taskList = db.Queryable().SplitTable(x => x.Take(2)) // .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R")) || (x.Type == TaskType.EnterDepot && !x.WarehouseCode.Contains("R"))) // && x.Status == TaskStatus.Finish // && x.Uploaded != TaskStatus.Finish).ToList(); // foreach (var task in taskList) // { // var res = WmsApi.CompleteTask(task.Id); // if (res.ResCode == ResponseStatusCodeEnum.Sucess) taskIdList.Add(task.Id); // else World.Log($"入库完成状态同步失败:{task.Id}[{res.ResMsg}]"); // } // //拆分防止锁表 // foreach (var taskId in taskIdList) // { // var task = db.Queryable().SplitTable(x => x.Take(2)).First(x => x.Id == taskId); // task.Uploaded = TaskStatus.Finish; // task.EditTime = nowTime; // db.Updateable(task).SplitTable(x => x.Take(2)).ExecuteCommand(); // task.AddWCS_TASK_DTL(db, "", $"同步入库完成状态同步至WMS"); // } //}); } public override bool Select(Device dev) { return dev.Code == nameof(UpLoadSystems); } }