1
sjz
2025-09-16 1ba1f2d588d8a7a8b3d9b5cb94bdf1e18ff7e8c1
service/Wom/MesWorkProdManager.cs
@@ -1,12 +1,10 @@
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using NewPdaSqlServer.util;
using SqlSugar;
using System.Data;
using System.Data.SqlClient;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace NewPdaSqlServer.service.Wom;
@@ -46,212 +44,212 @@
    /// </exception>
    public ScanWorkResult ScanWorkAsync(ScanWorkRequest request)
    {
        // // 1. 验证员工信息
        // var staff = Db.Queryable<MesStaff>()
        //     .Where(x => x.StaffNo == request.StaffNo)
        //     .First();
        // if (staff == null)
        //     throw new Exception("请先选择人员");
        //// 1. 验证员工信息
        //var staff = Db.Queryable<MesStaff>()
        //    .Where(x => x.StaffNo == request.StaffNo)
        //    .First();
        //if (staff == null)
        //    throw new Exception("请先选择人员");
        // // 2. 验证条码信息
        // var barcode = Db.Queryable<MesInvItemBarcodes>()
        //     .Where(x => x.ItemBarcode == request.ItemBarcode)
        //     .First();
        // if (barcode == null)
        //     throw new Exception($"无此条码,请核对!{request.ItemBarcode}");
        //// 2. 验证条码信息
        //var barcode = Db.Queryable<MesInvItemBarcodes>()
        //    .Where(x => x.ItemBarcode == request.ItemBarcode)
        //    .First();
        //if (barcode == null)
        //    throw new Exception($"无此条码,请核对!{request.ItemBarcode}");
        // // 3. 验证物料信息
        // var item = Db.Queryable<MesItems>()
        //     .Where(x => x.Id == barcode.ItemId)
        //     .First();
        // if (item == null)
        //     throw new Exception($"无此物料,请核对!{request.ItemBarcode}");
        //// 3. 验证物料信息
        //var item = Db.Queryable<MesItems>()
        //    .Where(x => x.Id == barcode.ItemId)
        //    .First();
        //if (item == null)
        //    throw new Exception($"无此物料,请核对!{request.ItemBarcode}");
        // // 4. 根据条码备注确定单据类型和交易号
        // var billTypeId = 900; // 默认单据类型
        // var transactionNo = 902; // 默认交易号
        // switch (barcode.Memo?.Trim() ?? "0")
        // {
        //     case "丝印":
        //         transactionNo = 901; // 丝印工序
        //         break;
        //     case "半成品":
        //         transactionNo = 902; // 半成品工序
        //         break;
        //     case "包装":
        //     case "成品":
        //         transactionNo = 903; // 成品/包装工序
        //         break;
        // }
        //// 4. 根据条码备注确定单据类型和交易号
        //var billTypeId = 900; // 默认单据类型
        //var transactionNo = 902; // 默认交易号
        //switch (barcode.Memo?.Trim() ?? "0")
        //{
        //    case "丝印":
        //        transactionNo = 901; // 丝印工序
        //        break;
        //    case "半成品":
        //        transactionNo = 902; // 半成品工序
        //        break;
        //    case "包装":
        //    case "成品":
        //        transactionNo = 903; // 成品/包装工序
        //        break;
        //}
        // // 5. 检查条码是否重复扫描
        // var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
        //         (a, b) =>
        //             new JoinQueryInfos(JoinType.Inner,
        //                 a.Id == b.MesWorkProdId))
        //     .Where((a, b) => b.ItemBarcode == request.ItemBarcode
        //                      && a.BillTypeId == billTypeId
        //                      && a.TransactionNo == transactionNo)
        //     .Any();
        //// 5. 检查条码是否重复扫描
        //var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
        //        (a, b) =>
        //            new JoinQueryInfos(JoinType.Inner,
        //                a.Id == b.MesWorkProdId))
        //    .Where((a, b) => b.ItemBarcode == request.ItemBarcode
        //                     && a.BillTypeId == billTypeId
        //                     && a.TransactionNo == transactionNo)
        //    .Any();
        // if (exists)
        //     throw new Exception("条码重复扫描,请核对!");
        //if (exists)
        //    throw new Exception("条码重复扫描,请核对!");
        // // 6. 获取已报工数量
        // var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
        //         (a, b) =>
        //             new JoinQueryInfos(JoinType.Inner,
        //                 a.BillNo == b.BillNo))
        //     .Where((a, b) => a.BillTypeId == billTypeId
        //                      && a.TransactionNo == transactionNo
        //                      && a.TaskNo == barcode.BillNo)
        //     .Sum((a, b) => b.Quantity);
        //// 6. 获取已报工数量
        //var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
        //        (a, b) =>
        //            new JoinQueryInfos(JoinType.Inner,
        //                a.BillNo == b.BillNo))
        //    .Where((a, b) => a.BillTypeId == billTypeId
        //                     && a.TransactionNo == transactionNo
        //                     && a.TaskNo == barcode.BillNo)
        //    .Sum((a, b) => b.Quantity);
        // // 7. 获取工单计划数量和型号
        // var workOrder = Db.Queryable<Womdaa>()
        //     .Where(x => x.Daa001 == barcode.BillNo)
        //     .First();
        // if (workOrder == null)
        //     throw new Exception($"无工单明细,请核对!{request.ItemBarcode}");
        //// 7. 获取工单计划数量和型号
        //var workOrder = Db.Queryable<Womdaa>()
        //    .Where(x => x.Daa001 == barcode.BillNo)
        //    .First();
        //if (workOrder == null)
        //    throw new Exception($"无工单明细,请核对!{request.ItemBarcode}");
        // var planQty = workOrder.Daa008;
        // var itemModel = workOrder.Daa004;
        //var planQty = workOrder.Daa008;
        //var itemModel = workOrder.Daa004;
        // // 8. 使用事务处理报工数据
        // UseTransaction(db =>
        // {
        //     // 9. 处理有数量条码的自动报工
        //     if (barcode.Quantity > 0)
        //     {
        //         var reportQty = barcode.Quantity;
        //         if (reportQty <= 0)
        //             throw new Exception(
        //                 $"报工数量不能小于等于0,请核对!{request.ItemBarcode}");
        //// 8. 使用事务处理报工数据
        //UseTransaction(db =>
        //{
        //    // 9. 处理有数量条码的自动报工
        //    if (barcode.Quantity > 0)
        //    {
        //        var reportQty = barcode.Quantity;
        //        if (reportQty <= 0)
        //            throw new Exception(
        //                $"报工数量不能小于等于0,请核对!{request.ItemBarcode}");
        //         var totalQty = (reportedQty ?? 0) + reportQty;
        //         if (totalQty > workOrder.Daa008)
        //             throw new Exception(
        //                 $"本次报工数量:{reportQty} 大于剩余报工数量:{workOrder.Daa008 - reportedQty ?? 0},请核对!");
        //        var totalQty = (reportedQty ?? 0) + reportQty;
        //        if (totalQty > workOrder.Daa008)
        //            throw new Exception(
        //                $"本次报工数量:{reportQty} 大于剩余报工数量:{workOrder.Daa008 - reportedQty ?? 0},请核对!");
        //         // 10. 更新条码状态
        //         db.Updateable<MesInvItemBarcodes>()
        //             .SetColumns(x => new MesInvItemBarcodes
        //             {
        //                 WorkFlg = true
        //                 //Quantity = reportQty
        //             })
        //             .Where(x => x.Guid == barcode.Guid)
        //             .ExecuteCommand();
        //        // 10. 更新条码状态
        //        db.Updateable<MesInvItemBarcodes>()
        //            .SetColumns(x => new MesInvItemBarcodes
        //            {
        //                WorkFlg = true
        //                //Quantity = reportQty
        //            })
        //            .Where(x => x.Guid == barcode.Guid)
        //            .ExecuteCommand();
        //         // 11. 获取或创建报工单
        //         var workProd = db.Queryable<MesWorkProd>()
        //             .Where(x => x.TaskNo == barcode.BillNo
        //                         && x.CreateDate.Value.Date.ToString(
        //                             "yyyy-MM-dd") ==
        //                         DateTime.Now.Date.ToString("yyyy-MM-dd")
        //                         && x.BillTypeId == billTypeId
        //                         && x.TransactionNo == transactionNo
        //                         && x.ReportBy == request.StaffNo)
        //             .First();
        //        // 11. 获取或创建报工单
        //        var workProd = db.Queryable<MesWorkProd>()
        //            .Where(x => x.TaskNo == barcode.BillNo
        //                        && x.CreateDate.Value.Date.ToString(
        //                            "yyyy-MM-dd") ==
        //                        DateTime.Now.Date.ToString("yyyy-MM-dd")
        //                        && x.BillTypeId == billTypeId
        //                        && x.TransactionNo == transactionNo
        //                        && x.ReportBy == request.StaffNo)
        //            .First();
        //         var id = Guid.Empty;
        //         var billNo = "";
        //         if (workProd == null)
        //         {
        //             id = Guid.NewGuid();
        //             billNo = BillNo.GetBillNo("BG(报工)");
        //        var id = Guid.Empty;
        //        var billNo = "";
        //        if (workProd == null)
        //        {
        //            id = Guid.NewGuid();
        //            billNo = BillNo.GetBillNo("BG(报工)");
        //             workProd = new MesWorkProd
        //             {
        //                 Id = id,
        //                 BillNo = billNo,
        //                 LineNo = barcode.LineNo,
        //                 Company = barcode.Company,
        //                 Factory = barcode.Factory,
        //                 CreateBy = request.UserNo,
        //                 CreateDate = DateTime.Now,
        //                 LastupdateBy = request.UserNo,
        //                 LastupdateDate = DateTime.Now,
        //                 BillTypeId = billTypeId,
        //                 TransactionNo = transactionNo,
        //                 TaskNo = barcode.BillNo,
        //                 ReportBy = request.StaffNo,
        //                 ReportDate = DateTime.Now
        //             };
        //            workProd = new MesWorkProd
        //            {
        //                Id = id,
        //                BillNo = billNo,
        //                LineNo = barcode.LineNo,
        //                Company = barcode.Company,
        //                Factory = barcode.Factory,
        //                CreateBy = request.UserNo,
        //                CreateDate = DateTime.Now,
        //                LastupdateBy = request.UserNo,
        //                LastupdateDate = DateTime.Now,
        //                BillTypeId = billTypeId,
        //                TransactionNo = transactionNo,
        //                TaskNo = barcode.BillNo,
        //                ReportBy = request.StaffNo,
        //                ReportDate = DateTime.Now
        //            };
        //             db.Insertable(workProd).IgnoreColumns(true)
        //                 .ExecuteCommand();
        //         }
        //         else
        //         {
        //             id = workProd.Id;
        //             billNo = workProd.BillNo;
        //         }
        //            db.Insertable(workProd).IgnoreColumns(true)
        //                .ExecuteCommand();
        //        }
        //        else
        //        {
        //            id = workProd.Id;
        //            billNo = workProd.BillNo;
        //        }
        //         // 12. 插入报工明细
        //         var detailId = Guid.NewGuid();
        //         db.Insertable(new MesWorkProdCDetails
        //         {
        //             Id = detailId,
        //             MesWorkProdId = id,
        //             BillNo = billNo,
        //             ItemBarcode = request.ItemBarcode,
        //             Quantity = (int)reportQty,
        //             Company = barcode.Company,
        //             Factory = barcode.Factory,
        //             CreateBy = request.UserNo,
        //             CreateDate = DateTime.Now,
        //             LastupdateBy = request.UserNo,
        //             LastupdateDate = DateTime.Now,
        //             ItemNo = item.ItemNo,
        //             WorkLast = barcode.WorkLast,
        //             SilkPqty = barcode.SilkPqty,
        //             SilkId = barcode.SilkId,
        //             Silk = barcode.Silk,
        //             BgYg = request.StaffNo
        //         }).IgnoreColumns(true).ExecuteCommand();
        //        // 12. 插入报工明细
        //        var detailId = Guid.NewGuid();
        //        db.Insertable(new MesWorkProdCDetails
        //        {
        //            Id = detailId,
        //            MesWorkProdId = id,
        //            BillNo = billNo,
        //            ItemBarcode = request.ItemBarcode,
        //            Quantity = (int)reportQty,
        //            Company = barcode.Company,
        //            Factory = barcode.Factory,
        //            CreateBy = request.UserNo,
        //            CreateDate = DateTime.Now,
        //            LastupdateBy = request.UserNo,
        //            LastupdateDate = DateTime.Now,
        //            ItemNo = item.ItemNo,
        //            WorkLast = barcode.WorkLast,
        //            SilkPqty = barcode.SilkPqty,
        //            SilkId = barcode.SilkId,
        //            Silk = barcode.Silk,
        //            BgYg = request.StaffNo
        //        }).IgnoreColumns(true).ExecuteCommand();
        //         // 13. 更新工单已报工数量
        //         db.Updateable<Womdaa>()
        //                 .SetColumns(x => new Womdaa
        //                 {
        //                     Daa011 = (x.Daa011 ?? 0) + (int)barcode.Quantity
        //                 })
        //                 .Where(x => x.Daa001 == barcode.BillNo)
        //                 .ExecuteCommand();
        //        // 13. 更新工单已报工数量
        //        db.Updateable<Womdaa>()
        //                .SetColumns(x => new Womdaa
        //                {
        //                    Daa011 = (x.Daa011 ?? 0) + (int)barcode.Quantity
        //                })
        //                .Where(x => x.Daa001 == barcode.BillNo)
        //                .ExecuteCommand();
        //         // 14. 重新获取最新已报工数量
        //         reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>(
        //                 (a, b) =>
        //                     new JoinQueryInfos(JoinType.Inner,
        //                         a.BillNo == b.BillNo))
        //             .Where((a, b) => a.BillTypeId == billTypeId
        //                              && a.TransactionNo == transactionNo
        //                              && a.TaskNo == barcode.BillNo)
        //             .Sum((a, b) => b.Quantity);
        //     }
        //        // 14. 重新获取最新已报工数量
        //        reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>(
        //                (a, b) =>
        //                    new JoinQueryInfos(JoinType.Inner,
        //                        a.BillNo == b.BillNo))
        //            .Where((a, b) => a.BillTypeId == billTypeId
        //                             && a.TransactionNo == transactionNo
        //                             && a.TaskNo == barcode.BillNo)
        //            .Sum((a, b) => b.Quantity);
        //    }
        //     return 1;
        // });
        //    return 1;
        //});
        // // 15. 返回处理结果
        // return new ScanWorkResult
        // {
        //     TaskNo = barcode.BillNo,
        //     ItemNo = item.ItemNo,
        //     PlanQty = planQty ?? 0,
        //     ReportedQty = reportedQty ?? 0,
        //     CurrentQty = barcode.Quantity.Value,
        //     BarcodeQty = barcode.Quantity.Value,
        //     ItemName = item.ItemName,
        //     ItemModel = itemModel,
        //     Message = "扫码成功!"
        // };
        //// 15. 返回处理结果
        //return new ScanWorkResult
        //{
        //    TaskNo = barcode.BillNo,
        //    ItemNo = item.ItemNo,
        //    PlanQty = planQty ?? 0,
        //    ReportedQty = reportedQty ?? 0,
        //    CurrentQty = barcode.Quantity.Value,
        //    BarcodeQty = barcode.Quantity.Value,
        //    ItemName = item.ItemName,
        //    ItemModel = itemModel,
        //    Message = "扫码成功!"
        //};
        //1.验证员工信息
         var staff = Db.Queryable<MesStaff>()
             .Where(x => x.StaffNo == request.StaffNo)
             .First();
        var staff = Db.Queryable<MesStaff>()
            .Where(x => x.StaffNo == request.StaffNo)
            .First();
        if (staff == null)
            throw new Exception("请先选择人员");
@@ -293,51 +291,13 @@
        var po_outMsg = parameters[2].Value?.ToString() ?? string.Empty;
        var po_outSum = parameters[3].Value != DBNull.Value ? Convert.ToInt32(parameters[3].Value) : -1;
        var po_womInBarSum = parameters[4].Value != DBNull.Value ? Convert.ToDecimal(parameters[4].Value) : 0m;
        // 声明变量在外层,确保在所有分支中都可访问
        MesInvItemIns rksqOrder = null;
        List<MesInvItemInRksqDetails> rksqDetails = new List<MesInvItemInRksqDetails>();
        if (po_outSum == 1)
        {
            rksqOrder = Db.Queryable<MesInvItemIns>()
               .Where(x => x.RbillNo == barcode.BillNo && x.TransctionNo == "181" && x.CreateBy == request.StaffNo)
               .First();
            if (rksqOrder != null)
            {
                var sql = string.Format(@"SELECT A.item_barcode ItemBarcode,B.QUANTITY BgQuantity,c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel
FROM MES_INV_ITEM_IN_RKSQ_DETAILS A
LEFT JOIN MES_INV_ITEM_BARCODES B ON A.item_barcode = B.ITEM_BARCODE
LEFT JOIN MES_ITEMS C ON  B.ITEM_ID = C.item_id
WHERE A.bill_no= '{0}' ORDER BY A.create_date DESC", rksqOrder.BillNo);
                rksqDetails = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql).ToList();
            }
        }
        else if (po_outSum == 2)
        {
            rksqOrder = Db.Queryable<MesInvItemIns>()
              .Where(x => x.RbillNo == barcode.BillNo && x.TransctionNo == "181" && x.CreateBy == request.StaffNo)
              .First();
            if (rksqOrder != null)
            {
                rksqOrder.BillNo = "";
            }
            rksqDetails = new List<MesInvItemInRksqDetails>();
        }
        // Check if the procedure failed
        if (po_outSum == -1)
        {
            throw new Exception(po_outMsg);
        }
        // 处理rksqOrder为null的情况
        string sjBillNo = rksqOrder?.BillNo ?? "";
        // 15. Return processing result
        return new ScanWorkResult
@@ -351,8 +311,8 @@
            ItemName = item.ItemName,
            ItemModel = workOrder.Daa004,
            Message = po_outMsg,
            sjBillNo = sjBillNo,
            BarcodesDetail = rksqDetails,
            //sjBillNo = sjBillNo,
            //BarcodesDetail = rksqDetails,
        };
    }
@@ -376,220 +336,124 @@
    /// </exception>
    public bool ScanWorkProdAsync(ScanWorkRequest request)
    {
        //// 1. 验证报工数量是否大于0
        //if (request.Quantity <= 0)
        //    throw new Exception("报工数量不能小于等于 0,请核对!");
        // 1. 验证报工数量是否大于0
        if (request.Quantity <= 0)
            throw new Exception("报工数量不能小于等于 0,请核对!");
        //// 2. 查询条码信息,验证条码是否存在
        //var barcode = Db.Queryable<MesInvItemBarcodes>()
        //    .Where(x => x.ItemBarcode == request.ItemBarcode)
        //    .First();
        //if (barcode == null)
        //    throw new Exception($"库存中无此条码,请核对!{request.ItemBarcode}");
        // 2. 查询条码信息,验证条码是否存在
        var barcode = Db.Queryable<MesInvItemBarcodes>()
            .Where(x => x.ItemBarcode == request.ItemBarcode)
            .First();
        if (barcode == null)
            throw new Exception($"库存中无此条码,请核对!{request.ItemBarcode}");
        //// 3. 查询工单信息,验证工单是否存在
        //var womdaa = Db.Queryable<Womdaa>()
        //    .Where(x => x.Daa001 == barcode.BillNo)
        //    .First();
        //if (womdaa == null)
        //    throw new Exception($"条码不是报工条码/无对应工单,请核对!{request.ItemBarcode}");
        // 3. 查询工单信息,验证工单是否存在
        var womdaa = Db.Queryable<Womdaa>()
            .Where(x => x.Daa001 == barcode.BillNo)
            .First();
        if (womdaa == null)
            throw new Exception($"条码不是报工条码/无对应工单,请核对!{request.ItemBarcode}");
        //// 4. 根据条码备注确定单据类型和交易号
        //var billTypeId = 900; // 默认单据类型
        //var transactionNo = 902; // 默认交易号(半成品工序)
        //switch (barcode.Memo?.Trim() ?? "0")
        //{
        //    case "丝印":
        //        transactionNo = 901; // 丝印工序
        //        break;
        //    case "半成品":
        //        transactionNo = 902; // 半成品工序
        //        break;
        //    case "成品":
        //    case "包装":
        //        transactionNo = 903; // 成品/包装工序
        //        break;
        //}
        //// 5. 汇总已扫条码数量,验证是否超出计划数量
        //var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) =>
        //        new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo))
        //    .Where((a, b) => a.BillTypeId == billTypeId
        //                     && a.TransactionNo == transactionNo
        //                     && b.SilkId == barcode.SilkId
        //                     && a.TaskNo == barcode.BillNo)
        //    .Sum((a, b) => b.Quantity);
        //sumQty = (sumQty ?? 0) + (int)request.Quantity;
        //if (sumQty > womdaa.Daa008)
        //    throw new Exception(
        //        $"本次报工数量:{request.Quantity} 大于剩余报工数量:{womdaa.Daa008 - (sumQty - request.Quantity)},请核对!");
        //// 6. 开启事务处理报工数据
        //return UseTransaction(db =>
        //{
        //    // 6.1 更新条码信息,设置已报工标记和数量
        //    db.Updateable<MesInvItemBarcodes>()
        //        .SetColumns(x => x.WorkFlg == true)
        //        .SetColumns(x => x.Quantity == request.Quantity)
        //        .Where(x => x.Guid == barcode.Guid)
        //        .ExecuteCommand();
        //    // 6.2 获取或创建报工单
        //    var workProd = db.Queryable<MesWorkProd>()
        //        .Where(x => x.TaskNo == barcode.BillNo
        //                    && x.CreateDate.Value.Date.ToString("yyyy-MM-dd") ==
        //                    DateTime.Now.Date.ToString("yyyy-MM-dd")
        //                    && x.BillTypeId == billTypeId
        //                    && x.TransactionNo == transactionNo
        //                    && x.Status == 0)
        //        .First();
        //    // 6.3 如果报工单不存在则创建新的报工单
        //    if (workProd == null)
        //    {
        //        var billNo = BillNo.GetBillNo("BG(报工编号)");
        //        workProd = new MesWorkProd
        //        {
        //            Id = Guid.NewGuid(),
        //            BillNo = billNo,
        //            LineNo = barcode.LineNo,
        //            Company = barcode.Company,
        //            Factory = barcode.Factory,
        //            CreateBy = request.UserNo,
        //            CreateDate = DateTime.Now,
        //            LastupdateBy = request.UserNo,
        //            LastupdateDate = DateTime.Now,
        //            PbillNo = barcode.BillNo,
        //            BillTypeId = billTypeId,
        //            TransactionNo = transactionNo,
        //            TaskNo = barcode.BillNo
        //        };
        //        db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand();
        //    }
        //    // 6.4 插入报工明细记录
        //    var detail = new MesWorkProdCDetails
        //    {
        //        Id = Guid.NewGuid(),
        //        BillNo = workProd.BillNo,
        //        ItemBarcode = request.ItemBarcode,
        //        Quantity = (int)request.Quantity,
        //        Company = barcode.Company,
        //        Factory = barcode.Factory,
        //        CreateBy = request.UserNo,
        //        CreateDate = DateTime.Now,
        //        LastupdateBy = request.UserNo,
        //        LastupdateDate = DateTime.Now,
        //        ItemNo = barcode.ItemNo,
        //        PbillNo = barcode.BillNo,
        //        WorkLast = barcode.WorkLast,
        //        SilkPqty = barcode.SilkPqty,
        //        SilkId = barcode.SilkId,
        //        Silk = barcode.Silk
        //    };
        //    db.Insertable(detail).IgnoreColumns(true).ExecuteCommand();
        //    return 1;
        //}) > 0;
        // 调用存储过程处理生产报工审核
        var parameters = new SqlParameter[]
        // 4. 根据条码备注确定单据类型和交易号
        var billTypeId = 900; // 默认单据类型
        var transactionNo = 902; // 默认交易号(半成品工序)
        switch (barcode.Memo?.Trim() ?? "0")
        {
             // 输出参数:返回消息(最大长度2500字符)
             new SqlParameter("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
             // 输出参数:返回影响行数
             new SqlParameter("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
             // 输入参数:操作人工号
            new SqlParameter("@userno", request.UserNo),
            // 输入参数:单据编号(这里传入了条码值)
             new SqlParameter("@inorder", request.sjBillNo),
             // 输入参数:操作类型(1为审核,0为反审核)
             new SqlParameter("@inFieldValue", 1)
            // 注:以下参数在存储过程中有默认值,可根据需要添加
            // @inFieldName nvarchar(20)=null,  // 扩展字段名
            // @in1 nvarchar(20)=null,         // 扩展字段1
            // @in2 nvarchar(20)=null          // 扩展字段2
        };
        // 存储过程名称
        string procedureName = "prc_pda_scbg_submit";
        // 执行存储过程
        int res = DbHelperSQL.RunProcedure_NonQuery(procedureName, parameters);
        // 获取输出参数值(带类型转换)
        var outMsg = parameters[0].Value?.ToString() ?? string.Empty;  // 返回消息
        var outSum = parameters[1].Value != DBNull.Value ? Convert.ToInt32(parameters[1].Value) : -1;  // 影响行数
        if (outSum == -1)
        {
            throw new Exception(outMsg);
            case "丝印":
                transactionNo = 901; // 丝印工序
                break;
            case "半成品":
                transactionNo = 902; // 半成品工序
                break;
            case "成品":
            case "包装":
                transactionNo = 903; // 成品/包装工序
                break;
        }
        else
        // 5. 汇总已扫条码数量,验证是否超出计划数量
        var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) =>
                new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo))
            .Where((a, b) => a.BillTypeId == billTypeId
                             && a.TransactionNo == transactionNo
                             && b.SilkId == barcode.SilkId
                             && a.TaskNo == barcode.BillNo)
            .Sum((a, b) => b.Quantity);
        sumQty = (sumQty ?? 0) + (int)request.Quantity;
        if (sumQty > womdaa.Daa008)
            throw new Exception(
                $"本次报工数量:{request.Quantity} 大于剩余报工数量:{womdaa.Daa008 - (sumQty - request.Quantity)},请核对!");
        // 6. 开启事务处理报工数据
        return UseTransaction(db =>
        {
            return true;
        }
            // 6.1 更新条码信息,设置已报工标记和数量
            db.Updateable<MesInvItemBarcodes>()
                .SetColumns(x => x.WorkFlg == true)
                .SetColumns(x => x.Quantity == request.Quantity)
                .Where(x => x.Guid == barcode.Guid)
                .ExecuteCommand();
            // 6.2 获取或创建报工单
            var workProd = db.Queryable<MesWorkProd>()
                .Where(x => x.TaskNo == barcode.BillNo
                            && x.CreateDate.Value.Date.ToString("yyyy-MM-dd") ==
                            DateTime.Now.Date.ToString("yyyy-MM-dd")
                            && x.BillTypeId == billTypeId
                            && x.TransactionNo == transactionNo
                            && x.Status == 0)
                .First();
            // 6.3 如果报工单不存在则创建新的报工单
            if (workProd == null)
            {
                var billNo = BillNo.GetBillNo("BG(报工编号)");
                workProd = new MesWorkProd
                {
                    Id = Guid.NewGuid(),
                    BillNo = billNo,
                    LineNo = barcode.LineNo,
                    Company = barcode.Company,
                    Factory = barcode.Factory,
                    CreateBy = request.UserNo,
                    CreateDate = DateTime.Now,
                    LastupdateBy = request.UserNo,
                    LastupdateDate = DateTime.Now,
                    PbillNo = barcode.BillNo,
                    BillTypeId = billTypeId,
                    TransactionNo = transactionNo,
                    TaskNo = barcode.BillNo
                };
                db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand();
            }
            // 6.4 插入报工明细记录
            var detail = new MesWorkProdCDetails
            {
                Id = Guid.NewGuid(),
                BillNo = workProd.BillNo,
                ItemBarcode = request.ItemBarcode,
                Quantity = (int)request.Quantity,
                Company = barcode.Company,
                Factory = barcode.Factory,
                CreateBy = request.UserNo,
                CreateDate = DateTime.Now,
                LastupdateBy = request.UserNo,
                LastupdateDate = DateTime.Now,
                ItemNo = barcode.ItemNo,
                PbillNo = barcode.BillNo,
                WorkLast = barcode.WorkLast,
                SilkPqty = barcode.SilkPqty,
                SilkId = barcode.SilkId,
                Silk = barcode.Silk
            };
            db.Insertable(detail).IgnoreColumns(true).ExecuteCommand();
            return 1;
        }) > 0;
    }
    public ScanWorkResult GetRksqList(ScanWorkRequest request)
    {
        //1.验证员工信息
        var staff = Db.Queryable<MesStaff>()
            .Where(x => x.StaffNo == request.StaffNo)
            .First();
        if (staff == null)
            throw new Exception("请先选择人员");
        var rksqOrder = Db.Queryable<MesInvItemIns>()
            .Where(x => x.BillNo == request.sjBillNo && x.Status == 0)
            .First();
        if (rksqOrder == null)
            throw new Exception("该检验单已提交送检");
        var sql = string.Format(@"SELECT A.item_barcode ItemBarcode,B.QUANTITY BgQuantity,c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel
    FROM MES_INV_ITEM_IN_RKSQ_DETAILS A
    LEFT JOIN MES_INV_ITEM_BARCODES B ON A.item_barcode = B.ITEM_BARCODE
    LEFT JOIN MES_ITEMS C ON  B.ITEM_ID = C.item_id
    WHERE A.bill_no= '{0}'ORDER BY A.create_date DESC", rksqOrder.BillNo);
        var RKSQ = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql);
        var rksqDetails = RKSQ.ToList();
        //var rksqDetails = Db.Queryable<MesInvItemInRksqDetails>()
        //    .Where(x => x.BillNo == )
        //    .ToList();
        // 15. Return processing result
        return new ScanWorkResult
        {
            BarcodesDetail = rksqDetails,
        };
    }
    public ScanWorkResult GetRksqSelect(ScanWorkRequest request)
    {
        //1.验证员工信息
        var staff = Db.Queryable<MesStaff>()
            .Where(x => x.StaffNo == request.StaffNo)
            .First();
        if (staff == null)
            throw new Exception("请先选择人员");
        var rksqOrder = Db.Queryable<MesInvItemIns>()
            .Where(x => x.TransctionNo=="181"&& x.Status == 0 && x.CreateBy== request.StaffNo)
            .ToList();
        return new ScanWorkResult
        {
            rksqOrderList = rksqOrder,
        };
    }
}