林豪 左 6 months ago
parent
commit
405ce82f0d

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

@@ -266,6 +266,7 @@ namespace WCS.WorkEngineering.Systems
                     {
                         var warehouseCode = taskInfo.WarehouseCode.Contains("R") ? taskInfo.WarehouseCode : taskInfo.WarehouseCode + "R";
                         var wareHouse = db.Queryable<BaseWarehouse>().First(x => x.Code == warehouseCode);
+
                         //获取两个对应的环形库码垛工位
                         List<string> maDuoZhanTaiList = new List<string>();
                         switch (robot.Code)
@@ -301,28 +302,37 @@ namespace WCS.WorkEngineering.Systems
                                 break;
                         }
 
-                        #region 判断两个位置是否都有码垛信息,为没有的创建码垛信息
+                        #region 判断是否存在未结束码垛信息
 
                         var maDuoXinXiList = db.Queryable<BillRingPalletizingInfo>().Where(x => maDuoZhanTaiList.Contains(x.MaDuoGongWei) && x.Out == false).ToList();
-                        World.Log("直接码垛");
-                        foreach (var maDuoZhanTai in maDuoZhanTaiList)
+                        if (!maDuoXinXiList.Any(x => x.BomCode == taskInfo.MatCode && x.HaveQty < x.HWCountQty)) //没有未结束的当前规格的码垛信息
                         {
-                            World.Log("直接码垛埋点一");
-                            if (!maDuoXinXiList.Any(x => x.MaDuoGongWei == maDuoZhanTai))
+                            //按照站台进行分组,找到一个没有分配过码垛任务的站台,或者是一个码垛任务数量较少的站台
+                            var maDuoZhanTaiGroup = maDuoXinXiList.GroupBy(x => x.MaDuoGongWei).ToList();
+                            var maDuoZhanTai = "";
+                            if (maDuoZhanTaiGroup.Count == 1)
                             {
-                                World.Log("直接码垛埋点二");
-                                if (CreateStackingInfo(db, taskInfo, wareHouse, maDuoZhanTai)) continue;
+                                //获取没有用到的码垛站台信息
+                                maDuoZhanTai = maDuoZhanTaiList.FirstOrDefault(x => !maDuoZhanTaiGroup.Any(m => x == m.Key));
+                            }
+                            else
+                            {
+                                maDuoZhanTai = maDuoZhanTaiGroup.Select(x => new { x.Key, x.First().AddTime, Count = x.Count() })
+                               .OrderBy(x => x.Count).ThenBy(x => x.AddTime).First().Key;
                             }
+                            CreateStackingInfo(db, taskInfo, wareHouse, maDuoZhanTai);
+                            return;
                         }
 
-                        #endregion 判断两个位置是否都有码垛信息,为没有的创建码垛信息
+                        #endregion 判断是否存在未结束码垛信息
 
                         #region 选取创建事件已分分配任务数量较多、或者创建事件较早的码垛信息,默认一个库就跑一个垛型,多个垛型会混料
 
                         maDuoXinXiList = db.Queryable<BillRingPalletizingInfo>().Where(x => maDuoZhanTaiList.Contains(x.MaDuoGongWei) && x.Out == false).ToList().OrderByDescending(x => x.HaveQty).ThenBy(x => x.AddTime).ToList();
                         if (maDuoXinXiList.Any(x => x.HWCountQty != x.HaveQty))
                         {
-                            var maDuoXinXi = maDuoXinXiList.Where(x => x.HWCountQty != x.HaveQty).First(); //获取一个应该分配目标
+                            World.Log("直接码垛埋点一");
+                            var maDuoXinXi = maDuoXinXiList.Where(x => x.HWCountQty != x.HaveQty).OrderByDescending(x => x.HaveQty).ThenBy(x => x.AddTime).First(); //获取一个应该分配目标
 
                             //分配当前轮子在垛形中的位置
                             if (wareHouse.Code.Contains("N")) //北侧由大到小,出的时候刚好可用反过来;
@@ -366,18 +376,21 @@ namespace WCS.WorkEngineering.Systems
                                 }
 
                                 var cellMatCodeList = taksList.Where(x => x.MatCode == taskInfo.MatCode);
+                                World.Log("直接码垛埋点二");
                                 //取当前SKU在垛形明细中所有的信息
                                 var bomSetInfos = db.Queryable<BillBomsetinfo>().Where(x =>
                                     x.BomSetHdrId == maDuoXinXi.BomSetGrpId && x.IsEmpty == 0 &&
                                     x.MatCode == taskInfo.MatCode).ToList();
+                                World.Log($"直接码垛埋点二.1,{maDuoXinXi.BomSetGrpId},{taskInfo.MatCode}");
                                 //取当前SKU在垛形明细中最小的一个坐标号 ,初始化时默认取第一个
                                 var lastXYNO = Convert.ToInt32(bomSetInfos.Select(x => Convert.ToInt32(x.XYNo)).OrderBy(x => x).First());
-
+                                World.Log("直接码垛埋点三");
                                 if (cellMatCodeList.Any()) //货位中已有当前SKU的产品,取最大数 最大数表示最近入库的
                                 {
                                     lastXYNO = cellMatCodeList.OrderByDescending(x => x.WmsTask).First().WmsTask;
                                     var xyNo = bomSetInfos.Select(x => Convert.ToInt32(x.XYNo)).Where(x => x > lastXYNO)
                                         .OrderBy(x => x).First();
+                                    World.Log("直接码垛埋点四");
                                     maDuoXinXi.LastXYNO = xyNo;
                                 }
                                 else
@@ -593,7 +606,7 @@ namespace WCS.WorkEngineering.Systems
                 MaDuoGongWei = maDuoGongWei
             };
 
-            db.Insertable(ringPalletizingInfo);
+            db.Insertable(ringPalletizingInfo).ExecuteCommand();
             return false;
         }
 

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

@@ -86,7 +86,6 @@ namespace WCS.WorkEngineering.Systems.环形库
                 {
                     //获取对应的码垛信息
                     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) //有多条需判断是否能进行放行
@@ -110,8 +109,9 @@ namespace WCS.WorkEngineering.Systems.环形库
                             task.EditWho = "WCS";
                             db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.AddrTo, 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;
+                            //var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
+                            //默认信息
+                            sideNum = 1;
                             taskInfo = task;
                         }
                         else
@@ -129,8 +129,9 @@ namespace WCS.WorkEngineering.Systems.环形库
                         task.EditWho = "WCS";
                         db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.AddrTo, 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;
+                        //var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
+                        //默认信息
+                        sideNum = 1;
                         taskInfo = task;
                     }
                 }

+ 35 - 72
YWGC/FJK/WCS.WorkEngineering/Systems/码垛区域生成空托盘任务.cs

@@ -1,5 +1,4 @@
-using NetTaste;
-using ServiceCenter.Extensions;
+using ServiceCenter.Extensions;
 using ServiceCenter.SqlSugars;
 using SqlSugar;
 using System.ComponentModel;
@@ -9,7 +8,6 @@ using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
-using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
@@ -197,50 +195,16 @@ namespace WCS.WorkEngineering.Systems
                         var db = _db.Default;
                         var isDP = GetIsDirectPalletizing(obj.Entity.Parent.Code, db);
                         KeyValuePair<short, short> ringPallet = new KeyValuePair<short, short>();
-                        var device = "";
                         if (isDP) //直接码垛
                         {
-                            device = obj.Entity.Code;
                             //此位置是否有未结束的码垛信息
                             var ringPalletizingInfo = db.Queryable<BillRingPalletizingInfo>().Where(x => x.MaDuoGongWei == obj.Entity.Code && x.Out == false).ToList()
                                                                                              .OrderBy(x => x.AddTime).FirstOrDefault();
+                            if (ringPalletizingInfo == null) return;
                             var bomsetgrp = db.Queryable<BillBomsetgrp>().NoLock().Where(x => x.Id == ringPalletizingInfo.BomSetGrpId).First();
                             ringPallet = new KeyValuePair<short, short>(bomsetgrp.ShortCode, ringPalletizingInfo.HWCountQty.ToShort());
-
-                            var task = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status < TaskStatus.Finish);
-                            if (task != null) return;
-                            //开始获取当前地址上个设备的上一个设备中的非零九托盘拆机
-                            var addrFrom = obj.Entity.Sources.SelectMany(x => x.Sources).Single(x => x.HasFlag(DeviceFlags.拆盘机));
-                            var dev = Device.All.Where(x => x.Code == addrFrom.Code).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
-                            if (dev.Data.TaskNumber != 0 /*|| dev.Data.GoodsEnd != 0*/)
-                            {
-                                World.Log($"拆盘机残留任务信息: {dev.Entity.Code}有残留任务信息 {dev.Data.TaskNumber} - {dev.Data.GoodsEnd} ,请确认处理!");
-                                return;
-                            }
-
-                            //开始创建搬运任务
-                            task = new WCS_TaskInfo()
-                            {
-                                AddrFrom = addrFrom.Code,
-                                AddrTo = obj.Entity.Code,
-                                BarCode = "码垛托盘搬运-" + obj.Entity.Code,
-                                Status = Entity.TaskStatus.NewBuild,
-                                PalletType = ringPallet.Key,
-                                FullQty = ringPallet.Value,
-                                Type = TaskType.Delivery,
-                                AddWho = "WCS",
-                                AddTime = DateTime.Now
-                            };
-                            var res = db.InsertableRowLock(task).ExecuteReturnEntity();
-                            var taskOld = res.Mapper<WCS_TaskOld, WCS_TaskInfo>();
-                            taskOld.Id = res.ID;
-                            taskOld.AddTime = DateTime.Now;
-                            db.InsertableRowLock(taskOld).SplitTable().ExecuteCommand();
-                            res.AddWCS_TASK_DTL(db, obj.Entity.Code, task.AddrTo, "初始化码垛托盘搬运任务");
-                            deliveryTask = res;
                         }
-
-                        if(device == "" || ( obj.Entity.Code != device && !string.IsNullOrEmpty(device)))
+                        else
                         {
                             //检查是否有待执行状态放货点是自己的出库任务
                             var ringTask = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.OutDepot && x.Status <= TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code);
@@ -270,39 +234,38 @@ namespace WCS.WorkEngineering.Systems
                                 return;
                             }
                             ringPallet = new KeyValuePair<short, short>(ringTask.PalletType, ringTask.FullQty);
-
-                            var task = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status < TaskStatus.Finish);
-                            if (task != null) return;
-                            //开始获取当前地址上个设备的上一个设备中的非零九托盘拆机
-                            var addrFrom = obj.Entity.Sources.SelectMany(x => x.Sources).Single(x => x.HasFlag(DeviceFlags.拆盘机));
-                            var dev = Device.All.Where(x => x.Code == addrFrom.Code).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
-                            if (dev.Data.TaskNumber != 0 /*|| dev.Data.GoodsEnd != 0*/)
-                            {
-                                World.Log($"拆盘机残留任务信息: {dev.Entity.Code}有残留任务信息 {dev.Data.TaskNumber} - {dev.Data.GoodsEnd} ,请确认处理!");
-                                return;
-                            }
-
-                            //开始创建搬运任务
-                            task = new WCS_TaskInfo()
-                            {
-                                AddrFrom = addrFrom.Code,
-                                AddrTo = obj.Entity.Code,
-                                BarCode = "码垛托盘搬运-" + obj.Entity.Code,
-                                Status = Entity.TaskStatus.NewBuild,
-                                PalletType = ringPallet.Key,
-                                FullQty = ringPallet.Value,
-                                Type = TaskType.Delivery,
-                                AddWho = "WCS",
-                                AddTime = DateTime.Now
-                            };
-                            var res = db.InsertableRowLock(task).ExecuteReturnEntity();
-                            var taskOld = res.Mapper<WCS_TaskOld, WCS_TaskInfo>();
-                            taskOld.Id = res.ID;
-                            taskOld.AddTime = DateTime.Now;
-                            db.InsertableRowLock(taskOld).SplitTable().ExecuteCommand();
-                            res.AddWCS_TASK_DTL(db, obj.Entity.Code, task.AddrTo, "初始化码垛托盘搬运任务");
-                            deliveryTask = res;
                         }
+                        var task = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status < TaskStatus.Finish);
+                        if (task != null) return;
+                        //开始获取当前地址上个设备的上一个设备中的非零九托盘拆机
+                        var addrFrom = obj.Entity.Sources.SelectMany(x => x.Sources).Single(x => x.HasFlag(DeviceFlags.拆盘机));
+                        var dev = Device.All.Where(x => x.Code == addrFrom.Code).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
+                        if (dev.Data.TaskNumber != 0 /*|| dev.Data.GoodsEnd != 0*/)
+                        {
+                            World.Log($"拆盘机残留任务信息: {dev.Entity.Code}有残留任务信息 {dev.Data.TaskNumber} - {dev.Data.GoodsEnd} ,请确认处理!");
+                            return;
+                        }
+
+                        //开始创建搬运任务
+                        task = new WCS_TaskInfo()
+                        {
+                            AddrFrom = addrFrom.Code,
+                            AddrTo = obj.Entity.Code,
+                            BarCode = "码垛托盘搬运-" + obj.Entity.Code,
+                            Status = Entity.TaskStatus.NewBuild,
+                            PalletType = ringPallet.Key,
+                            FullQty = ringPallet.Value,
+                            Type = TaskType.Delivery,
+                            AddWho = "WCS",
+                            AddTime = DateTime.Now
+                        };
+                        var res = db.InsertableRowLock(task).ExecuteReturnEntity();
+                        var taskOld = res.Mapper<WCS_TaskOld, WCS_TaskInfo>();
+                        taskOld.Id = res.ID;
+                        taskOld.AddTime = DateTime.Now;
+                        db.InsertableRowLock(taskOld).SplitTable().ExecuteCommand();
+                        res.AddWCS_TASK_DTL(db, obj.Entity.Code, task.AddrTo, "初始化码垛托盘搬运任务");
+                        deliveryTask = res;
                     });
                 }
 
@@ -311,7 +274,7 @@ namespace WCS.WorkEngineering.Systems
                 dev.Data.TaskNumber = deliveryTask.ID;
                 dev.Data.GoodsEnd = deliveryTask.AddrTo.ToShort();
             }
-        }      
+        }
 
         public override bool Select(Device dev)
         {