林豪 左 1 ano atrás
pai
commit
d8b35455fa

+ 6 - 0
WCS.Entity/WCS_Palletizing.cs

@@ -100,6 +100,12 @@ namespace WCS.Entity
         [SugarColumn(IsNullable = false, ColumnDescription = "是否结束")]
         public bool Finish { get; set; }
 
+        /// <summary>
+        ///  是否二次绑盘
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否二次绑盘")]
+        public bool isItHalf { get; set; }
+
         /// <summary>
         ///  当前所有的物料号
         /// </summary>

+ 18 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/桁架分流点.cs

@@ -7,6 +7,7 @@ using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
+using WCS.Entity.Protocol.Truss;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
@@ -125,9 +126,24 @@ namespace WCS.WorkEngineering.Systems
             if (devCode == 0)
             {
                 World.Log($"无可用线体:{taskInfo.ID}");
+                var endTime = DateTime.Now.AddMinutes(-10);
                 //找一个当前时间最早且已超过25分钟未码垛的码垛信息半托入库
-
-
+                //未结束且包含当前物料编号的垛形,按时间排序,创建时间早的优先分配,当前任务的仓库号必须要等于码垛信息绑定的仓库号
+                var palletizing = db.Queryable<WCS_Palletizing>()
+                    .Includes(x => x.Layers, r => r.Rows, l => l.Locs)
+                    .Where(x => !x.Finish && x.WarehouseCode == taskInfo.WarehouseCode && x.Layers.Any(l => l.Rows.Any(r => r.Finish)))
+                    .Where(x => x.AddTime < endTime).ToList()
+                    .MinBy(x => x.AddTime);
+                cacheLineList = db.Queryable<WCS_CacheLine>().Where(x => x.WarehouseCode == taskInfo.WarehouseCode && x.IsTruss).ToList();
+
+                if (palletizing != null && cacheLineList.Any())
+                {
+                    var dev = Device.All.Where(x => x.Code == palletizing.PalletizingStation).Select(x => new Device<ITruss530>(x, World)).FirstOrDefault();
+                    if (dev != null)
+                    {
+                        dev.Data.CmdType = TrussCmdType.Two;
+                    }
+                }
                 return false;
             }
             var result = false;

+ 2 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -149,8 +149,8 @@ namespace WCS.WorkEngineering.Systems
                     .Where(x => x.Layers.Any(l => !l.Finish) && x.PalletizingStation != null).ToList();
                 //筛选出目标位置有光电的码垛记录信息
                 var devCode = palletizingLsit.Select(x => x.PalletizingStation);
-                var devList = Device.All.Where(x => devCode.Contains(x.Code)).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).ToList();
-                devList = devList.Where(x => x.Data3.Status.HasFlag(StationStatus.PH_Status)).ToList();
+                var devList = Device.All.Where(x => devCode.Contains(x.Code)).Select(x => new Device<IStation520, IStation521, IStation523, ITruss530>(x, World)).ToList();
+                devList = devList.Where(x => x.Data3.Status.HasFlag(StationStatus.PH_Status) && !x.Data4.CmdType.HasFlag(TrussCmdType.Two)).ToList();
                 devCode = devList.Select(x => x.Entity.Code);
                 if (!devCode.Any()) throw new KnownException($"无可用放货码垛位,请检查实际有货位置的光电是否正常", LogLevelEnum.Mid);
                 palletizingLsit = palletizingLsit.Where(x => devCode.Contains(x.PalletizingStation)).ToList(); //可以放货的目标托盘

+ 0 - 95
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架码垛半托入库.cs

@@ -1,95 +0,0 @@
-using ServiceCenter.Extensions;
-using ServiceCenter.Logs;
-using ServiceCenter.SqlSugars;
-using System.ComponentModel;
-using WCS.Core;
-using WCS.Entity;
-using WCS.Entity.Protocol.Station;
-using WCS.Entity.Protocol.Truss;
-using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.WebApi.Controllers;
-using WCS.WorkEngineering.Worlds;
-using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
-using TaskStatus = WCS.Entity.TaskStatus;
-
-namespace WCS.WorkEngineering.Systems.桁架码垛
-{
-    /// <summary>
-    ///  码垛工位处理
-    /// </summary>
-    [BelongTo(typeof(SortingPalletizingWorld))]
-    [Description("码垛工位任务结束处理09")]
-    public class 桁架码垛工位任务结束处理 : DeviceSystem<Device<IStation520, IStation521, IStation523, ITruss530, ITruss531>>
-    {
-        protected override bool ParallelDo => true;
-
-        protected override bool SaveLogsToFile => true;
-
-        public override void Do(Device<IStation520, IStation521, IStation523, ITruss530, ITruss531> obj)
-        {
-            if (!obj.Data5.CmdType.HasFlag(TrussCmdType.End)) obj.Data4.CmdType = 0;
-            if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status)) return;
-            if (!obj.Data5.CmdType.HasFlag(TrussCmdType.End)) return;
-            if (!obj.Data5.CmdType.HasFlag(TrussCmdType.End1))
-            {
-                if (obj.Data5.MaxQuantity != obj.Data5.Quantity || obj.Data5.Quantity == 0 || obj.Data5.MaxQuantity == 0) return;
-            }
-            WCS_TaskInfo task = null;
-            //找到对应的码垛数据
-            SqlSugarHelper.Do(_db =>
-            {
-                var db = _db.Default;
-                var palletizing = db.Queryable<WCS_Palletizing>().Single(x => x.PalletizingStation == obj.Entity.Code && !x.Finish);
-
-                var TaskNoList = obj.Data5.GetTaskNoList().Where(x => x > 0).ToList();
-                var taskList = db.Queryable<WCS_TaskInfo>().Where(x => TaskNoList.Contains(x.ID)).ToList();
-                var taskCodes = taskList.Select(x => x.BarCode).ToList();
-                if (!obj.Data5.CmdType.HasFlag(TrussCmdType.End1))
-                {
-                    if (taskList.Count != TaskNoList.Count) throw new KnownException($"任务数量不一致!,请检查托盘任务信息", LogLevelEnum.Mid);
-                }
-                var taskInfo = db.Queryable<WCS_TaskInfo>().Single(x => x.BarCode == palletizing.PalleCode && x.Type == TaskType.EnterDepot && x.Status == TaskStatus.WaitingToExecute);
-                if (taskInfo == null)
-                {
-                    if (obj.Data5.CmdType.HasFlag(TrussCmdType.End1))
-                    {
-                        //开始绑盘
-                        WmsApi.BingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
-                    }
-                    else
-                    {
-                        //开始绑盘
-                        WmsApi.BingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
-                    }
-                    return;
-                }
-                if (taskInfo.Status != TaskStatus.WaitingToExecute) return;
-
-                foreach (var item in taskList)
-                {
-                    item.Status = TaskStatus.Finish;
-                    item.EndTime = DateTime.Now;
-                    db.Updateable(item).ExecuteCommand();
-                    item.AddWCS_TASK_DTL(db, obj.Entity.Code, "任务结束");
-                }
-
-                palletizing.Finish = true;
-                db.Updateable(palletizing).ExecuteCommand();
-                taskInfo.Status = TaskStatus.ConveyorExecution;
-                db.Updateable(taskInfo).ExecuteCommand();
-                taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, $"桁架码垛结束处理完成");
-                task = taskInfo;
-            });
-            if (task == null) return;
-            obj.Data.TaskNumber = task.ID;
-            obj.Data.GoodsStart = obj.Entity.Code.ToShort();
-            obj.Data.GoodsEnd = task.AddrNext.ToShort();
-            obj.Data4.CmdType = TrussCmdType.End;
-        }
-
-        public override bool Select(Device dev)
-        {
-            return dev.HasFlag(DeviceFlags.桁架码垛位);
-        }
-    }
-}

+ 2 - 0
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架码垛工位任务结束处理.cs

@@ -52,6 +52,7 @@ namespace WCS.WorkEngineering.Systems
                 if (taskInfo == null)
                 {
                     if (obj.Data5.CmdType.HasFlag(TrussCmdType.End1)) WmsApi.ForceFinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
+                    else if (obj.Data5.CmdType.HasFlag(TrussCmdType.Two)) WmsApi.SecondaryBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
                     else WmsApi.FinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
                     return;
                 }
@@ -66,6 +67,7 @@ namespace WCS.WorkEngineering.Systems
                 });
 
                 palletizing.Finish = true;
+                palletizing.isItHalf = obj.Data5.CmdType.HasFlag(TrussCmdType.Two);
                 db.Updateable(palletizing).ExecuteCommand();
                 taskInfo.Status = TaskStatus.ConveyorExecution;
                 db.Updateable(taskInfo).ExecuteCommand();