using HH.WCS.Mobox3.DoubleCoin.models; using HH.WCS.Mobox3.DoubleCoin.util; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WCS.Mobox3.DoubleCoin.wms { public class SpecHelper { /// /// 获取静置时间 /// /// /// public static int GetWaitTime(string spec) { try { var db = new SqlHelper().GetInstance(); var specConfig = db.Queryable().First(o => o.S_SPE == spec); if (specConfig != null) { return specConfig.N_STANDING_TIME ?? 1; } else { return 1; } } catch (Exception ex) { LogHelper.Error("获取静置时间失败", ex); return 1; } } /// /// 获取过期时间 /// /// /// public static int GetExportTime(string spec) { try { var db = new SqlHelper().GetInstance(); var specConfig = db.Queryable().First(o => o.S_SPE == spec); if (specConfig != null) { return specConfig.N_EXPIRE_TIME ?? 1; } else { return 1; } } catch (Exception ex) { LogHelper.Error("获取过期时间失败", ex); return 1; } } /// /// 插入设备生产明细 /// public static void InsertEquipProDetail(TN_EquipProDetail model) { try { var db = new SqlHelper().GetInstance(); var log = JsonConvert.SerializeObject(model); if (model != null) { model.EXPIRATION = System.DateTime.Now.AddHours(GetExportTime(model.SPEC)); if (db.Insertable(model).ExecuteCommand() > 0) { LogHelper.Info($"插入设备生产明细成功,{log}"); } else { LogHelper.Info($"插入设备生产明细失败,{log}"); } } } catch (Exception ex) { LogHelper.Error("插入设备生产明细失败", ex); } } /// /// 插入部件用料明细 /// /// public static void InsertComponentDetail(TN_Component_Detail model) { try { var db = new SqlHelper().GetInstance(); var log = JsonConvert.SerializeObject(model); if (model != null) { model.OUTAREATIME = System.DateTime.Now; model.TYPE = "满托出库上线"; if (db.Insertable(model).ExecuteCommand() > 0) { LogHelper.Info($"插入部件用料明细成功,{log}"); } else { LogHelper.Info($"插入部件用料明细失败,{log}"); } } } catch (Exception ex) { LogHelper.Error("插入部件用料明细失败", ex); } } /// /// 更新部件用料明细 /// public static void UpdateComponentDetail(string taskNo) { try { var db = new SqlHelper().GetInstance(); var target = db.Queryable().First(o => o.TASKNO == taskNo); if (target != null) { target.ENDTIME = System.DateTime.Now; if (db.Updateable(target).ExecuteCommand() > 0) { LogHelper.Info($"更新部件用料明细成功,{taskNo}"); } else { LogHelper.Info($"更新部件用料明细失败,{taskNo}"); } } } catch (Exception ex) { LogHelper.Error("更新部件用料明细失败", ex); } } /// /// 插入回炉料明细 /// /// public static void InsertRemeltDetail(TN_RemeltDetail model) { try { var db = new SqlHelper().GetInstance(); var log = JsonConvert.SerializeObject(model); if (model != null) { model.REMELTTIME = System.DateTime.Now; if (db.Insertable(model).ExecuteCommand() > 0) { LogHelper.Info($"插入回炉料明细成功,{log}"); } else { LogHelper.Info($"插入回炉料明细失败,{log}"); } } } catch (Exception ex) { LogHelper.Error("插入回炉料明细失败", ex); } } /// /// 更新回炉料明细 /// public static void UpdateRemeltDetail(string taskNo) { try { var db = new SqlHelper().GetInstance(); var target = db.Queryable().First(o => o.TASKNO == taskNo); if (target != null) { target.ENDTIME = System.DateTime.Now; if (db.Updateable(target).ExecuteCommand() > 0) { LogHelper.Info($"更新回炉料明细成功,{taskNo}"); } else { LogHelper.Info($"更新回炉料明细失败,{taskNo}"); } } } catch (Exception ex) { LogHelper.Error("更新回炉料明细失败", ex); } } /// /// 插入余料回库明细 /// /// public static void InsertSurplusDetail(TN_SurplusDetail model) { try { var db = new SqlHelper().GetInstance(); var log = JsonConvert.SerializeObject(model); if (model != null) { model.REMELTTIME = System.DateTime.Now; if (db.Insertable(model).ExecuteCommand() > 0) { LogHelper.Info($"插入余料回库明细成功,{log}"); } else { LogHelper.Info($"插入余料回库明细失败,{log}"); } } } catch (Exception ex) { LogHelper.Error("插入余料回库明细失败", ex); } } /// /// 更新余料回库明细 /// public static void UpdateSurplusDetail(string taskNo) { try { var db = new SqlHelper().GetInstance(); var target = db.Queryable().First(o => o.TASKNO == taskNo); if (target != null) { target.ENDTIME = System.DateTime.Now; if (db.Updateable(target).ExecuteCommand() > 0) { LogHelper.Info($"更新余料回库明细成功,{taskNo}"); } else { LogHelper.Info($"更新余料回库明细失败,{taskNo}"); } } } catch (Exception ex) { LogHelper.Error("更新余料回库明细失败", ex); } } /// /// 重置终点货位,只针对去线边的货品和去原材料产线的空托 /// /// internal static void RestEndLoc(TN_Task tN_Task) { try { if ( tN_Task.S_END_AREA == Settings.Areas[2] || tN_Task.S_TYPE.Contains("满托出库上线") || Settings.ProductionLines.Select(a=>a.PointIn).ToList().Contains(tN_Task.S_END_LOC) || tN_Task.S_TYPE.Contains("线边空托上线") ) { var db = new SqlHelper().GetInstance(); using (var tran = db.Ado.UseTran()) { var endLoc = db.Queryable().First(a => a.S_CODE == tN_Task.S_END_LOC); if (endLoc != null) { endLoc.N_CURRENT_NUM = 0; endLoc.N_LOCK_STATE = 0; endLoc.S_LOCK_STATE = "无"; if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0) { LogHelper.Info($"更新终点货位成功,{JsonConvert.SerializeObject(endLoc)}"); } else { LogHelper.Info($"更新终点货位失败,{JsonConvert.SerializeObject(endLoc)}"); tran.RollbackTran(); return; } var locCnt = db.Queryable().First(a => a.S_LOC_CODE == endLoc.S_CODE); if (locCnt != null) { var cgInfo = db.Queryable().First(a => a.S_CNTR_CODE == locCnt.S_CNTR_CODE); if (db.Deleteable(locCnt).ExecuteCommand() > 0) { LogHelper.Info($"删除货位容器绑定关系成功,{JsonConvert.SerializeObject(locCnt)}"); } else { LogHelper.Info($"删除货位容器绑定关系失败,{JsonConvert.SerializeObject(locCnt)}"); tran.RollbackTran(); return; } if (cgInfo != null) { if (db.Deleteable(cgInfo).ExecuteCommand() > 0) { LogHelper.Info($"删除容器货品明细成功,{JsonConvert.SerializeObject(cgInfo)}"); } else { LogHelper.Info($"删除容器货品明细失败,{JsonConvert.SerializeObject(cgInfo)}"); tran.RollbackTran(); return; } } } } tran.CommitTran(); LogHelper.Info($"重置终点货位,成功,{JsonConvert.SerializeObject(tN_Task)}"); return; } } else { LogHelper.Info($"当前任务终点货位不是去线边,不需要重置终点货位,{JsonConvert.SerializeObject(tN_Task)}"); return; } } catch (Exception ex) { LogHelper.Error("重置终点货位,只针对去线边的货品 失败", ex); } } /// /// 更新余料回库明细 /// public static void UpdateSurplusDetail(string taskNo,float weight) { try { var db = new SqlHelper().GetInstance(); var target = db.Queryable().First(o => o.TASKNO == taskNo); if (target != null) { target.WEIGHT = weight; if (db.Updateable(target).ExecuteCommand() > 0) { LogHelper.Info($"更新余料回库明细成功,{taskNo}"); } else { LogHelper.Info($"更新余料回库明细失败,{taskNo}"); } } } catch (Exception ex) { LogHelper.Error("更新余料回库明细失败", ex); } } /// /// 插入WMS库存明细 /// /// public static void InsertInventoryM(TN_InventoryM model) { try { var db = new SqlHelper().GetInstance(); var log = JsonConvert.SerializeObject(model); if (model != null) { model.EXPIRATION = System.DateTime.Now.AddHours(GetExportTime(model.SPEC)); if (db.Storageable(model).ExecuteCommand() > 0) { LogHelper.Info($"插入WMS库存明细成功,{log}"); } else { LogHelper.Info($"插入WMS库存明细失败,{log}"); } } } catch (Exception ex) { LogHelper.Error("插入WMS库存明细失败", ex); } } /// /// 更新WMS库存明细的入库时间 /// public static void UpdateInventoryM_RuKu(string cntId) { try { var db = new SqlHelper().GetInstance(); var target = db.Queryable().First(a => a.S_CNTR_CODE == cntId); if (target != null) { var targetM = db.Queryable().First(a => a.S_ID == target.S_ID || a.RFID == cntId); if (targetM != null) { targetM.INAREATIME = System.DateTime.Now; if(db.Updateable(targetM).UpdateColumns(it => new { it.INAREATIME }).ExecuteCommand() > 0) { LogHelper.Info($"更新WMS库存明细的入库时间,成功,容器号:{cntId}"); } else { LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId}"); } } else { LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId},TN_InventoryM为空"); } } else { LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId},TN_CG_Detail为空"); } } catch (Exception ex) { LogHelper.Error("更新WMS库存明细的入库时间失败", ex); } } /// /// 删除WMS库存明细 /// public static void DeleteInventoryM(TN_Task taskTn) { try { if (taskTn.S_START_AREA == Settings.Areas[1] || taskTn.S_TYPE.Contains("满托出库上线")) //不是从满托缓存库区移出就不删除 { var db = new SqlHelper().GetInstance(); if (db.Deleteable().Where(it => it.S_ID == taskTn.S_ID || it.RFID == taskTn.S_CNTR_CODE).ExecuteCommand() > 0) { LogHelper.Info($"删除WMS库存明细,成功,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}"); } else { LogHelper.Info($"删除WMS库存明细,失败,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}"); } } else { LogHelper.Info($"不是从满托缓存库区搬出的货位,不需要删除库存明细,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}"); return; } } catch (Exception ex) { 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 totalHours = difference.TotalHours; // 向上取整 return (int)Math.Ceiling(totalHours); } catch (Exception ex) { return 0; } } } }