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