kyy
2025-10-11 2dbdf56a285a9272425a02bb4acf28236c5c5dce
service/Warehouse/MesInvItemInCDetailsManager.cs
@@ -1,5 +1,4 @@
using Masuit.Tools;
using Masuit.Tools.Models;
using Masuit.Tools.Models;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
@@ -8,9 +7,9 @@
using NewPdaSqlServer.util;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Security.Cryptography;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace NewPdaSqlServer.service.Warehouse;
@@ -29,8 +28,7 @@
        if (string.IsNullOrEmpty(entity.userName)) throw new ArgumentNullException(nameof(entity.userName), "用户名不允许为空");
        if (string.IsNullOrEmpty(entity.sectionCode)) throw new ArgumentNullException(nameof(entity.sectionCode), "库位编号不允许为空");
        if (string.IsNullOrEmpty(entity.barcode)) throw new ArgumentNullException(nameof(entity.barcode), "条码不允许为空");
        if (string.IsNullOrEmpty(entity.cgrkType)) throw new ArgumentNullException(nameof(entity.cgrkType), "采购入库类型不允许为空");
        using (var conn = new SqlConnection(connectionString))
        {
            using (var cmd = new SqlCommand("[prc_pda_inv_cgrk]", conn))
@@ -46,7 +44,7 @@
                        new SqlParameter("@pi_user", SqlDbType.NVarChar, 100) { Value = entity.userName },
                        new SqlParameter("@pi_barcode", SqlDbType.NVarChar, 100) { Value =  entity.barcode.Trim().ToLower() },
                        new SqlParameter("@pi_sectionCode", SqlDbType.NVarChar, 30) { Value = entity.sectionCode },
                        new SqlParameter("@pi_cgrkType", SqlDbType.NVarChar, 30) { Value = entity.cgrkType },
                        new SqlParameter("@pi_weight", SqlDbType.Decimal) { Value = entity.weight },
                        new SqlParameter("@po_outMsg", SqlDbType.NVarChar, 300) { Direction = ParameterDirection.Output },
                        new SqlParameter("@po_outSum", SqlDbType.NVarChar, 300) { Direction = ParameterDirection.Output }
                    };
@@ -112,7 +110,7 @@
                        a.Item_Barcode AS barcode
                    FROM   Mes_Inv_Item_In_C_Details a
                    LEFT JOIN  Mes_Items b ON a.Item_Id = b.Item_Id
                    WHERE  a.Item_In_Id = '{0}' AND a.Item_Id = '{1}'",cId, itemBarcodeDetails.ItemId);
                    WHERE  a.Item_In_Id = '{0}' AND a.Item_Id = '{1}'", cId, itemBarcodeDetails.ItemId);
                    res.ItemBarCDetails = Db.Ado.SqlQuery<dynamic>(sql2);
@@ -125,7 +123,7 @@
                catch (Exception ex)
                {
                    // 记录异常日志(建议添加日志记录)
                    res.Message = $"操作失败: {ex.Message}";
                    res.SumQuantity = -1;
@@ -134,872 +132,874 @@
            }
        }
    }
    //public ItemInBaseModel SaveBarCodes(WarehouseQuery entity)
    //{
    //    string functionName = "采购入库", fieldName = null, inFieldVal = null;
    //    string user = entity.userName,
    //        sectionCode = entity.sectionCode,
    //        itemBarcode = entity.barcode;
    //    var transactionNo = "101";
    //    int? billTypeId = 100, num = 0, num2 = 0;
    //    var freeze = 0;
    //    decimal cSyQty = 0;
    //    if (string.IsNullOrEmpty(sectionCode))
    //        throw new Exception("请扫库位条码!");
    //    var itemBarcodeDetails = Db.Queryable<MesInvItemBarcodes>()
    //        .Where(it => it.ItemBarcode == itemBarcode)
    //        .First();
    //    if (itemBarcodeDetails == null)
    //        throw new Exception("条码不存在,请核对!");
    //    if (string.IsNullOrEmpty(itemBarcodeDetails.Memo) || itemBarcodeDetails.Memo != "采购入库")
    //        throw new Exception("此条码不属于到货条码,无法用采购入库!");
    /*  public ItemInBaseModel SaveBarCodes(WarehouseQuery entity)
      {
          string functionName = "采购入库", fieldName = null, inFieldVal = null;
          string user = entity.userName,
              sectionCode = entity.sectionCode,
              itemBarcode = entity.barcode;
          var transactionNo = "101";
          int? billTypeId = 100, num = 0, num2 = 0;
          var freeze = 0;
          decimal cSyQty = 0;
    //    var inventory = Db.Queryable<MesInvItemArn>()
    //        .Where(it => it.BillNo == itemBarcodeDetails.BillNo && it.Fstatus == true)
    //        .First();
          if (string.IsNullOrEmpty(sectionCode))
              throw new Exception("请扫库位条码!");
    //    if (inventory == null)
    //        throw new Exception("此条码找不到对应收货单或未审核!");
          var itemBarcodeDetails = Db.Queryable<MesInvItemBarcodes>()
              .Where(it => it.ItemBarcode == itemBarcode)
              .First();
    //    // var inventoryDetails = Db.Queryable<MesInvItemArnDetail>()
    //    //     .Where(it => it.ParentGuid == inventory.Guid
    //    //                  && it.ItemId == itemBarcodeDetails.ItemId
    //    //                  && it.EbelnLine == itemBarcodeDetails.WorkLine
    //    //                  && it.Ebeln == itemBarcodeDetails.WorkNo)
    //    //     .First();
          if (itemBarcodeDetails == null)
              throw new Exception("条码不存在,请核对!");
    //    var inventoryDetails = Db.Queryable<MesInvItemArnDetail>()
    //        .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
    //        .First();
          if (string.IsNullOrEmpty(itemBarcodeDetails.Memo) || itemBarcodeDetails.Memo != "采购入库")
              throw new Exception("此条码不属于到货条码,无法用采购入库!");
    //    var cgddDetails = Db.Queryable<MesRohInData>()
    //        .Where(it => it.EbelnK3id == inventoryDetails.LineK3id)
    //        .First();
          var inventory = Db.Queryable<MesInvItemArn>()
              .Where(it => it.BillNo == itemBarcodeDetails.BillNo && it.Fstatus == true )
              .First();
    //    if (inventoryDetails == null)
    //        throw new Exception("此条码找不到对应收货单明细!");
          if (inventory == null)
              throw new Exception("此条码找不到对应收货单或未审核!");
    //    //获取到货检验明细
    //    var sqlParams = new List<SugarParameter> { new("@dhmxGuid", itemBarcodeDetails.AboutGuid) };
    //    var sql1 = @"SELECT *FROM v_dhmx WHERE dhmxGuid = @dhmxGuid ";
    //    var dhjymx = Db.Ado.SqlQuery<vDhmx>(sql1, sqlParams).First();
    //    //判定检验能否入库
    //    if (dhjymx.CanStore != 1)
    //    {
    //        throw new Exception($"该条码对应的收料单检验结果:【{dhjymx.InspectionResult}】,判定结果:【{dhjymx.JudgmentResult}】,处理意见:【{dhjymx.HandlingSuggestion}】,无法入库");
    //    }
          // var inventoryDetails = Db.Queryable<MesInvItemArnDetail>()
          //     .Where(it => it.ParentGuid == inventory.Guid
          //                  && it.ItemId == itemBarcodeDetails.ItemId
          //                  && it.EbelnLine == itemBarcodeDetails.WorkLine
          //                  && it.Ebeln == itemBarcodeDetails.WorkNo)
          //     .First();
    //    var depotCode = Db.Queryable<MesDepotSections>()
    //        .Where(it => it.DepotSectionCode == sectionCode)
    //        .Select(it => it.DepotGuid)
    //        .First();
          var inventoryDetails = Db.Queryable<MesInvItemArnDetail>()
              .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
              .First();
    //    var depotCode2 = Db.Queryable<MesInvItemArn>()
    //        .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
    //        .Select(it => it.DepotsId)
    //        .First();
          var cgddDetails = Db.Queryable<MesRohInData>()
              .Where(it => it.EbelnK3id == inventoryDetails.LineK3id)
              .First();
    //    MesDepots mesDepost = null;
          if (cgddDetails == null)
              throw new Exception("此条码找不到对应采购订单明细!");
    //    var checkGuid = UtilityHelper.CheckGuid(depotCode);
    //    if (checkGuid && depotCode != null)
    //    {
    //        mesDepost = Db.Queryable<MesDepots>()
    //            .Where(s => s.DepotId.ToString() == depotCode).First();
          if (inventoryDetails == null)
              throw new Exception("此条码找不到对应收货单明细!");
    //        // if (depotCode != mesDepost.Guid)
    //        //     throw new Exception("扫描库位与采购入库库位不一致!");
    //    }
    //    else
    //    {
    //        throw new Exception("库位编码 " + sectionCode + " 不存在,请确认!");
    //    }
          //获取到货检验明细
          var sqlParams = new List<SugarParameter> { new("@dhmxGuid", itemBarcodeDetails.AboutGuid) };
          var sql1 = @"SELECT *FROM v_dhmx WHERE dhmxGuid = @dhmxGuid ";
          var dhjymx = Db.Ado.SqlQuery<vDhmx>(sql1, sqlParams).First();
          //判定检验能否入库
          if (dhjymx.CanStore!= 1)
          {
              throw new Exception($"该条码对应的收料单检验结果:【{dhjymx.InspectionResult}】,判定结果:【{dhjymx.JudgmentResult}】,处理意见:【{dhjymx.HandlingSuggestion}】,无法入库");
          }
          var depotCode = Db.Queryable<MesDepotSections>()
              .Where(it => it.DepotSectionCode == sectionCode)
              .Select(it => it.DepotGuid)
              .First();
    //    //num = Db.Queryable<MesInvItemInCDetails>()
    //    //    .Where(it => it.ItemBarcode == itemBarcode)
    //    //    .Count();
          var depotCode2 = Db.Queryable<MesInvItemArn>()
              .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
              .Select(it => it.DepotsId)
              .First();
    //    //if (num > 0)
    //    //    throw new Exception("此条码已扫码入库完成,请核对!");
          MesDepots mesDepost = null;
    //    //num = Db.Queryable<MesInvItemStocks>()
    //    //    .Where(it => it.ItemBarcode == itemBarcode)
    //    //    .Count();
          var checkGuid = UtilityHelper.CheckGuid(depotCode);
          if (checkGuid && depotCode != null)
          {
              mesDepost = Db.Queryable<MesDepots>()
                  .Where(s => s.DepotId.ToString() == depotCode).First();
    //    //if (num > 0)
    //    //    throw new Exception("此条码已扫码入库,请核对!");
              // if (depotCode != mesDepost.Guid)
              //     throw new Exception("扫描库位与采购入库库位不一致!");
          }
          else
          {
              throw new Exception("库位编码 " + sectionCode + " 不存在,请确认!");
          }
    //    var wmsManager = new WmsBaseMangeer();
    //    // 新增入库校验(调用存储过程)
    //    var checkResult = wmsManager.pdaInvJY(
    //        db: Db,
    //        edtUserNo: entity.userName,
    //        barcode: entity.barcode,
    //        sectionCode: sectionCode,
    //        stockId: mesDepost.DepotId.ToString(),
    //        stockOrgId: mesDepost.FSubsidiary,
    //        billNo: "", // 根据实际单据号传值
    //        transactionNo: "101" // 事务类型与存储过程匹配
    //    );
    //    if (Convert.ToInt32(checkResult.result) < 1)
    //        throw new Exception($"入库校验失败:{checkResult.strMsg}");
          //num = Db.Queryable<MesInvItemInCDetails>()
          //    .Where(it => it.ItemBarcode == itemBarcode)
          //    .Count();
          //if (num > 0)
          //    throw new Exception("此条码已扫码入库完成,请核对!");
          //num = Db.Queryable<MesInvItemStocks>()
          //    .Where(it => it.ItemBarcode == itemBarcode)
          //    .Count();
    //    //num = Db.Queryable<MesInvItemArn>()
    //    //    .Where(a => a.BillNo == itemBarcodeDetails.BillNo)
    //    //    .InnerJoin<MesInvItemArnDetail>((a, b) =>
    //    //        b.ParentGuid == a.Guid &&
    //    //        b.ItemId == itemBarcodeDetails.ItemId && b.Ischeck == 1)
    //    //    .Count();
          //if (num > 0)
          //    throw new Exception("此条码已扫码入库,请核对!");
    //    //num2 = Db.Queryable<MesInvItemArn>()
    //    //    .Where(a => a.BillNo == itemBarcodeDetails.BillNo)
    //    //    .InnerJoin<MesInvItemArnDetail>((a, b) => b.ParentGuid == a.Guid
    //    //        && b.ItemId == itemBarcodeDetails.ItemId
    //    //        && (b.CheckRes == "合格" || b.CheckStates == "特采直接使用"))
    //    //    .Count();
          var wmsManager = new WmsBaseMangeer();
          // 新增入库校验(调用存储过程)
          var checkResult = wmsManager.pdaInvJY(
              db: Db,
              edtUserNo: entity.userName,
              barcode: entity.barcode,
              sectionCode: sectionCode,
              stockId: mesDepost.DepotId.ToString(),
              stockOrgId: mesDepost.FSubsidiary,
              billNo: "", // 根据实际单据号传值
              transactionNo: "101" // 事务类型与存储过程匹配
          );
    //    //switch (num)
    //    //{
    //    //    case 0 when num2 == 0:
    //    //    case > 0 when num2 == 0:
    //    //        freeze = 1;
    //    //        break;
    //    //    case 0 when num2 > 0:
    //    //        throw new Exception("入库失败,到货单据有问题!");
    //    //}
          if (Convert.ToInt32(checkResult.result) < 1)
              throw new Exception($"入库校验失败:{checkResult.strMsg}");
    //    // 判断货主类型
    //    var owner_type = wmsManager.GetOwnerType(cgddDetails.DemandOrg);
    //    // if (Db.Queryable<SysOrganization>().Any(x => x.Fid == cgddDetails.DemandOrg))
    //    // {
    //    //     owner_type = "BD_OwnerOrg";
    //    // }
    //    // else
    //    // {
    //    //     // 第二层判断:检查 MES_CUSTOMER
    //    //     if (Db.Queryable<MesCustomer>().Any(x => x.Id == Convert.ToInt32(cgddDetails.DemandOrg)))
    //    //     {
    //    //         owner_type = "BD_Customer";
    //    //     }
    //    //     else
    //    //     {
    //    //         // 第三层判断:检查 MES_SUPPLIER
    //    //         if (Db.Queryable<MesSupplier>().Any(x => x.Id == Convert.ToInt32(cgddDetails.DemandOrg)))
    //    //         {
    //    //             owner_type = "BD_Supplier";
    //    //         }
    //    //         else
    //    //         {
    //    //             // 第四层判断:再次检查 SYS_ORGANIZATION
    //    //             if (Db.Queryable<SysOrganization>().Any(x => x.Fid == cgddDetails.ReceivingOrg))
    //    //             {
    //    //                 owner_type = "BD_OwnerOrg";
    //    //             }
    //    //             else
    //    //             {
    //    //                 throw new Exception("入库失败,到货单据对应的需求组织有问题!");
    //    //             }
    //    //         }
    //    //     }
    //    //}
          //num = Db.Queryable<MesInvItemArn>()
          //    .Where(a => a.BillNo == itemBarcodeDetails.BillNo)
          //    .InnerJoin<MesInvItemArnDetail>((a, b) =>
          //        b.ParentGuid == a.Guid &&
          //        b.ItemId == itemBarcodeDetails.ItemId && b.Ischeck == 1)
          //    .Count();
    //    var result = new ItemInBaseModel();
          //num2 = Db.Queryable<MesInvItemArn>()
          //    .Where(a => a.BillNo == itemBarcodeDetails.BillNo)
          //    .InnerJoin<MesInvItemArnDetail>((a, b) => b.ParentGuid == a.Guid
          //        && b.ItemId == itemBarcodeDetails.ItemId
          //        && (b.CheckRes == "合格" || b.CheckStates == "特采直接使用"))
          //    .Count();
    //    UseTransaction(db =>
    //    {
    //        var existingRecord = db.Queryable<MesInvItemIns>()
    //            .Where(it => it.InsDate.Value.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd")
    //                         && it.TaskNo == itemBarcodeDetails.BillNo
    //                         && it.Status == 0
    //                         && it.TransctionNo == transactionNo
    //                         && it.CreateBy == entity.userName
    //                         && it.BillTypeId == billTypeId
    //                         && it.DepotsId == mesDepost.DepotId)
    //            .Select(it => new
    //            {
    //                it.Guid,
    //                it.BillNo
    //            })
    //            .First();
          //switch (num)
          //{
          //    case 0 when num2 == 0:
          //    case > 0 when num2 == 0:
          //        freeze = 1;
          //        break;
          //    case 0 when num2 > 0:
          //        throw new Exception("入库失败,到货单据有问题!");
          //}
    //        var cId = Guid.Empty;
    //        string cBillNo = null;
    //        if (existingRecord != null)
    //        {
    //            // If record exists, assign values
    //            cId = existingRecord.Guid;
    //            cBillNo = existingRecord.BillNo;
    //        }
    //        else
    //        {
    //            cId = Guid.NewGuid();
    //            cBillNo = BillNo.GetBillNo("CGRK(采购入库)");
          // 判断货主类型
          var owner_type = wmsManager.GetOwnerType(cgddDetails.DemandOrg);
          // if (Db.Queryable<SysOrganization>().Any(x => x.Fid == cgddDetails.DemandOrg))
          // {
          //     owner_type = "BD_OwnerOrg";
          // }
          // else
          // {
          //     // 第二层判断:检查 MES_CUSTOMER
          //     if (Db.Queryable<MesCustomer>().Any(x => x.Id == Convert.ToInt32(cgddDetails.DemandOrg)))
          //     {
          //         owner_type = "BD_Customer";
          //     }
          //     else
          //     {
          //         // 第三层判断:检查 MES_SUPPLIER
          //         if (Db.Queryable<MesSupplier>().Any(x => x.Id == Convert.ToInt32(cgddDetails.DemandOrg)))
          //         {
          //             owner_type = "BD_Supplier";
          //         }
          //         else
          //         {
    //            var suppNo = db.Queryable<MesSupplier>()
    //                .Where(s => s.Id.ToString() == inventory.SuppId).First();
          //             // 第四层判断:再次检查 SYS_ORGANIZATION
          //             if (Db.Queryable<SysOrganization>().Any(x => x.Fid == cgddDetails.ReceivingOrg))
          //             {
          //                 owner_type = "BD_OwnerOrg";
          //             }
          //             else
          //             {
          //                 throw new Exception("入库失败,到货单据对应的需求组织有问题!");
          //             }
          //         }
          //     }
          //}
    //            db.Insertable(new MesInvItemIns
    //            {
    //                Guid = cId,
    //                BillNo = cBillNo,
    //                BillTypeId = billTypeId,
    //                InsDate = DateTime.Now,
    //                DepotsId = mesDepost.DepotId,
    //                DepotsCode = mesDepost.DepotCode,
    //                TransctionNo = transactionNo,
    //                SuppId = suppNo.Id.ToString(),
    //                SuppNo = suppNo.SuppNo,
    //                CreateBy = user,
    //                CreateDate = DateTime.Now,
    //                LastupdateBy = user,
    //                LastupdateDate = DateTime.Now,
    //                UrgentFlag = itemBarcodeDetails.UrgentFlag.Value
    //                    ? "1"
    //                    : "0",
    //                CbillNo = itemBarcodeDetails.BillNo,
    //                Fstatus = 0,
    //                Status = 0,
    //                ReceiveOrgId = inventory.ReceiveOrgId,
    //                InType = "采购入库",
    //                TaskNo = itemBarcodeDetails.BillNo
    //                //WorkNo = itemBarcodeDetails.WorkNo
    //            }).IgnoreColumns(true).ExecuteCommand();
    //        }
          var result = new ItemInBaseModel();
    //        cSyQty = itemBarcodeDetails.Quantity.Value;
          UseTransaction(db =>
          {
              var existingRecord = db.Queryable<MesInvItemIns>()
                  .Where(it => it.InsDate.Value.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd")
                               && it.TaskNo == itemBarcodeDetails.BillNo
                               && it.Status == 0
                               && it.TransctionNo == transactionNo
                               && it.CreateBy == entity.userName
                               && it.BillTypeId == billTypeId
                               && it.DepotsId == mesDepost.DepotId)
                  .Select(it => new
                  {
                      it.Guid,
                      it.BillNo
                  })
                  .First();
    //        entity.id = cId.ToString();
    //        entity.PageIndex = 1;
    //        entity.Limit = 1;
              var cId = Guid.Empty;
              string cBillNo = null;
    //        itemBarcodeDetails.Hbdy ??= 0;
    //        if (itemBarcodeDetails.Hbdy == 1)
    //        {
    //            var details = db.Queryable<MesInvItemArnDetail>()
    //                .Where(d =>
    //                    d.CbillNo == itemBarcodeDetails.BillNo &&
    //                    d.Quantity != d.OkRkqty &&
    //                    d.ItemId == itemBarcodeDetails.ItemId)
    //                .ToList();
              if (existingRecord != null)
              {
                  // If record exists, assign values
                  cId = existingRecord.Guid;
                  cBillNo = existingRecord.BillNo;
              }
              else
              {
                  cId = Guid.NewGuid();
                  cBillNo = BillNo.GetBillNo("CGRK(采购入库)");
                  var suppNo = db.Queryable<MesSupplier>()
                      .Where(s => s.Id.ToString() == inventory.SuppId).First();
    //            foreach (var detail in details)
    //            {
    //                if (cSyQty == 0) break;
                  db.Insertable(new MesInvItemIns
                  {
                      Guid = cId,
                      BillNo = cBillNo,
                      BillTypeId = billTypeId,
                      InsDate = DateTime.Now,
                      DepotsId = mesDepost.DepotId,
                      DepotsCode = mesDepost.DepotCode,
                      TransctionNo = transactionNo,
                      SuppId = suppNo.Id.ToString(),
                      SuppNo = suppNo.SuppNo,
                      CreateBy = user,
                      CreateDate = DateTime.Now,
                      LastupdateBy = user,
                      LastupdateDate = DateTime.Now,
                      UrgentFlag = itemBarcodeDetails.UrgentFlag.GetValueOrDefault() ? "1" : "0",
                      CbillNo = itemBarcodeDetails.BillNo,
                      Fstatus = 0,
                      Status = 0,
                      ReceiveOrgId = inventory.ReceiveOrgId,
                      InType = "采购入库",
                      TaskNo = itemBarcodeDetails.BillNo
                      //WorkNo = itemBarcodeDetails.WorkNo
                  }).IgnoreColumns(true).ExecuteCommand();
              }
    //                var remainingQty = detail.Quantity - (detail.OkRkqty ?? 0);
    //                if (remainingQty <= cSyQty)
    //                {
    //                    // Update detail
    //                    db.Updateable<MesInvItemArnDetail>()
    //                        .SetColumns(d => new MesInvItemArnDetail
    //                        {
    //                            OkRkqty = (int)d.Quantity,
    //                            IsdepsIn = true
    //                        })
    //                        .Where(d => d.Guid == detail.Guid)
    //                        .IgnoreColumns(true)
    //                        .ExecuteCommand();
              cSyQty = itemBarcodeDetails.Quantity.Value;
    //                    // Check if already inserted
    //                    var count = db.Queryable<MesInvItemInCItems>()
    //                        .Where(it =>
    //                            it.ItemInId == cId &&
    //                                it.ItemId == detail.ItemId &&
    //                                it.DepotId == depotCode2 &&
    //                                it.EbelnK3id == detail.EbelnK3id &&
    //                                it.LineK3id == detail.LineK3id)
    //                        .Count();
              entity.id = cId.ToString();
              entity.PageIndex = 1;
              entity.Limit = 1;
    //                    cSyQty -= remainingQty.Value;
              itemBarcodeDetails.Hbdy ??= 0;
              if (itemBarcodeDetails.Hbdy == 1)
              {
                  var details = db.Queryable<MesInvItemArnDetail>()
                      .Where(d =>
                          d.CbillNo == itemBarcodeDetails.BillNo &&
                          d.Quantity != d.OkRkqty &&
                          d.ItemId == itemBarcodeDetails.ItemId)
                      .ToList();
    //                    if (count == 0)
    //                        // Insert new item into MES_INV_ITEM_IN_C_ITEMS
    //                        db.Insertable(new MesInvItemInCItems
    //                        {
    //                            ItemInId = cId,
    //                            Quantity = remainingQty,
    //                            CreateBy = user,
    //                            CreateDate = DateTime.Now,
    //                            ItemId = detail.ItemId,
    //                            DepotCode = mesDepost.DepotCode,
    //                            ItemSname = itemBarcodeDetails.ItemSname,
    //                            Unit = itemBarcodeDetails.Unit,
    //                            Ebeln = detail.Ebeln,
    //                            BillNo = cBillNo,
    //                            WorkNo = detail.WorkNo,
    //                            CbillNo = detail.CbillNo,
    //                            WorkLine = detail.WorkLine,
    //                            SuppId = itemBarcodeDetails.SuppId,
    //                            SuppNo = itemBarcodeDetails.SuppNo,
    //                            Remark = itemBarcodeDetails.Memo,
    //                            EbelnK3id = detail.EbelnK3id,
    //                            LineK3id = detail.LineK3id,
    //                            DepotId = depotCode2,
    //                            itemDabid = itemBarcodeDetails.AboutGuid.ToString()
    //                        }).IgnoreColumns(true).ExecuteCommand();
    //                    else
    //                        db.Updateable<MesInvItemInCItems>()
    //                            .SetColumns(it =>
    //                                it.Quantity == it.Quantity + remainingQty)
    //                            .Where(it =>
    //                                it.ItemInId == cId &&
    //                                it.ItemId == detail.ItemId &&
    //                                it.DepotId == depotCode2 &&
    //                                it.EbelnK3id == detail.EbelnK3id &&
    //                                it.LineK3id == detail.LineK3id)
    //                            .IgnoreColumns(true)
    //                            .ExecuteCommand();
    //                    // Insert new detail into MES_INV_ITEM_IN_C_DETAILS
    //                    db.Insertable(new MesInvItemInCDetails
    //                    {
    //                        ItemInId = cId,
    //                        BillNo = cBillNo,
    //                        ItemBarcode = itemBarcode,
    //                        Quantity = remainingQty,
    //                        BarcodeFlag = true,
    //                        EpFlag = true,
    //                        WorkType = 1,
    //                        ItemNo = detail.ItemNo,
    //                        SuppId = itemBarcodeDetails.SuppId,
    //                        SuppNo = itemBarcodeDetails.SuppNo,
    //                        DepotCode = mesDepost.DepotCode,
    //                        DepotSectionCode = sectionCode,
    //                        ItemSname = itemBarcodeDetails.ItemSname,
    //                        Unit = itemBarcodeDetails.Unit,
    //                        CreateBy = user,
    //                        CreateDate = DateTime.Now,
    //                        LastupdateBy = user,
    //                        LastupdateDate = DateTime.Now,
    //                        Remark = itemBarcodeDetails.Memo,
    //                        Ebeln = detail.WorkNo,
    //                        WorkNo = detail.WorkNo,
    //                        WorkLine = detail.WorkLine,
    //                        CbillNo = itemBarcodeDetails.BillNo,
    //                        UrgentFlag = detail.UrgentFlag,
    //                        BoardStyle = detail.BoardStyle,
    //                        TaskNo = detail.WorkNo,
    //                        EbelnK3id = detail.EbelnK3id,
    //                        LineK3id = detail.LineK3id,
    //                        ItemId = detail.ItemId,
    //                        ReceiveOrgId = inventory.ReceiveOrgId,
    //                        LotNo = cgddDetails.BatchNumber
    //                    }).IgnoreColumns(true).ExecuteCommand();
    //                }
    //                else
    //                {
    //                    // Partially fulfill remaining quantity
    //                    db.Updateable<MesInvItemArnDetail>()
    //                        .SetColumns(d => new MesInvItemArnDetail
    //                        {
    //                            OkRkqty = (int)((d.OkRkqty ?? 0) + cSyQty)
    //                        })
    //                        .Where(d => d.Guid == detail.Guid)
    //                        .IgnoreColumns(true)
    //                        .ExecuteCommand();
                  foreach (var detail in details)
                  {
                      if (cSyQty == 0) break;
    //                    var count = db.Queryable<MesInvItemInCItems>()
    //                        .Where(it =>
    //                            it.ItemInId == cId &&
    //                                it.ItemId == detail.ItemId &&
    //                                it.DepotId == depotCode2 &&
    //                                it.EbelnK3id == detail.EbelnK3id &&
    //                                it.LineK3id == detail.LineK3id)
    //                        .Count();
                      var remainingQty = detail.Quantity - (detail.OkRkqty ?? 0);
                      if (remainingQty <= cSyQty)
                      {
                          // Update detail
                          db.Updateable<MesInvItemArnDetail>()
                              .SetColumns(d => new MesInvItemArnDetail
                              {
                                  OkRkqty = (int)d.Quantity,
                                  IsdepsIn = true
                              })
                              .Where(d => d.Guid == detail.Guid)
                              .IgnoreColumns(true)
                              .ExecuteCommand();
    //                    if (count == 0)
    //                        db.Insertable(new MesInvItemInCItems
    //                        {
    //                            ItemInId = cId,
    //                            Quantity = cSyQty,
    //                            CreateBy = user,
    //                            CreateDate = DateTime.Now,
    //                            ItemNo = detail.ItemNo,
    //                            DepotCode = mesDepost.DepotCode,
    //                            ItemSname = itemBarcodeDetails.ItemSname,
    //                            Unit = itemBarcodeDetails.Unit,
    //                            Ebeln = detail.WorkNo,
    //                            BillNo = cBillNo,
    //                            WorkNo = detail.WorkNo,
    //                            EbelnLineNo = detail.EbelnLine,
    //                            CbillNo = detail.CbillNo,
    //                            WorkLine = detail.WorkLine,
    //                            SuppId = itemBarcodeDetails.SuppId,
    //                            SuppNo = itemBarcodeDetails.SuppNo,
    //                            Remark = itemBarcodeDetails.Memo,
    //                            EbelnK3id = detail.EbelnK3id,
    //                            LineK3id = detail.LineK3id,
    //                            ItemId = detail.ItemId,
    //                            DepotId = depotCode2
    //                        }).IgnoreColumns(true).ExecuteCommand();
    //                    else
    //                        db.Updateable<MesInvItemInCItems>()
    //                            .SetColumns(it =>
    //                                it.Quantity == it.Quantity + cSyQty)
    //                            .Where(it =>
    //                                it.ItemInId == cId &&
    //                                it.ItemId == detail.ItemId &&
    //                                it.DepotId == depotCode2 &&
    //                                it.EbelnK3id == detail.EbelnK3id &&
    //                                it.LineK3id == detail.LineK3id)
    //                            .IgnoreColumns(true)
    //                            .ExecuteCommand();
                          // Check if already inserted
                          var count = db.Queryable<MesInvItemInCItems>()
                              .Where(it =>
                                  it.ItemInId == cId &&
                                      it.ItemId == detail.ItemId &&
                                      it.DepotId == mesDepost.DepotId.ToString() &&
                                      it.EbelnK3id == detail.EbelnK3id &&
                                      it.LineK3id == detail.LineK3id)
                              .Count();
    //                    db.Insertable(new MesInvItemInCDetails
    //                    {
    //                        ItemInId = cId,
    //                        BillNo = cBillNo,
    //                        ItemBarcode = itemBarcode,
    //                        Quantity = cSyQty,
    //                        BarcodeFlag = true,
    //                        EpFlag = true,
    //                        WorkType = 1,
    //                        ItemNo = detail.ItemNo,
    //                        SuppId = itemBarcodeDetails.SuppId,
    //                        SuppNo = itemBarcodeDetails.SuppNo,
    //                        DepotCode = mesDepost.DepotCode,
    //                        DepotSectionCode = sectionCode,
    //                        ItemSname = itemBarcodeDetails.ItemSname,
    //                        Unit = itemBarcodeDetails.Unit,
    //                        CreateBy = user,
    //                        CreateDate = DateTime.Now,
    //                        LastupdateBy = user,
    //                        LastupdateDate = DateTime.Now,
    //                        Remark = itemBarcodeDetails.Memo,
    //                        Ebeln = detail.WorkNo,
    //                        EbelnLineNo = detail.EbelnLine,
    //                        WorkNo = detail.WorkNo,
    //                        WorkLine = detail.WorkLine,
    //                        CbillNo = itemBarcodeDetails.BillNo,
    //                        UrgentFlag = detail.UrgentFlag,
    //                        BoardStyle = detail.BoardStyle,
    //                        TaskNo = detail.WorkNo,
    //                        EbelnK3id = detail.EbelnK3id,
    //                        LineK3id = detail.LineK3id,
    //                        ItemId = detail.ItemId,
    //                        ReceiveOrgId = inventory.ReceiveOrgId,
    //                        LotNo = cgddDetails.BatchNumber
    //                    }).IgnoreColumns(true).ExecuteCommand();
                          cSyQty -= remainingQty.Value;
                          if (count == 0)
                              // Insert new item into MES_INV_ITEM_IN_C_ITEMS
                              db.Insertable(new MesInvItemInCItems
                              {
                                  ItemInId = cId,
                                  Quantity = remainingQty,
                                  CreateBy = user,
                                  CreateDate = DateTime.Now,
                                  ItemId = detail.ItemId,
                                  DepotCode = mesDepost.DepotCode,
                                  ItemSname = itemBarcodeDetails.ItemSname,
                                  Unit = itemBarcodeDetails.Unit,
                                  Ebeln = detail.Ebeln,
                                  BillNo = cBillNo,
                                  WorkNo = detail.WorkNo,
                                  CbillNo = detail.CbillNo,
                                  WorkLine = detail.WorkLine,
                                  SuppId = itemBarcodeDetails.SuppId,
                                  SuppNo = itemBarcodeDetails.SuppNo,
                                  Remark = itemBarcodeDetails.Memo,
                                  EbelnK3id = detail.EbelnK3id,
                                  LineK3id = detail.LineK3id,
                                  DepotId = mesDepost.DepotId.ToString(),
                                  itemDabid = itemBarcodeDetails.AboutGuid.ToString()
                              }).IgnoreColumns(true).ExecuteCommand();
                          else
                              db.Updateable<MesInvItemInCItems>()
                                  .SetColumns(it =>
                                      it.Quantity == it.Quantity + remainingQty)
                                  .Where(it =>
                                      it.ItemInId == cId &&
                                      it.ItemId == detail.ItemId &&
                                      it.DepotId == mesDepost.DepotId.ToString() &&
                                      it.EbelnK3id == detail.EbelnK3id &&
                                      it.LineK3id == detail.LineK3id)
                                  .IgnoreColumns(true)
                                  .ExecuteCommand();
                          // Insert new detail into MES_INV_ITEM_IN_C_DETAILS
                          db.Insertable(new MesInvItemInCDetails
                          {
                              ItemInId = cId,
                              BillNo = cBillNo,
                              ItemBarcode = itemBarcode,
                              Quantity = remainingQty,
                              BarcodeFlag = true,
                              EpFlag = true,
                              WorkType = 1,
                              ItemNo = detail.ItemNo,
                              SuppId = itemBarcodeDetails.SuppId,
                              SuppNo = itemBarcodeDetails.SuppNo,
                              DepotCode = mesDepost.DepotCode,
                              DepotSectionCode = sectionCode,
                              ItemSname = itemBarcodeDetails.ItemSname,
                              Unit = itemBarcodeDetails.Unit,
                              CreateBy = user,
                              CreateDate = DateTime.Now,
                              LastupdateBy = user,
                              LastupdateDate = DateTime.Now,
                              Remark = itemBarcodeDetails.Memo,
                              Ebeln = detail.WorkNo,
                              WorkNo = detail.WorkNo,
                              WorkLine = detail.WorkLine,
                              CbillNo = itemBarcodeDetails.BillNo,
                              UrgentFlag = detail.UrgentFlag,
                              BoardStyle = detail.BoardStyle,
                              TaskNo = detail.WorkNo,
                              EbelnK3id = detail.EbelnK3id,
                              LineK3id = detail.LineK3id,
                              ItemId = detail.ItemId,
                              ReceiveOrgId = inventory.ReceiveOrgId,
                              LotNo = cgddDetails.BatchNumber
                          }).IgnoreColumns(true).ExecuteCommand();
                      }
                      else
                      {
                          // Partially fulfill remaining quantity
                          db.Updateable<MesInvItemArnDetail>()
                              .SetColumns(d => new MesInvItemArnDetail
                              {
                                  OkRkqty = (int)((d.OkRkqty ?? 0) + cSyQty)
                              })
                              .Where(d => d.Guid == detail.Guid)
                              .IgnoreColumns(true)
                              .ExecuteCommand();
                          var count = db.Queryable<MesInvItemInCItems>()
                              .Where(it =>
                                  it.ItemInId == cId &&
                                      it.ItemId == detail.ItemId &&
                                      it.DepotId == mesDepost.DepotId.ToString() &&
                                      it.EbelnK3id == detail.EbelnK3id &&
                                      it.LineK3id == detail.LineK3id)
                              .Count();
                          if (count == 0)
                              db.Insertable(new MesInvItemInCItems
                              {
                                  ItemInId = cId,
                                  Quantity = cSyQty,
                                  CreateBy = user,
                                  CreateDate = DateTime.Now,
                                  ItemNo = detail.ItemNo,
                                  DepotCode = mesDepost.DepotCode,
                                  ItemSname = itemBarcodeDetails.ItemSname,
                                  Unit = itemBarcodeDetails.Unit,
                                  Ebeln = detail.WorkNo,
                                  BillNo = cBillNo,
                                  WorkNo = detail.WorkNo,
                                  EbelnLineNo = detail.EbelnLine,
                                  CbillNo = detail.CbillNo,
                                  WorkLine = detail.WorkLine,
                                  SuppId = itemBarcodeDetails.SuppId,
                                  SuppNo = itemBarcodeDetails.SuppNo,
                                  Remark = itemBarcodeDetails.Memo,
                                  EbelnK3id = detail.EbelnK3id,
                                  LineK3id = detail.LineK3id,
                                  ItemId = detail.ItemId,
                                  DepotId = mesDepost.DepotId.ToString()
                              }).IgnoreColumns(true).ExecuteCommand();
                          else
                              db.Updateable<MesInvItemInCItems>()
                                  .SetColumns(it =>
                                      it.Quantity == it.Quantity + cSyQty)
                                  .Where(it =>
                                      it.ItemInId == cId &&
                                      it.ItemId == detail.ItemId &&
                                      it.DepotId == mesDepost.DepotId.ToString() &&
                                      it.EbelnK3id == detail.EbelnK3id &&
                                      it.LineK3id == detail.LineK3id)
                                  .IgnoreColumns(true)
                                  .ExecuteCommand();
    //                    cSyQty = 0; // Remaining quantity fulfilled
    //                }
    //            }
                          db.Insertable(new MesInvItemInCDetails
                          {
                              ItemInId = cId,
                              BillNo = cBillNo,
                              ItemBarcode = itemBarcode,
                              Quantity = cSyQty,
                              BarcodeFlag = true,
                              EpFlag = true,
                              WorkType = 1,
                              ItemNo = detail.ItemNo,
                              SuppId = itemBarcodeDetails.SuppId,
                              SuppNo = itemBarcodeDetails.SuppNo,
                              DepotCode = mesDepost.DepotCode,
                              DepotSectionCode = sectionCode,
                              ItemSname = itemBarcodeDetails.ItemSname,
                              Unit = itemBarcodeDetails.Unit,
                              CreateBy = user,
                              CreateDate = DateTime.Now,
                              LastupdateBy = user,
                              LastupdateDate = DateTime.Now,
                              Remark = itemBarcodeDetails.Memo,
                              Ebeln = detail.WorkNo,
                              EbelnLineNo = detail.EbelnLine,
                              WorkNo = detail.WorkNo,
                              WorkLine = detail.WorkLine,
                              CbillNo = itemBarcodeDetails.BillNo,
                              UrgentFlag = detail.UrgentFlag,
                              BoardStyle = detail.BoardStyle,
                              TaskNo = detail.WorkNo,
                              EbelnK3id = detail.EbelnK3id,
                              LineK3id = detail.LineK3id,
                              ItemId = detail.ItemId,
                              ReceiveOrgId = inventory.ReceiveOrgId,
                              LotNo = cgddDetails.BatchNumber
                          }).IgnoreColumns(true).ExecuteCommand();
    //            db.Insertable(new MesInvBusiness2
    //            {
    //                Status = 1,
    //                BillTypeId = billTypeId,
    //                TransactionCode = transactionNo,
    //                BusinessType = 1,
    //                ItemBarcode = itemBarcode,
    //                ItemNo = itemBarcodeDetails.ItemNo,
    //                LotNo = cgddDetails.BatchNumber,
    //                EpFlag = true,
    //                Quantity = itemBarcodeDetails.Quantity,
    //                ToInvDepotsCode = mesDepost.DepotCode,
    //                ToInvDepotSectionsCode = sectionCode,
    //                Description = "采购入库",
    //                CreateBy = user,
    //                CreateDate = DateTime.Now,
    //                LastupdateBy = user,
    //                LastupdateDate = DateTime.Now,
    //                TaskNo = itemBarcodeDetails.BillNo,
    //                BillNo = cBillNo,
    //                WorkNo = itemBarcodeDetails.WorkNo,
    //                WorkLine = itemBarcodeDetails.WorkLine,
    //                SuppId = itemBarcodeDetails.SuppId,
    //                SuppNo = itemBarcodeDetails.SuppNo,
    //                EbelnK3id = itemBarcodeDetails.EbelnK3id,
    //                LineK3id = itemBarcodeDetails.LineK3id,
    //                ItemId = itemBarcodeDetails.ItemId
    //            }).IgnoreColumns(true).ExecuteCommand();
                          cSyQty = 0; // Remaining quantity fulfilled
                      }
                  }
    //            // Insert into mes_inv_item_stocks
    //        }
    //        else
    //        {
    //            var detailone = db.Queryable<MesInvItemArnDetail>()
    //                .Where(d =>
    //                    d.Guid == itemBarcodeDetails.AboutGuid)
    //                .First();
                  db.Insertable(new MesInvBusiness2
                  {
                      Status = 1,
                      BillTypeId = billTypeId,
                      TransactionCode = transactionNo,
                      BusinessType = 1,
                      ItemBarcode = itemBarcode,
                      ItemNo = itemBarcodeDetails.ItemNo,
                      LotNo = cgddDetails.BatchNumber,
                      EpFlag = true,
                      Quantity = itemBarcodeDetails.Quantity,
                      ToInvDepotsCode = mesDepost.DepotCode,
                      ToInvDepotSectionsCode = sectionCode,
                      Description = "采购入库",
                      CreateBy = user,
                      CreateDate = DateTime.Now,
                      LastupdateBy = user,
                      LastupdateDate = DateTime.Now,
                      TaskNo = itemBarcodeDetails.BillNo,
                      BillNo = cBillNo,
                      WorkNo = itemBarcodeDetails.WorkNo,
                      WorkLine = itemBarcodeDetails.WorkLine,
                      SuppId = itemBarcodeDetails.SuppId,
                      SuppNo = itemBarcodeDetails.SuppNo,
                      EbelnK3id = itemBarcodeDetails.EbelnK3id,
                      LineK3id = itemBarcodeDetails.LineK3id,
                      ItemId = itemBarcodeDetails.ItemId
                  }).IgnoreColumns(true).ExecuteCommand();
    //            // 检查是否存在于 MES_INV_ITEM_IN_C_ITEMS 表
    //            var existingCount = db.Queryable<MesInvItemInCItems>()
    //                .Where(it =>
    //                it.ItemInId == cId &&
    //                                it.ItemId == detailone.ItemId &&
    //                                it.DepotId == depotCode2 &&
    //                                it.itemDabid == itemBarcodeDetails.AboutGuid.ToString())
    //                .Count();
                  // Insert into mes_inv_item_stocks
              }
              else
              {
                  var detailone = db.Queryable<MesInvItemArnDetail>()
                      .Where(d =>
                          d.Guid == itemBarcodeDetails.AboutGuid)
                      .First();
    //            if (existingCount == 0)
    //                // 不存在时插入新记录
    //                db.Insertable(new MesInvItemInCItems
    //                {
    //                    ItemInId = cId,
    //                    Quantity = itemBarcodeDetails.Quantity,
    //                    CreateBy = user,
    //                    CreateDate = DateTime.Now,
    //                    ItemNo = itemBarcodeDetails.ItemNo,
    //                    DepotCode = mesDepost.DepotCode,
    //                    ItemSname = itemBarcodeDetails.ItemSname,
    //                    Unit = itemBarcodeDetails.Unit,
    //                    Ebeln = itemBarcodeDetails.WorkNo,
    //                    BillNo = cBillNo,
    //                    WorkNo = itemBarcodeDetails.WorkNo,
    //                    EbelnLineNo = itemBarcodeDetails.WorkLine,
    //                    CbillNo = itemBarcodeDetails.BillNo,
    //                    WorkLine = itemBarcodeDetails.WorkLine,
    //                    SuppId = itemBarcodeDetails.SuppId,
    //                    SuppNo = itemBarcodeDetails.SuppNo,
    //                    Remark = itemBarcodeDetails.Memo,
    //                    EbelnK3id = itemBarcodeDetails.EbelnK3id,
    //                    LineK3id = itemBarcodeDetails.LineK3id,
    //                    ItemId = itemBarcodeDetails.ItemId,
    //                    DepotId = depotCode2,
    //                    itemDabid = itemBarcodeDetails.AboutGuid.ToString()
    //                }).IgnoreColumns(true).ExecuteCommand();
    //            else
    //                // 存在时更新数量
    //                db.Updateable<MesInvItemInCItems>()
    //                    .SetColumns(it => new MesInvItemInCItems
    //                    {
    //                        Quantity = SqlFunc.IsNull(it.Quantity, 0) + itemBarcodeDetails.Quantity // 确保 Quantity 不为 null
    //                    })
    //                    .Where(it =>
    //                                it.ItemInId == cId &&
    //                                it.ItemId == detailone.ItemId &&
    //                                it.DepotId == depotCode2 &&
    //                                it.itemDabid == itemBarcodeDetails.AboutGuid.ToString())
    //                    //.IgnoreColumns(true) // 保留 IgnoreColumns
    //                    .ExecuteCommand();
                  // 检查是否存在于 MES_INV_ITEM_IN_C_ITEMS 表
                  var existingCount = db.Queryable<MesInvItemInCItems>()
                      .Where(it =>
                      it.ItemInId == cId &&
                                      it.ItemId == detailone.ItemId &&
                                      it.DepotId == mesDepost.DepotId.ToString() &&
                                      it.itemDabid == itemBarcodeDetails.AboutGuid.ToString())
                      .Count();
    //            // 插入 mes_inv_item_in_c_details 表
    //            db.Insertable(new MesInvItemInCDetails
    //            {
    //                ItemInId = cId,
    //                BillNo = cBillNo,
    //                ItemBarcode = itemBarcode,
    //                Quantity = itemBarcodeDetails.Quantity,
    //                BarcodeFlag = true,
    //                EpFlag = true,
    //                WorkType = 1,
    //                ItemNo = itemBarcodeDetails.ItemNo,
    //                LotNo = cgddDetails.BatchNumber,
    //                SuppId = itemBarcodeDetails.SuppId,
    //                SuppNo = itemBarcodeDetails.SuppNo,
    //                DepotCode = mesDepost.DepotCode,
    //                DepotSectionCode = sectionCode,
    //                ItemSname = itemBarcodeDetails.ItemSname,
    //                Unit = itemBarcodeDetails.Unit,
    //                CreateBy = user,
    //                CreateDate = DateTime.Now,
    //                LastupdateBy = user,
    //                LastupdateDate = DateTime.Now,
    //                Remark = itemBarcodeDetails.Memo,
    //                Ebeln = itemBarcodeDetails.Mblnr,
    //                EbelnLineNo = itemBarcodeDetails.Zeile,
    //                WorkNo = itemBarcodeDetails.WorkNo,
    //                WorkLine = itemBarcodeDetails.WorkLine,
    //                CbillNo = itemBarcodeDetails.BillNo,
    //                UrgentFlag = itemBarcodeDetails.UrgentFlag,
    //                BoardStyle = itemBarcodeDetails.BoardStyle,
    //                TaskNo = itemBarcodeDetails.TaskNo,
    //                EbelnK3id = itemBarcodeDetails.EbelnK3id,
    //                LineK3id = itemBarcodeDetails.LineK3id,
    //                ItemId = itemBarcodeDetails.ItemId,
    //                Ischeck = true,
    //                CheckDate = inventoryDetails.CheckDate,
    //                CheckRes = inventoryDetails.CheckRes,
    //                CheckStates = inventoryDetails.CheckStates,
    //                ReceiveOrgId = inventory.ReceiveOrgId,
    //                DepotId = Convert.ToInt64(depotCode2)
    //            }).IgnoreColumns(true).ExecuteCommand();
                  if (existingCount == 0)
                      // 不存在时插入新记录
                      db.Insertable(new MesInvItemInCItems
                      {
                          ItemInId = cId,
                          Quantity = itemBarcodeDetails.Quantity,
                          CreateBy = user,
                          CreateDate = DateTime.Now,
                          ItemNo = itemBarcodeDetails.ItemNo,
                          DepotCode = mesDepost.DepotCode,
                          ItemSname = itemBarcodeDetails.ItemSname,
                          Unit = itemBarcodeDetails.Unit,
                          Ebeln = itemBarcodeDetails.WorkNo,
                          BillNo = cBillNo,
                          WorkNo = itemBarcodeDetails.WorkNo,
                          EbelnLineNo = itemBarcodeDetails.WorkLine,
                          CbillNo = itemBarcodeDetails.BillNo,
                          WorkLine = itemBarcodeDetails.WorkLine,
                          SuppId = itemBarcodeDetails.SuppId,
                          SuppNo = itemBarcodeDetails.SuppNo,
                          Remark = itemBarcodeDetails.Memo,
                          EbelnK3id = itemBarcodeDetails.EbelnK3id,
                          LineK3id = itemBarcodeDetails.LineK3id,
                          ItemId = itemBarcodeDetails.ItemId,
                          DepotId = mesDepost.DepotId.ToString(),
                          itemDabid = itemBarcodeDetails.AboutGuid.ToString()
                      }).IgnoreColumns(true).ExecuteCommand();
                  else
                      // 存在时更新数量
                      db.Updateable<MesInvItemInCItems>()
                          .SetColumns(it => new MesInvItemInCItems
                          {
                              Quantity = SqlFunc.IsNull(it.Quantity, 0) + itemBarcodeDetails.Quantity // 确保 Quantity 不为 null
                          })
                          .Where(it =>
                                      it.ItemInId == cId &&
                                      it.ItemId == detailone.ItemId &&
                                      it.DepotId == mesDepost.DepotId.ToString() &&
                                      it.itemDabid == itemBarcodeDetails.AboutGuid.ToString())
                          //.IgnoreColumns(true) // 保留 IgnoreColumns
                          .ExecuteCommand();
    //            // 插入 mes_inv_business2 表
    //            db.Insertable(new MesInvBusiness2
    //            {
    //                Status = 1,
    //                BillTypeId = billTypeId,
    //                TransactionCode = transactionNo,
    //                BusinessType = 1,
    //                ItemBarcode = itemBarcode,
    //                ItemNo = itemBarcodeDetails.ItemNo,
    //                LotNo = itemBarcodeDetails.LotNo,
    //                EpFlag = true,
    //                Quantity = itemBarcodeDetails.Quantity,
    //                FromInvDepotsCode = null,
    //                FromInvDepotSectionsCode = null,
    //                ToInvDepotsCode = mesDepost.DepotCode,
    //                ToInvDepotSectionsCode = sectionCode,
    //                Description = "采购入库",
    //                CreateBy = user,
    //                CreateDate = DateTime.Now,
    //                LastupdateBy = user,
    //                LastupdateDate = DateTime.Now,
    //                TaskNo = itemBarcodeDetails.TaskNo,
    //                BillNo = cBillNo,
    //                WorkNo = itemBarcodeDetails.WorkNo,
    //                WorkLine = itemBarcodeDetails.WorkLine,
    //                SuppId = itemBarcodeDetails.SuppId,
    //                SuppNo = itemBarcodeDetails.SuppNo,
    //                EbelnK3id = itemBarcodeDetails.EbelnK3id,
    //                LineK3id = itemBarcodeDetails.LineK3id,
    //                ItemId = itemBarcodeDetails.ItemId
    //            }).IgnoreColumns(true).ExecuteCommand();
                  // 插入 mes_inv_item_in_c_details 表
                  db.Insertable(new MesInvItemInCDetails
                  {
                      ItemInId = cId,
                      BillNo = cBillNo,
                      ItemBarcode = itemBarcode,
                      Quantity = itemBarcodeDetails.Quantity,
                      BarcodeFlag = true,
                      EpFlag = true,
                      WorkType = 1,
                      ItemNo = itemBarcodeDetails.ItemNo,
                      LotNo = cgddDetails.BatchNumber,
                      SuppId = itemBarcodeDetails.SuppId,
                      SuppNo = itemBarcodeDetails.SuppNo,
                      DepotCode = mesDepost.DepotCode,
                      DepotSectionCode = sectionCode,
                      ItemSname = itemBarcodeDetails.ItemSname,
                      Unit = itemBarcodeDetails.Unit,
                      CreateBy = user,
                      CreateDate = DateTime.Now,
                      LastupdateBy = user,
                      LastupdateDate = DateTime.Now,
                      Remark = itemBarcodeDetails.Memo,
                      Ebeln = itemBarcodeDetails.Mblnr,
                      EbelnLineNo = itemBarcodeDetails.Zeile,
                      WorkNo = itemBarcodeDetails.WorkNo,
                      WorkLine = itemBarcodeDetails.WorkLine,
                      CbillNo = itemBarcodeDetails.BillNo,
                      UrgentFlag = itemBarcodeDetails.UrgentFlag,
                      BoardStyle = itemBarcodeDetails.BoardStyle,
                      TaskNo = itemBarcodeDetails.TaskNo,
                      EbelnK3id = itemBarcodeDetails.EbelnK3id,
                      LineK3id = itemBarcodeDetails.LineK3id,
                      ItemId = itemBarcodeDetails.ItemId,
                      Ischeck = true,
                      CheckDate = inventoryDetails.CheckDate,
                      CheckRes = inventoryDetails.CheckRes,
                      CheckStates = inventoryDetails.CheckStates,
                      ReceiveOrgId = inventory.ReceiveOrgId,
                      DepotId = Convert.ToInt64(mesDepost.DepotId.ToString())
                  }).IgnoreColumns(true).ExecuteCommand();
    //            // 插入 mes_inv_item_stocks 表
    //        }
                  // 插入 mes_inv_business2 表
                  db.Insertable(new MesInvBusiness2
                  {
                      Status = 1,
                      BillTypeId = billTypeId,
                      TransactionCode = transactionNo,
                      BusinessType = 1,
                      ItemBarcode = itemBarcode,
                      ItemNo = itemBarcodeDetails.ItemNo,
                      LotNo = itemBarcodeDetails.LotNo,
                      EpFlag = true,
                      Quantity = itemBarcodeDetails.Quantity,
                      FromInvDepotsCode = null,
                      FromInvDepotSectionsCode = null,
                      ToInvDepotsCode = mesDepost.DepotCode,
                      ToInvDepotSectionsCode = sectionCode,
                      Description = "采购入库",
                      CreateBy = user,
                      CreateDate = DateTime.Now,
                      LastupdateBy = user,
                      LastupdateDate = DateTime.Now,
                      TaskNo = itemBarcodeDetails.TaskNo,
                      BillNo = cBillNo,
                      WorkNo = itemBarcodeDetails.WorkNo,
                      WorkLine = itemBarcodeDetails.WorkLine,
                      SuppId = itemBarcodeDetails.SuppId,
                      SuppNo = itemBarcodeDetails.SuppNo,
                      EbelnK3id = itemBarcodeDetails.EbelnK3id,
                      LineK3id = itemBarcodeDetails.LineK3id,
                      ItemId = itemBarcodeDetails.ItemId
                  }).IgnoreColumns(true).ExecuteCommand();
                  // 插入 mes_inv_item_stocks 表
              }
    //        db.Insertable(new MesInvItemStocks
    //        {
    //            TaskNo = itemBarcodeDetails.TaskNo,
    //            ItemBarcode = itemBarcode,
    //            ItemNo = cgddDetails.BatchNumber,
    //            LotNo = itemBarcodeDetails.LotNo,
    //            Quantity = itemBarcodeDetails.Quantity,
    //            DepotsCode = mesDepost.DepotCode,
    //            DepotSectionsCode = sectionCode,
    //            CheckDate = inventoryDetails.CheckDate,
    //            IndepDate = DateTime.Now,
    //            IqcStatus = inventoryDetails.CheckStates,
    //            BoardStyle = itemBarcodeDetails.BoardStyle,
    //            WorkNo = itemBarcodeDetails.WorkNo,
    //            WorkLine = itemBarcodeDetails.WorkLine,
    //            SuppId = itemBarcodeDetails.SuppId,
    //            SuppNo = itemBarcodeDetails.SuppNo,
    //            EbelnK3id = itemBarcodeDetails.EbelnK3id,
    //            LineK3id = itemBarcodeDetails.LineK3id,
    //            ItemId = itemBarcodeDetails.ItemId,
    //            BillNo = itemBarcodeDetails.BillNo,
    //            DepotId = Convert.ToInt32(depotCode2),
    //            OwnerId = cgddDetails.DemandOrg,
    //            OwnerType = owner_type,
    //            StockOrgId = mesDepost.FSubsidiary,
    //            IndepUserCode = user
    //        }).IgnoreColumns(true).ExecuteCommand();
    //        itemBarcodeDetails.Hbdy ??= 0;
              db.Insertable(new MesInvItemStocks
              {
                  TaskNo = itemBarcodeDetails.TaskNo,
                  ItemBarcode = itemBarcode,
                  ItemNo = cgddDetails.BatchNumber,
                  LotNo = itemBarcodeDetails.LotNo,
                  Quantity = itemBarcodeDetails.Quantity,
                  DepotsCode = mesDepost.DepotCode,
                  DepotSectionsCode = sectionCode,
                  CheckDate = inventoryDetails.CheckDate,
                  IndepDate = DateTime.Now,
                  IqcStatus = inventoryDetails.CheckStates,
                  BoardStyle = itemBarcodeDetails.BoardStyle,
                  WorkNo = itemBarcodeDetails.WorkNo,
                  WorkLine = itemBarcodeDetails.WorkLine,
                  SuppId = itemBarcodeDetails.SuppId,
                  SuppNo = itemBarcodeDetails.SuppNo,
                  EbelnK3id = itemBarcodeDetails.EbelnK3id,
                  LineK3id = itemBarcodeDetails.LineK3id,
                  ItemId = itemBarcodeDetails.ItemId,
                  BillNo = itemBarcodeDetails.BillNo,
                  DepotId = Convert.ToInt32(mesDepost.DepotId),
                  OwnerId = cgddDetails.DemandOrg,
                  OwnerType = owner_type,
                  StockOrgId = mesDepost.FSubsidiary,
                  IndepUserCode = user
              }).IgnoreColumns(true).ExecuteCommand();
    //        if (itemBarcodeDetails.Hbdy != 1)
    //        {
    //            //更新收料单明细
    //            db.Updateable<MesInvItemArnDetail>()
    //                .SetColumns(d => new MesInvItemArnDetail
    //                {
    //                    OkRkqty = (int)((d.OkRkqty ?? 0) + cSyQty)
    //                })
    //                .Where(d => d.Guid == itemBarcodeDetails.AboutGuid)
    //                .ExecuteCommand();
              itemBarcodeDetails.Hbdy ??= 0;
    //            var first = db
    //                .Queryable<MesInvItemArnDetail>()
    //                .Where(b =>
    //                    b.Guid == itemBarcodeDetails.AboutGuid)
    //                .Select(b => new
    //                {
    //                    TotalQuantity =
    //                        SqlFunc.AggregateSum(b.Quantity),
    //                    TotalOkRkQty = SqlFunc.AggregateSum(b.OkRkqty)
    //                })
    //                .First();
              if (itemBarcodeDetails.Hbdy != 1)
              {
                  //更新收料单明细
                  db.Updateable<MesInvItemArnDetail>()
                      .SetColumns(d => new MesInvItemArnDetail
                      {
                          OkRkqty = (int)((d.OkRkqty ?? 0) + cSyQty)
                      })
                      .Where(d => d.Guid == itemBarcodeDetails.AboutGuid)
                      .ExecuteCommand();
    //            var TotalQuantity = first.TotalQuantity ?? 0;
    //            var TotalOkRkQty = first.TotalOkRkQty ?? 0;
                  var first = db
                      .Queryable<MesInvItemArnDetail>()
                      .Where(b =>
                          b.Guid == itemBarcodeDetails.AboutGuid)
                      .Select(b => new
                      {
                          TotalQuantity =
                              SqlFunc.AggregateSum(b.Quantity),
                          TotalOkRkQty = SqlFunc.AggregateSum(b.OkRkqty)
                      })
                      .First();
    //            if (TotalQuantity == TotalOkRkQty)
    //                db.Updateable<MesInvItemArnDetail>()
    //                    .SetColumns(s => s.IsdepsIn == true)
    //                    .Where(s => s.Guid == itemBarcodeDetails.AboutGuid)
    //                    .ExecuteCommand();
                  var TotalQuantity = first.TotalQuantity ?? 0;
                  var TotalOkRkQty = first.TotalOkRkQty ?? 0;
                  if (TotalQuantity == TotalOkRkQty)
                      db.Updateable<MesInvItemArnDetail>()
                          .SetColumns(s => s.IsdepsIn == true)
                          .Where(s => s.Guid == itemBarcodeDetails.AboutGuid)
                          .ExecuteCommand();
    //            var totalSummary = db.Queryable<MesInvItemArnDetail>()
    //                .InnerJoin<MesInvItemArn>((b, a) => a.Guid == b.ParentGuid)
    //                .Where((b, a) =>
    //                    a.BillNo == inventory.BillNo && b.ReturnFlag == 0)
    //                .Select((b, a) => new
    //                {
    //                    TotalQuantity = SqlFunc.AggregateSum(b.Quantity),
    //                    TotalOkRkQty = SqlFunc.AggregateSum(b.OkRkqty)
    //                })
    //                .First();
    //            if ((totalSummary.TotalQuantity ?? 0) ==
    //                (totalSummary.TotalOkRkQty ?? 0))
    //                db.Updateable<MesInvItemArn>()
    //                    .SetColumns(it => it.Status == 1)
    //                    .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
    //                    .ExecuteCommand();
                  var totalSummary = db.Queryable<MesInvItemArnDetail>()
                      .InnerJoin<MesInvItemArn>((b, a) => a.Guid == b.ParentGuid)
                      .Where((b, a) =>
                          a.BillNo == inventory.BillNo && b.ReturnFlag == 0)
                      .Select((b, a) => new
                      {
                          TotalQuantity = SqlFunc.AggregateSum(b.Quantity),
                          TotalOkRkQty = SqlFunc.AggregateSum(b.OkRkqty)
                      })
                      .First();
    //            var totalCDetailsQuantity = db.Queryable<MesInvItemInCDetails>()
    //                .Where(it => it.ItemId == itemBarcodeDetails.ItemId &&
    //                             it.WorkNo == itemBarcodeDetails.WorkNo &&
    //                             it.ItemInId == cId)
    //                .Sum(it => it.Quantity);
                  if ((totalSummary.TotalQuantity ?? 0) ==
                      (totalSummary.TotalOkRkQty ?? 0))
                      db.Updateable<MesInvItemArn>()
                          .SetColumns(it => it.Status == 1)
                          .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
                          .ExecuteCommand();
    //            var detailSummary = db.Queryable<MesInvItemArnDetail>()
    //                .Where(it => it.Guid == inventoryDetails.Guid)
    //                .Select(it => new
    //                {
    //                    TotalComeQty = SqlFunc.AggregateSum(it.Quantity),
    //                    TotalInvQty = SqlFunc.AggregateSum(it.OkRkqty)
    //                })
    //                .First();
                  var totalCDetailsQuantity = db.Queryable<MesInvItemInCDetails>()
                      .Where(it => it.ItemId == itemBarcodeDetails.ItemId &&
                                   it.WorkNo == itemBarcodeDetails.WorkNo &&
                                   it.ItemInId == cId)
                      .Sum(it => it.Quantity);
    //            var comeQty = detailSummary.TotalComeQty ?? 0;
    //            var invQty = detailSummary.TotalInvQty ?? 0;
    //            var diffQty = comeQty - invQty;
                  var detailSummary = db.Queryable<MesInvItemArnDetail>()
                      .Where(it => it.Guid == inventoryDetails.Guid)
                      .Select(it => new
                      {
                          TotalComeQty = SqlFunc.AggregateSum(it.Quantity),
                          TotalInvQty = SqlFunc.AggregateSum(it.OkRkqty)
                      })
                      .First();
    //            if (detailSummary == null)
    //                throw new Exception("此条码找不到对应收货单明细!");
                  var comeQty = detailSummary.TotalComeQty ?? 0;
                  var invQty = detailSummary.TotalInvQty ?? 0;
                  var diffQty = comeQty - invQty;
    //            var mesItems = db.Queryable<MesItems>()
    //                .Where(s => s.Id == itemBarcodeDetails.ItemId).First();
                  if (detailSummary == null)
                      throw new Exception("此条码找不到对应收货单明细!");
    //            //result.Message =
    //            //    $"条码数量 {itemBarcodeDetails.Quantity},采购订单 {itemBarcodeDetails.WorkNo} 项次 {itemBarcodeDetails.WorkLine} 物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
    //            result.Message = $"物料{mesItems.ItemNo}入库成功数量{itemBarcodeDetails.Quantity.ToString()}";
                  var mesItems = db.Queryable<MesItems>()
                      .Where(s => s.Id == itemBarcodeDetails.ItemId).First();
    //            result.itemDetail = mesItems;
                  //result.Message =
                  //    $"条码数量 {itemBarcodeDetails.Quantity},采购订单 {itemBarcodeDetails.WorkNo} 项次 {itemBarcodeDetails.WorkLine} 物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
                  result.Message = $"物料{mesItems.ItemNo}入库成功数量{itemBarcodeDetails.Quantity.ToString()}";
    //            result.ItemInDetails = db.Queryable<MesInvItemInCItems, MesItems>(
    //                (a, b) => new JoinQueryInfos(
    //                JoinType.Left,
    //                a.ItemId == b.ItemId)
    //                )
    //                .Where(a => a.ItemInId == cId && a.ItemId == itemBarcodeDetails.ItemId)
    //                .Select<dynamic>((a, b) => new
    //                {
    //                    ItemNo = b.ItemNo,
    //                    ItemName = b.ItemName,
    //                    ItemModel = b.ItemModel,
    //                    FQty = a.Quantity, // 申请数量
    //                    FMaterialId = b.ItemId,
    //                    Id = b.Guid.ToString()
    //                })
    //                .ToList();
                  result.itemDetail = mesItems;
    //            result.ItemBarCDetails = db.Queryable<MesInvItemInCDetails, MesItems>(
    //                (a, b) => new JoinQueryInfos(
    //                JoinType.Left,
    //                a.ItemId == b.ItemId)
    //                )
    //                .Where(a => a.ItemInId == cId && a.ItemId == itemBarcodeDetails.ItemId)
    //                .Select<dynamic>((a, b) => new
    //                {
    //                    ItemNo = b.ItemNo,
    //                    ItemName = b.ItemName,
    //                    ItemModel = b.ItemModel,
    //                    FQty = a.Quantity, // 申请数量
    //                    FMaterialId = b.ItemId,
    //                    Id = a.Guid.ToString(),
    //                    kw = a.DepotSectionCode,
    //                    barcode = a.ItemBarcode
    //                })
    //                .ToList();
                  result.ItemInDetails = db.Queryable<MesInvItemInCItems,MesItems>(
                      (a, b) => new JoinQueryInfos(
                      JoinType.Left,
                      a.ItemId == b.ItemId)
                      )
                      .Where(a => a.ItemInId == cId && a.ItemId == itemBarcodeDetails.ItemId)
                      .Select<dynamic>((a, b) => new
                      {
                          ItemNo = b.ItemNo,
                          ItemName = b.ItemName,
                          ItemModel = b.ItemModel,
                          FQty = a.Quantity, // 申请数量
                          FMaterialId = b.ItemId,
                          Id = b.Guid.ToString()
                      })
                      .ToList();
                  result.ItemBarCDetails = db.Queryable<MesInvItemInCDetails, MesItems>(
                      (a, b) => new JoinQueryInfos(
                      JoinType.Left,
                      a.ItemId == b.ItemId)
                      )
                      .Where(a => a.ItemInId == cId && a.ItemId == itemBarcodeDetails.ItemId)
                      .Select<dynamic>((a, b) => new
                      {
                          ItemNo = b.ItemNo,
                          ItemName = b.ItemName,
                          ItemModel = b.ItemModel,
                          FQty = a.Quantity, // 申请数量
                          FMaterialId = b.ItemId,
                          Id = a.Guid.ToString(),
                          kw = a.DepotSectionCode,
                          barcode = a.ItemBarcode
                      })
                      .ToList();
    //            //result.ItemNo = mesItems.ItemNo;
    //            result.SumQuantity = Convert.ToDecimal(invQty);
    //            return 1;
    //        }
    //        else
    //        {
    //            // Step 1: Check if bill needs to be closed (status update)
    //            var totalSummary = db.Queryable<MesInvItemArnDetail>()
    //                .LeftJoin<MesInvItemArn>((b, a) => a.Guid == b.ParentGuid)
    //                .Where((b, a) =>
    //                    a.BillNo == inventory.BillNo && b.ReturnFlag == 0)
    //                .Select((b, a) => new
    //                {
    //                    TotalQuantity = SqlFunc.AggregateSum(b.Quantity),
    //                    TotalOkRkQty = SqlFunc.AggregateSum(b.OkRkqty)
    //                })
    //                .First();
                  //result.ItemNo = mesItems.ItemNo;
                  result.SumQuantity = Convert.ToDecimal(invQty);
    //            if ((totalSummary.TotalQuantity ?? 0) ==
    //                (totalSummary.TotalOkRkQty ?? 0))
    //                db.Updateable<MesInvItemArn>()
    //                    .SetColumns(it => it.Status == 1)
    //                    .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
    //                    .ExecuteCommand();
                  return 1;
              }
              else
              {
                  // Step 1: Check if bill needs to be closed (status update)
                  var totalSummary = db.Queryable<MesInvItemArnDetail>()
                      .LeftJoin<MesInvItemArn>((b, a) => a.Guid == b.ParentGuid)
                      .Where((b, a) =>
                          a.BillNo == inventory.BillNo && b.ReturnFlag == 0)
                      .Select((b, a) => new
                      {
                          TotalQuantity = SqlFunc.AggregateSum(b.Quantity),
                          TotalOkRkQty = SqlFunc.AggregateSum(b.OkRkqty)
                      })
                      .First();
    //            // Step 2: Calculate total sum from `mes_inv_item_in_c_details`
    //            var totalCDetailsQuantity = db.Queryable<MesInvItemInCDetails>()
    //                .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
    //                .Sum(it => it.Quantity);
                  if ((totalSummary.TotalQuantity ?? 0) ==
                      (totalSummary.TotalOkRkQty ?? 0))
                      db.Updateable<MesInvItemArn>()
                          .SetColumns(it => it.Status == 1)
                          .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
                          .ExecuteCommand();
    //            // Step 3: Calculate comeQty and invQty from `mes_inv_item_arn_detail`
    //            var detailSummary = db.Queryable<MesInvItemArnDetail>()
    //                .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
    //                .Select(it => new
    //                {
    //                    TotalComeQty = SqlFunc.AggregateSum(it.Quantity),
    //                    TotalInvQty = SqlFunc.AggregateSum(it.OkRkqty)
    //                })
    //                .First();
                  // Step 2: Calculate total sum from `mes_inv_item_in_c_details`
                  var totalCDetailsQuantity = db.Queryable<MesInvItemInCDetails>()
                      .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
                      .Sum(it => it.Quantity);
    //            if (detailSummary == null)
    //                throw new Exception("此条码找不到对应收货单明细!");
                  // Step 3: Calculate comeQty and invQty from `mes_inv_item_arn_detail`
                  var detailSummary = db.Queryable<MesInvItemArnDetail>()
                      .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
                      .Select(it => new
                      {
                          TotalComeQty = SqlFunc.AggregateSum(it.Quantity),
                          TotalInvQty = SqlFunc.AggregateSum(it.OkRkqty)
                      })
                      .First();
    //            var comeQty = detailSummary.TotalComeQty ?? 0;
    //            var invQty = detailSummary.TotalInvQty ?? 0;
    //            var diffQty = comeQty - invQty;
                  if (detailSummary == null)
                      throw new Exception("此条码找不到对应收货单明细!");
    //            var mesItems = db.Queryable<MesItems>()
    //                .Where(s => s.Id == itemBarcodeDetails.ItemId).First();
                  var comeQty = detailSummary.TotalComeQty ?? 0;
                  var invQty = detailSummary.TotalInvQty ?? 0;
                  var diffQty = comeQty - invQty;
    //            // Step 5: Combine final result
    //            result.Message =
    //                $" 条码数量:{itemBarcodeDetails.Quantity},物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
                  var mesItems = db.Queryable<MesItems>()
                      .Where(s => s.Id == itemBarcodeDetails.ItemId).First();
                  // Step 5: Combine final result
                  result.Message =
                      $" 条码数量:{itemBarcodeDetails.Quantity},物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
    //            //result.ItemNo = mesItems.ItemNo;
    //            result.SumQuantity = Convert.ToDecimal(totalCDetailsQuantity);
    //        }
    //        var mesInvItemInCDetails =
    //            base.GetSingle(it => it.ItemBarcode == entity.barcode);
                  //result.ItemNo = mesItems.ItemNo;
                  result.SumQuantity = Convert.ToDecimal(totalCDetailsQuantity);
              }
    //        if (mesInvItemInCDetails == null)
    //            throw new Exception("物料入库条码明细不存在"); // 抛出异常以供前台处理
              var mesInvItemInCDetails =
                  base.GetSingle(it => it.ItemBarcode == entity.barcode);
    //        // 创建 插入日志
    //        var logService = new LogService();
    //        var LogMsg = "【PDA】采购入库。条码【" + entity.barcode + "】 入库单号【" + cBillNo + "】";
    //        logService.CreateLog(db, entity.userName, inventory.Guid.ToString(), "MES_INV_ITEM_ARN", LogMsg, inventory.BillNo);
              if (mesInvItemInCDetails == null)
                  throw new Exception("物料入库条码明细不存在"); // 抛出异常以供前台处理
    //        return 1;
    //    });
              // 创建 插入日志
              var logService = new LogService();
              var LogMsg = "【PDA】采购入库。条码【" + entity.barcode + "】 入库单号【" + cBillNo + "】";
              logService.CreateLog(db, entity.userName, inventory.Guid.ToString(), "MES_INV_ITEM_ARN", LogMsg, inventory.BillNo);
    //    var purchaseInventory = getPurchaseInventory(entity);
              return 1;
          });
          var purchaseInventory = getPurchaseInventory(entity);
    //    //result.ItemInDetails = purchaseInventory.ItemInDetails;
    //    //result.InvItemInCDetails = purchaseInventory.InvItemInCDetails;
    //    return result;
    //}
          //result.ItemInDetails = purchaseInventory.ItemInDetails;
          //result.InvItemInCDetails = purchaseInventory.InvItemInCDetails;
          return result;
      }
  */
    public ItemInBaseModel getPurchaseInventory(WarehouseQuery query)
    {
        return new ItemInBaseModel
@@ -1261,4 +1261,250 @@
        return encodedUrl;
    }
    // 验退扫码
    public ItemInBaseModel GetReturnBarcodeInfo(WarehouseQuery entity)
    {
        ItemInBaseModel res = new ItemInBaseModel();
        // 参数验证
        if (string.IsNullOrEmpty(entity.userName)) throw new ArgumentNullException(nameof(entity.userName), "用户名不允许为空");
        if (string.IsNullOrEmpty(entity.sectionCode)) throw new ArgumentNullException(nameof(entity.sectionCode), "库位编号不允许为空");
        if (string.IsNullOrEmpty(entity.returnBarcode)) throw new ArgumentNullException(nameof(entity.returnBarcode), "条码不允许为空");
        try
        {
            // 检查条码是否已入库
            var isInStock = Db.Queryable<MesInvItemInCDetails>()
                .Where(it => it.ItemBarcode == entity.returnBarcode)
                .Any();
            if (isInStock)
                throw new Exception($"该条码物料[{entity.returnBarcode}]已入库,不能再次扫描!");
            // 检查条码是否已扫描验退
            var sqlParams = new List<SugarParameter> { new("@barcode", entity.returnBarcode) };
            var isReturnScanned = Db.Ado.SqlQuery<dynamic>(
                "SELECT 1 FROM MES_INV_ITEM_CGYT_C_DETAILS WHERE ITEM_BARCODE = @barcode",
                sqlParams);
            if (isReturnScanned.Count > 0)
                throw new Exception($"该条码物料[{entity.returnBarcode}]已扫描验退,请核对!");
            // 使用参数化查询并忽略大小写(适用于支持的数据库)
            var itemBarcode = Db.Queryable<MesInvItemBarcodes>()
                .Where(it => it.ItemBarcode.Trim().ToLower() == entity.returnBarcode.Trim().ToLower())
                .First() ?? throw new InvalidOperationException($"未找到条码 '{entity.returnBarcode}' 的匹配信息");
            // 将查询到的条码信息赋值给返回模型
            res.itemBarcodeDetails = itemBarcode;
            res.Message = "查询成功";
            return res;
        }
        catch (Exception ex)
        {
            // 记录异常日志(建议补充具体日志记录代码)
            res.Message = $"操作失败: {ex.Message}";
            res.SumQuantity = -1;
            return res;
        }
    }
    // 验退
    public ItemInBaseModel ConfirmReturn(WarehouseQuery entity)
    {
        ItemInBaseModel res = new ItemInBaseModel();
        // 参数验证
        if (string.IsNullOrEmpty(entity.userName)) throw new ArgumentNullException(nameof(entity.userName), "用户名不允许为空");
        if (string.IsNullOrEmpty(entity.sectionCode)) throw new ArgumentNullException(nameof(entity.sectionCode), "库位编号不允许为空");
        if (string.IsNullOrEmpty(entity.returnBarcode)) throw new ArgumentNullException(nameof(entity.returnBarcode), "条码不允许为空");
        if (entity.returnQuantity <= 0) throw new ArgumentException("验退数量必须大于0", nameof(entity.returnQuantity));
        try
        {
            // 检查条码是否已入库
            var isInStock = Db.Queryable<MesInvItemInCDetails>()
                .Where(it => it.ItemBarcode == entity.returnBarcode)
                .Any();
            if (isInStock)
                throw new Exception($"该条码物料[{entity.returnBarcode}]已入库,不能再次扫描!");
            // 检查条码是否已扫描验退
            var sqlParams = new List<SugarParameter> { new("@barcode", entity.returnBarcode) };
            var isReturnScanned = Db.Ado.SqlQuery<dynamic>(
                "SELECT 1 FROM MES_INV_ITEM_CGYT_C_DETAILS WHERE ITEM_BARCODE = @barcode",
                sqlParams);
            // 使用参数化查询并忽略大小写(适用于支持的数据库)
            var itemBarcode = Db.Queryable<MesInvItemBarcodes>()
                .Where(it => it.ItemBarcode.Trim().ToLower() == entity.returnBarcode.Trim().ToLower())
                .First() ?? throw new InvalidOperationException($"未找到条码 '{entity.returnBarcode}' 的匹配信息");
            // 判断验退数量是否大于条码的数量(假设条码数量字段为Quantity)
            if (entity.returnQuantity > itemBarcode.Quantity)
            {
                throw new ArgumentException($"验退数量不能大于条码的数量,当前条码数量为: {itemBarcode.Quantity}", nameof(entity.returnQuantity));
            }
            // 将查询到的条码信息赋值给返回模型
            res.itemBarcodeDetails = itemBarcode;
            // 调用存储过程 prc_pda_bar_cf_before
            string strMsg = "";
            string intSum = "";
            string cfBar = "";
            using (var conn = new SqlConnection(DbHelperSQL.strConn))
            {
                using (var cmd = new SqlCommand("[prc_pda_bar_cf_before]", conn))
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 300),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@barcode_new", SqlDbType.NVarChar, 300),
                        new("@c_user", entity.userName),
                        new("@p_old_barcode", entity.returnBarcode),
                        new("@p_qty", entity.returnQuantity),
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
                    parameters[2].Direction = ParameterDirection.Output;
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    strMsg = parameters[0].Value.ToString();
                    intSum = parameters[1].Value.ToString();
                    cfBar = parameters[2].Value.ToString();
                    var result = Convert.ToInt32(intSum);
                    if (result <= 0) throw new Exception(strMsg);
                }
            }
            // 调用验退存储过程 prc_pda_scan_CGYT,使用拆分后的新条码
            string ytMsg = "";
            string ytSum = "";
            string ytdh = "";
            using (var conn = new SqlConnection(DbHelperSQL.strConn))
            {
                using (var cmd = new SqlCommand("prc_pda_scan_CGYT", conn))
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] ytParameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = entity.userName },
                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = cfBar }, // 使用拆分后的新条码
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
                        new("@po_ygdh", SqlDbType.NVarChar, 200) { Direction = ParameterDirection.Output }
                    };
                    cmd.Parameters.AddRange(ytParameters);
                    cmd.ExecuteNonQuery();
                    ytMsg = ytParameters[2].Value.ToString();
                    ytSum = ytParameters[3].Value.ToString();
                    ytdh = ytParameters[4].Value.ToString();
                    if (ytSum == "-1") throw new Exception(ytMsg);
                }
            }
            // 调用入库存储过程 prc_pda_inv_cgrk,使用原始条码
            string rkMsg = "";
            string rkSum = "";
            using (var conn = new SqlConnection(DbHelperSQL.strConn))
            {
                using (var cmd = new SqlCommand("prc_pda_inv_cgrk", conn))
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] rkParameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = entity.userName },
                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = entity.returnBarcode }, // 使用原始条码
                        new("@pi_sectionCode", SqlDbType.NVarChar, 100) { Value = entity.sectionCode },
                        new("@pi_weight", SqlDbType.Decimal) { Value = entity.weight },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    };
                    cmd.Parameters.AddRange(rkParameters);
                    cmd.ExecuteNonQuery();
                    rkMsg = rkParameters[3].Value.ToString();
                    rkSum = rkParameters[4].Value.ToString();
                    if (rkSum == "-1") throw new Exception(rkMsg);
                }
            }
            // 优化查询(去除空格并忽略大小写)
            var mesInvItemInCDetails = Db.Queryable<MesInvItemInCDetails>()
                .Where(it => it.ItemBarcode.Trim().ToLower() == entity.returnBarcode.Trim().ToLower())
                .First() ?? throw new InvalidOperationException($"未找到条码 '{entity.returnBarcode}' 的匹配的入库信息");
            // 从入库条码中获取有效的ItemInId
            var cId = mesInvItemInCDetails.ItemInId; // 假设存在ItemInId属性
            // 查询物料汇总明细(使用参数化查询防止SQL注入)
            var sql = @"
            SELECT
                b.Item_No AS ItemNo,
                b.Item_Name AS ItemName,
                b.Item_Model AS ItemModel,
                a.Quantity AS FQty,
                b.Item_Id AS FMaterialId,
                CONVERT(VARCHAR(36), b.Guid) AS Id
            FROM MES_INV_ITEM_IN_C_ITEMS a
            LEFT JOIN Mes_Items b ON a.Item_Id = b.Item_Id
            WHERE a.Item_In_Id = @cId AND a.Item_Id = @itemId";
            res.ItemInDetails = Db.Ado.SqlQuery<dynamic>(sql, new { cId, itemId = itemBarcode.ItemId });
            // 查询入库条码明细(使用参数化查询防止SQL注入)
            var sql2 = @"
            SELECT
                b.Item_No AS ItemNo,
                b.Item_Name AS ItemName,
                b.Item_Model AS ItemModel,
                a.Quantity AS FQty,
                b.Item_Id AS FMaterialId,
                CONVERT(VARCHAR(36), a.Guid) AS Id,
                a.Depot_Section_Code AS kw,
                a.Item_Barcode AS barcode
            FROM Mes_Inv_Item_In_C_Details a
            LEFT JOIN Mes_Items b ON a.Item_Id = b.Item_Id
            WHERE a.Item_In_Id = @cId AND a.Item_Id = @itemId";
            res.ItemBarCDetails = Db.Ado.SqlQuery<dynamic>(sql2, new { cId, itemId = itemBarcode.ItemId });
            res.Message = $"验退操作成功,拆分后条码:{cfBar},验退单号:{ytdh}";
            res.SumQuantity = res.ItemBarCDetails?.Count ?? 0;
            return res;
        }
        catch (Exception ex)
        {
            // 记录异常日志(建议补充具体日志记录代码)
            res.Message = $"操作失败: {ex.Message}";
            res.SumQuantity = -1;
            return res;
        }
    }
}