From 6bc8d28f628be77b8847edc5eaf414f5c0a4ba3b Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期六, 11 一月 2025 09:57:04 +0800
Subject: [PATCH] 11

---
 service/Wom/WwGdManager.cs |  368 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 363 insertions(+), 5 deletions(-)

diff --git a/service/Wom/WwGdManager.cs b/service/Wom/WwGdManager.cs
index 5803cf3..7a64858 100644
--- a/service/Wom/WwGdManager.cs
+++ b/service/Wom/WwGdManager.cs
@@ -4,6 +4,7 @@
 using NewPdaSqlServer.DB;
 using NewPdaSqlServer.Dto.service;
 using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
 using SqlSugar;
 
 namespace NewPdaSqlServer.service.Wom;
@@ -143,7 +144,7 @@
     {
         if (string.IsNullOrEmpty(query.daa001)) throw new Exception("宸ュ崟鍙蜂负绌�");
 
-        var womdaa = Db.Queryable<WwGd, MesItems>((a, i) =>
+        var wwgd = Db.Queryable<WwGd, MesItems>((a, i) =>
                 new JoinQueryInfos(JoinType.Left,
                     a.Daa003 == i.ItemId))
             .Where((a, i) => a.Daa001 == query.daa001)
@@ -152,9 +153,10 @@
                 a.Daa001, a.RwdGuid
             }).First();
 
-        if (womdaa?.Daa001 == null) throw new Exception("宸ュ崟鍙蜂笉瀛樺湪");
+        if (wwgd?.Daa001 == null) throw new Exception("宸ュ崟鍙蜂笉瀛樺湪");
 
-        var womdabs = Db.Queryable<WwGd, WwGdDetail, MesItems, ProductionOrderSub>(
+        var womdabs = Db
+            .Queryable<WwGd, WwGdDetail, MesItems, ProductionOrderSub>(
                 (a, b, c, d) =>
                     new JoinQueryInfos(
                         JoinType.Left,
@@ -201,12 +203,12 @@
             .ToList();
 
         var womcaa = Db.Queryable<ProductionOrder>()
-            .Where(s => s.Guid == womdaa.RwdGuid)
+            .Where(s => s.Guid == wwgd.RwdGuid)
             .First();
 
         var dto = new ProductionPickDto
         {
-            daa001 = womdaa.Daa001,
+            daa001 = wwgd.Daa001,
             PlanNo = womcaa.ErpProductionOrderNo,
             totals1 = womdabs,
             daisao1 = list,
@@ -215,4 +217,360 @@
 
         return dto;
     }
+
+
+    #region 濮斿琛ユ枡
+
+    /// <summary>
+    /// 濮斿宸ュ崟閫�鏂欐壂鐮�
+    ///     鎵弿鏉$爜  prc_rf_pda_scan_zout_barcode3
+    /// </summary>
+    /// <param name="query">鏌ヨ鍙傛暟</param>
+    /// <returns>鎵弿缁撴灉</returns>
+    /// <remarks>
+    ///     鍙傛暟璇存槑:
+    ///     - billNo: 鍗曟嵁鍙�(蹇呭~)
+    ///     - barcode: 鏉$爜(蹇呭~)
+    ///     - userName: 鐢ㄦ埛鍚�
+    ///     - blNo: 琛ユ枡鍗曞彿(蹇呭~)
+    /// </remarks>
+    public (WarehouseQuery item, List<MesItemBlDetail> pendingList)
+        WwblScanBarcode(WarehouseQuery query)
+    {
+        if (string.IsNullOrEmpty(query.billNo))
+            throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+
+        if (string.IsNullOrEmpty(query.barcode))
+            throw new Exception("璇锋壂鎻忔潯鐮侊紒");
+
+        if (string.IsNullOrEmpty(query.userName))
+            throw new Exception("鐢ㄦ埛鍚嶄笉鑳戒负绌猴紒");
+
+        if (string.IsNullOrEmpty(query.blNo))
+            throw new Exception("琛ユ枡鍗曞彿涓嶈兘涓虹┖锛�");
+
+
+        // 妫�楠屾槸鍚﹂噸澶嶆壂鎻�
+        var exists = Db.Queryable<MesInvItemOutCDetails>()
+            .Where(b => b.ItemBarcode == query.barcode)
+            .Any();
+
+        if (exists)
+            throw new Exception("姝ゆ潯鐮佸凡鎵弿,鍕块噸澶嶆壂鐮侊紒");
+
+        // 鏌ヨ鏉$爜搴撳瓨淇℃伅
+        var stockBarcode = Db.Queryable<MesInvItemStocks>()
+            .Where(t => t.ItemBarcode == query.barcode && t.Quantity > 0)
+            .First();
+
+        if (stockBarcode == null)
+            throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮�,璇锋牳瀵癸紒{query.barcode}");
+
+        // 妫�鏌ヨˉ鏂欏崟鐘舵��
+        var mesItemBl = Db.Queryable<MesItemBl>()
+            .Where(a => a.BlNo == query.blNo)
+            .First();
+
+        if (mesItemBl == null)
+            throw new Exception($"鐢宠鍗� {query.blNo} 宸叉挙鍥烇紒");
+
+        if (mesItemBl.Bl018 != true)
+            throw new Exception($"鐢宠鍗� {query.blNo} 鏈鏍革紒");
+
+        if (mesItemBl.Bl019 == true)
+            throw new Exception($"鐢宠鍗� {query.blNo} 宸插畬缁擄紒");
+
+        // 鑾峰彇琛ユ枡鍗曟槑缁嗗苟鏍¢獙
+        var blDetail = Db.Queryable<MesItemBlDetail>()
+            .Where(b =>
+                b.Mid == mesItemBl.Id && b.Bld012 == stockBarcode.ItemId)
+            .First();
+
+        if (blDetail == null)
+            throw new Exception($"鐢宠鍗曚笉瀛樺湪姝ょ墿鏂� {stockBarcode.ItemNo} 璇风‘璁わ紒");
+
+        // 妫�鏌ュ緟琛ユ暟閲�
+        var quantity = (blDetail.Bld007 ?? 0) - (blDetail.Bld008 ?? 0);
+        if (quantity == 0)
+            throw new Exception("鐗╂枡宸叉壂鐮佸畬鎴愶紝璇锋牳瀵癸紒");
+
+        // 妫�鏌ュ伐鍗曚俊鎭�
+        var wwgd = Db.Queryable<WwGd>()
+            .Where(a => a.Daa001 == query.billNo)
+            .First();
+
+        if (wwgd == null)
+            throw new Exception($"宸ュ崟 {query.billNo} 涓嶅瓨鍦紝璇风‘璁わ紒");
+
+        // 妫�鏌ュ鏂欐槑缁�
+        var womdab = Db.Queryable<WwGdDetail>()
+            .Where(b => b.Dab001 == query.billNo && b.Erpid == blDetail.Bld014)
+            .First();
+
+        if (womdab == null)
+            throw new Exception($"澶囨枡鏄庣粏涓嶅瓨鍦ㄦ鐗╂枡 {stockBarcode.ItemNo} 璇风‘璁わ紒");
+
+        if (stockBarcode.Quantity > quantity)
+        {
+            // 鑾峰彇寰呭彂鏂欐槑缁嗗垪琛�
+            var pendingList = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
+                    new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
+                .Where((a, b) => a.BlNo == query.blNo
+                                 && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
+                .Select((a, b) => new MesItemBlDetail
+                {
+                    Bld012 = b.Bld012,
+                    Bld002 = b.Bld002,
+                    Bld003 = b.Bld003,
+                    Bld004 = b.Bld004,
+                    Bld007 = b.Bld007,
+                    Bld008 = b.Bld008
+                })
+                .ToList();
+
+
+            query.Num = stockBarcode.Quantity;
+            query.Fum = quantity;
+
+            return (query, pendingList);
+        }
+
+        // 寮�鍚簨鍔″鐞�
+        var success = UseTransaction(db =>
+        {
+            // 鑾峰彇鎴栧垱寤哄嚭搴撳崟
+            var outId = Guid.NewGuid();
+            var outNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)");
+
+            var existingOut = db.Queryable<MesInvItemOuts>()
+                .Where(a => a.BbillNo == query.blNo
+                            && a.DepotCode == womdab.Dab017
+                            && a.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
+                            DateTime.Now.Date.ToString("yyyy-MM-dd")
+                            && a.BillTypeId == 200
+                            && a.TransactionNo == 209
+                            && a.Status == 0)
+                .First();
+
+            if (existingOut != null)
+            {
+                outId = existingOut.Guid;
+                outNo = existingOut.ItemOutNo;
+            }
+            else
+            {
+                // 鎻掑叆鍑哄簱鍗曚富琛�
+                db.Insertable(new MesInvItemOuts
+                {
+                    Guid = outId,
+                    ItemOutNo = outNo,
+                    TaskNo = query.blNo,
+                    CreateBy = query.userName,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = query.userName,
+                    LastupdateDate = DateTime.Now,
+                    BillTypeId = 200,
+                    TransactionNo = 209,
+                    Remark = mesItemBl.Bl007,
+                    DepotCode = womdab.Dab017,
+                    OutPart = wwgd.Daa013.ToString(),
+                    FType = 0,
+                    Factory = stockBarcode.Factory,
+                    Company = stockBarcode.Company,
+                    // WorkNo = wwgd.Daa021,
+                    // BoardItem = wwgd.Daa002,
+                    PbillNo = wwgd.Daa001,
+                    OutDate = DateTime.Now,
+                    Status = 0,
+                    BbillNo = query.blNo
+                }).IgnoreColumns(true).ExecuteCommand();
+            }
+
+            // 妫�鏌ュ苟鏇存柊鍑哄簱鍗曠墿鏂欐槑缁�
+            var itemCount = db.Queryable<MesInvItemOutItems>()
+                .Where(i =>
+                    i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
+                .Count();
+
+            if (itemCount > 0)
+                // 鏇存柊宸插瓨鍦ㄧ殑鐗╂枡鏄庣粏鏁伴噺
+                db.Updateable<MesInvItemOutItems>()
+                    .SetColumns(i =>
+                        i.Quantity == i.Quantity + stockBarcode.Quantity)
+                    .Where(i =>
+                        i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
+                    .ExecuteCommand();
+            else
+                // 鎻掑叆鏂扮殑鐗╂枡鏄庣粏璁板綍
+                db.Insertable(new MesInvItemOutItems
+                {
+                    Guid = Guid.NewGuid(),
+                    ItemOutId = outId,
+                    ItemNo = blDetail.Bld002,
+                    Quantity = stockBarcode.Quantity,
+                    CreateBy = query.userName,
+                    CreateDate = DateTime.Now,
+                    LastupdateBy = query.userName,
+                    LastupdateDate = DateTime.Now,
+                    Factory = stockBarcode.Factory,
+                    Company = stockBarcode.Company,
+                    DepotCode = womdab.Dab017,
+                    TaskNo = query.blNo,
+                    // WorkNo = wwgd.Daa021,
+                    WorkLine = blDetail.Bld013,
+                    ErpItemNo = womdab.Dab003.ToString(),
+                    ErpId = womdab.Eid,
+                    ErpAutoid = womdab.Erpid,
+                    PbillNo = query.billNo,
+                    ItemId = blDetail.Bld012
+                    // Unit = blDetail.Bld009,
+                    // DepotId = (int)stockBarcode.DepotsId
+                }).IgnoreColumns(true).ExecuteCommand();
+
+            // 鎻掑叆鍑哄簱鍗曟潯鐮佹槑缁�
+            db.Insertable(new MesInvItemOutCDetails
+            {
+                Guid = Guid.NewGuid(),
+                ItemOutId = outId,
+                ItemBarcode = stockBarcode.ItemBarcode,
+                ItemNo = stockBarcode.ItemNo,
+                LotNo = stockBarcode.LotNo,
+                Quantity = stockBarcode.Quantity,
+                ForceOutFlag = 0,
+                CreateBy = query.userName,
+                CreateDate = DateTime.Now,
+                LastupdateBy = query.userName,
+                LastupdateDate = DateTime.Now,
+                DepotCode = stockBarcode.DepotsCode,
+                DepotSectionCode = stockBarcode.DepotSectionsCode,
+                Remark = blDetail.Bld010,
+                Factory = stockBarcode.Factory,
+                Company = stockBarcode.Company,
+                TaskNoy = mesItemBl.Bl013,
+                BoardStyle = mesItemBl.Bl002,
+                TaskNo = query.blNo,
+                WorkNo = blDetail.Bld001,
+                WorkLine = blDetail.Bld013,
+                SuppNo = stockBarcode.SuppNo,
+                PbillNo = query.billNo,
+                ItemId = blDetail.Bld012,
+                Unit = blDetail.Bld009,
+                DepotId = (int)stockBarcode.DepotsId,
+                EbelnK3id = womdab.Eid,
+                LineK3id = womdab.Erpid
+            }).IgnoreColumns(true).ExecuteCommand();
+
+            // 鎻掑叆涓氬姟浜ゆ槗璁板綍
+            db.Insertable(new MesInvBusiness2
+            {
+                Guid = Guid.NewGuid(),
+                Status = 1,
+                BillTypeId = 200, // p_bill_type_id
+                TransactionCode = "210", // p_transaction_no
+                BusinessType = -1,
+                ItemBarcode = stockBarcode.ItemBarcode,
+                ItemNo = stockBarcode.ItemNo,
+                LotNo = stockBarcode.LotNo,
+                EpFlag = true,
+                Quantity = stockBarcode.Quantity,
+                FromInvDepotsCode = stockBarcode.DepotsCode,
+                FromInvDepotSectionsCode = stockBarcode.DepotSectionsCode,
+                CreateBy = query.userName,
+                CreateDate = DateTime.Now,
+                LastupdateBy = query.userName,
+                LastupdateDate = DateTime.Now,
+                Factory = stockBarcode.Factory,
+                Company = stockBarcode.Company,
+                TaskNo = mesItemBl.Bl012, // Matches C_QTCK.Bl012
+                BillNo = query.blNo,
+                WorkNo = blDetail.Bld001, // Matches C_QTCK_D.Bld001
+                WorkLine = blDetail.Bld013, // Matches C_QTCK_D.Bld013
+                SuppNo = stockBarcode.SuppNo,
+                ItemId = stockBarcode.ItemId
+                // CkDepot = stockBarcode.DepotsId
+            }).IgnoreColumns(true).ExecuteCommand();
+
+
+            // 鏇存柊宸ュ崟琛ㄦ暟閲�
+            db.Updateable<WwGdDetail>()
+                .SetColumns(it => new WwGdDetail
+                {
+                    Dab007 = (it.Dab007 ?? 0) + (int)stockBarcode.Quantity,
+                    Dab020 = (it.Dab020 ?? 0) + (int)stockBarcode.Quantity,
+                    Dab021 = (it.Dab021 ?? 0) + (int)stockBarcode.Quantity
+                })
+                .Where(it => it.Id == womdab.Id && it.Dab003 == womdab.Dab003)
+                .ExecuteCommand();
+
+            // 鏇存柊琛ユ枡鍗曟槑缁嗗凡琛ユ暟閲�
+            db.Updateable<MesItemBlDetail>()
+                .SetColumns(it => new MesItemBlDetail
+                {
+                    Bld008 = (it.Bld008 ?? 0) + (int)stockBarcode.Quantity
+                })
+                .Where(it => it.Id == blDetail.Id)
+                .ExecuteCommand();
+
+            // 妫�鏌ヨˉ鏂欏崟鏄庣粏鏄惁瀹屾垚
+            var blDetail1 = db.Queryable<MesItemBlDetail>()
+                .Where(it => it.Id == blDetail.Id)
+                .First();
+
+            if ((blDetail1.Bld007 ?? 0) <= (blDetail1.Bld008 ?? 0))
+                // 鏇存柊鏄庣粏瀹屾垚鐘舵��
+                db.Updateable<MesItemBlDetail>()
+                    .SetColumns(it => it.Bld011 == 1)
+                    .Where(it => it.Id == blDetail1.Id)
+                    .ExecuteCommand();
+
+            // 鏇存柊搴撳瓨鏁伴噺涓�0
+            db.Updateable<MesInvItemStocks>()
+                .SetColumns(it => it.Quantity == 0)
+                .Where(it => it.Guid == stockBarcode.Guid)
+                .ExecuteCommand();
+
+
+            // 妫�鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴�
+            var unfinishedDetail = db.Queryable<MesItemBlDetail>()
+                .LeftJoin<MesItemBl>((b, a) => a.Id == b.Mid)
+                .Where((b, a) => a.BlNo == query.blNo && (b.Bld011 ?? 0) == 0)
+                .Select((b, a) => b)
+                .First();
+
+            if (unfinishedDetail == null)
+                // 濡傛灉娌℃湁鏈畬鎴愮殑鏄庣粏锛屾洿鏂拌ˉ鏂欏崟鐘舵�佷负宸插畬鎴�
+                db.Updateable<MesItemBl>()
+                    .SetColumns(it => new MesItemBl
+                    {
+                        Bl019 = true,
+                        WcUser = query.userName,
+                        WcTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                    })
+                    .Where(it => it.Id == mesItemBl.Id)
+                    .ExecuteCommand();
+
+            return 1;
+        });
+
+        // 鑾峰彇鏈�缁堢殑寰呭彂鏂欐槑缁嗗垪琛�
+        var finalPendingList = Db.Queryable<MesItemBl, MesItemBlDetail>(
+                (a, b) =>
+                    new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
+            .Where((a, b) => a.BlNo == query.blNo
+                             && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
+            .Select((a, b) => new MesItemBlDetail
+            {
+                Bld012 = b.Bld012,
+                Bld002 = b.Bld002,
+                Bld003 = b.Bld003,
+                Bld004 = b.Bld004,
+                Bld007 = b.Bld007,
+                Bld008 = b.Bld008
+            })
+            .ToList();
+
+        return (query, finalPendingList);
+    }
+
+    #endregion
 }
\ No newline at end of file

--
Gitblit v1.9.3