杨张扬
2025-07-01 1c7cb41e75dece1ec91039625fcc434776df3821
core/Monitor.cs
@@ -137,7 +137,7 @@
                                                                           && c.N_LOCK_STATE == 0 && c.N_CURRENT_NUM == 0
                                                                           && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == c.S_CODE).NotAny()//不能有货
                                                                           && c.C_ENABLE == "Y").
                                                                           OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可
                                                                           OrderBy(o => o.N_LAYER, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可
                                                if (endLoc != null)
                                                {
@@ -370,7 +370,9 @@
                    return;
                }
                var endLoc = db.Queryable<TN_Location>().First(a => a.S_AREA_CODE == Settings.Areas[1]
                var endLoc = db.Queryable<TN_Location>()
                     .OrderBy(a => a.N_LAYER, OrderByType.Asc)
                    .First(a => a.S_AREA_CODE == Settings.Areas[1]
                && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无"
                && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()//不能有货
                );
@@ -483,7 +485,8 @@
                    var endLoc_2 = db.Queryable<TN_Location>()
                     .Where(o => o.S_AREA_CODE == Settings.Areas[2]
                      && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()//不能有货
                     && o.N_CURRENT_NUM == 0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无").First();
                     && o.N_CURRENT_NUM == 0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无")
                     .First();
                    if (endLoc_2 != null)
                    {
@@ -597,9 +600,13 @@
                    db.Updateable<TN_EquipProDetail>(targetEPD).UpdateColumns(it => new { it.ITEMSTATE }).ExecuteCommand();
                    var cginfo = db.Queryable<TN_CG_Detail>().First(a => a.S_ID == targetEPD.S_ID);
                    cginfo.S_ITEM_STATE = "过期";
                    cginfo.N_ITEM_STATE = 3;
                    db.Updateable<TN_CG_Detail>(cginfo).UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand();
                    if (cginfo != null)
                    {
                        cginfo.S_ITEM_STATE = "过期";
                        cginfo.N_ITEM_STATE = 3;
                        db.Updateable<TN_CG_Detail>(cginfo).UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand();
                    }
                }
                // 同步 TN_InventoryM 与 TN_CG_Detail
@@ -626,21 +633,28 @@
                    db.Updateable<TN_InventoryM>(targetInM).UpdateColumns(it => new { it.ITEMSTATE }).ExecuteCommand();
                    var cginfo = db.Queryable<TN_CG_Detail>().First(a => a.S_ID == targetInM.S_ID);
                    cginfo.S_ITEM_STATE = "过期";
                    cginfo.N_ITEM_STATE = 3;
                    db.Updateable<TN_CG_Detail>(cginfo).UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand();
                    if (cginfo != null)
                    {
                        cginfo.S_ITEM_STATE = "过期";
                        cginfo.N_ITEM_STATE = 3;
                        db.Updateable<TN_CG_Detail>(cginfo).UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand();
                    }
                }
                targetInM = db.Queryable<TN_InventoryM>().LeftJoin<TN_CG_Detail>((o, i) => o.S_ID == i.S_ID).
               var targetInMList = db.Queryable<TN_InventoryM>().LeftJoin<TN_CG_Detail>((o, i) => o.S_ID == i.S_ID).
                 Where((o, i) => System.DateTime.Now < o.EXPIRATION
                   && ((i.S_ITEM_STATE == "待检" && i.N_ITEM_STATE == 1)
                   || (i.S_ITEM_STATE == "合格" && i.N_ITEM_STATE == 0))
                 ).First();
                 ).ToList();
                if (targetInM != null)//检测出快过期的货品
                if (targetInMList.Count > 0)//检测出快过期的货品
                {
                    targetInM.EXPIRATION_DAY = SpecHelper.CalculateDaysDifference(System.DateTime.Now,targetInM.EXPIRATION).ToString();
                    db.Updateable<TN_InventoryM>(targetInM).UpdateColumns(it => new { it.EXPIRATION_DAY }).ExecuteCommand();
                    foreach (var item in targetInMList)
                    {
                        item.EXPIRATION_DAY = SpecHelper.CalculateDaysDifference(System.DateTime.Now, item.EXPIRATION).ToString();
                    }
                    db.Updateable<TN_InventoryM>(targetInMList).UpdateColumns(it => new { it.EXPIRATION_DAY }).ExecuteCommand();
                }
                targetInM = db.Queryable<TN_InventoryM>().First(a => Convert.ToInt32(a.EXPIRATION_DAY) > 0 && a.ITEMSTATE == "过期");
@@ -808,7 +822,22 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error($"发生了异常,同步TN_EquipProDetail异常,{ex.Message}", ex);
                // 获取最内层异常(通常是实际引发问题的异常)
                Exception innerEx = ex;
                while (innerEx.InnerException != null)
                {
                    innerEx = innerEx.InnerException;
                }
                // 获取堆栈帧信息
                var stackTrace = new System.Diagnostics.StackTrace(innerEx, true);
                var stackFrame = stackTrace.GetFrame(0); // 获取最顶层的堆栈帧
                // 获取文件名和行号
                string fileName = stackFrame.GetFileName();
                int lineNumber = stackFrame.GetFileLineNumber();
                LogHelper.Error($"发生了异常,同步TN_EquipProDetail异常,文件:{fileName}, 行号:{lineNumber}, 错误:{ex.Message}\r\n{ex.StackTrace}", ex);
            }
        }