林豪 左 před 1 rokem
rodič
revize
819df93603

+ 6 - 0
WCS.Entity/WCS_CacheLineLoc.cs

@@ -80,5 +80,11 @@ namespace WCS.Entity
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "正反面")]
         public int SideNum { get; set; }
+
+        /// <summary>
+        ///  超时时间-小时
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int TimeOut { get; set; }
     }
 }

+ 6 - 0
WCS.Entity/WCS_PalletizingLoc.cs

@@ -85,5 +85,11 @@ namespace WCS.Entity
         /// </summary>
         [SugarColumn(ColumnDescription = "仓库编号", IsNullable = true)]
         public string WarehouseCode { get; set; }
+
+        /// <summary>
+        ///  超时时间-小时
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int TimeOut { get; set; }
     }
 }

+ 18 - 1
业务工程/分拣库/WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -5,6 +5,7 @@ using ServiceCenter.SqlSugars;
 using SqlSugar;
 using WCS.Core;
 using WCS.Entity;
+using WCS.WorkEngineering.Systems;
 using TaskStatus = WCS.Entity.TaskStatus;
 
 namespace WCS.WorkEngineering.Extensions
@@ -184,6 +185,17 @@ namespace WCS.WorkEngineering.Extensions
             }
         }
 
+        public static int GetOutTime(this List<BaseMatinfo> matInfoList, string matCode, string defaultOutTime)
+        {
+            var outTime = Convert.ToInt32(defaultOutTime);
+            if (matInfoList.Any(m => matCode.Contains(m.Code)))
+            {
+                outTime = matInfoList.Where(m => matCode.Contains(m.Code)).Min(m => m.TimeOut);
+            }
+
+            return outTime;
+        }
+
         #region 工字轮支线分流
 
         /// <summary>
@@ -218,6 +230,10 @@ namespace WCS.WorkEngineering.Extensions
                 WarehouseCode = task.WarehouseCode,
                 DeviceCode = task.Device
             };
+
+            var matInfoList = db.Queryable<BaseMatinfo>().NoLock().Where(x => x.TimeOut != 0).ToList();
+            var defaultOutTime = db.Queryable<fjSysConfig>().First(x => x.Code == "DefaultOutTime ") ?? new fjSysConfig() { SContent = "12" };
+
             palletizing = db.InsertableRowLock(palletizing).ExecuteReturnEntity();
             foreach (var item in billBomsetinfos.Where(x => x.IsEmpty == 0).GroupBy(x => x.Row).OrderBy(x => x.Key))
             {
@@ -276,7 +292,8 @@ namespace WCS.WorkEngineering.Extensions
                             PalletizingRowId = palletizingRow.Id,
                             Finish = false,
                             PalletizingId = palletizing.Id,
-                            WarehouseCode = palletizingRow.WarehouseCode
+                            WarehouseCode = palletizingRow.WarehouseCode,
+                            TimeOut = matInfoList.GetOutTime(loc.MatCode, defaultOutTime.SContent)
                         };
                         db.InsertableRowLock(palletizingLoc).ExecuteReturnEntity();
                     }

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

@@ -400,7 +400,16 @@ namespace WCS.WorkEngineering.Systems
             var warehouseCode = task.WarehouseCode;
             if (task.BusType == TaskBusType.皮盘入库.GetDescription() || task.BusType == TaskBusType.车间叫料.GetDescription())
             {
-                warehouseCode = task.MaterialCode;
+                warehouseCode = task.MaterialCode switch
+                {
+                    "分拣库1北" => "1N",
+                    "分拣库1南" => "1S",
+                    "分拣库2北" => "2N",
+                    "分拣库2南" => "2S",
+                    "分拣库3北" => "3N",
+                    "分拣库3南" => "3S",
+                    _ => task.WarehouseCode
+                };
             }
             //同侧之间均分
             if (warehouseCode.Contains("1"))

+ 7 - 11
业务工程/分拣库/WCS.WorkEngineering/Systems/UpLoadSystems.cs

@@ -21,8 +21,6 @@ namespace WCS.WorkEngineering.Systems
     {
         protected override bool ParallelDo => true;
 
-        
-
         public override void Do(Device<IStation520> obj)
         {
             //更新出库放货完成状态
@@ -61,21 +59,19 @@ namespace WCS.WorkEngineering.Systems
                 }
             });
 
-            //环形库组盘任务/立库入库任务/二楼立库出库 更新完成
+            //环形库组盘任务/立库入库任务/二楼立库出库//芯股叫料 更新完成
             SqlSugarHelper.Do(_db =>
             {
                 var taskIdList = new List<WCS_TaskOld>();
                 var nowTime = DateTime.Now;
                 var db = _db.Default;
                 var taskList = db.Queryable<WCS_TaskOld>().UpdLock()
-                    .Where(x =>((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R")) 
-                                || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) && !x.WarehouseCode.Contains("R"))) 
-                               && x.Status == TaskStatus.Finish&& x.Uploaded != TaskStatus.Finish)
+                    .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R"))
+                                || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) && !x.WarehouseCode.Contains("R"))
+                                || (x.Type == TaskType.OutDepot && x.AddrFrom.Contains("NSTJ") && x.AddrTo.Contains("NSTJ")))
+                               && x.Status == TaskStatus.Finish && x.Uploaded != TaskStatus.Finish)
                     .SplitTable(x => x.Take(2)).ToList();
-                                
-                                
-                               
-                                
+
                 var isEnd = false;
                 foreach (var task in taskList)
                 {
@@ -134,4 +130,4 @@ namespace WCS.WorkEngineering.Systems
             return dev.Code == nameof(UpLoadSystems);
         }
     }
-}
+}

+ 428 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs

@@ -3,6 +3,7 @@ using PlcSiemens.Core.Extension;
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
+using SqlSugar;
 using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
@@ -10,7 +11,6 @@ using WCS.Entity.Protocol.BCR;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Worlds;
-using wms.sqlsugar.model.fj;
 using TaskStatus = WCS.Entity.TaskStatus;
 
 namespace WCS.WorkEngineering.Systems
@@ -168,4 +168,431 @@ namespace WCS.WorkEngineering.Systems
         /// </summary>
         public string WarehouseCode { get; set; }
     }
+
+    /// <summary>
+    ///  配置信息表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("sys_config", "配置信息表")]
+    public class fjSysConfig : BaseModel
+    {
+        /// <summary>
+        ///  编号
+        /// </summary>
+        [SugarColumn(ColumnName = "code", Length = 100)]
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  名称
+        /// </summary>
+        [SugarColumn(ColumnName = "name", Length = 100)]
+        public string Name { get; set; }
+
+        /// <summary>
+        ///  内容
+        /// </summary>
+        [SugarColumn(ColumnName = "scontent", Length = 100)]
+        public string SContent { get; set; }
+
+        /// <summary>
+        ///  类型
+        /// </summary>
+        [SugarColumn(ColumnName = "stype", Length = 50)]
+        public string SType { get; set; }
+
+        [SugarColumn(ColumnName = "default1", Length = 100, IsNullable = true)]
+        public string Default1 { get; set; }
+
+        [SugarColumn(ColumnName = "default2", Length = 100, IsNullable = true)]
+        public string Default2 { get; set; }
+
+        [SugarColumn(ColumnName = "default3", Length = 100, IsNullable = true)]
+        public string Default3 { get; set; }
+    }
+
+    /// <summary>
+    ///  物料表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Base_MatInfo")]
+    public partial class BaseMatinfo : BaseModel
+    {
+        /// <summary>
+        ///  仓库ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long WarehouseId { get; set; }
+
+        /// <summary>
+        ///  编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false)]
+        public string Name { get; set; }
+
+        /// <summary>
+        ///  短描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ShortDesc { get; set; }
+
+        /// <summary>
+        ///  长描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
+        public string FullDesc { get; set; }
+
+        /// <summary>
+        /// 补充描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
+        public string ExtDesc { get; set; }
+
+        /// <summary>
+        ///  英文名
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Enname { get; set; }
+
+        /// <summary>
+        ///  组ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long MatGrpId { get; set; }
+
+        /// <summary>
+        ///  叶类编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Leafcode { get; set; }
+
+        /// <summary>
+        ///  叶类名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string LeafName { get; set; }
+
+        /// <summary>
+        ///  中类编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string MidCode { get; set; }
+
+        /// <summary>
+        ///  中类名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string MidName { get; set; }
+
+        /// <summary>
+        ///  大类编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string HeadCode { get; set; }
+
+        /// <summary>
+        ///  大类名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string HeadName { get; set; }
+
+        /// <summary>
+        ///  规格型号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Description { get; set; }
+
+        /// <summary>
+        ///  材质
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Texture { get; set; }
+
+        /// <summary>
+        ///  图号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string FigureNo { get; set; }
+
+        /// <summary>
+        ///  强度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Strength { get; set; }
+
+        /// <summary>
+        ///  镀层
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Plating { get; set; }
+
+        /// <summary>
+        ///  镀层克重
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? PlatingWeight { get; set; }
+
+        /// <summary>
+        ///  镀层主元素含量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? PlatingContQty { get; set; }
+
+        /// <summary>
+        ///  线密度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Linear { get; set; }
+
+        /// <summary>
+        ///  产品号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ProCode { get; set; }
+
+        /// <summary>
+        ///  产品描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ProName { get; set; }
+
+        /// <summary>
+        ///  产品强度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ProStre { get; set; }
+
+        /// <summary>
+        ///  线密度上限
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LinearMax { get; set; }
+
+        /// <summary>
+        ///  线密度下限
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LinearMin { get; set; }
+
+        /// <summary>
+        ///  线密度目标值
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LinearTar { get; set; }
+
+        /// <summary>
+        ///  单丝倍数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Mono { get; set; }
+
+        /// <summary>
+        ///  工字轮型号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SpoolType { get; set; }
+
+        /// <summary>
+        ///  工字轮料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SpoolCode { get; set; }
+
+        /// <summary>
+        ///  单卷长度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Length { get; set; }
+
+        /// <summary>
+        ///  涂油量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? OilQty { get; set; }
+
+        /// <summary>
+        ///  润滑液种类
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string LubType { get; set; }
+
+        /// <summary>
+        ///  排线间距
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LineSpace { get; set; }
+
+        /// <summary>
+        ///  线长度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LineLength { get; set; }
+
+        /// <summary>
+        ///  捻向
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string LayDirect { get; set; }
+
+        /// <summary>
+        ///  客户标准索引号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string CumIndex { get; set; }
+
+        /// <summary>
+        ///  有无焊点
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string IsSolder { get; set; }
+
+        /// <summary>
+        ///  SKU号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SkuCode { get; set; }
+
+        /// <summary>
+        ///  SKU描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
+        public string SkuDesc { get; set; }
+
+        /// <summary>
+        ///  控制扭转
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Tors { get; set; }
+
+        /// <summary>
+        ///  包装组ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string PackGrpId { get; set; }
+
+        /// <summary>
+        ///  黑盘取样
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string BlackSamp { get; set; }
+
+        /// <summary>
+        ///  黑盘检验
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string BlackChk { get; set; }
+
+        /// <summary>
+        ///  客户编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string CustCode { get; set; }
+
+        /// <summary>
+        ///  客户描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string CustName { get; set; }
+
+        /// <summary>
+        ///  收货地址编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string AddressCode { get; set; }
+
+        /// <summary>
+        ///  收货地址名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string AddressName { get; set; }
+
+        /// <summary>
+        ///  生产批次数量(箱/批)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Qty { get; set; }
+
+        /// <summary>
+        ///  每箱最大焊点盘数(个)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? BoxMaxSolder { get; set; }
+
+        /// <summary>
+        ///  工字轮最大焊点数(个)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? SpoolMaxSolder { get; set; }
+
+        /// <summary>
+        ///  OVC比例
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Ovc { get; set; }
+
+        /// <summary>
+        ///  起鼓等级
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string DrummLevel { get; set; }
+
+        /// <summary>
+        ///  公司代码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ComCode { get; set; }
+
+        /// <summary>
+        ///  公司名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ComName { get; set; }
+
+        /// <summary>
+        ///  计量单位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
+        public string CalcUnit { get; set; }
+
+        /// <summary>
+        ///  库存单位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
+        public string StockUnit { get; set; }
+
+        /// <summary>
+        ///  单重
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Weight { get; set; }
+
+        /// <summary>
+        ///  单重单位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
+        public string WeightUnit { get; set; }
+
+        /// <summary>
+        ///  是否启用时效
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsHold { get; set; }
+
+        /// <summary>
+        ///  时效时长(小时)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal HoldDuration { get; set; }
+
+        /// <summary>
+        ///  超时时间-小时
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int TimeOut { get; set; }
+    }
 }

+ 25 - 8
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -53,12 +53,14 @@ namespace WCS.WorkEngineering.Systems
                     List<WCS_PalletizingRow> upDateableRow = new List<WCS_PalletizingRow>();
                     List<WCS_PalletizingLoc> upDateableLoc = new List<WCS_PalletizingLoc>();
                     List<WCS_CacheLineLoc> deleteLoc = new List<WCS_CacheLineLoc>();
+
                     //更新行数据
                     foreach (var row in palletizingRow)
                     {
                         var cacheLine = db.Queryable<WCS.Entity.WCS_CacheLine>().Includes(x => x.Locations).Single(x => x.Id == row.CacheLine.Id);
+                        var outTime = cacheLine.Locations.MinBy(x => x.TimeOut).TimeOut;
                         //时间超六小时,且缓存线数量与码垛信息行数量不相等时强制结盘
-                        if (cacheLine.AddTime < DateTime.Now.AddHours(-6) && cacheLine.Locations.Count(x => x.InStock) != row.QtyMaxCount)
+                        if (cacheLine.AddTime < DateTime.Now.AddHours(-outTime) && cacheLine.Locations.Count(x => x.InStock) != row.QtyMaxCount)
                         {
                             isEnd = true;
                         }
@@ -237,11 +239,13 @@ namespace WCS.WorkEngineering.Systems
                 //可以取货的码垛信息
                 var pickUpCode = _pickUpDevices.Select(x => x.Key.Entity.Code.ToShort());
                 World.Log($"可用取货线体1:{JsonConvert.SerializeObject(pickUpCode)}");
+
                 //从缓存线信息找到可以取货的缓存线
                 var cacheLines = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).Where(x => pickUpCode.Contains(x.LocationNo)).ToList().Where(
                     x =>
                     {
-                        var isTime = x.AddTime < DateTime.Now.AddHours(-6);
+                        var outTime = x.Locations.MinBy(l => l.TimeOut).TimeOut;
+                        var isTime = x.AddTime < DateTime.Now.AddHours(-outTime);
                         var isPut = pickUpDevices.Any(p => p.key == x.LocationNo.ToString() && p.Count == x.Quantity);
                         var count = x.Locations.Count(l => l.InStock);
                         //满足取货条件,或者是超六小时
@@ -261,7 +265,11 @@ namespace WCS.WorkEngineering.Systems
                     .SelectMany(w => w.Rows)
                     .Where(v => !v.Finish).Any(w =>
                     {
-                        return cacheLines.Any(a => a.MatCodeList == w.MatCodeList && (a.Quantity == w.QtyMaxCount || (a.AddTime < DateTime.Now.AddHours(-6) && a.Quantity <= w.QtyMaxCount)) && a.WarehouseCode == w.WarehouseCode);
+                        return cacheLines.Any(a =>
+                        {
+                            var outTime = a.Locations.MinBy(l=>l.TimeOut).TimeOut;
+                            return a.MatCodeList == w.MatCodeList && (a.Quantity == w.QtyMaxCount || (a.AddTime < DateTime.Now.AddHours(-outTime) && a.Quantity <= w.QtyMaxCount)) && a.WarehouseCode == w.WarehouseCode;
+                        });
                     })).OrderBy(x => x.AddTime).ToList();
                 if (!palletizingLsit.Any())
                 {
@@ -281,7 +289,11 @@ namespace WCS.WorkEngineering.Systems
                         .MinBy(x => x.LayerNo) //取最下层
                         .Rows
                         .Where(x => x is { Finish: false, IsEmpty: false, LineCode: null }) //不空且未结束的行
-                        .Where(x => cacheLines.Any(a => a.MatCodeList == x.MatCodeList && (a.Quantity == x.QtyMaxCount || (a.AddTime < DateTime.Now.AddHours(-6) && a.Quantity <= x.QtyMaxCount)) && a.WarehouseCode == x.WarehouseCode)); //获取可以取货的码垛信息行
+                        .Where(x => cacheLines.Any(a =>
+                        {
+                            var outTime = a.Locations.MinBy(l => l.TimeOut).TimeOut;
+                            return a.MatCodeList == x.MatCodeList && (a.Quantity == x.QtyMaxCount || (a.AddTime < DateTime.Now.AddHours(-outTime) && a.Quantity <= x.QtyMaxCount)) && a.WarehouseCode == x.WarehouseCode;
+                        })); //获取可以取货的码垛信息行
 
                     //无可用行,进入下一次迭代
                     if (!palletizingRow.Any())
@@ -299,10 +311,15 @@ namespace WCS.WorkEngineering.Systems
                     //跟据缓存信息找到对应的可用取货行
                     var rowList = cacheLines.Select(x =>
                     {
-                        var row = palletizingRow.Where(w => !rowIds.Contains(w.Id)
-                                                          && x.MatCodeList == w.MatCodeList
-                                                          && (x.Quantity == w.QtyMaxCount || (x.AddTime < DateTime.Now.AddHours(-6) && x.Quantity <= w.QtyMaxCount))
-                                                          && w.WarehouseCode == x.WarehouseCode).MinBy(o => o.RowNo);
+                        var row = palletizingRow.Where(w =>
+                        {
+                            var outTime = w.Locs.MinBy(l => l.TimeOut).TimeOut;
+                            return !rowIds.Contains(w.Id)
+                                   && x.MatCodeList == w.MatCodeList
+                                   && (x.Quantity == w.QtyMaxCount || (x.AddTime < DateTime.Now.AddHours(-outTime) &&
+                                                                       x.Quantity <= w.QtyMaxCount))
+                                   && w.WarehouseCode == x.WarehouseCode;
+                        }).MinBy(o => o.RowNo);
 
                         if (row != null)
                         {

+ 3 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架缓存放行点.cs

@@ -1,13 +1,13 @@
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
+using SqlSugar;
 using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Worlds;
-using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace WCS.WorkEngineering.Systems
 {
@@ -86,8 +86,9 @@ namespace WCS.WorkEngineering.Systems
             {
                 var db = _db.Default;
                 var cacheLine = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).Single(x => x.LocationNo == obj.Entity.Code.ToShort());
+
                 //是否所有的位已全部分配位置
-                if (cacheLine != null && cacheLine.Locations.All(x => (x is { IsEmpty: false, InStock: true }) || (x.AddTime < DateTime.Now.AddHours(-6))))
+                if (cacheLine != null && cacheLine.Locations.All(x => x is { IsEmpty: false, InStock: true } || (x.AddTime < DateTime.Now.AddHours(-x.TimeOut))))
                 {
                     //判断下一个地址当前是否有对应的任务
                     if (db.Queryable<WCS_CacheLine>().Any(x => x.LocationNo == nextCode && x.IsTruss == false)) return;