From a93b0e99036c24b9bd58c79bf5e7364b1ba28bae Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期二, 01 七月 2025 16:02:33 +0800 Subject: [PATCH] 福建佳通-流程优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs | 318 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 318 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..951bf44 --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs @@ -0,0 +1,318 @@ +锘縰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浠诲姟 + /// </summary> + public static void MonitorGBOffLineMesTask() + { + var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING"); + if (mesTaskList.Count > 0) + { + mesTaskList = mesTaskList.Where(a => a.MSG_TYPE == "1" && a.PALLET_TYPE == "7").ToList(); + if (mesTaskList.Count > 0) + { + foreach (var mesTask in mesTaskList) + { + LogHelper.Info("MES閽㈠寘婊℃枡涓嬬嚎浠诲姟", "WMS"); + OffLineRequest request = new OffLineRequest() { loc = mesTask.POSITION_ID, cntrNo = mesTask.PALLET_ID }; + ApiHelper.offLineProcess(request); + } + } + } + } + + /// <summary> + /// 鐩戝惉鎴愬瀷鏈哄彨鏂橫ES浠诲姟 + /// </summary> + public static void MonitorCXJCallMaterialMesTask() + { + var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING"); + if (mesTaskList.Count > 0) + { + mesTaskList = mesTaskList.Where(a => a.MSG_TYPE == "0").ToList(); + if (mesTaskList.Count > 0) + { + foreach (var mesTask in mesTaskList) + { + var lineSideLoc = WMSHelper.GetLineSideLoc(mesTask.EQP); + if (lineSideLoc != null) + { + LogHelper.Info($"鎴愬瀷鏈哄彨鏂欎换鍔★紝MES浠诲姟ID锛歿mesTask.ID}", "WMS"); + if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6") + { + // 2.1鎴愭柊鏈哄彨鏂�鏂滆) + var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID); + if (xcTask == null) + { + ApiHelper.callMaterialXC(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); + } + } + else + { + // 2.2 鎴愭柊鏈哄彨鏂�+ ApiHelper.callMaterial(mesTask.MATERIAL_CODE, mesTask.EQP, mesTask.ID); + } + } + } + } + } + } + + /// <summary> + /// 鐩戝惉浠诲姟涓棿琛�+ /// </summary> + public static void MonitorXcTask() + { + var ljMesTasks = WMSHelper.GetLjMesTaskListHD(); + foreach (var mesTask in ljMesTasks) + { + var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID); + if (xcTask != null && xcTask.RETURN_CODE != mesTask.RETURN_CODE) + { + if (xcTask.RETURN_CODE == "3") + { + var wcsTask = WCSHelper.GetTask(xcTask.AGVORDER_ID); + if (wcsTask != null) + { + var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE); + if (wmsTask != null) + { + Location startLoc = LocationHelper.GetLoc(xcTask.POSITION_ID); + if (startLoc != null) + { + wcsTask.S_CNTR_CODE = xcTask.PALLET_ID; + wcsTask.S_START_LOC = startLoc.S_CODE; + wcsTask.S_START_AREA = startLoc.S_AREA_CODE; + wcsTask.N_B_STATE = 0; + wcsTask.S_B_STATE = "绛夊緟"; + WCSHelper.UpdateWcsTask(wcsTask); + + wmsTask.S_CNTR_CODE = xcTask.PALLET_ID; + wmsTask.S_START_LOC = startLoc.S_CODE; + wmsTask.S_START_AREA = startLoc.S_AREA_CODE; + wmsTask.N_B_STATE = 1; + wmsTask.S_B_STATE = "鎵ц"; + WMSHelper.UpdateWmsTask(wmsTask); + + // 鏌ヨ鎵樼洏鐗╂枡淇℃伅琛�+ WMSHelper.updateCarrier(mesTask.PALLET_ID); + } + } + } + } + + mesTask.POSITION_ID = xcTask.POSITION_ID; + mesTask.RETURN_CODE = xcTask.RETURN_CODE; + mesTask.YCL_BATCH = xcTask.YCL_BATCH; + mesTask.PALLET_ID = xcTask.PALLET_ID; + WMSHelper.updateLjMesTask(mesTask); + } + } + } + + + /// <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); + 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 areaCodeList = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); + var locations = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .Where((a,b) => a.N_CURRENT_NUM > 0 && b.S_CNTR_CODE != null && areaCodeList.Contains(a.S_AREA_CODE) ) + .ToList(); + + // 鍒犻櫎鎵�湁搴撳瓨淇℃伅锛岃繘琛岄噸缃�+ db.Deleteable<LjLotOnhand>().ExecuteCommand(); + + foreach (var loc in locations) + { + 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() + { + ID = WMSHelper.GenerateStockRecordNo(), + 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 == null ? "":material.S_UNIT, + QTY = cntrItem.F_QTY, + IN_DATE = cntrItem.T_INBOUND_TIME.ToString("yyyy-MM-dd"), + CREATION_DATE = DateTime.Now, + WAREHOUSE_TYPE = "2" + }; + db.Insertable(ljLotOnhand).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