From 4fae819b7e89a751699b44474f4dedca5bcecc6a Mon Sep 17 00:00:00 2001
From: kyy <3283105747@qq.com>
Date: 星期三, 08 十月 2025 10:33:40 +0800
Subject: [PATCH] 1、采购验退

---
 Dto/service/WarehouseQuery.cs                           |    7 +
 entity/Base/ItemInBaseModel.cs                          |    8 +
 service/Warehouse/MesInvItemInCDetailsManager.cs        |  242 ++++++++++++++++++++++++++++++++++++++++
 Controllers/Warehouse/MesInvItemInCDetailsController.cs |   49 ++++++++
 4 files changed, 305 insertions(+), 1 deletions(-)

diff --git a/Controllers/Warehouse/MesInvItemInCDetailsController.cs b/Controllers/Warehouse/MesInvItemInCDetailsController.cs
index 026df77..d06388c 100644
--- a/Controllers/Warehouse/MesInvItemInCDetailsController.cs
+++ b/Controllers/Warehouse/MesInvItemInCDetailsController.cs
@@ -287,4 +287,53 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+
+    /// <summary>
+    ///   楠岄��鎵爜
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetReturnBarcodeInfo")]
+    public ResponseResult GetReturnBarcodeInfo(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetReturnBarcodeInfo(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = resultInfos.tbBillList.Message,
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///   楠岄�� 
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("ConfirmReturn")]
+    public ResponseResult ConfirmReturn(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.ConfirmReturn(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = resultInfos.tbBillList.Message,
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/Dto/service/WarehouseQuery.cs b/Dto/service/WarehouseQuery.cs
index ac13440..9312733 100644
--- a/Dto/service/WarehouseQuery.cs
+++ b/Dto/service/WarehouseQuery.cs
@@ -15,6 +15,11 @@
     public DateTime? date { get; set; }
     public string? Type { get; set; }
 
+    //楠岄��鏉$爜銆佹暟閲�
+    public string? returnBarcode { get; set; }
+    public decimal? returnQuantity { get; set; }
+
+
     //搴撲綅缂栫爜
     public string? DepotCode { get; set; }
 
@@ -35,4 +40,6 @@
 
     public string? itemNo { get; set; }
     public string? message { get; set; }
+
+
 }
\ No newline at end of file
diff --git a/entity/Base/ItemInBaseModel.cs b/entity/Base/ItemInBaseModel.cs
index dc6418e..d7f5548 100644
--- a/entity/Base/ItemInBaseModel.cs
+++ b/entity/Base/ItemInBaseModel.cs
@@ -5,12 +5,16 @@
 //璋冩嫧鍑哄叆搴撳崟閫氱敤绫�
 public class ItemInBaseModel
 {
+   
+
     //鐗╂枡淇℃伅
     public MesItems itemDetail { get; set; }
-    //鏉$爜鏄庣粏
+    //鍏ュ簱鏉$爜鏄庣粏
     public List<dynamic>? ItemBarCDetails { get; set; }
     //鐗╂枡姹囨�绘槑缁�
     public List<dynamic>? ItemInDetails { get; set; }
+    public MesInvItemBarcodes itemBarcodeDetails { get; set; }
+    
     //鍑�/鍏ュ簱鍗曚俊鎭�
     public List<dynamic>? MesInvItem { get; set; }
 
@@ -19,4 +23,6 @@
 
     //鍏ュ簱鎬绘暟
     public decimal? SumQuantity { get; set; }
+
+
 }
\ No newline at end of file
diff --git a/service/Warehouse/MesInvItemInCDetailsManager.cs b/service/Warehouse/MesInvItemInCDetailsManager.cs
index 8dfc5d4..c8271a1 100644
--- a/service/Warehouse/MesInvItemInCDetailsManager.cs
+++ b/service/Warehouse/MesInvItemInCDetailsManager.cs
@@ -7,6 +7,9 @@
 using NewPdaSqlServer.util;
 using Newtonsoft.Json;
 using SqlSugar;
+using System;
+using System.Data;
+using System.Data.SqlClient;
 using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
 
 namespace NewPdaSqlServer.service.Warehouse;
@@ -1140,4 +1143,243 @@
 
         return encodedUrl;
     }
+
+    // 楠岄��鎵爜
+    public ItemInBaseModel GetReturnBarcodeInfo(WarehouseQuery entity)
+    {
+        ItemInBaseModel res = new ItemInBaseModel();
+
+        // 鍙傛暟楠岃瘉
+        if (string.IsNullOrEmpty(entity.userName)) throw new ArgumentNullException(nameof(entity.userName), "鐢ㄦ埛鍚嶄笉鍏佽涓虹┖");
+        if (string.IsNullOrEmpty(entity.sectionCode)) throw new ArgumentNullException(nameof(entity.sectionCode), "搴撲綅缂栧彿涓嶅厑璁镐负绌�");
+        if (string.IsNullOrEmpty(entity.returnBarcode)) throw new ArgumentNullException(nameof(entity.returnBarcode), "鏉$爜涓嶅厑璁镐负绌�");
+
+        try
+        {
+            // 妫�鏌ユ潯鐮佹槸鍚﹀凡鍏ュ簱
+            var isInStock = Db.Queryable<MesInvItemInCDetails>()
+                .Where(it => it.ItemBarcode == entity.returnBarcode)
+                .Any();
+
+            if (isInStock)
+                throw new Exception($"璇ユ潯鐮佺墿鏂橻{entity.returnBarcode}]宸插叆搴擄紝涓嶈兘鍐嶆鎵弿锛�");
+
+            // 妫�鏌ユ潯鐮佹槸鍚﹀凡鎵弿楠岄��
+            var sqlParams = new List<SugarParameter> { new("@barcode", entity.returnBarcode) };
+            var isReturnScanned = Db.Ado.SqlQuery<dynamic>(
+                "SELECT 1 FROM MES_INV_ITEM_CGYT_C_DETAILS WHERE ITEM_BARCODE = @barcode",
+                sqlParams);
+
+
+            if (isReturnScanned.Count > 0)
+                throw new Exception($"璇ユ潯鐮佺墿鏂橻{entity.returnBarcode}]宸叉壂鎻忛獙閫�锛岃鏍稿锛�");
+            // 浣跨敤鍙傛暟鍖栨煡璇㈠苟蹇界暐澶у皬鍐欙紙閫傜敤浜庢敮鎸佺殑鏁版嵁搴擄級
+            var itemBarcode = Db.Queryable<MesInvItemBarcodes>()
+                .Where(it => it.ItemBarcode.Trim().ToLower() == entity.returnBarcode.Trim().ToLower())
+                .First() ?? throw new InvalidOperationException($"鏈壘鍒版潯鐮� '{entity.returnBarcode}' 鐨勫尮閰嶄俊鎭�");
+
+            // 灏嗘煡璇㈠埌鐨勬潯鐮佷俊鎭祴鍊肩粰杩斿洖妯″瀷
+            res.itemBarcodeDetails = itemBarcode;
+
+           
+            res.Message = "鏌ヨ鎴愬姛";
+           
+
+            return res;
+        }
+        catch (Exception ex)
+        {
+            // 璁板綍寮傚父鏃ュ織锛堝缓璁ˉ鍏呭叿浣撴棩蹇楄褰曚唬鐮侊級
+            res.Message = $"鎿嶄綔澶辫触: {ex.Message}";
+            res.SumQuantity = -1;
+            return res;
+        }
+    }
+
+    // 楠岄��
+    public ItemInBaseModel ConfirmReturn(WarehouseQuery entity)
+    {
+        ItemInBaseModel res = new ItemInBaseModel();
+
+        // 鍙傛暟楠岃瘉
+        if (string.IsNullOrEmpty(entity.userName)) throw new ArgumentNullException(nameof(entity.userName), "鐢ㄦ埛鍚嶄笉鍏佽涓虹┖");
+        if (string.IsNullOrEmpty(entity.sectionCode)) throw new ArgumentNullException(nameof(entity.sectionCode), "搴撲綅缂栧彿涓嶅厑璁镐负绌�");
+        if (string.IsNullOrEmpty(entity.returnBarcode)) throw new ArgumentNullException(nameof(entity.returnBarcode), "鏉$爜涓嶅厑璁镐负绌�");
+        if (entity.returnQuantity <= 0) throw new ArgumentException("楠岄��鏁伴噺蹇呴』澶т簬0", nameof(entity.returnQuantity));
+
+        try
+        {
+            // 妫�鏌ユ潯鐮佹槸鍚﹀凡鍏ュ簱
+            var isInStock = Db.Queryable<MesInvItemInCDetails>()
+                .Where(it => it.ItemBarcode == entity.returnBarcode)
+                .Any();
+
+            if (isInStock)
+                throw new Exception($"璇ユ潯鐮佺墿鏂橻{entity.returnBarcode}]宸插叆搴擄紝涓嶈兘鍐嶆鎵弿锛�");
+
+            // 妫�鏌ユ潯鐮佹槸鍚﹀凡鎵弿楠岄��
+            var sqlParams = new List<SugarParameter> { new("@barcode", entity.returnBarcode) };
+            var isReturnScanned = Db.Ado.SqlQuery<dynamic>(
+                "SELECT 1 FROM MES_INV_ITEM_CGYT_C_DETAILS WHERE ITEM_BARCODE = @barcode",
+                sqlParams);
+
+
+            // 璋冪敤瀛樺偍杩囩▼ prc_pda_bar_cf_before
+            string strMsg = "";
+            string intSum = "";
+            string cfBar = "";
+            
+            using (var conn = new SqlConnection(DbHelperSQL.strConn))
+            {
+                using (var cmd = new SqlCommand("[prc_pda_bar_cf_before]", conn))
+                {
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] parameters =
+                    {
+                        new("@outMsg", SqlDbType.NVarChar, 300),
+                        new("@outSum", SqlDbType.NVarChar, 300),
+                        new("@barcode_new", SqlDbType.NVarChar, 300),
+                        new("@c_user", entity.userName),
+                        new("@p_old_barcode", entity.returnBarcode),
+                        new("@p_qty", entity.returnQuantity),
+                    };
+                    parameters[0].Direction = ParameterDirection.Output;
+                    parameters[1].Direction = ParameterDirection.Output;
+                    parameters[2].Direction = ParameterDirection.Output;
+
+                    foreach (var parameter in parameters)
+                        cmd.Parameters.Add(parameter);
+                    cmd.ExecuteNonQuery();
+                    strMsg = parameters[0].Value.ToString();
+                    intSum = parameters[1].Value.ToString();
+                    cfBar = parameters[2].Value.ToString();
+
+                    var result = Convert.ToInt32(intSum);
+                    if (result <= 0) throw new Exception(strMsg);
+                }
+            }
+
+            // 璋冪敤楠岄��瀛樺偍杩囩▼ prc_pda_scan_CGYT锛屼娇鐢ㄦ媶鍒嗗悗鐨勬柊鏉$爜
+            string ytMsg = "";
+            string ytSum = "";
+            string ytdh = "";
+            
+            using (var conn = new SqlConnection(DbHelperSQL.strConn))
+            {
+                using (var cmd = new SqlCommand("prc_pda_scan_CGYT", conn))
+                {
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] ytParameters =
+                    {
+                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = entity.userName },
+                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = cfBar }, // 浣跨敤鎷嗗垎鍚庣殑鏂版潯鐮�
+                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
+                        new("@po_outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
+                        new("@po_ygdh", SqlDbType.NVarChar, 200) { Direction = ParameterDirection.Output }
+                    };
+
+                    cmd.Parameters.AddRange(ytParameters);
+                    cmd.ExecuteNonQuery();
+                    
+                    ytMsg = ytParameters[2].Value.ToString();
+                    ytSum = ytParameters[3].Value.ToString();
+                    ytdh = ytParameters[4].Value.ToString();
+
+                    if (ytSum == "-1") throw new Exception(ytMsg);
+                }
+            }
+
+            // 璋冪敤鍏ュ簱瀛樺偍杩囩▼ prc_pda_inv_cgrk锛屼娇鐢ㄥ師濮嬫潯鐮�
+            string rkMsg = "";
+            string rkSum = "";
+            
+            using (var conn = new SqlConnection(DbHelperSQL.strConn))
+            {
+                using (var cmd = new SqlCommand("prc_pda_inv_cgrk", conn))
+                {
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] rkParameters =
+                    {
+                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = entity.userName },
+                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = entity.returnBarcode }, // 浣跨敤鍘熷鏉$爜
+                        new("@pi_sectionCode", SqlDbType.NVarChar, 100) { Value = entity.sectionCode },
+                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
+                        new("@po_outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
+                    };
+
+                    cmd.Parameters.AddRange(rkParameters);
+                    cmd.ExecuteNonQuery();
+                    
+                    rkMsg = rkParameters[3].Value.ToString();
+                    rkSum = rkParameters[4].Value.ToString();
+
+                    if (rkSum == "-1") throw new Exception(rkMsg);
+                }
+            }
+
+            // 浣跨敤鍙傛暟鍖栨煡璇㈠苟蹇界暐澶у皬鍐欙紙閫傜敤浜庢敮鎸佺殑鏁版嵁搴擄級
+            var itemBarcode = Db.Queryable<MesInvItemBarcodes>()
+                .Where(it => it.ItemBarcode.Trim().ToLower() == entity.returnBarcode.Trim().ToLower())
+                .First() ?? throw new InvalidOperationException($"鏈壘鍒版潯鐮� '{entity.returnBarcode}' 鐨勫尮閰嶄俊鎭�");
+
+            // 灏嗘煡璇㈠埌鐨勬潯鐮佷俊鎭祴鍊肩粰杩斿洖妯″瀷
+            res.itemBarcodeDetails = itemBarcode;
+
+            // 浼樺寲鏌ヨ锛堝幓闄ょ┖鏍煎苟蹇界暐澶у皬鍐欙級
+            var mesInvItemInCDetails = Db.Queryable<MesInvItemInCDetails>()
+                .Where(it => it.ItemBarcode.Trim().ToLower() == entity.returnBarcode.Trim().ToLower())
+                .First() ?? throw new InvalidOperationException($"鏈壘鍒版潯鐮� '{entity.returnBarcode}' 鐨勫尮閰嶇殑鍏ュ簱淇℃伅");
+
+            // 浠庡叆搴撴潯鐮佷腑鑾峰彇鏈夋晥鐨処temInId
+            var cId = mesInvItemInCDetails.ItemInId; // 鍋囪瀛樺湪ItemInId灞炴��
+
+            // 鏌ヨ鐗╂枡姹囨�绘槑缁嗭紙浣跨敤鍙傛暟鍖栨煡璇㈤槻姝QL娉ㄥ叆锛�
+            var sql = @"
+            SELECT 
+                b.Item_No AS ItemNo,
+                b.Item_Name AS ItemName,
+                b.Item_Model AS ItemModel,
+                a.Quantity AS FQty,
+                b.Item_Id AS FMaterialId,
+                CONVERT(VARCHAR(36), b.Guid) AS Id
+            FROM MES_INV_ITEM_IN_C_ITEMS a
+            LEFT JOIN Mes_Items b ON a.Item_Id = b.Item_Id
+            WHERE a.Item_In_Id = @cId AND a.Item_Id = @itemId";
+
+            res.ItemInDetails = Db.Ado.SqlQuery<dynamic>(sql, new { cId, itemId = itemBarcode.ItemId });
+
+            // 鏌ヨ鍏ュ簱鏉$爜鏄庣粏锛堜娇鐢ㄥ弬鏁板寲鏌ヨ闃叉SQL娉ㄥ叆锛�
+            var sql2 = @"
+            SELECT 
+                b.Item_No AS ItemNo,
+                b.Item_Name AS ItemName,
+                b.Item_Model AS ItemModel,
+                a.Quantity AS FQty,
+                b.Item_Id AS FMaterialId,
+                CONVERT(VARCHAR(36), a.Guid) AS Id,
+                a.Depot_Section_Code AS kw,
+                a.Item_Barcode AS barcode
+            FROM Mes_Inv_Item_In_C_Details a
+            LEFT JOIN Mes_Items b ON a.Item_Id = b.Item_Id
+            WHERE a.Item_In_Id = @cId AND a.Item_Id = @itemId";
+
+            res.ItemBarCDetails = Db.Ado.SqlQuery<dynamic>(sql2, new { cId, itemId = itemBarcode.ItemId });
+
+            res.Message = $"楠岄��鎿嶄綔鎴愬姛锛屾媶鍒嗗悗鏉$爜锛歿cfBar}锛岄獙閫�鍗曞彿锛歿ytdh}";
+            res.SumQuantity = res.ItemBarCDetails?.Count ?? 0;
+
+            return res;
+        }
+        catch (Exception ex)
+        {
+            // 璁板綍寮傚父鏃ュ織锛堝缓璁ˉ鍏呭叿浣撴棩蹇楄褰曚唬鐮侊級
+            res.Message = $"鎿嶄綔澶辫触: {ex.Message}";
+            res.SumQuantity = -1;
+            return res;
+        }
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3