using Newtonsoft.Json;
using PlcSiemens.Core.Extension;
using ServiceCenter.Extensions;
using ServiceCenter.Logs;
using ServiceCenter.Redis;
using ServiceCenter.SqlSugars;
using System.ComponentModel;
using WCS.Core;
using WCS.Entity;
using WCS.Entity.Protocol.BCR;
using WCS.Entity.Protocol.Station;
using WCS.WorkEngineering.Extensions;
using WCS.WorkEngineering.Worlds;
using TaskStatus = WCS.Entity.TaskStatus;
namespace WCS.WorkEngineering.Systems
{
///
/// 满轮主线预写入目标地址
///
[BelongTo(typeof(SortingMainLineWorld))]
[Description("满轮主线预写入目标地址")]
public class 满轮主线预写入目标地址 : DeviceSystem>
{
protected override bool ParallelDo => true;
protected override bool SaveLogsToFile => true;
public override void Do(Device obj)
{
//待处理条码组
var pendingBcrList = obj.Data2.GetBcrCodeList().Where(x => !x.IsNullOrEmpty());
//缓存条码组
var cacheBcrList = obj.Data3.GetBcrCodeList();
var codes = pendingBcrList.Where(x => !cacheBcrList.Contains(x));
World.Log($"扫码器:{JsonConvert.SerializeObject(pendingBcrList)}");
World.Log($"缓存信息:{JsonConvert.SerializeObject(cacheBcrList)}");
//循环处理所有缓存条码组中没有的条码
foreach (var bcrCode in codes)
{
//取出预分配地址,并计算相关信息
var key = $"AllocationWarehouseSort:{bcrCode}";
var value = RedisHub.WMS.Get(key);
if (value == null)
{
World.Log($"{bcrCode}:找不到分库记录", LogLevelEnum.High);
continue;
}
var mainlineDiversion = JsonConvert.DeserializeObject(value);
var srmCode = mainlineDiversion.WarehouseCode.WarehouseToSrm();
var path = DevicePath.GetPath(obj.Entity.Code, srmCode);
if (path == null || path is { Points.Count: < 2 })
{
World.Log($"{bcrCode}:路径错误,当前位置{obj.Entity.Code},目标位置:{srmCode}", LogLevelEnum.High);
continue;
}
var next = path.Points[1].Code;
WCS_TaskInfo taskInfo = null;
try
{
SqlSugarHelper.Do(_db =>
{
var db = _db.Default;
var task = db.Queryable().NoLock().Single(x => x.BarCode == bcrCode && x.ID == mainlineDiversion.TaskId && x.Status == TaskStatus.NewBuild);
if (task == null)
{
World.Log($"{bcrCode}:找不到匹配任务--{value}", LogLevelEnum.High);
return;
}
//if ((obj.Entity.Code == "18" && task.WarehouseCode == "1N") ||
// (obj.Entity.Code == "118" && task.WarehouseCode == "1S") ||
// (obj.Entity.Code == "38" && task.WarehouseCode == "2N") ||
// (obj.Entity.Code == "138" && task.WarehouseCode == "2S") ||
// (obj.Entity.Code == "58" && task.WarehouseCode == "3N") ||
// (obj.Entity.Code == "158" && task.WarehouseCode == "3S"))
//{
// task.Status = TaskStatus.WaitingToExecute;
// task.EditWho = "WCS";
// task.StartTime = DateTime.Now;
//}
//task.EditTime = DateTime.Now;
//db.UpdateableRowLock(task).ExecuteCommand();
//task.AddWCS_TASK_DTL(db, obj.Entity.Code, next, "任务完成预分流");
taskInfo = task;
});
}
catch (Exception e)
{
World.Log($"{bcrCode}:----{e.Message}-{value}", LogLevelEnum.High);
continue;
}
if (taskInfo == null) continue;
//开始赋值
obj.Data3.GetType().GetProperty($"BcrCode{obj.Data3.NextIndex}").SetValue(obj.Data3, bcrCode);
obj.Data3.GetType().GetProperty($"BcrCode{obj.Data3.NextIndex}").SetValue(obj.Data3, bcrCode);
obj.Data3.GetType().GetProperty($"TaskNumber{obj.Data3.NextIndex}").SetValue(obj.Data3, taskInfo.ID);
obj.Data3.GetType().GetProperty($"TaskNumber{obj.Data3.NextIndex}").SetValue(obj.Data3, taskInfo.ID);
obj.Data3.GetType().GetProperty($"GoodsEnd{obj.Data3.NextIndex}").SetValue(obj.Data3, next.ToShort());
obj.Data3.GetType().GetProperty($"GoodsEnd{obj.Data3.NextIndex}").SetValue(obj.Data3, next.ToShort());
if (obj.Data3.NextIndex >= 49)
{
obj.Data3.NextIndex = 0;
}
else
{
obj.Data3.NextIndex++;
}
}
}
public override bool Select(Device dev)
{
return dev.Code is "18" or "118" or "38" or "58" or "138" or "158";
}
}
///
/// 主线分流
///
public class MainlineDiversion
{
///
/// 任务号
///
public int TaskId { get; set; }
///
/// 仓库号
///
public string WarehouseCode { get; set; }
}
}