From cb23d88faf0bd112db57816c5cc02e47eb685324 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期一, 13 一月 2025 10:56:10 +0800
Subject: [PATCH] 11

---
 service/Warehouse/TransferOutManager.cs        |  139 ++++++++++++++++++++++++++++++++++
 Controllers/Warehouse/TransferOutController.cs |   95 +++++++++++++++++++++++
 2 files changed, 234 insertions(+), 0 deletions(-)

diff --git a/Controllers/Warehouse/TransferOutController.cs b/Controllers/Warehouse/TransferOutController.cs
index d37e531..314ce0f 100644
--- a/Controllers/Warehouse/TransferOutController.cs
+++ b/Controllers/Warehouse/TransferOutController.cs
@@ -43,6 +43,57 @@
 
     #endregion
 
+    #region 璋冩嫧鍏ュ簱涓氬姟
+
+    /// <summary>
+    ///     鎵弿鏉$爜杩涜璋冩嫧鍏ュ簱澶勭悊
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>澶勭悊缁撴灉鍜屽緟澶勭悊鏄庣粏</returns>
+    /// <remarks>
+    ///     璇锋眰绀轰緥:
+    ///     POST /api/TransferOut/ScanReceiveBarcode
+    ///     {
+    ///     "billNo": "DB202401010001",  // 璋冩嫧鍗曞彿(蹇呭~)
+    ///     "userName": "admin",          // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     "barcode": "BC001"           // 鏉$爜鍙�(蹇呭~)
+    ///     }
+    ///     涓氬姟澶勭悊锛�
+    ///     - 楠岃瘉璋冩嫧鍗曠姸鎬�
+    ///     - 楠岃瘉鏉$爜搴撳瓨淇℃伅
+    ///     - 楠岃瘉浠撳簱涓�鑷存��
+    ///     - 楠岃瘉鏁伴噺鏄惁瓒呭嚭鏈壂鏁伴噺
+    ///     - 鎵ц璋冩嫧鍏ュ簱浜嬪姟澶勭悊
+    ///     杩斿洖鏁版嵁鍖呭惈锛�
+    ///     - form: 澶勭悊缁撴灉琛ㄥ崟
+    ///     - items: 寰呭鐞嗘槑缁嗗垪琛�
+    /// </remarks>
+    /// <response code="200">鎵弿鎴愬姛</response>
+    /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("ScanReceiveBarcode")]
+    public ResponseResult ScanReceiveBarcode([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var (form, items) = _manager.ScanReceiveBarcode(query);
+            resultInfos.form = form;
+            resultInfos.items = items;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    #endregion
+
     #region 璋冩嫧鍑哄簱涓氬姟
 
     /// <summary>
@@ -162,5 +213,49 @@
         }
     }
 
+    /// <summary>
+    ///     鍒嗗壊鏉$爜杩涜璋冩嫧鍑哄簱澶勭悊
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>澶勭悊缁撴灉鍜屽緟澶勭悊鏄庣粏</returns>
+    /// <remarks>
+    ///     璇锋眰绀轰緥:
+    ///     POST /api/TransferOut/SplitBarcode
+    ///     {
+    ///     "billNo": "DB202401010001",  // 璋冩嫧鍗曞彿(蹇呭~)
+    ///     "userName": "admin",          // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     "barcode": "BC001"           // 鏉$爜鍙�(蹇呭~)
+    ///     "fum": "1"                  // 鎷嗗垎鏁�(蹇呭~)
+    ///     }
+    ///     涓氬姟澶勭悊锛�
+    ///     - 楠岃瘉璋冩嫧鍗曠姸鎬�
+    ///     - 楠岃瘉鏉$爜搴撳瓨淇℃伅
+    ///     - 楠岃瘉浠撳簱涓�鑷存��
+    ///     - 楠岃瘉鏁伴噺鏄惁瓒呭嚭鏈壂鏁伴噺
+    ///     - 鎵ц鍒嗗壊鏉$爜鐨勮皟鎷ㄥ嚭搴撲簨鍔″鐞�
+    /// </remarks>
+    /// <response code="200">鍒嗗壊鎴愬姛</response>
+    /// <response code="400">鍒嗗壊澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("SplitBarcode")]
+    public ResponseResult SplitBarcode([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var message = _manager.SplitBarcode(query);
+            resultInfos.tbBillList = message;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
     #endregion
 }
\ No newline at end of file
diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs
index 1314b8c..55ff835 100644
--- a/service/Warehouse/TransferOutManager.cs
+++ b/service/Warehouse/TransferOutManager.cs
@@ -171,4 +171,143 @@
             }
         }
     }
+
+    /// <summary>
+    ///     鎵弿鏉$爜杩涜璋冩嫧鍏ュ簱澶勭悊
+    /// </summary>
+    /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param>
+    /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns>
+    public (WarehouseQuery form, List<TransferOutDetail> items)
+        ScanReceiveBarcode(WarehouseQuery query)
+    {
+        var p_bill_no = query.billNo;
+        var p_item_barcode = query.barcode;
+
+        // 楠岃瘉鍗曟嵁鍙�
+        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+
+        // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵��
+        var transferOut = Db.Queryable<TransferOut>()
+            .Where(x => x.BillNo == p_bill_no && x.Status == 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))
+            .First();
+        if (stock == null) throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_item_barcode}");
+
+        // 鏌ヨ鐗╂枡淇℃伅
+        var item = Db.Queryable<MesItems>()
+            .Where(x => x.Id == stock.ItemId)
+            .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("@split_num", 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 splitNum = 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);
+
+                    // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏
+                    return (query, GetTransferOutDetailListByBillNo(query));
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    conn.Close();
+                }
+            }
+        }
+    }
+
+    //璋冩嫧鍑哄簱鎷嗗垎 prc_pda_DBCK_CF
+    public string SplitBarcode(WarehouseQuery query)
+    {
+        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("@c_user", query.userName),
+                        new("@p_bill_no", query.billNo),
+                        new("@p_item_barcode", query.barcode),
+                        new("@NUM", query.Fum),
+                    };
+                    
+                    parameters[0].Direction = ParameterDirection.Output;
+                    parameters[1].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 result = Convert.ToInt32(_intSum);
+                    if (result <= 0) throw new Exception(_strMsg);
+                    
+                    return _strMsg;
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    conn.Close();
+                }
+            }
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3