啊鑫
2024-09-03 44abd42a36a8265fb6f91849df7a5a05383b3c63
MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs
@@ -1,5 +1,7 @@
using 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>
    ///     仓储方法满足不了复杂业务需求,业务代码请在这里面定义方法
    /// </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,我们可以用queryable实现复杂功能
            // 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);// 只更新ClassName列和CreateTime列,其它列不更新,条件id=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; }
}