From 4f8d1da89bc7cf399e6d90d6230ad6c28114443a Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期一, 23 六月 2025 11:20:13 +0800
Subject: [PATCH] 1.采购入库优化 2.采购退货推荐库位优化

---
 service/Warehouse/TransferOutManager.cs |  543 ++++++++++++++++++++++++++----------------------------
 1 files changed, 261 insertions(+), 282 deletions(-)

diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs
index 2788646..06d5955 100644
--- a/service/Warehouse/TransferOutManager.cs
+++ b/service/Warehouse/TransferOutManager.cs
@@ -1,25 +1,28 @@
-锘縰sing NewPdaSqlServer.DB;
+锘縰sing System.Data;
+using System.Data.SqlClient;
+using MES.Service.Modes;
+using NewPdaSqlServer.DB;
 using NewPdaSqlServer.Dto.service;
 using NewPdaSqlServer.entity;
-using NewPdaSqlServer.util;
+using NewPdaSqlServer.entity.Base;
 using SqlSugar;
 
 namespace NewPdaSqlServer.service.Warehouse;
 
 /// <summary>
-/// 璋冩嫧鍑哄簱绠$悊绫�
-/// 璐熻矗澶勭悊璋冩嫧鍑哄簱鐩稿叧鐨勪笟鍔¢�昏緫
+///     璋冩嫧鍑哄叆搴撶鐞嗙被
+///     璐熻矗澶勭悊璋冩嫧鍑哄簱鐩稿叧鐨勪笟鍔¢�昏緫
 /// </summary>
-public class TransferOutManager : Repository<TransferOut>
+public class TransferOutManager : Repository<MesDbck>
 {
     /// <summary>
-    /// 鑾峰彇鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃
+    ///     鑾峰彇鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃
     /// </summary>
     /// <returns>鏈畬鎴愮殑璋冩嫧鍑哄簱鍗曞彿鍒楄〃</returns>
     public List<string> GetTransferOutNoList()
     {
         // 鍏堜粠鏁版嵁搴撹幏鍙朤ransfer_Out_ETAIL琛ㄧ殑鏁版嵁
-        var transferOutDetails = Db.Queryable<TransferOutDetail>().ToList();
+        var transferOutDetails = Db.Queryable<MesDbckDetail>().ToList();
 
         // 浣跨敤LINQ瀵硅幏鍙栫殑鏁版嵁杩涜鍒嗙粍鍜岀瓫閫�
         // 绛涢�夋潯浠�:鐢宠鏁伴噺(sq)涓嶇瓑浜庡凡鎵暟閲�(ys)鐨勮褰�
@@ -28,28 +31,29 @@
             .Select(g => new
             {
                 pid = g.Key,
-                sq = g.Sum(x => x.ShNum),  // 鐢宠鏁伴噺鍚堣
-                ys = g.Sum(x => x.YsNum)   // 宸叉壂鏁伴噺鍚堣
+                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))
+            .Where(x => !((x.sq ?? 0) == (x.ys ?? 0) && (x.sq ?? 0) == (x.rs ?? 0)))
             .Select(x => x.pid)
             .ToList();
 
         // 鏍规嵁pid鏌ヨ瀵瑰簲鐨勫嚭搴撳崟鍙�
-        var billNos = Db.Queryable<TransferOut>()
-            .Where(x => result.Contains(x.Guid))
-            .Select(x => x.BillNo)
+        var billNos = Db.Queryable<MesDbck>()
+            .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1)
+            .Select(x => x.FBillNo)
             .ToList();
 
         return billNos;
     }
 
     /// <summary>
-    /// 鏍规嵁鍗曟嵁鍙疯幏鍙栧緟澶勭悊鐨勮皟鎷ㄥ嚭搴撴槑缁嗗垪琛�
+    ///     鏍规嵁鍗曟嵁鍙疯幏鍙栧緟澶勭悊鐨勮皟鎷ㄥ嚭搴撴槑缁嗗垪琛�
     /// </summary>
     /// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param>
     /// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns>
-    public List<TransferOutDetail> GetTransferOutDetailListByBillNo(
+    public List<ItemDetailModel> GetTransferOutDetailListByBillNo(
         WarehouseQuery query)
     {
         var p_bill_no = query.billNo;
@@ -57,25 +61,64 @@
         // 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏
         // 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛�
         // 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳
-        var result = Db.Queryable<TransferOutDetail, TransferOut, MesItems>(
+        var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
                 (b, a, s) => new JoinQueryInfos(
-                    JoinType.Left, b.Pid == a.Guid,
-                    JoinType.Left, b.ItemId == s.Id))
+                    JoinType.Left, b.Pid == a.Id,
+                    JoinType.Left, b.FMaterialId == s.Id.ToString()))
             .Where((b, a, s) =>
-                (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0  // 鏈畬鎴愭暟閲忓ぇ浜�0
-                && a.BillNo == p_bill_no             // 鍖归厤鍗曟嵁鍙�
-                && a.Status == 1)                    // 鍗曟嵁宸插鏍�
+                !((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 TransferOutDetail
+            .Select((b, a, s) => new ItemDetailModel
             {
                 ItemNo = s.ItemNo,
+                ItemName = s.ItemName,
                 ItemModel = s.ItemModel,
-                ShNum = b.ShNum,      // 鐢宠鏁伴噺
-                YsNum = b.YsNum,      // 宸叉壂鏁伴噺
+                FQty = b.FQty, // 鐢宠鏁伴噺
+                SQty = b.SQty, // 宸叉壂鏁伴噺
+                RQty = b.RQty, // 宸叉壂鏁伴噺
                 // 淇濈暀鍏朵粬蹇呰瀛楁...
-                Pid = b.Pid,
-                ItemId = b.ItemId,
-                Guid = b.Guid
+                Pid = b.Pid.ToString(),
+                FMaterialId = b.FMaterialId,
+                Id = b.Id.ToString()
+            })
+            .ToList();
+
+        if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�");
+
+        return result;
+    }
+
+    public List<ItemDetailModel> GetDBCKDetal(
+        WarehouseQuery query)
+    {
+        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)) // 鏈畬鎴愭暟閲忓ぇ浜�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();
 
@@ -83,34 +126,24 @@
     }
 
     /// <summary>
-    /// 鎵弿鏉$爜杩涜璋冩嫧鍑哄簱澶勭悊
+    ///     鎵弿鏉$爜杩涜璋冩嫧鍑哄簱澶勭悊
     /// </summary>
     /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param>
     /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns>
-    public (WarehouseQuery form, List<TransferOutDetail> items)
+    public (WarehouseQuery form, List<ItemDetailModel> items)
         ScanMoveBarcode(WarehouseQuery query)
     {
         var p_bill_no = query.billNo;
-        var c_user = query.userName;
         var p_item_barcode = query.barcode;
 
-        var p_bill_type_id = 300;     // 鍗曟嵁绫诲瀷ID
-        var p_transaction_no = 301;    // 浜ゆ槗缂栧彿
-
         // 楠岃瘉鍗曟嵁鍙�
-        if (string.IsNullOrEmpty(p_bill_no))
-        {
-            throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
-        }
+        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
 
         // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵��
-        var transferOut = Db.Queryable<TransferOut>()
-            .Where(x => x.BillNo == p_bill_no && x.Status == 1)
+        var transferOut = Db.Queryable<MesDbck>()
+            .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
             .First();
-        if (transferOut == null)
-        {
-            throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�");
-        }
+        if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�");
 
         // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇�
         var stock = Db.Queryable<MesInvItemStocks>()
@@ -118,264 +151,210 @@
                         && x.Quantity > 0
                         && !string.IsNullOrEmpty(x.DepotsCode))
             .First();
-        if (stock == null)
-        {
-            throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_item_barcode}");
-        }
-
-        // 楠岃瘉浠撳簱涓�鑷存��
-        if (stock.DepotsCode != transferOut.InvCode)
-        {
-            throw new Exception(
-                $"鏉$爜搴撳瓨浠撳簱{stock.DepotsCode}鍜岀敵璇蜂粨搴撲笉涓�鑷磠transferOut.InvCode}");
-        }
+        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("鏈壘鍒扮墿鏂�");
-        }
+        if (item == null) throw new Exception("鏈壘鍒扮墿鏂�");
 
-        // 鏌ヨ璋冩嫧鏄庣粏骞堕獙璇�
-        var detail = Db.Queryable<TransferOutDetail>()
-            .Where(x => x.ItemId == stock.ItemId && x.Pid == transferOut.Guid)
+        var _strMsg = "";
+        var _intSum = "";
+        using (var conn = new SqlConnection(DbHelperSQL.strConn))
+        {
+            using (var cmd = new SqlCommand("[prc_pda_DBCK]", conn))
+            {
+                try
+                {
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] parameters =
+                    {
+                        new("@outMsg", SqlDbType.NVarChar, 300),
+                        new("@outSum", SqlDbType.NVarChar, 300),
+                        new("@barcode_num", SqlDbType.NVarChar, 300),
+                        new("@split_num", SqlDbType.NVarChar, 300),
+                        new("@c_user", query.userName),
+                        new("@p_bill_no", p_bill_no),
+                        new("@p_item_barcode", p_item_barcode),
+                    };
+                    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();
+
+                    var barcodeNum = parameters[2].Value.ToString();
+                    var splitNum = parameters[3].Value.ToString();
+                    
+                    var result = Convert.ToInt32(_intSum);
+                    if (result <= 0) throw new Exception(_strMsg);
+
+                    query.itemNo = item.ItemNo;
+                    query.Num = Convert.ToDecimal(barcodeNum);
+                    query.Fum = Convert.ToDecimal(splitNum);
+
+                    // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏
+                    return (query, GetDBCKDetal(query));
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    conn.Close();
+                }
+            }
+        }
+    }
+
+    /// <summary>
+    ///     鎵弿鏉$爜杩涜璋冩嫧鍏ュ簱澶勭悊
+    /// </summary>
+    /// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param>
+    /// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns>
+    public (WarehouseQuery form, List<ItemDetailModel> items)
+        ScanReceiveBarcode(WarehouseQuery query)
+    {
+        var p_bill_no = query.billNo;
+        var p_item_barcode = query.barcode;
+
+        var barinfo = Db.Queryable<MesInvItemStocks>()
+            .Where(x => x.ItemBarcode == p_item_barcode)
             .First();
-        if (detail == null)
-        {
-            throw new Exception("鏈壘鍒版潯鐮佺墿鏂欑浉搴旂殑璋冩嫧鐢宠");
-        }
 
-        // 楠岃瘉鏁伴噺鏄惁瓒呭嚭鏈壂鏁伴噺
-        if ((detail.ShNum ?? 0) - (detail.YsNum ?? 0) < stock.Quantity)
-        {
-            throw new Exception("鏉$爜鏁伴噺澶т簬鐢宠鏈壂鏁伴噺锛岃鎷嗗垎浜嗗啀鎵爜");
-        }
-        
-        // 浣跨敤浜嬪姟澶勭悊鏁版嵁鏇存柊
-        UseTransaction(db =>
-        {
-            // 鏌ヨ鐜版湁绉诲簱璁板綍
-            var existingMove = db.Queryable<MesInvItemMoves>()
-                .Where(x => x.TaskNo == p_bill_no
-                            && x.TransactionNo == p_transaction_no
-                            && (x.Status ?? 0) == 0)
-                .First();
+        // 楠岃瘉鍗曟嵁鍙�
+        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
 
-            var commit = 0;  // 璁板綍鏇存柊鎿嶄綔娆℃暟
-            var c_id = Guid.Empty;
+        // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵��
+        var transferOut = Db.Queryable<MesDbck>()
+            .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
+            .First();
+        if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�");
 
-            // 澶勭悊绉诲簱涓昏〃璁板綍
-            if (existingMove != null)
+        // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇�
+        var stock = Db.Queryable<MesDbckDetail>()
+            .Where(x => x.FMaterialId == barinfo.ItemId.ToString()
+                        && x.FQty > 0
+                        && !string.IsNullOrEmpty(x.FStockInId)
+                        && !string.IsNullOrEmpty(x.FOwnerInId))
+            .First();
+        if (stock == null) throw new Exception($"璋冩嫧鏄庣粏涓� 銆愮墿鏂欍�戞垨 銆愯皟鍏ヤ粨搴撱�戞垨銆愯皟鍏ヨ揣涓汇�戜俊鎭笉瀛樺湪锛岃鏍稿锛亄p_item_barcode}");
+
+        // 鏌ヨ鐗╂枡淇℃伅
+        var item = Db.Queryable<MesItems>()
+            .Where(x => x.Id.ToString() == stock.FMaterialId)
+            .First();
+        if (item == null) throw new Exception("鏈壘鍒扮墿鏂�");
+
+        var _strMsg = "";
+        var _intSum = "";
+        using (var conn = new SqlConnection(DbHelperSQL.strConn))
+        {
+            using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
             {
-                // 鏇存柊鐜版湁璁板綍鐨勬渶鍚庝慨鏀逛俊鎭�
-                commit += db.Updateable<MesInvItemMoves>()
-                    .SetColumns(s => s.LastupdateDate == DateTime.Now)
-                    .SetColumns(s => s.LastupdateBy == c_user)
-                    .Where(s => s.Guid == existingMove.Guid)
-                    .ExecuteCommand();
-
-                c_id = existingMove.Guid;
-            }
-            else
-            {
-                // 鏌ヨ鐩稿叧浠撳簱淇℃伅
-                var mesDepots = db.Queryable<MesDepots>()
-                    .Where(s => s.DepotCode == transferOut.FromCode)
-                    .First();
-
-                var invMesDepots = db.Queryable<MesDepots>()
-                    .Where(s => s.DepotCode == transferOut.InvCode)
-                    .First();
-
-                c_id = Guid.NewGuid();
-
-                // 鍒涘缓鏂扮殑绉诲簱璁板綍
-                var newMove = new MesInvItemMoves
+                try
                 {
-                    Guid = c_id,
-                    BillNo = BillNo.GetBillNo("DBCKD"),
-                    CreateBy = c_user,
-                    CreateDate = DateTime.Now,
-                    BillTypeId = p_bill_type_id,
-                    TransactionNo = p_transaction_no,
-                    InvDepotSectionsId = mesDepots.DepotId,
-                    // InvDepotSectionsCode = transferOut.FromCode,
-                    // FromDepotsCode = transferOut.InvCode,
-                    FromDepotsId = invMesDepots.DepotId.ToString(),
-                    TaskNo = p_bill_no
-                };
-                commit += db.Insertable(newMove).IgnoreColumns(true)
-                    .ExecuteCommand();
-            }
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] parameters =
+                    {
+                        new("@outMsg", SqlDbType.NVarChar, 300),
+                        new("@outSum", SqlDbType.NVarChar, 300),
+                        new("@barcode_num", SqlDbType.NVarChar, 300),
+                        new("@split_num", SqlDbType.NVarChar, 300),
+                        new("@c_user", query.userName),
+                        new("@p_bill_no", p_bill_no),
+                        new("@p_item_barcode", p_item_barcode),
+                        new("@p_depot_section_code", query.sectionCode),
+                    };
+                    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();
 
-            // 鍐欏叆鑰佹潯鐮佷氦鏄撴槑缁�
-            var business = new MesInvBusiness2
-            {
-                Guid = Guid.NewGuid(),
-                Status = 1,
-                BillTypeId = p_bill_type_id,
-                TransactionCode = p_transaction_no.ToString(),
-                BusinessType = -1,
-                ItemBarcode = p_item_barcode,
-                ItemNo = item.ItemNo,
-                LotNo = stock.LotNo,
-                EpFlag = true,
-                Quantity = stock.Quantity,
-                FromInvDepotsCode = stock.DepotsCode,
-                FromInvDepotSectionsCode = stock.DepotSectionsCode,
-                ToInvDepotsCode = transferOut.FromCode,
-                ToInvDepotSectionsCode = stock.DepotSectionsCode,
-                CreateBy = c_user,
-                CreateDate = DateTime.Now,
-                LastupdateBy = c_user,
-                LastupdateDate = DateTime.Now,
-                Factory = stock.Factory,
-                Company = stock.Company,
-                TaskNo = stock.TaskNo,
-                BillNo = p_bill_no,
-                WorkNo = stock.WorkNo,
-                WorkLine = stock.WorkLine,
-                SuppNo = stock.SuppNo,
-                ItemId = stock.ItemId,
-                EbelnK3id = stock.EbelnK3id,
-                LineK3id = stock.LineK3id,
-                // RkDepot = transferOut.RkDepot,
-                // CkDepot = transferOut.CkDepot
-            };
+                    var barcodeNum = parameters[2].Value.ToString();
+                    var splitNum = parameters[3].Value.ToString();
+                    
+                    var result = Convert.ToInt32(_intSum);
+                    if (result <= 0) throw new Exception(_strMsg);
 
-            commit += db.Insertable(business).IgnoreColumns(true)
-                .ExecuteCommand();
+                    query.itemNo = item.ItemNo;
+                    query.Num = Convert.ToDecimal(barcodeNum);
+                    query.Fum = Convert.ToDecimal(splitNum);
 
-            // 鍐欏叆鏂版潯鐮佷氦鏄撴槑缁�
-            var moveDetail = new MesInvItemMovesCDetails
-            {
-                Guid = Guid.NewGuid(),
-                ItemMoveGuid = c_id,
-                ItemBarcode = p_item_barcode,
-                CItemCode = stock.CItemCode,
-                ItemNo = item.ItemNo,
-                LotNo = stock.LotNo,
-                Quantity = stock.Quantity,
-                EpFlag = stock.EpFlag,
-                CreateBy = c_user,
-                CreateDate = DateTime.Now,
-                LastupdateBy = c_user,
-                LastupdateDate = DateTime.Now,
-                // CustomerNo = stock.CustomerNo,
-                TaskNo = stock.TaskNo,
-                FromDepotsCode = stock.DepotsCode,
-                FromDepotSectionsCode = stock.DepotSectionsCode,
-                Factory = stock.Factory,
-                Company = stock.Company,
-                InvDepotsCode = transferOut.FromCode,
-                // InvDepotSectionsCode = p_sectioncode,
-                IqcStatus = stock.IqcStatus,
-                Fcar = stock.Fcar,
-                IndepDate = stock.IndepDate,
-                VisableSubmit = stock.VisableSubmit,
-                VisableSubmitBy = stock.VisableSubmitBy,
-                VisableSubmitDate = stock.VisableSubmitDate,
-                BoardStyle = stock.BoardStyle,
-                WorkNo = stock.WorkNo,
-                WorkLine = stock.WorkLine,
-                SuppNo = stock.SuppNo,
-                ItemId = (int)stock.ItemId,
-                EbelnK3id = stock.EbelnK3id,
-                LineK3id = stock.LineK3id,
-                // RkDepot = transferOut.RkDepot,
-                // CkDepot = transferOut.CkDepot
-            };
-
-            commit += db.Insertable(moveDetail).IgnoreColumns(true)
-                .ExecuteCommand();
-
-            // 鏇存柊鎴栨彃鍏ュ嚭搴撴槑缁嗚褰�
-            var outItem = db.Queryable<MesInvItemOutItems>()
-                .Where(x => x.ItemOutId == c_id && x.ItemId == stock.ItemId)
-                .First();
-
-            if (outItem != null)
-            {
-                // 鏇存柊鐜版湁璁板綍鐨勬暟閲�
-                outItem.Quantity += stock.Quantity;
-                commit += db.Updateable<MesInvItemOutItems>()
-                    .SetColumns(x => x.Quantity == outItem.Quantity)
-                    .Where(x => x.Guid == outItem.Guid)
-                    .ExecuteCommand();
-            }
-            else
-            {
-                // 鎻掑叆鏂拌褰�
-                var newOutItem = new MesInvItemOutItems
+                    // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏
+                    return (query, GetDBCKDetal(query));
+                }
+                catch (Exception ex)
                 {
-                    Guid = Guid.NewGuid(),
-                    ItemOutId = c_id,
-                    ItemId = stock.ItemId,
-                    CreateBy = c_user,
-                    CreateDate = DateTime.Now,
-                    TaskNo = stock.TaskNo,
-                    WorkNo = stock.WorkNo,
-                    WorkLine = stock.WorkLine,
-                    EbelnK3id = (int)stock.EbelnK3id,
-                    LineK3id = (int)stock.LineK3id,
-                    Quantity = stock.Quantity,
-                    // Unit = stock.ItemUnit
-                };
-
-                commit += db.Insertable(newOutItem).IgnoreColumns(true)
-                    .ExecuteCommand();
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    conn.Close();
+                }
             }
+        }
+    }
 
-            // 鏇存柊璋冩嫧鐢宠宸叉壂鏁伴噺
-            detail = db.Queryable<TransferOutDetail>()
-                .Where(x => x.Guid == detail.Guid)
-                .First();
-
-            if (detail != null)
+    //璋冩嫧鍑哄簱鎷嗗垎 prc_pda_DBCK_CF
+    public string SplitBarcode(WarehouseQuery query)
+    {
+        var _strMsg = "";
+        var _intSum = "";
+        using (var conn = new SqlConnection(DbHelperSQL.strConn))
+        {
+            using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
             {
-                detail.YsNum = (detail.YsNum ?? 0) + stock.Quantity as int?;
-                commit += db.Updateable<TransferOutDetail>()
-                    .SetColumns(x => x.YsNum == detail.YsNum)
-                    .Where(x => x.Guid == detail.Guid)
-                    .ExecuteCommand();
+                try
+                {
+                    conn.Open();
+                    cmd.CommandType = CommandType.StoredProcedure;
+                    SqlParameter[] parameters =
+                    {
+                        new("@outMsg", SqlDbType.NVarChar, 300),
+                        new("@outSum", SqlDbType.NVarChar, 300),
+                        new("@c_user", query.userName),
+                        new("@p_bill_no", query.billNo),
+                        new("@p_item_barcode", query.barcode),
+                        new("@NUM", query.Fum),
+                    };
+                    
+                    parameters[0].Direction = ParameterDirection.Output;
+                    parameters[1].Direction = ParameterDirection.Output;
+                    
+                    foreach (var parameter in parameters)
+                        cmd.Parameters.Add(parameter);
+                    cmd.ExecuteNonQuery();
+                    _strMsg = parameters[0].Value.ToString();
+                    _intSum = parameters[1].Value.ToString();
+                    
+                    var result = Convert.ToInt32(_intSum);
+                    if (result <= 0) throw new Exception(_strMsg);
+                    
+                    return _strMsg;
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                finally
+                {
+                    conn.Close();
+                }
             }
-            
-            // 妫�鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴�
-            var totals = db.Queryable<TransferOutDetail, TransferOut>((b, a) => 
-                new JoinQueryInfos(JoinType.Left, b.Pid == a.Guid))
-                .Where((b, a) => a.BillNo == p_bill_no)
-                .Select((b, a) => new {
-                    ShNum = SqlFunc.AggregateSum(b.ShNum),  // 鐢宠鎬绘暟閲�
-                    YsNum = SqlFunc.AggregateSum(b.YsNum)   // 宸叉壂鎬绘暟閲�
-                })
-                .First();
-
-            // 濡傛灉鐢宠鏁伴噺绛変簬宸叉壂鏁伴噺锛屾洿鏂板崟鎹畬鎴愮姸鎬�
-            if (totals.ShNum == totals.YsNum)
-            {
-                commit += db.Updateable<TransferOut>()
-                    .SetColumns(x => x.IsWc == 1)
-                    .Where(x => x.BillNo == p_bill_no)
-                    .ExecuteCommand();
-            }
-            
-            // 鏇存柊杩斿洖鍙傛暟
-            query.itemNo = item.ItemNo;
-            query.Num = stock.Quantity;
-            
-            // 楠岃瘉鏇存柊鎿嶄綔鏄惁鍏ㄩ儴鎴愬姛
-            if (commit < 4)
-            {
-                throw new Exception("鏇存柊澶辫触");
-            }
-
-            return commit;
-        });
-
-        // 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏
-        return (query, GetTransferOutDetailListByBillNo(query));
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3