From b727409bf046acea9533065da35e8e3872cac783 Mon Sep 17 00:00:00 2001 From: 南骏 池 <chiffly@163.com> Date: 星期五, 22 八月 2025 10:54:32 +0800 Subject: [PATCH] 1.生产领料库位信息查询 --- service/Warehouse/TransferOutManager.cs | 397 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 370 insertions(+), 27 deletions(-) diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs index 1314b8c..34119aa 100644 --- a/service/Warehouse/TransferOutManager.cs +++ b/service/Warehouse/TransferOutManager.cs @@ -1,8 +1,10 @@ 锘縰sing System.Data; using System.Data.SqlClient; +using MES.Service.Modes; using NewPdaSqlServer.DB; using NewPdaSqlServer.Dto.service; using NewPdaSqlServer.entity; +using NewPdaSqlServer.entity.Base; using SqlSugar; namespace NewPdaSqlServer.service.Warehouse; @@ -11,7 +13,7 @@ /// 璋冩嫧鍑哄叆搴撶鐞嗙被 /// 璐熻矗澶勭悊璋冩嫧鍑哄簱鐩稿叧鐨勪笟鍔¢�昏緫 /// </summary> -public class TransferOutManager : Repository<TransferOut> +public class TransferOutManager : Repository<MesDbck> { /// <summary> /// 鑾峰彇鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃 @@ -20,7 +22,7 @@ public List<string> GetTransferOutNoList() { // 鍏堜粠鏁版嵁搴撹幏鍙朤ransfer_Out_ETAIL琛ㄧ殑鏁版嵁 - var transferOutDetails = Db.Queryable<TransferOutDetail>().ToList(); + var transferOutDetails = Db.Queryable<MesDbckDetail>().ToList(); // 浣跨敤LINQ瀵硅幏鍙栫殑鏁版嵁杩涜鍒嗙粍鍜岀瓫閫� // 绛涢�夋潯浠�:鐢宠鏁伴噺(sq)涓嶇瓑浜庡凡鎵暟閲�(ys)鐨勮褰� @@ -29,17 +31,19 @@ .Select(g => new { pid = g.Key, - sq = g.Sum(x => x.ShNum), // 鐢宠鏁伴噺鍚堣 - ys = g.Sum(x => x.YsNum) // 宸叉壂鏁伴噺鍚堣 + sq = g.Sum(x => x.FQty), // 鐢宠鏁伴噺鍚堣 + ys = g.Sum(x => x.SQty), // 璋冨嚭宸叉壂鏁伴噺鍚堣 + rs = g.Sum(x => x.RQty), // 璋冨叆宸叉壂鏁伴噺鍚堣 }) - .Where(x => (x.sq ?? 0) != (x.ys ?? 0)) + .Where(x => !((x.sq ?? 0) == (x.ys ?? 0) && (x.sq ?? 0) == (x.rs ?? 0))) .Select(x => x.pid) .ToList(); // 鏍规嵁pid鏌ヨ瀵瑰簲鐨勫嚭搴撳崟鍙� - var billNos = Db.Queryable<TransferOut>() - .Where(x => result.Contains(x.Guid)) - .Select(x => x.BillNo) + var billNos = Db.Queryable<MesDbck>() + .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1) + .OrderBy(x => x.FCreateDate) + .Select(x => x.FBillNo) .ToList(); return billNos; @@ -50,7 +54,147 @@ /// </summary> /// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param> /// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns> - public List<TransferOutDetail> GetTransferOutDetailListByBillNo( + public ProductionPickDto GetTransferOutDetailListByBillNo( + WarehouseQuery query) + { + if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璋冩嫧鍗曞彿涓虹┖"); + + var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo); + + var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1); + + if (dbck.Count < 1) throw new Exception("璋冩嫧鍗曞彿涓嶅瓨鍦ㄦ垨鏈鏍革紒"); + + var sql2 = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.FQty FQty,b.SQty SQty,b.FQty - b.SQty DSQty , + dbo.F_QX_GETRECODEPOTSE(B.FMATERIALID,'','','') as RecoKw + FROM MES_DBCK_DETAIL B + LEFT JOIN MES_DBCK A ON A.ID = B.pid + LEFT JOIN MES_ITEMS C ON B.FMATERIALID = C.item_id + LEFT JOIN WOMCAB D ON B.erpid = D.ERPID + WHERE A.FBillNo = '{0}' ORDER BY FSEQ", query.billNo); + + var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql2); + + + var DS_list = womdabs.Where(s => s.DSQty > 0).ToList(); + + var YS_list = womdabs.Where(s => s.SQty > 0).ToList(); + + //var p_bill_no = query.billNo; + + //// 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏 + //// 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛� + //// 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳 + //var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>( + // (b, a, s) => new JoinQueryInfos( + // JoinType.Left, b.Pid == a.Id, + // JoinType.Left, b.FMaterialId == s.Id.ToString())) + // .Where((b, a, s) => + // !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0)) + // && a.FBillNo == p_bill_no // 鍖归厤鍗曟嵁鍙� + // && a.FApproveStatus == 1) // 鍗曟嵁宸插鏍� + // .OrderBy((b, a, s) => s.ItemNo) + // .Select((b, a, s) => new ItemDetailModel + // { + // ItemNo = s.ItemNo, + // ItemName = s.ItemName, + // ItemModel = s.ItemModel, + // FQty = b.FQty, // 鐢宠鏁伴噺 + // SQty = b.SQty, // 宸叉壂鏁伴噺 + // RQty = b.RQty, // 宸叉壂鏁伴噺 + // // 淇濈暀鍏朵粬蹇呰瀛楁... + // Pid = b.Pid.ToString(), + // FMaterialId = b.FMaterialId, + // Id = b.Id.ToString() + // }) + // .ToList(); + + //if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�"); + + var dto = new ProductionPickDto + { + items = DS_list, + Ysitems = YS_list + // yisao = mesInvItemOutCDetailsList + }; + + return dto; + } + + + /// <summary> + /// 鏍规嵁鍗曟嵁鍙疯幏鍙栧緟澶勭悊鐨勮皟鎷ㄥ嚭搴撴槑缁嗗垪琛� + /// </summary> + /// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param> + /// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns> + public ProductionPickDto GetTransferInDetailListByBillNo( + WarehouseQuery query) + { + if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璋冩嫧鍗曞彿涓虹┖"); + + var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo); + + var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1); + + if (dbck.Count < 1) throw new Exception("璋冩嫧鍗曞彿涓嶅瓨鍦ㄦ垨鏈鏍革紒"); + + var sql2 = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.FQty FQty,b.SQty SQty,b.RQty RQty,b.SQty - b.RQty DSQty , + dbo.F_QX_GETRECODEPOTSE(B.FMATERIALID,'','','') as RecoKw + FROM MES_DBCK_DETAIL B + LEFT JOIN MES_DBCK A ON A.ID = B.pid + LEFT JOIN MES_ITEMS C ON B.FMATERIALID = C.item_id + LEFT JOIN WOMCAB D ON B.erpid = D.ERPID + WHERE A.FBillNo = '{0}' ORDER BY FSEQ", query.billNo); + + var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql2); + + + var DS_list = womdabs.Where(s => s.DSQty > 0).ToList(); + + var YS_list = womdabs.Where(s => s.RQty > 0).ToList(); + + //var p_bill_no = query.billNo; + + //// 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏 + //// 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛� + //// 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳 + //var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>( + // (b, a, s) => new JoinQueryInfos( + // JoinType.Left, b.Pid == a.Id, + // JoinType.Left, b.FMaterialId == s.Id.ToString())) + // .Where((b, a, s) => + // !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0)) + // && a.FBillNo == p_bill_no // 鍖归厤鍗曟嵁鍙� + // && a.FApproveStatus == 1) // 鍗曟嵁宸插鏍� + // .OrderBy((b, a, s) => s.ItemNo) + // .Select((b, a, s) => new ItemDetailModel + // { + // ItemNo = s.ItemNo, + // ItemName = s.ItemName, + // ItemModel = s.ItemModel, + // FQty = b.FQty, // 鐢宠鏁伴噺 + // SQty = b.SQty, // 宸叉壂鏁伴噺 + // RQty = b.RQty, // 宸叉壂鏁伴噺 + // // 淇濈暀鍏朵粬蹇呰瀛楁... + // Pid = b.Pid.ToString(), + // FMaterialId = b.FMaterialId, + // Id = b.Id.ToString() + // }) + // .ToList(); + + //if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�"); + + var dto = new ProductionPickDto + { + items = DS_list, + Ysitems = YS_list + // yisao = mesInvItemOutCDetailsList + }; + + return dto; + } + + public List<ItemDetailModel> GetDBCKDetal( WarehouseQuery query) { var p_bill_no = query.billNo; @@ -58,25 +202,27 @@ // 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏 // 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛� // 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳 - var result = Db.Queryable<TransferOutDetail, TransferOut, MesItems>( + var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>( (b, a, s) => new JoinQueryInfos( - JoinType.Left, b.Pid == a.Guid, - JoinType.Left, b.ItemId == s.Id)) + JoinType.Left, b.Pid == a.Id, + JoinType.Left, b.FMaterialId == s.Id.ToString())) .Where((b, a, s) => - (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0 // 鏈畬鎴愭暟閲忓ぇ浜�0 - && a.BillNo == p_bill_no // 鍖归厤鍗曟嵁鍙� - && a.Status == 1) // 鍗曟嵁宸插鏍� + !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0)) // 鏈畬鎴愭暟閲忓ぇ浜�0 + && a.FBillNo == p_bill_no // 鍖归厤鍗曟嵁鍙� + && a.FApproveStatus == 1) // 鍗曟嵁宸插鏍� .OrderBy((b, a, s) => s.ItemNo) - .Select((b, a, s) => new TransferOutDetail + .Select((b, a, s) => new ItemDetailModel { ItemNo = s.ItemNo, + ItemName = s.ItemName, ItemModel = s.ItemModel, - ShNum = b.ShNum, // 鐢宠鏁伴噺 - YsNum = b.YsNum, // 宸叉壂鏁伴噺 + FQty = b.FQty, // 鐢宠鏁伴噺 + SQty = b.SQty, // 宸叉壂鏁伴噺 + RQty = b.RQty, // 淇濈暀鍏朵粬蹇呰瀛楁... - Pid = b.Pid, - ItemId = b.ItemId, - Guid = b.Guid + Pid = b.Pid.ToString(), + FMaterialId = b.FMaterialId, + Id = b.Id.ToString() }) .ToList(); @@ -88,7 +234,7 @@ /// </summary> /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param> /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns> - public (WarehouseQuery form, List<TransferOutDetail> items) + public ProductionPickDto ScanMoveBarcode(WarehouseQuery query) { var p_bill_no = query.billNo; @@ -98,16 +244,15 @@ if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒"); // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵�� - var transferOut = Db.Queryable<TransferOut>() - .Where(x => x.BillNo == p_bill_no && x.Status == 1) + var transferOut = Db.Queryable<MesDbck>() + .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1) .First(); if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�"); // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇� var stock = Db.Queryable<MesInvItemStocks>() .Where(x => x.ItemBarcode == p_item_barcode - && x.Quantity > 0 - && !string.IsNullOrEmpty(x.DepotsCode)) + && x.Quantity > 0) .First(); if (stock == null) throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_item_barcode}"); @@ -158,7 +303,18 @@ query.Fum = Convert.ToDecimal(splitNum); // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏 - return (query, GetTransferOutDetailListByBillNo(query)); + //return (query, GetDBCKDetal(query)); + var dto = new ProductionPickDto + { + itemNo = item.ItemNo, + barcodeNum = barcodeNum, + splitNum = splitNum, + barcode = query.barcode, + strMsg = _strMsg, + result = _intSum + }; + + return dto; } catch (Exception ex) { @@ -171,4 +327,191 @@ } } } + + /// <summary> + /// 鎵弿鏉$爜杩涜璋冩嫧鍏ュ簱澶勭悊 + /// </summary> + /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param> + /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns> + public (WarehouseQuery form, List<ItemDetailModel> items) + ScanReceiveBarcode(WarehouseQuery query) + { + var p_bill_no = query.billNo; + var p_item_barcode = query.barcode; + + var barinfo = Db.Queryable<MesInvItemStocks>() + .Where(x => x.ItemBarcode == p_item_barcode) + .First(); + + + //// 楠岃瘉鍗曟嵁鍙� + //if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒"); + + //// 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵�� + //var transferOut = Db.Queryable<MesDbck>() + // .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1) + // .First(); + //if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�"); + + // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇� + var stock = Db.Queryable<MesDbckDetail>() + .Where(x => x.FMaterialId == barinfo.ItemId.ToString() + && x.FQty > 0 + && !string.IsNullOrEmpty(x.FStockInId) + && !string.IsNullOrEmpty(x.FOwnerInId)) + .First(); + if (stock == null) throw new Exception($"璋冩嫧鏄庣粏涓� 銆愮墿鏂欍�戞垨 銆愯皟鍏ヤ粨搴撱�戞垨銆愯皟鍏ヨ揣涓汇�戜俊鎭笉瀛樺湪锛岃鏍稿锛亄p_item_barcode}"); + + // 鏌ヨ鐗╂枡淇℃伅 + var item = Db.Queryable<MesItems>() + .Where(x => x.Id.ToString() == stock.FMaterialId) + .First(); + if (item == null) throw new Exception("鏈壘鍒扮墿鏂�"); + + var _strMsg = ""; + var _intSum = ""; + using (var conn = new SqlConnection(DbHelperSQL.strConn)) + { + using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn)) + { + try + { + conn.Open(); + cmd.CommandType = CommandType.StoredProcedure; + SqlParameter[] parameters = + { + new("@outMsg", SqlDbType.NVarChar, 300), + new("@outSum", SqlDbType.NVarChar, 300), + new("@barcode_num", SqlDbType.NVarChar, 300), + new("@outBillNo", SqlDbType.NVarChar, 300), + new("@c_user", query.userName), + new("@p_bill_no", p_bill_no), + new("@p_item_barcode", p_item_barcode), + new("@p_depot_section_code", query.sectionCode), + }; + parameters[0].Direction = ParameterDirection.Output; + parameters[1].Direction = ParameterDirection.Output; + parameters[2].Direction = ParameterDirection.Output; + parameters[3].Direction = ParameterDirection.Output; + foreach (var parameter in parameters) + cmd.Parameters.Add(parameter); + cmd.ExecuteNonQuery(); + _strMsg = parameters[0].Value.ToString(); + _intSum = parameters[1].Value.ToString(); + + var barcodeNum = parameters[2].Value.ToString(); + var outBillNo = parameters[3].Value.ToString(); + + var result = Convert.ToInt32(_intSum); + if (result <= 0) throw new Exception(_strMsg); + + query.itemNo = item.ItemNo; + query.Num = Convert.ToDecimal(barcodeNum); + //query.Fum = Convert.ToDecimal(splitNum); + query.billNo = outBillNo; + + // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏 + return (query, GetDBCKDetal(query)); + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + finally + { + conn.Close(); + } + } + } + } + + public ProductionPickDto ScanCodeCF(WarehouseQuery query) + { + var p_bill_no = query.daa001; + var p_item_barcode = query.barcode; + + var barinfo = Db.Queryable<MesInvItemStocks>() + .Where(x => x.ItemBarcode == p_item_barcode) + .First(); + + // 楠岃瘉鍗曟嵁鍙� + if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒"); + + // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵�� + var transferOut = Db.Queryable<MesDbck>() + .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1) + .First(); + if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�"); + + // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇� + var stock = Db.Queryable<MesDbckDetail>() + .Where(x => x.FMaterialId == barinfo.ItemId.ToString() + && x.FQty > 0 + && !string.IsNullOrEmpty(x.FStockInId) + && !string.IsNullOrEmpty(x.FOwnerInId)) + .First(); + if (stock == null) throw new Exception($"璋冩嫧鏄庣粏涓� 銆愮墿鏂欍�戞垨 銆愯皟鍏ヤ粨搴撱�戞垨銆愯皟鍏ヨ揣涓汇�戜俊鎭笉瀛樺湪锛岃鏍稿锛亄p_item_barcode}"); + + // 鏌ヨ鐗╂枡淇℃伅 + var item = Db.Queryable<MesItems>() + .Where(x => x.Id.ToString() == stock.FMaterialId) + .First(); + if (item == null) throw new Exception("鏈壘鍒扮墿鏂�"); + + var _strMsg = ""; + var _intSum = ""; + var _cfBar = ""; + using (var conn = new SqlConnection(DbHelperSQL.strConn)) + { + using (var cmd = new SqlCommand("[prc_pda_DBCK_CF]", conn)) + { + try + { + conn.Open(); + cmd.CommandType = CommandType.StoredProcedure; + SqlParameter[] parameters = + { + new("@outMsg", SqlDbType.NVarChar, 2000), + new("@outSum", SqlDbType.NVarChar, 300), + new("@outCfBar", SqlDbType.NVarChar, 300), + new("@c_User", query.userName), + new("@p_biLL_no", query.daa001), + new("@p_item_barcode", query.barcode), + new("@num", query.Num) + }; + parameters[0].Direction = ParameterDirection.Output; + parameters[1].Direction = ParameterDirection.Output; + parameters[2].Direction = ParameterDirection.Output; + foreach (var parameter in parameters) + cmd.Parameters.Add(parameter); + cmd.ExecuteNonQuery(); + _strMsg = parameters[0].Value.ToString(); + _intSum = parameters[1].Value.ToString(); + _cfBar = parameters[2].Value.ToString(); + + + var result = Convert.ToInt32(_intSum); + if (result <= 0) throw new Exception(_strMsg); + + var dto = new ProductionPickDto + { + daa001 = query.daa001, + barcode = query.barcode,//鍘熸潯鐮� + cfBarcode = _cfBar//鎷嗗垎鍚庢潯鐮� + }; + + return dto; + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + finally + { + conn.Close(); + } + } + } + } + } \ No newline at end of file -- Gitblit v1.9.3