From f40ba2a9fb9d3c2ece08e9a7cd987d4744dccab2 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 17 六月 2025 15:22:05 +0800
Subject: [PATCH] 优化库内移库,堆垛机和穿梭车交互逻辑

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs |  154 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 111 insertions(+), 43 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs"
index f15f556..59b47ef 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs"
@@ -21,46 +21,72 @@
         /// <returns></returns>
         public WebResponseContent ShuttleCarTaskCompleted(int taskNum, short TaskTypeComplete)
         {
-            WebResponseContent content = new WebResponseContent();
+            WebResponseContent content = new WebResponseContent().OK();
             try
             {
                 var task = GetTaskInfo(taskNum);
-                if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵taskNum}銆�");
-                switch (TaskTypeComplete)
+                if (task != null)
                 {
-                    case 1://鍏ュ簱瀹屾垚
-                        {
-                            if (task.TaskType != (int)TaskInboundTypeEnum.Inbound) throw new Exception($"浠诲姟绫诲瀷涓嶅尮閰�,浠诲姟鍙枫�恵taskNum}銆�");
-                            int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
-                            task.TaskState = nextStatus;
-                            task.ModifyDate = DateTime.Now;
-                            task.Modifier = "System";
-                            content = AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete.ToJson());
-                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绌挎杞﹀叆搴撳畬鎴�");
-                        }
-                        break;
-                    case 2://鍑哄簱瀹屾垚
-                        {
-                            int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
-                            task.TaskState = nextStatus;
-                            task.ModifyDate = DateTime.Now;
-                            task.Modifier = "System";
-                            content = UpdateData(task);
-                        }
-                        break;
-                    case 10://鍏呯數瀹屾垚
-                        content.OK();
-                        break;
-                    case 13://A渚у洖闆跺畬鎴�
-                    case 14://B渚у洖闆跺畬鎴�
-                        {
-                            if (task.TaskType != (int)TaskOtherTypeEnum.RelocationCar) throw new Exception($"浠诲姟绫诲瀷涓嶅尮閰�,浠诲姟鍙枫�恵taskNum}銆�");
-                            task.TaskState = (int)TaskCarStatusEnum.ShuttleCar_Finish;
-                            content = UpdateData(task);
-                        }
-                        break;
-                    default:
-                        break;
+                    switch (TaskTypeComplete)
+                    {
+                        case 1://鍏ュ簱瀹屾垚
+                            {
+                                if (TaskInboundTypes.Contains(task.TaskType) && task.TaskState == TaskInStatusEnum.Car_InExecuting.ObjToInt())
+                                {
+                                    task.TaskState = TaskInStatusEnum.InFinish.ObjToInt();
+                                    AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
+                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绌挎杞﹀叆搴撳畬鎴�");
+                                }
+                                else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarTarget_Executing.ObjToInt())
+                                {
+                                    task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt();
+                                    AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
+                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绌挎杞︾Щ搴撳畬鎴�");
+                                }
+                            }
+                            break;
+                        case 2://鍑哄簱瀹屾垚
+                            {
+                                if (TaskOutboundTypes.Contains(task.TaskType) && task.TaskState == TaskOutStatusEnum.Car_OutExecuting.ObjToInt())
+                                {
+                                    task.TaskState = TaskOutStatusEnum.Car_OutFinish.ObjToInt();
+                                    UpdateData(task);
+                                }
+                                else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarSource_Executing.ObjToInt())
+                                {
+                                    task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt();
+                                    UpdateData(task);
+                                }
+                            }
+                            break;
+                        case 10://鍏呯數瀹屾垚
+                            {
+                                if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == (int)CarChargingTaskEnum.CarCharging_Charging)//绉昏溅鍏呯數
+                                {
+                                    task.TaskState = CarChargingTaskEnum.CarChargingFinish.ObjToInt();
+                                    AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
+                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绌挎杞﹀厖鐢靛畬鎴�");
+                                }
+                            }
+                            break;
+                        case 13://A渚у洖闆跺畬鎴�
+                        case 14://B渚у洖闆跺畬鎴�
+                            {
+                                if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() && task.TaskState == TaskCarStatusEnum.ShuttleCar_Executing.ObjToInt())//绉昏溅浠诲姟
+                                {
+                                    task.TaskState = TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt();
+                                    UpdateData(task);
+                                }
+                                else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == CarChargingTaskEnum.CarCharging_Executing.ObjToInt())//绉昏溅鍏呯數
+                                {
+                                    task.TaskState = CarChargingTaskEnum.CarCharging_Finish.ObjToInt();
+                                    UpdateData(task);
+                                }
+                            }
+                            break;
+                        default:
+                            break;
+                    }
                 }
             }
             catch (Exception ex)
@@ -76,21 +102,26 @@
         /// <param name="task"></param>
         /// <param name="operateType"></param>
         /// <returns></returns>
-        public WebResponseContent AddTask_Hty(Dt_Task task, string operateType)
+        public WebResponseContent AddTask_Hty(Dt_Task task, TaskOperateTypeEnum operateType)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                if (_taskHtyService.AddTask_Hty(task, operateType).Status)//娣诲姞鍘嗗彶浠诲姟鍒犻櫎浠诲姟
-                    content = DeleteData(task);
+                Db.Ado.BeginTran();
+                content = _taskHtyService.AddTask_Hty(task, operateType);//娣诲姞鍘嗗彶浠诲姟鍒犻櫎浠诲姟
+                if (!content.Status) throw new Exception(content.Message);
+                content = DeleteData(task);
+                if (!content.Status) throw new Exception(content.Message);
+                Db.Ado.CommitTran();
             }
             catch (Exception ex)
             {
+                Db.Ado.RollbackTran();
                 content.Error(ex.Message);
             }
             return content;
         }
-
+        public static int tasktype = 0;
         /// <summary>
         /// 鏌ヨ绌挎杞﹀嚭鍏ュ簱浠诲姟
         /// </summary>
@@ -99,10 +130,47 @@
         /// <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);
+            Dt_Task? _Task = null;
+            if (tasktype == 0)
+            {
+                if (string.IsNullOrEmpty(currentAddress))
+                    _Task = 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
+                    _Task = 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);
+            }
             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);
+            {
+                if (TaskInboundTypes.Contains(tasktype))
+                {
+                    _Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy) ?? BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy);
+                }
+                else if (TaskOutboundTypes.Contains(tasktype))
+                {
+                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy) ?? BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
+                }
+            }
+            if (_Task != null) tasktype = _Task.TaskType;
+            return _Task;
+        }
+        /// <summary>
+        /// 鑾峰彇绉诲簱浠诲姟
+        /// </summary>
+        /// <param name="deviceNo"></param>
+        /// <param name="currentAddress"></param>
+        /// <returns></returns>
+        public Dt_Task ShuttleCarRelocationTask(string deviceNo, string currentAddress = "")
+        {
+            List<Dt_Task> tasks = null;
+            Dt_Task? task = null;
+            if (string.IsNullOrEmpty(currentAddress))
+                tasks = BaseDal.QueryData(x => /*x.ShuttleCarCode == deviceNo &&*/ TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList();
+            else
+                tasks = BaseDal.QueryData(x => /*x.ShuttleCarCode == deviceNo &&*/ x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList();
+            if (tasks != null && tasks.Count > 0)
+            {
+                task = tasks[0];
+            }
+            return task;
         }
     }
 }

--
Gitblit v1.9.3