11
啊鑫
2025-01-08 7e4085b2b97386abb8b7dc5626953dc79b1f1b45
service/Warehouse/TransferOutManager.cs
@@ -7,13 +7,13 @@
namespace NewPdaSqlServer.service.Warehouse;
/// <summary>
/// 调拨出库管理类
/// 负责处理调拨出库相关的业务逻辑
///     调拨出库管理类
///     负责处理调拨出库相关的业务逻辑
/// </summary>
public class TransferOutManager : Repository<TransferOut>
{
    /// <summary>
    /// 获取未完成的调拨出库单号列表
    ///     获取未完成的调拨出库单号列表
    /// </summary>
    /// <returns>未完成的调拨出库单号列表</returns>
    public List<string> GetTransferOutNoList()
@@ -28,8 +28,8 @@
            .Select(g => new
            {
                pid = g.Key,
                sq = g.Sum(x => x.ShNum),  // 申请数量合计
                ys = g.Sum(x => x.YsNum)   // 已扫数量合计
                sq = g.Sum(x => x.ShNum), // 申请数量合计
                ys = g.Sum(x => x.YsNum) // 已扫数量合计
            })
            .Where(x => (x.sq ?? 0) != (x.ys ?? 0))
            .Select(x => x.pid)
@@ -45,7 +45,7 @@
    }
    /// <summary>
    /// 根据单据号获取待处理的调拨出库明细列表
    ///     根据单据号获取待处理的调拨出库明细列表
    /// </summary>
    /// <param name="query">查询参数,包含单据号</param>
    /// <returns>待处理的调拨出库明细列表</returns>
@@ -62,16 +62,16 @@
                    JoinType.Left, b.Pid == a.Guid,
                    JoinType.Left, b.ItemId == s.Id))
            .Where((b, a, s) =>
                (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0  // 未完成数量大于0
                && a.BillNo == p_bill_no             // 匹配单据号
                && a.Status == 1)                    // 单据已审核
                (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0 // 未完成数量大于0
                && a.BillNo == p_bill_no // 匹配单据号
                && a.Status == 1) // 单据已审核
            .OrderBy((b, a, s) => s.ItemNo)
            .Select((b, a, s) => new TransferOutDetail
            {
                ItemNo = s.ItemNo,
                ItemModel = s.ItemModel,
                ShNum = b.ShNum,      // 申请数量
                YsNum = b.YsNum,      // 已扫数量
                ShNum = b.ShNum, // 申请数量
                YsNum = b.YsNum, // 已扫数量
                // 保留其他必要字段...
                Pid = b.Pid,
                ItemId = b.ItemId,
@@ -83,7 +83,7 @@
    }
    /// <summary>
    /// 扫描条码进行调拨出库处理
    ///     扫描条码进行调拨出库处理
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
@@ -94,23 +94,17 @@
        var c_user = query.userName;
        var p_item_barcode = query.barcode;
        var p_bill_type_id = 300;     // 单据类型ID
        var p_transaction_no = 301;    // 交易编号
        var p_bill_type_id = 300; // 单据类型ID
        var p_transaction_no = 301; // 交易编号
        // 验证单据号
        if (string.IsNullOrEmpty(p_bill_no))
        {
            throw new Exception("请选取单据号!");
        }
        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!");
        // 查询出库单并验证状态
        var transferOut = Db.Queryable<TransferOut>()
            .Where(x => x.BillNo == p_bill_no && x.Status == 1)
            .First();
        if (transferOut == null)
        {
            throw new Exception("未找到调拨申请单或者调拨申请单没审核");
        }
        if (transferOut == null) throw new Exception("未找到调拨申请单或者调拨申请单没审核");
        // 查询条码库存信息并验证
        var stock = Db.Queryable<MesInvItemStocks>()
@@ -118,42 +112,29 @@
                        && x.Quantity > 0
                        && !string.IsNullOrEmpty(x.DepotsCode))
            .First();
        if (stock == null)
        {
            throw new Exception($"库存中无此条码,请核对!{p_item_barcode}");
        }
        if (stock == null) throw new Exception($"库存中无此条码,请核对!{p_item_barcode}");
        // 验证仓库一致性
        if (stock.DepotsCode != transferOut.InvCode)
        {
            throw new Exception(
                $"条码库存仓库{stock.DepotsCode}和申请仓库不一致{transferOut.InvCode}");
        }
        // 查询物料信息
        var item = Db.Queryable<MesItems>()
            .Where(x => x.Id == stock.ItemId)
            .First();
        if (item == null)
        {
            throw new Exception("未找到物料");
        }
        if (item == null) throw new Exception("未找到物料");
        // 查询调拨明细并验证
        var detail = Db.Queryable<TransferOutDetail>()
            .Where(x => x.ItemId == stock.ItemId && x.Pid == transferOut.Guid)
            .First();
        if (detail == null)
        {
            throw new Exception("未找到条码物料相应的调拨申请");
        }
        if (detail == null) throw new Exception("未找到条码物料相应的调拨申请");
        // 验证数量是否超出未扫数量
        if ((detail.ShNum ?? 0) - (detail.YsNum ?? 0) < stock.Quantity)
        {
            throw new Exception("条码数量大于申请未扫数量,请拆分了再扫码");
        }
        // 使用事务处理数据更新
        UseTransaction(db =>
        {
@@ -164,7 +145,7 @@
                            && (x.Status ?? 0) == 0)
                .First();
            var commit = 0;  // 记录更新操作次数
            var commit = 0; // 记录更新操作次数
            var c_id = Guid.Empty;
            // 处理移库主表记录
@@ -241,7 +222,7 @@
                SuppNo = stock.SuppNo,
                ItemId = stock.ItemId,
                EbelnK3id = stock.EbelnK3id,
                LineK3id = stock.LineK3id,
                LineK3id = stock.LineK3id
                // RkDepot = transferOut.RkDepot,
                // CkDepot = transferOut.CkDepot
            };
@@ -284,7 +265,7 @@
                SuppNo = stock.SuppNo,
                ItemId = (int)stock.ItemId,
                EbelnK3id = stock.EbelnK3id,
                LineK3id = stock.LineK3id,
                LineK3id = stock.LineK3id
                // RkDepot = transferOut.RkDepot,
                // CkDepot = transferOut.CkDepot
            };
@@ -321,7 +302,7 @@
                    WorkLine = stock.WorkLine,
                    EbelnK3id = (int)stock.EbelnK3id,
                    LineK3id = (int)stock.LineK3id,
                    Quantity = stock.Quantity,
                    Quantity = stock.Quantity
                    // Unit = stock.ItemUnit
                };
@@ -342,35 +323,31 @@
                    .Where(x => x.Guid == detail.Guid)
                    .ExecuteCommand();
            }
            // 检查是否所有明细都已完成
            var totals = db.Queryable<TransferOutDetail, TransferOut>((b, a) =>
                new JoinQueryInfos(JoinType.Left, b.Pid == a.Guid))
            var totals = db.Queryable<TransferOutDetail, TransferOut>((b, a) =>
                    new JoinQueryInfos(JoinType.Left, b.Pid == a.Guid))
                .Where((b, a) => a.BillNo == p_bill_no)
                .Select((b, a) => new {
                    ShNum = SqlFunc.AggregateSum(b.ShNum),  // 申请总数量
                    YsNum = SqlFunc.AggregateSum(b.YsNum)   // 已扫总数量
                .Select((b, a) => new
                {
                    ShNum = SqlFunc.AggregateSum(b.ShNum), // 申请总数量
                    YsNum = SqlFunc.AggregateSum(b.YsNum) // 已扫总数量
                })
                .First();
            // 如果申请数量等于已扫数量,更新单据完成状态
            if (totals.ShNum == totals.YsNum)
            {
                commit += db.Updateable<TransferOut>()
                    .SetColumns(x => x.IsWc == 1)
                    .Where(x => x.BillNo == p_bill_no)
                    .ExecuteCommand();
            }
            // 更新返回参数
            query.itemNo = item.ItemNo;
            query.Num = stock.Quantity;
            // 验证更新操作是否全部成功
            if (commit < 4)
            {
                throw new Exception("更新失败");
            }
            if (commit < 4) throw new Exception("更新失败");
            return commit;
        });