林豪 左 3 سال پیش
والد
کامیت
72f93556c7
1فایلهای تغییر یافته به همراه112 افزوده شده و 112 حذف شده
  1. 112 112
      Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

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

@@ -260,128 +260,128 @@ namespace WCS.Service.Works.SRM
 
                     //obj.EXOutStock(obj =>
                     //{
-                        obj.CheckOutTask();
-                        var floor = obj.Entity.Get<int>("LastOutFloor");
-                        floor = floor % 2 + 1;
-                        obj.Entity.Set("LastOutFloor", floor);
-                        if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
+                    obj.CheckOutTask();
+                    var floor = obj.Entity.Get<int>("LastOutFloor");
+                    floor = floor % 2 + 1;
+                    obj.Entity.Set("LastOutFloor", floor);
+                    if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
 
-                        //获取当前堆垛机所有的放货点
-                        var list = obj.GetDeliveryPoint();
+                    //获取当前堆垛机所有的放货点
+                    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 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 maxnum = ProtocolProxy.YGWMS150Redis.Get("SaleTaskGroupCount").ToInt();
+                        var outDepotList = waitTask.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 taskidList = DockDevs.Select(v => v.Data2.Tasknum).Where(v => v > 10000).ToList();
-                        //堆垛机设备
-                        var srm = obj.Entity.CODE;
-                        DB.Do(db =>
+                            var max = v.ADDRTO == "G1340" ? 4 : maxnum;
+                            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).ToArray();
+
+                        //获取两个个可执行任务,此时这两个任务的目标地址是一致的
+                        var tasks = outDepotList.GetSrmValidTaskList(db, obj).GetOutTask();
+
+                        #region 校验两个产品是否为同规格
+
+                        if (tasks.Length == 2)
                         {
-                            //堆垛机当前是否有正在执行的任务
-                            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 maxnum = ProtocolProxy.YGWMS150Redis.Get("SaleTaskGroupCount").ToInt();
-                            var outDepotList = waitTask.Where(v =>
-                            {
-                                var max = v.ADDRTO == "G1340" ? 4 : maxnum;
-                                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).ToArray();
-
-                            //获取两个个可执行任务,此时这两个任务的目标地址是一致的
-                            var tasks = outDepotList.GetSrmValidTaskList(db, obj).GetOutTask();
-
-                            #region 校验两个产品是否为同规格
-
-                            if (tasks.Length == 2)
+                            var length = tasks.OrderByDescending(v => v.Length).ToArray();
+                            //较大的长度减去较小的长度,差大于两百表示为不同规格产品
+                            if (length[0].Length - length[1].Length > 200)
                             {
-                                var length = tasks.OrderByDescending(v => v.Length).ToArray();
-                                //较大的长度减去较小的长度,差大于两百表示为不同规格产品
-                                if (length[0].Length - length[1].Length > 200)
-                                {
-                                    tasks = tasks.Take(1).ToArray();
-                                }
+                                tasks = tasks.Take(1).ToArray();
                             }
+                        }
 
-                            #endregion 校验两个产品是否为同规格
+                        #endregion 校验两个产品是否为同规格
 
-                            for (int i = 0; i < tasks.Length; i++)
+                        for (int i = 0; i < tasks.Length; i++)
+                        {
+                            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;
+                            task.TaskGroupKey = tasks.Length switch
                             {
-                                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;
-                                task.TaskGroupKey = tasks.Length switch
-                                {
-                                    1 => $"{tasks[0].ID}_0",
-                                    2 => $"{tasks[0].ID}_{tasks[1].ID}",
-                                    _ => throw new WarnException($"可用任务数异常{tasks.Length}"),
-                                };
-                                var fork = obj.GetFork(item, i);
-                                //获取站台及下一个地址
-                                task.GetSrmStationAndaddNext(fork);
-                                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, (short)tasks.Length);
-                                }
-                                else if (fork == SrmFork.货叉2) //列数较大的放二工位
-                                {
-                                    obj.WriteTask2(item, (short)tasks.Length);
-                                }
-                                db.Default.SaveChanges();
+                                1 => $"{tasks[0].ID}_0",
+                                2 => $"{tasks[0].ID}_{tasks[1].ID}",
+                                _ => throw new WarnException($"可用任务数异常{tasks.Length}"),
+                            };
+                            var fork = obj.GetFork(item, i);
+                            //获取站台及下一个地址
+                            task.GetSrmStationAndaddNext(fork);
+                            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, (short)tasks.Length);
+                            }
+                            else if (fork == SrmFork.货叉2) //列数较大的放二工位
+                            {
+                                obj.WriteTask2(item, (short)tasks.Length);
                             }
-                        });
+                            db.Default.SaveChanges();
+                        }
+                    });
                     //});
 
                     #endregion 出库