zxx
2025-06-04 291185b6c286ab72f3b90208a61cbed78fdbd9ce
HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs
@@ -807,7 +807,7 @@
            {
                //查询这个库区的空托盘与满托盘
                var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == area).OrderByDescending(a => a.N_ROW).ToList();
                LogHelper.Info($"查询这个库区的空托盘与满托盘:{JsonConvert.SerializeObject(list)}");
                //LogHelper.Info($"查询这个库区的空托盘与满托盘:{JsonConvert.SerializeObject(list)}");
                if (list.Count > 0)
                {
                    List<string> loca = new List<string>();
@@ -824,22 +824,36 @@
                    {
                        list.RemoveAll(s => loca.Contains(s.S_CODE));
                    }
                    //过滤一下 允许进入的才分配
                    var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "立库入库区").FirstOrDefault();
                    if (reservoirs.areaCode.Equals(area))
                    // 3. 如果是立库入库区,检查 PLC 是否允许卸载
                    var reservoirs = Settings.ReservoirAreas.FirstOrDefault(s => s.areaName == "立库入库区");
                    if (reservoirs != null && reservoirs.areaCode.Equals(area))
                    {
                        var plcDeviceTable = S7Helper.plcDeviceTables;
                        foreach (var l in list)
                        // 先收集要移除的货位,避免在遍历时修改集合
                        List<Location> locationsToRemove = new List<Location>();
                        foreach (var location in list)
                        {
                            var safeInteraction = Settings.SafeInteractions.Where(s => s.location == l.S_CODE).FirstOrDefault();
                            var res = int.Parse(plcDeviceTable.RGVAllowUnload[safeInteraction.code].ToString().Substring(1, 1));
                            if (res!=1)
                            var safeInteraction = Settings.SafeInteractions.FirstOrDefault(s => s.location == location.S_CODE);
                            if (safeInteraction != null)
                            {
                                list.Remove(l);
                                // 检查 PLC 是否允许卸载(取第二位数字,判断是否为 1)
                                string allowUnloadStr = plcDeviceTable.RGVAllowUnload[safeInteraction.code].ToString();
                                int allowUnload = int.Parse(allowUnloadStr.Substring(1, 1));
                                if (allowUnload != 1)
                                {
                                    locationsToRemove.Add(location); // 不允许卸载,加入待移除列表
                                }
                            }
                        }
                        // 遍历结束后,再统一移除不符合条件的货位
                        foreach (var locToRemove in locationsToRemove)
                        {
                            list.Remove(locToRemove);
                        }
                    }
                    //符合条件的排序选第一个  先找第一个
                    if (list.Count > 0)
@@ -1676,6 +1690,7 @@
        {
            var db = new SqlHelper<Location>().GetInstance();
            LogHelper.Info($"tcpOffline=====参数:起点货位{startLoc}终点库区{endArea}");
            try
            {
                //校验起点货位是否存在/锁住
@@ -1711,6 +1726,11 @@
                //    itemCode = model.S_ITEM_CODE;
                //    wlName = db.Queryable<TN_Material>().Where(b => b.S_ITEM_CODE == model.S_ITEM_CODE).First().S_ITEM_NAME;
                //}
                if (OutLoc==null)
                {
                    LogHelper.Info($"终点货位不存在", "按钮盒下线");
                    return false;
                }
                ContainerHelper.BindLocCntrs(OutLoc.S_CODE, trayCode, itemCode, wlName);
                //创建任务
                LogHelper.Info($"创建任务 起点:{startLoc}终点:{OutLoc.S_CODE}", "按钮盒下线");
@@ -1719,8 +1739,8 @@
            }
            catch (Exception ex)
            {
                Console.WriteLine("materialOffline:" + ex.Message + ex.StackTrace);
                LogHelper.Error("materialOffline:" + ex.Message, ex);
                Console.WriteLine("tcpOffline:" + ex.Message + ex.StackTrace);
                LogHelper.Error("tcpOffline:" + ex.Message, ex);
                throw;
            }
        }