wankeda
2025-06-24 1caea0fdc7ed1788d854a2aba8853984b4494e01
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/JobsPart/SendAgvTask.cs
@@ -19,6 +19,7 @@
using WIDESEA_Core.Enums;
using System.Diagnostics;
using WIDESEA_Core.Log;
using FastReport.DevComponents.DotNetBar;
namespace WIDESEA_Tasks
{
    public partial class AGVjob
@@ -32,8 +33,38 @@
            {
                List<Dt_Task> agvtasks = _taskService.GetTasks();
                foreach (Dt_Task agvtask in agvtasks)
                var workshop1Tasks = agvtasks.Where(t => t.SourceAddress.Contains("PVC成品"))
                    .OrderBy(t => t.CreateDate)
                    .ToList();
                var workshop2Tasks = agvtasks.Where(t => t.SourceAddress.Contains("硅烷成品"))
                    .OrderBy(t => t.CreateDate)
                    .ToList();
                var workshop3Tasks = agvtasks.Where(t => !t.SourceAddress.Contains("成品") || t.SourceAddress.Contains("半成品"))
                    .OrderBy(t => t.CreateDate)
                    .ToList();
                int maxCount = Math.Max(workshop1Tasks.Count, workshop2Tasks.Count);
                for (int i = 0; i < maxCount; i++)
                {
                    if (i < workshop1Tasks.Count)
                    {
                        ProcessTask(workshop1Tasks[i]);
                    }
                    if (i < workshop2Tasks.Count)
                    {
                        ProcessTask(workshop2Tasks[i]);
                    }
                }
                foreach (var task in workshop3Tasks)
                {
                    ProcessTask(task);
                }
                void ProcessTask(Dt_Task agvtask)
                {
                    //foreach (Dt_Task agvtask in agvtasks)
                    //{
                    bool text = true;
                    bool text1 = true;
                    bool text2 = true;
@@ -46,7 +77,7 @@
                    Dt_CachePoint CachePointYCl = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.SourceAddress && x.Remark != null && x.PointCode.Contains("原材料库"));
                    if (CachePoint != null && CachePointSO != null)
                    {
                        var pointnames = _cachePointRepository.QueryData(x => x.Remark == CachePoint.Remark && x.Remark != "0").ToList();
                        var pointnames = _cachePointRepository.QueryData(x => x.Remark == CachePoint.Remark && x.Depth != 0).ToList();
                        foreach (var item in pointnames)
                        {
                            var a = CachePoint.Depth.ObjToInt();
@@ -60,10 +91,17 @@
                                    continue;
                                }
                            }
                            if (a < b)
                            {
                                if (item.PointStatus == LocationStatusEnum.InStock.ObjToInt())
                                {
                                    text = false;
                                }
                            }
                        }
                        if (CachePointSO.Remark != null)
                        {
                            var pointname = _cachePointRepository.QueryData(x => x.Remark == CachePointSO.Remark && x.Remark != "0").ToList();
                            var pointname = _cachePointRepository.QueryData(x => x.Remark == CachePointSO.Remark && x.Depth != 0).ToList();
                            foreach (var item1 in pointname)
                            {
                                var c = CachePointSO.Depth.ObjToInt();
@@ -81,62 +119,7 @@
                        }
                        if (text == true && text1 == true)
                        {
                            AGVTaskPend pend = new AGVTaskPend();
                            //pend.requestType = pend.requestType;
                            //pend.accessId = pend.accessId;
                            //pend.requestId = pend.requestId;
                            Pend data = new Pend();
                            TaskPend taskPend = new TaskPend();
                            {
                                taskPend.taskNo = agvtask.TaskNum.ToString();
                                taskPend.taskType = "MV";
                                DateTime date = DateTime.Now;
                                taskPend.taskDate = date.ToString("yyyy-MM-dd HH:mm:ss");
                                taskPend.taskState = "00";
                                taskPend.priority = "1";
                                taskPend.wareCode = "W01";
                                taskPend.docNo = "";
                                taskPend.sku = "";
                                taskPend.uom = "";
                                taskPend.qty = 0;
                                taskPend.trace = "";
                                taskPend.fmLoc = agvtask.SourceAddress.ToString();
                                taskPend.toLoc = agvtask.TargetAddress.ToString();
                                taskPend.udf01 = "";
                                taskPend.udf02 = "";
                            }
                            data.detail.Add(taskPend);
                            pend.data = data;
                            var time = new DateTimeOffset(DateTime.Now);
                            long timestampStr = time.ToUnixTimeMilliseconds();//时间戳
                            string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey;
                            string appkeyEcrypt = GetMD5Hex(appkeystr);
                            string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "&timestamp=" + timestampStr + "&uniquestr=" + timestampStr;
                            string signstr = GetMD5Hex(origin);
                            Dictionary<string, string> headers = new Dictionary<string, string>()
                                {
                                    {"appkey",AGVopenApi.appkey },
                                    {"timestamp",timestampStr.ToString() },
                                    {"sign",signstr }
                                };
                            string posy = JsonConvert.SerializeObject(pend);
                            var respone = HttpHelper.Post(url, posy, headers: headers);
                            var res = JsonConvert.DeserializeObject<WebResponseContent>(respone);
                            if (res.Code == 200)
                            {
                                agvtask.Dispatchertime = DateTime.Now;
                                agvtask.TaskStatus = AGVTaskStatusEnum.AGV_SendOut.ObjToInt();
                                _taskService.UpdateData(agvtask);
                                Thread.Sleep(1000);
                                WriteLog.GetLog("无人叉车任务下发").Write("任务号:" + agvtask.TaskNum, "无人叉车任务下发");
                            }
                            else
                            {
                                //_unitOfWorkManage.RollbackTran();
                                content = WebResponseContent.Instance.Error($"{res.Message}");
                                WriteLog.GetLog("无人叉车任务下发失败").Write("任务号:" + agvtask.TaskNum + '\n' + "失败信息" + res.Message, "无人叉车任务下发失败");
                            }
                            AGVTask(agvtask);
                        }
                    }
                    else if (CachePointYCl != null && dt_CachePoint != null)
@@ -173,143 +156,15 @@
                        }
                        if (text2 == true && text3 == true)
                        {
                            AGVTaskPend pend = new AGVTaskPend();
                            //pend.requestType = pend.requestType;
                            //pend.accessId = pend.accessId;
                            //pend.requestId = pend.requestId;
                            Pend data = new Pend();
                            TaskPend taskPend = new TaskPend();
                            {
                                taskPend.taskNo = agvtask.TaskNum.ToString();
                                taskPend.taskType = "MV";
                                DateTime date = DateTime.Now;
                                taskPend.taskDate = date.ToString("yyyy-MM-dd HH:mm:ss");
                                taskPend.taskState = "00";
                                taskPend.priority = "1";
                                taskPend.wareCode = "W01";
                                taskPend.docNo = "";
                                taskPend.sku = "";
                                taskPend.uom = "";
                                taskPend.qty = 0;
                                taskPend.trace = "";
                                taskPend.fmLoc = agvtask.SourceAddress.ToString();
                                taskPend.toLoc = agvtask.TargetAddress.ToString();
                                taskPend.udf01 = "";
                                taskPend.udf02 = "";
                            }
                            data.detail.Add(taskPend);
                            pend.data = data;
                            var time = new DateTimeOffset(DateTime.Now);
                            long timestampStr = time.ToUnixTimeMilliseconds();//时间戳
                            string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey;
                            string appkeyEcrypt = GetMD5Hex(appkeystr);
                            string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "&timestamp=" + timestampStr + "&uniquestr=" + timestampStr;
                            string signstr = GetMD5Hex(origin);
                            Dictionary<string, string> headers = new Dictionary<string, string>()
                                {
                                    {"appkey",AGVopenApi.appkey },
                                    {"timestamp",timestampStr.ToString() },
                                    {"sign",signstr }
                                };
                            string posy = JsonConvert.SerializeObject(pend);
                            var respone = HttpHelper.Post(url, posy, headers: headers);
                            var res = JsonConvert.DeserializeObject<WebResponseContent>(respone);
                            if (res.Code == 200)
                            {
                                agvtask.Dispatchertime = DateTime.Now;
                                agvtask.TaskStatus = AGVTaskStatusEnum.AGV_SendOut.ObjToInt();
                                _taskService.UpdateData(agvtask);
                                Thread.Sleep(1000);
                                WriteLog.GetLog("无人叉车任务下发").Write("任务号:" + agvtask.TaskNum, "无人叉车任务下发");
                            }
                            else
                            {
                                //_unitOfWorkManage.RollbackTran();
                                content = WebResponseContent.Instance.Error($"{res.Message}");
                                WriteLog.GetLog("无人叉车任务下发失败").Write("任务号:" + agvtask.TaskNum + '\n' + "失败信息" + res.Message, "无人叉车任务下发失败");
                            }
                            AGVTask(agvtask);
                        }
                    }
                    //if (dt_CachePoint != null)
                    //{
                    //    var pointname = _cachePointRepository.QueryData(x => x.Remark == dt_CachePoint.Remark).ToList();
                    //    foreach (var item in pointname)
                    //    {
                    //        var a = dt_CachePoint.Depth.ObjToInt();
                    //        var b = item.Depth.ObjToInt();
                    //        if (b > a)
                    //        {
                    //            //Dt_CachePoint c = _cachePointRepository.QueryFirst(x => x.PointCode == item.PointCode && x.PointStatus == 0);
                    //            Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.TargetAddress == item.PointCode);
                    //            if (dt_Task != null)
                    //            {
                    //                continue;
                    //            }
                    //        }
                    //    }
                    //}
                    else
                    {
                        AGVTaskPend pend = new AGVTaskPend();
                        //pend.requestType = pend.requestType;
                        //pend.accessId = pend.accessId;
                        //pend.requestId = pend.requestId;
                        Pend data = new Pend();
                        TaskPend taskPend = new TaskPend();
                        {
                            taskPend.taskNo = agvtask.TaskNum.ToString();
                            taskPend.taskType = "MV";
                            DateTime date = DateTime.Now;
                            taskPend.taskDate = date.ToString("yyyy-MM-dd HH:mm:ss");
                            taskPend.taskState = "00";
                            taskPend.priority = "1";
                            taskPend.wareCode = "W01";
                            taskPend.docNo = "";
                            taskPend.sku = "";
                            taskPend.uom = "";
                            taskPend.qty = 0;
                            taskPend.trace = "";
                            taskPend.fmLoc = agvtask.SourceAddress.ToString();
                            taskPend.toLoc = agvtask.TargetAddress.ToString();
                            taskPend.udf01 = "";
                            taskPend.udf02 = "";
                        }
                        data.detail.Add(taskPend);
                        pend.data = data;
                        var time = new DateTimeOffset(DateTime.Now);
                        long timestampStr = time.ToUnixTimeMilliseconds();//时间戳
                        string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey;
                        string appkeyEcrypt = GetMD5Hex(appkeystr);
                        string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "&timestamp=" + timestampStr + "&uniquestr=" + timestampStr;
                        string signstr = GetMD5Hex(origin);
                        Dictionary<string, string> headers = new Dictionary<string, string>()
                                {
                                    {"appkey",AGVopenApi.appkey },
                                    {"timestamp",timestampStr.ToString() },
                                    {"sign",signstr }
                                };
                        string posy = JsonConvert.SerializeObject(pend);
                        var respone = HttpHelper.Post(url, posy, headers: headers);
                        var res = JsonConvert.DeserializeObject<WebResponseContent>(respone);
                        if (res.Code == 200)
                        {
                            agvtask.Dispatchertime = DateTime.Now;
                            agvtask.TaskStatus = AGVTaskStatusEnum.AGV_SendOut.ObjToInt();
                            _taskService.UpdateData(agvtask);
                            Thread.Sleep(1000);
                            WriteLog.GetLog("无人叉车任务下发").Write("任务号:" + agvtask.TaskNum, "无人叉车任务下发");
                        }
                        else
                        {
                            //_unitOfWorkManage.RollbackTran();
                            content = WebResponseContent.Instance.Error($"{res.Message}");
                            WriteLog.GetLog("无人叉车任务下发失败").Write("任务号:" + agvtask.TaskNum + '\n' + "失败信息" + res.Message, "无人叉车任务下发失败");
                        }
                        AGVTask(agvtask);
                    }
                    //}
                }
            }
            catch (Exception ex)
            {
@@ -320,6 +175,65 @@
        }
        public void AGVTask(Dt_Task agvtask)
        {
            AGVTaskPend pend = new AGVTaskPend();
            //pend.requestType = pend.requestType;
            //pend.accessId = pend.accessId;
            //pend.requestId = pend.requestId;
            Pend data = new Pend();
            TaskPend taskPend = new TaskPend();
            {
                taskPend.taskNo = agvtask.TaskNum.ToString();
                taskPend.taskType = "MV";
                DateTime date = DateTime.Now;
                taskPend.taskDate = date.ToString("yyyy-MM-dd HH:mm:ss");
                taskPend.taskState = "00";
                taskPend.priority = "1";
                taskPend.wareCode = "W01";
                taskPend.docNo = "";
                taskPend.sku = "";
                taskPend.uom = "";
                taskPend.qty = 0;
                taskPend.trace = "";
                taskPend.fmLoc = agvtask.SourceAddress.ToString();
                taskPend.toLoc = agvtask.TargetAddress.ToString();
                taskPend.udf01 = "";
                taskPend.udf02 = "";
            }
            data.detail.Add(taskPend);
            pend.data = data;
            var time = new DateTimeOffset(DateTime.Now);
            long timestampStr = time.ToUnixTimeMilliseconds();//时间戳
            string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey;
            string appkeyEcrypt = GetMD5Hex(appkeystr);
            string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "&timestamp=" + timestampStr + "&uniquestr=" + timestampStr;
            string signstr = GetMD5Hex(origin);
            Dictionary<string, string> headers = new Dictionary<string, string>()
                                {
                                    {"appkey",AGVopenApi.appkey },
                                    {"timestamp",timestampStr.ToString() },
                                    {"sign",signstr }
                                };
            string posy = JsonConvert.SerializeObject(pend);
            var respone = HttpHelper.Post(url, posy, headers: headers);
            var res = JsonConvert.DeserializeObject<WebResponseContent>(respone);
            if (res.Code == 200)
            {
                agvtask.Dispatchertime = DateTime.Now;
                agvtask.TaskStatus = AGVTaskStatusEnum.AGV_SendOut.ObjToInt();
                _taskService.UpdateData(agvtask);
                Thread.Sleep(1000);
                WriteLog.GetLog("无人叉车任务下发").Write("任务号:" + agvtask.TaskNum, "无人叉车任务下发");
            }
            else
            {
                //_unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error($"{res.msg}");
                WriteLog.GetLog("无人叉车任务下发失败").Write("任务号:" + agvtask.TaskNum + '\n' + "失败信息" + res.msg, "无人叉车任务下发失败");
            }
        }
        public string GetMD5Hex(string appkeystr)
        {
            using MD5 md5Hash = MD5.Create();