双钱-日周月年产量记录表增加规格字段,WMS库存管理表增加距离过期还剩多少天字段
10个文件已修改
218 ■■■■ 已修改文件
Program.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiHelper.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/Monitor.cs 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_DayProDetail.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_InventoryM.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_MonthProDetail.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_WeekProDetail.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_YearProDetail.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/SpecHelper.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Program.cs
@@ -141,7 +141,7 @@
                //根据S7/Modbus协议判断输送线的信号  原材料产线库区=>满托缓存库区,空托缓存库区=>原材料产线库区
                tasks.Add(GetTask(Monitor.CheckS7Devices));
                tasks.Add(GetTask(Monitor.SynchronizationEquipPro));//同步 TN_EquipProDetail  TN_InventoryM
                tasks.Add(GetTask(Monitor.SynchronizationEquipPro));//同步 TN_EquipProDetail  TN_InventoryM  年月日重量表
                tasks.Add(GetTask(Monitor.FullOutTime));//满托过期出库 过期合格回库,过期次品回炉
api/ApiHelper.cs
@@ -640,10 +640,6 @@
                var startPoint = Settings.ProductionLines.FirstOrDefault(a => a.PointOut == model.StartLoc);
                if (startPoint != null)//起点存在
                {
                    var woInfo = db.Queryable<TN_WorkOrder>().Where(a => a.S_LINE_NO == startPoint.ProductionLine_Name && a.S_B_STATE == "开启").OrderBy(b => b.T_CREATE, OrderByType.Desc).First();
                    if (woInfo != null)//当前产线不存在开启的最新的工单
                    {
                        var startLoc = db.Queryable<TN_Location>().First(a => a.S_LOCK_STATE == "无" && a.N_LOCK_STATE == 0 && a.S_CODE == model.StartLoc && a.C_ENABLE == "Y");
                        if (startLoc != null)//该产线的起点没锁住
                        {
@@ -695,10 +691,8 @@
                                    TN_CG_Detail tN_CG_Detail = new TN_CG_Detail()//新增容器货品明细表
                                    {
                                        S_CNTR_CODE = model.RfId,
                                        S_ITEM_CODE = woInfo.S_ITEM_CODE,
                                        S_BATCH_NO = woInfo.S_BATCH_CODE,
                                        S_ITEM_SPEC = woInfo.S_ITEM_SPEC,
                                        S_SPE= woInfo.S_ITEM_SPEC,
                                    S_ITEM_SPEC = model.Spe,
                                    S_SPE = model.Spe,
                                        S_CAR_CODE = model.CarCode,
                                        N_ITEM_STATE = 1,
                                        S_ITEM_STATE = "待检",
@@ -776,11 +770,10 @@
                                                        S_ID = tN_CG_Detail.S_ID,
                                                        TASKTYPE = "PDA满托下线入库",
                                                        RFID = model.RfId,
                                                        SPEC = woInfo.S_ITEM_SPEC,
                                                    SPEC = model.Spe,
                                                        CARCODE = model.CarCode,
                                                        WEIGHT = modelWeight,
                                                        ITEMSTATE = "待检",
                                                        ITEMCODE = woInfo.S_ITEM_CODE,
                                                        LOGINNAME = model.staff,
                                                        SHIFT = "None",
                                                        STARTLOC = startLoc.S_CODE,
@@ -794,10 +787,9 @@
                                                    {
                                                        S_ID = tN_CG_Detail.S_ID,
                                                        RFID = model.RfId,
                                                        SPEC = woInfo.S_ITEM_SPEC,
                                                    SPEC = model.Spe,
                                                        WEIGHT = modelWeight,
                                                        ITEMSTATE = "待检",
                                                        ITEMCODE = woInfo.S_ITEM_CODE,
                                                        LOGINNAME = model.staff,
                                                        SHIFT = "None",
                                                    };
@@ -830,14 +822,6 @@
                        {
                            result.resultCode = 9;
                            result.resultMsg = $"此位置:{startPoint.PointOut}已锁住";
                            LogHelper.Info(result.resultMsg);
                            return result;
                        }
                    }
                    else
                    {
                        result.resultCode = 10;
                        result.resultMsg = $"当前产线{startPoint.ProductionLine_Name}位置{startPoint.PointOut}没有开启的工单";
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
core/Monitor.cs
@@ -497,7 +497,7 @@
                var targetEPD = db.Queryable<TN_EquipProDetail>().LeftJoin<TN_CG_Detail>((o, i) => o.S_ID == i.S_ID).
                   Where((o, i) => o.ITEMSTATE != i.S_ITEM_STATE && i.S_ITEM_STATE != "待检" && i.N_ITEM_STATE != 1).First();
                if (targetEPD != null)
                if (targetEPD != null)//同步货品状态
                {
                    targetEPD.ITEMSTATE = db.Queryable<TN_CG_Detail>().First(a => a.S_ID == targetEPD.S_ID).S_ITEM_STATE;
                    db.Updateable<TN_EquipProDetail>(targetEPD).UpdateColumns(it => new { it.ITEMSTATE }).ExecuteCommand();
@@ -506,7 +506,7 @@
                targetEPD = db.Queryable<TN_EquipProDetail>().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).First();
                if (targetEPD != null)
                if (targetEPD != null)//检测出过期的货品
                {
                    targetEPD.ITEMSTATE = "过期";
                    db.Updateable<TN_EquipProDetail>(targetEPD).UpdateColumns(it => new { it.ITEMSTATE }).ExecuteCommand();
@@ -521,7 +521,7 @@
                var targetInM = db.Queryable<TN_InventoryM>().LeftJoin<TN_CG_Detail>((o, i) => o.S_ID == i.S_ID).
                   Where((o, i) => o.ITEMSTATE != i.S_ITEM_STATE && i.S_ITEM_STATE != "待检" && i.N_ITEM_STATE != 1).First();
                if (targetInM != null)
                if (targetInM != null)//同步货品状态
                {
                    targetInM.ITEMSTATE = db.Queryable<TN_CG_Detail>().First(a => a.S_ID == targetInM.S_ID).S_ITEM_STATE;
                    db.Updateable<TN_InventoryM>(targetInM).UpdateColumns(it => new { it.ITEMSTATE }).ExecuteCommand();
@@ -530,9 +530,10 @@
                targetInM = 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).First();
                if (targetInM != null)
                if (targetInM != null)//检测出已过期的货品
                {
                    targetInM.ITEMSTATE = "过期";
                    targetInM.EXPIRATION_DAY = 0;
                    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);
@@ -541,96 +542,170 @@
                    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).
                 Where((o, i) => System.DateTime.Now < o.EXPIRATION && i.S_ITEM_STATE == "待检" && i.N_ITEM_STATE == 1).First();
                if (targetInM != null)//检测出快过期的货品
                {
                    targetInM.EXPIRATION_DAY = SpecHelper.CalculateDaysDifference(System.DateTime.Now,targetInM.EXPIRATION);
                    db.Updateable<TN_InventoryM>(targetInM).UpdateColumns(it => new { it.EXPIRATION_DAY }).ExecuteCommand();
                }
                //  同步 TN_DayProDetail
                var curDay = System.DateTime.Now.Date;
                var targetDay = db.Queryable<TN_DayProDetail>().First(a => a.DAYTIME == curDay);
                var targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curDay && a.DOWNLINETIME <= curDay.AddDays(1)).ToList();
                var specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当天的货品有哪些规格
                if (specList.Count>0)
                {
                    foreach (var item in specList)
                    {
                        var targetDay = db.Queryable<TN_DayProDetail>().First(a => a.DAYTIME == curDay && a.SPEC == item);
                if (targetDay == null)
                {
                    targetDay = new TN_DayProDetail()
                    {
                        DAYTIME = curDay,
                                SPEC = item,
                    };
                    db.Insertable(targetDay).ExecuteCommand();
                }
                var targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curDay && a.DOWNLINETIME <= curDay.AddDays(1)).ToList();
                var sumWeight = targetEPDs.Sum(a => a.WEIGHT);
                if (targetEPDs.Count > 0)
                        else
                {
                            var sumWeight = targetEPDs.Where(b=>b.SPEC == item).Sum(a => a.WEIGHT);
                    if (targetDay.WEIGHT != sumWeight)
                    {
                        targetDay.WEIGHT = sumWeight;
                        db.Updateable(targetDay).ExecuteCommand();
                    }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_DayProDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当天的货品规格列表为0,同步TN_DayProDetail跳过");
                }
                // 同步 TN_WeekProSpcDetail
                var curWeek = System.DateTime.Now.Date.AddDays(-(int)System.DateTime.Now.DayOfWeek + 1);
                var targetWeek = db.Queryable<TN_WeekProDetail>().First(a => a.DAYTIME == curWeek);
                targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curWeek && a.DOWNLINETIME <= curWeek.AddDays(7)).ToList();
                specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当周的货品有哪些规格
                if (specList.Count > 0)
                {
                    foreach (var item in specList)
                    {
                        var targetWeek = db.Queryable<TN_WeekProDetail>().First(a => a.DAYTIME == curWeek && a.SPEC == item);
                if (targetWeek == null)
                {
                    targetWeek = new TN_WeekProDetail()
                    {
                        DAYTIME = curWeek,
                                SPEC = item,
                    };
                    db.Insertable(targetWeek).ExecuteCommand();
                }
                targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curWeek && a.DOWNLINETIME <= curWeek.AddDays(7)).ToList();
                if (targetEPDs.Count > 0)
                        else
                {
                            var sumWeight = targetEPDs.Where(b => b.SPEC == item).Sum(a => a.WEIGHT);
                    if (targetWeek.WEIGHT != sumWeight)
                    {
                        targetWeek.WEIGHT = sumWeight;
                        db.Updateable(targetWeek).ExecuteCommand();
                    }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_WeekProSpcDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当周的货品规格列表为0,同步TN_WeekProSpcDetail跳过");
                }
                // 同步 TN_MonthProSpcDetail
                var curMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).Date;
                var targetMonth = db.Queryable<TN_MonthProDetail>().First(a => a.DAYTIME == curMonth);
                targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curMonth && a.DOWNLINETIME <= curMonth.AddMonths(1)).ToList();
                specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当月的货品有哪些规格
                if (specList.Count > 0)
                {
                    foreach (var item in specList)
                    {
                        var targetMonth = db.Queryable<TN_MonthProDetail>().First(a => a.DAYTIME == curMonth && a.SPEC == item);
                if (targetMonth == null)
                {
                    targetMonth = new TN_MonthProDetail()
                    {
                        DAYTIME = curMonth,
                                SPEC = item,
                    };
                    db.Insertable(targetMonth).ExecuteCommand();
                }
                targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curMonth && a.DOWNLINETIME <= curMonth.AddMonths(1)).ToList();
                if (targetEPDs.Count > 0)
                        else
                {
                            var sumWeight = targetEPDs.Where(b => b.SPEC == item).Sum(a => a.WEIGHT);
                    if (targetMonth.WEIGHT != sumWeight)
                    {
                        targetMonth.WEIGHT = sumWeight;
                        db.Updateable(targetMonth).ExecuteCommand();
                    }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_MonthProSpcDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当月的货品规格列表为0,同步TN_MonthProSpcDetail跳过");
                }
                // 同步 TN_YearProSpcDetail
                var curYear = new DateTime(DateTime.Now.Year, 1, 1).Date;
                var targetYear = db.Queryable<TN_YearProDetail>().First(a => a.DAYTIME == curYear);
                targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curYear && a.DOWNLINETIME <= curYear.AddYears(1)).ToList();
                specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当年的货品有哪些规格
                if (specList.Count > 0)
                {
                    foreach (var item in specList)
                    {
                        var targetYear = db.Queryable<TN_YearProDetail>().First(a => a.DAYTIME == curYear && a.SPEC == item);
                if (targetYear == null)
                {
                    targetYear = new TN_YearProDetail()
                    {
                        DAYTIME = curYear,
                                SPEC = item,
                    };
                    db.Insertable(targetYear).ExecuteCommand();
                }
                targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curYear && a.DOWNLINETIME <= curYear.AddYears(1)).ToList();
                if (targetEPDs.Count > 0)
                        else
                {
                            var sumWeight = targetEPDs.Where(b => b.SPEC == item).Sum(a => a.WEIGHT);
                    if (targetYear.WEIGHT != sumWeight)
                    {
                        targetYear.WEIGHT = sumWeight;
                        db.Updateable(targetYear).ExecuteCommand();
                    }
                            else
                            {
                                LogHelper.Info("重量相等,同步TN_YearProSpcDetail跳过");
                            }
                        }
                    }
                }
                else
                {
                    LogHelper.Info("当年的货品规格列表为0,同步TN_YearProSpcDetail跳过");
                }
            }
            catch (Exception ex)
core/WCSCore.cs
@@ -143,10 +143,14 @@
                                    Task task19 = Task.Run(() =>
                                    {
                                        if (TN_Task.S_END_AREA == Settings.Areas[2])
                                        if (TN_Task.S_END_AREA == Settings.Areas[1])
                                        {
                                            SpecHelper.UpdateInventoryM_RuKu(TN_Task.S_CNTR_CODE);
                                        }
                                        else
                                        {
                                            LogHelper.Info($"更新WMS库存明细的入库时间跳过,TN_Task.S_END_AREA: {TN_Task.S_END_AREA }不等于 Settings.Areas[1]:{Settings.Areas[1]}");
                                        }
                                    });
                                    break;
models/TN_DayProDetail.cs
@@ -19,6 +19,11 @@
        public DateTime DAYTIME { get; set; }
        /// <summary>
        /// 规格
        /// </summary>
        public string SPEC { get; set; }
        /// <summary>
        /// 总重量
        /// </summary>
        public float WEIGHT { get; set; }
models/TN_InventoryM.cs
@@ -12,7 +12,7 @@
        /// <summary>
        /// 入库时间
        /// </summary>
        public DateTime INAREATIME { get; set; }
        public DateTime INAREATIME { get; set; } = System.DateTime.Now;
        /// <summary>
        /// 容器号
@@ -53,5 +53,10 @@
        /// 过期时间
        /// </summary>
        public DateTime EXPIRATION { get; set; }
        /// <summary>
        /// 距离过期还有几天
        /// </summary>
        public int EXPIRATION_DAY { get; set; } = 0;
    }
}
models/TN_MonthProDetail.cs
@@ -19,7 +19,12 @@
        public DateTime DAYTIME { get; set; }
        /// <summary>
        /// 总重量
        /// 规格
        /// </summary>
        public string SPEC { get; set; }
        /// <summary>
        /// 重量
        /// </summary>
        public float WEIGHT { get; set; }
models/TN_WeekProDetail.cs
@@ -19,7 +19,12 @@
        public DateTime DAYTIME { get; set; }
        /// <summary>
        /// 总重量
        /// 规格
        /// </summary>
        public string SPEC { get; set; }
        /// <summary>
        /// 重量
        /// </summary>
        public float WEIGHT { get; set; }
models/TN_YearProDetail.cs
@@ -19,7 +19,12 @@
        public DateTime DAYTIME { get; set; }
        /// <summary>
        /// 总重量
        /// 规格
        /// </summary>
        public string SPEC { get; set; }
        /// <summary>
        /// 重量
        /// </summary>
        public float WEIGHT { get; set; }
wms/SpecHelper.cs
@@ -368,7 +368,14 @@
                            LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId}");
                        }
                    }
                    else
                    {
                        LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId},TN_InventoryM为空");
                    }
                }
                else
                {
                    LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId},TN_CG_Detail为空");
                }
            }
            catch (Exception ex)
@@ -399,5 +406,30 @@
                LogHelper.Error("更新WMS库存明细的过期时间失败", ex);
            }
        }
        public static int CalculateDaysDifference(DateTime start, DateTime end)
        {
            try
            {
                // 计算总时间差
                TimeSpan difference = end - start;
                // 如果差值为负(end早于start),返回0
                if (difference.TotalDays < 0)
                {
                    return 0;
                }
                // 获取总天数(包括小数部分)
                double totalDays = difference.TotalDays;
                // 向上取整
                return (int)Math.Ceiling(totalDays);
            }
            catch (Exception ex)
            {
                return 0;
            }
        }
    }
}