南骏 池
3 天以前 4f8d1da89bc7cf399e6d90d6230ad6c28114443a
service/Warehouse/MesInvItemInCDetailsManager.cs
@@ -1,9 +1,13 @@
using NewPdaSqlServer.DB;
using Masuit.Tools.Models;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.util;
using Newtonsoft.Json;
using SqlSugar;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace NewPdaSqlServer.service.Warehouse;
@@ -11,15 +15,15 @@
{
    //当前类已经继承了 Repository 增、删、查、改的方法
    public PurchaseInventory SaveBarCodes(WarehouseQuery entity)
    public ItemInBaseModel SaveBarCodes(WarehouseQuery entity)
    {
        string functionName = "采购入库", fieldName = null, inFieldVal = null;
        string user = entity.userName,
            sectionCode = entity.sectionCode,
            itemBarcode = entity.barcode;
        string transactionNo = "101";
        var transactionNo = "101";
        int? billTypeId = 100, num = 0, num2 = 0;
        int freeze = 0;
        var freeze = 0;
        decimal cSyQty = 0;
        if (string.IsNullOrEmpty(sectionCode))
@@ -32,25 +36,43 @@
        if (itemBarcodeDetails == null)
            throw new Exception("条码不存在,请核对!");
        if (!itemBarcodeDetails.ComeFlg.Value)
        if (string.IsNullOrEmpty(itemBarcodeDetails.Memo) || itemBarcodeDetails.Memo != "采购入库")
            throw new Exception("此条码不属于到货条码,无法用采购入库!");
        var inventory = Db.Queryable<MesInvItemArn>()
            .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
            .Where(it => it.BillNo == itemBarcodeDetails.BillNo && it.Fstatus == true )
            .First();
        if (inventory == null)
            throw new Exception("此条码找不到对应收货单!");
            throw new Exception("此条码找不到对应收货单或未审核!");
        // 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 inventoryDetails = Db.Queryable<MesInvItemArnDetail>()
            .Where(it => it.ParentGuid == inventory.Guid
                         && it.ItemId == itemBarcodeDetails.ItemId
                         && it.EbelnLine == itemBarcodeDetails.WorkLine
                         && it.Ebeln == itemBarcodeDetails.WorkNo)
            .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
            .First();
        var cgddDetails = Db.Queryable<MesRohInData>()
            .Where(it => it.EbelnK3id == inventoryDetails.LineK3id)
            .First();
        if (inventoryDetails == 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 depotCode = Db.Queryable<MesDepotSections>()
            .Where(it => it.DepotSectionCode == sectionCode)
@@ -65,13 +87,13 @@
        MesDepots mesDepost = null;
        var checkGuid = UtilityHelper.CheckGuid(depotCode);
        if (checkGuid && depotCode2 != null)
        if (checkGuid && depotCode != null)
        {
            mesDepost = Db.Queryable<MesDepots>()
                .Where(s => s.DepotId.ToString() == depotCode2).First();
                .Where(s => s.DepotId.ToString() == depotCode).First();
            if (depotCode != mesDepost.Guid)
                throw new Exception("扫描库位与采购入库库位不一致!");
            // if (depotCode != mesDepost.Guid)
            //     throw new Exception("扫描库位与采购入库库位不一致!");
        }
        else
        {
@@ -79,54 +101,111 @@
        }
        num = Db.Queryable<MesInvItemInCDetails>()
            .Where(it => it.ItemBarcode == itemBarcode)
            .Count();
        //num = Db.Queryable<MesInvItemInCDetails>()
        //    .Where(it => it.ItemBarcode == itemBarcode)
        //    .Count();
        if (num > 0)
            throw new Exception("此条码已扫码入库完成,请核对!");
        //if (num > 0)
        //    throw new Exception("此条码已扫码入库完成,请核对!");
        num = Db.Queryable<MesInvItemStocks>()
            .Where(it => it.ItemBarcode == itemBarcode)
            .Count();
        //num = Db.Queryable<MesInvItemStocks>()
        //    .Where(it => it.ItemBarcode == itemBarcode)
        //    .Count();
        if (num > 0)
            throw new Exception("此条码已扫码入库,请核对!");
        //if (num > 0)
        //    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 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" // 事务类型与存储过程匹配
        );
        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();
        if (Convert.ToInt32(checkResult.result) < 1)
            throw new Exception($"入库校验失败:{checkResult.strMsg}");
        switch (num)
        {
            case 0 when num2 == 0:
            case > 0 when num2 == 0:
                freeze = 1;
                break;
            case 0 when num2 > 0:
                throw new Exception("入库失败,到货单据有问题!");
        }
        PurchaseInventory result = new PurchaseInventory();
        //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();
        //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();
        //switch (num)
        //{
        //    case 0 when num2 == 0:
        //    case > 0 when num2 == 0:
        //        freeze = 1;
        //        break;
        //    case 0 when num2 > 0:
        //        throw new Exception("入库失败,到货单据有问题!");
        //}
        // 判断货主类型
        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("入库失败,到货单据对应的需求组织有问题!");
        //             }
        //         }
        //     }
        //}
        var result = new ItemInBaseModel();
        UseTransaction(db =>
        {
            var existingRecord = db.Queryable<MesInvItemIns>()
                .Where(it => it.InsDate.Value.Date == DateTime.Now.Date
                .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.BillNo == itemBarcodeDetails.BillNo
                             && it.DepotsCode == mesDepost.DepotCode)
                             && it.CreateBy == entity.userName
                             && it.BillTypeId == billTypeId
                             && it.DepotsId == mesDepost.DepotId)
                .Select(it => new
                {
                    it.Guid,
@@ -134,7 +213,7 @@
                })
                .First();
            Guid cId = Guid.Empty;
            var cId = Guid.Empty;
            string cBillNo = null;
            if (existingRecord != null)
@@ -146,7 +225,7 @@
            else
            {
                cId = Guid.NewGuid();
                cBillNo = BillNo.GetBillNo("IN(入库单)");
                cBillNo = BillNo.GetBillNo("CGRK(采购入库)");
                var suppNo = db.Queryable<MesSupplier>()
                    .Where(s => s.Id.ToString() == inventory.SuppId).First();
@@ -167,11 +246,15 @@
                    LastupdateBy = user,
                    LastupdateDate = DateTime.Now,
                    UrgentFlag = itemBarcodeDetails.UrgentFlag.Value
                        ? (byte)1
                        : (byte)0,
                        ? "1"
                        : "0",
                    CbillNo = itemBarcodeDetails.BillNo,
                    Fstatus = 0,
                    Status = 0
                    Status = 0,
                    ReceiveOrgId = inventory.ReceiveOrgId,
                    InType = "采购入库",
                    TaskNo = itemBarcodeDetails.BillNo
                    //WorkNo = itemBarcodeDetails.WorkNo
                }).IgnoreColumns(true).ExecuteCommand();
            }
@@ -207,22 +290,22 @@
                                IsdepsIn = true
                            })
                            .Where(d => d.Guid == detail.Guid)
                            .IgnoreColumns(ignoreAllNullColumns: true)
                            .IgnoreColumns(true)
                            .ExecuteCommand();
                        // Check if already inserted
                        var count = db.Queryable<MesInvItemInCItems>()
                            .Where(t =>
                                t.ItemInId == cId &&
                                t.ItemId == detail.ItemId &&
                                t.WorkNo == detail.WorkNo &&
                                t.WorkLine == detail.WorkLine)
                            .Where(it =>
                                it.ItemInId == cId &&
                                    it.ItemId == detail.ItemId &&
                                    it.DepotId == mesDepost.DepotId.ToString() &&
                                    it.EbelnK3id == detail.EbelnK3id &&
                                    it.LineK3id == detail.LineK3id)
                            .Count();
                        cSyQty -= remainingQty.Value;
                        if (count == 0)
                        {
                            // Insert new item into MES_INV_ITEM_IN_C_ITEMS
                            db.Insertable(new MesInvItemInCItems
                            {
@@ -234,7 +317,7 @@
                                DepotCode = mesDepost.DepotCode,
                                ItemSname = itemBarcodeDetails.ItemSname,
                                Unit = itemBarcodeDetails.Unit,
                                Ebeln = detail.WorkNo,
                                Ebeln = detail.Ebeln,
                                BillNo = cBillNo,
                                WorkNo = detail.WorkNo,
                                CbillNo = detail.CbillNo,
@@ -243,22 +326,22 @@
                                SuppNo = itemBarcodeDetails.SuppNo,
                                Remark = itemBarcodeDetails.Memo,
                                EbelnK3id = detail.EbelnK3id,
                                LineK3id = detail.LineK3id
                                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.WorkNo == detail.WorkNo &&
                                    it.WorkLine == detail.WorkLine)
                                .IgnoreColumns(ignoreAllNullColumns: true)
                                    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
@@ -291,7 +374,9 @@
                            TaskNo = detail.WorkNo,
                            EbelnK3id = detail.EbelnK3id,
                            LineK3id = detail.LineK3id,
                            ItemId = detail.ItemId
                            ItemId = detail.ItemId,
                            ReceiveOrgId = inventory.ReceiveOrgId,
                            LotNo = cgddDetails.BatchNumber
                        }).IgnoreColumns(true).ExecuteCommand();
                    }
                    else
@@ -303,19 +388,19 @@
                                OkRkqty = (int)((d.OkRkqty ?? 0) + cSyQty)
                            })
                            .Where(d => d.Guid == detail.Guid)
                            .IgnoreColumns(ignoreAllNullColumns: true)
                            .IgnoreColumns(true)
                            .ExecuteCommand();
                        var count = db.Queryable<MesInvItemInCItems>()
                            .Where(t =>
                                t.ItemInId == cId &&
                                t.ItemId == detail.ItemId &&
                                t.WorkNo == detail.WorkNo &&
                                t.WorkLine == detail.WorkLine)
                            .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,
@@ -337,22 +422,21 @@
                                Remark = itemBarcodeDetails.Memo,
                                EbelnK3id = detail.EbelnK3id,
                                LineK3id = detail.LineK3id,
                                ItemId = detail.ItemId
                                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.WorkNo == detail.WorkNo &&
                                    it.WorkLine == detail.WorkLine)
                                .IgnoreColumns(ignoreAllNullColumns: true)
                                    it.DepotId == mesDepost.DepotId.ToString() &&
                                    it.EbelnK3id == detail.EbelnK3id &&
                                    it.LineK3id == detail.LineK3id)
                                .IgnoreColumns(true)
                                .ExecuteCommand();
                        }
                        db.Insertable(new MesInvItemInCDetails
                        {
@@ -385,7 +469,9 @@
                            TaskNo = detail.WorkNo,
                            EbelnK3id = detail.EbelnK3id,
                            LineK3id = detail.LineK3id,
                            ItemId = detail.ItemId
                            ItemId = detail.ItemId,
                            ReceiveOrgId = inventory.ReceiveOrgId,
                            LotNo = cgddDetails.BatchNumber
                        }).IgnoreColumns(true).ExecuteCommand();
                        cSyQty = 0; // Remaining quantity fulfilled
@@ -400,7 +486,7 @@
                    BusinessType = 1,
                    ItemBarcode = itemBarcode,
                    ItemNo = itemBarcodeDetails.ItemNo,
                    LotNo = itemBarcodeDetails.LotNo,
                    LotNo = cgddDetails.BatchNumber,
                    EpFlag = true,
                    Quantity = itemBarcodeDetails.Quantity,
                    ToInvDepotsCode = mesDepost.DepotCode,
@@ -425,16 +511,21 @@
            }
            else
            {
                var detailone = db.Queryable<MesInvItemArnDetail>()
                    .Where(d =>
                        d.Guid == itemBarcodeDetails.AboutGuid)
                    .First();
                // 检查是否存在于 MES_INV_ITEM_IN_C_ITEMS 表
                var existingCount = db.Queryable<MesInvItemInCItems>()
                    .Where(t => t.ItemInId == cId &&
                                t.ItemId == itemBarcodeDetails.ItemId &&
                                t.WorkNo == itemBarcodeDetails.WorkNo &&
                                t.WorkLine == itemBarcodeDetails.WorkLine)
                    .Where(it =>
                    it.ItemInId == cId &&
                                    it.ItemId == detailone.ItemId &&
                                    it.DepotId == mesDepost.DepotId.ToString() &&
                                    it.itemDabid == itemBarcodeDetails.AboutGuid.ToString())
                    .Count();
                if (existingCount == 0)
                {
                    // 不存在时插入新记录
                    db.Insertable(new MesInvItemInCItems
                    {
@@ -457,23 +548,24 @@
                        Remark = itemBarcodeDetails.Memo,
                        EbelnK3id = itemBarcodeDetails.EbelnK3id,
                        LineK3id = itemBarcodeDetails.LineK3id,
                        ItemId = itemBarcodeDetails.ItemId
                        ItemId = itemBarcodeDetails.ItemId,
                        DepotId = mesDepost.DepotId.ToString(),
                        itemDabid = itemBarcodeDetails.AboutGuid.ToString()
                    }).IgnoreColumns(true).ExecuteCommand();
                }
                else
                {
                    // 存在时更新数量
                    db.Updateable<MesInvItemInCItems>()
                        .SetColumns(it =>
                            it.Quantity ==
                            it.Quantity + itemBarcodeDetails.Quantity)
                        .Where(it => it.ItemInId == cId &&
                                     it.ItemId == itemBarcodeDetails.ItemId &&
                                     it.WorkNo == itemBarcodeDetails.WorkNo &&
                                     it.WorkLine == itemBarcodeDetails.WorkLine)
                        .IgnoreColumns(ignoreAllNullColumns: true)
                        .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_item_in_c_details 表
                db.Insertable(new MesInvItemInCDetails
@@ -486,7 +578,7 @@
                    EpFlag = true,
                    WorkType = 1,
                    ItemNo = itemBarcodeDetails.ItemNo,
                    LotNo = itemBarcodeDetails.LotNo,
                    LotNo = cgddDetails.BatchNumber,
                    SuppId = itemBarcodeDetails.SuppId,
                    SuppNo = itemBarcodeDetails.SuppNo,
                    DepotCode = mesDepost.DepotCode,
@@ -512,7 +604,9 @@
                    Ischeck = true,
                    CheckDate = inventoryDetails.CheckDate,
                    CheckRes = inventoryDetails.CheckRes,
                    CheckStates = inventoryDetails.CheckStates
                    CheckStates = inventoryDetails.CheckStates,
                    ReceiveOrgId = inventory.ReceiveOrgId,
                    DepotId = Convert.ToInt64(mesDepost.DepotId.ToString())
                }).IgnoreColumns(true).ExecuteCommand();
                // 插入 mes_inv_business2 表
@@ -550,11 +644,13 @@
                // 插入 mes_inv_item_stocks 表
            }
            db.Insertable(new MesInvItemStocks
            {
                TaskNo = itemBarcodeDetails.TaskNo,
                ItemBarcode = itemBarcode,
                ItemNo = itemBarcodeDetails.ItemNo,
                ItemNo = cgddDetails.BatchNumber,
                LotNo = itemBarcodeDetails.LotNo,
                Quantity = itemBarcodeDetails.Quantity,
                DepotsCode = mesDepost.DepotCode,
@@ -570,25 +666,31 @@
                EbelnK3id = itemBarcodeDetails.EbelnK3id,
                LineK3id = itemBarcodeDetails.LineK3id,
                ItemId = itemBarcodeDetails.ItemId,
                BillNo = itemBarcodeDetails.BillNo
                BillNo = itemBarcodeDetails.BillNo,
                DepotId = Convert.ToInt32(mesDepost.DepotId),
                OwnerId = cgddDetails.DemandOrg,
                OwnerType = owner_type,
                StockOrgId = mesDepost.FSubsidiary,
                IndepUserCode = user
            }).IgnoreColumns(true).ExecuteCommand();
            itemBarcodeDetails.Hbdy ??= 0;
            if (itemBarcodeDetails.Hbdy != 1)
            {
                //更新收料单明细
                db.Updateable<MesInvItemArnDetail>()
                    .SetColumns(d => new MesInvItemArnDetail
                    {
                        OkRkqty = (int)((d.OkRkqty ?? 0) + cSyQty)
                    })
                    .Where(d => d.Guid == inventoryDetails.Guid)
                    .Where(d => d.Guid == itemBarcodeDetails.AboutGuid)
                    .ExecuteCommand();
                var first = db
                    .Queryable<MesInvItemArnDetail>()
                    .Where(b =>
                        b.Guid == inventoryDetails.Guid)
                        b.Guid == itemBarcodeDetails.AboutGuid)
                    .Select(b => new
                    {
                        TotalQuantity =
@@ -601,12 +703,10 @@
                var TotalOkRkQty = first.TotalOkRkQty ?? 0;
                if (TotalQuantity == TotalOkRkQty)
                {
                    db.Updateable<MesInvItemArnDetail>()
                        .SetColumns(s => s.IsdepsIn == true)
                        .Where(s => s.Guid == inventoryDetails.Guid)
                        .Where(s => s.Guid == itemBarcodeDetails.AboutGuid)
                        .ExecuteCommand();
                }
                var totalSummary = db.Queryable<MesInvItemArnDetail>()
@@ -622,17 +722,15 @@
                if ((totalSummary.TotalQuantity ?? 0) ==
                    (totalSummary.TotalOkRkQty ?? 0))
                {
                    db.Updateable<MesInvItemArn>()
                        .SetColumns(it => it.Status == 1)
                        .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
                        .ExecuteCommand();
                }
                var totalCDetailsQuantity = db.Queryable<MesInvItemInCDetails>()
                    .Where(it => it.WorkLine == itemBarcodeDetails.WorkLine &&
                    .Where(it => it.ItemId == itemBarcodeDetails.ItemId &&
                                 it.WorkNo == itemBarcodeDetails.WorkNo &&
                                 it.CbillNo == itemBarcodeDetails.BillNo)
                                 it.ItemInId == cId)
                    .Sum(it => it.Quantity);
                var detailSummary = db.Queryable<MesInvItemArnDetail>()
@@ -649,19 +747,56 @@
                var diffQty = comeQty - invQty;
                if (detailSummary == null)
                {
                    throw new Exception("此条码找不到对应收货单明细!");
                }
                var mesItems = db.Queryable<MesItems>()
                    .Where(s => s.Id == itemBarcodeDetails.ItemId).First();
                result.Message =
                    $"条码数量 {itemBarcodeDetails.Quantity},采购订单 {itemBarcodeDetails.WorkNo} 项次 {itemBarcodeDetails.WorkLine} 物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
                //result.Message =
                //    $"条码数量 {itemBarcodeDetails.Quantity},采购订单 {itemBarcodeDetails.WorkNo} 项次 {itemBarcodeDetails.WorkLine} 物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
                result.Message = $"物料{mesItems.ItemNo}入库成功数量{itemBarcodeDetails.Quantity.ToString()}";
                result.itemDetail = mesItems;
                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(totalCDetailsQuantity);
                //result.ItemNo = mesItems.ItemNo;
                result.SumQuantity = Convert.ToDecimal(invQty);
                return 1;
            }
@@ -681,23 +816,19 @@
                if ((totalSummary.TotalQuantity ?? 0) ==
                    (totalSummary.TotalOkRkQty ?? 0))
                {
                    db.Updateable<MesInvItemArn>()
                        .SetColumns(it => it.Status == 1)
                        .Where(it => it.BillNo == itemBarcodeDetails.BillNo)
                        .ExecuteCommand();
                }
                // Step 2: Calculate total sum from `mes_inv_item_in_c_details`
                var totalCDetailsQuantity = db.Queryable<MesInvItemInCDetails>()
                    .Where(it => it.CbillNo == itemBarcodeDetails.BillNo &&
                                 it.ItemId == itemBarcodeDetails.ItemId)
                    .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
                    .Sum(it => it.Quantity);
                // Step 3: Calculate comeQty and invQty from `mes_inv_item_arn_detail`
                var detailSummary = db.Queryable<MesInvItemArnDetail>()
                    .Where(it => it.CbillNo == itemBarcodeDetails.BillNo &&
                                 it.ItemId == itemBarcodeDetails.ItemId)
                    .Where(it => it.Guid == itemBarcodeDetails.AboutGuid)
                    .Select(it => new
                    {
                        TotalComeQty = SqlFunc.AggregateSum(it.Quantity),
@@ -706,9 +837,7 @@
                    .First();
                if (detailSummary == null)
                {
                    throw new Exception("此条码找不到对应收货单明细!");
                }
                var comeQty = detailSummary.TotalComeQty ?? 0;
                var invQty = detailSummary.TotalInvQty ?? 0;
@@ -722,7 +851,7 @@
                    $" 条码数量:{itemBarcodeDetails.Quantity},物料 {mesItems.ItemNo} 本次入库总数:{totalCDetailsQuantity} 总到 {comeQty} 已入 {invQty} 欠 {diffQty}";
                result.ItemNo = mesItems.ItemNo;
                //result.ItemNo = mesItems.ItemNo;
                result.SumQuantity = Convert.ToDecimal(totalCDetailsQuantity);
            }
@@ -732,25 +861,30 @@
            if (mesInvItemInCDetails == null)
                throw new Exception("物料入库条码明细不存在"); // 抛出异常以供前台处理
            // 创建 插入日志
            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);
            return 1;
        });
        var purchaseInventory = getPurchaseInventory(entity);
        result.ItemIns = purchaseInventory.ItemIns;
        result.ItemInDetails = purchaseInventory.ItemInDetails;
        result.InvItemInCDetails = purchaseInventory.InvItemInCDetails;
        //result.ItemInDetails = purchaseInventory.ItemInDetails;
        //result.InvItemInCDetails = purchaseInventory.InvItemInCDetails;
        return result;
    }
    public PurchaseInventory getPurchaseInventory(WarehouseQuery query)
    public ItemInBaseModel getPurchaseInventory(WarehouseQuery query)
    {
        return new PurchaseInventory
        return new ItemInBaseModel
        {
            ItemIns = GetInvItemInsList(query).Items[0],
            ItemInDetails = GetItemInDetails(query.id),
            InvItemInCDetails = GetInvItemInCDetails(query.id)
            //ItemIns = GetInvItemInsList(query).Items[0],
            //ItemInDetails = GetItemInDetails(query.id),
            //InvItemInCDetails = GetInvItemInCDetails(query.id)
        };
    }
@@ -758,21 +892,19 @@
        WarehouseQuery query)
    {
        var parsedGuid = Guid.Empty;
        if (string.IsNullOrEmpty(query.id))
        if (!string.IsNullOrEmpty(query.id))
        {
            return ([], 0);
            var isValid = Guid.TryParse(query.id, out parsedGuid);
            if (!isValid)
                throw new ApplicationException("GUID转换错误");
        }
        bool isValid = Guid.TryParse(query.id, out parsedGuid);
        if (!isValid)
            throw new ApplicationException("GUID转换错误");
        var totalCount = 0;
        var result = Db.Queryable<MesInvItemIns, MesDepots, MesSupplier>(
                (a, b, c) =>
                    new JoinQueryInfos(JoinType.Left,
                        a.DepotsCode == b.DepotCode,
                        JoinType.Left, a.SuppNo == c.SuppNo))
                        a.DepotsId == b.DepotId,
                        JoinType.Left, a.SuppId == c.Id.ToString()))
            .WhereIF(UtilityHelper.CheckGuid(parsedGuid),
                (a, b, c) => a.Guid == parsedGuid)
            .Select((a, b, c) => new MesInvItemIns
@@ -798,12 +930,9 @@
    {
        //string转guid
        var parsedGuid = Guid.Empty;
        if (string.IsNullOrEmpty(pid))
        {
            return ( []);
        }
        if (string.IsNullOrEmpty(pid)) return [];
        bool isValid = Guid.TryParse(pid, out parsedGuid);
        var isValid = Guid.TryParse(pid, out parsedGuid);
        if (!isValid)
            throw new ApplicationException("GUID转换错误");
@@ -821,7 +950,7 @@
                ItemNo = c.ItemNo,
                ItemSname = g.ItemSname,
                Quantity = g.Quantity,
                Unit = d.Fname,
                Unit = d.Fname
            })
            .ToList();
@@ -832,12 +961,9 @@
    {
        //string转guid
        var parsedGuid = Guid.Empty;
        if (string.IsNullOrEmpty(pid))
        {
            return ( []);
        }
        if (string.IsNullOrEmpty(pid)) return [];
        bool isValid = Guid.TryParse(pid, out parsedGuid);
        var isValid = Guid.TryParse(pid, out parsedGuid);
        if (!isValid)
            throw new ApplicationException("GUID转换错误");
@@ -845,7 +971,7 @@
                (g, c, d) => new JoinQueryInfos(
                    JoinType.Left,
                    g.ItemId == c.Id, JoinType.Inner,
                    d.Id == Convert.ToDecimal(c.ItemUnit)
                    d.Id.ToString() == c.Fpurchaseunitid
                )
            ).WhereIF(UtilityHelper.CheckGuid(parsedGuid),
                (g, c, d) => g.ItemInId == parsedGuid)
@@ -886,8 +1012,12 @@
        }
        var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl;
        var newGuid = Guid.NewGuid();
        var message = new MessageCenter
        {
            Guid = newGuid,
            //Pid = newGuid,
            TableName = tableName,
            Url = ErpUrl,
            Status = 1,
@@ -911,11 +1041,10 @@
        var message = MesToErpParam(query);
        var executeReturnIdentity =
            Db.Insertable(message).ExecuteReturnIdentity();
            Db.Insertable(message).ExecuteCommand();
        if (executeReturnIdentity > 0)
        {
            // message.Guid = executeReturnIdentity;
            message.Pid = executeReturnIdentity;
            message.Pid = message.Guid;
            return message;
        }
@@ -943,7 +1072,7 @@
            .SetColumns(x => x.Status == entity.status)
            .SetColumns(x => x.InsDate == entity.date)
            .Where(x => x.BillNo == entity.billNo)
            .IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand() > 0;
            .IgnoreColumns(true).ExecuteCommand() > 0;
    }
    private string GetErpParameters(string? billNo)
@@ -959,24 +1088,20 @@
            MesInvItemArnDetail>(
            (g, c, d, a) => new JoinQueryInfos(
                JoinType.Left,
                g.ItemNo == c.ItemNo && g.Company == c.Company &&
                g.Factory == c.Factory, JoinType.Inner,
                d.Id == Convert.ToDecimal(c.ItemUnit),
                JoinType.Inner,
                a.Ebeln == g.WorkNo && a.WorkLine == g.EbelnLineNo
                                    && g.CbillNo == a.CbillNo
                g.ItemId == c.Id, JoinType.Inner,
                d.Id.ToString() == c.Fpurchaseunitid,
                JoinType.Inner, a.Ebeln == g.WorkNo && g.CbillNo == a.CbillNo
            )
        ).Where((g, c, d, a) => g.BillNo == billNo).Select<Material>(
            (g, c, d, a) => new Material
            {
                // FstockId = g.DepotCode,
                // FuintId = d.Fnumber,
                // FsrcEntryId = a.Id,
                // FmesEntryId = g.Id,
                // FmaterialId = a.ItemNo,
                // DepotSectionCode = g.DepotSectionCode,
                // WorkNo = g.WorkNo,
                // Frealqty = g.Quantity
                FMaterialId = c.ItemNo,
                FRealQty = g.Quantity.ToString(),
                FStockId = g.DepotCode,
                FLot = a.CbillNo,
                FUnitID = d.Fnumber,
                FsrcEntryId = a.Guid.ToString(),
                FMesEntryid = g.Guid.ToString()
            }).ToList();
@@ -986,12 +1111,13 @@
        var jsonEntries = materials.Select(d => new
        {
            // FMaterialId = d.FmaterialId,
            // FUintId = d.FuintId,
            // FRealQty = d.Frealqty,
            // FStockId = d.FstockId,
            // FSRCENTRYID = d.FsrcEntryId.ToString(),
            // F_MES_ENTRYID = d.FmesEntryId.ToString()
            d.FMaterialId,
            d.FRealQty,
            d.FStockId,
            d.FLot,
            FUintId = d.FUnitID,
            FSRCENTRYID = d.FsrcEntryId,
            F_MES_ENTRYID = d.FMesEntryid
        }).ToList();
        var fdate = DateTime.Now.ToString("yyyy-MM-dd");