Преглед на файлове

fix 修复堆垛机执行有货站台任务的BUG

林豪 左 преди 3 години
родител
ревизия
b2621be272

+ 6 - 1
Projects/永冠OPP/WCS.Service/DeviceExtentions.cs

@@ -119,6 +119,11 @@ namespace WCS.Service
             return source.PROTOCOLS.Any(v => v.DB.PROTOCOL == typeof(IStation521).AssemblyQualifiedName);
         }
 
+        public static bool IsDevGroup(this WCS_DEVICE source)
+        {
+            return source.CODE.Contains("G");
+        }
+
         /// <summary>
         /// 是否堆垛机
         /// </summary>
@@ -160,4 +165,4 @@ namespace WCS.Service
             return res.CODE;
         }
     }
-}
+}

+ 5 - 5
Projects/永冠OPP/WCS.Service/Extensions/TaskExtension.cs

@@ -61,20 +61,20 @@ namespace WCS.Service.Extensions
             //取任务巷道到达目标地址的下一个地址,即任务堆垛机的站台对应的设备组
             var stations = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.ADDRTO.Replace("G", ""))))
                                  .Select(v => v.Create<StationDeviceGroup>())
-                                 .FirstOrDefault().Items
+                                 .FirstOrDefault()?.Items
                                  .OrderByDescending(v => v.Entity.CODE)
                                  .ToArray();
             //一工位放较大的站台号
             switch (srmFork)
             {
                 case SrmFork.货叉1:
-                    task.SRMSTATION = stations[0].Entity.CODE;
-                    task.ADDRNEXT = stations[0].Entity.GetPath(task.ADDRTO).CODE;
+                    task.SRMSTATION = stations?[0].Entity.CODE;
+                    task.ADDRNEXT = stations?[0].Entity.GetPath(task.ADDRTO).CODE;
                     break;
 
                 case SrmFork.货叉2:
-                    task.SRMSTATION = stations[1].Entity.CODE;
-                    task.ADDRNEXT = stations[1].Entity.GetPath(task.ADDRTO).CODE;
+                    task.SRMSTATION = stations?[1].Entity.CODE;
+                    task.ADDRNEXT = stations?[1].Entity.GetPath(task.ADDRTO).CODE;
                     break;
             }
         }

+ 12 - 13
Projects/永冠OPP/WCS.Service/WebApi/WCSApi.cs

@@ -1,14 +1,12 @@
 using DBHelper;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol;
 using WCS.Service.Entity;
-using WCS.Service.WebApi.ViewModels;
+using WCS.Service.Extensions;
 
 namespace WCS.Service.WebApi
 {
@@ -52,19 +50,19 @@ namespace WCS.Service.WebApi
                         }
                         else if (obj.TaskType == "2")
                         {  //出库任务
-                            var wmstaskid = int.Parse(obj.WMSTaskNo);
-                            if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
-                                throw new Exception("任务号" + wmstaskid + "重复下发");
+                            var wmsTaskId = int.Parse(obj.WMSTaskNo);
+                            if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmsTaskId))
+                                throw new Exception("任务号" + wmsTaskId + "重复下发");
 
                             var tunnel = "TY" + obj.SRMNo.Last();
 
                             var task = new WCS_TASK
                             {
                                 TYPE = TaskType.出库,
-                                STATUS = WCS.Entity.TaskStatus.新建,
+                                STATUS = TaskStatus.新建,
                                 DEVICE = "SRM" + obj.SRMNo.Last(),
                                 BARCODE = obj.PalletCode,
-                                ADDRFROM = string.Format("{0}-{1}-{2}", obj.StartRow, obj.StartCol, obj.StartLayer),
+                                ADDRFROM = $"{obj.StartRow}-{obj.StartCol}-{obj.StartLayer}",
                                 ADDRTO = obj.EndLocation,
                                 UPDATETIME = DateTime.Now,
                                 UPDATEUSER = "WMS",
@@ -73,9 +71,13 @@ namespace WCS.Service.WebApi
                                 ADDRNEXT = obj.EndLocation,
                                 Length = obj.Length,
                                 MaterialCode = obj.MaterialCode,
-                                FLOOR = 1,
+                                FLOOR = obj.EndLocation == "G1340" ? 1 : 2
                             };
 
+                            task.GetSrmStationAndaddNext(SrmFork.货叉1);
+                            task.SRMSTATION = Device.Where(v => v.IsDevGroup()).FirstOrDefault(v => v.DEVICEGROUP.Any(b => b.MEMBER.CODE == task.SRMSTATION))?.CODE;
+                            task.ADDRNEXT = string.Empty;
+
                             db.Default.Add(task);
                         }
                         else if (obj.TaskType == "1")
@@ -284,7 +286,6 @@ namespace WCS.Service.WebApi
         //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum == model.TASKNUM));
         //    }
 
-
         //    if (model.PH_STATUS != null)
         //    {
         //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
@@ -427,8 +428,6 @@ namespace WCS.Service.WebApi
         //    return result;
         //}
 
-       
-
         #endregion 静态方法
     }
-}
+}

+ 9 - 5
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -258,9 +258,8 @@ namespace WCS.Service.Works.SRM
                     if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
 
                     //获取当前堆垛机所有的放货点
-                    var list = srmDevice.GetDeliveryPoint();
 
-                    list = list.Where(v =>
+                    var list = srmDevice.GetDeliveryPoint().Where(v =>
                     {
                         //true:满足条件  false:不满足条件
                         //返回结果为无货的设备  默认无货
@@ -303,10 +302,13 @@ namespace WCS.Service.Works.SRM
                         }
 
                         return res;
-                    }).ToList();
+                    }).Select(v => v.Entity.CODE).ToList();
 
                     //没有可用货位
-                    if (list.Count == 0) return;
+                    if (!list.Any()) return;
+
+                    //找到对应的设备组编号
+                    var groupList = Device.Where(v => v.IsDevGroup()).Where(v => v.DEVICEGROUP.Any(b => list.Contains(b.MEMBER.CODE))).Select(v => v.CODE).ToList();
 
                     //堆垛机设备
                     var srm = srmDevice.Entity.CODE;
@@ -320,7 +322,9 @@ namespace WCS.Service.Works.SRM
                         var waitTask = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建)
                                                       .Where(v => v.DEVICE == srm)
                                                       .Where(v => v.TYPE == TaskType.出库)
-                                                      .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行)).ToList();
+                                                      .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行))
+                                                      .Where(v => groupList.Contains(v.SRMSTATION)) //站台必须可用
+                                                      .ToList();
 
                         //同时对结果进行排序,分组
                         var maximum = ProtocolProxy.YGWMS150Redis.Get("SaleTaskGroupCount").ToInt();