using ServiceCenter.SqlSugars;
using System.ComponentModel;
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;
protected override bool SaveLogsToFile => 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().Where(x => x.Type == TaskType.OutDepot && x.Status == TaskStatus.ConveyorExecution && x.Uploaded != TaskStatus.ConveyorExecution).ToList();
foreach (var task in taskList)
{
var res = WmsApi.SrmPickOutCompleted(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().First(x => x.ID == taskId);
task.Uploaded = TaskStatus.ConveyorExecution;
task.EditTime = DateTime.Now;
db.Updateable(task).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.Type == TaskType.OutDepot) && !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");
}
});
////立库二楼出库更新完成
//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);
}
}
}