|
@@ -1,6 +1,7 @@
|
|
|
-using ServiceCenter.Extensions;
|
|
|
+using System.ComponentModel;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using ServiceCenter.Extensions;
|
|
|
using ServiceCenter.SqlSugars;
|
|
|
-using System.ComponentModel;
|
|
|
using WCS.Core;
|
|
|
using WCS.Entity;
|
|
|
using WCS.Entity.Protocol.Station;
|
|
@@ -10,126 +11,171 @@ using WCS.WorkEngineering.WebApi.Models.WMS.Response;
|
|
|
using WCS.WorkEngineering.Worlds;
|
|
|
using TaskStatus = WCS.Entity.TaskStatus;
|
|
|
|
|
|
-namespace WCS.WorkEngineering.Systems
|
|
|
+namespace WCS.WorkEngineering.Systems;
|
|
|
+
|
|
|
+/// <summary>
|
|
|
+/// UpLoadSystems
|
|
|
+/// </summary>
|
|
|
+[BelongTo(typeof(UpLoadWorld))]
|
|
|
+[Description("UpLoadSystems")]
|
|
|
+public class UpLoadSystems : DeviceSystem<Device<IStation520>>
|
|
|
{
|
|
|
- /// <summary>
|
|
|
- /// UpLoadSystems
|
|
|
- /// </summary>
|
|
|
- [BelongTo(typeof(UpLoadWorld))]
|
|
|
- [Description("UpLoadSystems")]
|
|
|
- public class UpLoadSystems : DeviceSystem<Device<IStation520>>
|
|
|
- {
|
|
|
- protected override bool ParallelDo => true;
|
|
|
+ protected override bool ParallelDo => true;
|
|
|
|
|
|
- public override void Do(Device<IStation520> obj)
|
|
|
+ public override void Do(Device<IStation520> obj)
|
|
|
+ {
|
|
|
+ //更新出库放货完成状态
|
|
|
+ SqlSugarHelper.Do(_db =>
|
|
|
{
|
|
|
- //更新出库放货完成状态
|
|
|
- SqlSugarHelper.Do(_db =>
|
|
|
- {
|
|
|
- var taskIdList = new List<WCS_TaskInfo>();
|
|
|
- var nowTime = DateTime.Now;
|
|
|
+ var nowTime = DateTime.Now;
|
|
|
|
|
|
- var db = _db.Default;
|
|
|
- var taskList = db.Queryable<WCS_TaskInfo>().UpdLock().Where(x => x.Uploaded != TaskStatus.ConveyorExecution && x.Status == TaskStatus.StackerCompleted && x.Type == TaskType.OutDepot).ToList();
|
|
|
+ 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();
|
|
|
|
|
|
- var isEnd = false;
|
|
|
+ WCS_TaskInfo taskNow = null;
|
|
|
|
|
|
- //一次就同步一条数据即可
|
|
|
- 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}]");
|
|
|
- }
|
|
|
+ // 1. 遍历任务列表,处理任务完成状态
|
|
|
+ foreach (var task in taskList)
|
|
|
+ {
|
|
|
+ var res = WmsApi.SrmPickOutCompleted(task.ID);
|
|
|
|
|
|
- //拆分防止锁表
|
|
|
- foreach (var task in taskIdList)
|
|
|
+ if (res.ResCode == ResponseStatusCodeEnum.Sucess)
|
|
|
{
|
|
|
- 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");
|
|
|
+ taskNow = task; // 记录成功的任务
|
|
|
+ break; // 只需要成功处理一个任务,跳出循环
|
|
|
}
|
|
|
- });
|
|
|
|
|
|
- //环形库组盘任务/立库入库任务/二楼立库出库//芯股叫料 更新完成
|
|
|
- SqlSugarHelper.Do(_db =>
|
|
|
+ World.Log($"出库放货完成状态同步失败: 任务ID {task.ID}, 错误信息: {res.ResMsg}");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 更新任务状态并记录日志,仅当 taskOld 不为 null 时才执行
|
|
|
+ taskNow.Uploaded = TaskStatus.ConveyorExecution;
|
|
|
+ taskNow.Status = TaskStatus.ConveyorExecution;
|
|
|
+ taskNow.EditTime = nowTime;
|
|
|
+ try
|
|
|
{
|
|
|
- var taskIdList = new List<WCS_TaskOld>();
|
|
|
- var nowTime = DateTime.Now;
|
|
|
- var db = _db.Default;
|
|
|
- var taskList = db.Queryable<WCS_TaskOld>().UpdLock()
|
|
|
- .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 task in taskList)
|
|
|
- {
|
|
|
- if (isEnd) continue;
|
|
|
- var res = WmsApi.CompleteTask(task.Id);
|
|
|
- if (res.ResCode == ResponseStatusCodeEnum.Sucess)
|
|
|
- {
|
|
|
- taskIdList.Add(task);
|
|
|
- isEnd = true;
|
|
|
- }
|
|
|
- World.Log($"入库完成状态同步失败:{task.Id}[{res.ResMsg}]");
|
|
|
- }
|
|
|
+ // 使用行锁和分表更新,防止锁表
|
|
|
+ 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}");
|
|
|
+ }
|
|
|
|
|
|
- //拆分防止锁表
|
|
|
- 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");
|
|
|
- }
|
|
|
- });
|
|
|
+ var isEnd = false;
|
|
|
|
|
|
- ////立库二楼出库更新完成
|
|
|
- //SqlSugarHelper.Do(_db =>
|
|
|
+ ////一次就同步一条数据即可
|
|
|
+ //foreach (var task in taskList)
|
|
|
//{
|
|
|
- // 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}]");
|
|
|
- // }
|
|
|
+ // if (isEnd) continue;
|
|
|
|
|
|
- // //拆分防止锁表
|
|
|
- // foreach (var taskId in taskIdList)
|
|
|
+ // var res = WmsApi.SrmPickOutCompleted(task.ID);
|
|
|
+ // if (res.ResCode == ResponseStatusCodeEnum.Sucess)
|
|
|
// {
|
|
|
- // 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");
|
|
|
+ // taskIdList.Add(task); //更新成功
|
|
|
+ // isEnd = true;
|
|
|
// }
|
|
|
- //});
|
|
|
- }
|
|
|
|
|
|
- public override bool Select(Device dev)
|
|
|
+ // 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 =>
|
|
|
{
|
|
|
- return dev.Code == nameof(UpLoadSystems);
|
|
|
- }
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|