using MailKit.Search; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.Log; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Core; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Task; using WIDESEA_Model.Models; using static WIDESEA_ITaskInfoService.ITaskService; namespace WIDESEA_TaskInfoService { public partial class WMSCruJob { /// /// 判断巷道内移库 /// /// /// /// public WebResponseContent JudgmentIsRelocations(Dt_Task dt_Task) { WebResponseContent content = new WebResponseContent(); try { string Locationcodeadd = dt_Task.TaskType == (int)TaskTypeEnum.Inbound ? dt_Task.NextAddress : dt_Task.CurrentAddress; Dt_LocationInfo dt_Location = _locationInfoService.FindStorageLocation(Locationcodeadd); if (dt_Location == null) { return content.Error("未能查找到库位"); } if (dt_Location.RoadwayNo == "5") return content.OK(); //浅货位直接返回,可下发出入口任务 if(dt_Location.Depth == 1 && dt_Task.TaskType== (int)TaskTypeEnum.Outbound) return content.OK(); int locrow = _locationInfoService.judgmentRow(dt_Location.RoadwayNo, dt_Location.Row); Dt_LocationInfo shallowLocation = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, locrow, dt_Location.Layer, dt_Location.Column); if (dt_Location.Depth == 1 && dt_Task.TaskType == (int)TaskTypeEnum.Inbound) { if (shallowLocation.LocationStatus == (int)LocationStatusEnum.InStock) return content.OK(); return content.Error($"入库至深库位,但是浅货位有货,任务号:{dt_Task.TaskId},托盘条码"); } if (shallowLocation.LocationStatus == (int)LocationStatusEnum.Free) return content.OK(); //判断是否有移库任务 var TransferTask = _taskService.GeRelocationTaskQueue(shallowLocation.LocationCode); if (TransferTask != null) { //进行下发给堆垛机任务 WCSginseng result = _taskService.SC_IssueTasks(TransferTask.TaskId,int.Parse(TransferTask.Roadway),TransferTask.TaskNum,TransferTask.PalletCode,int.Parse(TransferTask.PalletType),TransferTask.CurrentAddress,TransferTask.NextAddress,dt_Task.TargetAddress); if (result.IsSuccess) { TransferTask.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting; _taskService.UpdateData(TransferTask); return content.OK(); } else { UpdateTaskStatus(dt_Task, result, successStatus: dt_Task.TaskStatus == (int)InTaskStatusEnum.PLC_InFinish ? (int)InTaskStatusEnum.SC_IntExecuting : (int)OutTaskStatusEnum.SC_OutExecuting, 1); return content.Error($"下发wcs失败,原因:{result.Message}"); } } var CuttTransferTask = _taskService.RelocationTaskProgress(dt_Task.Roadway); //判断当前是否有移库任务 if (CuttTransferTask) return content.Error("当前有移库任务,不可下发"); if (shallowLocation.LocationStatus != (int)LocationStatusEnum.InStock) return content.Error(); //生成移库任务 return content = GenerateTransferTask(shallowLocation.LocationCode); } catch (Exception ex) { return content.Error($"判断巷道内移库,失败,方法内故障,原因:{ex.Message}"); } } public WebResponseContent GenerateTransferTask(string shallowLocation) { WebResponseContent webResponse = new WebResponseContent(); try { Dt_LocationInfo OriginalLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == shallowLocation).FirstOrDefault(); Dt_StockInfo dt_StockInfo = _stockInfoService.Repository.QueryData(x => x.LocationCode == shallowLocation).FirstOrDefault(); Dt_LocationInfo newLocation = _locationInfoService.GetLocation(OriginalLocation.RoadwayNo, OriginalLocation.LocationType); List dt_Locations = new List(); var TransferTask = _taskService.GeRelocationTaskQueue(shallowLocation); //进行生成任务,下发任务至MES Dt_Task task = new Dt_Task(); task.TaskNum = "0"; task.PalletCode = dt_StockInfo.PalletCode; task.PalletType = dt_StockInfo.PalletType; task.Roadway = OriginalLocation.RoadwayNo; task.TaskType = (int)TaskTypeEnum.Relocation; task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationNew; task.SourceAddress = OriginalLocation.LocationCode; task.TargetAddress = newLocation.LocationCode; task.CurrentAddress = OriginalLocation.LocationCode; task.NextAddress = newLocation.LocationCode; task.WarehouseId = OriginalLocation.WarehouseId; task.OrderNo = ""; task.Grade = 1; task.Creater = "MES"; task.CreateDate = DateTime.Now; OriginalLocation.LocationStatus = (int)LocationStatusEnum.Lock; newLocation.LocationStatus = (int)LocationStatusEnum.Lock; dt_StockInfo.StockStatus = (int)StockStatusEmun.移库锁定; dt_Locations.Add(OriginalLocation); dt_Locations.Add(newLocation); _unitOfWorkManage.BeginTran(); int TaskId = _taskService.Repository.AddData(task); _locationInfoService.UpdateData(dt_Locations); _stockInfoService.UpdateData(dt_StockInfo); _unitOfWorkManage.CommitTran(); return webResponse.Error("已生成移库任务"); //进行下发给堆垛机任务 /*WCSginseng result = _taskService.SC_IssueTasks( TaskId, int.Parse(task.Roadway), task.TaskNum, task.PalletCode, int.Parse(task.PalletType), task.CurrentAddress, task.NextAddress, task.TargetAddress); if (result.IsSuccess) { Dt_Task dt_Task=_taskService.Repository.QueryFirst(x=>x.TaskId== task.TaskId); dt_Task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting; _taskService.UpdateData(dt_Task); return webResponse.OK(); } else { return webResponse.Error($"下发移库失败,原因:{result.Message}"); }*/ /*MES_parameter mES_Parame = _taskService.ApplicationChangeStorageLocation(dt_StockInfo.PalletCode, OriginalLocation.LocationCode, newLocation.LocationCode); if (mES_Parame != null) { if (mES_Parame.Result == "Y") { //进行生成任务,下发任务至MES Dt_Task task = new Dt_Task(); task.TaskNum = "0"; task.PalletCode = dt_StockInfo.PalletCode; task.PalletType = dt_StockInfo.PalletType; task.Roadway = OriginalLocation.RoadwayNo; task.TaskType = (int)TaskTypeEnum.Relocation; task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationNew; task.SourceAddress = OriginalLocation.LocationCode; task.TargetAddress = newLocation.LocationCode; task.CurrentAddress = OriginalLocation.LocationCode; task.NextAddress = newLocation.LocationCode; task.WarehouseId = OriginalLocation.WarehouseId; task.OrderNo = ""; task.Grade = 1; task.Creater = "MES"; task.CreateDate = DateTime.Now; OriginalLocation.LocationStatus = (int)LocationStatusEnum.Lock; newLocation.LocationStatus = (int)LocationStatusEnum.Lock; dt_StockInfo.StockStatus = (int)StockStatusEmun.移库锁定; dt_Locations.Add(OriginalLocation); dt_Locations.Add(newLocation); _unitOfWorkManage.BeginTran(); int TaskId = _taskService.Repository.AddData(task); _locationInfoService.UpdateData(dt_Locations); _stockInfoService.UpdateData(dt_StockInfo); _unitOfWorkManage.CommitTran(); //return webResponse.Error("已生成移库任务"); //进行下发给堆垛机任务 WCSginseng result = _taskService.SC_IssueTasks( TaskId, int.Parse(task.Roadway), task.TaskNum, task.PalletCode, int.Parse(task.PalletType), task.CurrentAddress, task.NextAddress, task.TargetAddress); if (result.IsSuccess) { task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting; _taskService.UpdateData(task); return webResponse.OK(); } else { return webResponse.Error($"下发移库失败,原因:{result.Message}"); } } else { return webResponse.Error($"申请储位异动,MES不允许移动====>>>>返回内容:{mES_Parame.ToJson()}"); } } else { return webResponse.Error("申请储位异动,MES返回为空"); }*/ } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return webResponse.Error($"移库任务生成方法,系统故障,原因:{ex.Message}"); } } } }