From 36230cd4dd0ebe5d21eede3eff6216908f7f7a8e Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期三, 06 十一月 2024 16:48:32 +0800
Subject: [PATCH] AGV任务下发,AGV任务状态更新

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs |  202 ++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 163 insertions(+), 39 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 084be31..1e2c33f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -16,6 +16,7 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
 using AutoMapper;
+using Newtonsoft.Json;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SqlSugar;
 using System;
@@ -26,10 +27,12 @@
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
-using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_DTO.WMSInfo;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -38,7 +41,7 @@
 
 namespace WIDESEAWCS_TaskInfoService
 {
-    public class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService
+    public partial class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService
     {
         private readonly IRouterService _routerService;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
@@ -64,7 +67,6 @@
             _taskExecuteDetailRepository = taskExecuteDetailRepository;
             _mapper = mapper;
         }
-
         /// <summary>
         /// 鎺ユ敹WMS浠诲姟淇℃伅
         /// </summary>
@@ -120,32 +122,80 @@
             }
             return content;
         }
-
         /// <summary>
-        /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
+        /// 杈撻�佺嚎鍏ュ簱瀹屾垚鍚慦MS鐢宠鍏ュ簱/鍫嗗灈鏈虹敵璇峰叆搴�
         /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
+        /// <param name="task"></param>
         /// <returns></returns>
-        public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress)
+        public WebResponseContent StackerCraneRequestInbound(Dt_Task task)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                WMSTaskDTO taskDTO = new WMSTaskDTO()
+                ConveyorLineDTO lineDTO = new ConveyorLineDTO()
                 {
-                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-                    Grade = 1,
-                    PalletCode = palletCode,
-                    RoadWay = "SC01",
-                    SourceAddress = sourceAddress,
-                    TargetAddress = "SC01",
-                    TaskState = (int)TaskInStatusEnum.InNew,
-                    Id = 0,
-                    TaskType = (int)TaskInboundTypeEnum.Inbound
+                    stationCode = task.CurrentAddress,
+                    TaskNum = task.TaskNum,
+                    Barcode = task.PalletCode
                 };
+                var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.StackerCraneRequestInbound, lineDTO.ToJson(), headers: new Dictionary<string, string>());
+                if (ResultData.Result == null) throw new Exception($"鍚慦MS璇锋眰鍏ュ簱鍒嗛厤璐т綅澶辫触!浠诲姟鍙�:{task.TaskNum}");
+                content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result);
+                if (content.Status)
+                {
+                    var receiveWMSInfo = JsonConvert.DeserializeObject<ReceiveWMSInfo>(content.Data.ToJson());
+                    task.IsPickPlace = receiveWMSInfo.IsPickPlace;
+                    task.TargetAddress = receiveWMSInfo.TargetAddress;
+                    task.NextAddress = task.TargetAddress;
+                    BaseDal.UpdateData(task);
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
 
-                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+        /// <summary>
+        /// 杈撻�佺嚎妫�娴嬪彛鍚慦MS鐢宠鍏ュ簱
+        /// </summary>
+        /// <param name="palletCode">鎵樼洏鍙�</param>
+        /// <param name="sourceAddress">璧峰鍦板潃</param>
+        /// <returns></returns>
+        public WebResponseContent RequestWMSTask(ConveyorLineDTO lineDTO)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                #region 鍚慦MS鐢宠
+                var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.ConveyorLineRequestInbound, lineDTO.ToJson(), headers: new Dictionary<string, string>());
+                if (ResultData.Result == null) throw new Exception($"鍚慦MS璇锋眰鍏ュ簱澶辫触!鎵樼洏鍙�:{lineDTO.Barcode}");
+
+                content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result);
+
+                #endregion
+
+                #region 浜х嚎鐢宠鍏ュ簱浠诲姟
+                if (content != null && content.Status)//浠诲姟杞崲
+                {
+                    var task = JsonConvert.DeserializeObject<Dt_Task>(content.Data.ToJson());
+                    if (task != null)
+                    {
+                        List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.TargetAddress);
+                        if (routers.Count > 0)
+                        {
+                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
+                        }
+                        task.WMSId = task.TaskId;
+                        task.Creater = "WMS";
+                        task.Dispatchertime = null;
+                        task.CreateDate = DateTime.Now;
+                        BaseDal.AddData(task);
+                    }
+                }
+                #endregion
+
             }
             catch (Exception ex)
             {
@@ -160,9 +210,9 @@
         /// <param name="deviceNo">璁惧缂栧彿</param>
         /// <param name="currentAddress">褰撳墠鍦板潃</param>
         /// <returns></returns>
-        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
+        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress, string Barcode)
         {
-            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
+            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.NextAddress == currentAddress && x.PalletCode == Barcode && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
         }
 
         /// <summary>
@@ -213,9 +263,9 @@
         public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
         {
             if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
             else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
         }
 
         /// <summary>
@@ -241,9 +291,9 @@
         public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
         {
             if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy);
             else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
         }
 
         /// <summary>
@@ -464,23 +514,35 @@
                     task.TaskState = nextStatus;
                     task.ModifyDate = DateTime.Now;
                     task.Modifier = "System";
-                    BaseDal.UpdateData(task);
-                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
 
-                    WMSTaskDTO taskDTO = new WMSTaskDTO()
+                    #region 鍚慦MS鍙嶉鍫嗗灈鏈轰换鍔″畬鎴�
+                    WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
+                    var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
+                    if (ResultData.Result == null) throw new Exception($"浠诲姟鐘舵�佸悓姝ュ埌WMS澶辫触!浠诲姟鍙�:{task.TaskNum}");
+                    content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result);
+                    if (content.Status)
                     {
-                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-                        Grade = 1,
-                        PalletCode = task.PalletCode + "S",
-                        RoadWay = "SC01",
-                        SourceAddress = task.TargetAddress,
-                        TargetAddress = "CLOutAreaA",
-                        TaskState = (int)TaskOutStatusEnum.OutNew,
-                        Id = 0,
-                        TaskType = (int)TaskOutboundTypeEnum.Outbound
-                    };
+                        BaseDal.UpdateData(task);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
+                    }
+                    #endregion
 
-                    content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+
+
+                    //WMSTaskDTO taskDTO = new WMSTaskDTO()
+                    //{
+                    //    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
+                    //    Grade = 1,
+                    //    PalletCode = task.PalletCode + "S",
+                    //    RoadWay = "SC01",
+                    //    SourceAddress = task.TargetAddress,
+                    //    TargetAddress = "CLOutAreaA",
+                    //    TaskState = (int)TaskOutStatusEnum.OutNew,
+                    //    Id = 0,
+                    //    TaskType = (int)TaskOutboundTypeEnum.Outbound
+                    //};
+
+                    //content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                 {
@@ -593,5 +655,67 @@
             }
             return content;
         }
+
+        public Dt_Task GetTaskInfo(int taskNum)
+        {
+            return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+        }
+
+        public Dt_Task GetTaskState(int TaskState, int TaskType)
+        {
+            Dt_Task task = null;
+            if (TaskState > 0 && TaskType > 0)
+                task = BaseDal.QueryFirst(x => x.TaskState == TaskState && x.TaskType == TaskType);
+            else if (TaskState > 0)
+                task = BaseDal.QueryFirst(x => x.TaskState == TaskState);
+            else if (TaskType > 0)
+                task = BaseDal.QueryFirst(x => x.TaskType == TaskType);
+            return task;
+        }
+
+        /// <summary>
+        /// 鏌ヨ绌挎杞﹀嚭鍏ュ簱浠诲姟
+        /// </summary>
+        /// <param name="deviceNo"></param>
+        /// <param name="currentAddress"></param>
+        /// <returns></returns>
+        public Dt_Task QueryShuttleCarTask(string deviceNo, string currentAddress = "")
+        {
+            if (string.IsNullOrEmpty(currentAddress))
+                return BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+            else
+                return BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+        }
+        /// <summary>
+        /// 娣诲姞绉昏溅浠诲姟
+        /// </summary>
+        /// <param name="SourceAddress">璧风偣</param>
+        /// <param name="TargetAddress">缁堢偣</param>
+        /// <param name="ShuttleCarCode">绌挎杞﹀彿</param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public WebResponseContent AddRelocationCarTask(string SourceAddress, string TargetAddress, string ShuttleCarCode = "", string remark = "")
+        {
+            #region 鍒涘缓鍫嗗灈鏈虹Щ杞︿换鍔�
+            Dt_Task dt_Task = new Dt_Task()
+            {
+                TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
+                Grade = 2,
+                Roadway = "SC01",
+                TaskType = (int)TaskOtherTypeEnum.RelocationCar,
+                SourceAddress = SourceAddress,
+                TargetAddress = TargetAddress,
+                CurrentAddress = SourceAddress,
+                NextAddress = TargetAddress,
+                CreateDate = DateTime.Now,
+                Creater = "WCS",
+                TaskState = (int)TaskCarStatusEnum.CarNew,
+                ShuttleCarCode = ShuttleCarCode,
+                WMSId = 0,
+                Remark = remark
+            };
+            return AddData(dt_Task);
+            #endregion
+        }
     }
 }

--
Gitblit v1.9.3