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/WCSCore.cs |  254 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 254 insertions(+), 0 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs
new file mode 100644
index 0000000..c5e9168
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs
@@ -0,0 +1,254 @@
+锘縰sing HH.WCS.Mobox3.FJJF.models;
+using HH.WCS.Mobox3.FJJT.api;
+using HH.WCS.Mobox3.FJJT.device;
+using HH.WCS.Mobox3.FJJT.dispatch;
+using HH.WCS.Mobox3.FJJT.process;
+using HH.WCS.Mobox3.FJJT.wms;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web.Http;
+using static HH.WCS.Mobox3.FJJT.api.ApiHelper;
+using static HH.WCS.Mobox3.FJJT.api.ApiModel;
+using HH.WCS.Mobox3.FJJT.util;
+
+namespace HH.WCS.Mobox3.FJJT.core {
+    internal class WCSCore {
+
+        /// <summary>
+        /// AGV浠诲姟鍥炴姤
+        /// 1.鏍规嵁鍥炴姤AGV浠诲姟鐘舵�锛屾洿鏂拌揣浣嶄俊鎭拰浠诲姟鐘舵�
+        /// 2.鍒ゆ柇WMSTask鏄惁鏄嚭搴撲换鍔★紝鏄紝濡傛灉宸ヨ鍐呮湁鐗╂枡锛屽垯鍒ゆ柇鐗╂枡鏄惁鍚堟牸锛屼笉鍚堟牸锛屽垯鐢熸垚涓嶅悎鏍煎搧鍏ュ簱浠诲姟
+        /// 3.濡傛灉鍚堟牸锛屽垯瑙﹀彂浣欐枡/绌烘墭鍥炲簱浠诲姟
+        /// </summary>
+        /// <param name="model"></param>
+        public static void OperateAgvTaskStatus(AgvTaskState model) {
+            try
+            {
+                if (string.IsNullOrEmpty(model.No))
+                {
+                    //鏃犱换鍔″彿璇锋眰(浜ょ)
+                    //DeviceProcess.Traffic(model.ForkliftNo, model.LockNo, model.State==1023);
+                }
+                else
+                {
+                    var cst = WCSHelper.GetTask(model.No);
+
+                    if (cst != null)
+                    {
+                        var mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
+                        if (mst != null)
+                        {
+                            WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
+                            if (model.State <= 7)
+                            {
+                                //鏈変换鍔″彿璇锋眰
+                                switch (model.State)
+                                {
+                                    case 1:
+                                        WCSHelper.Begin(cst);
+                                        WMSHelper.updateMesTaskStatus(mst.S_CODE, "2");  // 鏇存柊MES浠诲姟鐘舵�
+                                        break;
+                                    #region MyRegion
+                                    case 3:
+                                        WCSHelper.UpdateStatus(cst, "寮�鍙栬揣");
+                                        var locCntrRels = LocationHelper.GetLocCntr(cst.S_START_LOC);
+                                        if (locCntrRels.Count > 0)
+                                        {
+                                            cst.S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE;
+                                            WCSHelper.UpdateWcsTask(cst);
+                                        }
+                                        break;
+                                    case 4:
+                                        WCSHelper.UpdateStatus(cst, "鍙栬揣瀹屾垚");
+                                        LocationHelper.UnLockLoc(cst.S_START_LOC);
+                                        TaskProcess.OperateStatus(cst, 4);
+                                        break;
+                                    case 5:
+                                        WCSHelper.UpdateStatus(cst, "寮�鍗歌揣");
+                                        break;
+                                    case 6:
+                                        WCSHelper.UpdateStatus(cst, "鍗歌揣瀹屾垚");
+                                        LocationHelper.UnLockLoc(cst.S_END_LOC);
+                                        TaskProcess.OperateStatus(cst, 6);
+                                        break;
+                                    #endregion
+                                    case 2:
+                                        WCSHelper.End(cst);
+                                        break;
+                                    case 7:
+                                        TaskProcess.OperateStatus(cst, 7);
+                                        WCSHelper.Fail(cst);
+                                        break;
+                                }
+                            }
+                            else if (model.State == 1012)
+                            {
+                                LogHelper.Info("寮�杩涜RFID鎵弿", "AGV");
+                                ContainerHelper.UpdateCntrState(cst.S_CNTR_CODE, 1);
+                                WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, cst.S_START_LOC, null);
+                                // 鏌ヨ鎵弿鐨凴FID
+                                // 鍙戦� 00 04 71 02鍒版壂鐮佸櫒 锛屾帴鍙楄繑鍥炴暟鎹苟瑙f瀽
+                                /*    byte[] bytes = new byte[] { 00, 04, 71, 02 };
+                                    var plc = Settings.carDeviceInfos.Where(a => a.deviceNo == model.ForkliftNo && a.enable == 1).FirstOrDefault();
+                                    TcpServer.TcpServerSend(plc.address, bytes);*/
+                            }
+                            else if (model.State == 1002)
+                            {
+                                LogHelper.Info("寮�鑾峰彇AGV缁堢偣", "AGV");
+                                // 鏇存柊AGV缁堢偣
+                                // 鍒ゆ柇瀹瑰櫒鏄惁寮傚父锛屼慨鏀�002鐨勭粓鐐瑰弬鏁�锛屽苟灏嗗弬鏁�淇敼涓�
+                                Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
+                                if (container != null)
+                                {
+                                    LogHelper.Info($"瀹瑰櫒鐨勫紓甯哥姸鎬佷负锛歿container.N_E_STATE}", "AGV");
+                                    if (container.N_E_STATE == 0)
+                                    {
+                                        ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "1");
+                                    }
+                                    else
+                                    {
+                                        ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "2");
+                                    }
+
+                                    ChangeParamModel paramModel = new ChangeParamModel()
+                                    {
+                                        task_no = model.No,
+                                        param_no = 0,
+                                        param = $"{model.No};{cst.S_START_LOC};{cst.S_END_LOC};4;512;0;1"
+                                    };
+                                    NDCApi.ChangeOrderParam(paramModel);
+                                }
+                                else
+                                {
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"AGV浠诲姟鍥炴姤,浠诲姟瀹瑰櫒缂栫爜:{cst.S_CNTR_CODE}鐨勫鍣ㄦ病鏈夊綍鍏ュ埌WMS绯荤粺", "AGV");
+                                }
+                            }
+                            else
+                            {
+                                //瀹夊叏璇锋眰绛�+                                TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
+                            }
+
+                            // AGV浠诲姟瀹屾垚
+                            if (model.State == 2)
+                            {
+                                // 婵�椿棰勫垱寤轰换鍔�+                                // 鍦烘櫙锛�.璇荤爜浣嶆縺娲婚鍒涘缓浠诲姟 2.绌哄伐瑁呭嚭搴撴縺娲绘弧鏂欎笅绾夸换鍔�闈炵洿杩�
+                                WCSHelper.ActivatePreCreateTask(mst.S_CODE);
+
+                                // 鏌ヨ鏄惁鏈夋湭瀹屾垚鐨勪换鍔�+                                if (WMSHelper.isFinishTask(mst.S_CODE))
+                                {
+                                    // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                    mst.N_B_STATE = 2;
+                                    mst.T_END_TIME = DateTime.Now;
+                                    WMSHelper.UpdateTaskState(mst);
+
+                                    // 鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+                                    WMSHelper.updateMesTaskStatus(mst.S_CODE, "3");
+                                }
+
+                                // 妫�祴鐗╂枡鏄惁鍚堟牸,濡備笉鍚堟牸锛�+                                // 鍒ゆ柇鐗╂枡鏄惁鏄幆甯﹀簱鐗╂枡锛屾槸鍒欏洖鐜甫搴擄紝骞惰鐜甫涓嬪彂鏂扮殑鐗╂枡
+                                // 闈炵幆甯﹀簱鐗╂枡锛屽垯閫�嚭绔嬪簱锛屽悓鏃朵笅鍙戞柊鐨勭墿鏂欏嚭搴撲换鍔�+                                if (cst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟"))
+                                {
+                                    var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                                    if (bo) 
+                                    {
+                                        var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                                        var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
+                                        if (cntrItemRels != null && cntrItemRels.Count > 0)
+                                        {
+                                            if (cntrItemRels[0].S_ITEM_STATE == "2")
+                                            {
+                                                mesTask.AWAIT_MSG = "鐗╂枡妫�獙鐘舵�涓轰笉鍚堟牸锛岄噸鏂板彨鏂欎腑";
+                                                WMSHelper.updateLjMesTask(mesTask);
+
+                                                // 涓嶅悎鏍煎搧鍥炲簱
+                                                ApiHelper.rejectReturnStock(mst, cst);
+                                            }
+                                        }
+
+                                        // 濡傛灉浣滀笟鍚嶇О涓烘垚鍨嬫満鍙枡鍑哄簱浠诲姟锛屽垯瑙﹀彂浣欐枡/绌烘墭鎼繍浠诲姟
+                                        var sideLocConfig = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC);
+                                        ApiHelper.returnMaterialOrEmptyTray(sideLocConfig.S_RETURN_LOC_CODE, sideLocConfig.EQP);
+                                    } 
+                                }
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"AGV浠诲姟鐘舵�鍥炴姤锛屼綔涓氬彿:{cst.S_OP_CODE}锛屾湭鏌ヨ鍒颁綔涓�, "AGV");
+                        }
+                    }
+                    else
+                    {
+                        WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"AGV浠诲姟鐘舵�鍥炴姤锛屼换鍔″彿:{model.No}锛屾湭鏌ヨ鍒颁换鍔�,"AGV");
+                    }
+                }
+            }
+            catch (Exception ex) 
+            {
+                WMSHelper.addAlarmRecord("绯荤粺閿欒","楂�, $"WMS鍐呴儴閿欒锛歛gv浠诲姟鐘舵�鍥炴姤閿欒锛岄敊璇師鍥�{ex.Message}","AGV");
+            }
+        }
+
+        /// <summary>
+        /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺
+        /// </summary>
+        internal static void Dispatch() {
+            //鏌ヨ浠诲姟
+            //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�+            var list = WCSHelper.GetWaitingTaskList();
+            if (list.Count > 0) {
+                list.ForEach(task => {
+
+                    if (!TaskProcess.Intercept(task)) {
+                        //浣跨敤鑷畾涔変换鍔℃帹閫�+                        TaskProcess.SendTask(task);
+                    }
+
+                });
+
+
+            }
+        }
+
+        /// <summary>
+        /// 鏉ゥ鍫嗗灈鏈轰俊鍙峰弽棣�+        /// </summary>
+        /// <param name="model"></param>
+        internal static void OperateHATaskStatus(HanAo.TaskStateInfoModel model) {
+            var wcsTask = WCSHelper.GetTask(model.requestPk);
+            if (wcsTask != null) {
+                if (model.code == "0") {
+                    //
+                    if (wcsTask.S_TYPE == "鍫嗗灈鏈哄叆搴�) {
+                        //缁堢偣鎵樼洏缁戝畾
+                        if (LocationHelper.BindingLoc(wcsTask.S_END_LOC, new List<string> { wcsTask.S_CNTR_CODE })) {
+                            //淇敼鎵樼洏鐘舵�涓哄彲鐢紝澧炲姞搴撳瓨閲忚〃锛屽悗闈㈠垎鎷e嚭鍙互璁$畻鍒�+                            
+
+                        }
+                    }
+                    else if (wcsTask.S_TYPE == "鍫嗗灈鏈哄嚭搴�) {
+                        //璧风偣鎵樼洏瑙g粦
+                        LocationHelper.UnBindingLoc(wcsTask.S_START_LOC, new List<string> { wcsTask.S_CNTR_CODE });
+                    }
+                    //鏍囪浠诲姟瀹屾垚
+                    //鏍囪浣滀笟瀹屾垚
+                    wcsTask.N_B_STATE = 3;
+                    WCSHelper.UpdateStatus(wcsTask);
+                    var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+                    if (wmsTask != null) {
+                        wmsTask.N_B_STATE = 2;
+                        WMSHelper.UpdateTaskState(wmsTask);
+                    }
+                }
+            }
+        }
+    }
+}

--
Gitblit v1.9.1