|  |  | 
 |  |  | using WIDESEA_Common.CommonEnum; | 
 |  |  | using WIDESEA_Common.LocationEnum; | 
 |  |  | using WIDESEA_Common.TaskEnum; | 
 |  |  | using WIDESEA_Common.WareHouseEnum; | 
 |  |  |  | 
 |  |  | namespace WIDESEA_BasicService | 
 |  |  | { | 
 |  |  |     public partial class LocationInfoService | 
 |  |  |     { | 
 |  |  |  | 
 |  |  |         public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId) | 
 |  |  |         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 == warehouse.WarehouseId); | 
 |  |  |             Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); | 
 |  |  |             if (palletTypeInfo == null) | 
 |  |  |             { | 
 |  |  |                 throw new Exception($"请é
ç½®æçç±»åä¿¡æ¯"); | 
 |  |  |                 if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() && warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() && warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) | 
 |  |  |                 { | 
 |  |  |                     palletTypeInfo = new Dt_PalletTypeInfo() | 
 |  |  |                     { | 
 |  |  |                         LocaitonCount = 1, | 
 |  |  |                         PalletType = 0, | 
 |  |  |                         IsOdd = false, | 
 |  |  |                     }; | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                     throw new Exception($"请é
ç½®æçç±»åä¿¡æ¯"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             return warehouse.WarehouseCode switch | 
 |  |  |             { | 
 |  |  |                 "HA57" => AssignLocation_BC(roadwayNo, palletType, palletTypeInfo), | 
 |  |  |                 "HA58" => AssignLocation_PP(roadwayNo, palletType, palletTypeInfo), | 
 |  |  |                 "HA152" => AssignLocation_GM(roadwayNo, palletType, palletTypeInfo), | 
 |  |  |                 "HA64" => AssignLocation_CSJ(roadwayNo, palletType, palletTypeInfo), | 
 |  |  |                 "é»çä»" => AssignLocation_ZH(roadwayNo, palletType, palletTypeInfo), | 
 |  |  |                 "HA57" => 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), | 
 |  |  |                 "HA71" or "HA72" or "HA73" => AssignLocation(roadwayNo), | 
 |  |  |                 "HA60" => AssignLocation(roadwayNo), | 
 |  |  |                 _ => throw new Exception($"æªæ¾å°ä»åºè´§ä½åé
æ¹æ³") | 
 |  |  |             }; | 
 |  |  | 
 |  |  |                     { nameof(Dt_LocationInfo.Row),OrderByType.Asc } | 
 |  |  |                 }; | 
 |  |  |  | 
 |  |  |                 return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº | 
 |  |  |                 return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         /// <param name="location">è´§ä½å¯¹è±¡</param> | 
 |  |  |         /// <param name="palletType">æçç±»å</param> | 
 |  |  |         /// <param name="locationStatus">è´§ä½ç¶æ</param> | 
 |  |  |         public void UpdateLocationStatus2(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId) | 
 |  |  |         { | 
 |  |  |             List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo); | 
 |  |  |         //public void UpdateLocationStatus2(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId) | 
 |  |  |         //{ | 
 |  |  |         //    List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo); | 
 |  |  |  | 
 |  |  |             List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location); | 
 |  |  |             if (locationInfos.Max(x => x.Depth) < 3) | 
 |  |  |             { | 
 |  |  |                 for (int i = 0; i < locations.Count; i++) | 
 |  |  |                 { | 
 |  |  |                     if (locations[i].LocationType != palletType.ObjToInt()) | 
 |  |  |                     { | 
 |  |  |                         locations[i].LocationType = palletType.ObjToInt(); | 
 |  |  |                     } | 
 |  |  |         //    List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location); | 
 |  |  |         //    if (locationInfos.Max(x => x.Depth) < 3) | 
 |  |  |         //    { | 
 |  |  |         //        for (int i = 0; i < locations.Count; i++) | 
 |  |  |         //        { | 
 |  |  |         //            if (locations[i].LocationType != palletType.ObjToInt()) | 
 |  |  |         //            { | 
 |  |  |         //                locations[i].LocationType = palletType.ObjToInt(); | 
 |  |  |         //            } | 
 |  |  |  | 
 |  |  |                     if (locations[i].LocationCode == location.LocationCode) | 
 |  |  |                     { | 
 |  |  |                         locations[i].LocationStatus = locationStatus.ObjToInt(); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |                         { | 
 |  |  |                             if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                             else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) | 
 |  |  |                         { | 
 |  |  |                             if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                             else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |         //            if (locations[i].LocationCode == location.LocationCode) | 
 |  |  |         //            { | 
 |  |  |         //                locations[i].LocationStatus = locationStatus.ObjToInt(); | 
 |  |  |         //            } | 
 |  |  |         //            else | 
 |  |  |         //            { | 
 |  |  |         //                if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |         //                { | 
 |  |  |         //                    if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                    else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                } | 
 |  |  |         //                else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) | 
 |  |  |         //                { | 
 |  |  |         //                    if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                    else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                } | 
 |  |  |         //            } | 
 |  |  |         //        } | 
 |  |  |  | 
 |  |  |                 Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); | 
 |  |  |                 if (nearLocation != null) | 
 |  |  |                 { | 
 |  |  |                     List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); | 
 |  |  |                     for (int i = 0; i < nearLocations.Count; i++) | 
 |  |  |                     { | 
 |  |  |                         if (nearLocations[i].LocationType != palletType.ObjToInt()) | 
 |  |  |                         { | 
 |  |  |                             nearLocations[i].LocationType = palletType.ObjToInt(); | 
 |  |  |                         } | 
 |  |  |         //        Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); | 
 |  |  |         //        if(location.RoadwayNo == "SC01_BC") | 
 |  |  |         //        { | 
 |  |  |         //            nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); | 
 |  |  |         //        } | 
 |  |  |         //        if (nearLocation != null) | 
 |  |  |         //        { | 
 |  |  |         //            List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); | 
 |  |  |         //            for (int i = 0; i < nearLocations.Count; i++) | 
 |  |  |         //            { | 
 |  |  |         //                if (nearLocations[i].LocationType != palletType.ObjToInt()) | 
 |  |  |         //                { | 
 |  |  |         //                    nearLocations[i].LocationType = palletType.ObjToInt(); | 
 |  |  |         //                } | 
 |  |  |  | 
 |  |  |                         if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt()) | 
 |  |  |                         { | 
 |  |  |                             if (nearLocations[i].LocationCode == nearLocation.LocationCode) | 
 |  |  |                             { | 
 |  |  |                                 nearLocations[i].LocationStatus = locationStatus.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                             else | 
 |  |  |                             { | 
 |  |  |                                 if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |                                 { | 
 |  |  |                                     if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                     else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                                 else if (locationStatus == LocationStatusEnum.InStock) | 
 |  |  |                                 { | 
 |  |  |                                     if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                     else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |         //                if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt()) | 
 |  |  |         //                { | 
 |  |  |         //                    if (nearLocations[i].LocationCode == nearLocation.LocationCode) | 
 |  |  |         //                    { | 
 |  |  |         //                        nearLocations[i].LocationStatus = locationStatus.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                    else | 
 |  |  |         //                    { | 
 |  |  |         //                        if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |         //                        { | 
 |  |  |         //                            if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |         //                            { | 
 |  |  |         //                                nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |         //                            } | 
 |  |  |         //                            else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |         //                            { | 
 |  |  |         //                                nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |         //                            } | 
 |  |  |         //                        } | 
 |  |  |         //                        else if (locationStatus == LocationStatusEnum.InStock) | 
 |  |  |         //                        { | 
 |  |  |         //                            if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |         //                            { | 
 |  |  |         //                                nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |         //                            } | 
 |  |  |         //                            else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |         //                            { | 
 |  |  |         //                                nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |         //                            } | 
 |  |  |         //                        } | 
 |  |  |         //                    } | 
 |  |  |         //                } | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                     locations.AddRange(nearLocations); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 for (int i = 0; i < locations.Count; i++) | 
 |  |  |                 { | 
 |  |  |                     if (locations[i].LocationCode == location.LocationCode) | 
 |  |  |                     { | 
 |  |  |                         locations[i].LocationStatus = locationStatus.ObjToInt(); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |                         { | 
 |  |  |                             if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                             else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) | 
 |  |  |                         { | 
 |  |  |                             if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                             else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |                             { | 
 |  |  |                                 locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     if (locations[i].LocationType != palletType.ObjToInt()) | 
 |  |  |                     { | 
 |  |  |                         locations[i].LocationType = palletType.ObjToInt(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         //            } | 
 |  |  |         //            locations.AddRange(nearLocations); | 
 |  |  |         //        } | 
 |  |  |         //    } | 
 |  |  |         //    else | 
 |  |  |         //    { | 
 |  |  |         //        for (int i = 0; i < locations.Count; i++) | 
 |  |  |         //        { | 
 |  |  |         //            if (locations[i].LocationCode == location.LocationCode) | 
 |  |  |         //            { | 
 |  |  |         //                locations[i].LocationStatus = locationStatus.ObjToInt(); | 
 |  |  |         //            } | 
 |  |  |         //            else | 
 |  |  |         //            { | 
 |  |  |         //                if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |         //                { | 
 |  |  |         //                    if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                    else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                } | 
 |  |  |         //                else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) | 
 |  |  |         //                { | 
 |  |  |         //                    if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                    else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |         //                    { | 
 |  |  |         //                        locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |         //                    } | 
 |  |  |         //                } | 
 |  |  |         //            } | 
 |  |  |         //            if (locations[i].LocationType != palletType.ObjToInt()) | 
 |  |  |         //            { | 
 |  |  |         //                locations[i].LocationType = palletType.ObjToInt(); | 
 |  |  |         //            } | 
 |  |  |         //        } | 
 |  |  |         //    } | 
 |  |  |  | 
 |  |  |             if (locations.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt()).Count() == locations.Count && locationStatus == LocationStatusEnum.Free) | 
 |  |  |             { | 
 |  |  |                 locations.ForEach(x => | 
 |  |  |                 { | 
 |  |  |                     x.LocationType = 0; | 
 |  |  |                 }); | 
 |  |  |             } | 
 |  |  |         //    if (locations.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt()).Count() == locations.Count && locationStatus == LocationStatusEnum.Free) | 
 |  |  |         //    { | 
 |  |  |         //        locations.ForEach(x => | 
 |  |  |         //        { | 
 |  |  |         //            x.LocationType = 0; | 
 |  |  |         //        }); | 
 |  |  |         //    } | 
 |  |  |  | 
 |  |  |             Repository.UpdateData(locations); | 
 |  |  |         } | 
 |  |  |         //    Repository.UpdateData(locations); | 
 |  |  |         //} | 
 |  |  |  | 
 |  |  |         public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId) | 
 |  |  |         { | 
 |  |  |             List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo); | 
 |  |  |  | 
 |  |  |             List<Dt_PalletTypeInfo> palletTypeInfos = _basicRepository.PalletTypeInfoRepository.QueryData(x => x.WarehouseId == warehousId); | 
 |  |  |  | 
 |  |  |             Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehousId); | 
 |  |  |             Dt_PalletTypeInfo? palletTypeInfo = palletTypeInfos.FirstOrDefault(x => x.PalletType == palletType && x.WarehouseId == warehousId); | 
 |  |  |             if (palletTypeInfo == null) | 
 |  |  |             if (palletTypeInfo == null || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) | 
 |  |  |             { | 
 |  |  |                 throw new Exception($"请é
ç½®æçç±»åä¿¡æ¯"); | 
 |  |  |                 if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) | 
 |  |  |                 { | 
 |  |  |                     palletTypeInfo = new Dt_PalletTypeInfo() | 
 |  |  |                     { | 
 |  |  |                         LocaitonCount = 1, | 
 |  |  |                         PalletType = 0, | 
 |  |  |                         IsOdd = false, | 
 |  |  |                     }; | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                     throw new Exception($"请é
ç½®æçç±»åä¿¡æ¯"); | 
 |  |  |             } | 
 |  |  |             List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location); | 
 |  |  |             if (locationInfos.Max(x => x.Depth) < 3) | 
 |  |  | 
 |  |  |                     Dt_LocationInfo? nearLocation; | 
 |  |  |                     if (palletTypeInfo.IsOdd) | 
 |  |  |                     { | 
 |  |  |                         nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); | 
 |  |  |                         if (warehouse.WarehouseCode==WarehouseEnum.HA154.ToString()) | 
 |  |  |                         { | 
 |  |  |                             nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); | 
 |  |  |                         } | 
 |  |  |                         else | 
 |  |  |                         { | 
 |  |  |                             nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     if (nearLocation!=null && location.RoadwayNo.Contains("BC")) | 
 |  |  |                     { | 
 |  |  |                         if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt()) | 
 |  |  |                         { | 
 |  |  |                             nearLocation = null; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     if (location.RoadwayNo == "SC01_BC" && palletType != PalletTypeEnum.SmallPallet.ObjToInt()) | 
 |  |  |                     { | 
 |  |  |                         nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); | 
 |  |  |                         if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt()) | 
 |  |  |                         { | 
 |  |  |                             nearLocation = null; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     if (nearLocation != null) | 
 |  |  | 
 |  |  |                         List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); | 
 |  |  |                         for (int i = 0; i < nearLocations.Count; i++) | 
 |  |  |                         { | 
 |  |  |                             if (nearLocations[i].LocationType != palletType) | 
 |  |  |                             List<int> palletTypes = palletTypeInfos.Select(x => x.PalletType).ToList(); | 
 |  |  |                             palletTypes.Add(0); | 
 |  |  |                             if (palletTypes.Contains(nearLocations[i].LocationType)) | 
 |  |  |                             { | 
 |  |  |                                 nearLocations[i].LocationType = palletType; | 
 |  |  |                             } | 
 |  |  |                                 if (nearLocations[i].LocationType != palletType) | 
 |  |  |                                 { | 
 |  |  |                                     nearLocations[i].LocationType = palletType; | 
 |  |  |                                 } | 
 |  |  |  | 
 |  |  |                             if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |                             { | 
 |  |  |                                 if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |                                 if (locationStatus == LocationStatusEnum.Lock) | 
 |  |  |                                 { | 
 |  |  |                                     nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |                                     if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                     else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                                 else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) | 
 |  |  |                                 else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) | 
 |  |  |                                 { | 
 |  |  |                                     nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); | 
 |  |  |                                     if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                     else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |                                     { | 
 |  |  |                                         nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) | 
 |  |  |                             { | 
 |  |  |                                 if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) | 
 |  |  |                                 { | 
 |  |  |                                     nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); | 
 |  |  |                                 } | 
 |  |  |                                 else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) | 
 |  |  |                                 { | 
 |  |  |                                     nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |  | 
 |  |  |                         } | 
 |  |  |                         locations.AddRange(nearLocations); | 
 |  |  |                     } | 
 |  |  | 
 |  |  |         { | 
 |  |  |             List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { 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); | 
 |  |  |                 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--) | 
 |  |  |             { | 
 |  |  |                 Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer); | 
 |  |  |                 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); | 
 |  |  | 
 |  |  |  | 
 |  |  |             List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { 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); | 
 |  |  |                 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); | 
 |  |  |                 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 (j == 1 && location.RoadwayNo.Contains("CSJ") && (row==1 || row==6)) | 
 |  |  |                 { | 
 |  |  |                     locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 2 || x.Row == row - 2)); | 
 |  |  |                 } | 
 |  |  |                 if (locationInfo != null) | 
 |  |  |                 { | 
 |  |  |                     groupLocations.Add(locationInfo); |