18256738414
16 小时以前 071a7efe34469cbfc0f5401291c6e3ba21f31b19
core/Monitor.cs
@@ -226,6 +226,7 @@
                                                                    ITEMCODE = woInfo.S_ITEM_CODE,
                                                                    LOGINNAME = woInfo.S_LINE_NO,
                                                                    SHIFT = "None",
                                                                    STARTLOC = startLoc.S_CODE,
                                                                };
                                                                SpecHelper.InsertInventoryM(target);
                                                            });
@@ -350,6 +351,114 @@
        }
        /// <summary>
        /// 检测原材料产线下线附近是否有空位
        /// </summary>
        internal static void CheckEmptyLoc_YclOutLineArea()
        {
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var endLoc = db.Queryable<TN_Location>().
                Where(o => o.S_AREA_CODE == Settings.Areas[15]
                && o.N_LOCK_STATE == 0
                && o.S_LOCK_STATE == "无"
                && o.C_ENABLE == "Y"
                && o.N_CURRENT_NUM == 0
                && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                ).//原材料产线附近空托库区
                First();
                if (endLoc == null)
                {
                    LogHelper.Info($"原材料产线附近空托库区{Settings.Areas[15]},已满,无需再入空托");
                    return;
                }
                var startLoc = db.Queryable<TN_Location>().
                Where(o => o.S_AREA_CODE == Settings.Areas[3]
                && o.N_LOCK_STATE == 0
                && o.S_LOCK_STATE == "无"
                && o.C_ENABLE == "Y"
                && o.N_CURRENT_NUM == o.N_CAPACITY
                && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).Any()
                ).ToList().//空托堆叠库区
                FirstOrDefault();
                if (startLoc == null)
                {
                    startLoc = db.Queryable<TN_Location>().
                    Where(o => o.S_AREA_CODE == Settings.Areas[16]
                    && o.N_LOCK_STATE == 0
                    && o.S_LOCK_STATE == "无"
                    && o.C_ENABLE == "Y"
                    && o.N_CURRENT_NUM == o.N_CAPACITY
                    && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).Any()
                    ).ToList().//空托货架库区
                    FirstOrDefault();
                }
                if (startLoc == null)
                {
                    LogHelper.Info($"检测原材料产线下线附近是否有空位,起点没有找到合适的空托货位,要求有货");
                    return;
                }
                var cntrList = db.Queryable<TN_Loc_Container>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).OrderBy(a => a.T_CREATE, OrderByType.Asc).ToList();
                if (cntrList.Count < 1)
                {
                    LogHelper.Info($"检测原材料产线下线附近是否有空位,起点{startLoc.S_CODE}未找到货位容器关系信息");
                    return;
                }
                string cntrString = "";
                for (int i = 0; i < cntrList.Count; i++)
                {
                    if (i == cntrList.Count - 1)//最后一个字符串连接不加逗号
                    {
                        cntrString += cntrList[i].S_CNTR_CODE;
                    }
                    else
                    {
                        cntrString += cntrList[i].S_CNTR_CODE + ",";
                    }
                }
                if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, "空托自动上线", 3, cntrString))//创建搬送任务,起点终点容器
                {
                    LocationHelper.LockLoc(startLoc.S_CODE, 2);//起点出库锁,
                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                    LogHelper.Info($"检测原材料产线下线附近是否有空位,生成空托自动上线任务成功,容器:{cntrString},起点:{startLoc.S_CODE}");
                }
                else
                {
                    LogHelper.Info($"检测原材料产线下线附近是否有空位,生成空托自动上线任务失败,容器:{cntrString},起点:{startLoc.S_CODE}");
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message, ex);
            }
        }
        /// <summary>
        /// 线边满托货位自动解绑
        /// </summary>
        internal static void XBChekcFull()
        {
            try
            {
            }
            catch (Exception ex)
            {
            }
        }
        /// <summary>
        /// 在复检区检测物品合格,合格的物品自动回库
        /// </summary>
        internal static void CGOkCheck()
@@ -410,6 +519,7 @@
                            ITEMCODE = cginfo.S_ITEM_CODE,
                            LOGINNAME = "自动轮询",
                            SHIFT = "无",
                            STARTLOC = startLoc.S_CODE,
                        };
                        SpecHelper.InsertInventoryM(target);
                    });
@@ -462,11 +572,6 @@
                            LocationHelper.LockLoc(startLoc_1.S_CODE, 2);//起点出库锁,
                            LocationHelper.LockLoc(endLoc_1.S_CODE, 1);//终点入库锁
                            LogHelper.Info($"生成满托过期出库任务成功,容器号{outTimeCg.S_CNTR_CODE},起点{startLoc_1.S_CODE},终点{endLoc_1.S_CODE}");
                            Task task27 = Task.Run(() =>
                            {
                                SpecHelper.DeleteInventoryM(outTimeCg.S_ID);
                            });
                        }
                    }
                }
@@ -509,6 +614,7 @@
                                    ITEMCODE = outTimeCg.S_ITEM_CODE,
                                    LOGINNAME = "过期合格回库轮询",
                                    SHIFT = "None",
                                    STARTLOC = startLoc_2.S_CODE,
                                };
                                SpecHelper.InsertInventoryM(target);
                            });
@@ -695,14 +801,14 @@
                            }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_DayProDetail跳过");
                                //LogHelper.Info("重量相等,同步TN_DayProDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当天的货品规格列表为0,同步TN_DayProDetail跳过");
                    //LogHelper.Info("当天的货品规格列表为0,同步TN_DayProDetail跳过");
                }
                // 同步 TN_WeekProSpcDetail
@@ -733,14 +839,14 @@
                            }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_WeekProSpcDetail跳过");
                                //LogHelper.Info("重量相等,同步TN_WeekProSpcDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当周的货品规格列表为0,同步TN_WeekProSpcDetail跳过");
                    //LogHelper.Info("当周的货品规格列表为0,同步TN_WeekProSpcDetail跳过");
                }
                // 同步 TN_MonthProSpcDetail
@@ -771,14 +877,14 @@
                            }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_MonthProSpcDetail跳过");
                                //LogHelper.Info("重量相等,同步TN_MonthProSpcDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当月的货品规格列表为0,同步TN_MonthProSpcDetail跳过");
                    //LogHelper.Info("当月的货品规格列表为0,同步TN_MonthProSpcDetail跳过");
                }
                // 同步 TN_YearProSpcDetail
@@ -810,14 +916,14 @@
                            }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_YearProSpcDetail跳过");
                                //LogHelper.Info("重量相等,同步TN_YearProSpcDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当年的货品规格列表为0,同步TN_YearProSpcDetail跳过");
                    //LogHelper.Info("当年的货品规格列表为0,同步TN_YearProSpcDetail跳过");
                }
            }
            catch (Exception ex)
@@ -943,11 +1049,6 @@
                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                    LogHelper.Info($"生成满托出库复检任务成功,容器:{cntId.S_CNTR_CODE},起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}");
                    Task task27 = Task.Run(() =>
                    {
                         SpecHelper.DeleteInventoryM(cgInfo.S_ID);
                    });
                }
                else
                {
@@ -982,12 +1083,29 @@
                }
                var endLoc = db.Queryable<TN_Location>().
                    Where(a => a.S_AREA_CODE == Settings.Areas[4] && a.N_LOCK_STATE == 0
                    Where(a => a.S_AREA_CODE == Settings.Areas[15] && a.N_LOCK_STATE == 0
                    && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0
                    && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()
                    ).
                    OrderBy(a => a.N_CURRENT_NUM, OrderByType.Asc).
                    First();
                    ).First();//先找 原材料产线附近空托库区
                if (endLoc == null)
                {
                    endLoc = db.Queryable<TN_Location>().
                    Where(a => a.S_AREA_CODE == Settings.Areas[16] && a.N_LOCK_STATE == 0
                    && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0
                    && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()
                    ).First();
                }// 再找 空托货架库区
                if (endLoc == null)
                {
                    endLoc = db.Queryable<TN_Location>().
                    Where(a => a.S_AREA_CODE == Settings.Areas[4] && a.N_LOCK_STATE == 0
                    && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0
                    && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()
                    ).First();
                }// 最后找 空托缓存库区
                if (endLoc == null)
                {