杨前锦
2025-07-07 c8f338feee0b6003d8f069b1d37fd9b90dd1b7f4
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs
@@ -9,6 +9,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using static HH.WCS.Mobox3.FJJT.dispatch.XcDispatch;
namespace HH.WCS.Mobox3.FJJT.process {
    internal class TaskProcess {
@@ -28,13 +29,6 @@
            else {
                Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
                LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,起点解绑容器{mst.S_CNTR_CODE}");
                // 终点为直连缓存位,不绑定
                var loc = WMSHelper.GetTransfeRelevance(mst.S_END_LOC);
                if (loc != null && loc.N_PROPERTY == 1)
                {
                    LocationHelper.UnLockLoc(mst.S_END_LOC);
                    return;
                }
                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
            }
        }
@@ -69,42 +63,89 @@
        internal static void OperateReq(string no, int state, string forkliftNo, string extData) {
            LogHelper.Info($"开始安全请求,任务号:{no},请求码:{state}", "HosttoagvTask");
            var cst = WCSHelper.GetTask(no);
            var taskAction = WCSHelper.getActionRecord(no, state);
            if (taskAction != null)
            if (cst != null)
            {
                LogHelper.Info($"再次安全请求,查询设备是否反馈", "HosttoagvTask");
                if (taskAction.N_S_STATUS == 1)
                var taskAction = WCSHelper.getActionRecord(no, state);
                if (taskAction != null)
                {
                    LogHelper.Info($"再次安全请求,设备已反馈", "HosttoagvTask");
                    NDCApi.ChangeOrderParam(no, 8, "1");
                    LogHelper.Info($"再次安全请求,查询设备是否反馈", "HosttoagvTask");
                    if (taskAction.N_S_STATUS == 1)
                    {
                        LogHelper.Info($"再次安全请求,设备已反馈", "HosttoagvTask");
                        NDCApi.ChangeOrderParam(no, 8, "1");
                    }
                }
            }
            else
            {
                LogHelper.Info($"首次进行安全请求,任务号:{no},请求码:{state}", "HosttoagvTask");
                bool result = false;
                if (state == 1101)
                else
                {
                    result = WCSDispatch.safetyInteraction(cst.S_CODE ,cst.S_START_LOC, "1");  //请求取货,
                }
                if (state == 1102)
                {
                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "2");  //请求返货
                }
                if (state == 1103)
                {
                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3");  //取货完成允许离开
                }
                if (state == 1104)
                {
                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "4");  //放货完成允许离开
                }
                    LogHelper.Info($"首次进行安全请求,任务号:{no},请求码:{state}", "HosttoagvTask");
                    bool result = false;
                    if (state == 1101)
                    {
                        if (cst.S_START_AREA == "")
                        {
                            result = XcDispatch.CanOut(new SafetyRequest() { stnNo = cst.S_START_LOC, taskNo = cst.S_CODE });
                            if (result)
                            {
                                NDCApi.ChangeOrderParam(no, 8, "1");
                            }
                        }
                        else
                        {
                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "1");  //请求取货,
                        }
                    }
                    if (state == 1102)
                    {
                        if (cst.S_START_AREA == "")
                        {
                            result = XcDispatch.CanIn(new SafetyRequest() { stnNo = cst.S_END_LOC, taskNo = cst.S_CODE });
                            if (result)
                            {
                                NDCApi.ChangeOrderParam(no, 8, "1");
                            }
                        }
                        else
                        {
                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_END_LOC, "2");  //请求放货
                        }
                    }
                    if (state == 1103)
                    {
                        if (cst.S_START_AREA == "")
                        {
                            result = XcDispatch.loadComplete(new SafetyRequest() { stnNo = cst.S_END_LOC, taskNo = cst.S_CODE });
                            if (result)
                            {
                                NDCApi.ChangeOrderParam(no, 8, "1");
                            }
                        }
                        else
                        {
                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3");  //取货完成允许离开
                        }
                    }
                    if (state == 1104)
                    {
                        if (cst.S_START_AREA == "")
                        {
                            result = XcDispatch.putComplete(new SafetyRequest() { stnNo = cst.S_END_LOC, taskNo = cst.S_CODE });
                            if (result)
                            {
                                NDCApi.ChangeOrderParam(no, 8, "1");
                            }
                        }
                        else
                        {
                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_END_LOC, "4");  //放货完成允许离开
                        }
                    }
                // 安全请求发送成功,添加任务动作记录
                if (result)
                {
                    WCSHelper.AddActionRecord(no, state, forkliftNo, extData);
                    LogHelper.Info($"首次进行安全请求成功", "HosttoagvTask");
                    // 安全请求发送成功,添加任务动作记录
                    if (result)
                    {
                        WCSHelper.AddActionRecord(no, state, forkliftNo, extData);
                        LogHelper.Info($"首次进行安全请求成功", "HosttoagvTask");
                    }
                }
            }
        }
@@ -150,26 +191,28 @@
        /// <param name="mst"></param>
        internal static bool SendTask(WCSTask mst) {
            var result = false;
            var start = "0"; var end = "0";
            if (mst.N_B_STATE == 0) {
                if (mst.S_SCHEDULE_TYPE == "NDC") 
                {
                    start = LocationHelper.GetAgvSite(mst.S_START_LOC);
                    end = LocationHelper.GetAgvSite(mst.S_END_LOC);
                    var dic = new List<param>();
                    dic.Add( new param() { name = "No" , value = ""});
                    dic.Add( new param() { name = "From", value = ""});
                    dic.Add( new param() { name = "To", value = ""});
                    dic.Add( new param() { name = "3" , value = "4"});
                    dic.Add( new param() { name = "4" , value = "512"});
                    dic.Add( new param() { name = "5" , value = "0"});
                    var res = NDCApi.AddOrderNew(1,mst.N_PRIORITY,mst.S_CODE,dic);
                    if (res != null && res.err_code == 0 ) {
                        //推送成功,修改任务优先级
                        mst.N_B_STATE = 1;
                        WCSHelper.UpdateStatus(mst);
                        result = true;
                    var startLoc = LocationHelper.GetLoc(mst.S_START_LOC);
                    var endLoc = LocationHelper.GetLoc(mst.S_END_LOC);
                    if (startLoc != null && endLoc != null)
                    {
                        var dic = new List<param>();
                        dic.Add(new param() { name = "No", value = mst.S_CODE });
                        dic.Add(new param() { name = "From", value = mst.S_START_LOC });
                        dic.Add(new param() { name = "To", value = mst.S_END_LOC });
                        dic.Add(new param() { name = "3", value = "4" });
                        dic.Add(new param() { name = "4", value = "512" });
                        dic.Add(new param() { name = "5", value = "0" });
                        var res = NDCApi.AddOrderNew(1, mst.N_PRIORITY, mst.S_CODE, dic);
                        if (res != null && res.err_code == 0)
                        {
                            //推送成功,修改任务优先级
                            mst.N_B_STATE = 1;
                            WCSHelper.UpdateStatus(mst);
                            result = true;
                        }
                    }
                }
                else if (mst.S_SCHEDULE_TYPE == "WCS") {
@@ -182,7 +225,6 @@
                    mst.N_B_STATE = 1;
                    WCSHelper.UpdateStatus(mst);
                }
            }
            return result;
        }