林豪 左 пре 3 месеци
родитељ
комит
dc3825b4b9

+ 6 - 8
YWGC/FJK/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -116,9 +116,9 @@ namespace WCS.WorkEngineering.Systems
                     db.UpdateableRowLock(palletizing).UpdateColumns(x => new { x.EditTime }).ExecuteCommand();
                     var taskId = upDateableRow.SelectMany(x => x.Locs).Select(x => x.TaskId).ToList();
                     var taskList = db.Queryable<WCS_TaskInfo>().RowLock().Where(x => taskId.Contains(x.ID)).Select(x => x.BarCode).ToList();
-                    WmsApi.BingPallet(palletizing.PalleCode, taskList, palletizing.WarehouseCode, palletizing.PalletizingStation);
+                    WmsApi.BingPallet(palletizing.PalleCode, taskList, palletizing.WarehouseCode, palletizing.PalletizingStation, obj.Entity.Code);
                     isFinish = true;
-                    World.Log($"清除桁架码垛缓存信息:缓存行信息[{JsonConvert.SerializeObject(deleteCacheLine.Select(x=>x.Id))}]--对应任务[{JsonConvert.SerializeObject(deleteLoc.Select(x=>x.TaskId))}]");
+                    World.Log($"清除桁架码垛缓存信息:缓存行信息[{JsonConvert.SerializeObject(deleteCacheLine.Select(x => x.Id))}]--对应任务[{JsonConvert.SerializeObject(deleteLoc.Select(x => x.TaskId))}]");
                 });
                 if (!isFinish)
                 {
@@ -212,7 +212,7 @@ namespace WCS.WorkEngineering.Systems
             // 获取当前侧的执行次数
             var quantity = obj.Entity.GetFlag<int>(warehouseCode);
             //南北库的默认周期检查比为3:3
-            var maxQuantity = 3; 
+            var maxQuantity = 3;
 
             List<WCS_PalletizingRow> palletizingRowList = null;
             WCS_Palletizing palletizing = null;
@@ -255,12 +255,11 @@ namespace WCS.WorkEngineering.Systems
                 }
                 catch (Exception e)
                 {
-                    World.Log(e.Message+e.StackTrace,LogLevelEnum.High);
+                    World.Log(e.Message + e.StackTrace, LogLevelEnum.High);
                     return;
                 }
 
-
-                #endregion
+                #endregion 获取当前优先执行侧
 
                 //找到当前桁架所属所有还有层没结束的码垛记录信息,有对应托盘
                 var palletizingLsit = db.Queryable<WCS_Palletizing>().Includes(x => x.Layers, r => r.Rows, l => l.Locs)
@@ -313,7 +312,7 @@ namespace WCS.WorkEngineering.Systems
                     {
                         return cacheLines.Any(a =>
                         {
-                            var outTime = a.Locations.MinBy(l=>l.TimeOut).TimeOut;
+                            var outTime = a.Locations.MinBy(l => l.TimeOut).TimeOut;
                             return a.MatCodeList == w.MatCodeList && (a.Quantity == w.QtyMaxCount || (a.AddTime < DateTime.Now.AddHours(-outTime) && a.Quantity <= w.QtyMaxCount)) && a.WarehouseCode == w.WarehouseCode;
                         });
                     })).OrderBy(x => x.AddTime).ToList();
@@ -421,7 +420,6 @@ namespace WCS.WorkEngineering.Systems
                         }
                     }
 
-
                     // 分拣一强制全部单抓,线体存在干涉
                     //if (obj.Entity.Code == "Truss1") rowList = rowList!.Take(1).ToList();
 

+ 8 - 10
YWGC/FJK/WCS.WorkEngineering/Systems/桁架码垛/桁架码垛工位任务结束处理.cs

@@ -23,8 +23,6 @@ namespace WCS.WorkEngineering.Systems
     {
         protected override bool ParallelDo => true;
 
-        
-
         public override void Do(Device<IStation520, IStation521, IStation523, ITruss530, ITruss531> obj)
         {
             if (!obj.Data5.CmdType.HasFlag(TrussCmdType.End) && !obj.Data4.CmdType.HasFlag(TrussCmdType.End1 | TrussCmdType.Two) && obj.Data4.CmdType != 0) obj.Data4.CmdType = 0;
@@ -48,7 +46,7 @@ namespace WCS.WorkEngineering.Systems
                 {
                     if (TaskNoList.Count == 0)
                     {
-                        var taskAny = db.Queryable<WCS_TaskInfo>().NoLock().Single(x =>  x.Type == TaskType.EnterDepot && x.Status == TaskStatus.ConveyorExecution && x.BusType == "码垛入库" && x.AddrFrom == obj.Entity.Code);
+                        var taskAny = db.Queryable<WCS_TaskInfo>().NoLock().Single(x => x.Type == TaskType.EnterDepot && x.Status == TaskStatus.ConveyorExecution && x.BusType == "码垛入库" && x.AddrFrom == obj.Entity.Code);
                         //针对断电写入信号失败的情况
                         if (taskAny != null && obj.Data.TaskNumber != taskAny.ID)
                         {
@@ -59,24 +57,24 @@ namespace WCS.WorkEngineering.Systems
                         }
                         return;
                     }
-                    
+
                     if (taskList.Count != TaskNoList.Count)
                     {
                         var taskIn = db.Queryable<WCS_TaskInfo>().NoLock().Single(x => x.BarCode == palletizing.PalleCode && x.Type == TaskType.EnterDepot && x.Status < TaskStatus.Finish);
                         if (taskIn == null)
                         {
-                            WmsApi.ForceFinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
+                            WmsApi.ForceFinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code, obj.Entity.Parent.Code);
                             return;
-                        }                       
+                        }
                     }
                     //throw new KnownException($"任务数量不一致!,请检查托盘任务信息", LogLevelEnum.Mid);
                 }
                 var taskInfo = db.Queryable<WCS_TaskInfo>().Single(x => x.BarCode == palletizing.PalleCode && x.Type == TaskType.EnterDepot && x.Status < TaskStatus.Finish);
                 if (taskInfo == null)
                 {
-                    if (obj.Data5.CmdType.HasFlag(TrussCmdType.Two)) WmsApi.SecondaryBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
-                    else if (obj.Data5.CmdType.HasFlag(TrussCmdType.End1)) WmsApi.ForceFinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
-                    else WmsApi.FinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code);
+                    if (obj.Data5.CmdType.HasFlag(TrussCmdType.Two)) WmsApi.SecondaryBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code, obj.Entity.Parent.Code);
+                    else if (obj.Data5.CmdType.HasFlag(TrussCmdType.End1)) WmsApi.ForceFinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code, obj.Entity.Parent.Code);
+                    else WmsApi.FinishBingPallet(palletizing.PalleCode, taskCodes, taskList.FirstOrDefault().WarehouseCode, obj.Entity.Code, obj.Entity.Parent.Code);
                     return;
                 }
 
@@ -119,4 +117,4 @@ namespace WCS.WorkEngineering.Systems
             return dev.HasFlag(DeviceFlags.桁架码垛位) || devCodes.Contains(dev.Code);
         }
     }
-}
+}

+ 156 - 13
YWGC/FJK/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -160,6 +160,146 @@ namespace WCS.WorkEngineering.Systems
             });
             if (isDP) //直接码垛
             {
+                //获取当前机械臂所有的取货站台
+                var pickUpDevices = obj.Entity.Sources.Where(x => x.HasFlag(DeviceFlags.输送机)).Where(x => x.DeviceGroup.Any()).Select(
+                    x =>
+                    {
+                        var group = x.DeviceGroup.Select(s => new Device<IStation523, IStation524>(s, World)).ToList();
+                        return new Tuple<Device<IStation523, IStation524>, List<Device<IStation523, IStation524>>>(new Device<IStation523, IStation524>(x, World), group);
+                    }).ToList();
+
+                if (!pickUpDevices.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无取货路径点", LogLevelEnum.High);
+
+                //获取取货设备的设备组中都是停止运行的
+                var arrIn = pickUpDevices.Where(x => x.Item2.All(a => !a.Data.Status.HasFlag(StationStatus.Run)))
+                                                      .Where(x =>
+                                                      {
+                                                          var inStock = x.Item2.Any(a => a.Data2.TaskNumber > 0 && a.Data.Status.HasFlag(StationStatus.PH_Status));
+                                                          var minDevice = x.Item2.OrderBy(o => o.Entity.Code.ToShort()).First();
+                                                          return minDevice.Data2.TaskNumber > 0 && minDevice.Data.Status.HasFlag(StationStatus.PH_Status) && minDevice.Data2.CmdType.HasFlag(StationCmd.Res7) && inStock;
+                                                      }).ToList();
+                //.OrderBy(x => x.Item1.Data2.TaskNumber)
+
+                if (!arrIn.Any())
+                {
+                    World.Log($"[{obj.Entity.Code}]等待入库任务输送到位");
+                    obj.Entity.SetFlag("InQuantity", inMaxQuantity + 100); //在无货物的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
+                    return;
+                }
+
+                //先按可取货位数量排序,再按任务号排序
+                var devGroup = arrIn.OrderByDescending(x => x.Item2.Count(i => i.Data2.TaskNumber > 0 && i.Data.Status.HasFlag(StationStatus.PH_Status)))
+                    .ThenByDescending(x =>
+                    {
+                        int number;
+                        List<Device<IStation523, IStation524>> devices = new List<Device<IStation523, IStation524>>();
+                        var deviceCodes = GetDeviceCodeList(x.Item1.Entity.Code);
+                        devices = Device.All.Where(x => deviceCodes.Contains(x.Code)).Select(x => new Device<IStation523, IStation524>(x, World)).ToList();
+                        number = devices.Count(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status) && !x.Data.Status.HasFlag(StationStatus.Run));
+                        return number;
+                    }).First().Item2
+                    .Where(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status));
+
+                var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
+                SqlSugarHelper.Do(db =>
+                {
+                    foreach (var dev in devGroup)
+                    {
+                        var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.SetPlate && v.Status == Entity.TaskStatus.FinishOfShunt && dev.Data2.TaskNumber == v.ID);
+                        if (task == null) continue;
+
+                        task.Status = Entity.TaskStatus.StackerExecution;
+                        task.LastInteractionPoint = dev.Entity.Code;
+                        task.SrmStation = dev.Entity.Code;
+                        task.Device = obj.Entity.Code;
+                        task.EditWho = "WCS";
+                        db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.SrmStation, x.Device, x.EditWho }).ExecuteCommand();
+                        task.AddWCS_TASK_DTL(db.Default, dev.Entity.Code, task.AddrTo, "任务下发机械臂执行");
+                        taskList.Add(new(task, dev));
+                    }
+                });
+
+                if (!taskList.Any()) return;
+
+                switch (taskList.Count)
+                {
+                    case 1:
+                        var task = taskList.FirstOrDefault().Item1;
+                        var dev = taskList.FirstOrDefault().Item2;
+                        //下发任务
+                        obj.Data.TaskNumber1 = task.ID;
+                        obj.Data.SLine1 = dev.Entity.Code.ToShort();
+                        obj.Data.SCol1 = 0;
+                        obj.Data.SLayer1 = 0;
+                        obj.Data.SDepth1 = 0;
+                        obj.Data.ELine1 = task.Line.ToShort();
+                        obj.Data.ECol1 = task.Col.ToShort();
+                        obj.Data.ELayer1 = task.Layer.ToShort();
+                        obj.Data.EDepth1 = task.Depth.ToShort();
+                        obj.Data.TaskNumber2 = 0;
+                        obj.Data.SLine2 = 0;
+                        obj.Data.SCol2 = 0;
+                        obj.Data.SLayer2 = 0;
+                        obj.Data.SDepth2 = 0;
+                        obj.Data.ELine2 = 0;
+                        obj.Data.ECol2 = 0;
+                        obj.Data.ELayer2 = 0;
+                        obj.Data.EDepth2 = 0;
+                        obj.Data.TaskSum = taskList.Count.ToShort();
+                        obj.Data.GoodsType = task.GoodsType switch
+                        {
+                            18 => 1,
+                            34 => 2,
+                            50 => 3,
+                            _ => 0
+                        };
+                        obj.Data.TaskType = 3;
+                        obj.Data.VoucherNo++;
+                        break;
+
+                    case 2:
+                        taskList = taskList.OrderBy(x => x.Item1.Depth).ToList();
+                        //一工位取深度较大的任务
+                        var taskInfo = taskList[1];
+                        task = taskInfo.Item1;
+                        dev = taskInfo.Item2;
+                        obj.Data.TaskNumber1 = task.ID;
+                        obj.Data.SLine1 = dev.Entity.Code.ToShort();
+                        obj.Data.SCol1 = 0;
+                        obj.Data.SLayer1 = 0;
+                        obj.Data.SDepth1 = 0;
+                        obj.Data.ELine1 = task.Line.ToShort();
+                        obj.Data.ECol1 = task.Col.ToShort();
+                        obj.Data.ELayer1 = task.Layer.ToShort();
+                        obj.Data.EDepth1 = task.Depth.ToShort();
+                        //二工位取深度较少的值
+                        taskInfo = taskList[0];
+                        task = taskInfo.Item1;
+                        dev = taskInfo.Item2;
+                        obj.Data.TaskNumber2 = task.ID;
+                        obj.Data.SLine2 = dev.Entity.Code.ToShort();
+                        obj.Data.SCol2 = 0;
+                        obj.Data.SLayer2 = 0;
+                        obj.Data.SDepth2 = 0;
+                        obj.Data.ELine2 = task.Line.ToShort();
+                        obj.Data.ECol2 = task.Col.ToShort();
+                        obj.Data.ELayer2 = task.Layer.ToShort();
+                        obj.Data.EDepth2 = task.Depth.ToShort();
+                        obj.Data.TaskSum = taskList.Count.ToShort();
+                        obj.Data.GoodsType = task.GoodsType switch
+                        {
+                            18 => 1,
+                            34 => 2,
+                            50 => 3,
+                            _ => 0
+                        };
+                        obj.Data.TaskType = 3;
+                        obj.Data.VoucherNo++;
+                        break;
+
+                    default:
+                        throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
+                }
             }
             else
             {
@@ -262,10 +402,10 @@ namespace WCS.WorkEngineering.Systems
                             obj.Data.SCol1 = 0;
                             obj.Data.SLayer1 = 0;
                             obj.Data.SDepth1 = 0;
-                            obj.Data.ELine1 = task.Line.ToShort();
-                            obj.Data.ECol1 = task.Col.ToShort();
-                            obj.Data.ELayer1 = task.Layer.ToShort();
-                            obj.Data.EDepth1 = task.Depth.ToShort();
+                            obj.Data.ELine1 = task.AddrTo.ToShort();
+                            obj.Data.ECol1 = task.WmsTask.ToShort();
+                            obj.Data.ELayer1 = 0;
+                            obj.Data.EDepth1 = 0;
                             obj.Data.TaskNumber2 = 0;
                             obj.Data.SLine2 = 0;
                             obj.Data.SCol2 = 0;
@@ -288,7 +428,10 @@ namespace WCS.WorkEngineering.Systems
                             break;
 
                         case 2:
-                            taskList = taskList.OrderBy(x => x.Item1.Depth).ToList();
+
+                            taskList = taskList.OrderByDescending(x => x.Item2.Entity.Code.ToInt()).ToList();
+                            var maxWmsTask = taskList.Max(x => x.Item1.WmsTask).ToShort();
+                            var minWmsTask = taskList.Min(x => x.Item1.WmsTask).ToShort();
                             //一工位取深度较大的任务
                             var taskInfo = taskList[1];
                             task = taskInfo.Item1;
@@ -298,10 +441,10 @@ namespace WCS.WorkEngineering.Systems
                             obj.Data.SCol1 = 0;
                             obj.Data.SLayer1 = 0;
                             obj.Data.SDepth1 = 0;
-                            obj.Data.ELine1 = task.Line.ToShort();
-                            obj.Data.ECol1 = task.Col.ToShort();
-                            obj.Data.ELayer1 = task.Layer.ToShort();
-                            obj.Data.EDepth1 = task.Depth.ToShort();
+                            obj.Data.ELine1 = task.AddrTo.ToShort();
+                            obj.Data.ECol1 = task.WarehouseCode.Contains("N") ? minWmsTask : maxWmsTask;
+                            obj.Data.ELayer1 = 0;
+                            obj.Data.EDepth1 = 0;
                             //二工位取深度较少的值
                             taskInfo = taskList[0];
                             task = taskInfo.Item1;
@@ -311,10 +454,10 @@ namespace WCS.WorkEngineering.Systems
                             obj.Data.SCol2 = 0;
                             obj.Data.SLayer2 = 0;
                             obj.Data.SDepth2 = 0;
-                            obj.Data.ELine2 = task.Line.ToShort();
-                            obj.Data.ECol2 = task.Col.ToShort();
-                            obj.Data.ELayer2 = task.Layer.ToShort();
-                            obj.Data.EDepth2 = task.Depth.ToShort();
+                            obj.Data.ELine2 = task.AddrTo.ToShort();
+                            obj.Data.ECol2 = task.WarehouseCode.Contains("N") ? maxWmsTask : minWmsTask;
+                            obj.Data.ELayer2 = 0;
+                            obj.Data.EDepth2 = 0;
                             obj.Data.TaskSum = taskList.Count.ToShort();
                             obj.Data.GoodsType = task.GoodsType switch
                             {

+ 4 - 2
YWGC/FJK/WCS.WorkEngineering/Systems/环形库/环形库分配货位.cs

@@ -104,10 +104,11 @@ namespace WCS.WorkEngineering.Systems.环形库
                         if (tasks.First().TaskGroupKey == ringPalletizingInfo.Id.ToString())
                         {
                             task.LastInteractionPoint = obj.Entity.Code;
+                            task.AddrTo = ringPalletizingInfo.MaDuoGongWei;
                             task.Device = obj.Entity.Code;
                             task.ProdLine = 1; //标识放行
                             task.EditWho = "WCS";
-                            db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.LastInteractionPoint, x.ProdLine, x.Device, x.EditWho }).ExecuteCommand();
+                            db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.AddrTo, x.LastInteractionPoint, x.ProdLine, x.Device, x.EditWho }).ExecuteCommand();
                             task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"直接码垛放行{task.AddrTo}");
                             var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
                             sideNum = invNow.SideNum;
@@ -122,10 +123,11 @@ namespace WCS.WorkEngineering.Systems.环形库
                     else
                     {
                         task.LastInteractionPoint = obj.Entity.Code;
+                        task.AddrTo = ringPalletizingInfo.MaDuoGongWei;
                         task.Device = obj.Entity.Code;
                         task.ProdLine = 1; //标识放行
                         task.EditWho = "WCS";
-                        db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.LastInteractionPoint, x.ProdLine, x.Device, x.EditWho }).ExecuteCommand();
+                        db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.AddrTo, x.LastInteractionPoint, x.ProdLine, x.Device, x.EditWho }).ExecuteCommand();
                         task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"直接码垛放行{task.AddrTo}");
                         var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
                         sideNum = invNow.SideNum;

+ 5 - 7
YWGC/FJK/WCS.WorkEngineering/Systems/环形库码垛结束.cs

@@ -25,8 +25,6 @@ namespace WCS.WorkEngineering.Systems
     {
         protected override bool ParallelDo => true;
 
-
-
         public override void Do(Device<IStation520, IStation521, IStation523, IRobot530, IRobot531> obj)
         {
             if (!obj.Data5.CmdType.HasFlag(RobotCmdType.End) && obj.Data4.CmdType != 0) obj.Data4.CmdType = 0;
@@ -44,13 +42,13 @@ namespace WCS.WorkEngineering.Systems
                 {
                     World.Log($"任务数量{tasks.Count()}-最大码垛数量{obj.Data5.MaxQuantity}");
                     return;
-                } 
+                }
                 var deliveryTask = db.Queryable<WCS_TaskInfo>().RowLock().Single(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status >= TaskStatus.RgvExecution && x.Status < TaskStatus.Finish) ?? throw new KnownException($"未找到当前站台对应的托盘搬运任务", LogLevelEnum.High);
                 var taskInfo = db.Queryable<WCS_TaskInfo>().RowLock().Single(x => x.Status == TaskStatus.WaitingToExecute && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
                 if (deliveryTask.Status != TaskStatus.RgvCompleted) throw new KnownException($"搬运任务状态异常:{deliveryTask.ID}", LogLevelEnum.High);
                 if (taskInfo == null)
                 {
-                   var task=db.Queryable<WCS_TaskInfo>().NoLock().Single(x => x.Status <= TaskStatus.RgvExecution && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
+                    var task = db.Queryable<WCS_TaskInfo>().NoLock().Single(x => x.Status <= TaskStatus.RgvExecution && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
                     if (task != null)
                     {
                         World.Log($"环线库码垛工位[{obj.Entity.Code}]存在状态为[{task.Status.GetDescription()}]的任务,任务号是[{task.ID}].请找到此任务确认并进行处理");
@@ -61,14 +59,14 @@ namespace WCS.WorkEngineering.Systems
                     try
                     {
                         //开始绑盘
-                        WmsApi.FinishBingPallet(cbrCode.BarCode, tasks.Select(x => x.BarCode).ToList(), obj.Entity.Code.GetWareCode(), obj.Entity.Code);
+                        WmsApi.FinishBingPallet(cbrCode.BarCode, tasks.Select(x => x.BarCode).ToList(), obj.Entity.Code.GetWareCode(), obj.Entity.Code, obj.Entity.Parent.Code);
                     }
                     catch (Exception e)
                     {
                         World.Log($"{e.Message}");
                         try
                         {
-                            WmsApi.BingPallet(cbrCode.BarCode, tasks.Select(x => x.BarCode).ToList(), obj.Entity.Code.GetWareCode(), obj.Entity.Code);
+                            WmsApi.BingPallet(cbrCode.BarCode, tasks.Select(x => x.BarCode).ToList(), obj.Entity.Code.GetWareCode(), obj.Entity.Code, obj.Entity.Parent.Code);
                         }
                         catch (Exception exception)
                         {
@@ -110,4 +108,4 @@ namespace WCS.WorkEngineering.Systems
             return dev.HasFlag(DeviceFlags.环形库码垛工位);
         }
     }
-}
+}

+ 14 - 6
YWGC/FJK/WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs

@@ -399,9 +399,10 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="taskCodes"></param>
         /// <param name="warehouseCode"></param>
         /// <param name="loc"></param>
+        /// <param name="robotCode"></param>
         /// <returns></returns>
         /// <exception cref="KnownException"></exception>
-        public static SRes FinishBingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc) => BingPallet(palletCode, taskCodes, warehouseCode, loc, false, "", true, false);
+        public static SRes FinishBingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, string robotCode) => BingPallet(palletCode, taskCodes, warehouseCode, loc, false, "", true, false, robotCode);
 
         /// <summary>
         ///  需要二次绑盘的结盘
@@ -410,9 +411,10 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="taskCodes"></param>
         /// <param name="warehouseCode"></param>
         /// <param name="loc"></param>
+        /// <param name="robotCode"></param>
         /// <returns></returns>
         /// <exception cref="KnownException"></exception>
-        public static SRes SecondaryBingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc) => BingPallet(palletCode, taskCodes, warehouseCode, loc, false, "二次绑盘", true, true);
+        public static SRes SecondaryBingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, string robotCode) => BingPallet(palletCode, taskCodes, warehouseCode, loc, false, "二次绑盘", true, true, robotCode);
 
         /// <summary>
         ///  异常结盘
@@ -421,9 +423,10 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="taskCodes"></param>
         /// <param name="warehouseCode"></param>
         /// <param name="loc"></param>
+        /// <param name="robotCode"></param>
         /// <returns></returns>
         /// <exception cref="KnownException"></exception>
-        public static SRes ForceFinishBingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc) => BingPallet(palletCode, taskCodes, warehouseCode, loc, true, "强制码垛结束", true, false);
+        public static SRes ForceFinishBingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, string robotCode) => BingPallet(palletCode, taskCodes, warehouseCode, loc, true, "强制码垛结束", true, false, robotCode);
 
         /// <summary>
         ///  绑盘
@@ -432,9 +435,10 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="taskCodes"></param>
         /// <param name="warehouseCode"></param>
         /// <param name="loc"></param>
+        /// <param name="robotCode"></param>
         /// <returns></returns>
         /// <exception cref="KnownException"></exception>
-        public static SRes BingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc) => BingPallet(palletCode, taskCodes, warehouseCode, loc, false, "", false, false);
+        public static SRes BingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, string robotCode) => BingPallet(palletCode, taskCodes, warehouseCode, loc, false, "", false, false, robotCode);
 
         /// <summary>
         ///  绑盘
@@ -445,9 +449,12 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="loc"></param>
         /// <param name="isFail"></param>
         /// <param name="failReason"></param>
+        /// <param name="isFinish"></param>
+        /// <param name="isItHalf"></param>
+        /// <param name="robotCode"></param>
         /// <returns></returns>
         /// <exception cref="KnownException"></exception>
-        public static SRes BingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, bool isFail, string failReason, bool isFinish, bool isItHalf)
+        public static SRes BingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, bool isFail, string failReason, bool isFinish, bool isItHalf, string robotCode)
         {
             var res = APICaller.CallApi2<SRes>(WmsUrl + "/api/FJ/BingPallet", new FJBingPalletRequest
             {
@@ -458,7 +465,8 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                 IsFail = isFail,
                 FailReason = failReason,
                 IsFinish = isFinish,
-                IsItHalf = isItHalf
+                IsItHalf = isItHalf,
+                RobotCode = robotCode
             });
             if (res.ResCode != ResponseStatusCodeEnum.Sucess)
             {

+ 5 - 0
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBingPalletRequest.cs

@@ -48,5 +48,10 @@ namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
         ///  是否为半跺入库
         /// </summary>
         public bool IsItHalf { get; set; }
+
+        /// <summary>
+        ///  机械臂设备号,用于判断是否启用直接入库
+        /// </summary>
+        public string RobotCode { get; set; }
     }
 }