From 250ae3deeabd8e0818f4adf57f747b71fefd5ef3 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期一, 30 十二月 2024 16:54:56 +0800
Subject: [PATCH] 11

---
 entity/TransferOut.cs                          |  199 ++++++++
 service/Warehouse/TransferOutManager.cs        |  381 +++++++++++++++
 entity/MesInvItemMovesCDetails.cs              |  250 ++++++++++
 entity/MesInvItemMoves.cs                      |  172 +++++++
 entity/TransferOutEtail.cs                     |   67 ++
 service/Warehouse/MesItemQtManager.cs          |  108 ---
 Controllers/Warehouse/TransferOutController.cs |  169 +++++++
 Controllers/Warehouse/MesItemQtController.cs   |   65 +-
 8 files changed, 1,285 insertions(+), 126 deletions(-)

diff --git a/Controllers/Warehouse/MesItemQtController.cs b/Controllers/Warehouse/MesItemQtController.cs
index a3ab253..7daac28 100644
--- a/Controllers/Warehouse/MesItemQtController.cs
+++ b/Controllers/Warehouse/MesItemQtController.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")]
@@ -46,11 +46,11 @@
     #region 鍏朵粬鍑哄簱涓氬姟
 
     /// <summary>
-    /// 鑾峰彇鏈畬鎴愮殑閫�鏂欏崟鍙峰垪琛�
+    ///     鑾峰彇鏈畬鎴愮殑閫�鏂欏崟鍙峰垪琛�
     /// </summary>
     /// <returns>閫�鏂欏崟鍙峰垪琛�</returns>
     /// <remarks>
-    /// 鑾峰彇鐘舵�佷负宸插鏍�(Qt015=true)涓旀湭瀹岀粨(Qt014=false)鐨勯��鏂欏崟鍙峰垪琛�
+    ///     鑾峰彇鐘舵�佷负宸插鏍�(Qt015=true)涓旀湭瀹岀粨(Qt014=false)鐨勯��鏂欏崟鍙峰垪琛�
     /// </remarks>
     /// <response code="200">鎴愬姛鑾峰彇閫�鏂欏崟鍙峰垪琛�</response>
     /// <response code="400">鑾峰彇澶辫触</response>
@@ -75,25 +75,24 @@
     }
 
     /// <summary>
-    /// 鑾峰彇寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃
+    ///     鑾峰彇寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟</param>
     /// <returns>寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesItemQt/GetPendingQtList
     ///     {
-    ///         "userName": "admin",      // 鐢ㄦ埛鍚�(蹇呭~)
-    ///         "billNo": "QT20240101001" // 閫�鏂欏崟鍙�(蹇呭~)
+    ///     "userName": "admin",      // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     "billNo": "QT20240101001" // 閫�鏂欏崟鍙�(蹇呭~)
     ///     }
-    /// 
-    /// 杩斿洖鏈畬鎴愮殑鏄庣粏璁板綍(Qd007-Qd008>0)
+    ///     杩斿洖鏈畬鎴愮殑鏄庣粏璁板綍(Qd007-Qd008>0)
     /// </remarks>
     /// <response code="200">鎴愬姛鑾峰彇閫�鏂欏崟鏄庣粏</response>
     /// <response code="400">鑾峰彇澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
     [HttpPost("GetPendingQtDetailList")]
-    public ResponseResult GetPendingQtDetailList([FromBody] WarehouseQuery query)
+    public ResponseResult GetPendingQtDetailList(
+        [FromBody] WarehouseQuery query)
     {
         try
         {
@@ -113,24 +112,22 @@
     }
 
     /// <summary>
-    /// 鎵弿鏉$爜鍑哄簱
+    ///     鎵弿鏉$爜鍑哄簱
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟</param>
     /// <returns>鍑哄簱缁撴灉銆佸緟澶勭悊鏄庣粏鍜屾彁绀烘秷鎭�</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesItemQt/OutScanBarcode
     ///     {
-    ///         "billNo": "QT20240101001",  // 閫�鏂欏崟鍙�(蹇呭~)
-    ///         "barcode": "BC001",         // 鏉$爜鍙�(蹇呭~)
-    ///         "userName": "admin"         // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     "billNo": "QT20240101001",  // 閫�鏂欏崟鍙�(蹇呭~)
+    ///     "barcode": "BC001",         // 鏉$爜鍙�(蹇呭~)
+    ///     "userName": "admin"         // 鐢ㄦ埛鍚�(蹇呭~)
     ///     }
-    /// 
-    /// 杩斿洖鏁版嵁鍖呭惈:
-    /// - form: 澶勭悊缁撴灉琛ㄥ崟
-    /// - item: 寰呭鐞嗘槑缁嗗垪琛�
-    /// - message: 澶勭悊缁撴灉娑堟伅
+    ///     杩斿洖鏁版嵁鍖呭惈:
+    ///     - form: 澶勭悊缁撴灉琛ㄥ崟
+    ///     - item: 寰呭鐞嗘槑缁嗗垪琛�
+    ///     - message: 澶勭悊缁撴灉娑堟伅
     /// </remarks>
     /// <response code="200">鎵弿鎴愬姛</response>
     /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
@@ -158,25 +155,23 @@
     }
 
     /// <summary>
-    /// 鎵撳嵃鏉$爜鍑哄簱
+    ///     鎵撳嵃鏉$爜鍑哄簱
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟</param>
     /// <returns>鍑哄簱缁撴灉銆佸緟澶勭悊鏄庣粏鍜屾彁绀烘秷鎭�</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesItemQt/PrintQtckBarcode
     ///     {
-    ///         "userName": "admin",         // 鐢ㄦ埛鍚�(蹇呭~)
-    ///         "billNo": "QT20240101001",   // 閫�鏂欏崟鍙�(蹇呭~)
-    ///         "barcode": "BC001",          // 鏉$爜鍙�(蹇呭~)
-    ///         "Fum": 10                    // 鍙戞枡鏁伴噺(蹇呭~,蹇呴』澶т簬0)
+    ///     "userName": "admin",         // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     "billNo": "QT20240101001",   // 閫�鏂欏崟鍙�(蹇呭~)
+    ///     "barcode": "BC001",          // 鏉$爜鍙�(蹇呭~)
+    ///     "Fum": 10                    // 鍙戞枡鏁伴噺(蹇呭~,蹇呴』澶т簬0)
     ///     }
-    /// 
-    /// 杩斿洖鏁版嵁鍖呭惈:
-    /// - form: 澶勭悊缁撴灉琛ㄥ崟
-    /// - item: 寰呭鐞嗘槑缁嗗垪琛�
-    /// - message: 澶勭悊缁撴灉娑堟伅
+    ///     杩斿洖鏁版嵁鍖呭惈:
+    ///     - form: 澶勭悊缁撴灉琛ㄥ崟
+    ///     - item: 寰呭鐞嗘槑缁嗗垪琛�
+    ///     - message: 澶勭悊缁撴灉娑堟伅
     /// </remarks>
     /// <response code="200">鎵撳嵃鎴愬姛</response>
     /// <response code="400">鎵撳嵃澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
diff --git a/Controllers/Warehouse/TransferOutController.cs b/Controllers/Warehouse/TransferOutController.cs
new file mode 100644
index 0000000..b826b2b
--- /dev/null
+++ b/Controllers/Warehouse/TransferOutController.cs
@@ -0,0 +1,169 @@
+锘縰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 TransferOutController : ControllerBase
+{
+    private readonly TransferOutManager _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>
+    /// 鑾峰彇鐢宠鏁伴噺(sq)涓嶇瓑浜庡凡鎵暟閲�(ys)鐨勮皟鎷ㄥ嚭搴撳崟鍙峰垪琛�
+    /// </remarks>
+    /// <response code="200">鎴愬姛鑾峰彇璋冩嫧鍑哄簱鍗曞彿鍒楄〃</response>
+    /// <response code="400">鑾峰彇澶辫触</response>
+    [HttpPost("GetTransferOutNoList")]
+    public ResponseResult GetTransferOutNoList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetTransferOutNoList();
+            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/TransferOut/GetTransferOutDetailListByBillNo
+    ///     {
+    ///         "billNo": "DB202401010001"  // 璋冩嫧鍗曞彿(蹇呭~)
+    ///     }
+    /// 
+    /// 杩斿洖鏈畬鎴愮殑鏄庣粏璁板綍(ShNum-YsNum>0)锛屽寘鍚細
+    /// - ItemNo: 鐗╂枡缂栧彿
+    /// - ItemModel: 鐗╂枡瑙勬牸
+    /// - ShNum: 鐢宠鏁伴噺
+    /// - YsNum: 宸叉壂鏁伴噺
+    /// </remarks>
+    /// <response code="200">鎴愬姛鑾峰彇璋冩嫧鍑哄簱鏄庣粏</response>
+    /// <response code="400">鑾峰彇澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("GetTransferOutDetailListByBillNo")]
+    public ResponseResult GetTransferOutDetailListByBillNo([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetTransferOutDetailListByBillNo(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/TransferOut/ScanMoveBarcode
+    ///     {
+    ///         "billNo": "DB202401010001",  // 璋冩嫧鍗曞彿(蹇呭~)
+    ///         "userName": "admin",          // 鐢ㄦ埛鍚�(蹇呭~)
+    ///         "barcode": "BC001"           // 鏉$爜鍙�(蹇呭~)
+    ///     }
+    /// 
+    /// 涓氬姟澶勭悊锛�
+    /// - 楠岃瘉璋冩嫧鍗曠姸鎬�
+    /// - 楠岃瘉鏉$爜搴撳瓨淇℃伅
+    /// - 楠岃瘉浠撳簱涓�鑷存��
+    /// - 楠岃瘉鏁伴噺鏄惁瓒呭嚭鏈壂鏁伴噺
+    /// - 鎵ц璋冩嫧鍑哄簱浜嬪姟澶勭悊
+    /// 
+    /// 杩斿洖鏁版嵁鍖呭惈锛�
+    /// - form: 澶勭悊缁撴灉琛ㄥ崟
+    /// - items: 寰呭鐞嗘槑缁嗗垪琛�
+    /// </remarks>
+    /// <response code="200">鎵弿鎴愬姛</response>
+    /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("ScanMoveBarcode")]
+    public ResponseResult ScanMoveBarcode([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var (form, items) = _manager.ScanMoveBarcode(query);
+            resultInfos.form = form;
+            resultInfos.items = items;
+            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/entity/MesInvItemMoves.cs b/entity/MesInvItemMoves.cs
new file mode 100644
index 0000000..b17070a
--- /dev/null
+++ b/entity/MesInvItemMoves.cs
@@ -0,0 +1,172 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+/// </summary>
+[SugarTable("MES_INV_ITEM_MOVES")]
+public class MesInvItemMoves
+{
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+    /// <summary>
+    ///     绉诲簱鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "bill_no")]
+    public string? BillNo { get; set; }
+
+    /// <summary>
+    ///     绉诲叆瀛愬簱id
+    /// </summary>
+    [SugarColumn(ColumnName = "inv_depots_id")]
+    public int? InvDepotsId { get; set; }
+
+    /// <summary>
+    ///     绉诲叆璐т綅id
+    /// </summary>
+    [SugarColumn(ColumnName = "inv_depot_sections_id")]
+    public int? InvDepotSectionsId { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "create_by")]
+    public string? CreateBy { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "create_date")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂颁汉
+    /// </summary>
+    [SugarColumn(ColumnName = "lastupdate_by")]
+    public string? LastupdateBy { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂版椂闂�
+    /// </summary>
+    [SugarColumn(ColumnName = "lastupdate_date")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     鐘舵�亅0-鍒跺崟1-杩囪处
+    /// </summary>
+    [SugarColumn(ColumnName = "status")]
+    public int? Status { get; set; }
+
+    /// <summary>
+    ///     澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "remark")]
+    public string? Remark { get; set; }
+
+    /// <summary>
+    ///     鍗曟嵁绫诲瀷ID
+    /// </summary>
+    [SugarColumn(ColumnName = "bill_type_id")]
+    public int? BillTypeId { get; set; }
+
+    /// <summary>
+    ///     浜嬪姟绫诲瀷ID
+    /// </summary>
+    [SugarColumn(ColumnName = "transaction_id")]
+    public int? TransactionId { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "checkuser")]
+    public string? Checkuser { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "checkdate")]
+    public DateTime? Checkdate { get; set; }
+
+    /// <summary>
+    ///     浜嬪姟绫诲瀷缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "transaction_no")]
+    public int? TransactionNo { get; set; }
+
+    /// <summary>
+    ///     绉诲嚭瀛愬簱id
+    /// </summary>
+    [SugarColumn(ColumnName = "from_depots_id")]
+    public string? FromDepotsId { get; set; }
+
+    /// <summary>
+    ///     宸ュ巶缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "factory_code")]
+    public string? FactoryCode { get; set; }
+
+    /// <summary>
+    ///     SAP杩斿洖鍗曟嵁
+    /// </summary>
+    [SugarColumn(ColumnName = "sapno")]
+    public string? Sapno { get; set; }
+
+    /// <summary>
+    ///     宸插洖鍐橲AP
+    ///     榛樿鍊�: ((0))
+    /// </summary>
+    [SugarColumn(ColumnName = "sapstatus")]
+    public int? Sapstatus { get; set; }
+
+    /// <summary>
+    ///     SAP杩斿洖骞翠唤
+    /// </summary>
+    [SugarColumn(ColumnName = "sapyear")]
+    public int? Sapyear { get; set; }
+
+    /// <summary>
+    ///     SAP杩斿洖淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "saptext")]
+    public string? Saptext { get; set; }
+
+    /// <summary>
+    ///     鍒嗗巶缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "factory")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    ///     鍏徃浠g爜
+    /// </summary>
+    [SugarColumn(ColumnName = "company")]
+    public string? Company { get; set; }
+
+    /// <summary>
+    ///     鍙嶅鏍镐簨鍔$被鍨嬬紪鐮�
+    /// </summary>
+    [SugarColumn(ColumnName = "mtransaction_no")]
+    public int? MtransactionNo { get; set; }
+
+    /// <summary>
+    ///     鑷姩淇濆瓨瀛楁
+    /// </summary>
+    [SugarColumn(ColumnName = "zd_num")]
+    public int? ZdNum { get; set; }
+
+    /// <summary>
+    ///     鏄惁鎺ㄩ�丒RP1-鏄紝2-鍚�
+    /// </summary>
+    [SugarColumn(ColumnName = "ts")]
+    public int? Ts { get; set; }
+
+    /// <summary>
+    ///     璋冩嫧鍑哄簱鐢宠鍗�
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_NO")]
+    public string? TaskNo { get; set; }
+}
\ No newline at end of file
diff --git a/entity/MesInvItemMovesCDetails.cs b/entity/MesInvItemMovesCDetails.cs
new file mode 100644
index 0000000..3ac4eef
--- /dev/null
+++ b/entity/MesInvItemMovesCDetails.cs
@@ -0,0 +1,250 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+/// </summary>
+[SugarTable("MES_INV_ITEM_MOVES_C_DETAILS")]
+public class MesInvItemMovesCDetails
+{
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "item_move_guid")]
+    public Guid? ItemMoveGuid { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鏉$爜
+    /// </summary>
+    [SugarColumn(ColumnName = "item_barcode")]
+    public string? ItemBarcode { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "c_item_code")]
+    public string? CItemCode { get; set; }
+
+    /// <summary>
+    ///     淇″崕鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "item_no")]
+    public string? ItemNo { get; set; }
+
+    /// <summary>
+    ///     鍘傚鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "lot_no")]
+    public string? LotNo { get; set; }
+
+    /// <summary>
+    ///     鏁伴噺锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "quantity")]
+    public decimal? Quantity { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱鏂瑰紡(1:鏈夋潯鐮�,0:鏃犳潯鐮�)
+    ///     榛樿鍊�: ((1))
+    /// </summary>
+    [SugarColumn(ColumnName = "barcode_flag")]
+    public int? BarcodeFlag { get; set; }
+
+    /// <summary>
+    ///     鐜繚鏍囧織锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    ///     榛樿鍊�: ((1))
+    /// </summary>
+    [SugarColumn(ColumnName = "ep_flag")]
+    public int? EpFlag { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "create_by")]
+    public string? CreateBy { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "create_date")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂颁汉
+    /// </summary>
+    [SugarColumn(ColumnName = "lastupdate_by")]
+    public string? LastupdateBy { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂版椂闂�
+    /// </summary>
+    [SugarColumn(ColumnName = "lastupdate_date")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     瀛愬簱id
+    /// </summary>
+    [SugarColumn(ColumnName = "inv_depots_id")]
+    public int? InvDepotsId { get; set; }
+
+    /// <summary>
+    ///     璐т綅id
+    /// </summary>
+    [SugarColumn(ColumnName = "inv_depot_sections_id")]
+    public int? InvDepotSectionsId { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "cust_no")]
+    public string? CustNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟浠ゅ彿
+    /// </summary>
+    [SugarColumn(ColumnName = "task_no")]
+    public string? TaskNo { get; set; }
+
+    /// <summary>
+    ///     绉诲嚭浠撳簱缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "from_depots_code")]
+    public string? FromDepotsCode { get; set; }
+
+    /// <summary>
+    ///     绉诲嚭搴撲綅缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "from_depot_sections_code")]
+    public string? FromDepotSectionsCode { get; set; }
+
+    /// <summary>
+    ///     鏉$爜澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "remark")]
+    public string? Remark { get; set; }
+
+    /// <summary>
+    ///     鍒嗗巶缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "factory")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    ///     鍏徃浠g爜
+    /// </summary>
+    [SugarColumn(ColumnName = "company")]
+    public string? Company { get; set; }
+
+    /// <summary>
+    ///     绠卞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "box_no")]
+    public string? BoxNo { get; set; }
+
+    /// <summary>
+    ///     鍗℃澘鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "ko_no")]
+    public string? KoNo { get; set; }
+
+    /// <summary>
+    ///     绉诲叆浠撳簱缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "inv_depots_code")]
+    public string? InvDepotsCode { get; set; }
+
+    /// <summary>
+    ///     绉诲叆搴撲綅缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "inv_depot_sections_code")]
+    public string? InvDepotSectionsCode { get; set; }
+
+    /// <summary>
+    ///     璐ㄦ缁撴灉
+    /// </summary>
+    [SugarColumn(ColumnName = "iqc_status")]
+    public string? IqcStatus { get; set; }
+
+    /// <summary>
+    ///     灏忚溅缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "fcar")]
+    public string? Fcar { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "indep_date")]
+    public DateTime? IndepDate { get; set; }
+
+    /// <summary>
+    ///     鍐荤粨鎻愪氦閲嶆锛�0锛氬喕缁撴湭鎻愪氦閲嶆锛�1锛氬喕缁撳苟鎻愪氦閲嶆
+    ///     榛樿鍊�: ((0))
+    /// </summary>
+    [SugarColumn(ColumnName = "visable_submit")]
+    public int? VisableSubmit { get; set; }
+
+    /// <summary>
+    ///     鎻愪氦閲嶆浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "visable_submit_by")]
+    public string? VisableSubmitBy { get; set; }
+
+    /// <summary>
+    ///     鎻愪氦閲嶆鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "visable_submit_date")]
+    public DateTime? VisableSubmitDate { get; set; }
+
+    /// <summary>
+    ///     浜у搧鍨嬪彿
+    /// </summary>
+    [SugarColumn(ColumnName = "board_style")]
+    public string? BoardStyle { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "work_no")]
+    public string? WorkNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曡鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "work_line")]
+    public int? WorkLine { get; set; }
+
+    /// <summary>
+    ///     渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "supp_no")]
+    public string? SuppNo { get; set; }
+
+    /// <summary>
+    ///     璋冨叆
+    /// </summary>
+    [SugarColumn(ColumnName = "move_ok")]
+    public int? MoveOk { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡ID
+    /// </summary>
+    [SugarColumn(ColumnName = "item_id")]
+    public int? ItemId { get; set; }
+
+    /// <summary>
+    ///     K3ID
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_K3ID")]
+    public long? EbelnK3id { get; set; }
+
+    /// <summary>
+    ///     琛孠3ID
+    /// </summary>
+    [SugarColumn(ColumnName = "LINE_K3ID")]
+    public long? LineK3id { get; set; }
+}
\ No newline at end of file
diff --git a/entity/TransferOut.cs b/entity/TransferOut.cs
new file mode 100644
index 0000000..be97376
--- /dev/null
+++ b/entity/TransferOut.cs
@@ -0,0 +1,199 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+///     璋冩嫧鍑哄簱涓昏〃
+/// </summary>
+[SugarTable("Transfer_Out")]
+public class TransferOut
+{
+   /// <summary>
+ ///     涓婚敭
+ ///     榛樿鍊�: (newid())
+ /// </summary>
+ [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+   /// <summary>
+ ///     鍗曟嵁绫诲瀷
+ /// </summary>
+ [SugarColumn(ColumnName = "bill_type_id")]
+    public string BillTypeId { get; set; }
+
+   /// <summary>
+ ///     璋冩嫧鏂瑰悜
+ /// </summary>
+ [SugarColumn(ColumnName = "transfer_direct")]
+    public string TransferDirect { get; set; }
+
+   /// <summary>
+ ///     璋冩嫧绫诲瀷
+ /// </summary>
+ [SugarColumn(ColumnName = "transfer_biz_type")]
+    public string TransferBizType { get; set; }
+
+   /// <summary>
+ ///     璋冨嚭搴撳瓨缁勭粐
+ /// </summary>
+ [SugarColumn(ColumnName = "stockoutorg_id")]
+    public string StockoutorgId { get; set; }
+
+   /// <summary>
+ ///     璋冨叆搴撳瓨缁勭粐
+ /// </summary>
+ [SugarColumn(ColumnName = "stockorg_id")]
+    public string StockorgId { get; set; }
+
+   /// <summary>
+ ///     璋冨嚭璐т富绫诲瀷
+ /// </summary>
+ [SugarColumn(ColumnName = "owner_type_out_id_head")]
+    public string OwnerTypeOutIdHead { get; set; }
+
+   /// <summary>
+ ///     璋冨嚭璐т富
+ /// </summary>
+ [SugarColumn(ColumnName = "owner_out_id_head")]
+    public string OwnerOutIdHead { get; set; }
+
+   /// <summary>
+ ///     璋冨叆璐т富绫诲瀷
+ /// </summary>
+ [SugarColumn(ColumnName = "owner_type_id_head")]
+    public string OwnerTypeIdHead { get; set; }
+
+   /// <summary>
+ ///     璋冨叆璐т富
+ /// </summary>
+ [SugarColumn(ColumnName = "owner_id_head")]
+    public string OwnerIdHead { get; set; }
+
+   /// <summary>
+ ///     閿�鍞粍缁�
+ /// </summary>
+ [SugarColumn(ColumnName = "saleorg_id")]
+    public string SaleorgId { get; set; }
+
+   /// <summary>
+ ///     鍒涘缓浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "create_by")]
+    public string CreateBy { get; set; }
+
+   /// <summary>
+ ///     鍒涘缓鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "cteate_data")]
+    public DateTime? CteateData { get; set; }
+
+   /// <summary>
+ ///     鏈�鍚庢洿鏂颁汉
+ /// </summary>
+ [SugarColumn(ColumnName = "lastupdate_by")]
+    public string LastupdateBy { get; set; }
+
+   /// <summary>
+ ///     鏈�鍚庢洿鏂版椂闂�
+ /// </summary>
+ [SugarColumn(ColumnName = "lastupdate_date")]
+    public DateTime? LastupdateDate { get; set; }
+
+   /// <summary>
+ ///     瀹℃牳浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_USER")]
+    public string CheckUser { get; set; }
+
+   /// <summary>
+ ///     瀹℃牳鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_DATE")]
+    public DateTime? CheckDate { get; set; }
+
+   /// <summary>
+ ///     瀹℃牳鐘舵��
+ ///     榛樿鍊�: ((0))
+ /// </summary>
+ [SugarColumn(ColumnName = "STATUS")]
+    public int? Status { get; set; }
+
+   /// <summary>
+ ///     璋冩嫧绫诲瀷缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "transferbiztype_no")]
+    public string TransferbiztypeNo { get; set; }
+
+   /// <summary>
+ ///     璋冩嫧鏂瑰悜缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "transferdirect_no")]
+    public string TransferdirectNo { get; set; }
+
+   /// <summary>
+ ///     璋冨嚭浠撳簱
+ /// </summary>
+ [SugarColumn(ColumnName = "inv_code")]
+    public string InvCode { get; set; }
+
+   /// <summary>
+ ///     璋冨嚭浠撳簱鍚嶇О
+ /// </summary>
+ [SugarColumn(ColumnName = "inv_name")]
+    public string InvName { get; set; }
+
+   /// <summary>
+ ///     璋冨叆浠撳簱
+ /// </summary>
+ [SugarColumn(ColumnName = "from_code")]
+    public string FromCode { get; set; }
+
+   /// <summary>
+ ///     璋冨叆浠撳簱鍚嶇О
+ /// </summary>
+ [SugarColumn(ColumnName = "from_name")]
+    public string FromName { get; set; }
+
+   /// <summary>
+ ///     璋冨嚭搴撳瓨缁勭粐ID
+ /// </summary>
+ [SugarColumn(ColumnName = "stockoutorgid_no")]
+    public int? StockoutorgidNo { get; set; }
+
+   /// <summary>
+ ///     璋冨叆搴撳瓨缁勭粐ID
+ /// </summary>
+ [SugarColumn(ColumnName = "stockorgid_no")]
+    public int? StockorgidNo { get; set; }
+
+   /// <summary>
+ ///     璋冩嫧鐢宠鍗�
+ /// </summary>
+ [SugarColumn(ColumnName = "bill_no")]
+    public string BillNo { get; set; }
+
+   /// <summary>
+ ///     鍗曟嵁绫诲瀷缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "billtypeid_no")]
+    public string BilltypeidNo { get; set; }
+
+   /// <summary>
+ ///     鍑哄簱浠撳簱
+ /// </summary>
+ [SugarColumn(ColumnName = "ck_depot")]
+    public int? CkDepot { get; set; }
+
+   /// <summary>
+ ///     鍏ュ簱浠撳簱
+ /// </summary>
+ [SugarColumn(ColumnName = "rk_depot")]
+    public int? RkDepot { get; set; }
+
+   /// <summary>
+ ///     瀹岀粨鏍囪瘑
+ ///     榛樿鍊�: ((0))
+ /// </summary>
+ [SugarColumn(ColumnName = "is_wc")]
+    public int? IsWc { get; set; }
+}
\ No newline at end of file
diff --git a/entity/TransferOutEtail.cs b/entity/TransferOutEtail.cs
new file mode 100644
index 0000000..0bbe03c
--- /dev/null
+++ b/entity/TransferOutEtail.cs
@@ -0,0 +1,67 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+///     璋冩嫧鍑哄簱鐢宠鏄庣粏
+/// </summary>
+[SugarTable("Transfer_Out_DETAIL")]
+public class TransferOutDetail
+{
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "pid")]
+    public Guid? Pid { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "item_id")]
+    public int? ItemId { get; set; }
+
+    /// <summary>
+    ///     鐢宠鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "sh_num")]
+    public int? ShNum { get; set; }
+
+    /// <summary>
+    ///     宸叉壂鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "ys_num")]
+    public int? YsNum { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "item_unit")]
+    public string? ItemUnit { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "item_name")]
+    public string? ItemName { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "item_no")]
+    public string? ItemNo { get; set; }
+
+    /// <summary>
+    ///     瑙勬牸鍨嬪彿
+    /// </summary>
+    [SugarColumn(ColumnName = "item_model")]
+    public string? ItemModel { get; set; }
+
+    /// <summary>
+    ///     褰撳墠搴撳瓨鏁�
+    /// </summary>
+    [SugarColumn(ColumnName = "kc")]
+    public int? Kc { get; set; }
+}
\ No newline at end of file
diff --git a/service/Warehouse/MesItemQtManager.cs b/service/Warehouse/MesItemQtManager.cs
index 01ce4e1..83730c5 100644
--- a/service/Warehouse/MesItemQtManager.cs
+++ b/service/Warehouse/MesItemQtManager.cs
@@ -24,7 +24,7 @@
     }
 
     /// <summary>
-    /// 鑾峰彇寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃
+    ///     鑾峰彇寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃
     /// </summary>
     /// <param name="query">浠撳簱鏌ヨ鍙傛暟锛屽寘鍚敤鎴峰悕鍜屽崟鎹彿</param>
     /// <returns>寰呭鐞嗙殑閫�鏂欏崟鏄庣粏鍒楄〃</returns>
@@ -40,22 +40,15 @@
             .First();
 
         // 濡傛灉鏈壘鍒伴��鏂欏崟锛屾姏鍑哄紓甯�
-        if (mesItemQt == null)
-        {
-            throw new Exception($"鏈煡璇㈠埌姝ゅ叾浠栧叆搴撶敵璇峰崟 {p_bill_no}");
-        }
+        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} 宸插畬缁擄紝璇风‘璁わ紒");
-        }
 
         // 鑱旇〃鏌ヨ鑾峰彇鏈畬鎴愮殑鏄庣粏鍒楄〃
         // 鍏宠仈琛細
@@ -97,10 +90,7 @@
         var p_transaction_no = 202;
 
         // 妫�鏌ュ崟鎹彿鏄惁涓虹┖
-        if (string.IsNullOrEmpty(p_bill_no))
-        {
-            throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
-        }
+        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
 
         // 妫�鏌ユ槸鍚﹂噸澶嶆壂鎻�
         var existingBarcode = Db.Queryable<MesInvItemOutCDetails>()
@@ -108,10 +98,7 @@
                 it.ItemBarcode == p_item_barcode && it.PbillNo == p_bill_no)
             .Any();
 
-        if (existingBarcode)
-        {
-            throw new Exception("姝ゆ潯鐮佸凡缁忔壂鐮佸嚭搴�,鍕块噸澶嶆壂鎻忥紒");
-        }
+        if (existingBarcode) throw new Exception("姝ゆ潯鐮佸凡缁忔壂鐮佸嚭搴�,鍕块噸澶嶆壂鎻忥紒");
 
         // 鑾峰彇鏉$爜淇℃伅
         var barcode = Db.Queryable<MesInvItemBarcodes>()
@@ -119,9 +106,7 @@
             .First();
 
         if (barcode == null)
-        {
             throw new Exception($"mes涓笉瀛樺湪姝ゆ潯鐮�,璇锋牳瀵癸紒{p_item_barcode}");
-        }
 
         // 鑾峰彇搴撳瓨淇℃伅
         var stock = Db.Queryable<MesInvItemStocks>()
@@ -129,20 +114,14 @@
             .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>()
@@ -160,16 +139,12 @@
             .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>()
@@ -178,17 +153,12 @@
                 it.ItemId == stock.ItemId.ToString())
             .First();
 
-        if (qtDetail == null)
-        {
-            throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒");
-        }
+        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)
@@ -295,10 +265,7 @@
                     it.ItemId == stock.ItemId.ToString())
                 .First();
 
-            if (qtDetail == null)
-            {
-                throw new Exception($"鏈壘鍒板搴旂殑閫�鏂欏崟鏄庣粏淇℃伅");
-            }
+            if (qtDetail == null) throw new Exception("鏈壘鍒板搴旂殑閫�鏂欏崟鏄庣粏淇℃伅");
 
             // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍑哄簱鐗╂枡璁板綍
             var existingOutItem = Db.Queryable<MesInvItemOutItems>()
@@ -329,7 +296,7 @@
                     ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
                         ? long.Parse(qtDetail.ItemId)
                         : null,
-                    FType = 0,
+                    FType = 0
                     // Unit = qtDetail.Qd009
                 };
 
@@ -429,12 +396,10 @@
 
             // 妫�鏌ユ槑缁嗘槸鍚﹀畬鎴�,濡傛灉瀹屾垚鍒欐洿鏂扮姸鎬�
             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>(
@@ -456,12 +421,10 @@
 
             // 濡傛灉娌℃湁寰呭鐞嗘槑缁嗭紝鏇存柊閫�鏂欏崟鐘舵�佷负宸插畬鎴�
             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} 宸插嚭搴�";
@@ -471,10 +434,7 @@
             query.Num = stock.Quantity;
             query.Fum = null;
 
-            if (commit < 5)
-            {
-                throw new Exception("鏇存柊澶辫触");
-            }
+            if (commit < 5) throw new Exception("鏇存柊澶辫触");
 
             return commit;
         });
@@ -494,16 +454,10 @@
         var p_transaction_no = 202;
 
         // 妫�鏌ュ崟鎹彿鏄惁涓虹┖
-        if (string.IsNullOrEmpty(p_bill_no))
-        {
-            throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
-        }
+        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
 
         // 妫�鏌ユ暟閲忔槸鍚︽湁鏁�
-        if (p_qty <= 0)
-        {
-            throw new Exception("璇疯緭鍏ユ纭殑鍙戞枡鏁伴噺锛�");
-        }
+        if (p_qty <= 0) throw new Exception("璇疯緭鍏ユ纭殑鍙戞枡鏁伴噺锛�");
 
         // 鑾峰彇搴撳瓨鏉$爜淇℃伅
         var stock = Db.Queryable<MesInvItemStocks>()
@@ -511,19 +465,13 @@
             .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>()
@@ -531,9 +479,7 @@
             .First();
 
         if (barcode == null)
-        {
             throw new Exception($"mes涓笉瀛樺湪姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_old_barcode}");
-        }
 
         // 鑾峰彇閫�鏂欏崟淇℃伅
         var mesItemQt = Db.Queryable<MesItemQt>()
@@ -541,15 +487,11 @@
             .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>()
@@ -558,32 +500,23 @@
                 it.ItemId == stock.ItemId.ToString())
             .First();
 
-        if (qtDetail == null)
-        {
-            throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒");
-        }
+        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>();
@@ -633,7 +566,7 @@
                     ComeFlg = 5,
                     EbelnK3id = barcode.EbelnK3id,
                     LineK3id = barcode.LineK3id,
-                    ItemId = barcode.ItemId,
+                    ItemId = barcode.ItemId
                 }).IgnoreColumns(true).ExecuteCommand();
 
                 // 鏇存柊鍘熸潯鐮佹暟閲�
@@ -667,7 +600,7 @@
                     BillNo = stock.BillNo,
                     EbelnK3id = stock.EbelnK3id,
                     LineK3id = stock.LineK3id,
-                    ItemId = stock.ItemId,
+                    ItemId = stock.ItemId
                 }).IgnoreColumns(true).ExecuteCommand();
 
 
@@ -702,7 +635,7 @@
                     LineK3id = stock.LineK3id,
                     SuppId = stock.SuppId,
                     SuppNo = stock.SuppNo,
-                    ItemId = stock.ItemId,
+                    ItemId = stock.ItemId
                 }).IgnoreColumns(true).ExecuteCommand();
             }
             else
@@ -733,7 +666,7 @@
                 commit += db.Insertable(new MesInvItemOuts
                 {
                     Guid = outId,
-                    ItemOutNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}",
+                    ItemOutNo = outNo,
                     TaskNo = p_bill_no,
                     Status = 0,
                     CreateBy = c_user,
@@ -751,9 +684,8 @@
                     PbillNo = p_bill_no,
                     OutDate = DateTime.Now,
                     Nflag = 0,
-                    Reason = mesItemQt.Qt010,
+                    Reason = mesItemQt.Qt010
                 }).ExecuteReturnIdentity();
-                outNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}";
             }
             else
             {
@@ -768,7 +700,6 @@
                 .First();
 
             if (outItem == null)
-            {
                 // 鎻掑叆鏂版槑缁�
                 db.Insertable(new MesInvItemOutItems
                 {
@@ -789,12 +720,10 @@
                     ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
                         ? long.Parse(qtDetail.ItemId)
                         : null,
-                    FType = 0,
+                    FType = 0
                     // Unit = qtDetail.Qd009
                 }).ExecuteCommand();
-            }
             else
-            {
                 // 鏇存柊鏄庣粏鏁伴噺
                 db.Updateable<MesInvItemOutItems>()
                     .SetColumns(it =>
@@ -804,7 +733,6 @@
                         it.ItemId == stock.ItemId &&
                         it.QtOutId == qtDetail.Guid)
                     .ExecuteCommand();
-            }
 
             // 鎻掑叆鍑哄簱鏄庣粏
             db.Insertable(new MesInvItemOutCDetails
@@ -887,12 +815,10 @@
 
             // 濡傛灉鎵�鏈夋槑缁嗗畬鎴愶紝鏇存柊閫�鏂欏崟鐘舵��
             if (!hasUnfinished)
-            {
                 db.Updateable<MesItemQt>()
                     .SetColumns(it => it.Qt014 == true)
                     .Where(it => it.Qtck == p_bill_no)
                     .ExecuteCommand();
-            }
 
             // 鑾峰彇鍓╀綑寰呭鐞嗘槑缁�
             mesItemQtDatalls = db
diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs
new file mode 100644
index 0000000..2788646
--- /dev/null
+++ b/service/Warehouse/TransferOutManager.cs
@@ -0,0 +1,381 @@
+锘縰sing NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using SqlSugar;
+
+namespace NewPdaSqlServer.service.Warehouse;
+
+/// <summary>
+/// 璋冩嫧鍑哄簱绠$悊绫�
+/// 璐熻矗澶勭悊璋冩嫧鍑哄簱鐩稿叧鐨勪笟鍔¢�昏緫
+/// </summary>
+public class TransferOutManager : Repository<TransferOut>
+{
+    /// <summary>
+    /// 鑾峰彇鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃
+    /// </summary>
+    /// <returns>鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃</returns>
+    public List<string> GetTransferOutNoList()
+    {
+        // 鍏堜粠鏁版嵁搴撹幏鍙朤ransfer_Out_ETAIL琛ㄧ殑鏁版嵁
+        var transferOutDetails = Db.Queryable<TransferOutDetail>().ToList();
+
+        // 浣跨敤LINQ瀵硅幏鍙栫殑鏁版嵁杩涜鍒嗙粍鍜岀瓫閫�
+        // 绛涢�夋潯浠�:鐢宠鏁伴噺(sq)涓嶇瓑浜庡凡鎵暟閲�(ys)鐨勮褰�
+        var result = transferOutDetails
+            .GroupBy(x => x.Pid)
+            .Select(g => new
+            {
+                pid = g.Key,
+                sq = g.Sum(x => x.ShNum),  // 鐢宠鏁伴噺鍚堣
+                ys = g.Sum(x => x.YsNum)   // 宸叉壂鏁伴噺鍚堣
+            })
+            .Where(x => (x.sq ?? 0) != (x.ys ?? 0))
+            .Select(x => x.pid)
+            .ToList();
+
+        // 鏍规嵁pid鏌ヨ瀵瑰簲鐨勫嚭搴撳崟鍙�
+        var billNos = Db.Queryable<TransferOut>()
+            .Where(x => result.Contains(x.Guid))
+            .Select(x => x.BillNo)
+            .ToList();
+
+        return billNos;
+    }
+
+    /// <summary>
+    /// 鏍规嵁鍗曟嵁鍙疯幏鍙栧緟澶勭悊鐨勮皟鎷ㄥ嚭搴撴槑缁嗗垪琛�
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param>
+    /// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns>
+    public List<TransferOutDetail> GetTransferOutDetailListByBillNo(
+        WarehouseQuery query)
+    {
+        var p_bill_no = query.billNo;
+
+        // 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏
+        // 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛�
+        // 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳
+        var result = Db.Queryable<TransferOutDetail, TransferOut, MesItems>(
+                (b, a, s) => new JoinQueryInfos(
+                    JoinType.Left, b.Pid == a.Guid,
+                    JoinType.Left, b.ItemId == s.Id))
+            .Where((b, a, s) =>
+                (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0  // 鏈畬鎴愭暟閲忓ぇ浜�0
+                && a.BillNo == p_bill_no             // 鍖归厤鍗曟嵁鍙�
+                && a.Status == 1)                    // 鍗曟嵁宸插鏍�
+            .OrderBy((b, a, s) => s.ItemNo)
+            .Select((b, a, s) => new TransferOutDetail
+            {
+                ItemNo = s.ItemNo,
+                ItemModel = s.ItemModel,
+                ShNum = b.ShNum,      // 鐢宠鏁伴噺
+                YsNum = b.YsNum,      // 宸叉壂鏁伴噺
+                // 淇濈暀鍏朵粬蹇呰瀛楁...
+                Pid = b.Pid,
+                ItemId = b.ItemId,
+                Guid = b.Guid
+            })
+            .ToList();
+
+        return result;
+    }
+
+    /// <summary>
+    /// 鎵弿鏉$爜杩涜璋冩嫧鍑哄簱澶勭悊
+    /// </summary>
+    /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param>
+    /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns>
+    public (WarehouseQuery form, List<TransferOutDetail> items)
+        ScanMoveBarcode(WarehouseQuery query)
+    {
+        var p_bill_no = query.billNo;
+        var c_user = query.userName;
+        var p_item_barcode = query.barcode;
+
+        var p_bill_type_id = 300;     // 鍗曟嵁绫诲瀷ID
+        var p_transaction_no = 301;    // 浜ゆ槗缂栧彿
+
+        // 楠岃瘉鍗曟嵁鍙�
+        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}");
+        }
+
+        // 楠岃瘉浠撳簱涓�鑷存��
+        if (stock.DepotsCode != transferOut.InvCode)
+        {
+            throw new Exception(
+                $"鏉$爜搴撳瓨浠撳簱{stock.DepotsCode}鍜岀敵璇蜂粨搴撲笉涓�鑷磠transferOut.InvCode}");
+        }
+
+        // 鏌ヨ鐗╂枡淇℃伅
+        var item = Db.Queryable<MesItems>()
+            .Where(x => x.Id == stock.ItemId)
+            .First();
+        if (item == null)
+        {
+            throw new Exception("鏈壘鍒扮墿鏂�");
+        }
+
+        // 鏌ヨ璋冩嫧鏄庣粏骞堕獙璇�
+        var detail = Db.Queryable<TransferOutDetail>()
+            .Where(x => x.ItemId == stock.ItemId && x.Pid == transferOut.Guid)
+            .First();
+        if (detail == null)
+        {
+            throw new Exception("鏈壘鍒版潯鐮佺墿鏂欑浉搴旂殑璋冩嫧鐢宠");
+        }
+
+        // 楠岃瘉鏁伴噺鏄惁瓒呭嚭鏈壂鏁伴噺
+        if ((detail.ShNum ?? 0) - (detail.YsNum ?? 0) < stock.Quantity)
+        {
+            throw new Exception("鏉$爜鏁伴噺澶т簬鐢宠鏈壂鏁伴噺锛岃鎷嗗垎浜嗗啀鎵爜");
+        }
+        
+        // 浣跨敤浜嬪姟澶勭悊鏁版嵁鏇存柊
+        UseTransaction(db =>
+        {
+            // 鏌ヨ鐜版湁绉诲簱璁板綍
+            var existingMove = db.Queryable<MesInvItemMoves>()
+                .Where(x => x.TaskNo == p_bill_no
+                            && x.TransactionNo == p_transaction_no
+                            && (x.Status ?? 0) == 0)
+                .First();
+
+            var commit = 0;  // 璁板綍鏇存柊鎿嶄綔娆℃暟
+            var c_id = Guid.Empty;
+
+            // 澶勭悊绉诲簱涓昏〃璁板綍
+            if (existingMove != null)
+            {
+                // 鏇存柊鐜版湁璁板綍鐨勬渶鍚庝慨鏀逛俊鎭�
+                commit += db.Updateable<MesInvItemMoves>()
+                    .SetColumns(s => s.LastupdateDate == DateTime.Now)
+                    .SetColumns(s => s.LastupdateBy == c_user)
+                    .Where(s => s.Guid == existingMove.Guid)
+                    .ExecuteCommand();
+
+                c_id = existingMove.Guid;
+            }
+            else
+            {
+                // 鏌ヨ鐩稿叧浠撳簱淇℃伅
+                var mesDepots = db.Queryable<MesDepots>()
+                    .Where(s => s.DepotCode == transferOut.FromCode)
+                    .First();
+
+                var invMesDepots = db.Queryable<MesDepots>()
+                    .Where(s => s.DepotCode == transferOut.InvCode)
+                    .First();
+
+                c_id = Guid.NewGuid();
+
+                // 鍒涘缓鏂扮殑绉诲簱璁板綍
+                var newMove = new MesInvItemMoves
+                {
+                    Guid = c_id,
+                    BillNo = BillNo.GetBillNo("DBCKD"),
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    BillTypeId = p_bill_type_id,
+                    TransactionNo = p_transaction_no,
+                    InvDepotSectionsId = mesDepots.DepotId,
+                    // InvDepotSectionsCode = transferOut.FromCode,
+                    // FromDepotsCode = transferOut.InvCode,
+                    FromDepotsId = invMesDepots.DepotId.ToString(),
+                    TaskNo = p_bill_no
+                };
+                commit += db.Insertable(newMove).IgnoreColumns(true)
+                    .ExecuteCommand();
+            }
+
+            // 鍐欏叆鑰佹潯鐮佷氦鏄撴槑缁�
+            var business = new MesInvBusiness2
+            {
+                Guid = Guid.NewGuid(),
+                Status = 1,
+                BillTypeId = p_bill_type_id,
+                TransactionCode = p_transaction_no.ToString(),
+                BusinessType = -1,
+                ItemBarcode = p_item_barcode,
+                ItemNo = item.ItemNo,
+                LotNo = stock.LotNo,
+                EpFlag = true,
+                Quantity = stock.Quantity,
+                FromInvDepotsCode = stock.DepotsCode,
+                FromInvDepotSectionsCode = stock.DepotSectionsCode,
+                ToInvDepotsCode = transferOut.FromCode,
+                ToInvDepotSectionsCode = stock.DepotSectionsCode,
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                Factory = stock.Factory,
+                Company = stock.Company,
+                TaskNo = stock.TaskNo,
+                BillNo = p_bill_no,
+                WorkNo = stock.WorkNo,
+                WorkLine = stock.WorkLine,
+                SuppNo = stock.SuppNo,
+                ItemId = stock.ItemId,
+                EbelnK3id = stock.EbelnK3id,
+                LineK3id = stock.LineK3id,
+                // RkDepot = transferOut.RkDepot,
+                // CkDepot = transferOut.CkDepot
+            };
+
+            commit += db.Insertable(business).IgnoreColumns(true)
+                .ExecuteCommand();
+
+            // 鍐欏叆鏂版潯鐮佷氦鏄撴槑缁�
+            var moveDetail = new MesInvItemMovesCDetails
+            {
+                Guid = Guid.NewGuid(),
+                ItemMoveGuid = c_id,
+                ItemBarcode = p_item_barcode,
+                CItemCode = stock.CItemCode,
+                ItemNo = item.ItemNo,
+                LotNo = stock.LotNo,
+                Quantity = stock.Quantity,
+                EpFlag = stock.EpFlag,
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                // CustomerNo = stock.CustomerNo,
+                TaskNo = stock.TaskNo,
+                FromDepotsCode = stock.DepotsCode,
+                FromDepotSectionsCode = stock.DepotSectionsCode,
+                Factory = stock.Factory,
+                Company = stock.Company,
+                InvDepotsCode = transferOut.FromCode,
+                // InvDepotSectionsCode = p_sectioncode,
+                IqcStatus = stock.IqcStatus,
+                Fcar = stock.Fcar,
+                IndepDate = stock.IndepDate,
+                VisableSubmit = stock.VisableSubmit,
+                VisableSubmitBy = stock.VisableSubmitBy,
+                VisableSubmitDate = stock.VisableSubmitDate,
+                BoardStyle = stock.BoardStyle,
+                WorkNo = stock.WorkNo,
+                WorkLine = stock.WorkLine,
+                SuppNo = stock.SuppNo,
+                ItemId = (int)stock.ItemId,
+                EbelnK3id = stock.EbelnK3id,
+                LineK3id = stock.LineK3id,
+                // RkDepot = transferOut.RkDepot,
+                // CkDepot = transferOut.CkDepot
+            };
+
+            commit += db.Insertable(moveDetail).IgnoreColumns(true)
+                .ExecuteCommand();
+
+            // 鏇存柊鎴栨彃鍏ュ嚭搴撴槑缁嗚褰�
+            var outItem = db.Queryable<MesInvItemOutItems>()
+                .Where(x => x.ItemOutId == c_id && x.ItemId == stock.ItemId)
+                .First();
+
+            if (outItem != null)
+            {
+                // 鏇存柊鐜版湁璁板綍鐨勬暟閲�
+                outItem.Quantity += stock.Quantity;
+                commit += db.Updateable<MesInvItemOutItems>()
+                    .SetColumns(x => x.Quantity == outItem.Quantity)
+                    .Where(x => x.Guid == outItem.Guid)
+                    .ExecuteCommand();
+            }
+            else
+            {
+                // 鎻掑叆鏂拌褰�
+                var newOutItem = new MesInvItemOutItems
+                {
+                    Guid = Guid.NewGuid(),
+                    ItemOutId = c_id,
+                    ItemId = stock.ItemId,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    TaskNo = stock.TaskNo,
+                    WorkNo = stock.WorkNo,
+                    WorkLine = stock.WorkLine,
+                    EbelnK3id = (int)stock.EbelnK3id,
+                    LineK3id = (int)stock.LineK3id,
+                    Quantity = stock.Quantity,
+                    // Unit = stock.ItemUnit
+                };
+
+                commit += db.Insertable(newOutItem).IgnoreColumns(true)
+                    .ExecuteCommand();
+            }
+
+            // 鏇存柊璋冩嫧鐢宠宸叉壂鏁伴噺
+            detail = db.Queryable<TransferOutDetail>()
+                .Where(x => x.Guid == detail.Guid)
+                .First();
+
+            if (detail != null)
+            {
+                detail.YsNum = (detail.YsNum ?? 0) + stock.Quantity as int?;
+                commit += db.Updateable<TransferOutDetail>()
+                    .SetColumns(x => x.YsNum == detail.YsNum)
+                    .Where(x => x.Guid == detail.Guid)
+                    .ExecuteCommand();
+            }
+            
+            // 妫�鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴�
+            var totals = db.Queryable<TransferOutDetail, TransferOut>((b, a) => 
+                new JoinQueryInfos(JoinType.Left, b.Pid == a.Guid))
+                .Where((b, a) => a.BillNo == p_bill_no)
+                .Select((b, a) => new {
+                    ShNum = SqlFunc.AggregateSum(b.ShNum),  // 鐢宠鎬绘暟閲�
+                    YsNum = SqlFunc.AggregateSum(b.YsNum)   // 宸叉壂鎬绘暟閲�
+                })
+                .First();
+
+            // 濡傛灉鐢宠鏁伴噺绛変簬宸叉壂鏁伴噺锛屾洿鏂板崟鎹畬鎴愮姸鎬�
+            if (totals.ShNum == totals.YsNum)
+            {
+                commit += db.Updateable<TransferOut>()
+                    .SetColumns(x => x.IsWc == 1)
+                    .Where(x => x.BillNo == p_bill_no)
+                    .ExecuteCommand();
+            }
+            
+            // 鏇存柊杩斿洖鍙傛暟
+            query.itemNo = item.ItemNo;
+            query.Num = stock.Quantity;
+            
+            // 楠岃瘉鏇存柊鎿嶄綔鏄惁鍏ㄩ儴鎴愬姛
+            if (commit < 4)
+            {
+                throw new Exception("鏇存柊澶辫触");
+            }
+
+            return commit;
+        });
+
+        // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏
+        return (query, GetTransferOutDetailListByBillNo(query));
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3