| | |
| | | { |
| | | OutTaskCompleteDto outTaskCompleteDto = new OutTaskCompleteDto() |
| | | { |
| | | TaskId = task.OrderNo, |
| | | DevId = task.TargetAddress, |
| | | TaskId = task.OrderNo ?? string.Empty, |
| | | DevId = task.TargetAddress ?? string.Empty, |
| | | ReqTime = DateTime.Now.ToString() |
| | | }; |
| | | return await OutTaskComplete(outTaskCompleteDto); |
| | |
| | | return await ExecuteWithinTransactionAsync(async () => |
| | | { |
| | | stockInfo.LocationId = 0; |
| | | stockInfo.LocationCode = null; |
| | | stockInfo.LocationCode = string.Empty; |
| | | stockInfo.OutboundDate = DateTime.Now; |
| | | |
| | | location.LocationStatus = LocationStatusEnum.Free.GetHashCode(); |
| | |
| | | if (!updateLocationResult || !updateStockResult) |
| | | return WebResponseContent.Instance.Error("任务完成失败"); |
| | | |
| | | // 保存任务历史 |
| | | var historyTask = _mapper.Map<Dt_Task_Hty>(task); |
| | | historyTask.InsertTime = DateTime.Now; |
| | | historyTask.OperateType = "空托盘入库完成"; |
| | | if (await _task_HtyService.Repository.AddDataAsync(historyTask) <= 0) |
| | | return WebResponseContent.Instance.Error("任务历史保存失败"); |
| | | var saveTaskHistoryResult = await SaveTaskHistoryAsync(task, "空托盘入库完成"); |
| | | if (!saveTaskHistoryResult.Status) |
| | | return saveTaskHistoryResult; |
| | | |
| | | // 保存库存历史 |
| | | var historyStock = _mapper.Map<Dt_StockInfo_Hty>(stockInfo); |
| | | historyStock.InsertTime = DateTime.Now; |
| | | historyStock.OperateType = "空托盘入库完成"; |
| | | if (await _stockInfo_HtyService.Repository.AddDataAsync(historyStock) <= 0) |
| | | return WebResponseContent.Instance.Error("库存历史保存失败"); |
| | | var saveStockHistoryResult = await SaveStockHistoryAsync(stockInfo, "空托盘入库完成"); |
| | | if (!saveStockHistoryResult.Status) |
| | | return saveStockHistoryResult; |
| | | |
| | | var deleteResult = await BaseDal.DeleteDataAsync(task); |
| | | if (!deleteResult) return WebResponseContent.Instance.Error("任务完成失败"); |
| | |
| | | return await ExecuteWithinTransactionAsync(async () => |
| | | { |
| | | stockInfo.LocationId = 0; |
| | | stockInfo.LocationCode = null; |
| | | stockInfo.LocationCode = string.Empty; |
| | | stockInfo.StockStatus = StockStatusEmun.出库完成.GetHashCode(); |
| | | |
| | | location.LocationStatus = LocationStatusEnum.Free.GetHashCode(); |
| | |
| | | if (!updateLocationResult || !updateStockResult) |
| | | return WebResponseContent.Instance.Error("任务完成失败"); |
| | | |
| | | // 保存任务历史 |
| | | var historyTask = _mapper.Map<Dt_Task_Hty>(task); |
| | | historyTask.InsertTime = DateTime.Now; |
| | | historyTask.OperateType = "空托盘出库完成"; |
| | | if (await _task_HtyService.Repository.AddDataAsync(historyTask) <= 0) |
| | | return WebResponseContent.Instance.Error("任务历史保存失败"); |
| | | var saveTaskHistoryResult = await SaveTaskHistoryAsync(task, "空托盘出库完成"); |
| | | if (!saveTaskHistoryResult.Status) |
| | | return saveTaskHistoryResult; |
| | | |
| | | // 保存库存历史 |
| | | var historyStock = _mapper.Map<Dt_StockInfo_Hty>(stockInfo); |
| | | historyStock.InsertTime = DateTime.Now; |
| | | historyStock.OperateType = "空托盘出库完成"; |
| | | if (await _stockInfo_HtyService.Repository.AddDataAsync(historyStock) <= 0) |
| | | return WebResponseContent.Instance.Error("库存历史保存失败"); |
| | | var saveStockHistoryResult = await SaveStockHistoryAsync(stockInfo, "空托盘出库完成"); |
| | | if (!saveStockHistoryResult.Status) |
| | | return saveStockHistoryResult; |
| | | |
| | | var deleteResult = await BaseDal.DeleteDataAsync(task); |
| | | if (!deleteResult) return WebResponseContent.Instance.Error("任务完成失败"); |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"修改失败: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查找托盘是否有任务 |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | private async Task<WebResponseContent> GetTaskByPalletCodeAsync(string palletCode) |
| | | { |
| | | try |
| | | { |
| | | var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == palletCode); |
| | | if (task == null) |
| | | return WebResponseContent.Instance.Error("未找到对应的任务"); |
| | | var taskDto = _mapper.Map<WMSTaskDTO>(task); |
| | | return WebResponseContent.Instance.OK("查询成功", taskDto); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"查询任务失败: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 完成任务后统一处理(删除任务数据) |
| | | /// </summary> |
| | | private async Task<WebResponseContent> CompleteTaskAsync(Dt_Task task, string operateType = "") |
| | | { |
| | | var deleteTaskResult = await BaseDal.DeleteDataAsync(task); |
| | | if (!deleteTaskResult) return WebResponseContent.Instance.Error("任务完成失败"); |
| | | |
| | | var historyTask = _mapper.Map<Dt_Task_Hty>(task); |
| | | historyTask.InsertTime = DateTime.Now; |
| | | historyTask.OperateType = operateType; |
| | | var saveResult = await _task_HtyService.Repository.AddDataAsync(historyTask) > 0; |
| | | if (!saveResult) return WebResponseContent.Instance.Error("任务历史保存失败"); |
| | | |
| | | return WebResponseContent.Instance.OK("任务完成"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据巷道确定目标地址(支持多出库口轮询) |
| | | /// </summary> |
| | | private string DetermineTargetAddress(string roadway, Dictionary<string, List<string>> addressMap) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(roadway)) |
| | | return "10080"; |
| | | |
| | | // 查找匹配的巷道前缀 |
| | | string matchedPrefix = null; |
| | | foreach (var kvp in addressMap) |
| | | { |
| | | if (roadway.Contains(kvp.Key)) |
| | | { |
| | | matchedPrefix = kvp.Key; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (matchedPrefix == null) |
| | | return "10080"; |
| | | |
| | | var addresses = addressMap[matchedPrefix]; |
| | | if (addresses == null || addresses.Count == 0) |
| | | return "10080"; |
| | | |
| | | // 单个地址,直接返回 |
| | | if (addresses.Count == 1) |
| | | return addresses[0]; |
| | | |
| | | // 多个地址,使用轮询服务 |
| | | return _roundRobinService.GetNextAddress(matchedPrefix, addresses); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | TaskNum = await BaseDal.GetTaskNo(), |
| | | PalletCode = palletCode, |
| | | PalletType = stockInfo?.PalletType ?? 0, |
| | | Roadway = stock.Roadway, |
| | | Roadway = stock.Roadway ?? string.Empty, |
| | | TaskType = taskType.GetHashCode(), |
| | | TaskStatus = TaskRobotStatusEnum.RobotNew.GetHashCode(), |
| | | SourceAddress = sourceLineNo, |
| | |
| | | if (!result) |
| | | return WebResponseContent.Instance.Error($"机械手{taskName}任务创建失败"); |
| | | |
| | | var wmstaskDto = _mapper.Map<WMSTaskDTO>(task); |
| | | var wmstaskDto = _mapper.Map<WMSTaskDTO>(task) ?? new WMSTaskDTO(); |
| | | return WebResponseContent.Instance.OK($"机械手{taskName}任务创建成功", wmstaskDto); |
| | | } |
| | | catch (Exception ex) |