林豪 左 há 3 anos atrás
pai
commit
fbfc3b8d8a

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

@@ -4,7 +4,6 @@ using System.Collections.Generic;
 using System.Linq;
 using WCS.Core;
 using WCS.Entity;
-using WCS.Entity.Protocol.SRM;
 using WCS.Service.Helpers;
 
 namespace WCS.Service.Extensions
@@ -111,7 +110,7 @@ namespace WCS.Service.Extensions
             return taskList;
         }
 
-        public static List<WCS_TASK> GetSrmValidTaskList(this IGrouping<string, WCS_TASK>[] taksList,SRMDevice srm, int index = 0)
+        public static List<WCS_TASK> GetSrmValidTaskList(this IGrouping<string, WCS_TASK>[] taksList, SRMDevice srm, int index = 0)
         {
             return taksList[index].ToList();
             //if (!taksList.Any() || index > (taksList.Length - 1)) throw new DoException("无可执行出库任务");
@@ -164,11 +163,11 @@ namespace WCS.Service.Extensions
             AgvTask = task.AgvTask;
             CREATETIME = task.CREATETIME;
             MaterialCode = task.MaterialCode;
-
+            SRMSTATION = task.SRMSTATION;
             ID = task.ID;
             Line = addrFrom[0].ToShort();
             Col = addrFrom[1].ToShort();
             Layer = addrFrom[2].ToShort();
         }
     }
-}
+}

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

@@ -255,8 +255,6 @@ namespace WCS.Service.Works.SRM
                     srmDevice.Entity.Set("LastOutFloor", floor);
                     if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
 
-                    if (obj.Data.TaskID_1 != 0 || obj.Data.TaskID_2 != 0) return;
-
                     //获取当前堆垛机所有的放货点
                     var list = srmDevice.GetDeliveryPoint();
 
@@ -312,7 +310,7 @@ namespace WCS.Service.Works.SRM
 
                     //堆垛机设备
                     var srm = srmDevice.Entity.CODE;
-
+                    var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
                     DB.Do(db =>
                     {
                         //堆垛机当前是否有正在执行的任务
@@ -367,8 +365,6 @@ namespace WCS.Service.Works.SRM
 
                         #endregion 校验两个产品是否为同规格
 
-                        var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
-
                         for (var i = 0; i < tasks.Length; i++)
                         {
                             var item = tasks[i];
@@ -390,6 +386,7 @@ namespace WCS.Service.Works.SRM
                             var msg = "";
                             msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_1}-{srmDevice.Data.SCol_1}-{srmDevice.Data.SLayer_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.VoucherNo_1}]" : $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_2}-{srmDevice.Data.SCol_2}-{srmDevice.Data.SLayer_2}][{srmDevice.Data.ELine_2}][{srmDevice.Data.VoucherNo_2}]";
                             task.CreateStatusLog(db, msg, this.GetType());
+                            item.SRMSTATION = task.SRMSTATION;
                             finishTaskList.Add(new FinishTaskList<SrmFork, Task>(fork, item));
                         }
 
@@ -415,6 +412,30 @@ namespace WCS.Service.Works.SRM
                         }
                     });
 
+                    ////检查标记好的出库任务,并将出库任务下达至堆垛机
+                    DB.Do(db =>
+                    {
+                        //此处只做标记,表示当前事务已经提交
+                        foreach (var finish in finishTaskList)
+                        {
+                            var task = db.Default.Set<WCS_TASK>().Find(finish.Station.ID).Create<Task>();
+                            switch (finish.FinishCode)
+                            {
+                                // 列数较小的放一工位
+                                case SrmFork.货叉1:
+                                    obj.WriteTask1(task, (short)finishTaskList.Count);
+                                    break;
+                                //列数较大的放二工位
+                                case SrmFork.货叉2:
+                                    obj.WriteTask2(task, (short)finishTaskList.Count);
+                                    break;
+
+                                default:
+                                    throw new ArgumentOutOfRangeException();
+                            }
+                        }
+                    });
+
                     #endregion 出库
                 }
             });