| | |
| | | IsFull = false, |
| | | AreaCode = area.AreaCode ?? "", |
| | | LocationId = loation.Id, |
| | | ProductionLine = task.ProductionLine, |
| | | StockInfoDetails = new List<DtStockInfoDetail>() |
| | | { |
| | | new DtStockInfoDetail() |
| | |
| | | { |
| | | NGStation = efg.Select(x => x.stationNGChildCode).ToList(); |
| | | } |
| | | content = await CreateNewTask(input, NGStation, 2); |
| | | content = await CreateNewTask(input, result.ProductionLine, NGStation, 2); |
| | | return content.Error("存在异常电芯"); |
| | | } |
| | | |
| | |
| | | { |
| | | // TODO 送至包装 |
| | | List<string> strings = stationManagers.Where(x => x.stationType == 0).Select(x => x.Roadway).ToList(); |
| | | content = await CreateNewTask(input, strings, 3); |
| | | content = await CreateNewTask(input, result.ProductionLine, strings, 3); |
| | | return content; |
| | | } |
| | | else |
| | |
| | | var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker"); |
| | | var strings = config.ConfigValue.Split(',').ToList(); |
| | | // TODO 入库 |
| | | content = await CreateNewTask(input, strings); |
| | | content = await CreateNewTask(input, result.ProductionLine, strings); |
| | | if (content.Status) |
| | | await _boxingInfoRepository.AddDataNavAsync(boxing); |
| | | } |
| | |
| | | List<string> strings = stationManagers.Roadway.Split(',').ToList(); |
| | | Console.WriteLine(strings.ToJsonString() + "b-----------------------"); |
| | | //// 调用CreateNewTask方法,创建新任务 |
| | | content = await CreateNewTask(input, strings); |
| | | content = await CreateNewTask(input, result.ProductionLine, strings); |
| | | if (content.Status) |
| | | { |
| | | var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing); |
| | |
| | | Creater = "System", // 修正拼写错误 |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | ProductionLine = stock.ProductionLine, |
| | | }; |
| | | |
| | | var taskDTO = CreateTaskDTO(taskNew); |
| | |
| | | if (task != null && task.TaskState == (int)TaskInStatusEnum.InNew) |
| | | { |
| | | // 创建WMS任务 |
| | | WMSTaskDTO taskDTO = new WMSTaskDTO() |
| | | { |
| | | TaskNum = task.TaskNum.Value, |
| | | Grade = 1, |
| | | PalletCode = task.PalletCode, |
| | | RoadWay = task.Roadway, |
| | | SourceAddress = task.SourceAddress, |
| | | TargetAddress = task.Roadway, |
| | | TaskState = task.TaskState.Value, |
| | | Id = 0, |
| | | TaskType = task.TaskType, |
| | | }; |
| | | WMSTaskDTO taskDTO = CreateTaskDTO(task); |
| | | //WMSTaskDTO taskDTO = new WMSTaskDTO() |
| | | //{ |
| | | // TaskNum = task.TaskNum.Value, |
| | | // Grade = 1, |
| | | // PalletCode = task.PalletCode, |
| | | // RoadWay = task.Roadway, |
| | | // SourceAddress = task.SourceAddress, |
| | | // TargetAddress = task.Roadway, |
| | | // TaskState = task.TaskState.Value, |
| | | // Id = 0, |
| | | // TaskType = task.TaskType, |
| | | //}; |
| | | return content.OK(data: task); |
| | | } |
| | | |
| | | // 根据位置查询区域信息 |
| | | var areaCode = Regex.Replace(input.Position, @"-(\d+)", ""); |
| | | var area = await QueryAreaInfoByPosition(areaCode); |
| | | if (area == null) |
| | | { |
| | | return content.Error("该点位不在区域列表中存在"); |
| | | } |
| | | |
| | | // 获取整盘电芯属性状态 |
| | | TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, input.PalletCode); |
| | | content = await GetTrayCellStatusAsync(trayCells); |
| | | if (!content.Status) |
| | | { |
| | | ConsoleHelper.WriteErrorLine($"获取电芯状态失败:{content.Message}"); |
| | | return content; |
| | | } |
| | | |
| | | var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); |
| | | if (result.ProductionLine.IsNullOrEmpty()) |
| | | { |
| | | ConsoleHelper.WriteErrorLine($"当前托盘无产线,联系MOM添加产线"); |
| | | return content.Error("当前托盘无产线,联系MOM添加产线"); |
| | | } |
| | | |
| | | |
| | | var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 6 && x.stationChildCode == input.Position).FirstOrDefault(); |
| | | if (stationManagers == null) |
| | |
| | | throw new Exception("未找到空托盘入库站台和入库站台配置"); |
| | | } |
| | | List<string> strings = stationManagers.Roadway.Split(',').ToList(); |
| | | //Console.WriteLine(strings.ToJsonString() + "b-----------------------"); |
| | | |
| | | return await CreateNewTask(input, strings, 1); |
| | | return await CreateNewTask(input, result.ProductionLine, strings, 1); |
| | | } |
| | | catch (Exception) |
| | | { |
| | |
| | | { |
| | | return content.Error("库存信息不存在"); |
| | | } |
| | | |
| | | //ConsoleHelper.WriteColorLine(JsonConvert.SerializeObject(stockInfo), ConsoleColor.DarkMagenta); |
| | | |
| | | |
| | | // 新增重复任务校验 |
| | | var hasTask = BaseDal.QueryFirst(x => x.PalletCode == stockInfo.PalletCode); |
| | |
| | | var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() |
| | | .Includes(x => x.LocationInfo) // 预加载LocationInfo |
| | | .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails |
| | | .Where(x => x.ProductionLine == station.productLine) |
| | | .Where(x => x.AreaCode == areaCode && x.IsFull == false) |
| | | .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "空托盘")) |
| | | .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 |
| | |
| | | Creater = "System", // 修正拼写错误 |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | ProductionLine = stockInfo.ProductionLine, |
| | | }; |
| | | } |
| | | |
| | |
| | | TaskState = task.TaskState.Value, |
| | | Id = 0, |
| | | TaskType = task.TaskType, |
| | | ProductionLine = task.ProductionLine, |
| | | }; |
| | | } |
| | | |
| | |
| | | TaskState = (int)TaskInStatusEnum.Line_InFinish, |
| | | TaskType = (int)TaskInboundTypeEnum.Inbound, |
| | | TaskNum = await BaseDal.GetTaskNo(), |
| | | Creater = "Systeam" |
| | | Creater = "Systeam", |
| | | ProductionLine = result.ProductionLine |
| | | }; |
| | | |
| | | // 创建WMS任务 |
| | |
| | | TaskState = (int)TaskInStatusEnum.Line_InFinish, |
| | | TaskType = (int)TaskInboundTypeEnum.InTray, |
| | | TaskNum = await BaseDal.GetTaskNo(), |
| | | Creater = "Systeam" |
| | | Creater = "Systeam", |
| | | ProductionLine = result.ProductionLine |
| | | }; |
| | | // 创建WMS任务 |
| | | WMSTaskDTO taskDTO = CreateWMSTaskDTO(task); |
| | |
| | | TaskState = taskOld.TaskState.Value, |
| | | Id = 0, |
| | | TaskType = taskOld.TaskType, |
| | | ProductionLine = taskOld.ProductionLine |
| | | }; |
| | | } |
| | | else if (source is Dt_Task task) |
| | |
| | | TaskState = task.TaskState.Value, |
| | | Id = 0, |
| | | TaskType = task.TaskType, |
| | | ProductionLine = task.ProductionLine |
| | | }; |
| | | } |
| | | else |
| | |
| | | } |
| | | } |
| | | |
| | | var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration); |
| | | if (stocks != null && stocks.Count > 0) |
| | | if (stock.IsFull) |
| | | { |
| | | foreach (var item in stocks) |
| | | var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration); |
| | | if (stocks != null && stocks.Count > 0) |
| | | { |
| | | item.SpecialParameterDuration = stock.SpecialParameterDuration; |
| | | item.ParameterInfos = stock.ParameterInfos; |
| | | item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration)); |
| | | foreach (var item in stocks) |
| | | { |
| | | item.SpecialParameterDuration = stock.SpecialParameterDuration; |
| | | item.ParameterInfos = stock.ParameterInfos; |
| | | item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration)); |
| | | } |
| | | var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocks); |
| | | } |
| | | var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocks); |
| | | } |
| | | |
| | | // 添加历史任务 |
| | |
| | | |
| | | #region 任务请求方法 |
| | | |
| | | |
| | | private static readonly SemaphoreSlim _semaphoreUpdate = new SemaphoreSlim(1, 1); |
| | | // 更新任务货位 |
| | | |
| | | private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task) |
| | | { |
| | | if (task == null) |
| | | { |
| | | return new WebResponseContent().Error("任务对象为空"); |
| | | } |
| | | |
| | | await _semaphoreUpdate.WaitAsync(); |
| | | try |
| | | { |
| | | // 创建WebResponseContent对象 |
| | | var content = new WebResponseContent(); |
| | | |
| | | // 获取目标地址和更新任务状态 |
| | | |
| | | input.Position = Regex.Replace(input.Position, @"-(\d+)", ""); |
| | | if (Convert.ToInt32(input.Position) > 1999) |
| | | if (task == null) |
| | | { |
| | | input.Position = (Convert.ToInt32(input.Position) - 1000).ToString(); |
| | | return new WebResponseContent().Error("任务对象为空"); |
| | | } |
| | | |
| | | if (task.TaskType == (int)TaskInboundTypeEnum.InNG) |
| | | try |
| | | { |
| | | // TODO 根据巷道查找对应NG口,现在默认去静置堆垛机的异常口货位号 |
| | | task.CurrentAddress = input.Position; |
| | | task.TargetAddress = "002-021-000"; |
| | | task.NextAddress = "002-021-000"; |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | bool isResult = await BaseDal.UpdateDataAsync(task); |
| | | return content.OK(data: task); |
| | | } |
| | | else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality) |
| | | { |
| | | var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode); |
| | | task.CurrentAddress = input.Position; |
| | | task.TargetAddress = stockInfo.LocationInfo.LocationCode; |
| | | task.NextAddress = stockInfo.LocationInfo.LocationCode; |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | bool isResult = await BaseDal.UpdateDataAsync(task); |
| | | return content.OK(data: task); |
| | | } |
| | | else |
| | | { |
| | | var location = await GetLocationDistributeAsync(task.Roadway); |
| | | if (location == null) |
| | | // 创建WebResponseContent对象 |
| | | var content = new WebResponseContent(); |
| | | |
| | | // 获取目标地址和更新任务状态 |
| | | |
| | | input.Position = Regex.Replace(input.Position, @"-(\d+)", ""); |
| | | if (Convert.ToInt32(input.Position) > 1999) |
| | | { |
| | | return content.Error("无法获取货位信息"); |
| | | input.Position = (Convert.ToInt32(input.Position) - 1000).ToString(); |
| | | } |
| | | |
| | | string toAddress = location.LocationCode; |
| | | int taskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | int beforeStatus = location.LocationStatus; |
| | | // 更新货位信息 |
| | | location.LocationStatus = (int)LocationEnum.Lock; |
| | | |
| | | // 更新任务信息 |
| | | MapTaskProperties(task, input, toAddress, taskState); |
| | | |
| | | // 开始事务 |
| | | var isResult = await UpdateTaskAsync(task, location, beforeStatus); |
| | | if (!isResult) |
| | | if (task.TaskType == (int)TaskInboundTypeEnum.InNG) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("更新任务失败"); |
| | | // TODO 根据巷道查找对应NG口,现在默认去静置堆垛机的异常口货位号 |
| | | task.CurrentAddress = input.Position; |
| | | task.TargetAddress = "002-021-000"; |
| | | task.NextAddress = "002-021-000"; |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | bool isResult = await BaseDal.UpdateDataAsync(task); |
| | | return content.OK(data: task); |
| | | } |
| | | else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality) |
| | | { |
| | | var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode); |
| | | task.CurrentAddress = input.Position; |
| | | task.TargetAddress = stockInfo.LocationInfo.LocationCode; |
| | | task.NextAddress = stockInfo.LocationInfo.LocationCode; |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | bool isResult = await BaseDal.UpdateDataAsync(task); |
| | | return content.OK(data: task); |
| | | } |
| | | else |
| | | { |
| | | var location = await GetLocationDistributeAsync(task.Roadway); |
| | | if (location == null) |
| | | { |
| | | return content.Error("无法获取货位信息"); |
| | | } |
| | | |
| | | // 提交事务 |
| | | _unitOfWorkManage.CommitTran(); |
| | | return content.OK(data: task); |
| | | string toAddress = location.LocationCode; |
| | | int taskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | int beforeStatus = location.LocationStatus; |
| | | // 更新货位信息 |
| | | location.LocationStatus = (int)LocationEnum.Lock; |
| | | |
| | | // 更新任务信息 |
| | | MapTaskProperties(task, input, toAddress, taskState); |
| | | |
| | | // 开始事务 |
| | | var isResult = await UpdateTaskAsync(task, location, beforeStatus); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("更新任务失败"); |
| | | } |
| | | |
| | | // 提交事务 |
| | | _unitOfWorkManage.CommitTran(); |
| | | return content.OK(data: task); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 回滚事务 |
| | | _unitOfWorkManage.RollbackTran(); |
| | | // 这里可以添加日志记录 |
| | | return new WebResponseContent().Error($"更新任务时发生错误: {ex.Message}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | catch (Exception) |
| | | { |
| | | // 回滚事务 |
| | | _unitOfWorkManage.RollbackTran(); |
| | | // 这里可以添加日志记录 |
| | | return new WebResponseContent().Error($"更新任务时发生错误: {ex.Message}"); |
| | | |
| | | throw; |
| | | } |
| | | finally { _semaphoreUpdate.Release(); } |
| | | } |
| | | |
| | | private void MapTaskProperties(Dt_Task task, RequestTaskDto input, string toAddress, int taskState) |
| | |
| | | /// <param name="process">巷道</param> |
| | | /// <param name="flag">标识(0-入库,1-空托盘入库,2-NG入库,3-出库)</param> |
| | | /// <returns></returns> |
| | | private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, List<string> process = null, int flag = 0) |
| | | private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, string productionLine, List<string> process = null, int flag = 0) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | |
| | | TaskState = flag == 3 ? (int)TaskOutStatusEnum.OutNew : (int)TaskInStatusEnum.InNew, |
| | | TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : flag == 1 ? (int)TaskInboundTypeEnum.InTray : flag == 2 ? (int)TaskInboundTypeEnum.InNG : (int)TaskOutboundTypeEnum.Outbound, |
| | | TaskNum = await BaseDal.GetTaskNo(), |
| | | Creater = "Systeam" |
| | | Creater = "Systeam", |
| | | ProductionLine = productionLine |
| | | }; |
| | | |
| | | // 尝试添加新任务 |
| | |
| | | TaskState = task.TaskState.Value, |
| | | Id = 0, |
| | | TaskType = task.TaskType, |
| | | ProductionLine = task.ProductionLine |
| | | }; |
| | | content.OK(data: taskDTO); |
| | | } |