From 9441a216b632f9fb8f549a8278fc337367a08a4e Mon Sep 17 00:00:00 2001 From: 南骏 池 <chiffly@163.com> Date: 星期三, 06 八月 2025 09:02:13 +0800 Subject: [PATCH] 1.调拨出库优化 2.其他出库优化调整 --- service/Warehouse/TransferOutManager.cs | 174 ++++++++++++++++++++++++++++++++----------- service/Warehouse/MesItemQtManager.cs | 38 ++++++--- Dto/service/ProductionPickDto.cs | 2 Controllers/Warehouse/TransferOutController.cs | 26 ++++- 4 files changed, 174 insertions(+), 66 deletions(-) diff --git a/Controllers/Warehouse/TransferOutController.cs b/Controllers/Warehouse/TransferOutController.cs index 314ce0f..dacb59c 100644 --- a/Controllers/Warehouse/TransferOutController.cs +++ b/Controllers/Warehouse/TransferOutController.cs @@ -1,6 +1,7 @@ 锘縰sing System.Dynamic; using Microsoft.AspNetCore.Mvc; using NewPdaSqlServer.Dto.service; +using NewPdaSqlServer.service.@base; using NewPdaSqlServer.service.Warehouse; using NewPdaSqlServer.util; @@ -14,6 +15,8 @@ public class TransferOutController : ControllerBase { private readonly TransferOutManager _manager = new(); + + private readonly MesPrintMangeer _mCf = new(); #region 鍩虹CRUD @@ -197,9 +200,16 @@ try { dynamic resultInfos = new ExpandoObject(); - var (form, items) = _manager.ScanMoveBarcode(query); - resultInfos.form = form; - resultInfos.items = items; + resultInfos.tbBillList = _manager.ScanMoveBarcode(query); + if (resultInfos.tbBillList.result == "2") + { + return new ResponseResult + { + status = Convert.ToInt32(resultInfos.tbBillList.result), + message = resultInfos.tbBillList.strMsg, + data = resultInfos + }; + } return new ResponseResult { status = 0, @@ -236,14 +246,16 @@ /// </remarks> /// <response code="200">鍒嗗壊鎴愬姛</response> /// <response code="400">鍒嗗壊澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response> - [HttpPost("SplitBarcode")] - public ResponseResult SplitBarcode([FromBody] WarehouseQuery query) + [HttpPost("ScanCodeCF")] + public ResponseResult ScanCodeCF(WarehouseQuery query) { try { dynamic resultInfos = new ExpandoObject(); - var message = _manager.SplitBarcode(query); - resultInfos.tbBillList = message; + resultInfos.tbBillList = new ExpandoObject(); + resultInfos.tbBillList.printInfo = _mCf.getPrintInfo(query); + var scanResult = _manager.ScanCodeCF(query); + resultInfos.tbBillList.cfBarInfo = _mCf.getCfInfo(scanResult); return new ResponseResult { status = 0, diff --git a/Dto/service/ProductionPickDto.cs b/Dto/service/ProductionPickDto.cs index 935b3a2..dc51f2c 100644 --- a/Dto/service/ProductionPickDto.cs +++ b/Dto/service/ProductionPickDto.cs @@ -6,6 +6,8 @@ public class ProductionPickDto { public string? ItemModel { get; set; } + + public string? itemNo { get; set; } public string? PlanNo { get; set; } public string? daa001 { get; set; } diff --git a/service/Warehouse/MesItemQtManager.cs b/service/Warehouse/MesItemQtManager.cs index 68f2121..c2507f1 100644 --- a/service/Warehouse/MesItemQtManager.cs +++ b/service/Warehouse/MesItemQtManager.cs @@ -16,13 +16,14 @@ /// <returns>閫�鏂欏崟鍙峰垪琛�</returns> public List<string> GetPendingQtList() { - const string sql = @"SELECT qtck - FROM MES_ITEM_QT - WHERE qt015 = 1 - AND qt026 = 1 - AND QT029 = 1 - AND qt032 = 1 - AND QT014 = 0 "; + const string sql = @"SELECT qtck +FROM MES_ITEM_QT +WHERE qt015 = 1 + AND qt026 = 1 + AND QT029 = 1 + AND qt032 = 1 + AND QT014 = 0 +ORDER BY qt002"; return Db.Ado.SqlQuery<string>(sql); } @@ -51,8 +52,8 @@ // throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 鏈鏍革紝璇风‘璁わ紒"); // 妫�鏌ラ��鏂欏崟鐨勫畬缁撶姸鎬�(Qt014)锛屽凡瀹岀粨鍒欐姏鍑哄紓甯� - if (mesItemQt.Qt014 == true) - throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒"); + //if (mesItemQt.Qt014 == true) + // throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒"); var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel, ISNULL(A.qd007,0) FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty, @@ -116,6 +117,9 @@ if (barcode == null) throw new Exception($"mes涓笉瀛樺湪姝ゆ潯鐮�,璇锋牳瀵癸紒{p_item_barcode}"); + + + // 鑾峰彇搴撳瓨淇℃伅 var stock = Db.Queryable<MesInvItemStocks>() .Where(it => it.ItemBarcode == p_item_barcode && it.Quantity > 0) @@ -146,6 +150,9 @@ .Where(it => it.Qtck == p_bill_no && it.Qt015 == true && it.Qt026 == true && it.Qt029 == true && it.Qt032 == true) .First(); + if (mesItemQt == null) + throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 涓嶅瓨鍦紝璇风‘璁わ紒"); + // 鑾峰彇鍑哄簱鍗曟槑缁� var qtDetail = Db.Queryable<MesItemQtDatall>() .Where(it => @@ -153,17 +160,20 @@ it.ItemId == stock.ItemId.ToString()) .First(); - if (mesItemQt == null) - throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 涓嶅瓨鍦紝璇风‘璁わ紒"); + if (qtDetail == null) throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒"); + + + if (mesItemQt.Qt014 == true) + throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒"); // 妫�鏌ヤ粨搴撴槸鍚︿竴鑷� - if (Convert.ToInt32(qtDetail.DepotId) != stock.DepotId) + if (qtDetail.DepotId != stock.DepotId) throw new Exception( $"鎵爜鍑鸿揣浠撳簱id{qtDetail.DepotId}涓庡叾浠栧嚭搴撶敵璇蜂粨搴搟stock.DepotId}涓嶄竴鑷达紝璇锋牳瀵癸紒"); - if (qtDetail == null) throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒"); + // 妫�鏌ュ墿浣欐暟閲� var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0); @@ -194,6 +204,8 @@ var message = $"璇风‘璁ゅ彂鏂欐暟閲忥紒锛佸凡甯﹀嚭婊¤冻鍏朵粬鍑哄簱鍗曠殑鍙戞枡鏁伴噺 {remainingQty} 纭鍚庤鐐瑰嚮鏉$爜鎷嗗垎"; + throw new Exception($"鏉$爜鏁伴噺瓒呭嚭鍙戞枡鏁伴噺锛岃鎷嗗垎鍚庡啀鎵弿锛�"); + query.itemNo = stock.ItemNo; query.Num = stock.Quantity; query.Fum = remainingQty; diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs index 06d5955..473982e 100644 --- a/service/Warehouse/TransferOutManager.cs +++ b/service/Warehouse/TransferOutManager.cs @@ -42,6 +42,7 @@ // 鏍规嵁pid鏌ヨ瀵瑰簲鐨勫嚭搴撳崟鍙� var billNos = Db.Queryable<MesDbck>() .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1) + .OrderBy(x => x.FCreateDate) .Select(x => x.FBillNo) .ToList(); @@ -53,41 +54,71 @@ /// </summary> /// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param> /// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns> - public List<ItemDetailModel> GetTransferOutDetailListByBillNo( + public ProductionPickDto GetTransferOutDetailListByBillNo( WarehouseQuery query) { - var p_bill_no = query.billNo; + if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璋冩嫧鍗曞彿涓虹┖"); - // 鏍规嵁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(); + var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo); - if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�"); + var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1); - return result; + 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; } public List<ItemDetailModel> GetDBCKDetal( @@ -130,7 +161,7 @@ /// </summary> /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param> /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns> - public (WarehouseQuery form, List<ItemDetailModel> items) + public ProductionPickDto ScanMoveBarcode(WarehouseQuery query) { var p_bill_no = query.billNo; @@ -148,8 +179,7 @@ // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇� 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}"); @@ -200,7 +230,18 @@ query.Fum = Convert.ToDecimal(splitNum); // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏 - return (query, GetDBCKDetal(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) { @@ -309,14 +350,45 @@ } } - //璋冩嫧鍑哄簱鎷嗗垎 prc_pda_DBCK_CF - public string SplitBarcode(WarehouseQuery query) + 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_DBRK]", conn)) + using (var cmd = new SqlCommand("[prc_pda_DBCK_CF]", conn)) { try { @@ -324,27 +396,36 @@ cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { - new("@outMsg", SqlDbType.NVarChar, 300), + new("@outMsg", SqlDbType.NVarChar, 2000), new("@outSum", SqlDbType.NVarChar, 300), - new("@c_user", query.userName), - new("@p_bill_no", query.billNo), + 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.Fum), + 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); - - return _strMsg; + + var dto = new ProductionPickDto + { + daa001 = query.daa001, + barcode = query.barcode,//鍘熸潯鐮� + cfBarcode = _cfBar//鎷嗗垎鍚庢潯鐮� + }; + + return dto; } catch (Exception ex) { @@ -357,4 +438,5 @@ } } } + } \ No newline at end of file -- Gitblit v1.9.3