From d44e3abf0d51cfea1ed7df510974d69458cf516d Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期三, 04 六月 2025 17:11:59 +0800 Subject: [PATCH] 印尼佳通半制品变更需求开发 --- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs | 363 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 363 insertions(+), 0 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs new file mode 100644 index 0000000..70d1b56 --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs @@ -0,0 +1,363 @@ +锘縰sing HH.WCS.Mobox3.FJJF.models; +using HH.WCS.Mobox3.FJJT.api; +using HH.WCS.Mobox3.FJJT.device; +using HH.WCS.Mobox3.FJJT.models; +using HH.WCS.Mobox3.FJJT.process; +using HH.WCS.Mobox3.FJJT.util; +using HH.WCS.Mobox3.FJJT.wms; +using NLog.Fluent; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Web.UI.WebControls; +using static HH.WCS.Mobox3.FJJT.api.ApiHelper; +using static HH.WCS.Mobox3.FJJT.util.Settings; + +namespace HH.WCS.Mobox3.FJJT.core +{ + /// <summary> + /// 瀹氭椂杞浠诲姟 + /// </summary> + internal class Monitor + { + + /// <summary> + /// 鐩戝惉MES浠诲姟涓棿琛�+ /// 1.閽㈠寘婊℃枡涓嬬嚎 + /// 2.鎴愬瀷鏈哄彨鏂�+ /// </summary> + public static void MonitorMesTask() { + LogHelper.Info("鐩戝惉MES浠诲姟涓棿琛�, "WMS"); + var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING"); + foreach (var mesTask in mesTaskList) + { + // 1.閽㈠寘婊℃枡涓嬬嚎 + List<string> lineLoclist = new List<string>() { }; + lineLoclist.Add("GBJTW-01"); + lineLoclist.Add("GBJTW-02"); + if (mesTask.MSG_TYPE == "1" && mesTask.PALLET_TYPE == "7" && lineLoclist.Contains(mesTask.PALLET_ID)) + { + LogHelper.Info("MES閽㈠寘婊℃枡涓嬬嚎浠诲姟", "WMS"); + OffLineRequest request = new OffLineRequest(){ loc = mesTask.POSITION_ID, cntrNo = mesTask.PALLET_ID}; + ApiHelper.offLineProcess(request); + } + + // 2.鎴愭柊鏈哄彨鏂�+ if (mesTask.MSG_TYPE == "0") { + var lineSideLoc = WMSHelper.GetLineSideLoc(mesTask.POSITION_ID); + if (lineSideLoc != null ) + { + LogHelper.Info("MES鎴愭柊鏈哄彨鏂欎换鍔�, "WMS"); + + // 2.1鎴愭柊鏈哄彨鏂�鏂滆) + if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6") + { + var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID); + if (xcTask == null) + { + ApiHelper.callMaterialHDK(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); + } + else + { + mesTask.RETURN_CODE = xcTask.RETURN_CODE; + mesTask.RECEIVE_FLAG = xcTask.RECEIVE_FLAG; + mesTask.RECEIVE_DATE = xcTask.RECEIVE_DATE; + WMSHelper.updateLjMesTask(mesTask); + } + } + else + { + // 2.2 鎴愭柊鏈哄彨鏂�+ ApiHelper.callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); + } + } + } + } + } + + /// <summary> + /// 鐩戝惉XC鍑哄簱浠诲姟涓棿琛�+ /// 璇诲彇鏂滆绔嬪簱鍑哄簱浠诲姟琛紝鏌ヨ浠诲姟鏄惁鎵ц瀹屾垚锛屽畬鎴愬垯锛岃Е鍙慉GV浠诲姟 + /// </summary> + public static void MonitorXcOutTask() + { + var xcOutTasks = WMSHelper.getLjXcOutTask("PENDING", "2"); + foreach (var outTask in xcOutTasks) + { + var mesTask = WMSHelper.GetLjMesTaskById(outTask.ID); + if (mesTask != null && mesTask.RETURN_CODE == "2") + { + Location startLoc = LocationHelper.GetLoc(outTask.POSITION_ID); + Location endLoc = LocationHelper.GetLoc(mesTask.POSITION_ID); + + var wmsTask = WMSHelper.GetWmsTaskByCntr(outTask.PALLET_ID); + if (wmsTask == null) + { + if (startLoc.N_LOCK_STATE == 0 && endLoc.N_LOCK_STATE == 0) + { + // 1.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�+ wmsTask = new WMSTask() + { + S_CNTR_CODE = outTask.PALLET_ID, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "鍙枡鍑哄簱浠诲姟", + S_OP_DEF_CODE = mesTask.ID.ToString(), + S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�鏂滆)", + T_START_TIME = DateTime.Now, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "AGV", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + else + { + LogHelper.Info($"XC鍑哄簱浠诲姟ID锛歿mesTask.ID},鏃犳硶鐢熸垚鍙枡浠诲姟,璧风偣鎴栫粓鐐逛笂閿�, "鏂滆"); + } + } + else + { + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "AGV", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + } + } + + + /// <summary> + /// 鑷姩琛ュ厖绌哄伐瑁呭埌鎺ラ┏浣�+ /// </summary> + public static void AutoReplenishEmptyPallet() + { + var logicConfigs = WMSHelper.getLogicConfigByTaskType("3"); + if (logicConfigs != null && logicConfigs.Count > 0) + { + foreach (var item in logicConfigs) + { + var jbLoc = LocationHelper.GetLoc(item.S_LKKTJBLOC); + var wmsTask = WMSHelper.GetWmsTaskByEnd(item.S_LKKTJBLOC); + if (wmsTask == null && jbLoc.N_CURRENT_NUM == 0) + { + LogHelper.Info($"闈炵洿杩炴帴椹充綅:{jbLoc.S_CODE},闇�琛ュ厖绌哄伐瑁�, "WMS"); + Location startLoc = WMSHelper.getOutStockStartLoc(item.S_AREA_CODE, null); + if (startLoc != null) + { + var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); + // 1.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�+ wmsTask = new WMSTask() + { + S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = jbLoc.S_CODE, + S_END_AREA = jbLoc.S_AREA_CODE, + S_TYPE = "绌哄伐瑁呭嚭搴�, + S_OP_DEF_NAME = "鑷姩琛ュ厖绌哄伐瑁呭埌鎺ラ┏浣�, + T_START_TIME = DateTime.Now, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = jbLoc.S_CODE, + S_END_AREA = jbLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + } + } + else + { + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"闈炵洿杩炴帴椹充綅:{jbLoc.S_CODE}琛ュ厖绌哄伐瑁呭け璐ワ紝鍘熷洜锛氬簱鍖猴細{item.S_AREA_CODE}娌℃湁绌哄伐瑁�); + } + } + } + } + } + + + /// <summary> + /// 涓浆搴撶┖宸ヨ鍛ㄨ浆c鍘�+ /// 1.鐩戝惉MES浠诲姟锛屾煡璇㈠叆搴撲腑杞簱鐨勪换鍔�+ /// 2.鏌ヨ鏄惁鍒涘缓瀵瑰簲鐨勭┖宸ヨ鍑哄簱浠诲姟 + /// 3.娌℃湁锛屽垯鏌ヨ涓浆搴撴暟閲忔弧瓒虫槸鍚﹀垱寤哄嚭搴撲换鍔�+ /// </summary> + public static void ZZKInStockTaskMonitor() { + + } + + + /// <summary> + /// 鐩戝惉MES鎵樼洏涓庣墿鏂欎俊鎭〃 銆佸熀纭�墿鏂欎俊鎭〃 + /// </summary> + public static void MonitorPalletAndMateral() + { + // 1.鐩戝惉MES鎵樼洏鐗╂枡缁戝畾鍏崇郴琛紝鏇存柊瀹瑰櫒鐗╂枡琛�+ LogHelper.Info("鐩戝惉鎵樼洏鐗╂枡缁戝畾鍏崇郴琛紝鏇存柊瀹瑰櫒鐗╂枡琛�, "WMS"); + WMSHelper.updatePalletAndMateral(); + + + // 2.鐩戝惉MES鐗╂枡琛紝鏇存柊鐗╂枡淇℃伅 + LogHelper.Info("鐩戝惉鐗╂枡琛紝鏇存柊鐗╂枡淇℃伅", "WMS"); + WMSHelper.updateMateral(); + } + + /// <summary> + /// 瀹氭椂鏇存柊搴撳瓨淇℃伅 鏇存柊棰戠巼锛�1鍒嗛挓 + /// </summary> + public static void UpdateInventoryRegularly() + { + var db = new SqlHelper<object>().GetInstance(); + var locations = db.Queryable<Location>() + .LeftJoin<LjLotOnhand>((a, b) => a.S_CODE == b.STORAGE_LOCATION) + .LeftJoin<LocCntrRel>((a, b, c) => a.S_CODE == c.S_LOC_CODE) + .Where((a, b, c) => b.PALLET_ID != c.S_CNTR_CODE) + .ToList(); + + foreach (var loc in locations) + { + var lotOnhand = db.Queryable<LjLotOnhand>().Where(a => a.STORAGE_LOCATION == loc.S_CODE).First(); + if (lotOnhand != null) { + db.Deleteable(lotOnhand).ExecuteCommand(); + } + + var locCntrRels = LocationHelper.GetLocCntr(loc.S_CODE); + if (locCntrRels != null && locCntrRels.Count > 0) + { + locCntrRels.ForEach(a => { + var cntrItemRels = ContainerHelper.GetCntrItemRel(a.S_CNTR_CODE); + foreach (var cntrItem in cntrItemRels) + { + var material = WMSHelper.GetMaterial(cntrItem.S_ITEM_CODE); + LjLotOnhand ljLotOnhand = new LjLotOnhand() + { + MATERIAL_CODE = cntrItem.S_ITEM_CODE, + LOT_NAME = cntrItem.S_BATCH_NO, + PALLET_ID = cntrItem.S_CNTR_CODE, + STORAGE_LOCATION = loc.S_CODE, + QC_STATUS = cntrItem.S_ITEM_STATE, + UNIT = material.S_UNIT, + QTY = cntrItem.F_QTY, + IN_DATE = cntrItem.T_INBOUND_TIME, + }; + db.Insertable(lotOnhand).ExecuteCommand(); + } + }); + } + } + } + + /// <summary> + /// 鐩戝惉鎵规鐘舵�琛紝鏇存柊鎵规鐨勬渶闀垮仠鏀炬棩鏈熷拰鏈�皬鍋滄斁鏃ユ湡 + /// 鏇存柊棰戞锛氬垎閽�+ /// </summary> + public static void AutoUpdateBatchStatus() { + var db = new SqlHelper<object>().GetInstance(); + var lotStatusList = db.Queryable<LjLotStatus>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList(); + foreach (var lotStatus in lotStatusList) + { + var cntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_ITEM_CODE.Trim() == lotStatus.MATERIAL_CODE && a.S_BATCH_NO == lotStatus.LOT_NAME).ToList(); + if (cntrItemRels != null && cntrItemRels.Count > 0) + { + foreach (var item in cntrItemRels) + { + item.D_EXP_DATE = lotStatus.SHELFLIFE_DATE; + item.D_EXP_DATE1 = lotStatus.MINSHELFLIFE_DATE; + db.Updateable(lotStatus).ExecuteCommand(); + } + } + lotStatus.RECEIVE_DATE = DateTime.Now; + lotStatus.RECEIVE_FLAG = "COMPLETE"; + db.Updateable(lotStatus).ExecuteCommand(); + } + } + + + /// <summary> + /// 鐩戝惉鐗╂枡閰嶇疆涓棿琛�+ /// </summary> + public static void MonitorItemConfig() + { + + + } + + } +} -- Gitblit v1.9.1