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