Browse Source

人工满托入库&完成任务卡控

xu.lu 10 months ago
parent
commit
e08bea5a14

+ 34 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -4,6 +4,7 @@ using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
 using System.ComponentModel;
+using System.Security.Cryptography.Xml;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
@@ -145,7 +146,23 @@ namespace WCS.WorkEngineering.Systems
                                         agv.Status = AGVTaskStatus.Confirm;
                                         agv.AgvStatus = AGVTaskStatus.Confirm;
                                         db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                        AgvApi.托盘回库(agv.Position, agv.ID.ToString(), agv.Station);
+                                        if (agv.Station == "2533")
+                                        {
+                                            AgvApi.满托入库(agv.Position, agv.ID.ToString(), agv.Station);
+                                            var tasknew = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.ID == agv.TaskId).First();
+                                            if (tasknew != null)
+                                            {
+                                                tasknew.Status = TaskStatus.AGVExecution;
+                                                tasknew.EditTime = DateTime.Now;
+                                                db.Default.UpdateableRowLock(tasknew).UpdateColumns(x => new { x.Status, x.EditTime }).ExecuteCommand();
+                                                tasknew.AddWCS_TASK_DTL(db.Default, "agv", "任务下发agv执行");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            AgvApi.托盘回库(agv.Position, agv.ID.ToString(), agv.Station);
+                                        }
+                                        
                                         break;
                                     //巷道分配
                                     case AGVTaskStatus.RequestOrPermission1 when agv.Status != AGVTaskStatus.Complete1:
@@ -278,7 +295,7 @@ namespace WCS.WorkEngineering.Systems
 
                                             break;
                                         }
-                                    //货站点安全交互
+                                    //货站点安全交互
                                     case AGVTaskStatus.RequestOrPermission2 when agv.Status != AGVTaskStatus.RequestOrPermission2:
                                         {
                                             if (agv.Station.IsNullOrEmpty()) throw new Exception($"无有效放货地址");
@@ -288,6 +305,8 @@ namespace WCS.WorkEngineering.Systems
                                             {
                                                 throw new Exception($"{agv.Station}站台有光电小车无法放货,请检查并处理");
                                             }
+                                            var devinfo = new Device<IStation520, IStation521>(Device.All.First(x => x.Code == agv.Station), World);
+                                            devinfo.Data.CmdType = StationCmd.Res1;
                                             //调继续执行任务接口
                                             AgvApi.ContinueTask(agv.AgvID, dev.Code);
                                             break;
@@ -313,7 +332,19 @@ namespace WCS.WorkEngineering.Systems
                                                     task.EndTime = DateTime.Now;
                                                     db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
                                                     task.AddWCS_TASK_DTL(db.Default, "agv", "任务完成");
-                                                }     
+                                                }
+                                            }
+                                            else if (taskold.BusType == "人工满托入库")
+                                            {
+                                                var task = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.ID == agv.TaskId).First();
+                                                if (task != null)
+                                                {
+                                                    task.Status = TaskStatus.ConveyorExecution;
+                                                    devinfo.Data.TaskNumber = task.ID;
+                                                    task.EndTime = DateTime.Now;
+                                                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
+                                                    task.AddWCS_TASK_DTL(db.Default, "agv", "任务放货完成");
+                                                }
                                             }
                                         }
                                         break;

+ 15 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -34,7 +34,7 @@ namespace WCS.WorkEngineering.Systems
             {
                 //获取所有的新建任务,组盘任务不需要
                 taskInfos = db.Default.Queryable<WCS_TaskInfo>().ReadPastUpdLock().Where(x => x.Status == 0).ToList()
-                    .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot")).Where(x => x.BusType != "人工满托入库").Select(x => x.ID).ToList();
+                    .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot")).Select(x => x.ID).ToList();
                 var time = DateTime.Now.AddMinutes(-20);
                 var time1 = DateTime.Now.AddMinutes(-40);
                 var timeOut = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);
@@ -113,12 +113,24 @@ namespace WCS.WorkEngineering.Systems
                                         Status = AGVTaskStatus.NewBuild,
                                         TaskId = task.ID,
                                         Position = task.WorkBench,
-                                        Station = task.AddrFrom,
-                                        AddWho = "WCS",
+                                        Station = task.WarehouseCode switch
+                                        {
+                                            "1N" => "2533",
+                                            "1S" => "2733",                                            
+                                            _ => "2533"
+                                        },
+                                         AddWho = "WCS",
                                         AddTime = DateTime.Now
                                     };
                                     db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
                                     task.AgvTaskID = agv.ID;
+                                    task.Device = task.WarehouseCode switch
+                                    {
+                                        "1N" => "TY1",
+                                        "1S" => "TY2",
+                                        _ => "TY1"
+                                    };
+                                    task.Height = 1;
                                     task.Status = Entity.TaskStatus.WaitingToExecute;
                                     db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID }).ExecuteCommand();
                                     task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化人工满托入库任务");

+ 26 - 0
业务工程/分拣库/WCS.WorkEngineering/WebApi/Controllers/AgvApi.cs

@@ -142,6 +142,32 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                 }
             }, "1", taskCode, "ZTGT31", "1");
         }
+        /// <summary>
+        /// 满托入库
+        /// </summary>
+        /// <param name="position">取货站台</param>
+        /// <param name="taskCode">WMS任务号</param>
+        /// <param name="station">放货站台</param>
+        /// <returns></returns>
+        public static GenAgvSchedulingTaskResponse 满托入库(string startPosition, string taskCode, string station)
+        {
+            var position = "";
+            var position1 = "";
+            position = startPosition;
+            position1 = station;
+
+            return GenAgvSchedulingTask("iwms_third", "", "4", new List<positionCodeClass>()
+            {
+                new positionCodeClass(){ //取货机台
+                    positionCode=position,
+                    type="00"
+                },               
+                new positionCodeClass(){ //预分配放货点
+                    positionCode=position1,
+                    type="00"
+                }
+            }, "1", taskCode, "ZTGT69", "1");
+        }
 
         /// <summary>
         ///  Agv任务单生成接口

+ 12 - 1
业务工程/分拣库/WCS.WorkEngineering/WebApi/Controllers/WcsController.cs

@@ -106,7 +106,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                         break;
 
                                     case TaskType.OutDepot:
-                                        if (task.Status > Entity.TaskStatus.WaitingToExecute || (task.BusType != "车间叫料" || task.BusType != "芯股站台送空托"))
+                                        if (task.Status > Entity.TaskStatus.WaitingToExecute || (task.BusType != "车间叫料" && task.BusType != "芯股站台送空托"))
                                         {
                                             response.ResDataList.Add(new HandleTaskResponse()
                                             {
@@ -186,6 +186,17 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                 });
                                 continue;
                             }
+
+                            if (db.Default.Queryable<WCS_TaskDtl>().SplitTable(v => v.Take(2)).Any(v => v.ParentTaskCode == task.ID && v.Desc.Contains("允许AGV任务")))
+                            {
+                                response.ResDataList.Add(new HandleTaskResponse()
+                                {
+                                    IsSuccess = false,
+                                    TaskNo = item,
+                                    Message = $"该任务尚未取货,不能完成",
+                                });
+                                continue;
+                            }
                             switch (task.Type)
                             {
                                 case TaskType.OutDepot:

+ 3 - 2
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -487,7 +487,7 @@ namespace WCS.WorkEngineering
 
                 #region 巷道--一楼堆垛机放货口
 
-                new RouteInfo("TY1", new string[] { "2532","2534","2533" }), //人工取货口
+                new RouteInfo("TY1", new string[] { "2532","2534",/*"2533"*/ }), //人工取货口
                 new RouteInfo("TY2", new string[] { "2732","2734","2733" }),
 
                 #endregion 巷道--一楼堆垛机放货口
@@ -545,7 +545,8 @@ namespace WCS.WorkEngineering
 
                 #region 一楼人工入库口-巷道
 
-                new RouteInfo("2532", new string[] { "TY1" }), //分拣库一
+                new RouteInfo("2532", new string[] { "TY1" }),
+                new RouteInfo("2533", new string[] { "TY1" }),//分拣库一
                 new RouteInfo("2732", new string[] { "TY2" }),
 
                 #endregion 一楼人工入库口-巷道