111
tjx
2025-11-27 fe9223b1cfa5bac6438afebf4ab6604fd89f3ed2
StandardPda/MES.Service/service/Warehouse/MesItemQtManager.cs
@@ -1,466 +1,416 @@
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.service.Warehouse
namespace MES.Service.service.Warehouse;
public class MesItemQtManager : Repository<MesItemQt>
{
    public class MesItemQtManager:Repository<MesItemQt>
    public bool MiscellaneousIssues(MesItemQtDto mesItemQtDto)
    {
        public bool MiscellaneousIssues(MesItemQtDto mesItemQtDto)
        var itemQtFrom = mesItemQtDto.from;
        var itemQtLists = mesItemQtDto.items;
        // 根据AsnNo和MesNo对明细进行分组
        //var groupedItems = itemOutLists
        //    .GroupBy(item => new { item.AsnNo, item.MesNo, item.SqNo })
        //    .ToList();
        var result = true;
        //foreach (var group in itemQtRKLists)
        //{
        //if (group.Key.AsnNo == null)
        //{
        //    throw new NotImplementedException("AsnNo不能为空");
        //}
        //if (group.Key.MesNo == null)
        //{
        //    throw new NotImplementedException("入库单单号不能为空");
        //}
        //if (group.Key.SqNo == null)
        //{
        //    throw new NotImplementedException("退货申请单行号不能为空");
        //}
        // 创建一个临时的itemOutFrom对象,使用分组的Key作为主要属性
        //var tempItemOutFrom = new ItemOutFrom
        //{
        //    AsnNo = group.Key.AsnNo,
        //    MesNo = group.Key.MesNo,
        //    SqNo = group.Key.SqNo,
        //    // 继承原始itemOutFrom的其他属性
        //    RtnNo = itemOutFrom.RtnNo,
        //    Type = itemOutFrom.Type,
        //    CreateBy = itemOutFrom.CreateBy,
        //    FMRMODE = itemOutFrom.FMRMODE,
        //    DepotId = itemOutFrom.DepotId,
        //    SupperId = itemOutFrom.SupperId
        //};
        // 根据Type执行不同的逻辑
        switch (itemQtFrom.Type)
        {
            var itemQtFrom = mesItemQtDto.from;
            var itemQtLists = mesItemQtDto.items;
            // 根据AsnNo和MesNo对明细进行分组
            //var groupedItems = itemOutLists
            //    .GroupBy(item => new { item.AsnNo, item.MesNo, item.SqNo })
            //    .ToList();
            bool result = true;
            //foreach (var group in itemQtRKLists)
            //{
            //if (group.Key.AsnNo == null)
            //{
            //    throw new NotImplementedException("AsnNo不能为空");
            //}
            //if (group.Key.MesNo == null)
            //{
            //    throw new NotImplementedException("入库单单号不能为空");
            //}
            //if (group.Key.SqNo == null)
            //{
            //    throw new NotImplementedException("退货申请单行号不能为空");
            //}
            // 创建一个临时的itemOutFrom对象,使用分组的Key作为主要属性
            //var tempItemOutFrom = new ItemOutFrom
            //{
            //    AsnNo = group.Key.AsnNo,
            //    MesNo = group.Key.MesNo,
            //    SqNo = group.Key.SqNo,
            //    // 继承原始itemOutFrom的其他属性
            //    RtnNo = itemOutFrom.RtnNo,
            //    Type = itemOutFrom.Type,
            //    CreateBy = itemOutFrom.CreateBy,
            //    FMRMODE = itemOutFrom.FMRMODE,
            //    DepotId = itemOutFrom.DepotId,
            //    SupperId = itemOutFrom.SupperId
            //};
            // 根据Type执行不同的逻辑
            switch (itemQtFrom.Type)
            case "1":
            {
                case "1":
                    {
                        var mesInvItemOuts = Db.Queryable<MesItemQt>()
                            .Where(s => s.Qtck == itemQtFrom.ApplyNumber
                var mesInvItemOuts = Db.Queryable<MesItemQt>()
                    .Where(s => s.Qtck == itemQtFrom.ApplyNumber
                    )
                    .Count();
                            )
                            .Count();
                if (mesInvItemOuts > 0)
                    throw new NotImplementedException(
                        itemQtFrom.ApplyNumber +
                        "的杂发申请单已经存在");
                        if (mesInvItemOuts > 0)
                        {
                            throw new NotImplementedException(
                                itemQtFrom.ApplyNumber +
                                "的杂发申请单已经存在");
                        }
                // 为当前分组保存数据
                var groupResult = Save(itemQtFrom, itemQtLists);
                if (!groupResult) result = false;
                        // 为当前分组保存数据
                        var groupResult = Save(itemQtFrom, itemQtLists);
                        if (!groupResult)
                        {
                            result = false;
                        }
                        break;
                    }
                case "4":
                    var removeResult = Remove(itemQtFrom);
                    if (!removeResult)
                    {
                        result = false;
                    }
                    break;
                default:
                    result = false;
                    break;
                break;
            }
            //}
            case "4":
                var removeResult = Remove(itemQtFrom);
                if (!removeResult) result = false;
            return result;
                break;
            default:
                result = false;
                break;
        }
        //}
        return result;
    }
    private bool Save(MesItemQtFrom from, List<MesItemQtList> items)
    {
        //var mesInvItemIns = Db.Queryable<MesInvItemIns>()
        //    .Where(s => s.BillTypeId == 100
        //                && s.TransctionNo == "101"
        //                && s.BillNo == from.MesNo
        //    ).First();
        //if (mesInvItemIns == null)
        //{
        //    throw new NotImplementedException("采购入库不存在");
        //}
        var SuppNo = "";
        if (from.SupplierCode != "" && from.SupplierCode != null)
        {
            var mesLinkU9 = Db.Queryable<MesLinkU9>()
                .Where(s => s.TableType == "MES_SUPPLIER"
                            && s.U9Id == from.SupplierCode).First();
            if (mesLinkU9 == null)
                throw new NotImplementedException("供应商ID不存在或未同步于U9");
            var mesSupplier = Db.Queryable<MesSupplier>()
                .Where(s => s.Id == decimal.Parse(mesLinkU9.MesId))
                .First();
            if (mesSupplier == null)
                throw new NotImplementedException("[" + from.SupplierCode +
                                                  "]供应商不存在,请同步给MES");
            SuppNo = mesSupplier.SuppNo;
        }
        var mesDepots = Db.Queryable<MesDepots>()
            .Where(s => s.DepotId == decimal.Parse(from.FromWarehouse)).First();
        private bool Save(MesItemQtFrom from, List<MesItemQtList> items)
        if (mesDepots == null)
            throw new NotImplementedException("[" + from.FromWarehouse +
                                              "]仓库不存在,请同步给MES");
        var sysDepartment = Db.Queryable<SysDepartment>()
            .Where(s => s.Departmentid == decimal.Parse(from.ApplyDept))
            .First();
        if (sysDepartment == null)
            throw new NotImplementedException("[" + from.ApplyDept +
                                              "]部门不存在,请同步给MES");
        var nextSequenceValue =
            Db.Ado.SqlQuery<decimal>("SELECT SEQ_QTCK.NEXTVAL FROM DUAL")
                .First();
        // var billCode =
        //     Db.Ado.SqlQuery<string>(
        //             "SELECT GETBILLCODE1('1000', '1000', 'TLSQ') FROM DUAL")
        //         .First();
        //var billCode = from.RtnNo;
        // 创建杂发申请单记录
        var MesItemQtrk = new MesItemQt
        {
            //var mesInvItemIns = Db.Queryable<MesInvItemIns>()
            //    .Where(s => s.BillTypeId == 100
            //                && s.TransctionNo == "101"
            //                && s.BillNo == from.MesNo
            //    ).First();
            Id = nextSequenceValue,
            Qtck = from.ApplyNumber,
            Qt001 = from.Equals(null) ? DateTime.Now : from.ApplyDate,
            Qt002 = from.Equals(null) ? DateTime.Now : from.AuditDate,
            Qt003 = from.DocumentType,
            Qt004 = from.StockOutType,
            Qt005 = from.CreatedBy,
            Qt006 = from.WorkOrder,
            Qt009 = sysDepartment.Departmentname,
            Qt012 = sysDepartment.Departmentcode,
            Qt010 = from.Reason,
            Qt011 = mesDepots.DepotCode,
            Qt008 = mesDepots.DepotName,
            //if (mesInvItemIns == null)
            Qt015 = 1,
            Qt016 = from.Auditor,
            Qt017 = from.TaskNumber,
            Qt018 = SuppNo,
            Qt019 = from.Direction,
            Qt020 = from.OwnerType,
            CustomerCode = from.CustomerCode,
            Receiver = from.Receiver,
            Department = from.Department,
            StockKeeper = from.StockKeeper,
            SourceType = from.SourceType,
            SourceDocument = from.SourceDocument,
            ProductionRelated = from.ProductionRelated,
            ProductionLine = from.ProductionLine,
            ProductionActivity = from.ProductionActivity,
            FinishedGoods = from.FinishedGoods,
            ReversePosting = from.ReversePosting,
            AccountingPeriod = from.AccountingPeriod,
            Employee = from.Employee,
            FalseReturn = from.FalseReturn,
            ProjectCode = from.ProjectCode,
            TaskCode = from.TaskCode,
            Status = from.Status,
            OwnerOrganization = from.OwnerOrganization
        };
        // 创建杂发申请单行记录
        var mesItemQtDetail = new List<MesItemQtDatall>();
        foreach (var ItemQtRKList in items)
        {
            // 检查必要字段是否为空
            //if (string.IsNullOrEmpty(itemOutList.SrcDocNo))
            //{
            //    throw new NotImplementedException("采购入库不存在");
            //    throw new NotImplementedException("采购订单号不能为空");
            //}
            string SuppNo = "";
            if (from.SupplierCode != "" && from.SupplierCode != null)
            //var mesRohInData = Db.Queryable<MesRohInData>()
            //    .Where(s => s.BillNo == itemOutList.SrcDocNo
            //                && s.OrderLineId == itemOutList.SrcDocLineNo)
            //    .First();
            //if (mesRohInData == null)
            //{
            //    throw new NotImplementedException("采购订单不存在");
            //}
            //var deliveryDetail = Db.Queryable<DeliveryDetail>()
            //    .Where(a => a.Zzasn == from.AsnNo
            //                && Int32.Parse(a.ZzitemId) ==
            //                Int32.Parse(itemOutList.AsnLineNo))
            //    .Count();
            //if (deliveryDetail <= 0)
            //{
            //    throw new NotImplementedException("[" + from.AsnNo + "]的明细行[" +
            //                                      itemOutList.AsnLineNo +
            //                                      "]不存在");
            //}
            var itemIdLinkU9 = Db.Queryable<MesLinkU9>()
                .Where(s => s.TableType == "MES_ITEMS"
                            && s.U9Id == ItemQtRKList.ItemId).First();
            if (itemIdLinkU9 == null)
                throw new NotImplementedException("物料ID不存在或未同步于U9");
            var mesItems = Db.Queryable<MesItems>()
                .Where(s => s.Id == decimal.Parse(itemIdLinkU9.MesId))
                .First();
            if (mesItems == null)
                throw new NotImplementedException("[" + ItemQtRKList.ItemId +
                                                  "]物料不存在,请同步给MES");
            var mesDepot = "";
            if (ItemQtRKList.StorageLocation != null &&
                ItemQtRKList.StorageLocation != null)
            {
                mesDepots = Db.Queryable<MesDepots>()
                    .Where(s =>
                        s.DepotId ==
                        decimal.Parse(ItemQtRKList.StorageLocation)).First();
                if (mesDepots == null)
                    throw new NotImplementedException("[" +
                        ItemQtRKList.StorageLocation +
                        "]仓库不存在,请同步给MES");
                mesDepot = mesDepots.DepotCode;
            }
            var supplierCode = "";
            if (ItemQtRKList.SupplierCode != null &&
                ItemQtRKList.SupplierCode != "")
            {
                var mesLinkU9 = Db.Queryable<MesLinkU9>()
              .Where(s => s.TableType == "MES_SUPPLIER"
                          && s.U9Id == from.SupplierCode).First();
                    .Where(s => s.TableType == "MES_SUPPLIER"
                                && s.U9Id == ItemQtRKList.SupplierCode).First();
                if (mesLinkU9 == null)
                {
                    throw new NotImplementedException("供应商ID不存在或未同步于U9");
                }
                    throw new NotImplementedException("[" +
                        ItemQtRKList.SupplierCode +
                        "]供应商不存在,请同步给MES");
                var mesSupplier = Db.Queryable<MesSupplier>()
                    .Where(s => s.Id == Decimal.Parse(mesLinkU9.MesId))
                    .Where(s => s.Id == decimal.Parse(mesLinkU9.MesId))
                    .First();
                if (mesSupplier == null)
                {
                    throw new NotImplementedException("[" + from.SupplierCode +
                                                      "]供应商不存在,请同步给MES");
                }
                SuppNo = mesSupplier.SuppNo;
                    throw new NotImplementedException("[" +
                        ItemQtRKList.SupplierCode +
                        "]供应商不存在,请同步给MES");
                supplierCode = mesSupplier.SuppNo;
            }
            var mesDepots = Db.Queryable<MesDepots>()
                .Where(s => s.DepotId == Decimal.Parse(from.FromWarehouse)).First();
            if (mesDepots == null)
            var mesUnit = "";
            if (mesItems.ItemUnit != null && mesItems.ItemUnit != "")
            {
                throw new NotImplementedException("[" + from.FromWarehouse +
                                                  "]仓库不存在,请同步给MES");
            }
            var sysDepartment = Db.Queryable<SysDepartment>()
              .Where(s => s.Departmentid == Decimal.Parse(from.ApplyDept)).First();
            if (sysDepartment == null)
            {
                throw new NotImplementedException("[" + from.ApplyDept +
                                                  "]部门不存在,请同步给MES");
            }
            var nextSequenceValue =
                Db.Ado.SqlQuery<decimal>("SELECT SEQ_QTCK.NEXTVAL FROM DUAL")
                var mesUnitDb = Db.Queryable<MesUnit>()
                    .Where(s => s.Id == decimal.Parse(mesItems.ItemUnit))
                    .First();
            // var billCode =
            //     Db.Ado.SqlQuery<string>(
            //             "SELECT GETBILLCODE1('1000', '1000', 'TLSQ') FROM DUAL")
            //         .First();
            //var billCode = from.RtnNo;
            // 创建杂发申请单记录
            var MesItemQtrk = new MesItemQt
            {
                Id = nextSequenceValue,
                Qtck = from.ApplyNumber,
                Qt001 = from.Equals(null) ? DateTime.Now : from.ApplyDate,
                Qt002 = from.Equals(null) ? DateTime.Now : from.AuditDate,
                Qt003 = from.DocumentType,
                Qt004 = from.StockOutType,
                Qt005 = from.CreatedBy,
                Qt006 = from.WorkOrder,
                Qt009 = sysDepartment.Departmentname,
                Qt012 = sysDepartment.Departmentcode,
                Qt010 = from.Reason,
                Qt011 = mesDepots.DepotCode,
                Qt008 = mesDepots.DepotName,
                Qt015 = 1,
                Qt016 = from.Auditor,
                Qt017 = from.TaskNumber,
                Qt018 = SuppNo,
                Qt019 = from.Direction,
                Qt020 = from.OwnerType,
                CustomerCode = from.CustomerCode,
                Receiver = from.Receiver,
                Department = from.Department,
                StockKeeper = from.StockKeeper,
                SourceType = from.SourceType,
                SourceDocument = from.SourceDocument,
                ProductionRelated = from.ProductionRelated,
                ProductionLine = from.ProductionLine,
                ProductionActivity = from.ProductionActivity,
                FinishedGoods = from.FinishedGoods,
                ReversePosting = from.ReversePosting,
                AccountingPeriod = from.AccountingPeriod,
                Employee = from.Employee,
                FalseReturn = from.FalseReturn,
                ProjectCode = from.ProjectCode,
                TaskCode = from.TaskCode,
                Status = from.Status,
                OwnerOrganization = from.OwnerOrganization
            };
            // 创建杂发申请单行记录
            var mesItemQtDetail = new List<MesItemQtDatall>();
            foreach (var ItemQtRKList in items)
            {
                // 检查必要字段是否为空
                //if (string.IsNullOrEmpty(itemOutList.SrcDocNo))
                //{
                //    throw new NotImplementedException("采购订单号不能为空");
                //}
                //var mesRohInData = Db.Queryable<MesRohInData>()
                //    .Where(s => s.BillNo == itemOutList.SrcDocNo
                //                && s.OrderLineId == itemOutList.SrcDocLineNo)
                //    .First();
                //if (mesRohInData == null)
                //{
                //    throw new NotImplementedException("采购订单不存在");
                //}
                //var deliveryDetail = Db.Queryable<DeliveryDetail>()
                //    .Where(a => a.Zzasn == from.AsnNo
                //                && Int32.Parse(a.ZzitemId) ==
                //                Int32.Parse(itemOutList.AsnLineNo))
                //    .Count();
                //if (deliveryDetail <= 0)
                //{
                //    throw new NotImplementedException("[" + from.AsnNo + "]的明细行[" +
                //                                      itemOutList.AsnLineNo +
                //                                      "]不存在");
                //}
                var itemIdLinkU9 = Db.Queryable<MesLinkU9>()
                    .Where(s => s.TableType == "MES_ITEMS"
                                && s.U9Id == ItemQtRKList.ItemId).First();
                if (itemIdLinkU9 == null)
                {
                    throw new NotImplementedException("物料ID不存在或未同步于U9");
                }
                var mesItems = Db.Queryable<MesItems>()
                    .Where(s => s.Id == Decimal.Parse(itemIdLinkU9.MesId))
                    .First();
                if (mesItems == null)
                {
                    throw new NotImplementedException("[" + ItemQtRKList.ItemId +
                                                      "]物料不存在,请同步给MES");
                }
                var mesDepot = "";
                if (ItemQtRKList.StorageLocation != null && ItemQtRKList.StorageLocation != null)
                {
                    mesDepots = Db.Queryable<MesDepots>()
                   .Where(s => s.DepotId == Decimal.Parse(ItemQtRKList.StorageLocation)).First();
                    if (mesDepots == null)
                    {
                        throw new NotImplementedException("[" + ItemQtRKList.StorageLocation +
                                                          "]仓库不存在,请同步给MES");
                    }
                    mesDepot = mesDepots.DepotCode;
                }
                string supplierCode = "";
                if (ItemQtRKList.SupplierCode != null && ItemQtRKList.SupplierCode != "")
                {
                    var mesLinkU9 = Db.Queryable<MesLinkU9>()
   .Where(s => s.TableType == "MES_SUPPLIER"
               && s.U9Id == ItemQtRKList.SupplierCode).First();
                    if (mesLinkU9 == null)
                    {
                        throw new NotImplementedException("[" + ItemQtRKList.SupplierCode +
                                                          "]供应商不存在,请同步给MES");
                    }
                    var mesSupplier = Db.Queryable<MesSupplier>()
        .Where(s => s.Id == Decimal.Parse(mesLinkU9.MesId))
        .First();
                    if (mesSupplier == null)
                    {
                        throw new NotImplementedException("[" + ItemQtRKList.SupplierCode +
                                                          "]供应商不存在,请同步给MES");
                    }
                    supplierCode = mesSupplier.SuppNo;
                }
                string mesUnit = "";
                if (mesItems.ItemUnit != null && mesItems.ItemUnit != "")
                {
                    var mesUnitDb = Db.Queryable<MesUnit>()
        .Where(s => s.Id == Decimal.Parse(mesItems.ItemUnit))
        .First();
                    if (mesUnitDb == null)
                    {
                        throw new NotImplementedException("[" + ItemQtRKList.SupplierCode +
                                                          "]单位不存在,请同步给MES");
                    }
                    mesUnit = mesUnitDb.Fnumber;
                }
                //var mesInvItemInCItems = Db.Queryable<MesInvItemInCItems>()
                //    .Where(s => s.ItemInId == mesInvItemIns.Id
                //                && s.ItemNo == mesItems.ItemNo
                //                && s.Ebeln == itemOutList.SrcDocNo
                //                && s.EbelnLineNo ==
                //                Decimal.Parse(itemOutList.SrcDocLineNo)
                //                && s.SuppNo == mesSupplier.SuppNo
                //                && Convert.ToInt32(s.ZzitemId) ==
                //                Convert.ToInt32(itemOutList.AsnLineNo)).First();
                //if (mesInvItemInCItems == null)
                //{
                //    throw new NotImplementedException("没有对应的入库明细");
                //}
                // 确保CbillNo不为空
                if (ItemQtRKList.AppliedQuantity <= 0 || ItemQtRKList.AppliedQuantity == null)
                {
                    throw new NotImplementedException("申请数量不能为0或NULL值!");
                }
                mesItemQtDetail.Add(new MesItemQtDatall
                {
                    Mid = nextSequenceValue,
                    Qd002 = mesItems.ItemNo,
                    Qd003 = mesItems.ItemName,
                    Qd004 = mesItems.ItemModel,
                    Qd005 = mesItems.ColorName,
                    Qd006 = ItemQtRKList.PlannedQuantity,
                    Qd007 = ItemQtRKList.AppliedQuantity,
                    Qd008 = 0, // 已入数量默认为0
                    Qd009 = mesUnit,
                    Qd010 = ItemQtRKList.Remark,
                    Qd012 = mesItems.Id, // 物料内码
                    LineNumber = ItemQtRKList.LineNumber,
                    ProductionRelated = ItemQtRKList.ProductionRelated,
                    StorageType = ItemQtRKList.StorageType,
                    OwnerOrganization = ItemQtRKList.OwnerOrganization,
                    StorageLocation = mesDepot,
                    SupplierCode = supplierCode,
                    CustomerCode = ItemQtRKList.CustomerCode,
                    ProjectCode = ItemQtRKList.ProjectCode,
                    TaskCode = ItemQtRKList.TaskCode,
                    ProductionOrder = ItemQtRKList.ProductionOrder,
                    DailyPlan = ItemQtRKList.DailyPlan,
                    ProductionActivity = ItemQtRKList.ProductionActivity,
                    FinishedProduct = ItemQtRKList.FinishedProduct,
                    PickingUsage= ItemQtRKList.PickingUsage
                });
                if (mesUnitDb == null)
                    throw new NotImplementedException("[" +
                        ItemQtRKList.SupplierCode +
                        "]单位不存在,请同步给MES");
                mesUnit = mesUnitDb.Fnumber;
            }
            var itemDB = mesItemQtDetail
 .Where(x => x.Qd002 != null) // 过滤掉 null 值
 .GroupBy(x => x.Qd002)       // 按 Qd002 分组
 .Select(g => new
 {
     no = g.Key,
     count = g.Count()
            //var mesInvItemInCItems = Db.Queryable<MesInvItemInCItems>()
            //    .Where(s => s.ItemInId == mesInvItemIns.Id
            //                && s.ItemNo == mesItems.ItemNo
            //                && s.Ebeln == itemOutList.SrcDocNo
            //                && s.EbelnLineNo ==
            //                Decimal.Parse(itemOutList.SrcDocLineNo)
            //                && s.SuppNo == mesSupplier.SuppNo
            //                && Convert.ToInt32(s.ZzitemId) ==
            //                Convert.ToInt32(itemOutList.AsnLineNo)).First();
 })
 .ToList();
            // 输出统计结果
            foreach (var item in itemDB)
            {
                if (item.count > 1)
                {
                    throw new Exception($"明细行物料:{item.no}重复,请检查后重试!");
                }
                //Console.WriteLine($"物料编号: {item.物料编号}, 出现次数: {item.出现次数}");
            }
            var outItemCommand = Db.Insertable(mesItemQtDetail)
                .PageSize(1).IgnoreColumnsNull().ExecuteCommand();
            if (outItemCommand <= 0)
            {
                throw new Exception("创建杂发单子表失败");
            }
            // 插入采购退料单记录
            var insertResult = Db.Insertable(MesItemQtrk).IgnoreColumns(true)
                .ExecuteCommand();
            if (insertResult <= 0)
            {
                throw new Exception("创建杂发单失败");
            }
            return outItemCommand + insertResult >= 2;
        }
        private bool Remove(MesItemQtFrom from)
        {
            // 查找要删除的杂发单
            var mesItemQtrk = Db.Queryable<MesItemQt>()
                .Where(s => s.Qtck == from.ApplyNumber
                           ).ToList();
            if (mesItemQtrk == null || mesItemQtrk.Count == 0)
            {
                throw new NotImplementedException("找不到对应的杂发单: " + from.ApplyNumber);
            }
            // 检查是否有已审核的单据,如果存在已审核(Status=1)则不允许删除
            //if (mesInvItemOuts.Any(item => item.Status == 1))
            //if (mesInvItemInCItems == null)
            //{
            //    throw new NotImplementedException("存在已审核的采购退料单,不允许删除");
            //    throw new NotImplementedException("没有对应的入库明细");
            //}
            // 删除所有相关单据
            foreach (var itemRK in mesItemQtrk)
            // 确保CbillNo不为空
            if (ItemQtRKList.AppliedQuantity <= 0 ||
                ItemQtRKList.AppliedQuantity == null)
                throw new NotImplementedException("申请数量不能为0或NULL值!");
            mesItemQtDetail.Add(new MesItemQtDatall
            {
                // 查找要删除的杂发单明细
                var mesInvItemOutItems = Db.Queryable<MesItemQtDatall>()
                    .Where(s => s.Mid == itemRK.Id)
                    .ToList();
                if (mesInvItemOutItems == null || mesInvItemOutItems.Count == 0)
                {
                    throw new NotImplementedException(
                        $"找不到杂发单[{from.ApplyNumber}]对应的明细");
                }
                // 删除杂发单明细
                var deleteItemsResult = Db.Deleteable<MesItemQtDatall>()
                    .Where(s => s.Mid == itemRK.Id)
                    .ExecuteCommand();
                if (deleteItemsResult <= 0)
                {
                    throw new Exception($"找不到杂发单[ {from.ApplyNumber}]明细,删除失败");
                }
                // 删除杂发单
                var deleteResult = Db.Deleteable<MesItemQt>()
                    .Where(s => s.Id == itemRK.Id)
                    .ExecuteCommand();
                if (deleteResult <= 0)
                {
                    throw new Exception($"删除杂发单[{from.ApplyNumber}]失败");
                }
            }
            return true;
                Mid = nextSequenceValue,
                Qd002 = mesItems.ItemNo,
                Qd003 = mesItems.ItemName,
                Qd004 = mesItems.ItemModel,
                Qd005 = mesItems.ColorName,
                Qd006 = ItemQtRKList.PlannedQuantity,
                Qd007 = ItemQtRKList.AppliedQuantity,
                Qd008 = 0, // 已入数量默认为0
                Qd009 = mesUnit,
                Qd010 = ItemQtRKList.Remark,
                Qd012 = mesItems.Id, // 物料内码
                LineNumber = ItemQtRKList.LineNumber,
                ProductionRelated = ItemQtRKList.ProductionRelated,
                StorageType = ItemQtRKList.StorageType,
                OwnerOrganization = ItemQtRKList.OwnerOrganization,
                StorageLocation = mesDepot,
                SupplierCode = supplierCode,
                CustomerCode = ItemQtRKList.CustomerCode,
                ProjectCode = ItemQtRKList.ProjectCode,
                TaskCode = ItemQtRKList.TaskCode,
                ProductionOrder = ItemQtRKList.ProductionOrder,
                DailyPlan = ItemQtRKList.DailyPlan,
                ProductionActivity = ItemQtRKList.ProductionActivity,
                FinishedProduct = ItemQtRKList.FinishedProduct,
                PickingUsage = ItemQtRKList.PickingUsage
            });
        }
        var itemDB = mesItemQtDetail
            .Where(x => x.Qd002 != null) // 过滤掉 null 值
            .GroupBy(x => x.Qd002) // 按 Qd002 分组
            .Select(g => new
            {
                no = g.Key,
                count = g.Count()
            })
            .ToList();
        // 输出统计结果
        foreach (var item in itemDB)
            if (item.count > 1)
                throw new Exception($"明细行物料:{item.no}重复,请检查后重试!");
        //Console.WriteLine($"物料编号: {item.物料编号}, 出现次数: {item.出现次数}");
        var outItemCommand = Db.Insertable(mesItemQtDetail)
            .PageSize(1).IgnoreColumnsNull().ExecuteCommand();
        if (outItemCommand <= 0) throw new Exception("创建杂发单子表失败");
        // 插入采购退料单记录
        var insertResult = Db.Insertable(MesItemQtrk).IgnoreColumns(true)
            .ExecuteCommand();
        if (insertResult <= 0) throw new Exception("创建杂发单失败");
        return outItemCommand + insertResult >= 2;
    }
}
    private bool Remove(MesItemQtFrom from)
    {
        // 查找要删除的杂发单
        var mesItemQtrk = Db.Queryable<MesItemQt>()
            .Where(s => s.Qtck == from.ApplyNumber
            ).ToList();
        if (mesItemQtrk == null || mesItemQtrk.Count == 0)
            throw new NotImplementedException("找不到对应的杂发单: " + from.ApplyNumber);
        // 检查是否有已审核的单据,如果存在已审核(Status=1)则不允许删除
        //if (mesInvItemOuts.Any(item => item.Status == 1))
        //{
        //    throw new NotImplementedException("存在已审核的采购退料单,不允许删除");
        //}
        // 删除所有相关单据
        foreach (var itemRK in mesItemQtrk)
        {
            // 查找要删除的杂发单明细
            var mesInvItemOutItems = Db.Queryable<MesItemQtDatall>()
                .Where(s => s.Mid == itemRK.Id)
                .ToList();
            if (mesInvItemOutItems == null || mesInvItemOutItems.Count == 0)
                throw new NotImplementedException(
                    $"找不到杂发单[{from.ApplyNumber}]对应的明细");
            // 删除杂发单明细
            var deleteItemsResult = Db.Deleteable<MesItemQtDatall>()
                .Where(s => s.Mid == itemRK.Id)
                .ExecuteCommand();
            if (deleteItemsResult <= 0)
                throw new Exception($"找不到杂发单[ {from.ApplyNumber}]明细,删除失败");
            // 删除杂发单
            var deleteResult = Db.Deleteable<MesItemQt>()
                .Where(s => s.Id == itemRK.Id)
                .ExecuteCommand();
            if (deleteResult <= 0)
                throw new Exception($"删除杂发单[{from.ApplyNumber}]失败");
        }
        return true;
    }
}