| | |
| | | /// 获取合适的库位 |
| | | /// </summary> |
| | | /// <param name="houseNo">仓库号</param> |
| | | /// <param name="areaList">区域集合</param> |
| | | /// <param name="roadwayNo">巷道号(可空)</param> |
| | | /// <returns></returns> |
| | | public SysStorageLocat GetSuiTableLocate(string houseNo, string roadwayNo = "") |
| | | public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "") |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | throw new Exception($"未查询到{houseNo}仓库信息"); |
| | | } |
| | | |
| | | var roadList = db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) ) |
| | | .GroupBy(m=>m.RoadwayNo).Select(m=>m.RoadwayNo).ToList(); |
| | | |
| | | //数据字典(获取字典中仓库类型) |
| | | var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type); |
| | | switch (dic.DictName) |
| | |
| | | { |
| | | throw new Exception($"未查询到{roadwayNo}巷道信息"); |
| | | } |
| | | |
| | | if (!roadList.Contains(roadwayNo)) |
| | | { |
| | | throw new Exception("当前物料存放区域未在指定巷道中"); |
| | | } |
| | | if (roadway.Status == "1") |
| | | { |
| | | throw new Exception($"{roadwayNo}巷道已停用"); |
| | |
| | | |
| | | //查询该巷道并且标志为正常的的储位 |
| | | roadwayList.Add(roadway); |
| | | var locate = GetLocateByRoadways(roadwayList); |
| | | var locate = GetLocateByRoadways(roadwayList,areaList); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception($"{roadwayNo}巷道没有合适的空储位"); |
| | |
| | | //立体库没有指定巷道(循环巷道根据优先级分配) |
| | | case "立体库" when string.IsNullOrWhiteSpace(roadwayNo): |
| | | { |
| | | var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0").OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList(); |
| | | var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0" && roadList.Contains(m.RoadwayNo)).OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList(); |
| | | |
| | | var locate = GetLocateByRoadways(roadwayList); |
| | | var locate = GetLocateByRoadways(roadwayList,areaList); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception($"{houseNo}仓库已启用的巷道中没有合适的空储位"); |
| | |
| | | /// 获取合适空储位信息(根据巷道集合判断) |
| | | /// </summary> |
| | | /// <param name="roadways">巷道集合</param> |
| | | /// <param name="areaNo">区域号(子母托盘区)</param> |
| | | /// <param name="areaList">区域集合</param> |
| | | /// <returns></returns> |
| | | private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways) |
| | | private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList) |
| | | { |
| | | try |
| | | { |
| | |
| | | continue; |
| | | } |
| | | //取当前巷最优位置 |
| | | locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight); |
| | | locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList); |
| | | //当前巷有位置则退出 |
| | | if (locate != null) |
| | | { |
| | |
| | | { |
| | | if (log != null) |
| | | { |
| | | locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight); |
| | | locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | foreach (var item in roadways) |
| | | { |
| | | locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight); |
| | | locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList); |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="roadwayNo">巷道号</param> |
| | | /// <param name="topOrBom">储位分配上下 0 上 1 下</param> |
| | | /// <param name="leftOrRight">储位分配上下 0 左 1 右</param> |
| | | /// <param name="areaNo">区域号(子母托盘区)</param> |
| | | /// <param name="areaList">区域集合</param> |
| | | /// <returns></returns> |
| | | private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight) |
| | | private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList) |
| | | { |
| | | var db = DataContext.Db; |
| | | var str = "''"; |
| | | //查询该巷道并且标志为正常的的储位 |
| | | do |
| | | SysStorageLocat data; |
| | | |
| | | foreach (var area in areaList) |
| | | { |
| | | var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and LocatNo not in({str}) "; |
| | | //sql += !string.IsNullOrWhiteSpace(areaNo) ? $"and AreaNo = '{areaNo}' " : ""; |
| | | var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) "; |
| | | sql += "order by "; |
| | | sql += topOrBom == 0 ? "Layer desc, " : "Layer, "; |
| | | sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, "; |
| | |
| | | |
| | | |
| | | var locateList = db.Ado.SqlQuery<SysStorageLocat>(sql); |
| | | var data = locateList.FirstOrDefault(); |
| | | data = locateList.FirstOrDefault(); |
| | | if (data != null) |
| | | { |
| | | return data; |
| | | } |
| | | else |
| | | { |
| | | return null; |
| | | } |
| | | } while (true); |
| | | |
| | | return null; |
| | | |
| | | |
| | | |
| | | } |
| | | } |