Program.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
api/ApiHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
core/Monitor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
core/WCSCore.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/TN_DayProDetail.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/TN_InventoryM.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/TN_MonthProDetail.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/TN_WeekProDetail.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/TN_YearProDetail.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
wms/SpecHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | 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,204 +640,188 @@ 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)//该产线的起点没锁住 { 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)//该产线的起点没锁住 var cgInfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.RfId); if (cgInfo != null)//有残留的容器货品明细关系表信息 { var cgInfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.RfId); if (cgInfo != null)//有残留的容器货品明细关系表信息 result.resultCode = 1; result.resultMsg = $"该容器{model.RfId}已绑定货品{cgInfo.S_ITEM_CODE},如果要使用,容器先解绑货品"; LogHelper.Info(result.resultMsg); return result; } else { var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.RfId); if (locCntrRel != null)//当前容器是否绑定了货位 { result.resultCode = 1; result.resultMsg = $"该容器{model.RfId}已绑定货品{cgInfo.S_ITEM_CODE},如果要使用,容器先解绑货品"; result.resultCode = 2; result.resultMsg = $"该容器{model.RfId}已绑定货位{locCntrRel.S_LOC_CODE},如果要使用,容器先解绑货位"; LogHelper.Info(result.resultMsg); return result; } else { var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.RfId); if (locCntrRel != null)//当前容器是否绑定了货位 //新增货位容器关系表 locCntrRel = new TN_Loc_Container() { result.resultCode = 2; result.resultMsg = $"该容器{model.RfId}已绑定货位{locCntrRel.S_LOC_CODE},如果要使用,容器先解绑货位"; S_LOC_CODE = startPoint.PointOut, S_CNTR_CODE = model.RfId, }; var readBytes1 = S7Helper.ReadBytes(startPoint.ProductionLine_IP, 20, 2, 4); byte[] rfid = new byte[4] { readBytes1[0], readBytes1[1], readBytes1[2], readBytes1[3] }; string rfids16 = BitConverter.ToString(rfid); string rfids = (((readBytes1[0]) << 24) + (readBytes1[1] << 16) + (readBytes1[2] << 8) + readBytes1[3]).ToString(); LogHelper.Info($"产线容器号:{rfids},其16进制形式:{rfids16}"); if (rfids != model.RfId) { result.resultCode = 9; result.resultMsg = $"PDA填入的容器号{model.RfId}与S7产线通讯的容器号{rfids}不同"; LogHelper.Info(result.resultMsg); return result; } else var readBytes2 = S7Helper.ReadBytes(startPoint.ProductionLine_IP, 20, 26, 2); var modelWeight = ((readBytes2[0]) << 8) + readBytes2[1]; var modelCI = db.Queryable<TN_CAR_IN>().First(i => i.S_CAR_CODE == model.CarCode && i.S_CNTR_CODE == model.RfId && i.S_B_STATE == "0");//查询是否有这个对应的且状态正常的容器车号子表 TN_CG_Detail tN_CG_Detail = new TN_CG_Detail()//新增容器货品明细表 { //新增货位容器关系表 locCntrRel = new TN_Loc_Container() S_CNTR_CODE = model.RfId, S_ITEM_SPEC = model.Spe, S_SPE = model.Spe, S_CAR_CODE = model.CarCode, N_ITEM_STATE = 1, S_ITEM_STATE = "待检", F_QTY = modelWeight,//这里的重量要当成数量来使用 }; var endLoc = db.Queryable<TN_Location>(). Where(c => c.S_AREA_CODE == Settings.Areas[1] && c.S_LOCK_STATE == "无" && c.N_LOCK_STATE == 0 && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y"). OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可 if (endLoc != null) { var task1 = new TN_Task() { S_LOC_CODE = startPoint.PointOut, S_CODE = WCSHelper.GenerateTaskNo(), S_START_AREA = startLoc.S_AREA_CODE, S_END_AREA = endLoc.S_AREA_CODE, S_START_LOC = startLoc.S_CODE, S_END_LOC = endLoc.S_CODE, S_TYPE = "PDA满托下线入库", N_B_STATE = 0, S_CNTR_CODE = model.RfId, S_SPEC = model.Spe, }; var readBytes1 = S7Helper.ReadBytes(startPoint.ProductionLine_IP, 20, 2, 4); byte[] rfid = new byte[4] { readBytes1[0], readBytes1[1], readBytes1[2], readBytes1[3] }; string rfids16 = BitConverter.ToString(rfid); string rfids = (((readBytes1[0]) << 24) + (readBytes1[1] << 16) + (readBytes1[2] << 8) + readBytes1[3]).ToString(); LogHelper.Info($"产线容器号:{rfids},其16进制形式:{rfids16}"); startLoc.N_LOCK_STATE = 2; startLoc.S_LOCK_STATE = "出库锁"; startLoc.N_CURRENT_NUM = 1; startLoc.T_MODIFY = DateTime.Now; if (rfids != model.RfId) endLoc.N_LOCK_STATE = 1; endLoc.S_LOCK_STATE = "入库锁"; startLoc.T_MODIFY = DateTime.Now; using (var tran = db.Ado.UseTran()) { result.resultCode = 9; result.resultMsg = $"PDA填入的容器号{model.RfId}与S7产线通讯的容器号{rfids}不同"; LogHelper.Info(result.resultMsg); return result; } var readBytes2 = S7Helper.ReadBytes(startPoint.ProductionLine_IP, 20, 26, 2); var modelWeight = ((readBytes2[0]) << 8) + readBytes2[1]; var modelCI = db.Queryable<TN_CAR_IN>().First(i => i.S_CAR_CODE == model.CarCode && i.S_CNTR_CODE == model.RfId && i.S_B_STATE == "0");//查询是否有这个对应的且状态正常的容器车号子表 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_CAR_CODE = model.CarCode, N_ITEM_STATE = 1, S_ITEM_STATE = "待检", F_QTY = modelWeight,//这里的重量要当成数量来使用 }; var endLoc = db.Queryable<TN_Location>(). Where(c => c.S_AREA_CODE == Settings.Areas[1] && c.S_LOCK_STATE == "无" && c.N_LOCK_STATE == 0 && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y"). OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可 if (endLoc != null) { var task1 = new TN_Task() if (modelCI == null)//容器车号子表不存在 { S_CODE = WCSHelper.GenerateTaskNo(), S_START_AREA = startLoc.S_AREA_CODE, S_END_AREA = endLoc.S_AREA_CODE, S_START_LOC = startLoc.S_CODE, S_END_LOC = endLoc.S_CODE, S_TYPE = "PDA满托下线入库", N_B_STATE = 0, S_CNTR_CODE = model.RfId, S_SPEC = model.Spe, }; startLoc.N_LOCK_STATE = 2; startLoc.S_LOCK_STATE = "出库锁"; startLoc.N_CURRENT_NUM = 1; startLoc.T_MODIFY = DateTime.Now; endLoc.N_LOCK_STATE = 1; endLoc.S_LOCK_STATE = "入库锁"; startLoc.T_MODIFY = DateTime.Now; using (var tran = db.Ado.UseTran()) { if (modelCI == null)//容器车号子表不存在 modelCI = new TN_CAR_IN() { modelCI = new TN_CAR_IN() { S_CNTR_CODE = model.RfId, S_CAR_CODE = model.CarCode, S_B_STATE = "0", }; if (db.Insertable<TN_CAR_IN>(modelCI).ExecuteCommand() <= 0) { tran.RollbackTran(); result.resultCode = 8; result.resultMsg = $"新增的TN_CAR_IN表插入失败,容器:{modelCI.S_CNTR_CODE},车号:{modelCI.S_CAR_CODE}"; LogHelper.Info(result.resultMsg); return result; } } if (db.Insertable<TN_Task>(task1).ExecuteCommand() > 0 && db.Updateable<TN_Location>(startLoc).ExecuteCommand() > 0 && db.Updateable<TN_Location>(endLoc).ExecuteCommand() > 0 && db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 && db.Insertable<TN_CG_Detail>(tN_CG_Detail).ExecuteCommand() > 0)//创建搬送任务,起点终点容器 { tran.CommitTran(); result.resultCode = 0; result.resultMsg = "成功"; LogHelper.Info($"生成PDA满托下线入库任务成功,容器:{modelCI.S_CNTR_CODE},起点:{startPoint.PointOut},终点:{endLoc.S_CODE}"); Task task99 = Task.Run(() => { WMSHelper.InsertOpInfo(model.staff, "PDA满托下线入库", modelCI.S_CNTR_CODE); }); Task task98 = Task.Run(() => { var target = new TN_EquipProDetail() { S_ID = tN_CG_Detail.S_ID, TASKTYPE = "PDA满托下线入库", RFID = model.RfId, SPEC = woInfo.S_ITEM_SPEC, CARCODE = model.CarCode, WEIGHT = modelWeight, ITEMSTATE = "待检", ITEMCODE = woInfo.S_ITEM_CODE, LOGINNAME = model.staff, SHIFT = "None", STARTLOC = startLoc.S_CODE, }; SpecHelper.InsertEquipProDetail(target); }); Task task27 = Task.Run(() => { var target = new TN_InventoryM() { S_ID = tN_CG_Detail.S_ID, RFID = model.RfId, SPEC = woInfo.S_ITEM_SPEC, WEIGHT = modelWeight, ITEMSTATE = "待检", ITEMCODE = woInfo.S_ITEM_CODE, LOGINNAME = model.staff, SHIFT = "None", }; SpecHelper.InsertInventoryM(target); }); return result; } else S_CNTR_CODE = model.RfId, S_CAR_CODE = model.CarCode, S_B_STATE = "0", }; if (db.Insertable<TN_CAR_IN>(modelCI).ExecuteCommand() <= 0) { tran.RollbackTran(); result.resultCode = 7; result.resultMsg = $"生成满托下线入库任务失败,容器:{modelCI.S_CNTR_CODE},起点:{startPoint.PointOut},终点:{endLoc.S_CODE}"; result.resultCode = 8; result.resultMsg = $"新增的TN_CAR_IN表插入失败,容器:{modelCI.S_CNTR_CODE},车号:{modelCI.S_CAR_CODE}"; LogHelper.Info(result.resultMsg); return result; } } } else { result.resultCode = 4; result.resultMsg = $"未找到合适的终点,容器:{modelCI.S_CNTR_CODE}"; LogHelper.Info(result.resultMsg); return result; if (db.Insertable<TN_Task>(task1).ExecuteCommand() > 0 && db.Updateable<TN_Location>(startLoc).ExecuteCommand() > 0 && db.Updateable<TN_Location>(endLoc).ExecuteCommand() > 0 && db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 && db.Insertable<TN_CG_Detail>(tN_CG_Detail).ExecuteCommand() > 0)//创建搬送任务,起点终点容器 { tran.CommitTran(); result.resultCode = 0; result.resultMsg = "成功"; LogHelper.Info($"生成PDA满托下线入库任务成功,容器:{modelCI.S_CNTR_CODE},起点:{startPoint.PointOut},终点:{endLoc.S_CODE}"); Task task99 = Task.Run(() => { WMSHelper.InsertOpInfo(model.staff, "PDA满托下线入库", modelCI.S_CNTR_CODE); }); Task task98 = Task.Run(() => { var target = new TN_EquipProDetail() { S_ID = tN_CG_Detail.S_ID, TASKTYPE = "PDA满托下线入库", RFID = model.RfId, SPEC = model.Spe, CARCODE = model.CarCode, WEIGHT = modelWeight, ITEMSTATE = "待检", LOGINNAME = model.staff, SHIFT = "None", STARTLOC = startLoc.S_CODE, }; SpecHelper.InsertEquipProDetail(target); }); Task task27 = Task.Run(() => { var target = new TN_InventoryM() { S_ID = tN_CG_Detail.S_ID, RFID = model.RfId, SPEC = model.Spe, WEIGHT = modelWeight, ITEMSTATE = "待检", LOGINNAME = model.staff, SHIFT = "None", }; SpecHelper.InsertInventoryM(target); }); return result; } else { tran.RollbackTran(); result.resultCode = 7; result.resultMsg = $"生成满托下线入库任务失败,容器:{modelCI.S_CNTR_CODE},起点:{startPoint.PointOut},终点:{endLoc.S_CODE}"; LogHelper.Info(result.resultMsg); return result; } } } else { result.resultCode = 4; result.resultMsg = $"未找到合适的终点,容器:{modelCI.S_CNTR_CODE}"; LogHelper.Info(result.resultMsg); return result; } } } else { result.resultCode = 9; result.resultMsg = $"此位置:{startPoint.PointOut}已锁住"; LogHelper.Info(result.resultMsg); return result; } } else { result.resultCode = 10; result.resultMsg = $"当前产线{startPoint.ProductionLine_Name}位置{startPoint.PointOut}没有开启的工单"; result.resultCode = 9; result.resultMsg = $"此位置:{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); @@ -540,98 +541,172 @@ 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). 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); if (targetDay == null) { targetDay = new TN_DayProDetail() { DAYTIME = curDay, }; 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); var specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当天的货品有哪些规格 if (targetEPDs.Count > 0) if (specList.Count>0) { if (targetDay.WEIGHT != sumWeight) foreach (var item in specList) { targetDay.WEIGHT = sumWeight; db.Updateable(targetDay).ExecuteCommand(); } 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(); } 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); if (targetWeek == null) { targetWeek = new TN_WeekProDetail() { DAYTIME = curWeek, }; db.Insertable(targetWeek).ExecuteCommand(); } targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curWeek && a.DOWNLINETIME <= curWeek.AddDays(7)).ToList(); if (targetEPDs.Count > 0) specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当周的货品有哪些规格 if (specList.Count > 0) { if (targetWeek.WEIGHT != sumWeight) foreach (var item in specList) { targetWeek.WEIGHT = sumWeight; db.Updateable(targetWeek).ExecuteCommand(); 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(); } 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); if (targetMonth == null) { targetMonth = new TN_MonthProDetail() { DAYTIME = curMonth, }; db.Insertable(targetMonth).ExecuteCommand(); } targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curMonth && a.DOWNLINETIME <= curMonth.AddMonths(1)).ToList(); if (targetEPDs.Count > 0) specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当月的货品有哪些规格 if (specList.Count > 0) { if (targetMonth.WEIGHT != sumWeight) foreach (var item in specList) { targetMonth.WEIGHT = sumWeight; db.Updateable(targetMonth).ExecuteCommand(); 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(); } 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); if (targetYear == null) { targetYear = new TN_YearProDetail() { DAYTIME = curYear, }; db.Insertable(targetYear).ExecuteCommand(); } targetEPDs = db.Queryable<TN_EquipProDetail>().Where(a => a.DOWNLINETIME >= curYear && a.DOWNLINETIME <= curYear.AddYears(1)).ToList(); if (targetEPDs.Count > 0) specList = targetEPDs.Select(a => a.SPEC).Distinct().ToList();//当年的货品有哪些规格 if (specList.Count > 0) { if (targetYear.WEIGHT != sumWeight) foreach (var item in specList) { targetYear.WEIGHT = sumWeight; db.Updateable(targetYear).ExecuteCommand(); 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(); } 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; } } } }