From f9a9a948cd138ad0877c54319857c327c0c0c402 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期五, 28 二月 2025 16:50:50 +0800 Subject: [PATCH] 修改问题 --- Wms/WMS.BLL/Logic/AllotLocation.cs | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 208 insertions(+), 1 deletions(-) diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs index 9462f76..e21b168 100644 --- a/Wms/WMS.BLL/Logic/AllotLocation.cs +++ b/Wms/WMS.BLL/Logic/AllotLocation.cs @@ -1,5 +1,6 @@ 锘縰sing System; using System.Collections.Generic; +using System.IO; using System.Linq; using Model.ModelDto.SysDto; using SqlSugar; @@ -7,6 +8,7 @@ using WMS.Entity.BllAsnEntity; using WMS.Entity.Context; using WMS.Entity.DataEntity; +using WMS.Entity.LogEntity; using WMS.Entity.SysEntity; namespace WMS.BLL.Logic @@ -16,6 +18,178 @@ /// </summary> public class AllotLocation { + + + /// <summary> + /// 鑾峰彇瀵嗛泦搴撳悎閫傜殑宸烽亾锛堥�傜敤椤圭洰锛欽C34锛� + /// </summary> + /// <param name="roadways">宸烽亾闆嗗悎</param> + /// <param name="areaList">鍖哄煙闆嗗悎</param> + /// <param name="lotNo">鎵规鍙�</param> + /// <returns></returns> + public string GetMiJiSuiTableRoad(string house, List<string> roadways, List<string> areaList, string sku, string lotNo = "") + { + + var db = DataContext.Db; + + var dataStock = db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.WareHouseNo == house && m.SkuNo == sku); + if (!string.IsNullOrWhiteSpace(lotNo)) + { + dataStock = dataStock.Where(m => m.LotNo == lotNo); + } + //搴撳瓨鏌ユ壘鐩稿悓鐗╂枡/鎵规鐨勫贩閬� + var yiYouRoad = dataStock.GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).OrderBy(m => m).ToList(); + foreach (var l in yiYouRoad) + { + // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣� + + var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l); + + var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l) + .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); + if (locateCount - bindNum > 0) + { + return l; + } + + } + //鑾峰彇搴撳瓨鍐呭凡鏈夌墿鏂欑殑宸烽亾 + var dataStockRoad = db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.WareHouseNo == house).GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); + //鎺掗櫎鎺夊凡鏈夌墿鏂欑殑宸烽亾 + + roadways = roadways.Where(m => !dataStockRoad.Contains(m)).ToList(); + foreach (var l in roadways) + { + var bl = true; + //鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈変换鍔� + var taskList = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && m.EndRoadway == l && (m.Status == "0" || m.Status == "1")).ToList(); + if (taskList.Count > 0) + { + //鍒ゆ柇鐗╂枡鎵规鏄惁鍜屽綋鍓嶄竴鑷� + foreach (var item in taskList) + { + var palletBind = db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.TaskNo == item.TaskNo); + if (palletBind != null) + { + if (palletBind.SkuNo !=sku || palletBind.LotNo != lotNo) + { + bl = false; + continue; + } + + } + } + if (bl) + { + // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣� + + var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l); + + var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l) + .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); + if (locateCount - bindNum > 0) + { + return l; + } + } + } + } + return ""; + + } + + /// <summary> + /// 鑾峰彇瀵嗛泦搴撳悎閫傜殑鍌ㄤ綅锛堥�傜敤椤圭洰锛欽C34锛� + /// </summary> + /// <param name="roadways">宸烽亾闆嗗悎</param> + /// <param name="areaList">鍖哄煙闆嗗悎</param> + /// <param name="lotNo">鎵规鍙�</param> + /// <returns></returns> + public SysStorageLocat GetMiJiSuiTableLocate(SysStorageRoadway roadway, List<string> areaList, string sku, string lotNo = "") + { + + var db = DataContext.Db; + + // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣� + var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadway.RoadwayNo && areaList.Contains(m.AreaNo)).ToList(); + if (locateList.Count(m => m.Status == "0") > 0) + { + var bl = GetLocateASCOrDesc(roadway.RoadwayNo); + + var locate = locateList.OrderBy(m => m.LocatNo).First(); + + if (bl) + { + locate = locateList.OrderByDescending(m => m.LocatNo).First(); + } + var bl2 = MiJiLocateIsOk(locate, bl); //楠岃瘉鍌ㄤ綅鏄惁鍙叆搴撴柟娉� + if (bl2) + { + return locate; + } + } + + + return null; + + } + + /// <summary> + /// 鑾峰彇鍌ㄤ綅鐨勬帓鍒楅『搴� + /// </summary> + /// <param name="roadStr"></param> + /// <returns>true锛歞esc鍊掑簭 false锛歛sc姝e簭</returns> + public bool GetLocateASCOrDesc(string roadStr) + { + var db = DataContext.Db; + + var locate = db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.RoadwayNo == roadStr); + var a = locate.LocatNo.Substring(2,2);//鍌ㄤ綅鍒� + var b = locate.AisleOne.Substring(2, 2);//閫氶亾鍙e垪 + return int.Parse(a) < int.Parse(b); + } + + /// <summary> + /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� + /// </summary> + /// <param name="locate"></param> + /// <returns></returns> + private bool MiJiLocateIsOk(SysStorageLocat locate,bool bl) + { + + var db = DataContext.Db; + var a = int.Parse(locate.LocatNo.Substring(2, 2));//鍌ㄤ綅鍒� + var b = int.Parse(locate.AisleOne.Substring(2, 2));//閫氶亾鍙e垪 + var str1 = new List<string>() { "0", "3", "5" }; + var str2 = new List<string>() { "1", "2", "4" }; + var locatList1 = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == locate.RoadwayNo && m.Column < a).ToList(); + var locatList2 = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == locate.RoadwayNo && m.Column > a).ToList(); + if (bl) + { + if (locatList1.Count(m => str1.Contains(m.Status)) > 0) + { + return false; + } + if (locatList2.Count(m => str2.Contains(m.Status)) > 0) + { + return false; + } + } + else + { + if (locatList1.Count(m => str2.Contains(m.Status)) > 0) + { + return false; + } + if (locatList2.Count(m => str1.Contains(m.Status)) > 0) + { + return false; + } + } + return true; + + } + /// <summary> /// 鑾峰彇鍚堥�傜殑搴撲綅 /// </summary> @@ -44,7 +218,7 @@ var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type); switch (dic.DictName) { - //鏄惁鎸囧畾宸烽亾 + //鎸囧畾宸烽亾 case "绔嬩綋搴�" when !string.IsNullOrWhiteSpace(roadwayNo): { var roadwayList = new List<SysStorageRoadway>(); @@ -81,6 +255,34 @@ if (locate == null) { throw new Exception($"{houseNo}浠撳簱宸插惎鐢ㄧ殑宸烽亾涓病鏈夊悎閫傜殑绌哄偍浣�"); + } + return locate; + } + //鎸囧畾宸烽亾 + case "瀵嗛泦搴�" when !string.IsNullOrWhiteSpace(roadwayNo): + { + var roadwayList = new List<SysStorageRoadway>(); + var roadway = db.Queryable<SysStorageRoadway>().First(m => m.RoadwayNo == roadwayNo); + if (roadway == null) + { + throw new Exception($"鏈煡璇㈠埌{roadwayNo}宸烽亾淇℃伅"); + } + + if (!roadList.Contains(roadwayNo)) + { + throw new Exception("褰撳墠鐗╂枡瀛樻斁鍖哄煙鏈湪鎸囧畾宸烽亾涓�"); + } + if (roadway.Status == "1") + { + throw new Exception($"{roadwayNo}宸烽亾宸插仠鐢�"); + } + + //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅 + roadwayList.Add(roadway); + var locate = GetLocateByRoadways(roadwayList, areaList, true); + if (locate == null) + { + throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�"); } return locate; } @@ -340,6 +542,11 @@ } + /// <summary> + /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� + /// </summary> + /// <param name="locate"></param> + /// <returns></returns> private bool LocateIsOk(SysStorageLocat locate) { try -- Gitblit v1.8.0