From 459621921ba77d8cc8bf0789209b76d387b820e8 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期三, 27 八月 2025 09:29:44 +0800
Subject: [PATCH] 1.携客云字段优化 2.库位变更——hyx

---
 Controllers/Warehouse/KwbgController.cs |   89 ++++++++++++++
 service/Warehouse/KwbgManager.cs        |  219 ++++++++++++++++++++++++++++++++++++
 Dto/Xky/XkyBarcodeDataDto.cs            |    2 
 3 files changed, 309 insertions(+), 1 deletions(-)

diff --git a/Controllers/Warehouse/KwbgController.cs b/Controllers/Warehouse/KwbgController.cs
new file mode 100644
index 0000000..029b76d
--- /dev/null
+++ b/Controllers/Warehouse/KwbgController.cs
@@ -0,0 +1,89 @@
+锘縰sing System.Dynamic; // 寮曞叆鍔ㄦ�佺被鍨嬫敮鎸�
+using Masuit.Tools.Win32.AntiVirus; // 寮曞叆闃茬梾姣掑伐鍏峰簱锛堜絾鏈湪浠g爜涓娇鐢級
+using Microsoft.AspNetCore.Mvc; // 寮曞叆ASP.NET Core MVC鍔熻兘
+using NewPdaSqlServer.Dto.service; // 寮曞叆椤圭洰鐗瑰畾鐨凞TO鏈嶅姟
+using NewPdaSqlServer.entity; // 寮曞叆椤圭洰瀹炰綋绫�
+using NewPdaSqlServer.service.@base; // 寮曞叆鍩虹鏈嶅姟
+using NewPdaSqlServer.service.Warehouse; // 寮曞叆浠撳簱鏈嶅姟
+using NewPdaSqlServer.util; // 寮曞叆宸ュ叿绫�
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory; // 寮曞叆EF鏃ュ織绫诲埆锛堜絾鏈湪浠g爜涓娇鐢級
+
+namespace NewPdaSqlServer.Controllers.Warehouse; // 鎺у埗鍣ㄥ懡鍚嶇┖闂�
+
+/// <summary>
+/// 搴撲綅鍙樻洿鎺у埗鍣紝澶勭悊涓庡簱浣嶅彉鏇寸浉鍏崇殑API璇锋眰
+/// </summary>
+[ApiController] // 鏍囪璇ョ被涓篈PI鎺у埗鍣紝鑷姩杩涜妯″瀷楠岃瘉鍜岄敊璇鐞�
+[Route("api/[controller]")] // 瀹氫箟鎺у埗鍣ㄨ矾鐢辨ā鏉匡紝璺敱鍓嶇紑涓篴pi/鎺у埗鍣ㄥ悕锛圞wbg锛�
+public class KwbgController : ControllerBase // 鎺у埗鍣ㄧ被缁ф壙鑷狢ontrollerBase锛屾彁渚沇eb API鍔熻兘
+{
+    private readonly KwbgManager k = new(); // 鍒涘缓搴撲綅鍙樻洿绠$悊鍣ㄥ疄渚嬶紝鐢ㄤ簬澶勭悊涓氬姟閫昏緫
+    private readonly MesPrintMangeer _kBG = new(); // 鍒涘缓鎵撳嵃绠$悊鍣ㄥ疄渚嬶紝鐢ㄤ簬澶勭悊鎵撳嵃鐩稿叧涓氬姟
+
+    /// <summary>
+    /// 鑾峰彇鏉$爜淇℃伅鍜岀墿鏂欎俊鎭�
+    /// </summary>
+    /// <param name="unity">鍓嶇浼犻�掔殑WarehouseQuery瀵硅薄锛屽寘鍚煡璇㈠弬鏁�</param>
+    /// <returns>缁熶竴鐨勫搷搴旂粨鏋滐紝鍖呭惈鏉$爜淇℃伅鍜岀墿鏂欎俊鎭�</returns>
+    [HttpPost("GetBarInfo")] // 瀹氫箟HTTP POST鏂规硶鍙婂瓙璺敱锛岃闂矾寰勪负api/Kwbg/GetBarInfo
+    //public ResponseResult GetBarInfo(dynamic unity) // 鏃ф柟娉曠鍚嶏紝鍙傛暟涓篸ynamic绫诲瀷锛堝凡娉ㄩ噴锛�
+    public ResponseResult GetBarInfo(dynamic unity) // 鏂版柟娉曠鍚嶏紝鍙傛暟涓篧arehouseQuery绫诲瀷
+    {
+        try // 鎹曡幏寮傚父锛屼繚璇佹帴鍙gǔ瀹氭��
+        {
+            dynamic resultInfos = new ExpandoObject(); // 鍒涘缓鍔ㄦ�佸璞★紝鐢ㄤ簬瀛樺偍杩斿洖缁撴灉
+            resultInfos.tbBillList = k.GetBarInfo(unity); // 璋冪敤绠$悊鍣ㄦ柟娉曪紝鑾峰彇鏉$爜淇℃伅锛岃祴鍊肩粰鍔ㄦ�佸璞$殑tbBillList灞炴��
+            return new ResponseResult // 鏋勯�犵粺涓�鍝嶅簲缁撴灉瀵硅薄
+            {
+                status = 0, // 鐘舵�佺爜0琛ㄧず鎴愬姛
+                message = "OK", // 杩斿洖娑堟伅涓篛K
+                data = resultInfos // 杩斿洖鏁版嵁涓哄姩鎬佸璞★紝鍖呭惈鏉$爜鍜岀墿鏂欎俊鎭�
+            };
+        }
+        catch (Exception ex) // 鎹曡幏鎵�鏈夊紓甯�
+        {
+            return ResponseResult.ResponseError(ex); // 璋冪敤缁熶竴閿欒澶勭悊鏂规硶锛岃繑鍥為敊璇搷搴�
+        }
+    }
+
+    /// <summary>
+    /// 搴撲綅鍙樻洿鎺ュ彛銆�
+    /// 鎺ユ敹鍓嶇浼犻�掔殑WarehouseQuery鍙傛暟锛屽畬鎴愭潯鐮佸彉鏇村強鐩稿叧淇℃伅鐨勬煡璇㈠拰杩斿洖銆�
+    /// </summary>
+    /// <param name="unity">
+    /// WarehouseQuery瀵硅薄锛屽寘鍚潯鐮併�佹媶鍒嗘暟閲忋�佺敤鎴峰悕绛夊簱浣嶅彉鏇存墍闇�鍙傛暟銆�
+    /// </param>
+    /// <returns>
+    /// 杩斿洖ResponseResult缁熶竴鍝嶅簲瀵硅薄锛宻tatus涓�0琛ㄧず鎴愬姛锛宒ata鍖呭惈鍙樻洿鍚庣殑鏉$爜鍙婃墦鍗颁俊鎭��
+    /// </returns>
+    [HttpPost("ChangeDepotSection")]
+    public ResponseResult ChangeDepotSection(dynamic unity)
+    {
+        try
+        {
+            // 鍒涘缓鍔ㄦ�佸璞esultInfos锛岀敤浜庡瓨鍌ㄨ繑鍥炵粨鏋�
+            dynamic resultInfos = new ExpandoObject();
+            // 鍒濆鍖杢bBillList灞炴�т负鍔ㄦ�佸璞★紝鐢ㄤ簬瀛樺偍鏉$爜鐩稿叧淇℃伅
+            resultInfos.tbBillList = new ExpandoObject();
+
+            //resultInfos.tbBillList.printInfo = _kBG.getPrintInfo(unity);// 鑾峰彇鎵撳嵃淇℃伅锛岃皟鐢ㄦ墦鍗扮鐞嗗櫒鐨刧etPrintInfo鏂规硶锛岀粨鏋滆祴鍊肩粰tbBillList.printInfo
+            
+            // 璋冪敤搴撲綅鍙樻洿绠$悊鍣ㄧ殑ChangeDepotSection鏂规硶锛屾墽琛屾潯鐮佸彉鏇存搷浣滐紝杩斿洖鎷嗗垎缁撴灉scanResult
+            var scanResult = k.ChangeDepotSection(unity);
+
+            //resultInfos.tbBillList.cfBarInfo = _kBG.getCfInfo(scanResult);// 鑾峰彇鎷嗗垎鍚庢潯鐮佺殑璇︾粏淇℃伅锛岃皟鐢ㄦ墦鍗扮鐞嗗櫒鐨刧etCfInfo鏂规硶锛岀粨鏋滆祴鍊肩粰tbBillList.cfBarInfo
+            // 鏋勯�犲苟杩斿洖缁熶竴鍝嶅簲瀵硅薄锛宻tatus涓�0琛ㄧず鎴愬姛锛宮essage涓�"OK"锛宒ata涓簉esultInfos
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            // 鎹曡幏寮傚父锛岃皟鐢ㄧ粺涓�閿欒澶勭悊鏂规硶ResponseError锛岃繑鍥為敊璇搷搴�
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Dto/Xky/XkyBarcodeDataDto.cs b/Dto/Xky/XkyBarcodeDataDto.cs
index 3759eb8..d713ae0 100644
--- a/Dto/Xky/XkyBarcodeDataDto.cs
+++ b/Dto/Xky/XkyBarcodeDataDto.cs
@@ -29,7 +29,7 @@
         public string OuterBarcode { get; set; }
 
         [JsonProperty("includeQty")]
-        public int IncludeQty { get; set; }
+        public decimal IncludeQty { get; set; }
 
         [JsonProperty("smallPackageLength")]
         public int? SmallPackageLength { get; set; }
diff --git a/service/Warehouse/KwbgManager.cs b/service/Warehouse/KwbgManager.cs
new file mode 100644
index 0000000..93f22ef
--- /dev/null
+++ b/service/Warehouse/KwbgManager.cs
@@ -0,0 +1,219 @@
+锘縰sing System.Data;
+using System.Data.SqlClient;
+using Masuit.Tools;
+using Masuit.Tools.Hardware;
+using NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.entity;
+using SqlSugar;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
+
+namespace NewPdaSqlServer.service.Warehouse;
+
+/// <summary>
+/// 搴撲綅鍙樻洿绠$悊绫伙紝缁ф壙鑷�氱敤浠撳偍绫籖epository锛屾搷浣滈噰璐��璐х敵璇疯〃锛圡esCgthSq锛�
+/// </summary>
+public class KwbgManager : Repository<MesCgthSq>
+{
+    /// <summary>
+    /// 鏍规嵁浼犲叆鐨刉arehouseQuery瀵硅薄锛堝寘鍚潯鐮佷俊鎭級锛屾煡璇㈢墿鏂欏簱瀛樿〃MES_INV_ITEM_STOCKS锛岃幏鍙栧搴旂殑搴撳瓨淇℃伅
+    /// </summary>
+    /// <param name="unity">WarehouseQuery瀵硅薄锛屽寘鍚潯鐮佺紪鍙风瓑鏌ヨ鏉′欢</param>
+    /// <returns>
+    /// 杩斿洖MES_INV_ITEM_STOCKS琛ㄤ腑涓庢潯鐮佸尮閰嶇殑绗竴鏉″簱瀛樹俊鎭紙MesInvItemStocks绫诲瀷锛夈��
+    /// 濡傛灉鏈壘鍒帮紝鍒欐姏鍑哄紓甯告彁绀衡�滆鏉$爜搴撳瓨涓嶅瓨鍦紒鈥�
+    /// resultInfos.tbBillList = m.GetBarInfo(unity);
+    /// </returns>
+    ///public MesInvItemStocks GetBarInfo(WarehouseQuery unity)
+    public dynamic GetBarInfo(dynamic query)
+    {
+        if (query == null)
+            throw new ArgumentNullException(nameof(query), "鍙傛暟瀵硅薄涓嶈兘涓簄ull");
+
+        if (string.IsNullOrEmpty(query.barcode?.ToString()))
+            throw new ArgumentException("鐗╂枡鏉$爜涓嶈兘涓虹┖", nameof(query.barcode));
+
+        var parameters = new[]
+    {
+        new SugarParameter("@pi_barcode", query.barcode),
+        new SugarParameter("@inP1", null),
+        new SugarParameter("@inP2", null),
+        new SugarParameter("@inP3", null),
+        new SugarParameter("@inP4", null)
+    };
+
+        try
+        {
+            List<dynamic>? ZsBarInfo = Db.Ado.SqlQuery<dynamic>(
+                "EXEC prc_pda_kwbg_selKwInfoByBarcode @pi_barcode,@inP1,@inP2,@inP3,@inP4", parameters);
+
+            return ZsBarInfo;
+        }
+        catch (Exception ex)
+        {
+            // 淇濈暀鍘熸湁寮傚父澶勭悊閫昏緫
+            throw new Exception($"{ex.Message}");
+        }
+    }
+
+    /// <summary>
+    /// 鏍规嵁鐗╂枡ID鏌ヨ鐗╂枡琛∕ES_ITEMS锛岃幏鍙栫墿鏂欒缁嗕俊鎭�
+    /// </summary>
+    /// <param name="strItemId">鐗╂枡ID锛坉ecimal绫诲瀷锛�</param>
+    /// <returns>
+    /// 杩斿洖MES_ITEMS琛ㄤ腑涓嶪D鍖归厤涓旀湭绂佺敤锛團forbidstatus涓�"A"锛夌殑绗竴鏉$墿鏂欎俊鎭紙MesItems绫诲瀷锛夈��
+    /// 濡傛灉鏈壘鍒帮紝鍒欐姏鍑哄紓甯告彁绀衡�滆鏉$爜瀵瑰簲鐗╂枡淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒鈥�
+    /// resultInfos.tbMesItems = m.GetItemNo(resultInfos.tbBillList.ItemId);
+    /// </returns>
+    public MesItems GetItemNo(decimal strItemId)
+    {
+        // 浣跨敤SqlSugar鐨凲ueryable鏂规硶锛屾煡璇ES_ITEMS琛�
+        // 鏉′欢锛欼d瀛楁绛変簬strItemId锛屼笖Fforbidstatus瀛楁涓�"A"锛堣〃绀烘湭绂佺敤锛�
+        var itemInfo = Db.Queryable<MesItems>()
+            .Where(s => s.Id == strItemId && s.Fforbidstatus == "A")
+            .First(); // 鑾峰彇绗竴鏉″尮閰嶈褰�
+
+        // 濡傛灉鏈煡璇㈠埌缁撴灉锛坕temInfo涓簄ull锛夛紝鍒欐姏鍑哄紓甯革紝鎻愮ず鐗╂枡淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢�
+        if (itemInfo is null) throw new Exception("璇ユ潯鐮佸搴旂墿鏂欎俊鎭笉瀛樺湪鎴栧凡绂佺敤锛�");
+
+        // 杩斿洖鏌ヨ鍒扮殑鐗╂枡淇℃伅瀵硅薄
+        return itemInfo;
+    }
+    /// <summary>
+    /// 浠撳簱淇℃伅琛�
+    /// </summary>
+    /// <param name="depot_id"></param>
+    /// <returns></returns>
+    public MesDepots GetDepot(decimal depot_id)
+    {
+        var depotInfo = Db.Queryable< MesDepots >()
+            .Where(s => s.DepotId == depot_id)
+            .First(); // 鑾峰彇绗竴鏉″尮閰嶈褰�
+        // 濡傛灉鏈煡璇㈠埌缁撴灉锛坕temInfo涓簄ull锛夛紝鍒欐姏鍑哄紓甯革紝鎻愮ず鐗╂枡淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢�
+        if (depotInfo is null) throw new Exception("璇ユ潯鐮佸簱瀛樹笉瀛樺湪浠撳簱锛�");
+        return depotInfo;
+    }
+
+
+
+    /// <summary>
+    /// 鍙樻洿搴撲綅
+    /// </summary>
+    /// <param name="unity"></param>
+    /// <returns></returns>
+    /// <exception cref="Exception"></exception>
+    public dynamic ChangeDepotSection(dynamic unity)
+    {
+        // 瀛樺偍杩囩▼杈撳嚭淇℃伅
+        var _strMsg = "";
+        // 瀛樺偍杩囩▼杈撳嚭鐨勬暟閲忥紙鐢ㄤ簬鍒ゆ柇鍙樻洿鏄惁鎴愬姛锛�
+        var _intSum = "";
+        // 瀛樺偍杩囩▼杈撳嚭鐨勬柊搴撲綅浠g爜
+        var _NewDepotSectionCode = ""; // 鏂板簱浣嶄唬鐮�
+
+        // 鍒涘缓SQL杩炴帴锛屼娇鐢ㄩ厤缃殑杩炴帴瀛楃涓�
+        using (var conn = new SqlConnection(DbHelperSQL.strConn))
+        {
+            //if (string.IsNullOrEmpty(query.barcode?.ToString()))
+            //throw new ArgumentException("鐗╂枡鏉$爜涓嶈兘涓虹┖", nameof(query.barcode));
+ 
+            if (string.IsNullOrEmpty(unity.userName?.ToString()))
+                throw new ArgumentException("鐢ㄦ埛鍚嶄笉鍏佽涓虹┖", nameof(unity.userName));
+            if (string.IsNullOrEmpty(unity.OldDepotSectionCode?.ToString()))
+                throw new ArgumentException("鍘熷簱浣嶄笉鍏佽涓虹┖", nameof(unity.OldDepotSectionCode));
+            if (string.IsNullOrEmpty(unity.NewDepotSectionCode?.ToString()))
+                throw new ArgumentException("鏂板簱浣嶄笉鍏佽涓虹┖", nameof(unity.NewDepotSectionCode));
+            if (string.IsNullOrEmpty(unity.barcode?.ToString()))
+                throw new ArgumentException("鐗╂枡鏉$爜涓嶅厑璁镐负绌�", nameof(unity.barcode));
+
+            //if (unity.userName.IsNullOrEmpty()) throw new Exception("鐢ㄦ埛鍚嶄笉鍏佽涓虹┖");
+            //if (unity.OldDepotSectionCode.IsNullOrEmpty()) throw new Exception("鍘熷簱浣嶄笉鍏佽涓虹┖");
+            //if (unity.NewDepotSectionCode.IsNullOrEmpty()) throw new Exception("鏂板簱浣嶄笉鍏佽涓虹┖");
+            //if (unity.barcode.IsNullOrEmpty()) throw new Exception("鐗╂枡鏉$爜涓嶅厑璁镐负绌�");
+
+            // 鍒涘缓SQL鍛戒护锛屾寚瀹氳鎵ц鐨勫瓨鍌ㄨ繃绋�
+            using (var cmd = new SqlCommand("[prc_pda_change_depot]", conn))
+            {
+                try
+                {
+                    // 鎵撳紑鏁版嵁搴撹繛鎺�
+                    conn.Open();
+                    // 璁剧疆鍛戒护绫诲瀷涓哄瓨鍌ㄨ繃绋�
+                    cmd.CommandType = CommandType.StoredProcedure;
+
+                    // 鏋勯�犲瓨鍌ㄨ繃绋嬪弬鏁版暟缁�
+                    SqlParameter[] parameters =
+                    {
+                    // 杈撳嚭鍙傛暟锛氳繑鍥炰俊鎭�
+                    new("@outMsg", SqlDbType.NVarChar, 2000),
+                    // 杈撳嚭鍙傛暟锛氳繑鍥炴暟閲�
+                    new("@outSum", SqlDbType.Int),
+                    // 杈撳嚭鍙傛暟锛氳繑鍥炴柊搴撲綅浠g爜
+                    new("@new_depotSectionsCode", SqlDbType.NVarChar, 300),
+                    // 杈撳叆鍙傛暟锛氭搷浣滅敤鎴�
+                    new SqlParameter("@c_user", unity.userName?.ToString() ?? ""),
+                    // 杈撳叆鍙傛暟锛氬師鏉$爜
+                    new SqlParameter("@p_barcode", unity.barcode?.ToString() ?? ""),
+                    // 杈撳叆鍙傛暟锛氬師搴撲綅浠g爜
+                    new("@old_depotSectionsCode", unity.OldDepotSectionCode?.ToString() ??""),
+                    // 杈撳叆鍙傛暟锛氭柊搴撲綅浠g爜
+                    new("@new_depotSectionsCode_input", unity.NewDepotSectionCode?.ToString() ??""),
+                    // 杈撳叆鍙傛暟锛氫粨搴撲唬鐮�
+                    new("@DepotCode", unity.DepotCode) { Value = unity.DepotCode ?? "" },
+                    // 杈撳叆鍙傛暟锛氫粨搴搃d
+                    new SqlParameter("@DepotId", (int?)unity.DepotId ?? (object)DBNull.Value)
+                };
+                    // 璁剧疆杈撳嚭鍙傛暟鏂瑰悜
+                    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();    // 杩斿洖鏁伴噺
+                    _NewDepotSectionCode = parameters[2].Value.ToString();     // 鏂板簱浣嶄唬鐮�
+
+                    // 鍒ゆ柇鍙樻洿缁撴灉锛屽鏋滄暟閲忓皬浜庣瓑浜�0锛屽垯琛ㄧず鍙樻洿澶辫触锛屾姏鍑哄紓甯稿苟杩斿洖閿欒淇℃伅
+                    var result = Convert.ToInt32(_intSum);
+                    if (result <= 0) throw new Exception(_strMsg);
+
+                    // 浣跨敤鍖垮悕瀵硅薄鑰屼笉鏄� dynamic? 鏇村悎閫�
+                    var dto = new
+                    {
+                        barcode = unity.barcode,
+                        OldDepotSectionCode = unity.OldDepotSectionCode,
+                        NewDepotSectionCode = _NewDepotSectionCode
+                    };
+
+                    return dto;
+                }
+                catch (Exception ex)
+                {
+                    // 鎹曡幏寮傚父骞舵姏鍑猴紝淇濈暀鍘熷寮傚父淇℃伅
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    // 鍏抽棴鏁版嵁搴撹繛鎺�
+                    conn.Close();
+                }
+            }
+        }
+    }
+    /*ProductionPickDto銆乄arehouseQuery鏈夎繃娣诲姞
+    public string? OldDepotSectionCode { get; set; }    //鏃у簱浣嶇紪鐮�
+    public string? NewDepotSectionCode { get; set; }    //鏂板簱浣嶇紪鐮�
+
+    ProductionPickDto鏈夎繃娣诲姞
+    public int? DepotId { get; set; }    //浠撳簱id
+     */
+
+
+}
\ No newline at end of file

--
Gitblit v1.9.3