啊鑫
8 天以前 59af98c2aeb6c40d820e8d5c2f9f6764f57721bd
service/Wom/MesWorkProdManager.cs
@@ -1,12 +1,8 @@
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 +42,10 @@
    /// </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("请先选择人员");
        // // 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}");
        // // 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();
        // 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);
        // // 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;
        // // 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},请核对!");
        //         // 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();
        //         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
        //             };
        //             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();
        //         // 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);
        //     }
        //     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 = "扫码成功!"
        // };
        //1.验证员工信息
         var staff = Db.Queryable<MesStaff>()
             .Where(x => x.StaffNo == request.StaffNo)
             .First();
        // 1. 验证员工信息
        var staff = Db.Queryable<MesStaff>()
            .Where(x => x.StaffNo == request.StaffNo)
            .First();
        if (staff == null)
            throw new Exception("请先选择人员");
@@ -269,6 +63,46 @@
        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;
        }
        // 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("条码重复扫描,请核对!");
        // 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)
@@ -276,85 +110,139 @@
        if (workOrder == null)
            throw new Exception($"无工单明细,请核对!{request.ItemBarcode}");
        // 使用存储过程处理生产报工
        var parameters = new SqlParameter[]
        var planQty = workOrder.Daa008;
        var itemModel = workOrder.Daa004;
        // 8. 使用事务处理报工数据
        UseTransaction(db =>
        {
            new SqlParameter("@pi_user", request.StaffNo),
            new SqlParameter("@pi_barcode", request.ItemBarcode),
            new SqlParameter("@po_outMsg", SqlDbType.NVarChar, 200) { Direction = ParameterDirection.Output },
            new SqlParameter("@po_outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
            new SqlParameter("@po_womInBarSum", SqlDbType.Decimal) { Direction = ParameterDirection.Output }
        };
        string procedureName = "prc_pda_scbg";
        int res = DbHelperSQL.RunProcedure_NonQuery(procedureName, parameters);
        // Retrieve output parameters with proper type conversion
        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)
            // 9. 处理有数量条码的自动报工
            if (barcode.Quantity > 0)
            {
                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 reportQty = barcode.Quantity;
                if (reportQty <= 0)
                    throw new Exception(
                        $"报工数量不能小于等于0,请核对!{request.ItemBarcode}");
                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();
                var totalQty = (reportedQty ?? 0) + reportQty;
                if (totalQty > workOrder.Daa008)
                    throw new Exception(
                        $"本次报工数量:{reportQty} 大于剩余报工数量:{workOrder.Daa008 - reportedQty ?? 0},请核对!");
            if (rksqOrder != null)
            {
                rksqOrder.BillNo = "";
                // 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();
                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
                    };
                    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();
                // 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);
            }
            rksqDetails = new List<MesInvItemInRksqDetails>();
        }
            return 1;
        });
        // Check if the procedure failed
        if (po_outSum == -1)
        {
            throw new Exception(po_outMsg);
        }
        // 处理rksqOrder为null的情况
        string sjBillNo = rksqOrder?.BillNo ?? "";
        // 15. Return processing result
        // 15. 返回处理结果
        return new ScanWorkResult
        {
            TaskNo = barcode.BillNo,
            ItemNo = item.ItemNo,
            PlanQty = workOrder.Daa008 ?? 0,
            ReportedQty = po_womInBarSum,
            PlanQty = planQty ?? 0,
            ReportedQty = reportedQty ?? 0,
            CurrentQty = barcode.Quantity.Value,
            BarcodeQty = barcode.Quantity.Value,
            ItemName = item.ItemName,
            ItemModel = workOrder.Daa004,
            Message = po_outMsg,
            sjBillNo = sjBillNo,
            BarcodesDetail = rksqDetails,
            ItemModel = itemModel,
            Message = "扫码成功!"
        };
    }
@@ -376,220 +264,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,
        };
    }
}