using AutoMapper; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_DTO.Basic; using WIDESEA_IBasicRepository; using WIDESEA_IRecordService; using WIDESEA_IBasicService; using WIDESEA_Model.Models; namespace WIDESEA_BasicService { public partial class LocationInfoService { public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId, string beRelocationCode = "", int heightType = 0) { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId); if (warehouse == null) { throw new Exception($"未找到仓库信息"); } Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); if (palletTypeInfo == null) { if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ToString()) { palletTypeInfo = new Dt_PalletTypeInfo() { LocaitonCount = 1, PalletType = 1, IsOdd = false, }; } else throw new Exception($"请配置托盘类型信息"); } return warehouse.WarehouseCode switch { "SC01_BC" => AssignLocation_BC(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType), //"HA58" => AssignLocation_PP(roadwayNo, palletType, palletTypeInfo, beRelocationCode), //"HA152" => AssignLocation_GM(roadwayNo, palletType, palletTypeInfo, beRelocationCode), //"HA64" => AssignLocation_CSJ(roadwayNo, palletType, palletTypeInfo, beRelocationCode), //"HA154" => AssignLocation_ZH(roadwayNo, palletType, palletTypeInfo, beRelocationCode), //"HA153" => AssignLocation(roadwayNo), //"HA71" => AssignLocation(roadwayNo), //"HA60" => AssignLocation(roadwayNo), _ => throw new Exception($"未找到仓库货位分配方法") }; } //private readonly static object _locker = new object(); //private static List locationCaches = new List(); /// /// /// /// /// //public Dt_LocationInfo? AssignLocation(string roadwayNo) //{ // lock (_locker) // { // List removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();//查询添加静态变量超过5分钟的货位 // int count = removeItems.Count; // for (int i = 0; i < count; i++) // { // locationCaches.Remove(removeItems[i]);//移除查询添加静态变量超过5分钟的货位 // } // List lockLocations = locationCaches.Select(x => x.LocationCode).ToList(); // List locationInfos = BaseDal.QueryData(x => x.RoadwayNo == roadwayNo);//查询巷道所有货位信息 // Dictionary orderBy = new Dictionary() // { // { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, // { nameof(Dt_LocationInfo.Column),OrderByType.Asc }, // { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, // { nameof(Dt_LocationInfo.Row),OrderByType.Asc } // }; // return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//查询空货位信息并排除5分钟内分配的货位,根据层、列、深度、行排序 // } //} /// /// 获取不同深度的同组货位信息 /// /// /// /// public List GetGroupLocations(List locationInfos, Dt_LocationInfo location) { List groupLocations = new List() { location }; int maxDepth = locationInfos.Max(x => x.Depth); int row = location.Row; for (int j = location.Depth + 1; j <= maxDepth; j++) { row += 1; Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row); if (locationInfo != null) { groupLocations.Add(locationInfo); } } for (int j = location.Depth - 1; j >= 1; j--) { row -= 1; Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row); if (locationInfo != null) { groupLocations.Add(locationInfo); } } return groupLocations; } /// /// 获取不同深度的同组货位信息 /// /// /// //public List GetGroupLocations(Dt_LocationInfo location) //{ // List locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo && x.WarehouseId == location.WarehouseId); // List groupLocations = new List() { location }; // int maxDepth = locationInfos.Max(x => x.Depth); // int row = location.Row; // for (int j = location.Depth + 1; j <= maxDepth; j++) // { // Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1)); // if (locationInfo != null) // { // groupLocations.Add(locationInfo); // } // } // for (int j = location.Depth - 1; j >= 1; j--) // { // Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1)); // if (locationInfo != null) // { // groupLocations.Add(locationInfo); // } // } // return groupLocations; //} } }