From c8f338feee0b6003d8f069b1d37fd9b90dd1b7f4 Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期一, 07 七月 2025 17:31:38 +0800 Subject: [PATCH] 印尼佳通优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs | 259 ++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 210 insertions(+), 49 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs index 66bc083..3cce68b 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs @@ -11,6 +11,7 @@ using System.Globalization; using System.Linq; using System.Linq.Expressions; +using System.Numerics; using System.Reflection; using System.Runtime.ConstrainedExecution; using System.Threading.Tasks; @@ -32,6 +33,10 @@ var id = SYSHelper.GetSerialNumber("鍒嗘嫞鍗�, "SO"); var date = DateTime.Now.ToString("yyMMdd"); return $"SO{date}{id.ToString().PadLeft(4, '0')}"; + } + internal static int GenerateStockRecordNo() + { + return SYSHelper.GetSerialNumber("搴撳瓨璁板綍鍙�, "SR"); } internal static string GenerateAlarmNo() @@ -131,7 +136,13 @@ task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE); db.Updateable<WMSTask>(task).UpdateColumns(a => new { a.N_TYPE,a.N_B_STATE, a.S_B_STATE, a.T_MODIFY,a.T_END_TIME }).ExecuteCommand(); } - + + internal static void UpdateWmsTask(WMSTask task) + { + var db = new SqlHelper<object>().GetInstance(); + task.T_MODIFY = DateTime.Now; + db.Updateable<WMSTask>(task).ExecuteCommand(); + } internal static bool UpdateTaskEnd(WMSTask a) { var db = new SqlHelper<object>().GetInstance(); @@ -267,14 +278,14 @@ /// </summary> /// <param name="itemCode"></param> /// <returns></returns> - public static List<CntrItemRel> getZZKInventoryInfo(string itemCode) + public static DateTime getZZKInventoryInfo(string itemCode) { + DateTime inboundTime = DateTime.MinValue; var db = new SqlHelper<object>().GetInstance(); - List < CntrItemRel > cntrItemRels = new List<CntrItemRel>(); string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).Select(a => a.areaCode).FirstOrDefault(); if (areaCode != null) { - cntrItemRels = db.Queryable<CntrItemRel>() + inboundTime = db.Queryable<CntrItemRel>() .LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) .LeftJoin<Location>((a, b, c) => b.S_LOC_CODE == c.S_CODE) .LeftJoin<Container>((a, b, c, d) => a.S_CNTR_CODE == d.S_CODE) @@ -285,9 +296,10 @@ && d.N_E_STATE == 0 // 鎵樼洏姝e父 ) .OrderBy((a, b, c, d) => a.T_INBOUND_TIME) - .ToList(); + .Select((a, b, c, d) => a.T_INBOUND_TIME) + .First(); } - return cntrItemRels; + return inboundTime; } /// <summary> @@ -310,9 +322,14 @@ .LeftJoin<CntrItemRel>((a, b, c, d) => c.S_CODE == d.S_CNTR_CODE) .Where((a, b, c, d) => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE.Trim() == "Y" ); - if (areaCode != null && areaCode != "") + if (areaCode != null && areaCode != "") { - queryable = queryable.Where((a, b, c, d ) => a.S_AREA_CODE.Trim() == areaCode); + queryable = queryable.Where((a, b, c, d) => a.S_AREA_CODE.Trim() == areaCode); + } + else + { + List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); + queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim())); } if (traySatus == 0) { @@ -424,7 +441,7 @@ return location; } - public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") { + public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") { var db = new SqlHelper<object>().GetInstance(); bool result = true; LogHelper.Info(alarmMsg, logSite); @@ -502,26 +519,6 @@ /// <summary> /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬�- /// 娉細 - /// 1.鏌ヨ寮傚父鍖鸿揣浣�- /// </summary> - /// <param name="areaCode">搴撳尯</param> - /// <param name="property">璐т綅灞炴�锛�.鐩磋繛 2.闈炵洿杩烇級</param> - /// <param name="type">鍔ㄤ綔绫诲瀷锛�.浜哄伐鎺ラ┏浣�1.鍏ュ簱鎺ラ┏浣�2.鍑哄簱鎺ラ┏浣嶏級</param> - /// <returns></returns> - public static Location GetTransfeRelevanceLoc(string areaCode ,int type ,int property ) - { - Location loc = null; - var db = new SqlHelper<object>().GetInstance(); - loc = db.Queryable<Location>() - .LeftJoin<TransfeRelevance>((a,b)=> a.S_CODE == b.S_LOC_CODE) - .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_TYPE == type && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") - .First(); - return loc; - } - - /// <summary> - /// 鏌ヨ鎺ラ┏浣嶅叧鑱斿睘鎬� /// </summary> /// <param name="locCode"></param> /// <param name="isManual">璐т綅灞炴� (0.闈炰汉宸�1.浜哄伐)</param> @@ -539,16 +536,15 @@ /// 娉細鏌ヨ浠诲姟鏈�皯鐨勬帴椹充綅 /// </summary> /// <param name="areaCode">搴撳尯</param> - /// <param name="property">璐т綅灞炴� ( 1.鐩磋繛 2.闈炵洿杩�</param> /// <param name="type">鍔ㄤ綔绫诲瀷 锛�.鍏ュ簱鎺ラ┏浣� 2.鍑哄簱鎺ラ┏浣嶏級</param> /// <returns></returns> - public static Location GetMinTaskTransfeLoc(string areaCode ,int type, int property) + public static Location GetMinTaskTransfeLoc(string areaCode ,int type) { var db = new SqlHelper<object>().GetInstance(); var loc = db.Queryable<Location>() .LeftJoin<TransfeRelevance>((a,b) => a.S_CODE == b.S_LOC_CODE) .LeftJoin<WCSTask>((a,b,c) => a.S_CODE == c.S_END_LOC && c.N_B_STATE < 3) - .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode && b.N_TYPE == type && b.N_PROPERTY == property && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y") + .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode && b.N_TYPE == type && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y") .GroupBy((a, b, c) => a.S_CODE) .Select((a, b, c) => new { count = SqlFunc.AggregateCount(c.S_END_LOC), @@ -597,46 +593,140 @@ /// <summary> /// 璇诲彇MES涓嬫枡浠诲姟 - /// 1.澶囦唤瀹瑰櫒鐗╂枡淇℃伅 - /// 2.鏇存柊涓棿琛ㄧ姸鎬佷负宸茶 + /// 1.璇诲彇MES涓嬪彂浠诲姟琛�+ /// 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+ /// 3.璇诲彇鍩虹鐗╂枡淇℃伅琛� /// </summary> /// <param name="taskNo"></param> /// <param name="id"></param> /// <returns></returns> - internal static LjMesTask readLjMesOffItemTask(string taskNo , int id) + internal static bool readLjMesOffItemTask(string taskNo , int id) { + bool res = true; LogHelper.Info($"鏌ヨ鍒癕ES涓嬪彂WMS浠诲姟,mesTaskId:{id},浠诲姟鍙�{taskNo}" , "WMS"); var db = new SqlHelper<object>().GetInstance(); try { db.BeginTran(); - // 1.鏌ヨMES浠诲姟琛�+ // 1.璇诲彇MES涓嬪彂浠诲姟琛� var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id && a.RECEIVE_FLAG.Trim() == "PENDING" ).OrderByDescending(a => a.T_CREATE).First(); if (mesTask != null) { - // 閲嶇疆绌哄伐瑁呬俊鎭�- ContainerHelper.AddContainer(mesTask.PALLET_ID, int.Parse(mesTask.PALLET_TYPE),mesTask.QTY == 0 ? 0 : 1); - - mesTask.AGVORDER_ID = taskNo; - mesTask.RETURN_CODE = "1"; - mesTask.RECEIVE_FLAG = "COMPLETE"; - mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); - db.Updateable(mesTask).ExecuteCommand(); + // 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+ res = updateCarrier(mesTask.PALLET_ID); + if (res) + { + mesTask.AGVORDER_ID = taskNo; + mesTask.RETURN_CODE = "1"; + mesTask.RECEIVE_FLAG = "COMPLETE"; + mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + db.Updateable(mesTask).ExecuteCommand(); + } } else { - LogHelper.Info("鏈煡璇㈠埌MES涓嬪彂WMS浠诲姟", "WMS"); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈煡璇㈠埌MES涓嬪彂鐨勪换鍔�MES浠诲姟ID锛歿id}"); } db.CommitTran(); - return mesTask; } catch (Exception ex) { + res = false; db.RollbackTran(); LogHelper.Info($"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}" , "WMS"); WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}"); } - return null; + return res; + } + + public static bool updateCarrier(string palletId) + { + bool res = true; + var db = new SqlHelper<object>().GetInstance(); + var container = ContainerHelper.GetCntr(palletId); + if (container != null) + { + // 1.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+ var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First(); + if (lotCarrier != null) + { + CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).First(); + if (cntrItemRel != null) + { + cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID; + cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME; + cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH; + cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE; + cntrItemRel.F_QTY = lotCarrier.QTY; + cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE; + cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS; + cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE; + cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE; + db.Updateable(cntrItemRel).ExecuteCommand(); + } + else + { + cntrItemRel = new CntrItemRel() + { + S_CNTR_CODE = lotCarrier.PALLET_ID, + S_BATCH_NO = lotCarrier.LOT_NAME, + S_SERIAL_NO = lotCarrier.YCL_BATCH, + S_ITEM_CODE = lotCarrier.MATERIALCODE, + F_QTY = lotCarrier.QTY, + D_PRD_DATE = lotCarrier.PRODUCTION_DATE, + S_ITEM_STATE = lotCarrier.QC_STATUS, + D_EXP_DATE = lotCarrier.SHELFLIFE_DATE, + D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE, + }; + db.Insertable(cntrItemRel).ExecuteCommand(); + } + + lotCarrier.RECEIVE_FLAG = "COMPLETE"; + lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); + db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand(); + + // 璇诲彇鍩虹鐗╂枡淇℃伅琛�+ var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First(); + if (material != null) + { + TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First(); + + if (tn_material != null) + { + tn_material.S_ITEM_CODE = material.MATERIAL_CODE; + tn_material.S_ITEM_NAME = material.MATERIAL_NAME; + tn_material.S_SPEC = material.SPEC; + tn_material.S_MODEL = material.MODEL; + tn_material.S_UNIT = material.UNIT; + tn_material.S_MEMO = material.MEMO; + db.Updateable(material).ExecuteCommand(); + } + else + { + tn_material = new TN_Material() + { + S_ITEM_CODE = material.MATERIAL_CODE, + S_ITEM_NAME = material.MATERIAL_NAME, + S_SPEC = material.SPEC, + S_MODEL = material.MODEL, + S_UNIT = material.UNIT, + S_MEMO = material.MEMO, + }; + db.Insertable(material).ExecuteCommand(); + } + + material.RECEIVE_FLAG = "COMPLETE"; + material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); + db.Updateable(material).ExecuteCommand(); + } + } + } + else + { + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈湪WMS绯荤粺涓煡璇㈠埌瀹瑰櫒淇℃伅,瀹瑰櫒缂栫爜锛歿palletId}"); + res = false; + } + return res; } /// <summary> @@ -648,6 +738,7 @@ var lotCarrierList = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList(); foreach (var lotCarrier in lotCarrierList) { + // 鍐欏叆鏂滆鎵樼洏鐗╂枡淇℃伅涓棿琛� CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == lotCarrier.PALLET_ID).First(); if (cntrItemRel != null) @@ -734,7 +825,6 @@ /// <returns></returns> internal static LjLotCarrier getLjCntrMaterial(string trayNo) { - // 1.鏌ヨMES浠诲姟琛� var db = new SqlHelper<object>().GetInstance(); var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID.Trim() == trayNo).First(); return lotCarrier; @@ -865,6 +955,28 @@ } /// <summary> + /// 鏌ヨMES浠诲姟琛�鐜甫) + /// </summary> + /// <returns></returns> + public static List<LjMesTask> GetLjMesTaskListHD() + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LjMesTask>().Where(a => (a.PALLET_TYPE == "5" || a.PALLET_TYPE == "6") && (a.RETURN_CODE.Trim() == "0" || a.RETURN_CODE.Trim() == "1" || a.RETURN_CODE.Trim() == "2")).ToList(); + } + + /// <summary> + /// 鏇存柊MES浠诲姟鐘舵� + /// </summary> + /// <returns></returns> + public static bool updateMesTaskStatus(LjMesTask mesTask) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable<LjMesTask>(mesTask).ExecuteCommand() > 0; + return result; + } + + /// <summary> /// 鏇存柊MES浠诲姟鐘舵� /// </summary> /// <param name="taskNo"></param> @@ -959,9 +1071,20 @@ // -----------------------------------------鏂滆涓棿琛�--------------------------------------------- + /// <summary> + /// 鏇存柊MES浠诲姟鐘舵� + /// </summary> + /// <returns></returns> + public static bool updateXcTaskStatus(LjXcTask xcTask) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + result = db.Updateable<LjXcTask>(xcTask).ExecuteCommand() > 0; + return result; + } /// <summary> - /// 涓嬪彂XC浠诲姟 + /// 灏哅ES涓嬪彂浠诲姟銆佹墭鐩樼墿鏂欎俊鎭�杞彂缁欐枩瑁� /// </summary> /// <param name="mesTask"></param> /// <returns></returns> @@ -970,6 +1093,37 @@ bool result = false; var db = new SqlHelper<object>().GetInstance(); if (mesTask != null) { + if (mesTask.MSG_TYPE == "1") + { + // 杞彂鎵樼洏鐗╂枡淇℃伅 + var ljLotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID == mesTask.PALLET_ID && a.RECEIVE_FLAG == "PENDING").OrderByDescending(a => a.CREATION_DATE).First(); + if (ljLotCarrier != null) + { + LjXcCarrier ljXcCarrier = new LjXcCarrier() + { + ID = ljLotCarrier.ID, + PALLET_ID = ljLotCarrier.PALLET_ID, + LOT_NAME = ljLotCarrier.LOT_NAME, + YCL_BATCH = ljLotCarrier.YCL_BATCH, + MATERIALCODE = ljLotCarrier.MATERIALCODE, + QTY = ljLotCarrier.QTY, + PRODUCTION_DATE = ljLotCarrier.PRODUCTION_DATE, + QC_STATUS = ljLotCarrier.QC_STATUS, + SHELFLIFE_DATE = ljLotCarrier.SHELFLIFE_DATE, + MINSHELFLIFE_DATE = ljLotCarrier.MINSHELFLIFE_DATE, + CREATION_DATE = ljLotCarrier.CREATION_DATE, + RECEIVE_FLAG = ljLotCarrier.RECEIVE_FLAG, + }; + var bo = db.Insertable<LjXcCarrier>(ljXcCarrier).ExecuteCommand() > 0; + if (bo) + { + ljLotCarrier.RECEIVE_FLAG = "COMPLETE"; + ljLotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + db.Updateable<LjLotCarrier>(ljLotCarrier).ExecuteCommand(); + } + } + } + LjXcTask ljXcTask = new LjXcTask() { ID = mesTask.ID, POSITION_ID = mesTask.POSITION_ID, @@ -988,6 +1142,13 @@ PLAN_ID = mesTask.PLAN_ID }; result = db.Insertable<LjXcTask>(ljXcTask).ExecuteCommand() > 0; + if (result) + { + mesTask.RETURN_CODE = "1"; + mesTask.RECEIVE_FLAG = "COMPLETE"; + mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + db.Updateable<LjMesTask>(mesTask).ExecuteCommand(); + } } return result; } -- Gitblit v1.9.1