using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Metadata; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Core; using WIDESEA_Core.Enums; using WIDESEA_DTO; using WIDESEA_Model.Models; using WIDESEA_Repository; using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_Model.Models; namespace WIDESEA_StoragIntegrationServices { public partial class WCSService { /// /// 请求入库巷道号 /// /// /// public WebResponseContent RequestInboundRoadWayNo(RequestTaskDto json) { WebResponseContent response = new WebResponseContent(); try { //如任务已存在则 返回此任务 var checkTask = _taskRepository.QueryFirst(x => x.PalletCode == json.PalletCode && x.PVI == json.PVI); if (checkTask != null) { return response.OK("申请入库成功", data: checkTask); } var carInfo = _carBodyInfoRepository.QueryFirst(x => x.RFID == json.PVI && x.PalletCode == json.PalletCode); if (carInfo == null) throw new Exception("未知车身信息,无法入库"); //屏蔽MES if (json.Position == "EL01RB") { //焊装提升机 HZPassTZ(json); } else { ///涂装提升机 TZPassZZ(json); } //{ // Dt_CarBodyInfo _CarBodyInfo = new Dt_CarBodyInfo //测试 // { // PVI = "J25000660", // RFID = json.PVI, // BodyStatus = 0, // CarType = 1, // }; //} List roadWays = new List(); if (carInfo.CarType == 1) { roadWays = _roadWayRepository.QueryData(x => x.WirteCar == 1); } else if (carInfo.CarType == 2) { roadWays = _roadWayRepository.QueryData(x => x.WirteCar == 2); } //var locations = _locationRepository.QueryData(x => (x.LocationType == carInfo.CarType || x.LocationType == 3) && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable); var maxGroup = _locationRepository.QueryData(x => x.LocationType == carInfo.CarType && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable) .GroupBy(x => x.RoadwayNo) .OrderByDescending(g => g.Count()) // 根据每个组的元素数量排序 .ToList(); // 取出数量最多的组 if (maxGroup.Count == 0) { maxGroup = _locationRepository.QueryData(x => x.LocationType == (int)BodyType.Empty && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable) .GroupBy(x => x.RoadwayNo) .OrderByDescending(g => g.Count()) // 根据每个组的元素数量排序 .ToList(); // 取出数量最多的组 } if (maxGroup.Count == 0) return response.Error(12, "无可用库位"); Dictionary result = new Dictionary(); foreach (var item in maxGroup) { var number = _taskRepository.QueryData(x => x.RoadwayNo == item.Key && x.CarType == carInfo.CarType && (x.TaskType == (int)TaskInboundTypeEnum.Inbound || x.TaskType == (int)TaskInboundTypeEnum.InTray)).Count(); if (item.Count() - number <= 0) { continue; } result.Add(item.Key, item.Count() - number); } string maxRoadwayNo = result.OrderByDescending(x => x.Value).FirstOrDefault().Key; // 数量最多的组的Key var stationList = _stationManagerRepository.QueryData(x => x.RoadwayNo == maxRoadwayNo && x.stationArea == json.area && x.stationType == 1 && x.stationStatus == "1"); Dt_StationManager station = null; if (stationList.Count > 1) { var task = _taskRepository.QueryData(x => x.Roadway == stationList.FirstOrDefault().Roadway && x.TaskType == (int)TaskInboundTypeEnum.Inbound).OrderByDescending(x => x.CreateDate).FirstOrDefault(); if (task != null) station = stationList.Where(x => x.stationChildCode != task.NextAddress && x.stationChildCode != task.CurrentAddress).FirstOrDefault(); else station = stationList.FirstOrDefault(); } else { station = stationList.FirstOrDefault(); } //var location = _taskService.RequestLocation(station.RoadwayNo, carInfo.CarType); //if (location == null) //{ // return response.Error("无法获取货位信息或库位已满"); //} var newtask = new Dt_Task { CurrentAddress = json.Position, Grade = 1, Roadway = station.Roadway, TargetAddress = station.Roadway, //Dispatchertime = DateTime.Now, NextAddress = station.stationChildCode, OrderNo = null, PalletCode = json.PalletCode, SourceAddress = json.Position, TaskState = (int)TaskInStatusEnum.InNew, TaskType = (int)TaskInboundTypeEnum.Inbound, TaskNum = _taskRepository.GetTaskNo().Result, Creater = "Systeam", PVI = json.PVI, CarType = carInfo.CarType, RoadwayNo = station.RoadwayNo }; _unitOfWorkManage.BeginTran(); _taskRepository.AddData(newtask); //location.LocationStatus = (int)LocationEnum.InStockDisable; //_locationRepository.UpdateData(location); _unitOfWorkManage.CommitTran(); response.OK("申请入库成功", data: newtask); //response.OK(data: maxRoadwayNo); } catch (Exception ex) { response.Error($"请求巷道号失败:{ex.Message}"); } return response; } } }