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
@@ -30,66 +31,139 @@
        {
            try
            {
                Console.WriteLine("开始   " + DateTime.Now);
                var agvtask = _taskService.GetTasks();
                if (agvtask != null)
                {
                    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>()
                List<Dt_Task> agvtasks = _taskService.GetTasks();
                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)
                    {
                        {"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)
                        ProcessTask(workshop1Tasks[i]);
                    }
                    if (i < workshop2Tasks.Count)
                    {
                        agvtask.Dispatchertime = DateTime.Now;
                        agvtask.TaskStatus = AGVTaskStatusEnum.AGV_SendOut.ObjToInt();
                        _taskService.UpdateData(agvtask);
                        Thread.Sleep(1000);
                        WriteLog.GetLog("无人叉车任务下发").Write("任务号:" + agvtask.TaskNum, "无人叉车任务下发");
                        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;
                    bool text3 = true;
                    Thread.Sleep(500);
                    Dt_CachePoint CachePointSO = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.SourceAddress);//查询起点
                    Dt_CachePoint CachePoint = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.TargetAddress && x.PointCode.Contains("成品库"));//|| x.PointCode.Contains("原材料库")) && x.Remark != null
                    Dt_CachePoint dt_CachePoint = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.TargetAddress && x.Remark != null);//查询终点
                    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.Depth != 0).ToList();
                        foreach (var item in pointnames)
                        {
                            var a = CachePoint.Depth.ObjToInt();
                            var b = item.Depth.ObjToInt();
                            if (a > b)
                            {
                                Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.TargetAddress == item.PointCode);
                                if (dt_Task != null)
                                {
                                    text = false;
                                    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.Depth != 0).ToList();
                            foreach (var item1 in pointname)
                            {
                                var c = CachePointSO.Depth.ObjToInt();
                                var d = item1.Depth.ObjToInt();
                                if (c > d)
                                {
                                    Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == item1.PointCode);
                                    if (dt_Task != null)
                                    {
                                        text1 = false;
                                        continue;
                                    }
                                }
                            }
                        }
                        if (text == true && text1 == true)
                        {
                            AGVTask(agvtask);
                        }
                    }
                    else if (CachePointYCl != null && dt_CachePoint != null)
                    {
                        var pointnames = _cachePointRepository.QueryData(x => x.Remark == CachePointYCl.Remark).ToList();
                        foreach (var item in pointnames)
                        {
                            var a = CachePointYCl.Depth.ObjToInt();
                            var b = item.Depth.ObjToInt();
                            if (a > b)
                            {
                                Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == item.PointCode);
                                if (dt_Task != null)
                                {
                                    text2 = false;
                                    continue;
                                }
                            }
                        }
                        var pointname = _cachePointRepository.QueryData(x => x.Remark == dt_CachePoint.Remark).ToList();
                        foreach (var item1 in pointname)
                        {
                            var c = dt_CachePoint.Depth.ObjToInt();
                            var d = item1.Depth.ObjToInt();
                            if (c > d)
                            {
                                Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.TargetAddress == item1.PointCode);
                                if (dt_Task != null)
                                {
                                    text3 = false;
                                    continue;
                                }
                            }
                        }
                        if (text2 == true && text3 == true)
                        {
                            AGVTask(agvtask);
                        }
                    }
                    else
                    {
                        //_unitOfWorkManage.RollbackTran();
                        content = WebResponseContent.Instance.Error($"{res.Message}");
                        WriteLog.GetLog("无人叉车任务下发失败").Write("任务号:" + agvtask.TaskNum + '\n' + "失败信息" + res.Message, "无人叉车任务下发失败");
                        AGVTask(agvtask);
                    }
                    //}
                }
            }
            catch (Exception ex)
@@ -101,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();