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