wankeda
2 天以前 6cc35000a6e138cfad96e7b02f8aeddcdb4ba6bf
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs
@@ -1,8 +1,15 @@
using System.Diagnostics;
using System.Text;
using Microsoft.Data.SqlClient;
using Newtonsoft.Json;
using WIDESEA_Core.Enums;
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.Tool;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -14,8 +21,98 @@
        private static int _readSendAGVTaskSignalso = 0;
        private static bool isTrue1 = false;
        private static string name1 = "";
        public static string url = AppSettings.Configuration["AGVTaskGeneration"];
        public static void SendAGVTask1(ITaskRepository _taskRepository, IDt_StationinfoRepository _stationinfoRepository)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.InNew).OrderBy(r => r.CreateDate).FirstOrDefault(); //.ThenByDescending(r => r.Grade)
                if (task != null)
                {
                    TaskGenerationDto taskGenerationDto = new TaskGenerationDto();
                    {
                        taskGenerationDto.taskid = task.TaskNum.ToString();
                        taskGenerationDto.taskType = task.TaskType.ToString();
                        taskGenerationDto.floor = task.Floor.ToString();
                        taskGenerationDto.param1 = task.SourceAddress.ToString();
                        taskGenerationDto.param2 = task.TargetAddress.ToString();
                        taskGenerationDto.param3 = "";
                        taskGenerationDto.param4 = "";
                        taskGenerationDto.param5 = "";
                        taskGenerationDto.param6 = "";
                        taskGenerationDto.param7 = "";
                        taskGenerationDto.param8 = "";
                        taskGenerationDto.param9 = "";
                    }
                    var ResultData = HttpHelper.Post(url, taskGenerationDto.ToJson(), headers: new Dictionary<string, string>());
                    var res = JsonConvert.DeserializeObject<WebResponseContent>(ResultData);
                    if (res.code == 200)
                    {
                        WriteLog.Info("任务下发成功").Write($"任务号{task.TaskNum}", "任务下发成功");
                        int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                        task.TaskState = nextStatus;
                        task.Dispatchertime = DateTime.Now;
                        _taskRepository.UpdateData(task);
                    }
                    else
                    {
                        WriteLog.Info("任务下发失败").Write($"任务号{task.TaskNum},信息{res.Message}", "任务下发失败");
                        //_unitOfWorkManage.RollbackTran();
                        content = WebResponseContent.Instance.Error($"{res.Message}");
                    }
                }
                Thread.Sleep(100);
                Dt_Task dt_Task = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.AGV_Queue).OrderBy(r => r.CreateDate).FirstOrDefault();
                if (dt_Task != null)
                {
                    var station = _stationinfoRepository.QueryFirst(x => x.StationCode == dt_Task.SourceAddress);
                    // æŸ¥æ‰¾ä¸¤ä¸ªå¯ç”¨çš„空缓存架
                    var freeStations = _stationinfoRepository
                        .QueryData(x => x.Location_state == LocationStatusEnum.Free.ObjToInt() && x.Enable && x.Remark == station.Remark && x.Area == station.Area)//  && x.Stationtype == station.Stationtype
                        .Take(2) // åªå–前两个
                        .ToList();
        public static void SendAGVTask1(ITaskRepository _taskRepository)
                    int floor = 0;
                    if (station.Area.Contains("A区"))
                    {
                        floor = 32;
                    }
                    else
                    {
                        floor = 128;
                    }
                    if (freeStations.Count < 2)
                    {
                        throw new Exception("未找到两个可用的空缓存架");
                    }
                    // æ£€æŸ¥è¿™ä¸¤ä¸ªç¼“存架是否被任务占用
                    var stationCodes = freeStations.Select(s => s.StationCode).ToList();
                    freeStations[0].Location_state = LocationStatusEnum.Lock.ObjToInt();
                    _stationinfoRepository.UpdateData(freeStations[0]);
                    freeStations[1].Location_state = LocationStatusEnum.Lock.ObjToInt();
                    _stationinfoRepository.UpdateData(freeStations[1]);
                    //stationCodes.
                    var tasks = _taskRepository.QueryData(x => stationCodes.Contains(x.SourceAddress) || stationCodes.Contains(x.TargetAddress)).ToList();
                    if (tasks.Any())
                    {
                        throw new Exception("缓存架已有任务");
                    }
                    dt_Task.TargetAddress = string.Join("||", freeStations.Select(s => s.StationCode));
                    dt_Task.NextAddress = string.Join("||", freeStations.Select(s => s.StationCode));
                    dt_Task.TaskState = (int)TaskInStatusEnum.InNew;
                    dt_Task.TaskType = floor;
                    _taskRepository.UpdateData(dt_Task);
                }
            }
            catch (Exception ex)
            {
            }
        }
        public static void SendAGVTask(AGV agv, ITaskRepository _taskRepository)
        {
            // è¿žæŽ¥å­—符串 - æ ¹æ®ä½ çš„æœåŠ¡å™¨ä¿¡æ¯ä¿®æ”¹
@@ -55,10 +152,6 @@
                }
            }
        }
        public static void SendAGVTask(AGV agv, ITaskRepository _taskRepository)
        {
            // æ£€æŸ¥AGV是否为空
            if (agv == null)
            {