123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- 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;
- /// <summary>
- /// UpLoadSystems
- /// </summary>
- [BelongTo(typeof(UpLoadWorld))]
- [Description("UpLoadSystems")]
- public class UpLoadSystems : DeviceSystem<Device<IStation520>>
- {
- protected override bool ParallelDo => true;
- public override void Do(Device<IStation520> obj)
- {
- //更新出库放货完成状态
- SqlSugarHelper.Do(_db =>
- {
- var nowTime = DateTime.Now;
- var db = _db.Default;
- var taskList = db.Queryable<WCS_TaskInfo>().RowLock().Where(x =>
- x.Uploaded != TaskStatus.ConveyorExecution && x.Status == TaskStatus.StackerCompleted &&
- x.Type == TaskType.OutDepot).ToList();
- WCS_TaskInfo taskNow = null;
- // 1. 遍历任务列表,处理任务完成状态
- foreach (var task in taskList)
- {
- var res = WmsApi.SrmPickOutCompleted(task.ID);
- if (res.ResCode == ResponseStatusCodeEnum.Sucess)
- {
- taskNow = task; // 记录成功的任务
- break; // 只需要成功处理一个任务,跳出循环
- }
- World.Log($"出库放货完成状态同步失败: 任务ID {task.ID}, 错误信息: {res.ResMsg}");
- }
- // 2. 更新任务状态并记录日志,仅当 taskOld 不为 null 时才执行
- taskNow.Uploaded = TaskStatus.ConveyorExecution;
- taskNow.Status = TaskStatus.ConveyorExecution;
- taskNow.EditTime = nowTime;
- try
- {
- // 使用行锁和分表更新,防止锁表
- db.Updateable(taskNow).UpdateColumns(x => new { x.Uploaded, x.EditTime, x.Status }).ExecuteCommand();
- // 记录任务详细日志
- taskNow.AddWCS_TASK_DTL(db, "", "同步出库任务放货完成状态同步至WMS");
- }
- catch (Exception ex)
- {
- World.Log($"任务ID {taskNow.ID} 出库放货完成状态同步失败,错误信息: {ex.Message}");
- }
- 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;
- // }
- // 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 nowTime = DateTime.Now;
- var db = _db.Default;
- var taskList = db.Queryable<WCS_TaskOld>().RowLock()
- .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();
- WCS_TaskOld taskOld = null;
- // 1. 遍历任务列表,处理任务完成状态
- foreach (var task in taskList)
- {
- var res = WmsApi.CompleteTask(task.Id);
- if (res.ResCode == ResponseStatusCodeEnum.Sucess)
- {
- taskOld = task; // 记录成功的任务
- break; // 只需要成功处理一个任务,跳出循环
- }
- World.Log($"入库完成状态同步失败: 任务ID {task.Id}, 错误信息: {res.ResMsg}");
- }
- // 2. 更新任务状态并记录日志,仅当 taskOld 不为 null 时才执行
- taskOld.Uploaded = TaskStatus.Finish;
- taskOld.EditTime = nowTime;
- try
- {
- // 使用行锁和分表更新,防止锁表
- db.Updateable(taskOld).SplitTable(x => x.Take(2)).ExecuteCommand();
- // 记录任务详细日志
- taskOld.AddWCS_TASK_DTL(db, "", "同步入库完成状态同步至WMS");
- }
- catch (Exception ex)
- {
- World.Log($"任务ID {taskOld.Id} 入库完成状态同步失败,错误信息: {ex.Message}");
- }
- });
- ////立库二楼出库更新完成
- //SqlSugarHelper.Do(_db =>
- //{
- // var taskIdList = new List<int>();
- // var nowTime = DateTime.Now;
- // var db = _db.Default;
- // var taskList = db.Queryable<WCS_TaskOld>().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<WCS_TaskOld>().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);
- }
- }
|