南骏 池
2025-07-17 154ecf3d94edef23247796ea313d00b35314563a
service/Warehouse/MesItemBlManager.cs
@@ -2,6 +2,7 @@
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using NewPdaSqlServer.util;
using SqlSugar;
@@ -19,8 +20,9 @@
    {
        var list = Db.Queryable<MesItemBl>()
            .Where(s => (s.Bl018 ?? false) == true
                        && (s.Bl019 ?? false) == false
                        //&& (s.Bl019 ?? false) == false
                        && s.Bl008 == query.Type)
            .OrderByDescending(s => s.Bl006)
            .Select(s => s.BlNo)
            .ToList();
        return list;
@@ -31,7 +33,7 @@
    /// </summary>
    /// <param name="billNo">补料单号</param>
    /// <returns>补料单明细列表</returns>
    public (string bl001, List<MesItemBlDetail> item)
    public ProductionPickDto
        GetMesItemBlDetailByBillNo(
            WarehouseQuery query)
    {
@@ -46,26 +48,50 @@
        if (mesItemBl == null)
            throw new Exception("单据号不存在或未审核!");
        if (mesItemBl.Bl019 == true)
            throw new Exception("单据号已完成!");
        //if (mesItemBl.Bl019 == true)
        //    throw new Exception("单据号已完成!");
        // 获取未完成的补料单明细
        var blDetails = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
                new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
            .Where((a, b) => a.BlNo == query.billNo
                             && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
            .Select((a, b) => new MesItemBlDetail
            {
                Bld012 = b.Bld012,
                Bld002 = b.Bld002,
                Bld003 = b.Bld003,
                Bld004 = b.Bld004,
                Bld007 = b.Bld007,
                Bld008 = b.Bld008
            })
            .ToList();
        //// 获取未完成的补料单明细
        //var blDetails = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
        //        new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
        //    .Where((a, b) => a.BlNo == query.billNo
        //                     && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
        //    .Select((a, b) => new MesItemBlDetail
        //    {
        //        Bld012 = b.Bld012,
        //        Bld002 = b.Bld002,
        //        Bld003 = b.Bld003,
        //        Bld004 = b.Bld004,
        //        Bld007 = b.Bld007,
        //        Bld008 = b.Bld008
        //    })
        //    .ToList();
        return (mesItemBl.Bl001, blDetails);
        //return (mesItemBl.Bl001, blDetails);
        var sql = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,A.BLD007 FQty,A.BLD008 SQty,A.BLD007 - A.BLD008 DSQty,
       dbo.F_QX_GETRECODEPOTSE(A.bld012,'','','') as RecoKw,D.daa001
fROM MES_ITEM_BL_DETAIL A
         LEFT JOIN MES_ITEM_BL B ON A.MID = B.ID
         LEFT JOIN MES_ITEMS C ON A.bld012 = CAST(C.item_id AS VARCHAR(50))
         LEFT JOIN WOMDAA D ON B.about_guid = D.guid
WHERE B.bl_no = '{0}'", query.billNo);
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql);
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        var dto = new ProductionPickDto
        {
            daa001 = womdabs[0].DAA001,
            //PlanNo = womcaa.Caa020,
            items = DS_list,
            Ysitems = YS_list
        };
        return dto;
    }
    /// <summary>
@@ -297,8 +323,8 @@
                    ErpAutoid = womdab.Erpid,
                    PbillNo = query.billNo,
                    ItemId = blDetail.Bld012,
                    DepotId = stockBarcode.DepotsId.ToString(),
                    ItemDabid = womdab.Guid,
                    DepotId = stockBarcode.DepotId.ToString(),
                    ItemDabid = blDetail.Id,
                    // Unit = blDetail.Bld009,
                    // DepotId = (int)stockBarcode.DepotsId
                }).IgnoreColumns(true).ExecuteCommand();
@@ -331,7 +357,7 @@
                PbillNo = query.billNo,
                ItemId = blDetail.Bld012,
                Unit = blDetail.Bld009,
                DepotId = (int)stockBarcode.DepotsId,
                DepotId = (int)stockBarcode.DepotId,
                EbelnK3id = womdab.Eid,
                LineK3id = womdab.Erpid
            }).IgnoreColumns(true).ExecuteCommand();
@@ -375,7 +401,7 @@
                    Dab020 = (it.Dab020 ?? 0) + stockBarcode.Quantity,
                    Dab021 = (it.Dab021 ?? 0) + stockBarcode.Quantity
                })
                .Where(it => it.Id == womdab.Id && it.Dab003 == womdab.Dab003)
                .Where(it => it.Guid == womdab.DaaGuid && it.Dab003 == womdab.Dab003)
                .ExecuteCommand();
            // 更新补料单明细已补数量
@@ -461,7 +487,7 @@
    ///     - Num: 发料数量(必填,必须大于0)
    ///     - blNo: 补料单号(必填)
    /// </remarks>
    public (bool success, List<MesItemBlDetail> pendingList) SplitBarcode(
    public ProductionPickDto SplitBarcode(
        WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.userName))
@@ -517,134 +543,135 @@
            // 拆分条码
            if (totalQty > query.Num)
            {
                var mesItems = db.Queryable<MesItems>()
                    .Where(s => s.Id == stockBarcode.ItemId).First();
                newBarcode = BillNo.ExecuteBarcodeSplit(query.userName, query.barcode, query.Num);
                //var mesItems = db.Queryable<MesItems>()
                //    .Where(s => s.Id == stockBarcode.ItemId).First();
                // 生成新条码号
                newBarcode = BillNo.GetBillNo("TM(条码)", mesItems.ItemNo);
                //// 生成新条码号
                //newBarcode = BillNo.GetBillNo("TM(条码)", mesItems.ItemNo);
                // 写入新条码
                executeCommand += db.Insertable(new MesInvItemBarcodes
                {
                    Guid = Guid.NewGuid(),
                    ItemBarcode = newBarcode,
                    CustNo = stockBarcode.CustomerNo,
                    // ProductCode = stockBarcode.ProductCode,
                    // ItemBarcode2 = stockBarcode.ItemBarcode2,
                    // ItemCode = stockBarcode.ItemCode,
                    ItemNo = stockBarcode.ItemNo,
                    LotNo = stockBarcode.LotNo,
                    Quantity = query.Num,
                    EpFlag = true,
                    TaskNo = stockBarcode.TaskNo,
                    CreateBy = query.userName,
                    CreateDate = DateTime.Now,
                    LastupdateBy = query.userName,
                    LastupdateDate = DateTime.Now,
                    OldItemBarcode = query.barcode,
                    // Mblnr = stockBarcode.Mblnr,
                    // Zeile = stockBarcode.Zeile,
                    // RohInId = stockBarcode.RohInId,
                    Barcodestatus = false,
                    Oldqty = query.Num as long?,
                    // Unit = stockBarcode.Unit,
                    // WeightUnit = stockBarcode.WeightUnit,
                    Factory = stockBarcode.Factory,
                    Company = stockBarcode.Company,
                    BillNo = stockBarcode.BillNo,
                    BoardStyle = stockBarcode.BoardStyle,
                    // ColorName = stockBarcode.ColorName,
                    WorkNo = stockBarcode.WorkNo,
                    WorkLine = stockBarcode.WorkLine,
                    // MemoBad = stockBarcode.MemoBad,
                    ComeFlg = 5,
                    // Memo = stockBarcode.Memo,
                    SuppId = stockBarcode.SuppId,
                    SuppNo = stockBarcode.SuppNo,
                    InsDate = stockBarcode.IndepDate, // Added InsDate
                    ItemId = stockBarcode.ItemId
                    // ItemUnit = stockBarcode.ItemUnit // Added ItemUnit
                }).IgnoreColumns(true).ExecuteCommand();
                //// 写入新条码
                //executeCommand += db.Insertable(new MesInvItemBarcodes
                //{
                //    Guid = Guid.NewGuid(),
                //    ItemBarcode = newBarcode,
                //    CustNo = stockBarcode.CustomerNo,
                //    // ProductCode = stockBarcode.ProductCode,
                //    // ItemBarcode2 = stockBarcode.ItemBarcode2,
                //    // ItemCode = stockBarcode.ItemCode,
                //    ItemNo = stockBarcode.ItemNo,
                //    LotNo = stockBarcode.LotNo,
                //    Quantity = query.Num,
                //    EpFlag = true,
                //    TaskNo = stockBarcode.TaskNo,
                //    CreateBy = query.userName,
                //    CreateDate = DateTime.Now,
                //    LastupdateBy = query.userName,
                //    LastupdateDate = DateTime.Now,
                //    OldItemBarcode = query.barcode,
                //    // Mblnr = stockBarcode.Mblnr,
                //    // Zeile = stockBarcode.Zeile,
                //    // RohInId = stockBarcode.RohInId,
                //    Barcodestatus = false,
                //    Oldqty = query.Num as long?,
                //    // Unit = stockBarcode.Unit,
                //    // WeightUnit = stockBarcode.WeightUnit,
                //    Factory = stockBarcode.Factory,
                //    Company = stockBarcode.Company,
                //    BillNo = stockBarcode.BillNo,
                //    BoardStyle = stockBarcode.BoardStyle,
                //    // ColorName = stockBarcode.ColorName,
                //    WorkNo = stockBarcode.WorkNo,
                //    WorkLine = stockBarcode.WorkLine,
                //    // MemoBad = stockBarcode.MemoBad,
                //    ComeFlg = 5,
                //    // Memo = stockBarcode.Memo,
                //    SuppId = stockBarcode.SuppId,
                //    SuppNo = stockBarcode.SuppNo,
                //    InsDate = stockBarcode.IndepDate, // Added InsDate
                //    ItemId = stockBarcode.ItemId
                //    // ItemUnit = stockBarcode.ItemUnit // Added ItemUnit
                //}).IgnoreColumns(true).ExecuteCommand();
                // 更新原条码数量
                executeCommand += db.Updateable<MesInvItemBarcodes>()
                    .SetColumns(it => it.Quantity == it.Quantity - query.Num)
                    .Where(it => it.ItemBarcode == query.barcode)
                    .ExecuteCommand();
                // 更新原条码数量
                executeCommand += db.Updateable<MesInvItemStocks>()
                    .SetColumns(it => it.Quantity == it.Quantity - query.Num)
                    .Where(it => it.ItemBarcode == query.barcode)
                    .ExecuteCommand();
                //// 删除原条码库存记录
                //executeCommand += db.Deleteable<MesInvItemStocks>()
                //// 更新原条码数量
                //executeCommand += db.Updateable<MesInvItemBarcodes>()
                //    .SetColumns(it => it.Quantity == it.Quantity - query.Num)
                //    .Where(it => it.ItemBarcode == query.barcode)
                //    .ExecuteCommand();
                // 插入剩余条码数量的新库存记录
                executeCommand += db.Insertable(new MesInvItemStocks
                {
                    Guid = Guid.NewGuid(),
                    TaskNo = stockBarcode.TaskNo,
                    ItemBarcode = newBarcode,
                    ItemNo = stockBarcode.ItemNo,
                    LotNo = stockBarcode.LotNo,
                    Quantity = query.Num,
                    EpFlag = stockBarcode.EpFlag,
                    CustomerNo = stockBarcode.CustomerNo,
                    ItemWt = stockBarcode.ItemWt,
                    DepotsCode = stockBarcode.DepotsCode,
                    DepotsId = stockBarcode.DepotsId,
                    DepotSectionsCode = stockBarcode.DepotSectionsCode,
                    CheckDate = stockBarcode.CheckDate,
                    ItemType = stockBarcode.ItemType,
                    IndepDate = stockBarcode.IndepDate,
                    Factory = stockBarcode.Factory,
                    Company = stockBarcode.Company,
                    IqcStatus = stockBarcode.IqcStatus,
                    BoardStyle = stockBarcode.BoardStyle,
                    WorkNo = stockBarcode.WorkNo,
                    WorkLine = stockBarcode.WorkLine,
                    SuppNo = stockBarcode.SuppNo,
                    ItemId = stockBarcode.ItemId
                    // UnitId = stockBarcode.ItemUnit
                }).IgnoreColumns(true).ExecuteCommand();
                //// 更新原条码数量
                //executeCommand += db.Updateable<MesInvItemStocks>()
                //    .SetColumns(it => it.Quantity == it.Quantity - query.Num)
                //    .Where(it => it.ItemBarcode == query.barcode)
                //    .ExecuteCommand();
                // 写入新条码的交易记录
                executeCommand += db.Insertable(new MesInvBusiness2
                {
                    Guid = Guid.NewGuid(),
                    Status = 1,
                    BillTypeId = 200, // p_bill_type_id
                    TransactionCode = "209", // p_transaction_no
                    BusinessType = 0,
                    ItemBarcode = newBarcode,
                    ItemNo = stockBarcode.ItemNo,
                    LotNo = stockBarcode.LotNo,
                    EpFlag = true,
                    Quantity = query.Num,
                    FromInvDepotsCode = null,
                    FromInvDepotSectionsCode = null,
                    ToInvDepotsCode = stockBarcode.DepotsCode,
                    ToInvDepotSectionsCode = stockBarcode.DepotSectionsCode,
                    Description = query.Type + "拆分生成",
                    CreateBy = query.userName,
                    CreateDate = DateTime.Now,
                    LastupdateBy = query.userName,
                    LastupdateDate = DateTime.Now,
                    Factory = stockBarcode.Factory,
                    Company = stockBarcode.Company,
                    TaskNo = stockBarcode.TaskNo,
                    BillNo = stockBarcode.BillNo,
                    WorkNo = stockBarcode.WorkNo,
                    WorkLine = stockBarcode.WorkLine,
                    SuppNo = stockBarcode.SuppNo,
                    SuppId = stockBarcode.SuppId,
                    ItemId = stockBarcode.ItemId
                    // CkDepot = stockBarcode.DepotsId
                }).IgnoreColumns(true).ExecuteCommand();
                ////// 删除原条码库存记录
                ////executeCommand += db.Deleteable<MesInvItemStocks>()
                ////    .Where(it => it.ItemBarcode == query.barcode)
                ////    .ExecuteCommand();
                //// 插入剩余条码数量的新库存记录
                //executeCommand += db.Insertable(new MesInvItemStocks
                //{
                //    Guid = Guid.NewGuid(),
                //    TaskNo = stockBarcode.TaskNo,
                //    ItemBarcode = newBarcode,
                //    ItemNo = stockBarcode.ItemNo,
                //    LotNo = stockBarcode.LotNo,
                //    Quantity = query.Num,
                //    EpFlag = stockBarcode.EpFlag,
                //    CustomerNo = stockBarcode.CustomerNo,
                //    ItemWt = stockBarcode.ItemWt,
                //    DepotsCode = stockBarcode.DepotsCode,
                //    DepotsId = stockBarcode.DepotsId,
                //    DepotSectionsCode = stockBarcode.DepotSectionsCode,
                //    CheckDate = stockBarcode.CheckDate,
                //    ItemType = stockBarcode.ItemType,
                //    IndepDate = stockBarcode.IndepDate,
                //    Factory = stockBarcode.Factory,
                //    Company = stockBarcode.Company,
                //    IqcStatus = stockBarcode.IqcStatus,
                //    BoardStyle = stockBarcode.BoardStyle,
                //    WorkNo = stockBarcode.WorkNo,
                //    WorkLine = stockBarcode.WorkLine,
                //    SuppNo = stockBarcode.SuppNo,
                //    ItemId = stockBarcode.ItemId
                //    // UnitId = stockBarcode.ItemUnit
                //}).IgnoreColumns(true).ExecuteCommand();
                //// 写入新条码的交易记录
                //executeCommand += db.Insertable(new MesInvBusiness2
                //{
                //    Guid = Guid.NewGuid(),
                //    Status = 1,
                //    BillTypeId = 200, // p_bill_type_id
                //    TransactionCode = "209", // p_transaction_no
                //    BusinessType = 0,
                //    ItemBarcode = newBarcode,
                //    ItemNo = stockBarcode.ItemNo,
                //    LotNo = stockBarcode.LotNo,
                //    EpFlag = true,
                //    Quantity = query.Num,
                //    FromInvDepotsCode = null,
                //    FromInvDepotSectionsCode = null,
                //    ToInvDepotsCode = stockBarcode.DepotsCode,
                //    ToInvDepotSectionsCode = stockBarcode.DepotSectionsCode,
                //    Description = query.Type + "拆分生成",
                //    CreateBy = query.userName,
                //    CreateDate = DateTime.Now,
                //    LastupdateBy = query.userName,
                //    LastupdateDate = DateTime.Now,
                //    Factory = stockBarcode.Factory,
                //    Company = stockBarcode.Company,
                //    TaskNo = stockBarcode.TaskNo,
                //    BillNo = stockBarcode.BillNo,
                //    WorkNo = stockBarcode.WorkNo,
                //    WorkLine = stockBarcode.WorkLine,
                //    SuppNo = stockBarcode.SuppNo,
                //    SuppId = stockBarcode.SuppId,
                //    ItemId = stockBarcode.ItemId
                //    // CkDepot = stockBarcode.DepotsId
                //}).IgnoreColumns(true).ExecuteCommand();
            }
            else if (totalQty < query.Num)
            {
@@ -802,7 +829,7 @@
                    PbillNo = query.billNo,
                    ItemId = blDetail.Bld012,
                    DepotId = stockBarcode.DepotId.ToString(),
                    ItemDabid = womdab.Guid,
                    ItemDabid = blDetail.Id,
                    // Unit = blDetail.Bld009,
                    // DepotId = (int)stockBarcode.DepotsId
                }).IgnoreColumns(true).ExecuteCommand();
@@ -821,7 +848,7 @@
            {
                Guid = Guid.NewGuid(),
                ItemOutId = outId,
                ItemBarcode = newBarcode ?? query.barcode,
                ItemBarcode = newBarcode ,
                ItemNo = stockBarcode.ItemNo,
                LotNo = stockBarcode.LotNo,
                Quantity = query.Num,
@@ -844,7 +871,7 @@
                PbillNo = query.billNo,
                ItemId = blDetail.Bld012,
                Unit = blDetail.Bld009,
                DepotId = (int)stockBarcode.DepotsId,
                DepotId = (int)stockBarcode.DepotId,
                Dabid = womdab.Guid,
            }).IgnoreColumns(true).ExecuteCommand();
@@ -856,7 +883,7 @@
                BillTypeId = 200, // p_bill_type_id
                TransactionCode = "209", // p_transaction_no 
                BusinessType = 1,
                ItemBarcode = newBarcode ?? query.barcode,
                ItemBarcode = newBarcode ,
                ItemNo = stockBarcode.ItemNo,
                LotNo = stockBarcode.LotNo,
                EpFlag = true,
@@ -887,7 +914,7 @@
                    Dab020 = (it.Dab020 ?? 0) + query.Num, // 已发料数量
                    Dab021 = (it.Dab021 ?? 0) + query.Num // 已发料数量
                })
                .Where(it => it.Id == womdab.Id && it.Dab003 == womdab.Dab003)
                .Where(it => it.Guid == womdab.DaaGuid && it.Dab003 == womdab.Dab003)
                .ExecuteCommand();
            // 更新补料单明细已补数量
@@ -932,6 +959,13 @@
            if (executeCommand <= 1) throw new Exception("更新失败");
            // 创建 插入日志
            var logService = new LogService();
            var LogMsg = "[PDA]" + query.Type + "。条码【" + newBarcode + "】 出库单号【" + outNo + "】";
            logService.CreateLog(db, query.userName, womdaa.Guid.ToString(), "WOMDAA", LogMsg, womdaa.Daa001);
            return executeCommand;
        }) > 0;
@@ -951,7 +985,14 @@
            })
            .ToList();
        return (success, pendingList);
        var dto = new ProductionPickDto
        {
            daa001 = query.billNo,
            barcode = query.barcode,//原条码
            cfBarcode = newBarcode//拆分后条码
        };
        return dto;
    }
    #endregion
@@ -1316,7 +1357,7 @@
                    Dab020 = (it.Dab020 ?? 0) + stockBarcode.Quantity,
                    Dab023 = (it.Dab023 ?? 0) + stockBarcode.Quantity
                })
                .Where(it => it.Id == womdab.Id)
                .Where(it => it.Guid == womdab.Guid)
                .ExecuteCommand();
            // 更新超领单明细
@@ -1720,7 +1761,7 @@
                    Dab020 = (it.Dab020 ?? 0) + stockBarcode.Quantity,
                    Dab023 = (it.Dab023 ?? 0) + stockBarcode.Quantity
                })
                .Where(it => it.Id == workOrderDetail.Id)
                .Where(it => it.Guid == workOrderDetail.Guid)
                .ExecuteCommand();
            // 更新补料单明细已补数量
@@ -1782,5 +1823,72 @@
        return (true, pendingList);
    }
    /// <summary>
    ///     根据单号获取生产补料单明细  prc_rf_pda_scan_zout_showbl
    /// </summary>
    /// <param name="billNo">补料单号</param>
    /// <returns>补料单明细列表</returns>
    public ProductionPickDto
        GetMesItemWWBlDetailByBillNo(
            WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.billNo))
            throw new Exception("请选单据号!");
        // 检查补料单是否存在且为生产补料类型
        var mesItemBl = Db.Queryable<MesItemBl>()
            .Where(a => a.BlNo == query.billNo && a.Bl008 == query.Type && a.Bl018 == true)
            .First();
        if (mesItemBl == null)
            throw new Exception("单据号不存在或未审核!");
        //if (mesItemBl.Bl019 == true)
        //    throw new Exception("单据号已完成!");
        //// 获取未完成的补料单明细
        //var blDetails = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
        //        new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
        //    .Where((a, b) => a.BlNo == query.billNo
        //                     && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
        //    .Select((a, b) => new MesItemBlDetail
        //    {
        //        Bld012 = b.Bld012,
        //        Bld002 = b.Bld002,
        //        Bld003 = b.Bld003,
        //        Bld004 = b.Bld004,
        //        Bld007 = b.Bld007,
        //        Bld008 = b.Bld008
        //    })
        //    .ToList();
        //return (mesItemBl.Bl001, blDetails);
        var sql = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,A.BLD007 FQty,A.BLD008 SQty,A.BLD007 - A.BLD008 DSQty,
       dbo.F_QX_GETRECODEPOTSE(A.bld012,'','','') as RecoKw,D.daa001
fROM MES_ITEM_BL_DETAIL A
         LEFT JOIN MES_ITEM_BL B ON A.MID = B.ID
         LEFT JOIN MES_ITEMS C ON A.bld012 = CAST(C.item_id AS VARCHAR(50))
         LEFT JOIN WW_GD D ON B.about_guid = D.ID
WHERE B.bl_no = '{0}'", query.billNo);
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql);
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        var dto = new ProductionPickDto
        {
            daa001 = womdabs[0].DAA001,
            //PlanNo = womcaa.Caa020,
            items = DS_list,
            Ysitems = YS_list
        };
        return dto;
    }
    #endregion
}