From 887103a2ad70fef2669384859d532d9b74159cf1 Mon Sep 17 00:00:00 2001 From: test <15284381150@163.com> Date: 星期四, 24 七月 2025 17:00:13 +0800 Subject: [PATCH] 修改库存统计导出,修改入库作业 --- Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs | 325 +++++++++++++--------------- Wms/Wms/Controllers/StatisticalController.cs | 11 Wms/WMS.IBLL/IDataServer/IStockServer.cs | 4 Wms/WMS.BLL/DataServer/StockServer.cs | 305 +++++++++++---------------- 4 files changed, 287 insertions(+), 358 deletions(-) diff --git a/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs b/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs index 46d5205..87d19a9 100644 --- a/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs +++ b/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs @@ -500,38 +500,35 @@ } } - //缂栬緫鍏ュ簱鍗曟嵁 + /// <summary> + /// 缂栬緫鍏ュ簱鍗曟嵁 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> public string EditArrivalNotice(ArrivalNoticeVm model) { string strMessage = ""; - string sqlString = string.Empty; - string sqlDetailStr = string.Empty; try { lock (AsnLock) { - //鍒ゆ柇鏄惁涓洪噰璐叆搴撳崟鎹垨杞﹂棿浣欐枡閫�鍥炲叆搴� + // 鍒ゆ柇鍗曟嵁绫诲瀷鍙婃壒娆¤鍒欒鏄� // 0锛氭垚鍝佸叆搴� 1锛氶噰璐叆搴� 2锛氫腑闂村搧鍏ュ簱 3锛氶��璐у叆搴� 4锛氳溅闂翠綑鏂欓��鍥炲叆搴� 5锛氬叾瀹冨叆搴� 6锛氫唬鍌ㄥ叆搴� 7锛氬瘎瀛樺叆搴� 8 鐢熶骇閫�鏂欏叆搴� - //0銆�2銆�3銆�4 鎵规涓嶈兘涓虹┖ - //1銆佹坊鍔犲繀椤讳负绌恒�佺紪杈戜笉鍙负绌猴紝涓嶈兘鏇存敼 - //5銆�6 鎵规鍙负绌哄彲涓嶄负绌� - //7 蹇呴』涓虹┖ - var TypeLot = " 5, 6, 7"; //鎵规涓虹敓鎴愭壒娆″崟鎹被鍨� - + var TypeLot = " 5, 6, 7"; // 鎵规涓虹敓鎴愭壒娆″崟鎹被鍨� + + // 楠岃瘉鍗曟嵁瀛樺湪鎬у拰鐘舵�� var asnInfo = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == model.ASNNo && m.IsDel == "0"); - if (asnInfo == null) + if (asnInfo == null) { - strMessage = "-1:鍗曞彿涓嶅瓨鍦紝鎴栧凡鍒犻櫎!;"; - return strMessage; + return "-1:鍗曞彿涓嶅瓨鍦紝鎴栧凡鍒犻櫎!;"; } if (asnInfo.Status != "0") { - strMessage = "-1:鍗曟嵁鐘舵�佸彉鏇达紝涓嶅彲缂栬緫;"; - return strMessage; + return "-1:鍗曟嵁鐘舵�佸彉鏇达紝涓嶅彲缂栬緫;"; } var dateTime = DateTime.Now; - // 缂栬緫鎬诲崟 + // 鏇存柊涓诲崟鎹俊鎭� asnInfo.CustomerNo = model.CustomerNo; asnInfo.CustomerName = model.CustomerName; asnInfo.LotNo = model.LotNo; @@ -540,142 +537,131 @@ asnInfo.UpdateUser = model.CreateUser; var detailModels = model.AsnDetail; - sqlDetailStr += $"SELECT * FROM BllArrivalNoticeDetail WHERE ASNNo = '{model.ASNNo}' and isDel = '0';"; - //var dbDetailModels = DataContext.Db.Ado.SqlQuery<BllArrivalNoticeDetail>(sqlDetailStr); - var dbDetailModels = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.ASNNo == model.ASNNo && m.IsDel == "0").ToList(); + var dbDetailModels = Db.Queryable<BllArrivalNoticeDetail>() + .Where(m => m.ASNNo == model.ASNNo && m.IsDel == "0").ToList(); - sqlDetailStr = string.Empty; // 澶勭悊宸插垹闄ょ殑鏄庣粏 - foreach (BllArrivalNoticeDetail dbDetailModel in dbDetailModels) + foreach (var dbDetail in dbDetailModels) { - if (detailModels.Count(it => it.Id == dbDetailModel.Id) == 0) + if (!detailModels.Any(it => it.Id == dbDetail.Id)) { - dbDetailModel.IsDel = "1"; - dbDetailModel.UpdateTime = dateTime; - dbDetailModel.UpdateUser = model.CreateUser; + dbDetail.IsDel = "1"; + dbDetail.UpdateTime = dateTime; + dbDetail.UpdateUser = model.CreateUser; } } - // 澶勭悊淇敼鍜屾坊鍔犵殑鏄庣粏 + // 澶勭悊淇敼鍜屾柊澧炵殑鏄庣粏 string toDayTime = dateTime.ToString("yyyymmdd"); List<BllArrivalNoticeDetail> addDetails = new List<BllArrivalNoticeDetail>(); List<BllArrivalNoticeDetail> editDetails = new List<BllArrivalNoticeDetail>(); - var maxLotNo = ""; - foreach (ArrivalNoticeDetailVm detailModel in detailModels) + + foreach (var detailModel in detailModels) { + // 鍩虹楠岃瘉 if (string.IsNullOrEmpty(detailModel.SkuNo)) - { - strMessage = "-1:鐗╂枡缂栫爜涓嶅彲涓虹┖;"; - return strMessage; - } + return "-1:鐗╂枡缂栫爜涓嶅彲涓虹┖;"; + if (string.IsNullOrEmpty(detailModel.SkuName)) - { - strMessage = "-1:鐗╂枡鍚嶇О涓嶅彲涓虹┖;"; - return strMessage; - } + return "-1:鐗╂枡鍚嶇О涓嶅彲涓虹┖;"; + if (detailModel.Qty == null || detailModel.Qty <= 0) - { - strMessage = "-1:鏁伴噺蹇呴』澶т簬0;"; - return strMessage; - } - - //if (model.Type == "0" || model.Type == "2" || model.Type == "3" || model.Type == "4") - //{ - // if (string.IsNullOrWhiteSpace(detailModel.LotNo)) - // { - // throw new Exception("褰撳墠鍗曟嵁绫诲瀷鎵规涓嶅彲涓虹┖!"); - // } - //} + return "-1:鏁伴噺蹇呴』澶т簬0;"; - if (TypeLot.Contains(model.Type)) + // 鍏抽敭閫昏緫锛氳幏鍙栫墿鏂欑殑鍙楁帶鐘舵�� + // 1. 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅 FirstOrDefault + var material = Db.Queryable<SysMaterials>() + .First(m => m.SkuNo == detailModel.SkuNo && m.IsDel == "0"); + if (material == null) + return $"-1:鐗╂枡缂栫爜{detailModel.SkuNo}涓嶅瓨鍦ㄦ垨宸插垹闄�;"; + + // 2. 灏嗗瓧绗︿覆绫诲瀷鐨処sControlled杞崲涓篵ool锛堟牴鎹疄闄呭彇鍊艰鍒欒皟鏁达級 + // 姣斿锛�"1"琛ㄧず鍙楁帶锛�"0"琛ㄧず涓嶅彈鎺э紱鎴�"True"/"False"锛涙垨"鏄�"/"鍚�" + bool isControlled; + if (!bool.TryParse(material.IsControlled, out isControlled)) { - if (string.IsNullOrWhiteSpace(detailModel.Lot1)) - { - throw new Exception("鐢熶骇鏃ユ湡涓嶅彲涓虹┖!"); - } + // 澶勭悊闈炴爣鍑嗘牸寮忥紙濡�"1"/"0"锛� + isControlled = material.IsControlled == "1" || + string.Equals(material.IsControlled, "鏄�", StringComparison.OrdinalIgnoreCase); + } + + // 3. 鏍规嵁鍙楁帶鐘舵�侀獙璇佹棩鏈� + if (isControlled) + { + // 鍙楁帶鐘舵�侊細鐢熶骇鏃ユ湡蹇呭~ + if (string.IsNullOrWhiteSpace(detailModel.Lot1)) + return $"-1:鐗╂枡{detailModel.SkuNo}涓哄彈鎺х墿鏂欙紝鐢熶骇鏃ユ湡涓嶅彲涓虹┖;"; + + // 鍙楁帶鐘舵�侊細杩囨湡鏃ユ湡蹇呭~ if (string.IsNullOrWhiteSpace(detailModel.Lot2)) - { + return $"-1:鐗╂枡{detailModel.SkuNo}涓哄彈鎺х墿鏂欙紝杩囨湡鏃ユ湡涓嶅彲涓虹┖;"; + + // 楠岃瘉鏃ユ湡鏍煎紡鏈夋晥鎬� + if (!DateTime.TryParse(detailModel.Lot1, out DateTime productionDate)) + return $"-1:鐗╂枡{detailModel.SkuNo}鐨勭敓浜ф棩鏈熸牸寮忛敊璇紝璇蜂娇鐢ㄦ湁鏁堟棩鏈熸牸寮�;"; + + if (!DateTime.TryParse(detailModel.Lot2, out DateTime expiryDate)) + return $"-1:鐗╂枡{detailModel.SkuNo}鐨勮繃鏈熸棩鏈熸牸寮忛敊璇紝璇蜂娇鐢ㄦ湁鏁堟棩鏈熸牸寮�;"; + + // 楠岃瘉杩囨湡鏃ユ湡涓嶈兘鏃╀簬鐢熶骇鏃ユ湡 + if (expiryDate <= productionDate) + return $"-1:鐗╂枡{detailModel.SkuNo}鐨勮繃鏈熸棩鏈熶笉鑳芥棭浜庣敓浜ф棩鏈�;"; + } + // 涓嶅彈鎺х姸鎬侊細鏃ユ湡闈炲繀濉紝鏃犻渶楠岃瘉 + + // 鍘熸湁鎵规鐩稿叧楠岃瘉锛堜繚鐣欙級 + if (TypeLot.Contains(model.Type)) + { + if (string.IsNullOrWhiteSpace(detailModel.Lot1)) + throw new Exception("鐢熶骇鏃ユ湡涓嶅彲涓虹┖!"); + + if (string.IsNullOrWhiteSpace(detailModel.Lot2)) throw new Exception("杩囨湡鏃ユ湡涓嶅彲涓虹┖!"); - } } - // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ綋鍓嶆槑缁� - var com = dbDetailModels.Where(m => m.SkuNo == detailModel.SkuNo - && m.LotNo == detailModel.LotNo && m.Id != detailModel.Id && m.IsDel == "0").Count(); - if (com > 0) + // 楠岃瘉鐗╂枡鍜屾壒娆″彿鏄惁閲嶅 + if (dbDetailModels.Any(m => m.SkuNo == detailModel.SkuNo + && m.LotNo == detailModel.LotNo + && m.Id != detailModel.Id + && m.IsDel == "0")) { - strMessage = "-1:鐗╂枡鍜屾壒娆″彿閲嶅;"; - return strMessage; + return "-1:鐗╂枡鍜屾壒娆″彿閲嶅;"; } - if (detailModel.Price == null) - { - detailModel.Price = 0; - } - //鐢熸垚鑷湁鎵规 + // 澶勭悊浠锋牸榛樿鍊� + detailModel.Price ??= 0; + + // 鐢熸垚绠辩爜锛堣嚜鏈夋壒娆¢�昏緫锛� if (detailModel.Id == 0 || detailModel.Id == null || string.IsNullOrWhiteSpace(detailModel.LotNo)) { - //var notice = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && TypeLot.Contains(m.Type)).Select(m => m.ASNNo).ToList(); - //if (string.IsNullOrWhiteSpace(maxLotNo)) - //{ - // maxLotNo = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.LotNo) && notice.Contains(m.ASNNo)).Max(m => m.LotNo); - //} - //if (string.IsNullOrWhiteSpace(maxLotNo)) - //{ - // maxLotNo = toDayTime.Substring(2, 6) + "0001"; - //} - //else - //{ - // var lotStr = maxLotNo.Substring(0, 6); - // var timeStr = toDayTime.Substring(2, 6); - // if (lotStr == timeStr) - // { - // maxLotNo = toDayTime.Substring(2, 6) + (int.Parse(maxLotNo.Substring(6, 4)) + 1).ToString().PadLeft(4, '0'); - // } - // else - // { - // maxLotNo = timeStr + "0001"; - // } - //} - //detailModel.LotNo = maxLotNo; var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>() - .Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") - && m.CreateTime.ToString("yyyyMM") == DateTime.Now.ToString("yyyyMM")).Max(m => m.BoxCodeStr); - if (string.IsNullOrWhiteSpace(maxBoxCodeStr)) - { - maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001"; - } - else - { - maxBoxCodeStr = "BK" + (int.Parse(maxBoxCodeStr.Replace("BK", "")) + 1).ToString(); - } - detailModel.BoxCodeStr = maxBoxCodeStr; + .Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") + && m.CreateTime.ToString("yyyyMM") == DateTime.Now.ToString("yyyyMM")) + .Max(m => m.BoxCodeStr); + + detailModel.BoxCodeStr = string.IsNullOrWhiteSpace(maxBoxCodeStr) + ? "BK" + toDayTime.Substring(2, 4) + "0001" + : "BK" + (int.Parse(maxBoxCodeStr.Replace("BK", "")) + 1).ToString(); } + // 澶勭悊鏂板鏄庣粏 if (detailModel.Id == 0 || detailModel.Id == null) { - //if (model.Type == "1") - //{ - // strMessage = "-1:閲囪喘鍏ュ簱涓嶅彲鏇存敼鏄庣粏锛屽彧鍙紪杈戞暟閲�;"; - // return strMessage; - //} - // 璁$畻鍑烘�婚噾棰� detailModel.Money = detailModel.Price * detailModel.Qty; - - BllArrivalNoticeDetail addModel = new BllArrivalNoticeDetail() + addDetails.Add(new BllArrivalNoticeDetail { ASNNo = model.ASNNo, SkuNo = detailModel.SkuNo, SkuName = detailModel.SkuName, Standard = detailModel.Standard, - LotNo = detailModel.LotNo == null ? "" : detailModel.LotNo.Trim(), + LotNo = detailModel.LotNo?.Trim() ?? "", LotText = detailModel.LotText, Qty = (decimal)detailModel.Qty, PackagNo = detailModel.PackagNo, Price = detailModel.Price, Money = detailModel.Money, - FactQty = 0, // 宸茬粍鏁伴噺 - CompleteQty = 0, // 瀹屾垚鏁伴噺 + FactQty = 0, + CompleteQty = 0, IsBale = detailModel.IsBale, IsBelt = detailModel.IsBelt, SupplierLot = detailModel.SupplierLot, @@ -690,89 +676,81 @@ UDF3 = detailModel.UDF3, UDF4 = detailModel.UDF4, UDF5 = detailModel.UDF5, - CreateUser=(int)model.CreateUser - }; - addDetails.Add(addModel); + CreateUser = (int)model.CreateUser + }); } + // 澶勭悊缂栬緫鏄庣粏 else { - //鍒ゆ柇鏄惁鏇存敼 - int rowNum = dbDetailModels - .Count(it => it.Id == detailModel.Id - && it.Qty == detailModel.Qty - && it.LotNo == detailModel.LotNo - && it.LotText == detailModel.LotText - && it.SupplierLot == detailModel.SupplierLot - && it.IsBale == detailModel.IsBale - && it.IsBelt == detailModel.IsBelt - && it.Lot1 == detailModel.Lot1 // 鐢熶骇鏃ユ湡 - && it.Lot2 == detailModel.Lot2 // 杩囨湡鏃ユ湡 - && it.BoxCodeStr == detailModel.BoxCodeStr - && it.UDF1 == detailModel.UDF1 - && it.UDF2 == detailModel.UDF2 - && it.UDF3 == detailModel.UDF3 - && it.UDF4 == detailModel.UDF4 - && it.UDF5 == detailModel.UDF5); - if (rowNum > 0) + // 妫�鏌ユ槸鍚︽湁瀹為檯淇敼 + var existingDetail = dbDetailModels.First(m => m.Id == detailModel.Id); + if (existingDetail.Qty == detailModel.Qty + && existingDetail.LotNo == detailModel.LotNo + && existingDetail.LotText == detailModel.LotText + && existingDetail.SupplierLot == detailModel.SupplierLot + && existingDetail.IsBale == detailModel.IsBale + && existingDetail.IsBelt == detailModel.IsBelt + && existingDetail.Lot1 == detailModel.Lot1 + && existingDetail.Lot2 == detailModel.Lot2 + && existingDetail.BoxCodeStr == detailModel.BoxCodeStr + && existingDetail.UDF1 == detailModel.UDF1 + && existingDetail.UDF2 == detailModel.UDF2 + && existingDetail.UDF3 == detailModel.UDF3 + && existingDetail.UDF4 == detailModel.UDF4 + && existingDetail.UDF5 == detailModel.UDF5) { continue; } - var dbDetail = dbDetailModels.First(m => m.Id == detailModel.Id); - if (TypeLot.Contains(model.Type)) + // 鎵规涓嶅彲鏇存敼楠岃瘉 + if (TypeLot.Contains(model.Type) + && !string.IsNullOrWhiteSpace(existingDetail.LotNo) + && existingDetail.LotNo != detailModel.LotNo) { - if (!string.IsNullOrWhiteSpace(dbDetail.LotNo)) - { - if (dbDetail.LotNo != detailModel.LotNo) - { - strMessage = "-1:褰撳墠鍗曟嵁绫诲瀷涓嶅彲鏇存敼鎵规;"; - continue; - } - } - + return "-1:褰撳墠鍗曟嵁绫诲瀷涓嶅彲鏇存敼鎵规;"; } - // 璁$畻鍑烘�婚噾棰� - detailModel.Money = detailModel.Price * detailModel.Qty; - dbDetail.Qty = (decimal)detailModel.Qty; - dbDetail.LotNo = detailModel.LotNo == null ? "" : detailModel.LotNo.Trim(); - dbDetail.Money = detailModel.Money; - dbDetail.LotText = detailModel.LotText; - dbDetail.SupplierLot = detailModel.SupplierLot; - dbDetail.IsBale = detailModel.IsBale; - dbDetail.Lot1 = detailModel.Lot1; - dbDetail.Lot2 = detailModel.Lot2; - dbDetail.BoxCodeStr = detailModel.BoxCodeStr; - dbDetail.UDF1 = detailModel.UDF1; - dbDetail.UDF2 = detailModel.UDF2; - dbDetail.UDF3 = detailModel.UDF3; - dbDetail.UDF4 = detailModel.UDF4; - dbDetail.UDF5 = detailModel.UDF5; - dbDetail.UpdateTime = dateTime; - dbDetail.UpdateUser = model.CreateUser; + // 鏇存柊鏄庣粏淇℃伅 + existingDetail.Qty = (decimal)detailModel.Qty; + existingDetail.LotNo = detailModel.LotNo?.Trim() ?? ""; + existingDetail.Money = detailModel.Price * detailModel.Qty; + existingDetail.LotText = detailModel.LotText; + existingDetail.SupplierLot = detailModel.SupplierLot; + existingDetail.IsBale = detailModel.IsBale; + existingDetail.Lot1 = detailModel.Lot1; + existingDetail.Lot2 = detailModel.Lot2; + existingDetail.BoxCodeStr = detailModel.BoxCodeStr; + existingDetail.UDF1 = detailModel.UDF1; + existingDetail.UDF2 = detailModel.UDF2; + existingDetail.UDF3 = detailModel.UDF3; + existingDetail.UDF4 = detailModel.UDF4; + existingDetail.UDF5 = detailModel.UDF5; + existingDetail.UpdateTime = dateTime; + existingDetail.UpdateUser = model.CreateUser; - editDetails.Add(dbDetail); + editDetails.Add(existingDetail); } } + // 浜嬪姟澶勭悊 Db.Ado.BeginTran(); Db.Updateable(dbDetailModels).ExecuteCommand(); int rowCount = Db.Updateable(asnInfo).ExecuteCommand(); - var rowDetailCount = 1; - if (addDetails.Count > 0) - { - rowDetailCount = Db.Insertable(addDetails).ExecuteCommand(); - } - if (editDetails.Count > 0) - { - rowDetailCount += Db.Updateable(editDetails).ExecuteCommand(); - } + int rowDetailCount = 1; - Db.Ado.CommitTran(); + if (addDetails.Any()) + rowDetailCount = Db.Insertable(addDetails).ExecuteCommand(); + + if (editDetails.Any()) + rowDetailCount += Db.Updateable(editDetails).ExecuteCommand(); + if (rowCount > 0 && rowDetailCount > 0) { - new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鍏ュ簱鍗曟嵁", model.ASNNo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕model.ASNNo}鐨勫崟鎹俊鎭�", Convert.ToInt32(model.CreateUser)); + Db.Ado.CommitTran(); + new OperationASNServer().AddLogOperationAsn( + "鍏ュ簱浣滀笟", "鍏ュ簱鍗曟嵁", model.ASNNo, "缂栬緫", + $"缂栬緫浜嗗崟鎹彿涓簕model.ASNNo}鐨勫崟鎹俊鎭�", Convert.ToInt32(model.CreateUser)); return strMessage; } else @@ -787,6 +765,7 @@ throw ex; } } + //鍒犻櫎鍏ュ簱鍗� public string DelArrivalNotice(ArrivalNoticeVm model) { diff --git a/Wms/WMS.BLL/DataServer/StockServer.cs b/Wms/WMS.BLL/DataServer/StockServer.cs index 4574a47..28c62a6 100644 --- a/Wms/WMS.BLL/DataServer/StockServer.cs +++ b/Wms/WMS.BLL/DataServer/StockServer.cs @@ -866,75 +866,37 @@ /// </summary> /// <param name="skuNo">鐗╂枡缂栫爜</param> /// <param name="skuName">鐗╂枡鍚嶇О</param> + /// <param name="InspectStatus">璐ㄦ鐘舵��</param> /// <returns></returns> - public List<MateDataStockDto> GetDataStockListDaoChu(string skuNo, string skuName) + public List<MateDataStockDto> GetDataStockListDaoChu(string skuNo, string skuName, string InspectStatus) { - string str = "select stock.SkuNo,stock.SkuName,stock.Standard,stock.Qty,stock.LockQty,stock.FrozenQty,(mate.Weight * stock.Qty) WeightSum from DataStock stock left join SysMaterials mate on stock.SkuNo = mate.SkuNo Where stock.IsDel = @isdel"; - //鍒ゆ柇鐗╂枡缂栫爜鏄惁涓虹┖ - if (!string.IsNullOrEmpty(skuNo)) - { - str += " and stock.SkuNo like @skuno"; - } - //鍒ゆ柇鐗╂枡鍚嶇О鏄惁涓虹┖ - if (!string.IsNullOrEmpty(skuName)) - { - str += " and stock.SkuName like @skuname"; - } - //鎺掑簭 - str += " order by stock.SkuNo"; - List<MateDataStockDto> StockList = Db.Ado.SqlQuery<MateDataStockDto>(str, new - { - isdel = "0", //鏄惁鍒犻櫎 - skuno = "%" + skuNo + "%", //鐗╂枡缂栫爜 - skuname = "%" + skuName + "%" //鐗╂枡鍚嶇О - }); - - //搴撳瓨鎬婚噺 - List<MateDataStockDto> StockListDto = new List<MateDataStockDto>(); - - foreach (var item in StockList) - { - //鍒ゆ柇搴撳瓨鎬婚噺鏄惁鎷ユ湁鐗╂枡 - if (StockListDto.Count > 0) + // 鑾峰彇鍏ュ簱鍗曟槑缁嗕俊鎭� GetDataStockListDaoChu + var asnList = Db.Queryable<DataStockDetail>() + .Where(m => m.IsDel == "0") + .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)).Distinct() + .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)).Distinct() + .WhereIF(!string.IsNullOrEmpty(InspectStatus), a => a.InspectStatus == InspectStatus) + .Select(a => new MateDataStockDto() { - int i = 0; - //foreach寰幆搴撳瓨鎬婚噺 - foreach (var dto in StockListDto) - { - //鍒ゆ柇鐗╂枡鏄惁鐩稿悓 - if (dto.SkuNo == item.SkuNo) - { - dto.Qty = Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty); - dto.FrozenQty = Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty); - dto.LockQty = Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty); - dto.ResidueQty = (Convert.ToInt32(dto.ResidueQty) + Convert.ToInt32(item.ResidueQty)).ToString(); - break; - } - i += 1; - //鍒ゆ柇宸叉湁鐩稿悓鐗╂枡 - if (i == StockListDto.Count) - { - StockListDto.Add(item); - break; - } - } - } - else - { - StockListDto.Add(item); - continue; - } - } - foreach (var item in StockListDto) - { - //鐗╂枡缂栫爜锛屽姞涓婂崟寮曞彿鏄槻姝㈠鍑哄埌excel鑷姩鎶婂墠闈㈢殑0缁欏幓鎺� - if (!string.IsNullOrEmpty(item.SkuNo) && item.SkuNo.Substring(0, 1) == "0") - { - item.SkuNo = $"'{item.SkuNo}"; - } - } + SkuNo = a.SkuNo,//鐗╂枡缂栫爜 + SkuName = a.SkuName,//鐗╂枡鍚嶇О + Standard = a.Standard,//鐗╂枡瑙勬牸 + LotNo = a.LotNo,//鎵规鍙� + OwnerNo = a.OwnerNo,//璐т富缂栧彿 + OwnerName = a.OwnerName,//璐т富鍚嶇О + Status = ((a.Status == "0") ? "寰呭垎閰�" : ((a.Status == "1") ? "閮ㄥ垎鍒嗛厤" : ((a.Status == "2") ? "鐩樼偣閿佸畾" : ((a.Status == "3") ? "绉诲簱閿佸畾" : "寮傚父閿佸畾")))),//搴撳瓨鐘舵�� + InspectStatus = ((a.InspectStatus == "0") ? "寰呰川妫�" : (a.InspectStatus == "1" ? "妫�楠屽悎鏍�" : "涓嶅悎鏍�")),//璐ㄦ鐘舵�� + Qty = SqlFunc.AggregateSum(Convert.ToInt32((a.Qty))),//搴撳瓨鏁伴噺 + LockQty = SqlFunc.AggregateSum(Convert.ToInt32(a.LockQty)),//閿佸畾鏁伴噺 + FrozenQty = SqlFunc.AggregateSum(Convert.ToInt32(a.FrozenQty)),//鍐荤粨鏁伴噺 + InspectQty = SqlFunc.AggregateSum(Convert.ToInt32(a.InspectQty))//鍙娊妫�鏁伴噺 + }) + .Distinct() + .GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard, a.LotNo, a.Status, a.InspectStatus, a.OwnerNo, a.OwnerName, a.Qty, a.LockQty, a.FrozenQty, a.InspectQty }) + .ToList(); - return StockListDto; + Console.WriteLine("缁撴灉锛�" + asnList); + return asnList; } /// <summary> @@ -944,127 +906,114 @@ /// <param name="skuName">鐗╂枡鍚嶇О</param> /// <param name="lotNo">鎵规</param> /// <param name="locatNo">鍌ㄤ綅鍦板潃</param> - /// <param name="palletNo">鎵樼洏鏉$爜</param> /// <param name="status">搴撳瓨鐘舵��</param> /// <param name="inspectStatus">璐ㄦ鐘舵��</param> + /// <param name="ownerNo">璐х墿缂栧彿</param> + /// <param name="ownerName">璐х墿鍚嶇О</param> /// <param name="startTime">寮�濮嬫椂闂�</param> /// <param name="endTime">缁撴潫鏃堕棿</param> /// <returns></returns> - public List<StockDetailDto> GetInventoryList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, - string palletNo, string status, string inspectStatus, string startTime, string endTime) + public List<StockDetailDto> GetDataStockList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string status, string inspectStatus, string ownerNo, string ownerName, string startTime, string endTime) { - string str = "select detail.*,house.WareHouseName as WareHouseName,roadway.RoadwayName as RoadwayName from DataStockDetail detail left join SysStorageRoadway roadway on detail.RoadwayNo = roadway.RoadwayNo left join SysWareHouse house on detail.WareHouseNo = house.WareHouseNo Where detail.IsDel = @isdel"; - //鍒ゆ柇鐗╂枡缂栫爜鏄惁涓虹┖ - if (!string.IsNullOrEmpty(skuNo)) - { - str += " and detail.SkuNo = @skuno"; - } - //鍒ゆ柇鐗╂枡鍚嶇О鏄惁涓虹┖ - if (!string.IsNullOrEmpty(skuName)) - { - str += " and detail.SkuName = @skuname"; - } - //鍒ゆ柇鎵规鏄惁涓虹┖ - if (!string.IsNullOrEmpty(lotNo)) - { - str += " and detail.LotNo = @lotno"; - } - //鍒ゆ柇鍌ㄤ綅鍦板潃鏄惁涓虹┖ - if (!string.IsNullOrEmpty(locatNo)) - { - str += " and detail.LocatNo = @locatno"; - } - //鍒ゆ柇鎵樼洏鏉$爜鏄惁涓虹┖ - if (!string.IsNullOrEmpty(palletNo)) - { - str += " and detail.PalletNo = @palletno"; - } - //鍒ゆ柇搴撳瓨鐘舵�佹槸鍚︿负绌� - if (!string.IsNullOrEmpty(status)) - { - str += " and detail.Status = @status"; - } - //鍒ゆ柇璐ㄦ鐘舵�佹槸鍚︿负绌� - if (!string.IsNullOrEmpty(inspectStatus)) - { - str += " and detail.InspectStatus = @inspectstatus"; - } - if (!string.IsNullOrEmpty(startTime)) - { - str += $" and detail.CompleteTime >= '{startTime}'"; - } - if (!string.IsNullOrEmpty(endTime)) - { - endTime = Convert.ToDateTime(endTime).AddDays(1).ToString(); - str += $" and detail.CompleteTime < '{endTime}'"; - } - //鎺掑簭 - str += " order by detail.SkuNo,detail.PalletNo,detail.LotNo"; - List<StockDetailDto> stockDetailsList = Db.Ado.SqlQuery<StockDetailDto>(str, new - { - isdel = "0", //鏄惁鍒犻櫎 - skuno = skuNo, //鐗╂枡缂栫爜 - skuname = skuName, //鐗╂枡鍚嶇О - lotno = lotNo, //鎵规 - locatno = locatNo, //鍌ㄤ綅鍦板潃 - palletno = palletNo, //鎵樼洏鏉$爜 - status = status, //搴撳瓨鐘舵�� - inspectstatus = inspectStatus //璐ㄦ鐘舵�� - }); - foreach (var item in stockDetailsList) - { - //鍌ㄤ綅鍦板潃锛屽姞涓婂崟寮曞彿鏄槻姝㈠鍑哄埌excel鑷姩鎶婂墠闈㈢殑0缁欏幓鎺� - if (!string.IsNullOrEmpty(item.LocatNo) && item.LocatNo.Substring(0, 1) == "0") + // 鑾峰彇鏄庣粏淇℃伅 + var asnList = Db.Queryable<DataStockDetail, DataStock> + ((tb1, tb2) => new JoinQueryInfos( + JoinType.Left, tb1.Id == tb2.Id + )) + .Where((tb1, tb2) => tb1.IsDel == "0" && tb2.IsDel == "0") + .WhereIF(!string.IsNullOrWhiteSpace(startTime), tb1 => tb1.CreateTime >= Convert.ToDateTime(startTime)) + .WhereIF(!string.IsNullOrWhiteSpace(endTime), tb1 => tb1.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) + .WhereIF(!string.IsNullOrEmpty(skuNo), (tb1, tb2) => tb2.SkuNo.Contains(skuNo)) + .WhereIF(!string.IsNullOrEmpty(skuName), (tb1, tb2) => tb2.SkuName.Contains(skuName)) + .WhereIF(!string.IsNullOrEmpty(ownerNo), (tb1, tb2) => tb2.OwnerNo.Contains(ownerNo)) + .WhereIF(!string.IsNullOrEmpty(ownerName), (tb1, tb2) => tb2.OwnerName.Contains(ownerName)) + .WhereIF(!string.IsNullOrEmpty(lotNo), (tb1, tb2) => tb2.LotNo.Contains(lotNo)) + .WhereIF(!string.IsNullOrEmpty(status), (tb1, tb2) => tb1.Status.Contains(status)) + .WhereIF(!string.IsNullOrEmpty(inspectStatus), (tb1, tb2) => tb1.InspectStatus.Contains(inspectStatus)) + //.GroupBy((tb1,tb2) => new { tb2.LotNo, tb2.SkuNo, tb2.SkuName }) + .Select((tb1, tb2) => new StockDetailDto() { - item.LocatNo = $"'{item.LocatNo}"; - } - //鐗╂枡缂栫爜 - if (!string.IsNullOrEmpty(item.SkuNo) && item.SkuNo.Substring(0, 1) == "0") - { - item.SkuNo = $"'{item.SkuNo}"; - } - //搴撳瓨鐘舵�� - switch (item.Status) - { - case "0": - item.Status = "寰呭垎閰�"; - break; - case "1": - item.Status = "閮ㄥ垎鍒嗛厤"; - break; - case "2": - item.Status = "宸插垎閰�"; - break; - case "3": - item.Status = "鐩樼偣閿佸畾"; - break; - case "4": - item.Status = "绉诲簱閿佸畾"; - break; - default: - break; - } - //璐ㄦ鐘舵�� - switch (item.InspectStatus) - { - case "0": - item.InspectStatus = "寰呮楠�"; - break; - case "1": - item.InspectStatus = "妫�楠屽悎鏍�"; - break; - case "2": - item.InspectStatus = "涓嶅悎鏍�"; - break; - case "4": - item.InspectStatus = "鏀剧疆鏈�"; - break; - default: - break; - } + Status = tb1.Status, + InspectStatus = tb1.InspectStatus, + LotNo = tb1.LotNo, + SkuNo = tb2.SkuNo, + SkuName = tb2.SkuName, + OwnerNo = tb2.OwnerNo, + OwnerName = tb2.OwnerName, + CompleteTime = tb2.CreateTime, + }); - } - return stockDetailsList; + // 鑾峰彇鍑哄簱鍗曟槑缁嗕俊鎭� + var soList = Db.Queryable<DataStockDetail, DataStock> + (((tb1, tb2) => new JoinQueryInfos( + JoinType.Left, tb1.Id == tb2.Id + ))) + .Where((tb1, tb2) => tb1.IsDel == "0" && tb2.IsDel == "0") + .WhereIF(!string.IsNullOrWhiteSpace(startTime), tb1 => tb1.CreateTime >= Convert.ToDateTime(startTime)) + .WhereIF(!string.IsNullOrWhiteSpace(endTime), tb1 => tb1.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) + .WhereIF(!string.IsNullOrEmpty(skuNo), (tb1, tb2) => tb2.SkuNo.Contains(skuNo)) + .WhereIF(!string.IsNullOrEmpty(skuName), (tb1, tb2) => tb2.SkuName.Contains(skuName)) + .WhereIF(!string.IsNullOrEmpty(ownerNo), (tb1, tb2) => tb2.OwnerNo.Contains(ownerNo)) + .WhereIF(!string.IsNullOrEmpty(ownerName), (tb1, tb2) => tb2.OwnerName.Contains(ownerName)) + .WhereIF(!string.IsNullOrEmpty(lotNo), (tb1, tb2) => tb2.LotNo.Contains(lotNo)) + .WhereIF(!string.IsNullOrEmpty(status), (tb1, tb2) => tb1.Status.Contains(status)) + .WhereIF(!string.IsNullOrEmpty(inspectStatus), (tb1, tb2) => tb1.InspectStatus.Contains(inspectStatus)) + //.GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) + .Select((tb1, tb2) => new StockDetailDto() + { + Status = tb1.Status, + InspectStatus = tb1.InspectStatus, + LotNo = tb1.LotNo, + SkuNo = tb2.SkuNo, + SkuName = tb2.SkuName, + OwnerNo = tb2.OwnerNo, + OwnerName = tb2.OwnerName, + CompleteTime = tb2.CreateTime, + }); + + // 鑾峰彇鍙栨牱鎷h揣淇℃伅 + var samplingList = Db.Queryable<DataStockDetail, DataStock> + (((tb1, tb2) => new JoinQueryInfos( + JoinType.Left, tb1.Id == tb2.Id + ))) + .Where((tb1, tb2) => tb1.IsDel == "0" && tb2.IsDel == "0") + .WhereIF(!string.IsNullOrWhiteSpace(startTime), tb1 => tb1.CreateTime >= Convert.ToDateTime(startTime)) + .WhereIF(!string.IsNullOrWhiteSpace(endTime), tb1 => tb1.CreateTime <= Convert.ToDateTime(endTime).AddDays(1)) + .WhereIF(!string.IsNullOrEmpty(skuNo), (tb1, tb2) => tb2.SkuNo.Contains(skuNo)) + .WhereIF(!string.IsNullOrEmpty(skuName), (tb1, tb2) => tb2.SkuName.Contains(skuName)) + .WhereIF(!string.IsNullOrEmpty(ownerNo), (tb1, tb2) => tb2.OwnerNo.Contains(ownerNo)) + .WhereIF(!string.IsNullOrEmpty(ownerName), (tb1, tb2) => tb2.OwnerName.Contains(ownerName)) + .WhereIF(!string.IsNullOrEmpty(lotNo), (tb1, tb2) => tb2.LotNo.Contains(lotNo)) + .WhereIF(!string.IsNullOrEmpty(status), (tb1, tb2) => tb1.Status.Contains(status)) + .WhereIF(!string.IsNullOrEmpty(inspectStatus), (tb1, tb2) => tb1.InspectStatus.Contains(inspectStatus)) + //.GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName }) + .Select((tb1, tb2) => new StockDetailDto() + { + Status = tb1.Status, + InspectStatus = tb1.InspectStatus, + LotNo = tb1.LotNo, + SkuNo = tb2.SkuNo, + SkuName = tb2.SkuName, + OwnerNo = tb2.OwnerNo, + OwnerName = tb2.OwnerName, + CompleteTime = tb2.CreateTime, + }); + + // 鍚堝苟闆嗗悎 + var dataList = Db.UnionAll(asnList, soList, samplingList) + .Select(a => new StockDetailDto() + { + Status = a.Status, + InspectStatus = a.InspectStatus, + LotNo = a.LotNo, + SkuNo = a.SkuNo, + SkuName = a.SkuName, + OwnerNo = a.OwnerNo, + OwnerName = a.OwnerName, + CompleteTime = a.CompleteTime, + }).ToList(); + + return dataList; } #endregion } diff --git a/Wms/WMS.IBLL/IDataServer/IStockServer.cs b/Wms/WMS.IBLL/IDataServer/IStockServer.cs index 8d3d2e0..0b7fb63 100644 --- a/Wms/WMS.IBLL/IDataServer/IStockServer.cs +++ b/Wms/WMS.IBLL/IDataServer/IStockServer.cs @@ -112,7 +112,7 @@ /// <param name="skuNo">鐗╂枡缂栫爜</param> /// <param name="skuName">鐗╂枡鍚嶇О</param> /// <returns></returns> - List<MateDataStockDto> GetDataStockListDaoChu(string skuNo, string skuName); + List<MateDataStockDto> GetDataStockListDaoChu(string skuNo, string skuName, string InspectStatus); /// <summary> /// 瀵煎嚭搴撳瓨鏄庣粏 @@ -127,7 +127,7 @@ /// <param name="startTime">寮�濮嬫椂闂�</param> /// <param name="endTime">缁撴潫鏃堕棿</param> /// <returns></returns> - List<StockDetailDto> GetInventoryList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string palletNo, string status, string inspectStatus, string startTime, string endTime); + List<StockDetailDto> GetDataStockList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string status, string inspectStatus, string ownerNo, string ownerName, string startTime, string endTime); #endregion } } diff --git a/Wms/Wms/Controllers/StatisticalController.cs b/Wms/Wms/Controllers/StatisticalController.cs index 5d8ea60..83c294e 100644 --- a/Wms/Wms/Controllers/StatisticalController.cs +++ b/Wms/Wms/Controllers/StatisticalController.cs @@ -329,11 +329,12 @@ /// </summary> /// <param name="skuNo"></param> /// <param name="skuName"></param> + /// <param name="InspectStatus">璐ㄦ鐘舵��</param> /// <returns></returns> [HttpGet] - public IActionResult GetInventoryListDaoChu(string skuNo, string skuName) + public IActionResult GetInventoryListDaoChu(string skuNo, string skuName, string InspectStatus) { - List<MateDataStockDto> StockList = _stock.GetDataStockListDaoChu(skuNo, skuName); + List<MateDataStockDto> StockList = _stock.GetDataStockListDaoChu(skuNo, skuName, InspectStatus); return Ok(new { data = StockList, @@ -341,7 +342,7 @@ msg = "瀵煎嚭搴撳瓨鎬婚噺鎴愬姛" }); } - /// <summary> + /// <summary>GetDataStockListDaoChu /// 瀵煎嚭搴撳瓨鏄庣粏 /// </summary> /// <param name="skuNo">鐗╂枡缂栫爜</param> @@ -353,9 +354,9 @@ /// <param name="inspectStatus">璐ㄦ鐘舵��</param> /// <returns></returns> [HttpGet] - public IActionResult GetInventoryList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string palletNo, string status, string inspectStatus, string startTime, string endTime) + public IActionResult GetDataStockList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string status, string inspectStatus, string ownerNo, string ownerName, string startTime, string endTime) { - List<StockDetailDto> stockDetailsList = _stock.GetInventoryList1DaoChu(skuNo, skuName, lotNo, locatNo, palletNo, status, inspectStatus, startTime, endTime); + List<StockDetailDto> stockDetailsList = _stock.GetDataStockList1DaoChu(skuNo, skuName, lotNo, locatNo, status, inspectStatus, ownerNo, ownerName, startTime, endTime); return Ok(new { data = stockDetailsList, -- Gitblit v1.8.0