From e3355fba66b7f23bfca7dc213b27ad5f6721763e Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期五, 27 十二月 2024 12:58:03 +0800
Subject: [PATCH] 111

---
 Controllers/Wom/MesWorkProdController.cs       |   34 
 Dto/service/ScanWorkResult.cs                  |    3 
 entity/MesItemQtrk.cs                          |  144 +++++++
 service/Warehouse/MesItemBlManager.cs          |   21 
 service/Warehouse/MesItemTblManager.cs         |    2 
 service/Wom/MesWorkProdManager.cs              |  121 ++++-
 entity/MesItemQtrrDetail.cs                    |  124 ++++++
 Controllers/Warehouse/MesItemQtrkController.cs |  222 +++++++++++
 service/Warehouse/MesItemQtrkManager.cs        |  473 +++++++++++++++++++++++
 9 files changed, 1,073 insertions(+), 71 deletions(-)

diff --git a/Controllers/Warehouse/MesItemQtrkController.cs b/Controllers/Warehouse/MesItemQtrkController.cs
new file mode 100644
index 0000000..d60c3bb
--- /dev/null
+++ b/Controllers/Warehouse/MesItemQtrkController.cs
@@ -0,0 +1,222 @@
+锘縰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 MesItemQtrkController : ControllerBase
+{
+    private readonly MesItemQtrkManager _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);
+        }
+    }
+
+    /// <summary>
+    /// 鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns>鍏朵粬鍏ュ簱鍗曚俊鎭�</returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    #endregion
+
+    #region 鍏朵粬鍏ュ簱涓氬姟
+
+    /// <summary>
+    /// 鑾峰彇鍏朵粬鍏ュ簱鍗曞彿鍒楄〃
+    /// </summary>
+    /// <returns>鍏朵粬鍏ュ簱鍗曞彿鍒楄〃</returns>
+    /// <remarks>
+    /// 鑾峰彇鐘舵�佷负宸插鏍�(Qt015=1)涓旀湭瀹岀粨(Qt014=0)鐨勫叾浠栧叆搴撳崟鍙峰垪琛�
+    /// </remarks>
+    /// <response code="200">鎴愬姛鑾峰彇鍏ュ簱鍗曞彿鍒楄〃</response>
+    /// <response code="400">鑾峰彇澶辫触</response>
+    [HttpPost("GetQtckList")]
+    public ResponseResult GetQtckList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetQtckList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鑾峰彇鍏朵粬鍏ュ簱鍗曟槑缁嗗垪琛�
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟锛屽繀椤诲寘鍚玝illNo(鍏ュ簱鍗曞彿)</param>
+    /// <returns>鍏ュ簱鍗曟槑缁嗗垪琛�</returns>
+    /// <remarks>
+    /// 璇锋眰绀轰緥:
+    /// 
+    ///     POST /api/MesItemQtrk/GetQtckDetailList
+    ///     {
+    ///         "billNo": "QT202401010001"
+    ///     }
+    /// 
+    /// 杩斿洖鏈畬鎴愬叆搴撶殑鏄庣粏璁板綍(Qd007-Qd008>0)
+    /// </remarks>
+    /// <response code="200">鎴愬姛鑾峰彇鍏ュ簱鍗曟槑缁�</response>
+    /// <response code="400">鑾峰彇澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("GetQtckDetailList")]
+    public ResponseResult GetQtckDetailList([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.GetQtckDetailList(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/MesItemQtrk/ScanInDepotsQT
+    ///     {
+    ///         "sectionCode": "A01-01-01",
+    ///         "billNo": "QT202401010001"
+    ///     }
+    /// 
+    /// 楠岃瘉搴撲綅鏄惁灞炰簬鐢宠鍗曟寚瀹氱殑浠撳簱
+    /// </remarks>
+    /// <response code="200">鎵弿鎴愬姛</response>
+    /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("ScanInDepotsQT")]
+    public ResponseResult ScanInDepotsQT([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.message = _manager.ScanInDepotsQT(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/MesItemQtrk/ScanInBcodeQtrk
+    ///     {
+    ///         "userName": "admin",
+    ///         "sectionCode": "A01-01-01",
+    ///         "barcode": "BC001",
+    ///         "billNo": "QT202401010001"
+    ///     }
+    /// 
+    /// - 楠岃瘉鏉$爜鏄惁宸插叆搴�
+    /// - 楠岃瘉鏉$爜鏄惁涓哄叾浠栧叆搴撴潯鐮�
+    /// - 楠岃瘉鍏ュ簱鏁伴噺鏄惁瓒呰繃鐢宠鏁伴噺
+    /// - 鎵ц鍏ュ簱浜嬪姟澶勭悊
+    /// </remarks>
+    /// <response code="200">鎵弿鎴愬姛</response>
+    /// <response code="400">鎵弿澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
+    [HttpPost("ScanInBcodeQtrk")]
+    public ResponseResult ScanInBcodeQtrk([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var (form, items) = _manager.ScanInBcodeQtrk(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/Controllers/Wom/MesWorkProdController.cs b/Controllers/Wom/MesWorkProdController.cs
index d10af04..92b1a8e 100644
--- a/Controllers/Wom/MesWorkProdController.cs
+++ b/Controllers/Wom/MesWorkProdController.cs
@@ -8,7 +8,7 @@
 namespace NewPdaSqlServer.Controllers.Wom;
 
 /// <summary>
-/// 鐢熶骇鎶ュ伐鐩稿叧鎺ュ彛
+///     鐢熶骇鎶ュ伐鐩稿叧鎺ュ彛
 /// </summary>
 [Route("api/[controller]")]
 [ApiController]
@@ -19,7 +19,7 @@
     #region 鍩虹CRUD
 
     /// <summary>
-    /// 鑾峰彇鎵�鏈�
+    ///     鑾峰彇鎵�鏈�
     /// </summary>
     /// <returns>鎶ュ伐鍗曞垪琛�</returns>
     [HttpPost("GetList")]
@@ -43,7 +43,7 @@
     }
 
     /// <summary>
-    /// 鏍规嵁涓婚敭鑾峰彇
+    ///     鏍规嵁涓婚敭鑾峰彇
     /// </summary>
     /// <returns>鎶ュ伐鍗曚俊鎭�</returns>
     [HttpPost("GetById")]
@@ -67,7 +67,7 @@
     }
 
     /// <summary>
-    /// 鏍规嵁涓婚敭鍒犻櫎
+    ///     鏍规嵁涓婚敭鍒犻櫎
     /// </summary>
     /// <returns>鍒犻櫎缁撴灉</returns>
     [HttpPost("DeleteByIds")]
@@ -91,7 +91,7 @@
     }
 
     /// <summary>
-    /// 娣诲姞
+    ///     娣诲姞
     /// </summary>
     /// <returns>娣诲姞缁撴灉</returns>
     [HttpPost("Insert")]
@@ -115,7 +115,7 @@
     }
 
     /// <summary>
-    /// 淇敼
+    ///     淇敼
     /// </summary>
     /// <returns>淇敼缁撴灉</returns>
     [HttpPost("Update")]
@@ -143,18 +143,17 @@
     #region 鐢熶骇鎶ュ伐
 
     /// <summary>
-    /// PDA鎵弿鐢熶骇鎶ュ伐
+    ///     PDA鎵弿鐢熶骇鎶ュ伐
     /// </summary>
     /// <param name="request">鎶ュ伐璇锋眰鍙傛暟</param>
     /// <returns>鎶ュ伐缁撴灉</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesWorkProd/ScanWork
     ///     {
-    ///         "staffNo": "ST001",
-    ///         "itemBarcode": "BC001",
-    ///         "userNo": "admin"
+    ///     "staffNo": "ST001",
+    ///     "itemBarcode": "BC001",
+    ///     "userNo": "admin"
     ///     }
     /// </remarks>
     /// <response code="200">鎵弿鎴愬姛</response>
@@ -180,18 +179,17 @@
     }
 
     /// <summary>
-    /// PDA鎵弿鐢熶骇鎶ュ伐(甯︽暟閲�)
+    ///     PDA鎵弿鐢熶骇鎶ュ伐(甯︽暟閲�)
     /// </summary>
     /// <param name="request">鎶ュ伐璇锋眰鍙傛暟</param>
     /// <returns>鎶ュ伐缁撴灉</returns>
     /// <remarks>
-    /// 璇锋眰绀轰緥:
-    /// 
+    ///     璇锋眰绀轰緥:
     ///     POST /api/MesWorkProd/ScanWorkProd
     ///     {
-    ///         "itemBarcode": "BC001",
-    ///         "quantity": 10,
-    ///         "userNo": "admin"
+    ///     "itemBarcode": "BC001",
+    ///     "quantity": 10,
+    ///     "userNo": "admin"
     ///     }
     /// </remarks>
     /// <response code="200">鎵弿鎴愬姛</response>
diff --git a/Dto/service/ScanWorkResult.cs b/Dto/service/ScanWorkResult.cs
index cda78d6..ff8bb47 100644
--- a/Dto/service/ScanWorkResult.cs
+++ b/Dto/service/ScanWorkResult.cs
@@ -1,8 +1,7 @@
 锘縩amespace NewPdaSqlServer.Dto.service;
 
-
 /// <summary>
-/// 鐢熶骇鎶ュ伐鎵弿缁撴灉
+///     鐢熶骇鎶ュ伐鎵弿缁撴灉
 /// </summary>
 public class ScanWorkResult
 {
diff --git a/entity/MesItemQtrk.cs b/entity/MesItemQtrk.cs
new file mode 100644
index 0000000..4421a99
--- /dev/null
+++ b/entity/MesItemQtrk.cs
@@ -0,0 +1,144 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+///     鍏朵粬鍏ュ簱鐢宠
+/// </summary>
+[SugarTable("MES_ITEM_QTRK")]
+public class MesItemQtrk
+{
+    /// <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 int? Qt014 { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳鐘舵��
+    ///     榛樿鍊�: ((0))
+    /// </summary>
+    [SugarColumn(ColumnName = "qt015")]
+    public int? Qt015 { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "qt016")]
+    public string? Qt016 { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qt017")]
+    public string? Qt017 { get; set; }
+
+    /// <summary>
+    ///     渚涘簲鍟唅d
+    /// </summary>
+    [SugarColumn(ColumnName = "qt018")]
+    public string? Qt018 { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鏂瑰悜锛堥��璐э紝鏅�氾級
+    /// </summary>
+    [SugarColumn(ColumnName = "qt019")]
+    public string? Qt019 { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱绫诲瀷 1鐩樼泩 2妯″叿 3杈呭姪 4鎵撴牱 5鍥炴枡 6閲囪喘
+    /// </summary>
+    [SugarColumn(ColumnName = "qt020")]
+    public string? Qt020 { get; set; }
+
+    /// <summary>
+    ///     閿�鍞鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "qt021")]
+    public string? Qt021 { get; set; }
+}
\ No newline at end of file
diff --git a/entity/MesItemQtrrDetail.cs b/entity/MesItemQtrrDetail.cs
new file mode 100644
index 0000000..7536467
--- /dev/null
+++ b/entity/MesItemQtrrDetail.cs
@@ -0,0 +1,124 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+/// <summary>
+/// </summary>
+[SugarTable("MES_ITEM_QTRR_DETAIL")]
+public class MesItemQtrrDetail
+{
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
+    public Guid Guid { get; set; }
+
+    /// <summary>
+    ///     涓昏〃guid
+    /// </summary>
+    [SugarColumn(ColumnName = "qtrkGuid")]
+    public Guid? QtrkGuid { 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>
+    ///     鐗╂枡ID
+    /// </summary>
+    [SugarColumn(ColumnName = "itemId")]
+    public string? ItemId { get; set; }
+
+    /// <summary>
+    ///     YDYNUM
+    /// </summary>
+    [SugarColumn(ColumnName = "YDYNUM")]
+    public string? Ydynum { get; set; }
+
+    /// <summary>
+    ///     鍙墦鍗版暟閲�
+    /// </summary>
+    [SugarColumn(ColumnName = "KDYNUM")]
+    public string? Kdynum { get; set; }
+
+
+    /// <summary>
+    ///     鐢宠鍗曞彿
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? Qtck { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栫爜 = ERP鐗╂枡缂栧彿||棰滆壊缂栧彿
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? ItemNo { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鍚嶇О
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? ItemName { get; set; }
+}
\ No newline at end of file
diff --git a/service/Warehouse/MesItemBlManager.cs b/service/Warehouse/MesItemBlManager.cs
index 46d86b9..2d70ca7 100644
--- a/service/Warehouse/MesItemBlManager.cs
+++ b/service/Warehouse/MesItemBlManager.cs
@@ -186,7 +186,7 @@
         {
             // 鑾峰彇鎴栧垱寤哄嚭搴撳崟
             var outId = Guid.NewGuid();
-            var outNo = BillNo.GetBillNo("SCBL");
+            var outNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)");
 
             var existingOut = db.Queryable<MesInvItemOuts>()
                 .Where(a => a.BbillNo == query.blNo
@@ -239,7 +239,6 @@
                 .Count();
 
             if (itemCount > 0)
-            {
                 // 鏇存柊宸插瓨鍦ㄧ殑鐗╂枡鏄庣粏鏁伴噺
                 db.Updateable<MesInvItemOutItems>()
                     .SetColumns(i =>
@@ -247,9 +246,7 @@
                     .Where(i =>
                         i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
                     .ExecuteCommand();
-            }
             else
-            {
                 // 鎻掑叆鏂扮殑鐗╂枡鏄庣粏璁板綍
                 db.Insertable(new MesInvItemOutItems
                 {
@@ -275,8 +272,7 @@
                     // Unit = blDetail.Bld009,
                     // DepotId = (int)stockBarcode.DepotsId
                 }).IgnoreColumns(true).ExecuteCommand();
-            }
-            
+
             // 鎻掑叆鍑哄簱鍗曟潯鐮佹槑缁�
             db.Insertable(new MesInvItemOutCDetails
             {
@@ -682,7 +678,7 @@
             {
                 // 鍒涘缓鏂扮殑鍑哄簱鍗�
                 var outId = Guid.NewGuid();
-                var outNo = BillNo.GetBillNo("SCBL");
+                var outNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)");
 
                 // 鎻掑叆鍑哄簱鍗曚富琛�
                 executeCommand += db.Insertable(new MesInvItemOuts
@@ -911,8 +907,9 @@
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟</param>
     /// <returns>鐢熶骇瓒呴鍗曟槑缁嗗垪琛�</returns>
-    public (string bl001,List<MesItemBlDetail> item) GetMesItemBlDetailBySccBillNo(
-        WarehouseQuery query)
+    public (string bl001, List<MesItemBlDetail> item)
+        GetMesItemBlDetailBySccBillNo(
+            WarehouseQuery query)
     {
         if (string.IsNullOrEmpty(query.billNo))
             throw new Exception("璇烽�夊崟鎹彿锛�");
@@ -959,7 +956,7 @@
             })
             .ToList();
 
-        return (mesItemBl.Bl001,pendingDetails);
+        return (mesItemBl.Bl001, pendingDetails);
     }
 
     /// <summary>
@@ -1113,7 +1110,7 @@
             if (outRecord == null)
             {
                 outId = Guid.NewGuid();
-                outNo = BillNo.GetBillNo("SCBL"); // 闇�瑕佸疄鐜扮敓鎴愬崟鍙风殑鏂规硶
+                outNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)"); // 闇�瑕佸疄鐜扮敓鎴愬崟鍙风殑鏂规硶
 
                 // 鎻掑叆鍑哄簱鍗曚富琛�
                 db.Insertable(new MesInvItemOuts
@@ -1517,7 +1514,7 @@
                 itemOut = new MesInvItemOuts
                 {
                     Guid = Guid.NewGuid(),
-                    ItemOutNo = BillNo.GetBillNo("SCBL"), // 闇�瑕佸疄鐜扮敓鎴愬崟鍙风殑鏂规硶
+                    ItemOutNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)"), // 闇�瑕佸疄鐜扮敓鎴愬崟鍙风殑鏂规硶
                     TaskNo = query.blNo,
                     CreateBy = query.userName,
                     CreateDate = DateTime.Now,
diff --git a/service/Warehouse/MesItemQtrkManager.cs b/service/Warehouse/MesItemQtrkManager.cs
new file mode 100644
index 0000000..c6baffe
--- /dev/null
+++ b/service/Warehouse/MesItemQtrkManager.cs
@@ -0,0 +1,473 @@
+锘縰sing NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using SqlSugar;
+
+namespace NewPdaSqlServer.service.Warehouse;
+
+public class MesItemQtrkManager : Repository<MesItemQtrk>
+{
+    public List<string> GetQtckList()
+    {
+        return Db.Queryable<MesItemQtrk>()
+            .Where(x => (x.Qt015 ?? 0) == 1 && (x.Qt014 ?? 0) == 0)
+            .Select(x => x.Qtck)
+            .ToList();
+    }
+
+    public List<MesItemQtrrDetail> GetQtckDetailList(WarehouseQuery query)
+    {
+        // 1. 楠岃瘉鐢宠鍗曟槸鍚﹀瓨鍦�
+        var qtrk = Db.Queryable<MesItemQtrk>()
+            .Where(x => x.Qtck == query.billNo)
+            .First();
+        if (qtrk == null)
+            throw new Exception($"鏈煡璇㈠埌姝ゅ叾浠栧叆搴撶敵璇峰崟 {query.billNo}");
+
+        // 2. 楠岃瘉鐢宠鍗曠姸鎬�
+        if (qtrk.Qt015 != 1)
+            throw new Exception($"鍏朵粬鍏ュ簱鐢宠鍗� {query.billNo} 鏈鏍革紝璇风‘璁わ紒");
+
+        if (qtrk.Qt014 == 1)
+            throw new Exception($"鍏朵粬鍏ュ簱鐢宠鍗� {query.billNo} 宸插畬缁擄紝璇风‘璁わ紒");
+
+        // 3. 鏌ヨ鐢宠鍗曟槑缁�
+        var details = Db.Queryable<MesItemQtrk, MesItemQtrrDetail, MesItems>(
+                (a, b, c) => new JoinQueryInfos(
+                    JoinType.Left, a.Guid == b.QtrkGuid,
+                    JoinType.Left, c.Id.ToString() == b.ItemId))
+            .Where((a, b, c) =>
+                a.Qtck == query.billNo &&
+                (b.Qd007 ?? 0) - (b.Qd008 ?? 0) > 0)
+            .OrderBy((a, b, c) => b.Qd002)
+            .Select((a, b, c) => new MesItemQtrrDetail
+            {
+                Qtck = a.Qtck,
+                ItemNo = c.ItemNo,
+                ItemName = c.ItemName,
+                Qd007 = b.Qd007 ?? 0,
+                Qd008 = b.Qd008 ?? 0
+            })
+            .ToList();
+
+        return details;
+    }
+
+    public String ScanInDepotsQT(WarehouseQuery query)
+    {
+        var sectionCode = query.sectionCode;
+        var billNo = query.billNo;
+
+        // 1. 楠岃瘉搴撲綅鏉$爜鏄惁涓虹┖
+        if (string.IsNullOrEmpty(sectionCode))
+        {
+            throw new Exception("璇锋壂搴撲綅鏉$爜锛�");
+        }
+
+        // 2. 鏌ヨ搴撲綅瀵瑰簲鐨勪粨搴撶紪鐮�
+        var depotCode = Db.Queryable<MesDepotSections, MesDepots>(
+                (a, b) => new JoinQueryInfos(
+                    JoinType.Inner, a.DepotGuid == b.Guid))
+            .Where((a, b) => a.DepotSectionCode == sectionCode)
+            .Select((a, b) => b.DepotCode)
+            .First();
+
+        if (depotCode == null)
+        {
+            throw new Exception($"搴撲綅缂栫爜 {sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒");
+        }
+
+        // 3. 鏌ヨ鐢宠鍗曞搴旂殑浠撳簱
+        var qtrk = Db.Queryable<MesItemQtrk>()
+            .Where(x => x.Qtck == billNo)
+            .Select(x => x.Qt011)
+            .First();
+
+        if (qtrk == null)
+        {
+            throw new Exception($"搴撲綅缂栫爜 {sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒");
+        }
+
+        // 4. 楠岃瘉搴撲綅鏄惁灞炰簬鐢宠浠撳簱
+        if (depotCode != qtrk)
+        {
+            throw new Exception($"鎵爜搴撲綅 {sectionCode} 涓嶅睘浜庣敵璇锋浠撳簱!");
+        }
+
+        // 5. 杩斿洖鎴愬姛淇℃伅
+        return $"浠撳簱锛歿qtrk} 搴撲綅锛歿sectionCode}";
+    }
+
+    public (WarehouseQuery form, List<MesItemQtrrDetail> item)
+        ScanInBcodeQtrk(WarehouseQuery query)
+    {
+        var c_user = query.userName;
+        var p_section_code = query.sectionCode;
+        var p_item_barcode = query.barcode;
+        var p_bill_no = query.billNo;
+
+        var billTypeId = 100;
+        var transactionNo = 102;
+
+        // 1. 楠岃瘉搴撲綅鏉$爜鏄惁涓虹┖
+        if (string.IsNullOrEmpty(p_section_code))
+        {
+            throw new Exception("璇锋壂搴撲綅鏉$爜锛�");
+        }
+
+        // 2. 鏌ヨ搴撲綅瀵瑰簲鐨勪粨搴撶紪鐮佸拰浠撳簱ID
+        var depotInfo = Db.Queryable<MesDepotSections, MesDepots>(
+                (a, b) =>
+                    new JoinQueryInfos(JoinType.Inner, a.DepotGuid == b.Guid))
+            .Where((a, b) => a.DepotSectionCode == p_section_code)
+            .Select((a, b) => new { b.DepotCode, b.DepotId })
+            .First();
+
+        if (depotInfo == null)
+        {
+            throw new Exception($"搴撲綅缂栫爜 {p_section_code} 涓嶅瓨鍦紝璇风‘璁わ紒");
+        }
+
+        var c_depot_code = depotInfo.DepotCode;
+        var c_depot_id = depotInfo.DepotId;
+
+        // 3. 楠岃瘉鏉$爜鏄惁宸插叆搴�
+        var existsInStock = Db.Queryable<MesInvItemInCDetails>()
+            .Any(x => x.ItemBarcode == p_item_barcode);
+
+        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.ComeFlg != 3)
+        {
+            throw new Exception("鏉$爜涓嶆槸鍏朵粬鍏ュ簱鏉$爜,鏃犳硶鐢ㄥ叾浠栧叆搴擄紒");
+        }
+
+        // 楠岃瘉鏉$爜鏄惁宸插湪搴撳瓨涓�
+        var stockCount = Db.Queryable<MesInvItemStocks>()
+            .Where(x => x.ItemBarcode == p_item_barcode)
+            .Count();
+
+        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("鍏朵粬鍏ュ簱鐢宠鍗曚笉瀛樺湪锛�");
+        }
+
+        // 6. 鏌ヨ鐢宠鍗曟槑缁�
+        var detail = Db.Queryable<MesItemQtrrDetail>()
+            .Where(x =>
+                x.QtrkGuid == qtrk.Guid &&
+                x.ItemId == barcode.ItemId.ToString())
+            .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>();
+
+        // 8. 鎵ц鍏ュ簱浜嬪姟
+        UseTransaction(db =>
+        {
+            var res = 0;
+            // 鏌ヨ鏄惁瀛樺湪鏈叆搴撶殑鍏ュ簱鍗�
+            var existingInv = db.Queryable<MesInvItemIns>()
+                .Where(x => x.Status == 0
+                            && x.TransctionNo == transactionNo.ToString()
+                            && x.CbillNo == p_bill_no
+                            && x.SuppNo == barcode.SuppNo
+                            // && x.DepotsCode == c_depot_code)
+                            && x.DepotsId == c_depot_id)
+                .First();
+
+            var newId = Guid.Empty;
+            var billNo = "";
+            // 濡傛灉涓嶅瓨鍦ㄥ垯鍒涘缓鏂板叆搴撳崟
+            if (existingInv == null)
+            {
+                newId = Guid.NewGuid();
+                billNo = BillNo.GetBillNo("INV_IN_OTHER");
+
+                barcode.UrgentFlag ??= false;
+
+                res += db.Insertable(new MesInvItemIns
+                {
+                    Guid = newId,
+                    BillNo = billNo,
+                    BillTypeId = billTypeId,
+                    InsDate = DateTime.Now,
+                    DepotsCode = c_depot_code,
+                    TransctionNo = transactionNo.ToString(),
+                    SuppNo = barcode.SuppNo,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = c_user,
+                    LastupdateDate = DateTime.Now,
+                    UrgentFlag = barcode.UrgentFlag.Value ? (byte)1 : (byte)0,
+                    CbillNo = p_bill_no,
+                    Fstatus = 0,
+                    Status = 0,
+                    Reason = qtrk.Qt010
+                }).IgnoreColumns(true).ExecuteCommand();
+            }
+            else
+            {
+                newId = existingInv.Guid;
+                billNo = existingInv.BillNo;
+            }
+
+            // 鏌ヨ鏄惁瀛樺湪鐩稿悓鐗╂枡鍜屽伐鍗曡鐨勫叆搴撴槑缁�
+            var existingItem = db.Queryable<MesInvItemInCItems>()
+                .Where(x => x.ItemInId == newId
+                            && x.ItemId == barcode.ItemId
+                            && x.WorkNo == barcode.WorkNo
+                            && x.WorkLine == barcode.WorkLine)
+                .First();
+
+            if (existingItem == null)
+            {
+                // 涓嶅瓨鍦ㄥ垯鏂板鍏ュ簱鏄庣粏
+                res += db.Insertable(new MesInvItemInCItems
+                {
+                    Guid = Guid.NewGuid(),
+                    ItemInId = newId,
+                    Quantity = barcode.Quantity,
+                    CreateBy = c_user,
+                    CreateDate = DateTime.Now,
+                    ItemNo = barcode.ItemNo,
+                    DepotCode = c_depot_code,
+                    ItemSname = barcode.ItemSname,
+                    Unit = barcode.Unit,
+                    Ebeln = barcode.WorkNo,
+                    BillNo = billNo,
+                    Factory = barcode.Factory,
+                    Company = barcode.Company,
+                    WorkNo = barcode.WorkNo,
+                    EbelnLineNo = barcode.WorkLine,
+                    CbillNo = barcode.BillNo,
+                    WorkLine = barcode.WorkLine,
+                    SuppNo = barcode.SuppNo,
+                    Remark = barcode.Memo,
+                    EbelnK3id = barcode.EbelnK3id,
+                    LineK3id = barcode.LineK3id,
+                    ItemId = barcode.ItemId
+                }).IgnoreColumns(true).ExecuteCommand();
+            }
+            else
+            {
+                // 瀛樺湪鍒欐洿鏂版暟閲�
+                res += db.Updateable<MesInvItemInCItems>()
+                    .SetColumns(
+                        x => x.Quantity == x.Quantity + barcode.Quantity)
+                    .Where(x => x.ItemInId == newId
+                                && x.ItemId == barcode.ItemId
+                                && x.WorkNo == barcode.WorkNo
+                                && x.WorkLine == barcode.WorkLine)
+                    .ExecuteCommand();
+            }
+
+
+            // 鎻掑叆鍏ュ簱鏄庣粏璁板綍
+            res += db.Insertable(new MesInvItemInCDetails
+            {
+                ItemInId = newId,
+                BillNo = billNo,
+                ItemBarcode = barcode.ItemBarcode,
+                Quantity = barcode.Quantity,
+                BarcodeFlag = true,
+                EpFlag = true,
+                WorkType = 1,
+                ItemNo = barcode.ItemNo,
+                LotNo = barcode.LotNo,
+                SuppId = barcode.SuppId,
+                SuppNo = barcode.SuppNo,
+                DepotId = c_depot_id,
+                DepotCode = c_depot_code,
+                DepotSectionCode = p_section_code,
+                ItemSname = barcode.ItemSname,
+                Unit = barcode.Unit,
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                Remark = barcode.Memo,
+                Factory = barcode.Factory,
+                Company = barcode.Company,
+                Ebeln = barcode.Mblnr,
+                EbelnLineNo = barcode.Zeile,
+                WorkNo = barcode.WorkNo,
+                WorkLine = barcode.WorkLine,
+                CbillNo = barcode.BillNo,
+                UrgentFlag = barcode.UrgentFlag,
+                BoardStyle = barcode.BoardStyle,
+                TaskNo = barcode.TaskNo,
+                EbelnK3id = barcode.EbelnK3id,
+                LineK3id = barcode.LineK3id,
+                ItemId = barcode.ItemId,
+                Ischeck = true
+            }).IgnoreColumns(true).ExecuteCommand();
+
+            // 鎻掑叆搴撳瓨涓氬姟娴佹按璁板綍
+            res += db.Insertable(new MesInvBusiness2
+            {
+                Guid = Guid.NewGuid(),
+                Status = 1,
+                BillTypeId = billTypeId,
+                TransactionCode = transactionNo.ToString(),
+                BusinessType = 1,
+                ItemBarcode = barcode.ItemBarcode,
+                ItemNo = barcode.ItemNo,
+                LotNo = barcode.LotNo,
+                EpFlag = true,
+                Quantity = barcode.Quantity,
+                InvDepotId = c_depot_id,
+                ToInvDepotsCode = c_depot_code,
+                ToInvDepotSectionsCode = p_section_code,
+                Description = "鍏朵粬鍏ュ簱",
+                CreateBy = c_user,
+                CreateDate = DateTime.Now,
+                LastupdateBy = c_user,
+                LastupdateDate = DateTime.Now,
+                TaskNo = barcode.BillNo,
+                BillNo = billNo,
+                WorkNo = barcode.WorkNo,
+                WorkLine = barcode.WorkLine,
+                SuppId = barcode.SuppId,
+                SuppNo = barcode.SuppNo,
+                EbelnK3id = barcode.EbelnK3id,
+                LineK3id = barcode.LineK3id,
+                ItemId = barcode.ItemId,
+                // SalesOrder = barcode.SalesOrder,
+                // IsZy = barcode.IsZy,
+                // OuterBarcode = barcode.OuterBarcode
+            }).IgnoreColumns(true).ExecuteCommand();
+
+            barcode.EpFlag ??= false;
+
+            // 鎻掑叆搴撳瓨璁板綍
+            res += db.Insertable(new MesInvItemStocks
+            {
+                TaskNo = barcode.TaskNo,
+                ItemBarcode = p_item_barcode,
+                ItemNo = barcode.ItemNo,
+                LotNo = barcode.LotNo,
+                Quantity = barcode.Quantity,
+                EpFlag = barcode.EpFlag.Value ? (byte)1 : (byte)0,
+                DepotId = c_depot_id,
+                DepotsCode = c_depot_code,
+                DepotSectionsCode = p_section_code,
+                CheckDate = DateTime.Now,
+                IndepDate = DateTime.Now,
+                Factory = barcode.Factory,
+                Company = barcode.Company,
+                BoardStyle = barcode.BoardStyle,
+                WorkNo = barcode.WorkNo,
+                WorkLine = barcode.WorkLine,
+                SuppId = barcode.SuppId,
+                SuppNo = barcode.SuppNo,
+                EbelnK3id = barcode.EbelnK3id,
+                LineK3id = barcode.LineK3id,
+                ItemId = barcode.ItemId,
+                BillNo = barcode.BillNo,
+                // SalesOrder = barcode.SalesOrder,
+                // IsZy = barcode.IsZy,
+                // Visable = 0,
+                // OuterBarcode = barcode.OuterBarcode
+            }).IgnoreColumns(true).ExecuteCommand();
+
+            // 鏇存柊鏉$爜鍏ュ簱鏍囧織
+            // db.Updateable<MesInvItemBarcodes>()
+            //     .SetColumns(x => x.rkf == 1)
+            //     .Where(x => x.ItemBarcode == p_item_barcode)
+            //     .ExecuteCommand();
+
+            // 鏇存柊鐢宠鍗曟槑缁嗗凡鍏ュ簱鏁伴噺
+            res += db.Updateable<MesItemQtrrDetail>()
+                .SetColumns(x => x.Qd008 == (x.Qd008 ?? 0) + barcode.Quantity)
+                .Where(x => x.Guid == barcode.Guid)
+                .ExecuteCommand();
+
+            // 妫�鏌ユ槸鍚﹀畬鍏ㄥ叆搴撳苟鏇存柊鐘舵��
+            var detail1 = db.Queryable<MesItemQtrrDetail>()
+                .Where(x => x.Guid == detail.Guid)
+                .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(
+                        JoinType.Left, a.Guid == b.QtrkGuid,
+                        JoinType.Left, c.Id.ToString() == b.ItemId))
+                .Where((a, b, c) =>
+                    a.Qtck == p_bill_no &&
+                    (b.Qd007 ?? 0) - (b.Qd008 ?? 0) > 0)
+                .OrderBy((a, b, c) => b.Qd002)
+                .Select((a, b, c) => new MesItemQtrrDetail
+                {
+                    Qtck = a.Qtck,
+                    ItemNo = c.ItemNo,
+                    ItemName = c.ItemName,
+                    Qd007 = b.Qd007 ?? 0,
+                    Qd008 = b.Qd008 ?? 0
+                })
+                .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("鎻掑叆鎴栨洿鏂板け璐�");
+            }
+
+            return res;
+        });
+
+        query.itemNo = barcode.ItemNo;
+        query.Num = barcode.Quantity;
+
+        return (query, details);
+    }
+    // End of Selection
+}
\ No newline at end of file
diff --git a/service/Warehouse/MesItemTblManager.cs b/service/Warehouse/MesItemTblManager.cs
index 75ee6e3..d0284e4 100644
--- a/service/Warehouse/MesItemTblManager.cs
+++ b/service/Warehouse/MesItemTblManager.cs
@@ -406,7 +406,7 @@
 
             return totalResult;
         });
-        
+
         query.itemNo = c_mes_inv_item_barcodes.ItemNo;
         query.Num = c_quantity.Value;
         return query;
diff --git a/service/Wom/MesWorkProdManager.cs b/service/Wom/MesWorkProdManager.cs
index 04a170c..3d88cb7 100644
--- a/service/Wom/MesWorkProdManager.cs
+++ b/service/Wom/MesWorkProdManager.cs
@@ -11,49 +11,76 @@
     //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
 
     /// <summary>
-    /// PDA鎵弿鐢熶骇鎶ュ伐
+    ///     PDA鎵弿鐢熶骇鎶ュ伐
     /// </summary>
+    /// <param name="request">
+    ///     鎶ュ伐璇锋眰鍙傛暟锛屽寘鍚�:
+    ///     - StaffNo: 鍛樺伐宸ュ彿锛屽繀濉�
+    ///     - ItemBarcode: 鐗╂枡鏉$爜锛屽繀濉�
+    ///     - UserNo: 鎿嶄綔鐢ㄦ埛璐﹀彿锛屽繀濉�
+    /// </param>
+    /// <returns>
+    ///     杩斿洖鎶ュ伐缁撴灉瀵硅薄锛屽寘鍚�:
+    ///     - TaskNo: 宸ュ崟鍙�
+    ///     - ItemNo: 鐗╂枡缂栧彿
+    ///     - PlanQty: 璁″垝鏁伴噺
+    ///     - ReportedQty: 宸叉姤宸ユ暟閲�
+    ///     - CurrentQty: 鏈鎶ュ伐鏁伴噺
+    ///     - BarcodeQty: 鏉$爜鏁伴噺
+    ///     - ItemName: 鐗╂枡鍚嶇О
+    ///     - ItemModel: 鐗╂枡鍨嬪彿
+    ///     - Message: 澶勭悊缁撴灉娑堟伅
+    /// </returns>
+    /// <exception cref="Exception">
+    ///     - 褰撳憳宸ヤ笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴潯鐮佷笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撶墿鏂欎笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴潯鐮侀噸澶嶆壂鎻忔椂鎶涘嚭寮傚父
+    ///     - 褰撳伐鍗曚笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴姤宸ユ暟閲忓皬浜庣瓑浜�0鏃舵姏鍑哄紓甯�
+    ///     - 褰撴姤宸ユ�绘暟閲忚秴杩囪鍒掓暟閲忔椂鎶涘嚭寮傚父
+    /// </exception>
     public ScanWorkResult ScanWorkAsync(ScanWorkRequest request)
     {
-        // 鏌ヨ浜哄憳淇℃伅
+        // 1. 楠岃瘉鍛樺伐淇℃伅
         var staff = Db.Queryable<MesStaff>()
             .Where(x => x.StaffNo == request.StaffNo)
             .First();
         if (staff == null)
             throw new Exception("璇峰厛閫夋嫨浜哄憳");
 
-        // 鏌ヨ鏉$爜淇℃伅
+        // 2. 楠岃瘉鏉$爜淇℃伅
         var barcode = Db.Queryable<MesInvItemBarcodes>()
             .Where(x => x.ItemBarcode == request.ItemBarcode)
             .First();
         if (barcode == null)
             throw new Exception($"鏃犳鏉$爜锛岃鏍稿锛亄request.ItemBarcode}");
 
-        // 鏌ヨ鐗╂枡淇℃伅
+        // 3. 楠岃瘉鐗╂枡淇℃伅
         var item = Db.Queryable<MesItems>()
             .Where(x => x.Id == barcode.ItemId)
             .First();
         if (item == null)
             throw new Exception($"鏃犳鐗╂枡锛岃鏍稿锛亄request.ItemBarcode}");
 
-        // 纭畾鍗曟嵁绫诲瀷
-        int billTypeId = 900;
-        int transactionNo = 902;
+        // 4. 鏍规嵁鏉$爜澶囨敞纭畾鍗曟嵁绫诲瀷鍜屼氦鏄撳彿
+        var billTypeId = 900; // 榛樿鍗曟嵁绫诲瀷
+        var transactionNo = 902; // 榛樿浜ゆ槗鍙�
         switch (barcode.Memo?.Trim() ?? "0")
         {
             case "涓濆嵃":
-                transactionNo = 901;
+                transactionNo = 901; // 涓濆嵃宸ュ簭
                 break;
             case "鍗婃垚鍝�":
-                transactionNo = 902;
+                transactionNo = 902; // 鍗婃垚鍝佸伐搴�
                 break;
             case "鍖呰":
             case "鎴愬搧":
-                transactionNo = 903;
+                transactionNo = 903; // 鎴愬搧/鍖呰宸ュ簭
                 break;
         }
 
-        // 妫�鏌ユ潯鐮佹槸鍚﹂噸澶嶆壂鎻�
+        // 5. 妫�鏌ユ潯鐮佹槸鍚﹂噸澶嶆壂鎻�
         var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
                 (a, b) =>
                     new JoinQueryInfos(JoinType.Inner,
@@ -66,7 +93,7 @@
         if (exists)
             throw new Exception("鏉$爜閲嶅鎵弿锛岃鏍稿锛�");
 
-        // 鑾峰彇宸叉姤宸ユ暟閲�
+        // 6. 鑾峰彇宸叉姤宸ユ暟閲�
         var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
                 (a, b) =>
                     new JoinQueryInfos(JoinType.Inner,
@@ -76,7 +103,7 @@
                              && a.TaskNo == barcode.BillNo)
             .Sum((a, b) => b.Quantity);
 
-        // 鑾峰彇宸ュ崟璁″垝鏁伴噺鍜屽瀷鍙�
+        // 7. 鑾峰彇宸ュ崟璁″垝鏁伴噺鍜屽瀷鍙�
         var workOrder = Db.Queryable<Womdaa>()
             .Where(x => x.Daa001 == barcode.BillNo)
             .First();
@@ -86,9 +113,10 @@
         var planQty = workOrder.Daa008;
         var itemModel = workOrder.Daa004;
 
+        // 8. 浣跨敤浜嬪姟澶勭悊鎶ュ伐鏁版嵁
         UseTransaction(db =>
         {
-            // 鏈夋暟閲忔潯鐮佽嚜鍔ㄦ姤宸�
+            // 9. 澶勭悊鏈夋暟閲忔潯鐮佺殑鑷姩鎶ュ伐
             if (barcode.Quantity > 0)
             {
                 var reportQty = barcode.Quantity;
@@ -101,7 +129,7 @@
                     throw new Exception(
                         $"鏈鎶ュ伐鏁伴噺锛歿reportQty} 澶т簬鍓╀綑鎶ュ伐鏁伴噺锛歿workOrder.Daa008 - reportedQty ?? 0}锛岃鏍稿锛�");
 
-                // 鏇存柊鏉$爜鐘舵��
+                // 10. 鏇存柊鏉$爜鐘舵��
                 db.Updateable<MesInvItemBarcodes>()
                     .SetColumns(x => new MesInvItemBarcodes
                     {
@@ -111,7 +139,7 @@
                     .Where(x => x.Guid == barcode.Guid)
                     .ExecuteCommandAsync();
 
-                // 鑾峰彇鎴栧垱寤烘姤宸ュ崟
+                // 11. 鑾峰彇鎴栧垱寤烘姤宸ュ崟
                 var workProd = db.Queryable<MesWorkProd>()
                     .Where(x => x.TaskNo == barcode.BillNo
                                 && x.CreateDate.Value.Date.ToString(
@@ -125,7 +153,7 @@
                 if (workProd == null)
                 {
                     var id = Guid.NewGuid();
-                    var billNo = BillNo.GetBillNo("MES_WORK");
+                    var billNo = BillNo.GetBillNo("BG(鎶ュ伐缂栧彿)");
 
                     workProd = new MesWorkProd
                     {
@@ -147,7 +175,7 @@
                         .ExecuteCommand();
                 }
 
-                // 鎻掑叆鎶ュ伐鏄庣粏
+                // 12. 鎻掑叆鎶ュ伐鏄庣粏
                 var detailId = Guid.NewGuid();
                 db.Insertable(new MesWorkProdCDetails
                 {
@@ -169,7 +197,7 @@
                     BgYg = staff.Id
                 }).IgnoreColumns(true).ExecuteCommand();
 
-                // 鏇存柊宸ュ崟宸叉姤宸ユ暟閲�
+                // 13. 鏇存柊宸ュ崟宸叉姤宸ユ暟閲�
                 db.Updateable<Womdaa>()
                     .SetColumns(x =>
                         x.Daa011 == (x.Daa011 ?? 0) + (int)barcode.Quantity
@@ -177,7 +205,7 @@
                     .Where(x => x.Daa001 == barcode.BillNo)
                     .ExecuteCommandAsync();
 
-                // 閲嶆柊鑾峰彇宸叉姤宸ユ暟閲�
+                // 14. 閲嶆柊鑾峰彇鏈�鏂板凡鎶ュ伐鏁伴噺
                 reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>(
                         (a, b) =>
                             new JoinQueryInfos(JoinType.Inner,
@@ -191,6 +219,7 @@
             return 1;
         });
 
+        // 15. 杩斿洖澶勭悊缁撴灉
         return new ScanWorkResult
         {
             TaskNo = barcode.TaskNo,
@@ -207,45 +236,59 @@
 
 
     /// <summary>
-    /// PDA鎵弿鐢熶骇鎶ュ伐  prc_rf_pda_scan_work_prod
+    ///     PDA鎵弿鐢熶骇鎶ュ伐 prc_rf_pda_scan_work_prod
     /// </summary>
+    /// <param name="request">
+    ///     鎶ュ伐璇锋眰鍙傛暟锛屽寘鍚�:
+    ///     - ItemBarcode: 鐗╂枡鏉$爜锛屽繀濉�
+    ///     - Quantity: 鎶ュ伐鏁伴噺锛屽繀濉笖澶т簬0
+    ///     - UserNo: 鎿嶄綔鐢ㄦ埛璐﹀彿锛屽繀濉�
+    /// </param>
+    /// <returns>杩斿洖甯冨皵鍊硷紝true琛ㄧず鎶ュ伐鎴愬姛锛宖alse琛ㄧず鎶ュ伐澶辫触</returns>
+    /// <exception cref="Exception">
+    ///     - 褰撴姤宸ユ暟閲忓皬浜庣瓑浜�0鏃舵姏鍑哄紓甯�
+    ///     - 褰撴潯鐮佷笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撳伐鍗曚笉瀛樺湪鏃舵姏鍑哄紓甯�
+    ///     - 褰撴姤宸ユ�绘暟閲忚秴杩囪鍒掓暟閲忔椂鎶涘嚭寮傚父
+    /// </exception>
     public bool ScanWorkProdAsync(ScanWorkRequest request)
     {
+        // 1. 楠岃瘉鎶ュ伐鏁伴噺鏄惁澶т簬0
         if (request.Quantity <= 0)
             throw new Exception("鎶ュ伐鏁伴噺涓嶈兘灏忎簬绛変簬 0锛岃鏍稿锛�");
 
-        // 鏌ヨ鏉$爜淇℃伅
+        // 2. 鏌ヨ鏉$爜淇℃伅锛岄獙璇佹潯鐮佹槸鍚﹀瓨鍦�
         var barcode = Db.Queryable<MesInvItemBarcodes>()
             .Where(x => x.ItemBarcode == request.ItemBarcode)
             .First();
         if (barcode == null)
             throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{request.ItemBarcode}");
 
-        // 鏌ヨ宸ュ崟淇℃伅
+        // 3. 鏌ヨ宸ュ崟淇℃伅锛岄獙璇佸伐鍗曟槸鍚﹀瓨鍦�
         var womdaa = Db.Queryable<Womdaa>()
             .Where(x => x.Daa001 == barcode.BillNo)
             .First();
         if (womdaa == null)
             throw new Exception($"鏉$爜涓嶆槸鎶ュ伐鏉$爜/鏃犲搴斿伐鍗曪紝璇锋牳瀵癸紒{request.ItemBarcode}");
 
-        // 纭畾鍗曟嵁绫诲瀷
-        int billTypeId = 900;
-        int transactionNo = 902;
+        // 4. 鏍规嵁鏉$爜澶囨敞纭畾鍗曟嵁绫诲瀷鍜屼氦鏄撳彿
+        var billTypeId = 900; // 榛樿鍗曟嵁绫诲瀷
+        var transactionNo = 902; // 榛樿浜ゆ槗鍙�(鍗婃垚鍝佸伐搴�)
         switch (barcode.Memo?.Trim() ?? "0")
         {
             case "涓濆嵃":
-                transactionNo = 901;
+                transactionNo = 901; // 涓濆嵃宸ュ簭
                 break;
             case "鍗婃垚鍝�":
-                transactionNo = 902;
+                transactionNo = 902; // 鍗婃垚鍝佸伐搴�
                 break;
             case "鎴愬搧":
             case "鍖呰":
-                transactionNo = 903;
+                transactionNo = 903; // 鎴愬搧/鍖呰宸ュ簭
                 break;
         }
 
-        // 姹囨�诲凡鎵潯鐮佹暟閲�
+        // 5. 姹囨�诲凡鎵潯鐮佹暟閲忥紝楠岃瘉鏄惁瓒呭嚭璁″垝鏁伴噺
         var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) =>
                 new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo))
             .Where((a, b) => a.BillTypeId == billTypeId
@@ -260,16 +303,17 @@
             throw new Exception(
                 $"鏈鎶ュ伐鏁伴噺锛歿request.Quantity} 澶т簬鍓╀綑鎶ュ伐鏁伴噺锛歿womdaa.Daa008 - (sumQty - request.Quantity)}锛岃鏍稿锛�");
 
+        // 6. 寮�鍚簨鍔″鐞嗘姤宸ユ暟鎹�
         return UseTransaction(db =>
         {
-            // 鏇存柊鏉$爜淇℃伅
+            // 6.1 鏇存柊鏉$爜淇℃伅锛岃缃凡鎶ュ伐鏍囪鍜屾暟閲�
             db.Updateable<MesInvItemBarcodes>()
                 .SetColumns(x => x.WorkFlg == true)
                 .SetColumns(x => x.Quantity == request.Quantity)
                 .Where(x => x.Guid == barcode.Guid)
                 .ExecuteCommand();
 
-            // 鑾峰彇鎴栧垱寤烘姤宸ュ崟
+            // 6.2 鑾峰彇鎴栧垱寤烘姤宸ュ崟
             var workProd = db.Queryable<MesWorkProd>()
                 .Where(x => x.TaskNo == barcode.BillNo
                             && x.CreateDate.Value.Date.ToString("yyyy-MM-dd") ==
@@ -279,12 +323,13 @@
                             && x.Status == 0)
                 .First();
 
+            // 6.3 濡傛灉鎶ュ伐鍗曚笉瀛樺湪鍒欏垱寤烘柊鐨勬姤宸ュ崟
             if (workProd == null)
             {
-                var billNo = BillNo.GetBillNo("MES_WORK");
+                var billNo = BillNo.GetBillNo("BG(鎶ュ伐缂栧彿)");
                 workProd = new MesWorkProd
                 {
-                    Id = Guid.NewGuid(), 
+                    Id = Guid.NewGuid(),
                     BillNo = billNo,
                     LineNo = barcode.LineNo,
                     Company = barcode.Company,
@@ -293,7 +338,7 @@
                     CreateDate = DateTime.Now,
                     LastupdateBy = request.UserNo,
                     LastupdateDate = DateTime.Now,
-                    PbillNo = barcode.BillNo, // Added PbillNo field
+                    PbillNo = barcode.BillNo,
                     BillTypeId = billTypeId,
                     TransactionNo = transactionNo,
                     TaskNo = barcode.BillNo
@@ -302,10 +347,10 @@
                 db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand();
             }
 
-            // 鎻掑叆鎶ュ伐鏄庣粏
+            // 6.4 鎻掑叆鎶ュ伐鏄庣粏璁板綍
             var detail = new MesWorkProdCDetails
             {
-                Id = Guid.NewGuid(), 
+                Id = Guid.NewGuid(),
                 BillNo = workProd.BillNo,
                 ItemBarcode = request.ItemBarcode,
                 Quantity = (int)request.Quantity,
@@ -316,7 +361,7 @@
                 LastupdateBy = request.UserNo,
                 LastupdateDate = DateTime.Now,
                 ItemNo = barcode.ItemNo,
-                PbillNo = barcode.BillNo, // Added PbillNo from barcode
+                PbillNo = barcode.BillNo,
                 WorkLast = barcode.WorkLast,
                 SilkPqty = barcode.SilkPqty,
                 SilkId = barcode.SilkId,

--
Gitblit v1.9.3