From 44abd42a36a8265fb6f91849df7a5a05383b3c63 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期二, 03 九月 2024 17:39:49 +0800
Subject: [PATCH] 生产领料

---
 MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs |  704 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 652 insertions(+), 52 deletions(-)

diff --git a/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs b/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs
index 836f395..d1a6bea 100644
--- a/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs
+++ b/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs
@@ -1,5 +1,7 @@
 锘縰sing MES.Service.DB;
+using MES.Service.Dto.service;
 using MES.Service.Modes;
+using MES.Service.util;
 using SqlSugar;
 
 namespace MES.Service.service.Warehouse;
@@ -10,69 +12,667 @@
 
     //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemBarcodesManager.cs
 
+    #region 鐢熶骇棰嗘枡鏉$爜楠岃瘉
 
-    #region 鏁欏鏂规硶
-
-    /// <summary>
-    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
-    /// </summary>
-    public void Study()
+    //鐢熶骇棰嗘枡鏉$爜楠岃瘉鍚堢悊鎬�
+    private bool PdaProdPickItemCkBar(string cBarcode, string cDaa001)
     {
-        /*********鏌ヨ*********/
-
-        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
-        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
-        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
-        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
-
-        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
-        var data5 = base.GetPageList(it => 1 == 1, p);
-        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
-
-        var data6 =
-            base.GetPageList(it => 1 == 1, p,
-                it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
-        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
-
-        var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
-        conModels.Add(new ConditionalModel
+        try
         {
-            FieldName = typeof(MesInvItemBarcodes).GetProperties()[0].Name,
-            ConditionalType = ConditionalType.Equal, FieldValue = "1"
-        }); //id=1
-        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
+            // 1. 妫�鏌ユ潯鐮佹槸鍚︿负绌�
+            if (string.IsNullOrEmpty(cBarcode))
+            {
+                throw new Exception("璇疯緭鍏ユ潯鐮侊紒");
+            }
 
-        AsQueryable().Where(x => 1 == 1)
-            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+            // 2. 妫�鏌ユ潯鐮佹槸鍚﹀瓨鍦ㄤ簬 MesInvItemBarcodes 琛ㄤ腑
+            int tempNum = Db.Queryable<MesInvItemBarcodes>()
+                .Where(it => it.ItemBarcode == cBarcode)
+                .Count();
+            if (tempNum == 0)
+            {
+                throw new Exception("鏉$爜涓嶅瓨鍦紒");
+            }
 
+            // 3. 妫�鏌ユ潯鐮佹槸鍚﹀瓨鍦ㄤ簬 MesInvItemStocks 琛ㄤ腑
+            tempNum = Db.Queryable<MesInvItemStocks>()
+                .Where(it => it.ItemBarcode == cBarcode)
+                .Count();
+            if (tempNum == 0)
+            {
+                throw new Exception("搴撳瓨涓棤姝ゆ潯鐮侊紒");
+            }
 
-        /*********鎻掑叆*********/
-        var insertData = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟
-        var insertArray = new[] { insertData };
-        base.Insert(insertData); //鎻掑叆
-        base.InsertRange(insertArray); //鎵归噺鎻掑叆
-        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
-        AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+            // 4. 鑾峰彇 MesInvItemBarcodes 鐨勬暟鎹�
+            var mesInvItemBarcodes = Db.Queryable<MesInvItemBarcodes>()
+                .Where(it => it.ItemBarcode == cBarcode)
+                .First();
+            if (mesInvItemBarcodes == null)
+            {
+                throw new Exception("鏉$爜涓嶅瓨鍦紒");
+            }
 
+            // 5. 妫�鏌ユ潯鐮佹暟閲忔槸鍚︿负 0
+            if (mesInvItemBarcodes.Quantity == 0)
+            {
+                throw new Exception("姝ゆ潯鐮佹暟閲忎负0锛�");
+            }
 
-        /*********鏇存柊*********/
-        var updateData = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟
-        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
-        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
-        base.UpdateRange(updateArray); //鎵归噺鏇存柊
-        //base.Update(it => new MesInvItemBarcodes() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
-        AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+            // 6. 妫�鏌ユ潯鐮佺姸鎬�
+            if (mesInvItemBarcodes.Barcodestatus == 1 ||
+                mesInvItemBarcodes.Hbdytm == 1)
+            {
+                throw new Exception("鏃犳晥鏉$爜锛�");
+            }
 
+            // 7. 妫�鏌ユ潯鐮佹槸鍚﹁鍐荤粨
+            if (mesInvItemBarcodes.Visable == 1)
+            {
+                throw new Exception("鏉$爜鍐荤粨锛�");
+            }
 
-        /*********鍒犻櫎*********/
-        var deldata = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟
-        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
-        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
-        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
-        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
-        AsDeleteable().Where(it => 1 == 2)
-            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+            // 8. 妫�鏌ユ潯鐮佹槸鍚︿綔搴�
+            if (mesInvItemBarcodes.Location == 2)
+            {
+                throw new Exception("鏉$爜浣滃簾锛�");
+            }
+
+            // 9. 妫�鏌ユ姇鏂欏崟鏄惁闇�瑕佹鐗╂枡
+            tempNum = Db.Queryable<Womdab>()
+                .Where(it =>
+                    it.Dab001 == cDaa001 && it.Dab003 ==
+                    mesInvItemBarcodes.ItemId.ToString())
+                .Count();
+            if (tempNum == 0)
+            {
+                throw new Exception("鎶曟枡鍗曚笉闇�瑕佹鐗╂枡锛�");
+            }
+
+            string sql =
+                "SELECT COUNT(1) FROM WOMDAB WHERE DAB001='" + cDaa001 +
+                "' AND  DAB003='" + mesInvItemBarcodes.ItemId +
+                "' AND DAB017=(SELECT DEPOTS_CODE    FROM MES_INV_ITEM_STOCKS WHERE ITEM_BARCODE='" +
+                cBarcode + "')";
+
+            // 10. 妫�鏌ュ彂鏂欎粨搴撴槸鍚︽纭�
+            tempNum = Db.Ado.SqlQuerySingle<int>(sql);
+            if (tempNum == 0)
+            {
+                throw new Exception("鍙戞枡浠撳簱鏈夎锛�");
+            }
+
+            // 11. 鎴愬姛锛岃繑鍥炵粨鏋�
+            return true;
+        }
+        catch (Exception ex)
+        {
+            // 鎹曡幏寮傚父骞堕噸鏂版姏鍑�
+            throw new Exception($"鎶ラ敊: {ex.Message}");
+        }
+    }
+
+    public decimal? GetBarCodesQuan(WarehouseQuery query)
+    {
+        if (!PdaProdPickItemCkBar(query.barcode, query.daa001))
+        {
+            return null;
+        }
+
+        var invItemBarcodes = Db.Queryable<MesInvItemBarcodes>()
+            .Where(s => s.ItemBarcode == query.barcode).First();
+
+        if (invItemBarcodes == null)
+        {
+            throw new Exception("鏉$爜涓嶅瓨鍦紒");
+        }
+
+        return invItemBarcodes.Quantity;
+    }
+
+    //鐢熶骇棰嗘枡淇濆瓨
+    public string PrcRfPdaProdPickItem3(WarehouseQuery query)
+    {
+        var (factory, company) = UserUtil.GetFactory(query.userName);
+        var param = new ProdPickParams
+        {
+            CUser = query.userName,
+            CBarcode = query.barcode,
+            CDaa001 = query.daa001,
+            CNum = query.Num,
+            PiFactory = factory,
+            PiCompany = company
+        };
+
+        // 妫�鏌ュ彂鏂欐暟閲忔槸鍚﹀悎娉�
+        if (param.CNum <= 0)
+        {
+            throw new Exception("鍙戞枡鏁伴噺涓嶈兘灏忎簬绛変簬0锛�");
+        }
+
+        // 妫�鏌ユ潯鐮佹槸鍚﹀瓨鍦�
+        param.CInvItemBarcodes = Db.Queryable<MesInvItemBarcodes>()
+            .Where(it => it.ItemBarcode == param.CBarcode)
+            .First();
+        if (param.CInvItemBarcodes == null)
+        {
+            throw new Exception("鏉$爜涓嶅瓨鍦紒");
+        }
+
+        // 妫�鏌ユ潯鐮佹槸鍚﹀凡鍏ュ簱
+        param.CInvItemStocks = Db.Queryable<MesInvItemStocks>()
+            .Where(it => it.ItemBarcode == param.CBarcode)
+            .First();
+        if (param.CInvItemStocks == null)
+        {
+            throw new Exception("鏉$爜鏈叆搴擄紒");
+        }
+
+        // 妫�鏌ュ伐鍗曞彿鏄惁瀛樺湪
+        param.CWomdaa = Db.Queryable<Womdaa>()
+            .Where(it => it.Daa001 == param.CDaa001)
+            .First();
+        if (param.CWomdaa == null)
+        {
+            throw new Exception("涓嶅瓨鍦ㄦ宸ュ崟锛�");
+        }
+
+        // 妫�鏌ュ彂鏂欐暟閲忔槸鍚﹁秴鍑烘潯鐮佹暟閲�
+        if (param.CNum > param.CInvItemBarcodes.Quantity)
+        {
+            throw new Exception("鍙戞枡鏁伴噺涓嶈兘澶т簬鏉$爜鏁伴噺锛�");
+        }
+
+        // 妫�鏌ユ潯鐮佸悎娉曟��
+        if (!PdaProdPickItemCkBar(param.CBarcode, param.CDaa001))
+        {
+            return null;
+        }
+
+        // 璁$畻鍓╀綑鍙彂鏁伴噺
+        decimal? tempNum = CalculateRemainingQuantity(param.CDaa001,
+            param.CInvItemBarcodes.ItemId);
+        if (param.CNum > tempNum)
+        {
+            throw new Exception("鍙戞枡鏁伴噺涓嶈兘澶т簬瀵瑰簲鐗╂枡鐨勬湭鍙戞枡鏁伴噺锛�");
+        }
+
+        // 宸ュ崟閮ㄩ棬鍚嶇О
+        param.CDepart = Db.Queryable<SysDepartment>()
+            .Where(dep => dep.Id.ToString() == param.CWomdaa.Daa013)
+            .Select(dep => dep.Departmentname)
+            .First();
+
+        // 鐢熸垚鏂版潯鐮�
+        param.NewBarcode = GenerateNewBarcode(param.CBarcode);
+
+        UseTransaction(db =>
+        {
+            // 瀵瑰嚭搴撳崟鐨勬搷浣�
+            var (outId, outBill) = HandleInventoryOut(db, param);
+            param.COutId = outId;
+            param.OutBill = outBill;
+
+            // 鏇存柊鏉$爜鏁版嵁
+            UpdateBarcodeData(db, param);
+
+            // 鐢熸垚鎵撳嵃鏉$爜骞舵彃鍏ュ埌 mes_rf_prnbarcode
+            GenerateAndInsertPrintBarcode(db, param);
+
+            return 1;
+        });
+
+        return "001";
+    }
+
+    private void UpdateBarcodeData(SqlSugarScope db, ProdPickParams param)
+    {
+        // 鏇存柊鏉$爜鏁版嵁
+        db.Updateable<MesInvItemBarcodes>()
+            .SetColumns(it => new MesInvItemBarcodes
+                { Oldqty = it.Quantity, Quantity = it.Quantity - param.CNum })
+            .Where(it => it.ItemBarcode == param.CBarcode)
+            .ExecuteCommand();
+
+        // 鎻掑叆鏂扮殑鏉$爜璁板綍
+        db.Insertable(new MesInvItemBarcodes
+        {
+            ItemNo = param.CInvItemBarcodes.ItemNo,
+            ItemId = param.CInvItemBarcodes.ItemId,
+            CreateBy = param.CUser,
+            CreateDate = DateTime.Now,
+            TaskNo = param.CDaa001,
+            WorkNo = param.CWomdaa.Daa021,
+            SuppNo = param.CInvItemBarcodes.SuppNo,
+            Mblnr = param.CInvItemBarcodes.Mblnr,
+            Zeile = param.CInvItemBarcodes.Zeile,
+            Factory = param.CInvItemBarcodes.Factory,
+            Company = param.CInvItemBarcodes.Company,
+            EbelnK3id = param.CInvItemBarcodes.EbelnK3id,
+            LineK3id = param.CInvItemBarcodes.LineK3id,
+            Quantity = param.CNum,
+            Oldqty = param.CNum,
+            ItemBarcode = param.NewBarcode,
+            Unit = param.CInvItemBarcodes.Unit,
+            LotDate = param.CInvItemBarcodes.LotDate,
+            Memo = "鐢熶骇棰嗘枡",
+            ItemSname = param.CInvItemBarcodes.ItemSname,
+            TrLotno = param.CInvItemBarcodes.TrLotno,
+            BillNo = param.CInvItemBarcodes.BillNo,
+            InsDate = param.CInvItemBarcodes.InsDate,
+            WorkLine = param.CInvItemBarcodes.WorkLine,
+            ComeFlg = 6,
+            OldItemBarcode = param.CBarcode
+        }).ExecuteCommand();
+
+        // 鏇存柊鏉$爜搴撳瓨
+        db.Updateable<MesInvItemStocks>()
+            .SetColumns(it => new MesInvItemStocks
+                { Quantity = it.Quantity - param.CNum })
+            .Where(it => it.ItemBarcode == param.CBarcode)
+            .ExecuteCommand();
+
+        // 鎻掑叆鍑哄簱鏉$爜鏄庣粏琛�
+        db.Insertable(new MesInvItemOutCDetails
+        {
+            ItemOutId = param.COutId,
+            ItemNo = param.CInvItemBarcodes.ItemNo,
+            ItemId = param.CInvItemBarcodes.ItemId,
+            CreateBy = param.CUser,
+            CreateDate = DateTime.Now,
+            DepotCode = param.CInvItemStocks.DepotsCode,
+            DepotSectionCode = param.CInvItemStocks.DepotSectionsCode,
+            TaskNo = param.CDaa001,
+            WorkNo = param.CWomdaa.Daa021,
+            SuppNo = param.CInvItemBarcodes.SuppNo,
+            PbillNo = param.OutBill,
+            Factory = param.PiFactory,
+            Company = param.PiCompany,
+            EbelnK3id = param.CInvItemStocks.EbelnK3id,
+            LineK3id = param.CInvItemStocks.LineK3id,
+            Quantity = param.CNum,
+            ItemBarcode = param.NewBarcode
+        }).ExecuteCommand();
+
+        // 鎻掑叆鍒� MesInvBusiness2 琛�
+        db.Insertable(new MesInvBusiness2
+        {
+            Status = 1,
+            BillTypeId = 200,
+            ItemNo = param.CInvItemBarcodes.ItemNo,
+            ItemId = param.CInvItemBarcodes.ItemId,
+            CreateBy = param.CUser,
+            CreateDate = DateTime.Now,
+            TaskNo = param.CDaa001,
+            WorkNo = param.CWomdaa.Daa021,
+            SuppNo = param.CInvItemBarcodes.SuppNo,
+            Factory = param.PiFactory,
+            Company = param.PiCompany,
+            EbelnK3id = param.CInvItemStocks.EbelnK3id,
+            LineK3id = param.CInvItemStocks.LineK3id,
+            Quantity = param.CNum,
+            ItemBarcode = param.CBarcode
+        }).ExecuteCommand();
+    }
+
+    private void GenerateAndInsertPrintBarcode(SqlSugarScope db,
+        ProdPickParams param)
+    {
+        string cSupName = null;
+        if (!string.IsNullOrEmpty(param.CInvItemBarcodes.SuppNo))
+        {
+            cSupName = db.Queryable<MesSupplier>()
+                .Where(it => it.SuppNo == param.CInvItemBarcodes.SuppNo)
+                .Select(it => it.SuppName)
+                .First();
+        }
+
+        int cId =
+            db.Ado.GetInt(
+                "SELECT F_GETSEQNEXTVALUE('MES_RF_PRNBARCODE') FROM dual");
+
+        // 鎻掑叆鎵撳嵃鏉$爜璁板綍
+        db.Insertable(new MesRfPrnbarcode
+        {
+            Id = cId,
+            Forder = "1",
+            Fno = "1",
+            CreateDate = DateTime.Now,
+            Strp1 = param.CBarcode,
+            Strp2 = cSupName ?? " ",
+            Strp3 = param.CInvItemBarcodes.ItemNo,
+            Strp4 = GetItemName(param.CInvItemBarcodes.ItemId) ?? " ",
+            Strp5 =
+                $"{param.CInvItemBarcodes.Quantity - param.CNum} {GetUnitName(param.CInvItemBarcodes.Unit)}",
+            Strp6 = DateTime.Now.ToString("yyyy-MM-dd"),
+            Strp7 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ",
+            Strp8 = param.CBarcode,
+            Strp9 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ",
+            Strp10 = param.CBarcode,
+            Strp11 = param.CBarcode,
+            Strp12 = param.CBarcode
+        }).ExecuteCommand();
+
+        db.Insertable(new MesRfPrnbarcode
+        {
+            Id = cId,
+            Forder = "1",
+            Fno = "1",
+            CreateDate = DateTime.Now,
+            Strp1 = param.NewBarcode,
+            Strp2 = cSupName ?? " ",
+            Strp3 = param.CInvItemBarcodes.ItemNo,
+            Strp4 = GetItemName(param.CInvItemBarcodes.ItemId) ?? " ",
+            Strp5 = $"{param.CNum} {GetUnitName(param.CInvItemBarcodes.Unit)}",
+            Strp6 = DateTime.Now.ToString("yyyy-MM-dd"),
+            Strp7 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ",
+            Strp8 = param.NewBarcode,
+            Strp9 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ",
+            Strp10 = param.NewBarcode,
+            Strp11 = param.NewBarcode,
+            Strp12 = param.NewBarcode
+        }).ExecuteCommand();
+    }
+
+    private (int OutId, string OutBill) HandleInventoryOut(SqlSugarScope db,
+        ProdPickParams param)
+    {
+        // 澶勭悊鍑哄簱鍗曠殑鎻掑叆鎴栨洿鏂伴�昏緫
+        var tempNum = db.Queryable<MesInvItemOuts>()
+            .Where(it => it.TaskNo == param.CDaa001 && it.Status == 0)
+            .Count();
+
+        int cOutId = 0;
+        string cOutBill;
+
+        if (tempNum == 0)
+        {
+            string sql =
+                "SELECT COUNT(1) FROM MES_INV_ITEM_OUTS WHERE TRUNC(CREATE_DATE)=TRUNC(SYSDATE);";
+            int todayCount = db.Ado.SqlQuerySingle<int>(sql);
+
+            cOutBill = $"P{DateTime.Now:yyyyMMdd}{(todayCount + 1):D4}";
+
+            // 鎻掑叆鏂扮殑鍑哄簱鍗�
+            db.Insertable(new MesInvItemOuts
+            {
+                ItemOutNo = cOutBill,
+                TaskNo = param.CDaa001,
+                Status = 0,
+                CreateBy = param.CUser,
+                CreateDate = DateTime.Now,
+                WorkNo = param.CWomdaa.Daa021,
+                OutType = "鐢熶骇棰嗘枡",
+                BoardItem = param.CWomdaa.Daa002,
+                PbillNo = param.CDaa001,
+                BillTypeId = 200,
+                TransactionNo = 201,
+                Company = param.PiCompany,
+                Factory = param.PiFactory,
+                Remark = "鐢熶骇棰嗘枡",
+                DepotCode = param.CInvItemStocks.DepotsCode,
+                OutDate = DateTime.Now,
+                OutPart = param.CDepart
+            }).ExecuteCommand();
+        }
+        else
+        {
+            // 鑾峰彇鐜版湁鍑哄簱鍗曞彿
+            var outItem = db.Queryable<MesInvItemOuts>()
+                .Where(it => it.TaskNo == param.CDaa001 && it.Status == 0)
+                .Select(it => new { it.ItemOutNo, it.Id })
+                .First();
+
+            cOutBill = outItem.ItemOutNo;
+            cOutId = Convert.ToInt32(outItem.Id);
+        }
+
+        // 鎻掑叆鎴栨洿鏂颁粠琛�
+        InsertOrUpdateOutItems(db, cOutId, param);
+
+        return (cOutId, cOutBill);
+    }
+
+    private void InsertOrUpdateOutItems(SqlSugarScope db, int cOutId,
+        ProdPickParams param)
+    {
+        var tempNum = db.Queryable<MesInvItemOutItems>()
+            .Where(it =>
+                it.ItemId == param.CInvItemBarcodes.ItemId &&
+                it.ItemOutId == cOutId)
+            .Count();
+
+        decimal? cNumTemp = param.CNum;
+
+        string sql =
+            "SELECT B.Id, NVL(A.YF, 0) yfl, B.DAB006 - NVL(A.YF, 0) Qty FROM WOMDAB B LEFT JOIN (SELECT SUM(QUANTITY) YF, ITEM_DABID FROM MES_INV_ITEM_OUT_ITEMS                GROUP BY ITEM_DABID) A ON A.ITEM_DABID = B.ID WHERE DAB003 = '" +
+            param.CInvItemBarcodes.ItemId + "' AND DAB001 = '" + param.CDaa001 +
+            "' ORDER BY TO_NUMBER(DAB002)";
+
+        var womdabList = db.Ado.SqlQuery<DabResult>(sql);
+
+        foreach (var item in womdabList)
+        {
+            if (item.Qty <= 0) continue;
+            var itemDabid = item.Id;
+            if (cNumTemp <= item.Qty)
+            {
+                if (tempNum == 0)
+                {
+                    // 鎻掑叆鏂扮殑鍙戞枡璁板綍
+                    db.Insertable(new MesInvItemOutItems
+                    {
+                        ItemOutId = cOutId,
+                        Quantity = cNumTemp,
+                        ItemDabid = itemDabid,
+                        ItemId = param.CInvItemBarcodes.ItemId,
+                        ItemNo = param.CInvItemBarcodes.ItemNo,
+                        CreateBy = param.CUser,
+                        CreateDate = DateTime.Now,
+                        Factory = param.PiFactory,
+                        Company = param.PiCompany,
+                        DepotCode = param.CInvItemStocks.DepotsCode,
+                        TaskNo = param.CDaa001,
+                        EbelnK3id = param.CInvItemBarcodes.EbelnK3id,
+                        LineK3id = param.CInvItemBarcodes.LineK3id,
+                        PbillNo = param.CDaa001,
+                        WorkNo = param.CInvItemStocks.WorkNo,
+                        WorkLine = param.CInvItemStocks.WorkLine,
+                        DepotSectionCode =
+                            param.CInvItemStocks.DepotSectionsCode
+                    }).ExecuteCommand();
+                }
+                else
+                {
+                    // 鏇存柊鐜版湁鍙戞枡璁板綍鐨勬暟閲�
+                    db.Updateable<MesInvItemOutItems>()
+                        .SetColumns(it => new MesInvItemOutItems
+                            { Quantity = it.Quantity + cNumTemp })
+                        .Where(it =>
+                            it.ItemOutId == cOutId &&
+                            it.ItemDabid == itemDabid)
+                        .ExecuteCommand();
+                }
+
+                // 鏇存柊 WOMDAB 琛ㄧ殑鍙戞枡鏁伴噺
+                db.Updateable<Womdab>()
+                    .SetColumns(it => new Womdab
+                        { Dab007 = item.Yfl + cNumTemp })
+                    .Where(it => it.Id == itemDabid)
+                    .ExecuteCommand();
+
+                break;
+            }
+
+            // 鎻掑叆鍓╀綑鐨勫彂鏂欒褰�
+            db.Insertable(new MesInvItemOutItems
+            {
+                ItemOutId = cOutId,
+                Quantity = item.Qty,
+                ItemDabid = itemDabid,
+                ItemId = param.CInvItemBarcodes.ItemId,
+                ItemNo = param.CInvItemBarcodes.ItemNo,
+                CreateBy = param.CUser,
+                CreateDate = DateTime.Now,
+                Factory = param.PiFactory,
+                Company = param.PiCompany,
+                DepotCode = param.CInvItemStocks.DepotsCode,
+                TaskNo = param.CDaa001,
+                EbelnK3id = param.CInvItemBarcodes.EbelnK3id,
+                LineK3id = param.CInvItemBarcodes.LineK3id,
+                PbillNo = param.CDaa001,
+                WorkNo = param.CInvItemStocks.WorkNo,
+                WorkLine = param.CInvItemStocks.WorkLine,
+                DepotSectionCode = param.CInvItemStocks.DepotSectionsCode
+            }).ExecuteCommand();
+
+            cNumTemp -= item.Qty;
+
+            // 鏇存柊 WOMDAB 琛ㄧ殑鍙戞枡鏁伴噺
+            db.Updateable<Womdab>()
+                .SetColumns(it => new Womdab { Dab007 = it.Dab006 })
+                .Where(it => it.Id == itemDabid)
+                .ExecuteCommand();
+        }
+    }
+
+    private string GenerateNewBarcode(string oldBarcode)
+    {
+        // 鐢熸垚鏂扮殑鏉$爜閫昏緫
+        int count = Db.Queryable<MesInvItemBarcodes>()
+            .Where(b => b.OldItemBarcode == oldBarcode).Count();
+        return $"{oldBarcode}-{count + 1}";
+    }
+
+    private decimal? CalculateRemainingQuantity(
+        string cDaa001, decimal? itemId)
+    {
+        // 璁$畻鍓╀綑鍙彂鏁伴噺
+        var womdab = Db.Queryable<Womdab, Womdaa>((b, a) => new JoinQueryInfos(
+                JoinType.Left, b.Pid == a.Id))
+            .Where((b, a) =>
+                a.Daa001 == cDaa001 && b.Dab003 == itemId.ToString())
+            .Select(b => new
+            {
+                TotalQuantity = SqlFunc.AggregateMax(b.Dab006),
+                IssuedQuantity = SqlFunc.AggregateMax(b.Dab007)
+            })
+            .First();
+
+        return womdab.TotalQuantity - womdab.IssuedQuantity;
+    }
+
+    private static string GetItemName(decimal? pId)
+    {
+        try
+        {
+            if (pId == null)
+            {
+                return null;
+            }
+
+            // 鏌ヨ鐗╂枡鍚嶇О
+            string itemName = Db.Queryable<MesItems>()
+                .Where(it => it.Id == pId)
+                .Select(it => it.ItemName)
+                .First();
+
+            return itemName;
+        }
+        catch (Exception)
+        {
+            throw new Exception("鏈壘鍒扮墿鏂欏悕绉帮紝鐗╂枡id鍙蜂负" + pId);
+        }
+    }
+
+    private string GetUnitName(string? pId)
+    {
+        try
+        {
+            if (string.IsNullOrEmpty(pId))
+            {
+                return null;
+            }
+
+            // 鏌ヨ鍗曚綅鍚嶇О鏄惁瀛樺湪
+            int tempNum = Db.Queryable<MesUnit>()
+                .Where(it => it.Id.ToString() == pId)
+                .Count();
+
+            string unitName;
+
+            if (tempNum != 0)
+            {
+                // 濡傛灉鍦� MES_UNIT 琛ㄤ腑鎵惧埌鍗曚綅鍚嶇О
+                unitName = Db.Queryable<MesUnit>()
+                    .Where(it => it.Id.ToString() == pId)
+                    .Select(it => it.Fname)
+                    .First();
+            }
+            else
+            {
+                // 濡傛灉鍦� MES_UNIT 琛ㄤ腑鎵句笉鍒帮紝鍦� MES_ITEMS 琛ㄤ腑鏌ユ壘鐩稿叧鑱旂殑鍗曚綅鍚嶇О
+                unitName = Db.Queryable<MesItems, MesUnit>((i, u) =>
+                        new JoinQueryInfos(
+                            JoinType.Left, i.ItemUnit == u.Id.ToString()))
+                    .Where((i, u) => i.Id.ToString() == pId)
+                    .Select((i, u) => u.Fname)
+                    .First();
+            }
+
+            return unitName;
+        }
+        catch (Exception)
+        {
+            throw new Exception("鍗曚綅鍚嶇О鏈壘鍒帮紝鐗╂枡id鍙蜂负" + pId);
+        }
+    }
+
+    private string GetItemModel(decimal? pId)
+    {
+        try
+        {
+            if (pId == null)
+            {
+                return null;
+            }
+
+            // 鏌ヨ鐗╂枡瑙勬牸
+            string itemModel = Db.Queryable<MesItems>()
+                .Where(it => it.Id == pId)
+                .Select(it => it.ItemModel)
+                .First();
+
+            return itemModel;
+        }
+        catch (Exception)
+        {
+            throw new Exception("鏈壘鍒扮墿鏂欏瀷鍙凤紝鐗╂枡id鍙蜂负" + pId);
+        }
     }
 
     #endregion
+}
+
+public class ProdPickParams
+{
+    public string? CUser { get; set; }
+    public string? CBarcode { get; set; }
+    public string? CDaa001 { get; set; }
+    public decimal? CNum { get; set; }
+    public MesInvItemBarcodes? CInvItemBarcodes { get; set; }
+    public MesInvItemStocks? CInvItemStocks { get; set; }
+    public Womdaa? CWomdaa { get; set; }
+    public string? NewBarcode { get; set; }
+    public string? PiCompany { get; set; }
+    public string? PiFactory { get; set; }
+    public string? CDepart { get; set; }
+    public int? COutId { get; set; }
+    public string? OutBill { get; set; }
+}
+
+public class DabResult
+{
+    public decimal? Id { get; set; }
+    public decimal? Yfl { get; set; }
+    public decimal? Qty { get; set; }
 }
\ No newline at end of file

--
Gitblit v1.9.3