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 nowTime = DateTime.Now;
var db = _db.Default;
var taskList = db.Queryable().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().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();
// 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);
}
}