111
lss
11 小时以前 23c28e3c0437081a78a48e54dc066c87500fa8bc
HH.WCS.Mobox3 - ´ó³µ¼ä/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
@@ -21,6 +21,7 @@
using System.Threading.Tasks;
using static HH.WCS.JiaTong_DCJ.api.ApiModel;
using static HH.WCS.JiaTong_DCJ.LISTA.process.HttpModel;
using static System.Collections.Specialized.BitVector32;
namespace HH.WCS.JiaTong_DCJ.process
{
@@ -116,52 +117,89 @@
                if (TN_Task != null)
                {
                    int type = 0;
                    //请求取货,
                    int type = 1;
                    string loc = "";
                    if (model.state == 1101)
                    {
                        //请求取货,
                        type = 1;
                        loc = TN_Task.S_START_LOC;
                        if (name == "Mes")
                        {
                            if (OperateReqByPostMes(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                        {
                            NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                        }
                    }
                    if (model.state == 1102)
                    {
                        type = 3;
                        if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        else
                        {
                            loc = TN_Task.S_START_LOC;
                            if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                               // NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                    }
                    if (model.state == 1102)
                    {
                        type = 1;
                        loc = TN_Task.S_START_LOC;
                        if (name == "Mes")
                        {
                            if (OperateReqByPostMes(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                // NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                        else
                        {
                            if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                // NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                    }
                    if (model.state == 1103)
                    {
                        //请求卸货
                        type = 2;
                        loc = TN_Task.S_END_LOC;
                        if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                        if (name == "Mes")
                        {
                            NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            if (OperateReqByPostMes(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                        else
                        {
                            if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                    }
                    if (model.state == 1104)
                    {
                        type = 2;
                        loc = TN_Task.S_END_LOC;
                        if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                        if (name == "Mes")
                        {
                            //NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            if (OperateReqByPostMes(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                //NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                        else
                        {
                            if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name))
                            {
                                //NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                        }
                    }
                }
@@ -189,9 +227,12 @@
            bool permit = false;
            try
            {
                //RequestList<TaskAccess> requestList = new RequestList<TaskAccess>();
                LogHelper.Info($"开始立库安全请求");
                Request<TaskAccess> request = new Request<TaskAccess>();
                var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                TaskAccess taskAccess = new TaskAccess() { taskNum = tasknum, orderNum = ordernum, station = station, type = type, taskStatus = taskStatus };
                // requestList.data.Add(taskAccess);
                request.data = taskAccess;
                HttpHelper httpHelper = new HttpHelper();
                Result result = new Result();
                string date = JsonConvert.SerializeObject(taskAccess);
@@ -220,7 +261,63 @@
        }
        /// <summary>
        /// MES安全交互
        /// </summary>
        /// <param name="url"></param>
        /// <param name="tasknum"></param>
        /// <param name="ordernum"></param>
        /// <param name="station"></param>
        /// <param name="type"></param>
        /// <param name="taskStatus"></param>
        public static bool OperateReqByPostMes(string url, string tasknum, string ordernum, string station, int type, int taskStatus, string name)
        {
            bool permit = false;
            try
            {
                LogHelper.Info($"开始mes安全请求");
                Request<MesTaskAccess> request = new Request<MesTaskAccess>();
                var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                request.RequestId = "杭叉AGV" + time;
                StatusArrive statusArrive = new StatusArrive();
                request.UseToken = "iFQ5fExGrLYLXliHYWzs";
                MesTaskAccess taskAccess = new MesTaskAccess() { taskNumber = tasknum, status = station };
                request.data = taskAccess;
                HttpHelper httpHelper = new HttpHelper();
                MesResult<MesStatus> result = new MesResult<MesStatus>();
                string date = JsonConvert.SerializeObject(request);
                // string url = Settings.tableUrls.Find(a => a.id == 2).url;
                LogHelper.Info($"安全请求:地址:{url},内容:{date}");
                var r = httpHelper.MesWebPost(url, date);
                result = JsonConvert.DeserializeObject<MesResult<MesStatus>>(r);
                if (result.icode == "200")
                {
                    LogHelper.Info($"接口请求成功");
                    if (result.idata.status == "0")
                    {
                        LogHelper.Info($"安全交互成功");
                        permit = true;
                    }
                }
                else
                {
                    LogHelper.Info($"安全请求失败=>msg:{result.imsg}");
                    ApiHelper.AddErrorInfo("安全交互失败", result.imsg, "", tasknum);
                }
                ApiHelper.AddInfo(name, "安全请求", date, JsonConvert.SerializeObject(result), "Post", url);
                return permit;
            }
            catch (Exception)
            {
                return permit;
            }
        }
        /// <summary>
        /// ä»»åŠ¡æ‹¦æˆª
        /// </summary>
@@ -229,17 +326,17 @@
        internal static bool Intercept(WCSTask mst)
        {
            var result = true;
            var db = new SqlHelper<object>().GetInstance();
            //根据起点仓库编码判断是否可以推送
            var taskLimit = db.Queryable<TASK_LIMIT>().Where(a => a.S_WH_CODE == mst.S_START_WH && a.OPEN == "1").First();
            if (taskLimit != null)
            {
                Console.WriteLine($"任务:{mst.S_CODE},起点仓库:{mst.S_START_WH}已经禁用推送");
                return false;
            }
            //var db = new SqlHelper<object>().GetInstance();
            ////根据起点仓库编码判断是否可以推送
            //var taskLimit = db.Queryable<TASK_LIMIT>().Where(a => a.S_WH_CODE == mst.S_START_WH && a.OPEN == "1").First();
            //if (taskLimit != null)
            //{
            //    Console.WriteLine($"任务:{mst.S_CODE},起点仓库:{mst.S_START_WH}已经禁用推送");
            //    return false;
            //}
            return result;
        }
@@ -304,110 +401,61 @@
            var list = db.Queryable<Location>().ToList().Count;
            // if (mst.N_B_STATE == 0) {
            if (mst.N_SCHEDULE_TYPE == 1)
            LogHelper.Info($"任务推送数据:{JsonConvert.SerializeObject(mst)}");
            if (string.IsNullOrEmpty(mst.S_START_LOC) || string.IsNullOrEmpty(mst.S_END_LOC))
            {
                LogHelper.Info($"任务推送数据:{JsonConvert.SerializeObject(mst)}");
                if (string.IsNullOrEmpty(mst.S_START_LOC) || string.IsNullOrEmpty(mst.S_END_LOC))
                {
                    LogHelper.Info($"任务{mst.S_CODE},起点终点有空参数,不推送任务");
                }
                start = LocationHelper.GetAgvSite(mst.S_START_LOC);
                end = LocationHelper.GetAgvSite(mst.S_END_LOC);
                //if (mst.N_START_LAYER > 1)
                //{
                //    start = LocationHelper.GetAgvSite(mst.S_START_LOC, mst.N_START_LAYER.ToString()).ToString();
                //}
                if (mst.N_END_LAYER > 1)
                {
                    end = LocationHelper.GetAgvSite(mst.S_END_LOC, mst.N_END_LAYER.ToString()).ToString();
                    LogHelper.Info($"任务推送:终点层数为{mst.N_END_LAYER},推送站点为:{end}");
                }
                Console.WriteLine($"SendTask {mst.S_CODE}");
                Console.WriteLine("start=" + start);
                Console.WriteLine("end= " + end);
                var dic = new List<param>();
                dic.Add(new param() { name = "From", value = start.ToString() });
                dic.Add(new param() { name = "To", value = end.ToString() });
                dic.Add(new param() { name = "FUNC", value = "0" });
                dic.Add(new param() { name = "DATA", value = "0" });
                dic.Add(new param() { name = "Ctype", value = "0" });
                var res = NDCApi.AddOrderNew(1, 1, mst.S_CODE, dic);//添加新命令
                                                                    //dic.Add("Pri", mst.N_PRIORITY.ToString());
                                                                    //dic.Add("From", start.ToString());
                                                                    //dic.Add("To", end.ToString());
                                                                    //dic.Add("task_no", mst.S_CODE.Trim());// dic.Add("Ext1", "1"); dic.Add("Ext2", "CALLADDAGV"); dic.Add("N_CNTR_COUNT", "");
                                                                    //var res = NDC.AddNewOrder(1, dic);
                if (res != null && (res.err_code == 0 || res.err_code == 50009))
                {
                    //推送成功,修改任务优先级
                    mst.N_B_STATE = 1;
                    mst.S_B_STATE = WCSTask.GetStateStr(1);
                    WCSHelper.UpdateStatus(mst);//更新任务状态
                    result = true;
                    LogHelper.Info($"NDC推送任务成功 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
                    if (mst.S_TYPE.Contains("电梯1"))
                    {
                        var device = Settings.deviceInfos.Where(a => a.TN_Location == mst.S_END_LOC).FirstOrDefault();
                        var loc = LocationHelper.GetLocByLoc(mst.S_START_LOC);
                        if (device == null)
                        {
                            LogHelper.Info($"根据任务终点:{mst.S_END_LOC},未找到对应电梯配置文件");
                        }
                        if (loc == null)
                        {
                            LogHelper.Info($"根据任务起点:{mst.S_START_LOC},未找到对应货位");
                        }
                        int value = 0;
                        if (loc.N_LAYER == 1) value = 1;
                        else if (loc.N_LAYER == 2) value = 3;
                        else if (loc.N_LAYER == 3) value = 5;
                        ModbusHelper.WriteSingleRegister(40089, value, device.address, 1024);
                        ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
                    }
                }
                else
                {
                    LogHelper.Info($"NDC推送任务失败 {mst.S_CODE};Res:" + JsonConvert.SerializeObject(res));
                }
                LogHelper.Info($"任务{mst.S_CODE},起点终点有空参数,不推送任务");
            }
            //else if (mst.N_SCHEDULE_TYPE == 5) {
            //    //调第三方接口
            //    var model = new HanAo.TaskInfoModel
            //    {
            //        requestPk = mst.S_CODE,
            //        frmPos = mst.S_START_LOC,
            //        toPos = mst.S_END_LOC,
            //        trkType = mst.S_OP_NAME == "入库" ? "1" : "2",
            //        contNo = mst.S_CNTR_CODE
            //    };
            //    if (HanAo.CreateOrder(model)) {
            //        mst.N_B_STATE = 1;
            //        WCSHelper.UpdateStatus(mst);
            //    }
            //}
            //else if (mst.N_SCHEDULE_TYPE == 3) {
            //    var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = mst.S_START_LOC, dst = mst.S_END_LOC }), "p2p");
            //    if (code > 0) {
            //        //更新任务状态
            //        mst.N_B_STATE = 1;
            //        mst.S_EQ_TASK_CODE = code.ToString();
            //        WCSHelper.UpdateStatus(mst);
            //        WCSHelper.UpdateEQNo(mst);
            //    }
            //}
            //  }
            start = LocationHelper.GetAgvSite(mst.S_START_LOC);
            end = LocationHelper.GetAgvSite(mst.S_END_LOC);
            //if (mst.N_START_LAYER > 1)
            //{
            //    start = LocationHelper.GetAgvSite(mst.S_START_LOC, mst.N_START_LAYER.ToString()).ToString();
            //}
            if (mst.N_END_LAYER > 1)
            {
                end = LocationHelper.GetAgvSite(mst.S_END_LOC, mst.N_END_LAYER.ToString()).ToString();
                LogHelper.Info($"任务推送:终点层数为{mst.N_END_LAYER},推送站点为:{end}");
            }
            Console.WriteLine($"SendTask {mst.S_CODE}");
            Console.WriteLine("start=" + start);
            Console.WriteLine("end= " + end);
            var dic = new List<param>();
            dic.Add(new param() { name = "From", value = start.ToString() });
            dic.Add(new param() { name = "To", value = end.ToString() });
            dic.Add(new param() { name = "FUNC", value = "0" });
            dic.Add(new param() { name = "DATA", value = "0" });
            dic.Add(new param() { name = "Ctype", value = "0" });
            var res = NDCApi.AddOrderNew(1, 1, mst.S_CODE, dic);//添加新命令
                                                                //dic.Add("Pri", mst.N_PRIORITY.ToString());
                                                                //dic.Add("From", start.ToString());
                                                                //dic.Add("To", end.ToString());
                                                                //dic.Add("task_no", mst.S_CODE.Trim());// dic.Add("Ext1", "1"); dic.Add("Ext2", "CALLADDAGV"); dic.Add("N_CNTR_COUNT", "");
                                                                //var res = NDC.AddNewOrder(1, dic);
            if (res != null && (res.err_code == 0 || res.err_code == 50009))
            {
                //推送成功,修改任务优先级
                mst.N_B_STATE = 1;
                mst.S_B_STATE = WCSTask.GetStateStr(1);
                WCSHelper.UpdateStatus(mst);//更新任务状态
                result = true;
                LogHelper.Info($"NDC推送任务成功 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
            }
            else
            {
                LogHelper.Info($"NDC推送任务失败 {mst.S_CODE};Res:" + JsonConvert.SerializeObject(res));
            }
            return result;
        }
        /// <summary>
@@ -584,31 +632,34 @@
            try
            {
                //回报数据获取
                Request<StatusArrive> statusarrive = new Request<StatusArrive>();
                //  Request<StatusArrive> statusarrive = new Request<StatusArrive>();
                //获取时间戳
                Request<MesTaskAccess> request = new Request<MesTaskAccess>();
                var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                statusarrive.RequestId = "杭叉AGV" + time;
                //List<StatusArrive> statusArrives = new List<StatusArrive>();
                request.RequestId = "杭叉AGV" + time;
                StatusArrive statusArrive = new StatusArrive();
                statusarrive.UseToken = "iFQ5fExGrLYLXliHYWzs";
                statusArrive.TaskNumber = mst.S_EQ_NO;
                statusArrive.LocationNum = mst.S_END_LOC;
                statusArrive.ArricalTime = DateTime.Now.ToString();
                statusArrive.Status = status.ToString();
                statusArrive.Rfid = mst.S_CNTR_CODE;
                var cntritem = ContainerHelper.GetCntrItemRel(mst.S_CNTR_CODE).FirstOrDefault();
                if (cntritem!=null)
                {
                    statusArrive.PartNumber = cntritem.S_ITEM_CODE;
                    statusArrive.PartDesc = cntritem.S_ITEM_NAME;
                }
                request.UseToken = "iFQ5fExGrLYLXliHYWzs";
                MesTaskAccess taskAccess = new MesTaskAccess() { taskNumber = mst.S_EQ_NO, status = status.ToString() };
                request.data = taskAccess;
                //statusArrive.TaskNumber = mst.S_EQ_NO;
                //statusArrive.LocationNum = mst.S_END_LOC;
                //statusArrive.ArricalTime = DateTime.Now.ToString();
                //statusArrive.Status = status.ToString();
                //statusArrive.Rfid = mst.S_CNTR_CODE;
                //var cntritem = ContainerHelper.GetCntrItemRel(mst.S_CNTR_CODE).FirstOrDefault();
                //if (cntritem != null)
                //{
                //    statusArrive.PartNumber = cntritem.S_ITEM_CODE;
                //    statusArrive.PartDesc = cntritem.S_ITEM_NAME;
                //}
                //statusArrives.Add(statusArrive);
                statusarrive.data = statusArrive;
                //开始回报
                HttpHelper httpHelper = new HttpHelper();
                MesResult result = new MesResult();
                string date = JsonConvert.SerializeObject(statusarrive);
                string date = JsonConvert.SerializeObject(request);
                LogHelper.Info($"任务回报:地址:{url},内容:{date}");
                var r = httpHelper.MesWebPost(url, date);