From 614d32ed2d62ab55f3a3b78bb6769df931a85bcd Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期六, 28 十二月 2024 13:38:11 +0800
Subject: [PATCH] 其他出库和其他入库的后台

---
 entity/MesInvItemOutItems.cs                   |    6 
 service/Warehouse/MesItemBlManager.cs          |   15 
 service/Warehouse/MesItemQtManager.cs          |  922 ++++++++++++++++++++++++++++++++++
 entity/MesItemQtDatall.cs                      |  104 +++
 Controllers/Warehouse/MesItemQtController.cs   |  207 +++++++
 Controllers/Warehouse/MesItemQtrkController.cs |   54 -
 service/Warehouse/MesItemQtrkManager.cs        |   66 --
 entity/MesInvItemOutCDetails.cs                |   50 
 entity/MesItemQt.cs                            |  149 +++++
 9 files changed, 1,457 insertions(+), 116 deletions(-)

diff --git a/Controllers/Warehouse/MesItemQtController.cs b/Controllers/Warehouse/MesItemQtController.cs
new file mode 100644
index 0000000..a3ab253
--- /dev/null
+++ b/Controllers/Warehouse/MesItemQtController.cs
@@ -0,0 +1,207 @@
+锘縰sing System.Dynamic;
+using Microsoft.AspNetCore.Mvc;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.service.Warehouse;
+using NewPdaSqlServer.util;
+
+namespace NewPdaSqlServer.Controllers.Warehouse;
+
+/// <summary>
+/// 鍏朵粬鍑哄簱鐩稿叧鎺ュ彛
+/// </summary>
+[Route("api/[controller]")]
+[ApiController]
+public class MesItemQtController : ControllerBase
+{
+    private readonly MesItemQtManager _manager = new();
+
+    #region 鍩虹CRUD
+
+    /// <summary>
+    /// 鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns>鍏朵粬鍑哄簱鍗曞垪琛�</returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    #endregion
+
+    #region 鍏朵粬鍑哄簱涓氬姟
+
+    /// <summary>
+    /// 鑾峰彇鏈畬鎴愮殑閫�鏂欏崟鍙峰垪琛�
+    /// </summary>
+    /// <returns>閫�鏂欏崟鍙峰垪琛�</returns>
+    /// <remarks>
+    /// 鑾峰彇鐘舵�佷负宸插鏍�(Qt015=true)涓旀湭瀹岀粨(Qt014=false)鐨勯��鏂欏崟鍙峰垪琛�
+    /// </remarks>
+    /// <response code="200">鎴愬姛鑾峰彇閫�鏂欏崟鍙峰垪琛�</response>
+    /// <response code="400">鑾峰彇澶辫触</response>
+    [HttpPost("GetPendingQtList")]
+    public ResponseResult GetPendingQtList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetPendingQtList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鑾峰彇寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃</returns>
+    /// <remarks>
+    /// 璇锋眰绀轰緥:
+    /// 
+    ///     POST /api/MesItemQt/GetPendingQtList
+    ///     {
+    ///         "userName": "admin",      // 鐢ㄦ埛鍚�(蹇呭~)
+    ///         "billNo": "QT20240101001" // 閫�鏂欏崟鍙�(蹇呭~)
+    ///     }
+    /// 
+    /// 杩斿洖鏈畬鎴愮殑鏄庣粏璁板綍(Qd007-Qd008>0)
+    /// </remarks>
+    /// <response code="200">鎴愬姛鑾峰彇閫�鏂欏崟鏄庣粏</response>
+    /// <response code="400">鑾峰彇澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("GetPendingQtDetailList")]
+    public ResponseResult GetPendingQtDetailList([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetPendingQtList(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鎵弿鏉$爜鍑哄簱
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>鍑哄簱缁撴灉銆佸緟澶勭悊鏄庣粏鍜屾彁绀烘秷鎭�</returns>
+    /// <remarks>
+    /// 璇锋眰绀轰緥:
+    /// 
+    ///     POST /api/MesItemQt/OutScanBarcode
+    ///     {
+    ///         "billNo": "QT20240101001",  // 閫�鏂欏崟鍙�(蹇呭~)
+    ///         "barcode": "BC001",         // 鏉$爜鍙�(蹇呭~)
+    ///         "userName": "admin"         // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     }
+    /// 
+    /// 杩斿洖鏁版嵁鍖呭惈:
+    /// - form: 澶勭悊缁撴灉琛ㄥ崟
+    /// - item: 寰呭鐞嗘槑缁嗗垪琛�
+    /// - message: 澶勭悊缁撴灉娑堟伅
+    /// </remarks>
+    /// <response code="200">鎵弿鎴愬姛</response>
+    /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("OutScanBarcode")]
+    public ResponseResult OutScanBarcode([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var (form, items, message) = _manager.OutScanBarcode(query);
+            resultInfos.form = form;
+            resultInfos.items = items;
+            resultInfos.message = message;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鎵撳嵃鏉$爜鍑哄簱
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>鍑哄簱缁撴灉銆佸緟澶勭悊鏄庣粏鍜屾彁绀烘秷鎭�</returns>
+    /// <remarks>
+    /// 璇锋眰绀轰緥:
+    /// 
+    ///     POST /api/MesItemQt/PrintQtckBarcode
+    ///     {
+    ///         "userName": "admin",         // 鐢ㄦ埛鍚�(蹇呭~)
+    ///         "billNo": "QT20240101001",   // 閫�鏂欏崟鍙�(蹇呭~)
+    ///         "barcode": "BC001",          // 鏉$爜鍙�(蹇呭~)
+    ///         "Fum": 10                    // 鍙戞枡鏁伴噺(蹇呭~,蹇呴』澶т簬0)
+    ///     }
+    /// 
+    /// 杩斿洖鏁版嵁鍖呭惈:
+    /// - form: 澶勭悊缁撴灉琛ㄥ崟
+    /// - item: 寰呭鐞嗘槑缁嗗垪琛�
+    /// - message: 澶勭悊缁撴灉娑堟伅
+    /// </remarks>
+    /// <response code="200">鎵撳嵃鎴愬姛</response>
+    /// <response code="400">鎵撳嵃澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("PrintQtckBarcode")]
+    public ResponseResult PrintQtckBarcode([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var (form, items, message) = _manager.PrintQtckBarcode(query);
+            resultInfos.form = form;
+            resultInfos.items = items;
+            resultInfos.message = 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/Controllers/Warehouse/MesItemQtrkController.cs b/Controllers/Warehouse/MesItemQtrkController.cs
index d60c3bb..7c773f3 100644
--- a/Controllers/Warehouse/MesItemQtrkController.cs
+++ b/Controllers/Warehouse/MesItemQtrkController.cs
@@ -7,7 +7,7 @@
 namespace NewPdaSqlServer.Controllers.Warehouse;
 
 /// <summary>
-/// 鍏朵粬鍏ュ簱鐩稿叧鎺ュ彛
+///     鍏朵粬鍏ュ簱鐩稿叧鎺ュ彛
 /// </summary>
 [Route("api/[controller]")]
 [ApiController]
@@ -18,7 +18,7 @@
     #region 鍩虹CRUD
 
     /// <summary>
-    /// 鑾峰彇鎵�鏈�
+    ///     鑾峰彇鎵�鏈�
     /// </summary>
     /// <returns>鍏朵粬鍏ュ簱鍗曞垪琛�</returns>
     [HttpPost("GetList")]
@@ -42,7 +42,7 @@
     }
 
     /// <summary>
-    /// 鏍规嵁涓婚敭鑾峰彇
+    ///     鏍规嵁涓婚敭鑾峰彇
     /// </summary>
     /// <returns>鍏朵粬鍏ュ簱鍗曚俊鎭�</returns>
     [HttpPost("GetById")]
@@ -70,11 +70,11 @@
     #region 鍏朵粬鍏ュ簱涓氬姟
 
     /// <summary>
-    /// 鑾峰彇鍏朵粬鍏ュ簱鍗曞彿鍒楄〃
+    ///     鑾峰彇鍏朵粬鍏ュ簱鍗曞彿鍒楄〃
     /// </summary>
     /// <returns>鍏朵粬鍏ュ簱鍗曞彿鍒楄〃</returns>
     /// <remarks>
-    /// 鑾峰彇鐘舵�佷负宸插鏍�(Qt015=1)涓旀湭瀹岀粨(Qt014=0)鐨勫叾浠栧叆搴撳崟鍙峰垪琛�
+    ///     鑾峰彇鐘舵�佷负宸插鏍�(Qt015=1)涓旀湭瀹岀粨(Qt014=0)鐨勫叾浠栧叆搴撳崟鍙峰垪琛�
     /// </remarks>
     /// <response code="200">鎴愬姛鑾峰彇鍏ュ簱鍗曞彿鍒楄〃</response>
     /// <response code="400">鑾峰彇澶辫触</response>
@@ -99,19 +99,17 @@
     }
 
     /// <summary>
-    /// 鑾峰彇鍏朵粬鍏ュ簱鍗曟槑缁嗗垪琛�
+    ///     鑾峰彇鍏朵粬鍏ュ簱鍗曟槑缁嗗垪琛�
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟锛屽繀椤诲寘鍚玝illNo(鍏ュ簱鍗曞彿)</param>
     /// <returns>鍏ュ簱鍗曟槑缁嗗垪琛�</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesItemQtrk/GetQtckDetailList
     ///     {
-    ///         "billNo": "QT202401010001"
+    ///     "billNo": "QT202401010001"
     ///     }
-    /// 
-    /// 杩斿洖鏈畬鎴愬叆搴撶殑鏄庣粏璁板綍(Qd007-Qd008>0)
+    ///     杩斿洖鏈畬鎴愬叆搴撶殑鏄庣粏璁板綍(Qd007-Qd008>0)
     /// </remarks>
     /// <response code="200">鎴愬姛鑾峰彇鍏ュ簱鍗曟槑缁�</response>
     /// <response code="400">鑾峰彇澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
@@ -136,20 +134,18 @@
     }
 
     /// <summary>
-    /// 鎵弿搴撲綅
+    ///     鎵弿搴撲綅
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟</param>
     /// <returns>搴撲綅淇℃伅</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesItemQtrk/ScanInDepotsQT
     ///     {
-    ///         "sectionCode": "A01-01-01",
-    ///         "billNo": "QT202401010001"
+    ///     "sectionCode": "A01-01-01",
+    ///     "billNo": "QT202401010001"
     ///     }
-    /// 
-    /// 楠岃瘉搴撲綅鏄惁灞炰簬鐢宠鍗曟寚瀹氱殑浠撳簱
+    ///     楠岃瘉搴撲綅鏄惁灞炰簬鐢宠鍗曟寚瀹氱殑浠撳簱
     /// </remarks>
     /// <response code="200">鎵弿鎴愬姛</response>
     /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
@@ -174,25 +170,23 @@
     }
 
     /// <summary>
-    /// 鎵弿鏉$爜鍏ュ簱
+    ///     鎵弿鏉$爜鍏ュ簱
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟</param>
     /// <returns>鍏ュ簱缁撴灉鍜屽緟澶勭悊鏄庣粏</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesItemQtrk/ScanInBcodeQtrk
     ///     {
-    ///         "userName": "admin",
-    ///         "sectionCode": "A01-01-01",
-    ///         "barcode": "BC001",
-    ///         "billNo": "QT202401010001"
+    ///     "userName": "admin",
+    ///     "sectionCode": "A01-01-01",
+    ///     "barcode": "BC001",
+    ///     "billNo": "QT202401010001"
     ///     }
-    /// 
-    /// - 楠岃瘉鏉$爜鏄惁宸插叆搴�
-    /// - 楠岃瘉鏉$爜鏄惁涓哄叾浠栧叆搴撴潯鐮�
-    /// - 楠岃瘉鍏ュ簱鏁伴噺鏄惁瓒呰繃鐢宠鏁伴噺
-    /// - 鎵ц鍏ュ簱浜嬪姟澶勭悊
+    ///     - 楠岃瘉鏉$爜鏄惁宸插叆搴�
+    ///     - 楠岃瘉鏉$爜鏄惁涓哄叾浠栧叆搴撴潯鐮�
+    ///     - 楠岃瘉鍏ュ簱鏁伴噺鏄惁瓒呰繃鐢宠鏁伴噺
+    ///     - 鎵ц鍏ュ簱浜嬪姟澶勭悊
     /// </remarks>
     /// <response code="200">鎵弿鎴愬姛</response>
     /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
diff --git a/entity/MesInvItemOutCDetails.cs b/entity/MesInvItemOutCDetails.cs
index e3e4e4d..12c801d 100644
--- a/entity/MesInvItemOutCDetails.cs
+++ b/entity/MesInvItemOutCDetails.cs
@@ -24,25 +24,25 @@
     ///     鐗╂枡鏉$爜
     /// </summary>
     [SugarColumn(ColumnName = "ITEM_BARCODE")]
-    public string ItemBarcode { get; set; }
+    public string? ItemBarcode { get; set; }
 
     /// <summary>
     ///     瀹㈡埛鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
     /// </summary>
     [SugarColumn(ColumnName = "C_ITEM_CODE")]
-    public string CItemCode { get; set; }
+    public string? CItemCode { get; set; }
 
     /// <summary>
     ///     鏈徃鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
     /// </summary>
     [SugarColumn(ColumnName = "ITEM_NO")]
-    public string ItemNo { get; set; }
+    public string? ItemNo { get; set; }
 
     /// <summary>
     ///     鍘傚鎵规
     /// </summary>
     [SugarColumn(ColumnName = "LOT_NO")]
-    public string LotNo { get; set; }
+    public string? LotNo { get; set; }
 
     /// <summary>
     ///     鏁伴噺锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
@@ -61,7 +61,7 @@
     ///     鍒涘缓浜�
     /// </summary>
     [SugarColumn(ColumnName = "CREATE_BY")]
-    public string CreateBy { get; set; }
+    public string? CreateBy { get; set; }
 
     /// <summary>
     ///     鍒涘缓鏃堕棿
@@ -73,7 +73,7 @@
     ///     鏈�鍚庢洿鏂颁汉
     /// </summary>
     [SugarColumn(ColumnName = "LASTUPDATE_BY")]
-    public string LastupdateBy { get; set; }
+    public string? LastupdateBy { get; set; }
 
     /// <summary>
     ///     鏈�鍚庢洿鏂版椂闂�
@@ -85,25 +85,25 @@
     ///     瀹㈡埛缂栫爜
     /// </summary>
     [SugarColumn(ColumnName = "CUST_NO")]
-    public string CustNo { get; set; }
+    public string? CustNo { get; set; }
 
     /// <summary>
     ///     浠撳簱缂栫爜
     /// </summary>
     [SugarColumn(ColumnName = "DEPOT_CODE")]
-    public string DepotCode { get; set; }
+    public string? DepotCode { get; set; }
 
     /// <summary>
     ///     璐т綅缂栫爜
     /// </summary>
     [SugarColumn(ColumnName = "DEPOT_SECTION_CODE")]
-    public string DepotSectionCode { get; set; }
+    public string? DepotSectionCode { get; set; }
 
     /// <summary>
     ///     澶囨敞
     /// </summary>
     [SugarColumn(ColumnName = "REMARK")]
-    public string Remark { get; set; }
+    public string? Remark { get; set; }
 
     /// <summary>
     ///     鍏嶆鏍囪瘑(0-鍚︼紝1-鏄�)
@@ -115,7 +115,7 @@
     ///     鎶曟枡鎵规
     /// </summary>
     [SugarColumn(ColumnName = "PRD_LOT_NO")]
-    public string PrdLotNo { get; set; }
+    public string? PrdLotNo { get; set; }
 
     /// <summary>
     ///     鏄惁鍋氭帴鏀舵鏌�
@@ -128,55 +128,55 @@
     ///     宸ュ巶缂栧彿
     /// </summary>
     [SugarColumn(ColumnName = "FACTORY")]
-    public string Factory { get; set; }
+    public string? Factory { get; set; }
 
     /// <summary>
     ///     鍏徃缂栧彿
     /// </summary>
     [SugarColumn(ColumnName = "COMPANY")]
-    public string Company { get; set; }
+    public string? Company { get; set; }
 
     /// <summary>
     ///     鍘熺敓浜у伐鍗�
     /// </summary>
     [SugarColumn(ColumnName = "TASK_NOY")]
-    public string TaskNoy { get; set; }
+    public string? TaskNoy { get; set; }
 
     /// <summary>
     ///     绠卞彿
     /// </summary>
     [SugarColumn(ColumnName = "BOX_NO")]
-    public string BoxNo { get; set; }
+    public string? BoxNo { get; set; }
 
     /// <summary>
     ///     鍖呰鎵规
     /// </summary>
     [SugarColumn(ColumnName = "TASK_PACK")]
-    public string TaskPack { get; set; }
+    public string? TaskPack { get; set; }
 
     /// <summary>
     ///     鍗℃澘
     /// </summary>
     [SugarColumn(ColumnName = "KB_NO")]
-    public string KbNo { get; set; }
+    public string? KbNo { get; set; }
 
     /// <summary>
     ///     鏉垮瀷
     /// </summary>
     [SugarColumn(ColumnName = "BOARD_STYLE")]
-    public string BoardStyle { get; set; }
+    public string? BoardStyle { get; set; }
 
     /// <summary>
     ///     鐢熶骇宸ュ崟
     /// </summary>
     [SugarColumn(ColumnName = "TASK_NO")]
-    public string TaskNo { get; set; }
+    public string? TaskNo { get; set; }
 
     /// <summary>
     ///     宸ュ崟鍙�
     /// </summary>
     [SugarColumn(ColumnName = "WORK_NO")]
-    public string WorkNo { get; set; }
+    public string? WorkNo { get; set; }
 
     /// <summary>
     ///     宸ヤ綔绾�
@@ -188,13 +188,13 @@
     ///     渚涘簲鍟嗙紪鍙�
     /// </summary>
     [SugarColumn(ColumnName = "SUPP_NO")]
-    public string SuppNo { get; set; }
+    public string? SuppNo { get; set; }
 
     /// <summary>
     ///     閲囪喘鍗曞彿
     /// </summary>
     [SugarColumn(ColumnName = "PBILL_NO")]
-    public string PbillNo { get; set; }
+    public string? PbillNo { get; set; }
 
     /// <summary>
     ///     鏀跺埌鏁伴噺
@@ -213,19 +213,19 @@
     ///     鏀惰揣浜�
     /// </summary>
     [SugarColumn(ColumnName = "RCV_BY")]
-    public string RcvBy { get; set; }
+    public string? RcvBy { get; set; }
 
     /// <summary>
     ///     鏀惰揣閮ㄥ垎
     /// </summary>
     [SugarColumn(ColumnName = "RCV_PART")]
-    public string RcvPart { get; set; }
+    public string? RcvPart { get; set; }
 
     /// <summary>
     ///     鍏ュ簱缂栧彿
     /// </summary>
     [SugarColumn(ColumnName = "RK_NO")]
-    public string RkNo { get; set; }
+    public string? RkNo { get; set; }
 
     /// <summary>
     ///     閲囪喘璁㈠崟ID
diff --git a/entity/MesInvItemOutItems.cs b/entity/MesInvItemOutItems.cs
index 0756b27..db2bd0a 100644
--- a/entity/MesInvItemOutItems.cs
+++ b/entity/MesInvItemOutItems.cs
@@ -229,6 +229,12 @@
     [SugarColumn(ColumnName = "about_Guid")]
     public Guid? AboutGuid { get; set; }
 
+    /// <summary>
+    ///     鍑哄簱鏄庣粏ID
+    /// </summary>
+    [SugarColumn(ColumnName = "qt_out_id")]
+    public Guid? QtOutId { get; set; }
+
     [SugarColumn(IsIgnore = true)] public string? ItemName { get; set; }
 
     [SugarColumn(IsIgnore = true)] public string? ItemModel { get; set; }
diff --git a/entity/MesItemQt.cs b/entity/MesItemQt.cs
new file mode 100644
index 0000000..2548f32
--- /dev/null
+++ b/entity/MesItemQt.cs
@@ -0,0 +1,149 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+/// </summary>
+[SugarTable("MES_ITEM_QT")]
+public class MesItemQt
+{
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+    /// <summary>
+    ///     鐢宠鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qtck")]
+    public string? Qtck { get; set; }
+
+    /// <summary>
+    ///     鐢宠鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "qt001")]
+    public DateTime? Qt001 { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "qt002")]
+    public DateTime? Qt002 { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱绫诲埆
+    /// </summary>
+    [SugarColumn(ColumnName = "qt003")]
+    public string? Qt003 { get; set; }
+
+    /// <summary>
+    ///     涓氬姟绫诲瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "qt004")]
+    public string? Qt004 { get; set; }
+
+    /// <summary>
+    ///     鍒跺崟浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "qt005")]
+    public string? Qt005 { get; set; }
+
+    /// <summary>
+    ///     鐢熶骇宸ュ崟
+    /// </summary>
+    [SugarColumn(ColumnName = "qt006")]
+    public string? Qt006 { get; set; }
+
+    /// <summary>
+    ///     鍙戞枡浠撳簱id
+    /// </summary>
+    [SugarColumn(ColumnName = "qt008")]
+    public string? Qt008 { get; set; }
+
+    /// <summary>
+    ///     鐢宠閮ㄩ棬id
+    /// </summary>
+    [SugarColumn(ColumnName = "qt009")]
+    public string? Qt009 { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱鍘熷洜
+    /// </summary>
+    [SugarColumn(ColumnName = "qt010")]
+    public string? Qt010 { get; set; }
+
+    /// <summary>
+    ///     浠撳簱缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "qt011")]
+    public string? Qt011 { get; set; }
+
+    /// <summary>
+    ///     閮ㄩ棬缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "qt012")]
+    public string? Qt012 { get; set; }
+
+    /// <summary>
+    ///     鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "qt013")]
+    public int? Qt013 { get; set; }
+
+    /// <summary>
+    ///     瀹岀粨鏍囪瘑
+    ///     榛樿鍊�: ((0))
+    /// </summary>
+    [SugarColumn(ColumnName = "qt014")]
+    public bool? Qt014 { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳鐘舵��
+    ///     榛樿鍊�: ((0))
+    /// </summary>
+    [SugarColumn(ColumnName = "qt015")]
+    public bool? Qt015 { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "qt016")]
+    public string? Qt016 { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qt017")]
+    public string? Qt017 { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛
+    /// </summary>
+    [SugarColumn(ColumnName = "qt018")]
+    public string? Qt018 { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱绫诲瀷 1鐩樹簭 2鍖呮潗棰嗙敤 3鐮斿彂棰嗙敤 4鍔炲叕鐢ㄥ搧棰嗙敤 5妯″叿鏉愭枡棰嗙敤 6浣庡�兼槗鑰楀搧棰嗙敤 7鐢熶骇閰嶄欢 8閲囪喘閫�鏂� 9娉ㄥ浠朵笉鑹��鏂�
+    /// </summary>
+    [SugarColumn(ColumnName = "qt019")]
+    public string? Qt019 { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱鏂瑰悜锛堟櫘閫氾紝閫�璐э級
+    /// </summary>
+    [SugarColumn(ColumnName = "qt020")]
+    public string? Qt020 { get; set; }
+
+    /// <summary>
+    ///     閿�鍞鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qt021")]
+    public string? Qt021 { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "qt022")]
+    public string? Qt022 { get; set; }
+}
\ No newline at end of file
diff --git a/entity/MesItemQtDatall.cs b/entity/MesItemQtDatall.cs
new file mode 100644
index 0000000..f69e23d
--- /dev/null
+++ b/entity/MesItemQtDatall.cs
@@ -0,0 +1,104 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+/// </summary>
+[SugarTable("MES_ITEM_QT_DATALL")]
+public class MesItemQtDatall
+{
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+    /// <summary>
+    ///     涓昏〃guid
+    /// </summary>
+    [SugarColumn(ColumnName = "qtGuid")]
+    public Guid? QtGuid { get; set; }
+
+    /// <summary>
+    ///     宸ュ崟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "qd001")]
+    public string? Qd001 { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qd002")]
+    public string? Qd002 { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "qd003")]
+    public string? Qd003 { get; set; }
+
+    /// <summary>
+    ///     瑙勬牸鍨嬪彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qd004")]
+    public string? Qd004 { get; set; }
+
+    /// <summary>
+    ///     棰滆壊
+    /// </summary>
+    [SugarColumn(ColumnName = "qd005")]
+    public string? Qd005 { get; set; }
+
+    /// <summary>
+    ///     璁″垝鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "qd006")]
+    public int? Qd006 { get; set; }
+
+    /// <summary>
+    ///     鐢宠鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "qd007")]
+    public int? Qd007 { get; set; }
+
+    /// <summary>
+    ///     宸查鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "qd008")]
+    public int? Qd008 { get; set; }
+
+    /// <summary>
+    ///     鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "qd009")]
+    public string? Qd009 { get; set; }
+
+    /// <summary>
+    ///     澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "qd010")]
+    public string? Qd010 { get; set; }
+
+    /// <summary>
+    ///     瀹岀粨鏍囪瘑
+    /// </summary>
+    [SugarColumn(ColumnName = "qd011")]
+    public int? Qd011 { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "itemId")]
+    public string? ItemId { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栫爜 = ERP鐗╂枡缂栧彿||棰滆壊缂栧彿
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? ItemNo { get; set; }
+
+    /// <summary>
+    ///     浠撳簱缂栫爜
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? Qt011 { get; set; }
+}
\ No newline at end of file
diff --git a/service/Warehouse/MesItemBlManager.cs b/service/Warehouse/MesItemBlManager.cs
index 2d70ca7..7181715 100644
--- a/service/Warehouse/MesItemBlManager.cs
+++ b/service/Warehouse/MesItemBlManager.cs
@@ -1692,18 +1692,21 @@
 
 
         // 鑾峰彇鏈�缁堢殑寰呭鐞嗗垪琛�
+        // 鑾峰彇琛ユ枡鍗曟槑缁嗕腑鏈畬鎴愮殑璁板綍
+        // 閫氳繃宸﹁繛鎺ユ煡璇㈣ˉ鏂欏崟(MesItemBl)鍜岃ˉ鏂欏崟鏄庣粏(MesItemBlDetail)琛�
+        // 鏉′欢: 1.琛ユ枡鍗曞彿鍖归厤 2.璁″垝鏁伴噺(Bld007)鍑忓幓宸茶ˉ鏁伴噺(Bld008)澶т簬0(鍗虫湭瀹屾垚鐨�)
         var pendingList = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
                 new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
             .Where((a, b) => a.BlNo == query.blNo
                              && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
             .Select((a, b) => new MesItemBlDetail
             {
-                Bld012 = b.Bld012,
-                Bld002 = b.Bld002,
-                Bld003 = b.Bld003,
-                Bld004 = b.Bld004,
-                Bld007 = b.Bld007,
-                Bld008 = b.Bld008
+                Bld012 = b.Bld012, // 鐗╂枡ID
+                Bld002 = b.Bld002, // 鐗╂枡缂栧彿
+                Bld003 = b.Bld003, // 鐗╂枡鍚嶇О
+                Bld004 = b.Bld004, // 鐗╂枡瑙勬牸
+                Bld007 = b.Bld007, // 璁″垝鏁伴噺
+                Bld008 = b.Bld008 // 宸茶ˉ鏁伴噺
             })
             .ToList();
 
diff --git a/service/Warehouse/MesItemQtManager.cs b/service/Warehouse/MesItemQtManager.cs
new file mode 100644
index 0000000..01ce4e1
--- /dev/null
+++ b/service/Warehouse/MesItemQtManager.cs
@@ -0,0 +1,922 @@
+锘縰sing NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using SqlSugar;
+
+namespace NewPdaSqlServer.service.Warehouse;
+
+public class MesItemQtManager : Repository<MesItemQt>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+    /// <summary>
+    ///     鑾峰彇鏈畬鎴愮殑閫�鏂欏崟鍙峰垪琛�
+    /// </summary>
+    /// <returns>閫�鏂欏崟鍙峰垪琛�</returns>
+    public List<string> GetPendingQtList()
+    {
+        return Db.Queryable<MesItemQt>()
+            .Where(it =>
+                (it.Qt015 ?? false) == true && (it.Qt014 ?? false) == false)
+            .OrderByDescending(it => it.Qtck)
+            .Select(it => it.Qtck)
+            .ToList();
+    }
+
+    /// <summary>
+    /// 鑾峰彇寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃
+    /// </summary>
+    /// <param name="query">浠撳簱鏌ヨ鍙傛暟锛屽寘鍚敤鎴峰悕鍜屽崟鎹彿</param>
+    /// <returns>寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃</returns>
+    public List<MesItemQtDatall> GetPendingQtList(WarehouseQuery query)
+    {
+        // 浠庢煡璇㈠弬鏁颁腑鑾峰彇鐢ㄦ埛鍚嶅拰鍗曟嵁鍙�
+        var c_User = query.userName;
+        var p_bill_no = query.billNo;
+
+        // 鏍规嵁鍗曟嵁鍙锋煡璇㈤��鏂欏崟涓昏〃淇℃伅
+        var mesItemQt = Db.Queryable<MesItemQt>()
+            .Where(it => it.Qtck == p_bill_no)
+            .First();
+
+        // 濡傛灉鏈壘鍒伴��鏂欏崟锛屾姏鍑哄紓甯�
+        if (mesItemQt == null)
+        {
+            throw new Exception($"鏈煡璇㈠埌姝ゅ叾浠栧叆搴撶敵璇峰崟 {p_bill_no}");
+        }
+
+        // 妫�鏌ラ��鏂欏崟鐨勫鏍哥姸鎬�(Qt015)锛屾湭瀹℃牳鍒欐姏鍑哄紓甯�
+        if (mesItemQt.Qt015 == false)
+        {
+            throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 鏈鏍革紝璇风‘璁わ紒");
+        }
+
+        // 妫�鏌ラ��鏂欏崟鐨勫畬缁撶姸鎬�(Qt014)锛屽凡瀹岀粨鍒欐姏鍑哄紓甯�
+        if (mesItemQt.Qt014 == true)
+        {
+            throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒");
+        }
+
+        // 鑱旇〃鏌ヨ鑾峰彇鏈畬鎴愮殑鏄庣粏鍒楄〃
+        // 鍏宠仈琛細
+        // - MesItemQt: 閫�鏂欏崟涓昏〃(a)
+        // - MesItemQtDatall: 閫�鏂欏崟鏄庣粏琛�(b)
+        // - MesItems: 鐗╂枡鍩虹淇℃伅琛�(c)
+        var pendingList = Db.Queryable<MesItemQt, MesItemQtDatall, MesItems>(
+                (a, b, c) =>
+                    new JoinQueryInfos(
+                        JoinType.Left, a.Guid == b.QtGuid, // 涓昏〃鍜屾槑缁嗚〃閫氳繃Guid鍏宠仈
+                        JoinType.Left,
+                        b.ItemId == c.Id.ToString())) // 鏄庣粏琛ㄥ拰鐗╂枡琛ㄩ�氳繃ItemId鍏宠仈
+            .Where((a, b, c) =>
+                a.Qtck == p_bill_no && // 鍖归厤鍗曟嵁鍙�
+                (b.Qd007 ?? 0) - (b.Qd008 ?? 0) >
+                0) // 璁″垝鏁伴噺鍑忓幓宸插畬鎴愭暟閲忓ぇ浜�0鐨勮褰�(鍗虫湭瀹屾垚鐨勮褰�)
+            .OrderBy((a, b, c) => c.ItemNo) // 鎸夌墿鏂欑紪鍙锋帓搴�
+            .Select((a, b, c) => new MesItemQtDatall
+            {
+                Qd002 = b.Qd002, // 鏄庣粏琛屽彿
+                Qt011 = a.Qt011, // 閫�鏂欏師鍥�
+                ItemNo = c.ItemNo, // 鐗╂枡缂栧彿
+                Qd007 = b.Qd007 ?? 0, // 璁″垝鏁伴噺
+                Qd008 = b.Qd008 ?? 0 // 宸插畬鎴愭暟閲�
+            })
+            .ToList();
+
+        return pendingList;
+    }
+
+    public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
+        OutScanBarcode(
+            WarehouseQuery query)
+    {
+        var p_bill_no = query.billNo;
+        var p_item_barcode = query.barcode;
+        var c_user = query.userName;
+        var p_bill_type_id = 200;
+        var p_transaction_no = 202;
+
+        // 妫�鏌ュ崟鎹彿鏄惁涓虹┖
+        if (string.IsNullOrEmpty(p_bill_no))
+        {
+            throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+        }
+
+        // 妫�鏌ユ槸鍚﹂噸澶嶆壂鎻�
+        var existingBarcode = Db.Queryable<MesInvItemOutCDetails>()
+            .Where(it =>
+                it.ItemBarcode == p_item_barcode && it.PbillNo == p_bill_no)
+            .Any();
+
+        if (existingBarcode)
+        {
+            throw new Exception("姝ゆ潯鐮佸凡缁忔壂鐮佸嚭搴�,鍕块噸澶嶆壂鎻忥紒");
+        }
+
+        // 鑾峰彇鏉$爜淇℃伅
+        var barcode = Db.Queryable<MesInvItemBarcodes>()
+            .Where(it => it.ItemBarcode == p_item_barcode)
+            .First();
+
+        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)
+            .First();
+
+        if (stock == null)
+        {
+            throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋鏌ユ潯鐮佹槸鍚︽湭鍏ュ簱鎴栧凡鍑哄簱锛亄p_item_barcode}");
+        }
+
+
+        if (string.IsNullOrEmpty(stock.DepotsCode))
+        {
+            throw new Exception($"璋冩嫧涓殑鏉$爜涓嶅彲鍙戞枡,璇峰厛瀹屾垚璋冩嫧鍗曟嵁{p_item_barcode}");
+        }
+
+        if (stock.DepotsCode is "S006" or "S005")
+        {
+            throw new Exception($"鏉$爜鍦ㄤ笉鑹搧浠撲笅 涓嶅彲鍙戞枡{p_item_barcode}");
+        }
+
+        // 妫�鏌ユ槸鍚﹀湪瀵勫瓨浠撲綅
+        // var isDepotSection = Db.Queryable<MesJcDepot>()
+        //     .Where(it => it.DepotSectionsCode == stock.DepotSectionsCode)
+        //     .Any();
+        //
+        // if (isDepotSection)
+        // {
+        //     throw new Exception($"鍦ㄥ瘎瀛樹粨浣嶄笅鐨勬潯鐮佷笉鍙洿鎺ユ壂鐮佸彂鏂檣p_item_barcode}");
+        // }
+
+        // 鑾峰彇鍏朵粬鍑哄簱鍗曚俊鎭�
+        var mesItemQt = Db.Queryable<MesItemQt>()
+            .Where(it => it.Qtck == p_bill_no)
+            .First();
+
+        if (mesItemQt == null)
+        {
+            throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 涓嶅瓨鍦紝璇风‘璁わ紒");
+        }
+
+        // 妫�鏌ヤ粨搴撴槸鍚︿竴鑷�
+        if (mesItemQt.Qt011 != stock.DepotsCode)
+        {
+            throw new Exception(
+                $"鎵爜鍑鸿揣浠撳簱{stock.DepotsCode}涓庡叾浠栧嚭搴撶敵璇蜂粨搴搟mesItemQt.Qt011}涓嶄竴鑷达紝璇锋牳瀵癸紒");
+        }
+
+        // 鑾峰彇鍑哄簱鍗曟槑缁�
+        var qtDetail = Db.Queryable<MesItemQtDatall>()
+            .Where(it =>
+                it.QtGuid == mesItemQt.Guid &&
+                it.ItemId == stock.ItemId.ToString())
+            .First();
+
+        if (qtDetail == null)
+        {
+            throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒");
+        }
+
+        // 妫�鏌ュ墿浣欐暟閲�
+        var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0);
+        if (remainingQty <= 0)
+        {
+            throw new Exception($"鐢宠鐗╂枡 {barcode.ItemNo} 宸插嚭搴撳畬鎴愶紒");
+        }
+
+        // 妫�鏌ユ暟閲忔槸鍚﹁秴鍑�
+        if (stock.Quantity > remainingQty)
+        {
+            var pendingList = Db
+                .Queryable<MesItemQt, MesItemQtDatall, MesItems>(
+                    (a, b, c) => new JoinQueryInfos(
+                        JoinType.Left, a.Guid == b.QtGuid,
+                        JoinType.Left, b.ItemId == c.Id.ToString()))
+                .Where((a, b, c) => a.Qtck == p_bill_no &&
+                                    (b.Qd007 ?? 0) - (b.Qd008 ?? 0) > 0)
+                .OrderBy((a, b, c) => c.ItemNo)
+                .Select((a, b, c) => new MesItemQtDatall
+                {
+                    Qd002 = b.Qd002, // 鏄庣粏琛屽彿
+                    Qt011 = a.Qt011, // 閫�鏂欏師鍥�
+                    ItemNo = c.ItemNo, // 鐗╂枡缂栧彿
+                    Qd007 = b.Qd007 ?? 0, // 璁″垝鏁伴噺
+                    Qd008 = b.Qd008 ?? 0 // 宸插畬鎴愭暟閲�
+                })
+                .ToList();
+
+            var message =
+                $"璇风‘璁ゅ彂鏂欐暟閲忥紒锛佸凡甯﹀嚭婊¤冻鍏朵粬鍑哄簱鍗曠殑鍙戞枡鏁伴噺 {remainingQty} 纭鍚庤鐐瑰嚮鏉$爜鎷嗗垎";
+
+            query.itemNo = stock.ItemNo;
+            query.Num = stock.Quantity;
+            query.Fum = remainingQty;
+
+            return (query, pendingList, message);
+        }
+
+        var mesItemQtDatalls = new List<MesItemQtDatall>();
+        var mess = "";
+        UseTransaction(db =>
+        {
+            var commit = 0;
+
+            // 鏌ユ壘褰撳ぉ鏄惁宸插瓨鍦ㄥ嚭搴撳崟
+            var existingOut = Db.Queryable<MesInvItemOuts>()
+                .Where(it => it.PbillNo == p_bill_no
+                             // && it.DepotCode == stock.DepotsCode
+                             && it.DepotId == stock.DepotId
+                             && it.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
+                             DateTime.Now.Date.ToString("yyyy-MM-dd")
+                             && it.BillTypeId == p_bill_type_id
+                             && it.TransactionNo == p_transaction_no
+                             && it.Status == 0)
+                .First();
+
+            Guid outId;
+            string outNo;
+
+            if (existingOut == null)
+            {
+                // 鍒涘缓鏂扮殑鍑哄簱鍗�
+                outId = Guid.NewGuid();
+                outNo = BillNo.GetBillNo("INV_OUT_OTHER");
+
+                var mesItemQt = Db.Queryable<MesItemQt>()
+                    .Where(it => it.Qtck == p_bill_no)
+                    .First();
+
+                var newOut = new MesInvItemOuts
+                {
+                    Guid = outId,
+                    ItemOutNo = outNo,
+                    TaskNo = p_bill_no,
+                    Status = 0,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    BillTypeId = p_bill_type_id,
+                    TransactionNo = p_transaction_no,
+                    DepotCode = stock.DepotsCode,
+                    DepotId = stock.DepotsId.HasValue
+                        ? (int)stock.DepotsId
+                        : null,
+                    OutPart = mesItemQt.Qt012,
+                    FType = 0,
+                    WorkNo = p_bill_no,
+                    OutType = "鍏朵粬鍑哄簱",
+                    PbillNo = p_bill_no,
+                    OutDate = DateTime.Now,
+                    Nflag = 0,
+                    Reason = mesItemQt.Qt010,
+                    Remark = mesItemQt.Qt010
+                };
+
+                commit += db.Insertable(newOut).IgnoreColumns(true)
+                    .ExecuteCommand();
+            }
+            else
+            {
+                outId = existingOut.Guid;
+                outNo = existingOut.ItemOutNo;
+            }
+
+            // 鑾峰彇閫�鏂欏崟鏄庣粏淇℃伅
+            qtDetail = Db.Queryable<MesItemQtDatall>()
+                .Where(it =>
+                    it.QtGuid == mesItemQt.Guid &&
+                    it.ItemId == stock.ItemId.ToString())
+                .First();
+
+            if (qtDetail == null)
+            {
+                throw new Exception($"鏈壘鍒板搴旂殑閫�鏂欏崟鏄庣粏淇℃伅");
+            }
+
+            // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍑哄簱鐗╂枡璁板綍
+            var existingOutItem = Db.Queryable<MesInvItemOutItems>()
+                .Where(it =>
+                    it.ItemOutId == outId && it.ItemId == barcode.ItemId)
+                .First();
+
+            if (existingOutItem == null)
+            {
+                // 鍒涘缓鏂扮殑鍑哄簱鐗╂枡璁板綍
+                var newOutItem = new MesInvItemOutItems
+                {
+                    Guid = Guid.NewGuid(),
+                    ItemOutId = outId,
+                    ItemNo = qtDetail.Qd002,
+                    Quantity = stock.Quantity,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    DepotCode = stock.DepotsCode,
+                    TaskNo = p_bill_no,
+                    WorkNo = p_bill_no,
+                    QtOutId = qtDetail.Guid,
+                    // WorkLine = qtDetail.Id,
+                    // ErpItemNo = qtDetail.Qd012,
+                    PbillNo = p_bill_no,
+                    ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
+                        ? long.Parse(qtDetail.ItemId)
+                        : null,
+                    FType = 0,
+                    // Unit = qtDetail.Qd009
+                };
+
+                commit += db.Insertable(newOutItem).IgnoreColumns(true)
+                    .ExecuteCommand();
+            }
+            else
+            {
+                // 鏇存柊宸插瓨鍦ㄧ殑鍑哄簱鐗╂枡璁板綍鏁伴噺
+                commit += db.Updateable<MesInvItemOutItems>()
+                    .SetColumns(it =>
+                        it.Quantity == (it.Quantity ?? 0) + stock.Quantity)
+                    .Where(it => it.ItemOutId == outId &&
+                                 it.ItemId == barcode.ItemId &&
+                                 it.QtOutId == qtDetail.Guid)
+                    .ExecuteCommand();
+            }
+
+            // 鍒涘缓鍑哄簱鏉$爜鏄庣粏璁板綍
+            var outCDetail = new MesInvItemOutCDetails
+            {
+                ItemOutId = outId,
+                ItemBarcode = stock.ItemBarcode,
+                ItemNo = stock.ItemNo,
+                LotNo = stock.LotNo,
+                Quantity = stock.Quantity,
+                ForceOutFlag = 0,
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                DepotCode = stock.DepotsCode,
+                DepotId = stock.DepotsId.HasValue
+                    ? (int)stock.DepotsId
+                    : null,
+                // DepotsCode = stock.DepotsCode,
+                // DepotSectionsCode = stock.DepotSectionsCode,
+                DepotSectionCode = stock.DepotSectionsCode,
+                BoardStyle = stock.BoardStyle,
+                TaskNo = p_bill_no,
+                WorkNo = p_bill_no,
+                // WorkLine = qtDetail.Id,
+                SuppNo = stock.SuppNo,
+                PbillNo = p_bill_no,
+                ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
+                    ? long.Parse(qtDetail.ItemId)
+                    : null
+            };
+
+            commit += db.Insertable(outCDetail).IgnoreColumns(true)
+                .ExecuteCommand();
+
+
+            // 鎻掑叆涓氬姟娴佹按璁板綍
+            var business = new MesInvBusiness2
+            {
+                Status = 1,
+                BillTypeId = p_bill_type_id,
+                TransactionCode = p_transaction_no.ToString(),
+                BusinessType = 1,
+                ItemBarcode = stock.ItemBarcode,
+                ItemNo = stock.ItemNo,
+                LotNo = stock.LotNo,
+                EpFlag = true,
+                Quantity = stock.Quantity,
+                FromInvDepotsCode = stock.DepotsCode,
+                FromInvDepotSectionsCode = stock.DepotSectionsCode,
+                Description = "鍏朵粬鍑哄簱",
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                TaskNo = p_bill_no,
+                BillNo = outNo,
+                WorkNo = p_bill_no,
+                // WorkLine = qtDetail.Id,
+                SuppId = stock.SuppId,
+                SuppNo = stock.SuppNo,
+                ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
+                    ? long.Parse(qtDetail.ItemId)
+                    : null
+            };
+
+            commit += db.Insertable(business).IgnoreColumns(true)
+                .ExecuteCommand();
+
+            // 鍒犻櫎搴撳瓨璁板綍
+            commit += db.Deleteable<MesInvItemStocks>()
+                .Where(it => it.ItemBarcode == stock.ItemBarcode)
+                .ExecuteCommand();
+
+            // 鏇存柊閫�鏂欏崟鏄庣粏宸插畬鎴愭暟閲�
+            commit += db.Updateable<MesItemQtDatall>()
+                .SetColumns(it => it.Qd008 == (it.Qd008 ?? 0) + stock.Quantity)
+                .Where(it => it.Guid == qtDetail.Guid)
+                .ExecuteCommand();
+
+            // 妫�鏌ユ槑缁嗘槸鍚﹀畬鎴�,濡傛灉瀹屾垚鍒欐洿鏂扮姸鎬�
+            if ((qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0) == stock.Quantity)
+            {
+                commit += db.Updateable<MesItemQtDatall>()
+                    .SetColumns(it => it.Qd011 == 1)
+                    .Where(it => it.Guid == qtDetail.Guid)
+                    .ExecuteCommand();
+            }
+
+            mesItemQtDatalls = Db
+                .Queryable<MesItemQt, MesItemQtDatall, MesItems>(
+                    (a, b, c) => new JoinQueryInfos(
+                        JoinType.Left, a.Guid == b.QtGuid,
+                        JoinType.Left, b.ItemId == c.Id.ToString()))
+                .Where((a, b, c) => a.Qtck == p_bill_no &&
+                                    (b.Qd007 ?? 0) - (b.Qd008 ?? 0) > 0)
+                .OrderBy((a, b, c) => c.ItemNo)
+                .Select((a, b, c) => new MesItemQtDatall
+                {
+                    Qd002 = b.Qd002, // 鏄庣粏琛屽彿
+                    Qt011 = a.Qt011, // 閫�鏂欏師鍥�
+                    ItemNo = c.ItemNo, // 鐗╂枡缂栧彿
+                    Qd007 = b.Qd007 ?? 0, // 璁″垝鏁伴噺
+                    Qd008 = b.Qd008 ?? 0 // 宸插畬鎴愭暟閲�
+                })
+                .ToList();
+
+            // 濡傛灉娌℃湁寰呭鐞嗘槑缁嗭紝鏇存柊閫�鏂欏崟鐘舵�佷负宸插畬鎴�
+            if (CollectionUtil.IsNullOrEmpty(mesItemQtDatalls))
+            {
+                db.Updateable<MesItemQt>()
+                    .SetColumns(it => it.Qt014 == true)
+                    .Where(it => it.Qtck == p_bill_no)
+                    .ExecuteCommand();
+            }
+
+            // 鏋勫缓杩斿洖娑堟伅
+            mess = $"鎵爜鎴愬姛锛佹潯鐮� {p_item_barcode} 鏁伴噺 {stock.Quantity} 宸插嚭搴�";
+
+            query.barcode = null;
+            query.itemNo = stock.ItemNo;
+            query.Num = stock.Quantity;
+            query.Fum = null;
+
+            if (commit < 5)
+            {
+                throw new Exception("鏇存柊澶辫触");
+            }
+
+            return commit;
+        });
+
+        return (query, mesItemQtDatalls, mess);
+    }
+
+    public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
+        PrintQtckBarcode(
+            WarehouseQuery query)
+    {
+        var p_bill_no = query.billNo;
+        var p_old_barcode = query.barcode;
+        var c_user = query.userName;
+        var p_qty = query.Fum;
+        var p_bill_type_id = 200;
+        var p_transaction_no = 202;
+
+        // 妫�鏌ュ崟鎹彿鏄惁涓虹┖
+        if (string.IsNullOrEmpty(p_bill_no))
+        {
+            throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+        }
+
+        // 妫�鏌ユ暟閲忔槸鍚︽湁鏁�
+        if (p_qty <= 0)
+        {
+            throw new Exception("璇疯緭鍏ユ纭殑鍙戞枡鏁伴噺锛�");
+        }
+
+        // 鑾峰彇搴撳瓨鏉$爜淇℃伅
+        var stock = Db.Queryable<MesInvItemStocks>()
+            .Where(it => it.ItemBarcode == p_old_barcode && it.Quantity > 0)
+            .First();
+
+        if (stock == null)
+        {
+            throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋鏌ユ潯鐮佹槸鍚︽湭鍏ュ簱鎴栧凡鍑哄簱锛亄p_old_barcode}");
+        }
+
+        if (string.IsNullOrEmpty(stock.DepotsCode))
+        {
+            throw new Exception($"璋冩嫧涓殑鏉$爜涓嶅彲鍙戞枡,璇峰厛瀹屾垚璋冩嫧鍗曟嵁{p_old_barcode}");
+        }
+
+        if (stock.DepotsCode is "S006" or "S005")
+        {
+            throw new Exception($"鏉$爜鍦ㄤ笉鑹搧浠撲笅 涓嶅彲鍙戞枡{p_old_barcode}");
+        }
+
+        // 鑾峰彇鏉$爜淇℃伅
+        var barcode = Db.Queryable<MesInvItemBarcodes>()
+            .Where(it => it.ItemBarcode == p_old_barcode)
+            .First();
+
+        if (barcode == null)
+        {
+            throw new Exception($"mes涓笉瀛樺湪姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_old_barcode}");
+        }
+
+        // 鑾峰彇閫�鏂欏崟淇℃伅
+        var mesItemQt = Db.Queryable<MesItemQt>()
+            .Where(it => it.Qtck == p_bill_no)
+            .First();
+
+        if (mesItemQt == null)
+        {
+            throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 涓嶅瓨鍦紝璇风‘璁わ紒");
+        }
+
+        if (mesItemQt.Qt011 != stock.DepotsCode)
+        {
+            throw new Exception(
+                $"鎵爜鍑鸿揣浠撳簱{stock.DepotsCode}涓庡叾浠栧嚭搴撶敵璇蜂粨搴搟mesItemQt.Qt011}涓嶄竴鑷达紝璇锋牳瀵癸紒");
+        }
+
+        // 鑾峰彇閫�鏂欏崟鏄庣粏
+        var qtDetail = Db.Queryable<MesItemQtDatall>()
+            .Where(it =>
+                it.QtGuid == mesItemQt.Guid &&
+                it.ItemId == stock.ItemId.ToString())
+            .First();
+
+        if (qtDetail == null)
+        {
+            throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒");
+        }
+
+        var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0);
+
+        if (remainingQty <= 0)
+        {
+            throw new Exception($"鐢宠鐗╂枡 {barcode.ItemNo} 宸插嚭搴撳畬鎴愶紒");
+        }
+
+        if (p_qty > remainingQty)
+        {
+            throw new Exception(
+                $"杈撳叆鐨勬媶鍒嗘暟閲� {p_qty} 涓嶅彲澶т簬鍓╀綑闇�鍙戞暟閲� {remainingQty} 璇蜂慨鏀�");
+        }
+
+        var totalQty = Db.Queryable<MesInvItemStocks>()
+            .Where(it => it.ItemBarcode == p_old_barcode && it.Quantity > 0)
+            .Sum(it => it.Quantity);
+
+        if (totalQty < p_qty)
+        {
+            throw new Exception($"杈撳叆鐨勫彂鏂欐暟閲� {p_qty} 涓嶅彲澶т簬鏉$爜鏁伴噺 {totalQty} 璇蜂慨鏀�");
+        }
+
+        var message = string.Empty;
+        var mesItemQtDatalls = new List<MesItemQtDatall>();
+        var newBarcode = string.Empty;
+
+        UseTransaction(db =>
+        {
+            var commit = 0;
+
+            // 濡傛灉闇�瑕佹媶鍒嗘潯鐮�
+            if (totalQty > p_qty)
+            {
+                var mesItems = db.Queryable<MesItems>()
+                    .Where(s => s.Id == stock.ItemId).First();
+                // 鐢熸垚鏂版潯鐮佸彿
+                newBarcode = BillNo.GetBillNo("TMBH(鏉$爜缂栧彿)", mesItems.ItemNo);
+
+                // 鎻掑叆鏂版潯鐮佽褰�
+                commit += db.Insertable(new MesInvItemBarcodes
+                {
+                    Guid = Guid.NewGuid(),
+                    ItemBarcode = newBarcode,
+                    ItemNo = barcode.ItemNo,
+                    LotNo = barcode.LotNo,
+                    Quantity = p_qty,
+                    TaskNo = barcode.TaskNo,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    OldItemBarcode = p_old_barcode,
+                    Mblnr = barcode.Mblnr,
+                    Zeile = barcode.Zeile,
+                    Barcodestatus = false,
+                    Oldqty = Convert.ToInt64(p_qty.Value),
+                    Unit = barcode.Unit,
+                    LotDate = barcode.LotDate,
+                    Memo = "鍏朵粬鍑哄簱鎷嗗垎",
+                    SuppNo = barcode.SuppNo,
+                    ItemSname = barcode.ItemSname,
+                    TrLotno = barcode.TrLotno,
+                    BillNo = barcode.BillNo,
+                    UrgentFlag = barcode.UrgentFlag,
+                    InsDate = barcode.InsDate,
+                    WorkNo = barcode.WorkNo,
+                    WorkLine = barcode.WorkLine,
+                    ComeFlg = 5,
+                    EbelnK3id = barcode.EbelnK3id,
+                    LineK3id = barcode.LineK3id,
+                    ItemId = barcode.ItemId,
+                }).IgnoreColumns(true).ExecuteCommand();
+
+                // 鏇存柊鍘熸潯鐮佹暟閲�
+                commit += db.Updateable<MesInvItemBarcodes>()
+                    .SetColumns(it => it.Quantity == it.Quantity - p_qty)
+                    .Where(it => it.ItemBarcode == p_old_barcode)
+                    .ExecuteCommand();
+
+                // 鏇存柊鍘熷簱瀛樻暟閲�
+                commit += db.Updateable<MesInvItemStocks>()
+                    .SetColumns(it => it.Quantity == it.Quantity - p_qty)
+                    .Where(it => it.ItemBarcode == p_old_barcode)
+                    .ExecuteCommand();
+
+                // 鎻掑叆鏂板簱瀛樿褰�
+                commit += db.Insertable(new MesInvItemStocks
+                {
+                    Guid = Guid.NewGuid(),
+                    ItemBarcode = newBarcode,
+                    ItemNo = stock.ItemNo,
+                    LotNo = stock.LotNo,
+                    Quantity = p_qty,
+                    DepotsCode = stock.DepotsCode,
+                    DepotSectionsCode = stock.DepotSectionsCode,
+                    CheckDate = stock.CheckDate,
+                    IndepDate = stock.IndepDate,
+                    IqcStatus = stock.IqcStatus,
+                    WorkNo = stock.WorkNo,
+                    WorkLine = stock.WorkLine,
+                    SuppNo = stock.SuppNo,
+                    BillNo = stock.BillNo,
+                    EbelnK3id = stock.EbelnK3id,
+                    LineK3id = stock.LineK3id,
+                    ItemId = stock.ItemId,
+                }).IgnoreColumns(true).ExecuteCommand();
+
+
+                // 鎻掑叆涓氬姟娴佹按璁板綍
+                commit += db.Insertable(new MesInvBusiness2
+                {
+                    Status = 1,
+                    BillTypeId = p_bill_type_id,
+                    TransactionCode = p_transaction_no.ToString(),
+                    BusinessType = 1,
+                    TaskNo = barcode.TaskNo,
+                    BillNo = barcode.BillNo,
+                    ItemBarcode = newBarcode,
+                    ItemNo = barcode.ItemNo,
+                    LotNo = barcode.LotNo,
+                    EpFlag = true,
+                    Quantity = p_qty,
+                    FromInvDepotsCode = null,
+                    FromInvDepotSectionsCode = null,
+                    ToInvDepotsCode = stock.DepotsCode,
+                    ToInvDepotSectionsCode = stock.DepotSectionsCode,
+                    Description = "鍏朵粬鍑哄簱鏉$爜鎷嗗垎",
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    Factory = "1000",
+                    Company = "1000",
+                    WorkNo = stock.WorkNo,
+                    WorkLine = stock.WorkLine,
+                    EbelnK3id = stock.EbelnK3id,
+                    LineK3id = stock.LineK3id,
+                    SuppId = stock.SuppId,
+                    SuppNo = stock.SuppNo,
+                    ItemId = stock.ItemId,
+                }).IgnoreColumns(true).ExecuteCommand();
+            }
+            else
+            {
+                newBarcode = p_old_barcode;
+            }
+
+
+            // 鑾峰彇鎴栧垱寤哄嚭搴撳崟
+            var outRecord = db.Queryable<MesInvItemOuts>()
+                .Where(it => it.PbillNo == p_bill_no
+                             && it.DepotCode == stock.DepotsCode
+                             && it.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
+                             DateTime.Now.Date.ToString("yyyy-MM-dd")
+                             && it.BillTypeId == p_bill_type_id
+                             && it.TransactionNo == p_transaction_no
+                             && it.Status == 0)
+                .First();
+
+            var outId = Guid.Empty;
+            var outNo = string.Empty;
+
+            if (outRecord == null)
+            {
+                outId = Guid.NewGuid();
+                outNo = BillNo.GetBillNo("INV_OUT_OTHER");
+                // 鍒涘缓鏂板嚭搴撳崟
+                commit += db.Insertable(new MesInvItemOuts
+                {
+                    Guid = outId,
+                    ItemOutNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}",
+                    TaskNo = p_bill_no,
+                    Status = 0,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    BillTypeId = p_bill_type_id,
+                    TransactionNo = p_transaction_no,
+                    DepotCode = stock.DepotsCode,
+                    OutPart = mesItemQt.Qt012,
+                    FType = 0,
+                    WorkNo = p_bill_no,
+                    OutType = "鍏朵粬鍑哄簱",
+                    BusinessType = "",
+                    PbillNo = p_bill_no,
+                    OutDate = DateTime.Now,
+                    Nflag = 0,
+                    Reason = mesItemQt.Qt010,
+                }).ExecuteReturnIdentity();
+                outNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}";
+            }
+            else
+            {
+                outId = outRecord.Guid;
+                outNo = outRecord.ItemOutNo;
+            }
+
+            // 妫�鏌ュ苟鏇存柊鍑哄簱鍗曟槑缁�
+            var outItem = db.Queryable<MesInvItemOutItems>()
+                .Where(it =>
+                    it.ItemOutId == outId && it.ItemId == barcode.ItemId)
+                .First();
+
+            if (outItem == null)
+            {
+                // 鎻掑叆鏂版槑缁�
+                db.Insertable(new MesInvItemOutItems
+                {
+                    ItemOutId = outId,
+                    ItemNo = qtDetail.Qd002,
+                    Quantity = p_qty,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    DepotCode = stock.DepotsCode,
+                    TaskNo = p_bill_no,
+                    WorkNo = p_bill_no,
+                    QtOutId = qtDetail.Guid,
+                    // WorkLine = qtDetail.Id.ToString(),
+                    ErpItemNo = qtDetail.ItemNo,
+                    PbillNo = p_bill_no,
+                    ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
+                        ? long.Parse(qtDetail.ItemId)
+                        : null,
+                    FType = 0,
+                    // Unit = qtDetail.Qd009
+                }).ExecuteCommand();
+            }
+            else
+            {
+                // 鏇存柊鏄庣粏鏁伴噺
+                db.Updateable<MesInvItemOutItems>()
+                    .SetColumns(it =>
+                        it.Quantity == (it.Quantity ?? 0) + p_qty)
+                    .Where(it =>
+                        it.ItemOutId == outId &&
+                        it.ItemId == stock.ItemId &&
+                        it.QtOutId == qtDetail.Guid)
+                    .ExecuteCommand();
+            }
+
+            // 鎻掑叆鍑哄簱鏄庣粏
+            db.Insertable(new MesInvItemOutCDetails
+            {
+                ItemOutId = outId,
+                ItemBarcode = newBarcode,
+                ItemNo = stock.ItemNo,
+                LotNo = stock.LotNo,
+                Quantity = p_qty,
+                ForceOutFlag = 0,
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                DepotCode = stock.DepotsCode,
+                DepotSectionCode = stock.DepotSectionsCode,
+                Factory = "1000",
+                Company = "1000",
+                BoardStyle = stock.BoardStyle,
+                TaskNo = p_bill_no,
+                WorkNo = p_bill_no,
+                // WorkLine = qtDetail.Id.ToString(),
+                SuppNo = stock.SuppNo,
+                PbillNo = p_bill_no,
+                ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
+                    ? long.Parse(qtDetail.ItemId)
+                    : null
+            }).IgnoreColumns(true).ExecuteCommand();
+
+            // 鎻掑叆涓氬姟璁板綍
+            db.Insertable(new MesInvBusiness2
+            {
+                Status = 1,
+                BillTypeId = p_bill_type_id,
+                TransactionCode = p_transaction_no.ToString(),
+                BusinessType = 1,
+                ItemBarcode = newBarcode,
+                ItemNo = stock.ItemNo,
+                LotNo = stock.LotNo,
+                EpFlag = true,
+                Quantity = p_qty,
+                FromInvDepotsCode = stock.DepotsCode,
+                FromInvDepotSectionsCode = stock.DepotSectionsCode,
+                Description = "鍏朵粬鍑哄簱",
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                Factory = "1000",
+                Company = "1000",
+                TaskNo = p_bill_no,
+                BillNo = outNo,
+                WorkNo = p_bill_no,
+                // WorkLine = qtDetail.Id.ToString(),
+                SuppId = stock.SuppId,
+                SuppNo = stock.SuppNo,
+                ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
+                    ? long.Parse(qtDetail.ItemId)
+                    : null
+            }).IgnoreColumns(true).ExecuteCommand();
+
+            // 鍒犻櫎搴撳瓨璁板綍
+            db.Deleteable<MesInvItemStocks>()
+                .Where(it => it.ItemBarcode == newBarcode)
+                .ExecuteCommand();
+
+            // 鏇存柊閫�鏂欏崟鏄庣粏
+            db.Updateable<MesItemQtDatall>()
+                .SetColumns(it => it.Qd008 == (it.Qd008 ?? 0) + (int)p_qty)
+                .SetColumnsIF(
+                    (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0) == p_qty,
+                    it => it.Qd011 == 1)
+                .Where(it => it.Guid == qtDetail.Guid)
+                .ExecuteCommand();
+
+            // 妫�鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴�
+            var hasUnfinished = db.Queryable<MesItemQtDatall>()
+                .Where(it => it.Qd011 == 0)
+                .Any();
+
+            // 濡傛灉鎵�鏈夋槑缁嗗畬鎴愶紝鏇存柊閫�鏂欏崟鐘舵��
+            if (!hasUnfinished)
+            {
+                db.Updateable<MesItemQt>()
+                    .SetColumns(it => it.Qt014 == true)
+                    .Where(it => it.Qtck == p_bill_no)
+                    .ExecuteCommand();
+            }
+
+            // 鑾峰彇鍓╀綑寰呭鐞嗘槑缁�
+            mesItemQtDatalls = db
+                .Queryable<MesItemQt, MesItemQtDatall, MesItems>(
+                    (a, b, c) => new JoinQueryInfos(
+                        JoinType.Left, a.Guid == b.QtGuid,
+                        JoinType.Left, b.ItemId == c.Id.ToString()))
+                .Where((a, b, c) => a.Qtck == p_bill_no &&
+                                    (b.Qd007 ?? 0) - (b.Qd008 ?? 0) > 0)
+                .OrderBy((a, b, c) => c.ItemNo)
+                .Select((a, b, c) => new MesItemQtDatall
+                {
+                    Qd002 = b.Qd002,
+                    Qt011 = a.Qt011,
+                    ItemNo = c.ItemNo,
+                    Qd007 = b.Qd007 ?? 0,
+                    Qd008 = b.Qd008 ?? 0
+                })
+                .ToList();
+
+            message = $"鎿嶄綔鎴愬姛锛佹媶鍒嗘潯鐮�:{newBarcode} 鏁伴噺:{p_qty}宸插嚭搴�";
+
+            return commit;
+        });
+        return (query, mesItemQtDatalls, message);
+    }
+}
\ No newline at end of file
diff --git a/service/Warehouse/MesItemQtrkManager.cs b/service/Warehouse/MesItemQtrkManager.cs
index c6baffe..b5d74c2 100644
--- a/service/Warehouse/MesItemQtrkManager.cs
+++ b/service/Warehouse/MesItemQtrkManager.cs
@@ -54,16 +54,13 @@
         return details;
     }
 
-    public String ScanInDepotsQT(WarehouseQuery query)
+    public string ScanInDepotsQT(WarehouseQuery query)
     {
         var sectionCode = query.sectionCode;
         var billNo = query.billNo;
 
         // 1. 楠岃瘉搴撲綅鏉$爜鏄惁涓虹┖
-        if (string.IsNullOrEmpty(sectionCode))
-        {
-            throw new Exception("璇锋壂搴撲綅鏉$爜锛�");
-        }
+        if (string.IsNullOrEmpty(sectionCode)) throw new Exception("璇锋壂搴撲綅鏉$爜锛�");
 
         // 2. 鏌ヨ搴撲綅瀵瑰簲鐨勪粨搴撶紪鐮�
         var depotCode = Db.Queryable<MesDepotSections, MesDepots>(
@@ -74,9 +71,7 @@
             .First();
 
         if (depotCode == null)
-        {
             throw new Exception($"搴撲綅缂栫爜 {sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒");
-        }
 
         // 3. 鏌ヨ鐢宠鍗曞搴旂殑浠撳簱
         var qtrk = Db.Queryable<MesItemQtrk>()
@@ -84,16 +79,11 @@
             .Select(x => x.Qt011)
             .First();
 
-        if (qtrk == null)
-        {
-            throw new Exception($"搴撲綅缂栫爜 {sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒");
-        }
+        if (qtrk == null) throw new Exception($"搴撲綅缂栫爜 {sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒");
 
         // 4. 楠岃瘉搴撲綅鏄惁灞炰簬鐢宠浠撳簱
         if (depotCode != qtrk)
-        {
             throw new Exception($"鎵爜搴撲綅 {sectionCode} 涓嶅睘浜庣敵璇锋浠撳簱!");
-        }
 
         // 5. 杩斿洖鎴愬姛淇℃伅
         return $"浠撳簱锛歿qtrk} 搴撲綅锛歿sectionCode}";
@@ -112,9 +102,7 @@
 
         // 1. 楠岃瘉搴撲綅鏉$爜鏄惁涓虹┖
         if (string.IsNullOrEmpty(p_section_code))
-        {
             throw new Exception("璇锋壂搴撲綅鏉$爜锛�");
-        }
 
         // 2. 鏌ヨ搴撲綅瀵瑰簲鐨勪粨搴撶紪鐮佸拰浠撳簱ID
         var depotInfo = Db.Queryable<MesDepotSections, MesDepots>(
@@ -125,9 +113,7 @@
             .First();
 
         if (depotInfo == null)
-        {
             throw new Exception($"搴撲綅缂栫爜 {p_section_code} 涓嶅瓨鍦紝璇风‘璁わ紒");
-        }
 
         var c_depot_code = depotInfo.DepotCode;
         var c_depot_id = depotInfo.DepotId;
@@ -136,45 +122,30 @@
         var existsInStock = Db.Queryable<MesInvItemInCDetails>()
             .Any(x => x.ItemBarcode == p_item_barcode);
 
-        if (existsInStock)
-        {
-            throw new Exception("姝ゆ潯鐮佸凡鎵爜鍏ュ簱瀹屾垚,璇锋牳瀵癸紒");
-        }
+        if (existsInStock) throw new Exception("姝ゆ潯鐮佸凡鎵爜鍏ュ簱瀹屾垚,璇锋牳瀵癸紒");
 
         // 4. 鏌ヨ鏉$爜淇℃伅
         var barcode = Db.Queryable<MesInvItemBarcodes>()
             .Where(x => x.ItemBarcode == p_item_barcode)
             .First();
 
-        if (barcode == null)
-        {
-            throw new Exception("鏉$爜涓嶅瓨鍦�,璇锋牳瀵癸紒");
-        }
+        if (barcode == null) throw new Exception("鏉$爜涓嶅瓨鍦�,璇锋牳瀵癸紒");
 
-        if (barcode.ComeFlg != 3)
-        {
-            throw new Exception("鏉$爜涓嶆槸鍏朵粬鍏ュ簱鏉$爜,鏃犳硶鐢ㄥ叾浠栧叆搴擄紒");
-        }
+        if (barcode.ComeFlg != 3) throw new Exception("鏉$爜涓嶆槸鍏朵粬鍏ュ簱鏉$爜,鏃犳硶鐢ㄥ叾浠栧叆搴擄紒");
 
         // 楠岃瘉鏉$爜鏄惁宸插湪搴撳瓨涓�
         var stockCount = Db.Queryable<MesInvItemStocks>()
             .Where(x => x.ItemBarcode == p_item_barcode)
             .Count();
 
-        if (stockCount > 0)
-        {
-            throw new Exception("姝ゆ潯鐮佸凡鎵爜鍏ュ簱瀹屾垚,璇锋牳瀵癸紒");
-        }
+        if (stockCount > 0) throw new Exception("姝ゆ潯鐮佸凡鎵爜鍏ュ簱瀹屾垚,璇锋牳瀵癸紒");
 
         // 5. 鏌ヨ鍏朵粬鍏ュ簱鐢宠鍗�
         var qtrk = Db.Queryable<MesItemQtrk>()
             .Where(x => x.Qtck == p_bill_no)
             .First();
 
-        if (qtrk == null)
-        {
-            throw new Exception("鍏朵粬鍏ュ簱鐢宠鍗曚笉瀛樺湪锛�");
-        }
+        if (qtrk == null) throw new Exception("鍏朵粬鍏ュ簱鐢宠鍗曚笉瀛樺湪锛�");
 
         // 6. 鏌ヨ鐢宠鍗曟槑缁�
         var detail = Db.Queryable<MesItemQtrrDetail>()
@@ -184,15 +155,11 @@
             .First();
 
         if (detail == null)
-        {
             throw new Exception($"鍏朵粬鍏ュ簱鐢宠鍗晎p_bill_no}鏃犳鐗╂枡{barcode.ItemNo} 璇锋牳瀵癸紒");
-        }
 
         // 7. 楠岃瘉鏁伴噺
         if (barcode.Quantity > (detail.Qd007 ?? 0) - (detail.Qd008 ?? 0))
-        {
             throw new Exception("鏉$爜鏁伴噺瓒呰繃鐢宠鏁伴噺,璇锋牳瀵癸紒");
-        }
 
         var details = new List<MesItemQtrrDetail>();
 
@@ -255,7 +222,6 @@
                 .First();
 
             if (existingItem == null)
-            {
                 // 涓嶅瓨鍦ㄥ垯鏂板鍏ュ簱鏄庣粏
                 res += db.Insertable(new MesInvItemInCItems
                 {
@@ -282,9 +248,7 @@
                     LineK3id = barcode.LineK3id,
                     ItemId = barcode.ItemId
                 }).IgnoreColumns(true).ExecuteCommand();
-            }
             else
-            {
                 // 瀛樺湪鍒欐洿鏂版暟閲�
                 res += db.Updateable<MesInvItemInCItems>()
                     .SetColumns(
@@ -294,7 +258,6 @@
                                 && x.WorkNo == barcode.WorkNo
                                 && x.WorkLine == barcode.WorkLine)
                     .ExecuteCommand();
-            }
 
 
             // 鎻掑叆鍏ュ簱鏄庣粏璁板綍
@@ -366,7 +329,7 @@
                 SuppNo = barcode.SuppNo,
                 EbelnK3id = barcode.EbelnK3id,
                 LineK3id = barcode.LineK3id,
-                ItemId = barcode.ItemId,
+                ItemId = barcode.ItemId
                 // SalesOrder = barcode.SalesOrder,
                 // IsZy = barcode.IsZy,
                 // OuterBarcode = barcode.OuterBarcode
@@ -398,7 +361,7 @@
                 EbelnK3id = barcode.EbelnK3id,
                 LineK3id = barcode.LineK3id,
                 ItemId = barcode.ItemId,
-                BillNo = barcode.BillNo,
+                BillNo = barcode.BillNo
                 // SalesOrder = barcode.SalesOrder,
                 // IsZy = barcode.IsZy,
                 // Visable = 0,
@@ -423,12 +386,10 @@
                 .First();
 
             if ((detail1.Qd007 ?? 0) - (detail1.Qd008 ?? 0) == barcode.Quantity)
-            {
                 res += db.Updateable<MesItemQtrrDetail>()
                     .SetColumns(x => x.Qd011 == 1)
                     .Where(x => x.Guid == detail1.Guid)
                     .ExecuteCommand();
-            }
 
             details = Db.Queryable<MesItemQtrk, MesItemQtrrDetail, MesItems>(
                     (a, b, c) => new JoinQueryInfos(
@@ -449,17 +410,12 @@
                 .ToList();
 
             if (CollectionUtil.IsNullOrEmpty(details))
-            {
                 res += db.Updateable<MesItemQtrk>()
                     .SetColumns(s => s.Qt014 == 1)
                     .Where(x => x.Qtck == p_bill_no)
                     .ExecuteCommand();
-            }
 
-            if (res < 5)
-            {
-                throw new Exception("鎻掑叆鎴栨洿鏂板け璐�");
-            }
+            if (res < 5) throw new Exception("鎻掑叆鎴栨洿鏂板け璐�");
 
             return res;
         });

--
Gitblit v1.9.3