林豪 左 hace 3 años
padre
commit
9e513bb1de

+ 2 - 3
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -616,7 +616,6 @@ namespace WCS.Service.Extensions
                         throw new DoException("二次处理堆垛机完成任务");
                     }
 
-
                     if (task.TYPE == TaskType.入库)
                     {
                         task.ENDTIME = DateTime.Now;
@@ -659,8 +658,8 @@ namespace WCS.Service.Extensions
                     var ELine = i == 0 ? Data.ELine_1.ToString() : Data.ELine_2.ToString();
                     task = db.Default.Set<WCS_TASK>().Single(v => taskIds[i] == v.ID);
 
-                        if (i == 0) Data.FinishedACK_1 = 1;
-                        else Data.FinishedACK_2 = 1;
+                    if (i == 0) Data.FinishedACK_1 = 1;
+                    else Data.FinishedACK_2 = 1;
 
                     task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机执行}]变更为[{task.STATUS}]", this.GetType());
                 }

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

@@ -253,129 +253,129 @@ namespace WCS.Service.Works.SRM
                     floor = floor % 2 + 1;
                     obj.Entity.Set("LastFloor", floor);
                     if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
-                    obj.EXOutStock(obj =>
-                    {
-                        //obj.CheckOutTask();
-                        //获取当前堆垛机所有的放货点
-                        var list = obj.GetDeliveryPoint();
+                    //obj.EXOutStock(obj =>
+                    //{
+                    //obj.CheckOutTask();
+                    //获取当前堆垛机所有的放货点
+                    var list = obj.GetDeliveryPoint();
 
-                        list = list.Where(v =>
+                    list = list.Where(v =>
+                    {
+                        //true:满足条件  false:不满足条件
+                        //返回结果为无货的设备  默认无货
+                        var res = true;
+                        //放货点是否有货
+                        if (v.Data.VoucherNo != v.Data2.VoucherNo) res = false;
+                        else if (v.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
+                        else if (v.Data2.Status.HasFlag(IstationStatus.光电状态)) res = false;
+                        else if (v.Data2.Request == IstationRequest.堆垛机放货完成请求目标地址) res = false;
+                        else if (v.Data2.Tasknum > 10000) res = false;
+                        return res;
+                    }).ToList();
+
+                    //没有可用货位
+                    if (list.Count == 0) return;
+
+                    //可用设备的编号组
+                    var empties = list.Select(v => v.Entity.CODE).ToArray();
+                    //月台所有设备当前有的任务号
+                    var taskidList = DockDevs.Select(v => v.Data2.Tasknum).Where(v => v > 10000).ToList();
+                    //堆垛机设备
+                    var srm = obj.Entity.CODE;
+                    DB.Do(db =>
+                    {
+                        //堆垛机当前是否有正在执行的任务
+                        if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行))
+                            throw new WarnException($"[{deviceCode}]有正在执行的出库任务");
+                        //找出等待执行的出库任务
+                        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();
+                        //同一个目标地址同时只能有两组正在执行的任务
+                        //同时对结果进行排序,分组后取第一组任务
+                        var outDepot = waitTask.Where(v =>
+                                            {
+                                                var max = v.ADDRTO == "G1340" ? 4 : 3;
+                                                return db.Default.Set<WCS_TASK>()
+                                                   .AsNoTracking()
+                                                   .Where(d => d.TYPE == TaskType.出库)
+                                                   .Where(d => d.STATUS > TaskStatus.新建)
+                                                   .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
+                                                   .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
+                                                   .GroupBy(d => d.TaskGroupKey).Count() < max;
+                                            })
+                                .OrderByDescending(v => v.Priority)
+                                .ThenBy(v => v.FLOOR == floor ? 0 : 1)
+                                .ThenBy(v =>
+                                {
+                                    return db.Default.Set<WCS_TASK>()
+                                                     .AsNoTracking()
+                                                     .Where(d => d.TYPE == TaskType.出库)
+                                                     .Where(d => d.STATUS > TaskStatus.新建)
+                                                     .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
+                                                     .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
+                                                     .GroupBy(d => d.TaskGroupKey).Count();
+                                })
+                                .ThenBy(v => v.CREATETIME)
+                                .GroupBy(v => v.ADDRTO)
+                                .FirstOrDefault();
+
+                        if (outDepot == null)
                         {
-                            //true:满足条件  false:不满足条件
-                            //返回结果为无货的设备  默认无货
-                            var res = true;
-                            //放货点是否有货
-                            if (v.Data.VoucherNo != v.Data2.VoucherNo) res = false;
-                            else if (v.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
-                            else if (v.Data2.Status.HasFlag(IstationStatus.光电状态)) res = false;
-                            else if (v.Data2.Request == IstationRequest.堆垛机放货完成请求目标地址) res = false;
-                            else if (v.Data2.Tasknum > 10000) res = false;
-                            return res;
-                        }).ToList();
-
-                        //没有可用货位
-                        if (list.Count == 0) return;
-
-                        //可用设备的编号组
-                        var empties = list.Select(v => v.Entity.CODE).ToArray();
-                        //月台所有设备当前有的任务号
-                        var taskidList = DockDevs.Select(v => v.Data2.Tasknum).Where(v => v > 10000).ToList();
-                        //堆垛机设备
-                        var srm = obj.Entity.CODE;
-                        DB.Do(db =>
+                            Ltc.Log($"{deviceCode}无出库任务可执行");
+                            return;
+                        }
+                        //获取两个个可执行任务,此时这两个任务的目标地址是一致的
+                        var tasks = outDepot.Select(v => v).ToList().GetOutTask();
+
+                        //根据任务的目标地址获取对应的设备组
+                        var devs = Device.Find($"{tasks.OrderBy(v => v.ADDRTO).FirstOrDefault().ADDRTO}").Create<StationDeviceGroup>().Items.OrderByDescending(v => v.Entity.CODE).ToArray();
+                        var dev1 = devs[0];
+                        var dev2 = devs[1];
+
+                        for (int i = 0; i < tasks.Length; i++)
                         {
-                            //堆垛机当前是否有正在执行的任务
-                            if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行))
-                                throw new WarnException($"[{deviceCode}]有正在执行的出库任务");
-                            //找出等待执行的出库任务
-                            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();
-                            //同一个目标地址同时只能有两组正在执行的任务
-                            //同时对结果进行排序,分组后取第一组任务
-                            var outDepot = waitTask.Where(v =>
-                                                    {
-                                                        var max = v.ADDRTO == "G1340" ? 4 : 3;
-                                                        return db.Default.Set<WCS_TASK>()
-                                                           .AsNoTracking()
-                                                           .Where(d => d.TYPE == TaskType.出库)
-                                                           .Where(d => d.STATUS > TaskStatus.新建)
-                                                           .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
-                                                           .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
-                                                           .GroupBy(d => d.TaskGroupKey).Count() < max;
-                                                    })
-                                        .OrderByDescending(v => v.Priority)
-                                        .ThenBy(v => v.FLOOR == floor ? 0 : 1)
-                                        .ThenBy(v =>
-                                        {
-                                            return db.Default.Set<WCS_TASK>()
-                                                             .AsNoTracking()
-                                                             .Where(d => d.TYPE == TaskType.出库)
-                                                             .Where(d => d.STATUS > TaskStatus.新建)
-                                                             .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
-                                                             .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
-                                                             .GroupBy(d => d.TaskGroupKey).Count();
-                                        })
-                                        .ThenBy(v => v.CREATETIME)
-                                        .GroupBy(v => v.ADDRTO)
-                                        .FirstOrDefault();
-
-                            if (outDepot == null)
+                            var item = tasks[i];
+                            var task = db.Default.Set<WCS_TASK>().Find(item.ID);
+                            var oldTaskSTATUS = task.STATUS;
+                            task.STARTTIME = DateTime.Now;
+                            task.UPDATETIME = DateTime.Now;
+                            task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
+                            task.DEVICE = obj.Entity.CODE;
+                            switch (tasks.Length)
                             {
-                                Ltc.Log($"{deviceCode}无出库任务可执行");
-                                return;
-                            }
-                            //获取两个个可执行任务,此时这两个任务的目标地址是一致的
-                            var tasks = outDepot.Select(v => v).ToList().GetOutTask();
+                                case 1:
+                                    task.TaskGroupKey = $"{tasks[0].ID}_0";
+                                    break;
 
-                            //根据任务的目标地址获取对应的设备组
-                            var devs = Device.Find($"{tasks.OrderBy(v => v.ADDRTO).FirstOrDefault().ADDRTO}").Create<StationDeviceGroup>().Items.OrderByDescending(v => v.Entity.CODE).ToArray();
-                            var dev1 = devs[0];
-                            var dev2 = devs[1];
-
-                            for (int i = 0; i < tasks.Length; i++)
+                                case 2:
+                                    task.TaskGroupKey = $"{tasks[0].ID}_{tasks[1].ID}";
+                                    break;
+                            }
+                            var fork = obj.GetFork(item, i);
+                            //获取站台及下一个地址
+                            task.GetSrmStationAndaddNext(fork);
+                            db.Default.SaveChanges();
+                            Uploader.Upload(db);
+                            var msg = "";
+                            if (fork == SrmFork.货叉1)
+                                msg = $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{obj.Data.SLine_1}-{obj.Data.SCol_1}-{obj.Data.SLayer_1}][{obj.Data.ELine_1}][{obj.Data.VoucherNo_1}]";
+                            else
+                                msg = $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{obj.Data.SLine_2}-{obj.Data.SCol_2}-{obj.Data.SLayer_2}][{obj.Data.ELine_2}][{obj.Data.VoucherNo_2}]";
+                            task.CreateStatusLog(db, msg, this.GetType());
+                            item.SRMSTATION = task.SRMSTATION;
+                            if (fork == SrmFork.货叉1) // 列数较小的放一工位
                             {
-                                var item = tasks[i];
-                                var task = db.Default.Set<WCS_TASK>().Find(item.ID);
-                                var oldTaskSTATUS = task.STATUS;
-                                task.STARTTIME = DateTime.Now;
-                                task.UPDATETIME = DateTime.Now;
-                                task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
-                                task.DEVICE = obj.Entity.CODE;
-                                switch (tasks.Length)
-                                {
-                                    case 1:
-                                        task.TaskGroupKey = $"{tasks[0].ID}_0";
-                                        break;
-
-                                    case 2:
-                                        task.TaskGroupKey = $"{tasks[0].ID}_{tasks[1].ID}";
-                                        break;
-                                }
-                                var fork = obj.GetFork(item, i);
-                                //获取站台及下一个地址
-                                task.GetSrmStationAndaddNext(fork);
-                                db.Default.SaveChanges();
-                                Uploader.Upload(db);
-                                var msg = "";
-                                if (fork == SrmFork.货叉1)
-                                    msg = $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{obj.Data.SLine_1}-{obj.Data.SCol_1}-{obj.Data.SLayer_1}][{obj.Data.ELine_1}][{obj.Data.VoucherNo_1}]";
-                                else
-                                    msg = $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{obj.Data.SLine_2}-{obj.Data.SCol_2}-{obj.Data.SLayer_2}][{obj.Data.ELine_2}][{obj.Data.VoucherNo_2}]";
-                                task.CreateStatusLog(db, msg, this.GetType());
-                                item.SRMSTATION = task.SRMSTATION;
-                                if (fork == SrmFork.货叉1) // 列数较小的放一工位
-                                {
-                                    obj.WriteTask1(item);
-                                }
-                                else if (fork == SrmFork.货叉2) //列数较大的放二工位
-                                {
-                                    obj.WriteTask2(item);
-                                }
+                                obj.WriteTask1(item);
                             }
-                        });
+                            else if (fork == SrmFork.货叉2) //列数较大的放二工位
+                            {
+                                obj.WriteTask2(item);
+                            }
+                        }
                     });
+                    //});
 
                     #endregion 出库
                 }