فهرست منبع

环形库货位分配适配直接码垛

林豪 左 3 ماه پیش
والد
کامیت
5d6630fd3a

+ 11 - 3
ServiceCenter/Extensions/TypeExtension.cs

@@ -57,6 +57,16 @@ namespace ServiceCenter.Extensions
             return Convert.ToInt32(value);
         }
 
+        /// <summary>
+        /// 将字符串转换为long
+        /// </summary>
+        /// <param name="value">需要转换的字符串</param>
+        /// <returns></returns>
+        public static long ToLong(this string value)
+        {
+            return Convert.ToInt64(value);
+        }
+
         /// <summary>
         ///  获取最后一位数字
         /// </summary>
@@ -174,7 +184,6 @@ namespace ServiceCenter.Extensions
             return d;
         }
 
-
         public static object Copy(this object obj, object type)
         {
             foreach (var p in type.GetType().GetProperties())
@@ -204,7 +213,6 @@ namespace ServiceCenter.Extensions
             return res;
         }
 
-
         //public static object Copy(this object source, Type t)
         //{
         //    var obj = Activator.CreateInstance(t);
@@ -723,4 +731,4 @@ namespace ServiceCenter.Extensions
         /// </summary>
         only = 11,
     }
-}
+}

+ 12 - 12
YWGC/FJK/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs

@@ -396,18 +396,18 @@ namespace WCS.WorkEngineering.Systems
                             // 获取下一个地址
                             nextAdd = maDuoXinXi.MaDuoGongWei switch
                             {
-                                "1661" => 433,
-                                "1666" => 442,
-                                "1676" => 633,
-                                "1681" => 642,
-                                "1691" => 833,
-                                "1696" => 842,
-                                "1706" => 1033,
-                                "1711" => 1042,
-                                "1721" => 1233,
-                                "1726" => 1242,
-                                "1736" => 1433,
-                                "1741" => 1442,
+                                "1661" => 435,
+                                "1666" => 444,
+                                "1676" => 635,
+                                "1681" => 644,
+                                "1691" => 835,
+                                "1696" => 844,
+                                "1706" => 1035,
+                                "1711" => 1044,
+                                "1721" => 1235,
+                                "1726" => 1244,
+                                "1736" => 1435,
+                                "1741" => 1444,
                                 _ => 9999
                             };
 

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

@@ -1,4 +1,5 @@
 using ServiceCenter.Extensions;
+using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
 using System.ComponentModel;
 using WCS.Core;
@@ -75,25 +76,84 @@ namespace WCS.WorkEngineering.Systems.环形库
                     return;
                 }
 
-                var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
-                if (res.ResCode != ResponseStatusCodeEnum.Sucess)
+                var robot = GetRobotDevice(obj.Entity);
+                if (robot == null)
                 {
-                    World.Log(res.ResMsg, ServiceCenter.Logs.LogLevelEnum.Mid);
+                    World.Log($"未检索到对应的机械臂设备号", LogLevelEnum.High);
                     return;
                 }
-                task.AddrTo = res.ResData.CellNo;
-                task.Line = res.ResData.Row;
-                task.Col = res.ResData.Colomn;
-                task.Layer = res.ResData.Layer;
-                task.Depth = res.ResData.Row;
-                task.LastInteractionPoint = obj.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, obj.Entity.Code, task.AddrTo, $"任务分配货位{task.AddrTo}");
-                var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
-                sideNum = invNow.SideNum;
-                taskInfo = task;
+                if (robot.GetIsDirectPalletizing(db.Default))
+                {
+                    //获取对应的码垛信息
+                    var ringPalletizingInfo = db.Default.Queryable<BillRingPalletizingInfo>().Single(x => x.Id == task.TaskGroupKey.ToLong());
+
+                    // 获取对应码垛工位所有的码垛信息
+                    var ringPalletizingInfos = db.Default.Queryable<BillRingPalletizingInfo>().Where(x => x.MaDuoGongWei == ringPalletizingInfo.MaDuoGongWei && x.Out == false).ToList();
+                    if (ringPalletizingInfos.Count > 1) //有多条需判断是否能进行放行
+                    {
+                        //获取所有此码垛工位所有已经分配的任务
+                        var ringPalletizingMaDuoGongWeilList = ringPalletizingInfos.Select(x => x.Id.ToString()).ToList();
+                        var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(x => ringPalletizingMaDuoGongWeilList.Contains(x.TaskGroupKey) && x.Status < TaskStatus.Finish && x.ProdLine == 1).ToList();
+                        //暂时不考虑同一个码垛工位,会有出现第一条信息还没被放行,第二条码垛信息就被创建的情况
+                        if (tasks.GroupBy(x => x.TaskGroupKey).Count() != 1)
+                        {
+                            World.Log($"同时有两组未结束的码垛信息被放行,请检查码垛工位{ringPalletizingInfo.MaDuoGongWei}的实际情况,是否存在上组任务未结束或任务乱等情况", LogLevelEnum.High);
+                            return;
+                        }
+
+                        if (tasks.First().TaskGroupKey == ringPalletizingInfo.Id.ToString())
+                        {
+                            task.LastInteractionPoint = obj.Entity.Code;
+                            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();
+                            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;
+                            taskInfo = task;
+                        }
+                        else
+                        {
+                            World.Log($"同时有两组未结束的码垛信息被放行,请检查码垛工位{ringPalletizingInfo.MaDuoGongWei}的实际情况,是否存在上组任务未结束或任务乱等情况", LogLevelEnum.High);
+                            return;
+                        }
+                    }
+                    else
+                    {
+                        task.LastInteractionPoint = obj.Entity.Code;
+                        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();
+                        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;
+                        taskInfo = task;
+                    }
+                }
+                else
+                {
+                    var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
+                    if (res.ResCode != ResponseStatusCodeEnum.Sucess)
+                    {
+                        World.Log(res.ResMsg, ServiceCenter.Logs.LogLevelEnum.High);
+                        return;
+                    }
+                    task.AddrTo = res.ResData.CellNo;
+                    task.Line = res.ResData.Row;
+                    task.Col = res.ResData.Colomn;
+                    task.Layer = res.ResData.Layer;
+                    task.Depth = res.ResData.Row;
+                    task.LastInteractionPoint = obj.Entity.Code;
+                    task.Device = obj.Entity.Code;
+                    task.EditWho = "WCS";
+                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, 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;
+                    taskInfo = task;
+                }
             });
             if (taskInfo == null) return;
             var next = (taskInfo.AddrNext.ToShort() - 2).ToShort();
@@ -122,5 +182,27 @@ namespace WCS.WorkEngineering.Systems.环形库
             };
             return codes.Any(x => x == dev.Code);
         }
+
+        public Device? GetRobotDevice(Device dev)
+        {
+            var robotCode = dev.Code switch
+            {
+                "433" => "Robot1",
+                "633" => "Robot2",
+                "833" => "Robot3",
+                "1033" => "Robot4",
+                "1233" => "Robot5",
+                "1433" => "Robot6",
+                "442" => "Robot1",
+                "642" => "Robot2",
+                "842" => "Robot3",
+                "1042" => "Robot4",
+                "1242" => "Robot5",
+                "1442" => "Robot6",
+                _ => "99999"
+            };
+
+            return Device.All.FirstOrDefault(v => v.Code == robotCode);
+        }
     }
 }