From e4f3c5ff76f7e410e61a52215b97799c07dd4a9b Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期二, 04 十一月 2025 11:23:37 +0800
Subject: [PATCH] 1.调拨出库优化 2.WOMDAA里新增”库位查询“方法 3.一键调拨存储过程调用

---
 appsettings.json                               |    2 
 service/Warehouse/TransferOutManager.cs        |  251 ++++++++++++++++++++++++-----------
 service/Wom/WomdaaManager.cs                   |   33 ++++
 Controllers/Wom/WomdaaController.cs            |   27 +++
 Controllers/Warehouse/TransferOutController.cs |   55 +++++++
 5 files changed, 282 insertions(+), 86 deletions(-)

diff --git a/Controllers/Warehouse/TransferOutController.cs b/Controllers/Warehouse/TransferOutController.cs
index e4a02de..b3f95c9 100644
--- a/Controllers/Warehouse/TransferOutController.cs
+++ b/Controllers/Warehouse/TransferOutController.cs
@@ -4,6 +4,7 @@
 using NewPdaSqlServer.service.@base;
 using NewPdaSqlServer.service.Warehouse;
 using NewPdaSqlServer.util;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
 
 namespace NewPdaSqlServer.Controllers.Warehouse;
 
@@ -12,7 +13,7 @@
 /// </summary>
 [Route("api/[controller]")]
 [ApiController]
-public class TransferOutController : ControllerBase
+public class TransferOutController : BaseController
 {
     private readonly TransferOutManager _manager = new();
 
@@ -114,7 +115,7 @@
         try
         {
             dynamic resultInfos = new ExpandoObject();
-            resultInfos.tbBillList = _manager.GetTransferOutNoList();
+            resultInfos.tbBillList = _manager.GetTransferOutNoList(RequestInfo);
             return new ResponseResult
             {
                 status = 0,
@@ -155,7 +156,7 @@
         {
             dynamic resultInfos = new ExpandoObject();
             resultInfos.tbBillList =
-                _manager.GetTransferOutDetailListByBillNo(query);
+                _manager.GetTransferOutDetailListByBillNo(query, RequestInfo);
             return new ResponseResult
             {
                 status = 0,
@@ -294,4 +295,52 @@
     }
 
     #endregion
+
+    #region 涓�閿皟鎷ㄤ笟鍔�
+
+    /// <summary>
+    ///     涓�閿皟鎷ㄥ鐞�
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>澶勭悊缁撴灉</returns>
+    /// <remarks>
+    ///     璇锋眰绀轰緥:
+    ///     POST /api/TransferOut/ScanYjdb
+    ///     {
+    ///     "billNo": "DB202401010001",  // 璋冩嫧鍗曞彿(蹇呭~)
+    ///     "userName": "admin",          // 鐢ㄦ埛鍚�(蹇呭~)
+    ///     "barcode": "BC001",          // 鏉$爜鍙�(蹇呭~)
+    ///     "sectionCode": "A1-01-01"     // 璋冨叆搴撲綅(蹇呭~)
+    ///     }
+    /// </remarks>
+    [HttpPost("ScanYjdb")]
+    public ResponseResult ScanYjdb([FromBody] WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = _manager.ScanYjdb(query);
+            if (resultInfos.tbBillList.result == "2")
+            {
+                return new ResponseResult
+                {
+                    status = Convert.ToInt32(resultInfos.tbBillList.result),
+                    message = resultInfos.tbBillList.strMsg,
+                    data = resultInfos
+                };
+            }
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    #endregion
 }
\ No newline at end of file
diff --git a/Controllers/Wom/WomdaaController.cs b/Controllers/Wom/WomdaaController.cs
index f5dee1c..13093e9 100644
--- a/Controllers/Wom/WomdaaController.cs
+++ b/Controllers/Wom/WomdaaController.cs
@@ -295,6 +295,33 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+
+
+
+    /// <summary>
+    ///     鐢熶骇棰嗘枡鐐瑰嚮鐗╂枡鏄庣粏鑾峰彇鐩稿叧鏉$爜淇℃伅
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetBarKwByItemCK")]
+    public ResponseResult GetBarKwByItemCK(dynamic unity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetBarKwByItemCK(unity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
     #endregion
 
     #region 鐜板満绠$悊
diff --git a/appsettings.json b/appsettings.json
index 5e8a67e..13b877d 100644
--- a/appsettings.json
+++ b/appsettings.json
@@ -10,7 +10,7 @@
     "TestErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
     "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
     //"DataBaseConn": "Data Source=192.168.1.146,12468;Initial Catalog=TEST_MES;User ID=testUser;Password =qixi1qaz@WSXtest;Encrypt=True;TrustServerCertificate=True;"
-    "DataBaseConn": "Data Source=192.168.8.8;Initial Catalog=GS_MES;User ID=sa;Password =JianHui@2025;Encrypt=True;TrustServerCertificate=True;"
+    "DataBaseConn": "Data Source=192.168.8.8;Initial Catalog=YS_MES;User ID=sa;Password =JianHui@2025;Encrypt=True;TrustServerCertificate=True;"
   },
   "Version": "1.0.0",
   "X-KDApi-AcctID": "6244701c616bff",
diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs
index 34119aa..abee822 100644
--- a/service/Warehouse/TransferOutManager.cs
+++ b/service/Warehouse/TransferOutManager.cs
@@ -19,106 +19,87 @@
     ///     鑾峰彇鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃
     /// </summary>
     /// <returns>鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃</returns>
-    public List<string> GetTransferOutNoList()
+    public List<string> GetTransferOutNoList( dynamic RequestInfo)
     {
-        // 鍏堜粠鏁版嵁搴撹幏鍙朤ransfer_Out_ETAIL琛ㄧ殑鏁版嵁
-        var transferOutDetails = Db.Queryable<MesDbckDetail>().ToList();
+        var orgId = RequestInfo.OrgId;
 
-        // 浣跨敤LINQ瀵硅幏鍙栫殑鏁版嵁杩涜鍒嗙粍鍜岀瓫閫�
-        // 绛涢�夋潯浠�:鐢宠鏁伴噺(sq)涓嶇瓑浜庡凡鎵暟閲�(ys)鐨勮褰�
-        var result = transferOutDetails
-            .GroupBy(x => x.Pid)
-            .Select(g => new
-            {
-                pid = g.Key,
-                sq = g.Sum(x => x.FQty), // 鐢宠鏁伴噺鍚堣
-                ys = g.Sum(x => x.SQty), // 璋冨嚭宸叉壂鏁伴噺鍚堣
-                rs = g.Sum(x => x.RQty), // 璋冨叆宸叉壂鏁伴噺鍚堣
-            })
-            .Where(x => !((x.sq ?? 0) == (x.ys ?? 0) && (x.sq ?? 0) == (x.rs ?? 0)))
-            .Select(x => x.pid)
-            .ToList();
+        if (orgId == null)
+            throw new Exception("缁勭粐涓嶅瓨鍦紒");
 
-        // 鏍规嵁pid鏌ヨ瀵瑰簲鐨勫嚭搴撳崟鍙�
-        var billNos = Db.Queryable<MesDbck>()
-            .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1)
-            .OrderBy(x => x.FCreateDate)
-            .Select(x => x.FBillNo)
-            .ToList();
-
-        return billNos;
+        // 鑾峰彇鏈畬鎴愮殑閫�鏂欏崟鍙峰垪琛�
+        var parameters = new[]
+        {
+        new SugarParameter("@pi_orgId", orgId),
+        new SugarParameter("@inP1", null),
+        new SugarParameter("@inP2", null),
+        new SugarParameter("@inP3", null),
+        new SugarParameter("@inP4", null)
+        };
+        try
+        {
+            // 杩斿洖鍗曞彿瀛楃涓插垪琛℅et_Qt_ck_List
+            var list = Db.Ado.SqlQuery<string>(
+                "EXEC prc_pda_dbck_list @pi_orgId,@inP1,@inP2,@inP3,@inP4", parameters);
+            return list;
+        }
+        catch (Exception ex)
+        {
+            throw new Exception($"{ex.Message}");
+        }
     }
+    
 
     /// <summary>
     ///     鏍规嵁鍗曟嵁鍙疯幏鍙栧緟澶勭悊鐨勮皟鎷ㄥ嚭搴撴槑缁嗗垪琛�
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param>
     /// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns>
-    public ProductionPickDto GetTransferOutDetailListByBillNo(
-        WarehouseQuery query)
+    public dynamic GetTransferOutDetailListByBillNo(WarehouseQuery query, dynamic RequestInfo)
     {
-        if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璋冩嫧鍗曞彿涓虹┖");
+        if (string.IsNullOrEmpty(query.billNo))
+            throw new Exception("璇烽�夊崟鎹彿锛�");
 
-        var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo);
+        if (query == null)
+            throw new ArgumentNullException(nameof(query), "鍙傛暟瀵硅薄涓嶈兘涓簄ull");
 
-        var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1);
+        if (string.IsNullOrEmpty(query.billNo?.ToString()))
+            throw new ArgumentException("鍗曟嵁鍙蜂笉鑳戒负绌�", nameof(query.billNo));
 
-        if (dbck.Count < 1) throw new Exception("璋冩嫧鍗曞彿涓嶅瓨鍦ㄦ垨鏈鏍革紒");
+        var orgId = RequestInfo.OrgId;
 
-        var sql2 = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.FQty FQty,b.SQty SQty,b.FQty - b.SQty DSQty ,
-       dbo.F_QX_GETRECODEPOTSE(B.FMATERIALID,'','','') as RecoKw
-    FROM MES_DBCK_DETAIL B
-    LEFT JOIN MES_DBCK A ON A.ID = B.pid
-    LEFT JOIN MES_ITEMS C ON  B.FMATERIALID = C.item_id
-    LEFT JOIN WOMCAB D ON B.erpid = D.ERPID
-    WHERE A.FBillNo = '{0}'  ORDER BY FSEQ", query.billNo);
+        if (orgId == null)
+            throw new Exception("缁勭粐涓嶅瓨鍦紒");
 
-        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql2);
-
-
-        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
-
-        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
-
-        //var p_bill_no = query.billNo;
-
-        //// 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏
-        //// 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛�
-        //// 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳
-        //var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
-        //        (b, a, s) => new JoinQueryInfos(
-        //            JoinType.Left, b.Pid == a.Id,
-        //            JoinType.Left, b.FMaterialId == s.Id.ToString()))
-        //    .Where((b, a, s) =>
-        //        !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
-        //        && a.FBillNo == p_bill_no // 鍖归厤鍗曟嵁鍙�
-        //        && a.FApproveStatus == 1) // 鍗曟嵁宸插鏍�
-        //    .OrderBy((b, a, s) => s.ItemNo)
-        //    .Select((b, a, s) => new ItemDetailModel
-        //    {
-        //        ItemNo = s.ItemNo,
-        //        ItemName = s.ItemName,
-        //        ItemModel = s.ItemModel,
-        //        FQty = b.FQty, // 鐢宠鏁伴噺
-        //        SQty = b.SQty, // 宸叉壂鏁伴噺
-        //        RQty = b.RQty, // 宸叉壂鏁伴噺
-        //        // 淇濈暀鍏朵粬蹇呰瀛楁...
-        //        Pid = b.Pid.ToString(),
-        //        FMaterialId = b.FMaterialId,
-        //        Id = b.Id.ToString()
-        //    })
-        //    .ToList();
-
-        //if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�");
-
-        var dto = new ProductionPickDto
+        // 鑾峰彇鏈畬鎴愮殑鍙戣揣閫氱煡鍗曟槑缁�
+        var parameters = new[]
+{
+        new SugarParameter("@billNo", query.billNo),
+        new SugarParameter("@pi_orgId",orgId),
+        new SugarParameter("@inP1", null),
+        new SugarParameter("@inP2", null),
+        new SugarParameter("@inP3", null),
+        new SugarParameter("@inP4", null)
+    };
+        try
         {
-            items = DS_list,
-            Ysitems = YS_list
-            // yisao = mesInvItemOutCDetailsList
-        };
+            List<dynamic>? blDetails = Db.Ado.SqlQuery<dynamic>(
+                "EXEC prc_pda_dbck_detailList @billNo,@pi_orgId,@inP1,@inP2,@inP3,@inP4", parameters);
+            var items = blDetails.Where(x => x.DSQty > 0).ToList();    // 寰呮壂鐗╂枡
+            var ysitems = blDetails.Where(x => x.SQty > 0).ToList();   // 宸叉壂鐗╂枡
 
-        return dto;
+            return new
+            {
+                allList = blDetails,
+                blDetails = blDetails.Where(x => x.DSQty > 0).ToList(),
+                ysDetails = blDetails.Where(x => x.SQty > 0).ToList(),
+                Count = items.Count + ysitems.Count
+            };
+        }
+        catch (Exception ex)
+        {
+            // 淇濈暀鍘熸湁寮傚父澶勭悊閫昏緫
+            throw new Exception($"{ex.Message}");
+        }
     }
 
 
@@ -328,6 +309,112 @@
         }
     }
 
+
+    /// <summary>
+    ///     涓�閿皟鎷ㄥ鐞�
+    /// </summary>
+    /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕銆佹潯鐮佸拰搴撲綅淇℃伅鐨勬煡璇㈠弬鏁�</param>
+    /// <returns>澶勭悊缁撴灉</returns>
+    public ProductionPickDto ScanYjdb(WarehouseQuery query)
+    {
+        // 瀹夊叏鑾峰彇dynamic灞炴�у�硷紝閬垮厤绌哄紩鐢ㄥ紓甯�
+        var p_bill_no = query.billNo?.ToString() ?? string.Empty;
+        var p_item_barcode = query.barcode?.ToString() ?? string.Empty;
+        var p_kw = query.sectionCode?.ToString() ?? string.Empty;
+        var c_user = query.userName?.ToString() ?? string.Empty;
+
+        // 楠岃瘉鍗曟嵁鍙�
+        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+        // 楠岃瘉鏉$爜
+        if (string.IsNullOrEmpty(p_item_barcode)) throw new Exception("璇锋壂鎻忔潯鐮侊紒");
+        // 楠岃瘉搴撲綅
+        if (string.IsNullOrEmpty(p_kw)) throw new Exception("璇烽�夋嫨搴撲綅锛�");
+        // 楠岃瘉鐢ㄦ埛鍚�
+        if (string.IsNullOrEmpty(c_user)) throw new Exception("鐢ㄦ埛鍚嶄笉鑳戒负绌猴紒");
+
+        // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵��
+        var transferOut = Db.Queryable<MesDbck>()
+            .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
+            .First();
+        if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�");
+
+        // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇�
+        var stock = Db.Queryable<MesInvItemStocks>()
+            .Where(x => x.ItemBarcode == p_item_barcode
+                        && x.Quantity > 0)
+            .First();
+        if (stock == null) throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_item_barcode}");
+
+        // 鏌ヨ鐗╂枡淇℃伅
+        var item = Db.Queryable<MesItems>()
+            .Where(x => x.Id == stock.ItemId)
+            .First();
+        if (item == null) throw new Exception("鏈壘鍒扮墿鏂�");
+
+        var _strMsg = "";
+        var _intSum = "";
+        var barcode_num = 0m;
+        var split_num = 0m;
+
+        using (var conn = new SqlConnection(DbHelperSQL.strConn))
+        {
+            using (var cmd = new SqlCommand("[prc_pda_YJDB]", conn))
+            {
+                try
+                {
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] parameters =
+                    {
+                        new("@outMsg", SqlDbType.NVarChar, 2000),
+                        new("@outSum", SqlDbType.Int),
+                        new("@barcode_num", SqlDbType.Decimal, 18) { Precision = 18, Scale = 10 },
+                        new("@split_num", SqlDbType.Decimal, 18) { Precision = 18, Scale = 10 },
+                        new("@c_user", c_user),
+                        new("@p_bill_no", p_bill_no),
+                        new("@p_item_barcode", p_item_barcode),
+                        new("@p_kw", p_kw)
+                    };
+                    parameters[0].Direction = ParameterDirection.Output;
+                    parameters[1].Direction = ParameterDirection.Output;
+                    parameters[2].Direction = ParameterDirection.Output;
+                    parameters[3].Direction = ParameterDirection.Output;
+                    foreach (var parameter in parameters)
+                        cmd.Parameters.Add(parameter);
+                    cmd.ExecuteNonQuery();
+
+                    _strMsg = parameters[0].Value?.ToString() ?? "";
+                    _intSum = parameters[1].Value?.ToString() ?? "";
+                    barcode_num = parameters[2].Value != DBNull.Value ? Convert.ToDecimal(parameters[2].Value) : 0;
+                    split_num = parameters[3].Value != DBNull.Value ? Convert.ToDecimal(parameters[3].Value) : 0;
+
+                    var result = Convert.ToInt32(_intSum);
+                    if (result <= 0 && result != 2) throw new Exception(_strMsg);
+
+                    // 杩斿洖澶勭悊缁撴灉
+                    var dto = new ProductionPickDto
+                    {
+                        itemNo = item.ItemNo,
+                        barcodeNum = barcode_num.ToString(),
+                        splitNum = split_num.ToString(),
+                        barcode = p_item_barcode,
+                        strMsg = _strMsg,
+                        result = _intSum
+                    };
+
+                    return dto;
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    conn.Close();
+                }
+            }
+        }
+    }
     /// <summary>
     ///     鎵弿鏉$爜杩涜璋冩嫧鍏ュ簱澶勭悊
     /// </summary>
diff --git a/service/Wom/WomdaaManager.cs b/service/Wom/WomdaaManager.cs
index 3861ba6..acfba75 100644
--- a/service/Wom/WomdaaManager.cs
+++ b/service/Wom/WomdaaManager.cs
@@ -398,6 +398,39 @@
     }
 
 
+    /// <summary>
+    /// 鑾峰彇鐗╂枡鐩稿叧鏉$爜淇℃伅
+    /// </summary>
+    /// <param name="unity"></param>
+    /// <returns></returns>
+    /// <exception cref="Exception"></exception>
+    public dynamic GetBarKwByItemCK(dynamic unity)
+    {
+        if (unity == null)
+            throw new ArgumentNullException(nameof(unity), "鍙傛暟瀵硅薄涓嶈兘涓簄ull");
+
+        if (string.IsNullOrEmpty(unity.itemId?.ToString()))
+            throw new ArgumentException("鐗╂枡ID涓嶈兘涓虹┖", nameof(unity.itemId));
+
+        try
+        {
+            var parameters = new List<SugarParameter>
+            {
+                new SugarParameter("@itemId", unity.itemId),
+                new SugarParameter("@inP1", unity.type),
+                new SugarParameter("@inP2", unity.billNo)
+            };
+
+            return Db.Ado.SqlQuery<dynamic>("EXEC prc_pda_scll_selBarMx @itemId,@inP1,@inP2", parameters);
+        }
+        catch (Exception ex)
+        {
+            throw new Exception($"鑾峰彇鏉$爜淇℃伅澶辫触锛歿ex.Message}");
+        }
+
+    }
+
+
     public dynamic ProductBinding(dynamic query)
     {
         if (query == null) throw new ArgumentNullException(nameof(query), "鍙傛暟瀵硅薄涓嶈兘涓� null");

--
Gitblit v1.9.3