123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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
- {
- /// <summary>
- /// 满轮主线预写入目标地址
- /// </summary>
- [BelongTo(typeof(SortingMainLineWorld))]
- [Description("满轮主线预写入目标地址")]
- public class 满轮主线预写入目标地址 : DeviceSystem<Device<IStation523, IBCR83, IStation525>>
- {
- protected override bool ParallelDo => true;
- protected override bool SaveLogsToFile => true;
- public override void Do(Device<IStation523, IBCR83, IStation525> 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<MainlineDiversion>(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<WCS_TaskInfo>().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";
- }
- }
- /// <summary>
- /// 主线分流
- /// </summary>
- public class MainlineDiversion
- {
- /// <summary>
- /// 任务号
- /// </summary>
- public int TaskId { get; set; }
- /// <summary>
- /// 仓库号
- /// </summary>
- public string WarehouseCode { get; set; }
- }
- }
|