南骏 池
2025-02-26 ccc519c681dacd75cd4079a1f3740c6f891430bd
service/Warehouse/TransferOutManager.cs
@@ -1,5 +1,6 @@
using System.Data;
using System.Data.SqlClient;
using MES.Service.Modes;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
@@ -11,7 +12,7 @@
///     调拨出入库管理类
///     负责处理调拨出库相关的业务逻辑
/// </summary>
public class TransferOutManager : Repository<TransferOut>
public class TransferOutManager : Repository<MesDbck>
{
    /// <summary>
    ///     获取未完成的调拨出库单号列表
@@ -20,7 +21,7 @@
    public List<string> GetTransferOutNoList()
    {
        // 先从数据库获取Transfer_Out_ETAIL表的数据
        var transferOutDetails = Db.Queryable<TransferOutDetail>().ToList();
        var transferOutDetails = Db.Queryable<MesDbckDetail>().ToList();
        // 使用LINQ对获取的数据进行分组和筛选
        // 筛选条件:申请数量(sq)不等于已扫数量(ys)的记录
@@ -29,17 +30,18 @@
            .Select(g => new
            {
                pid = g.Key,
                sq = g.Sum(x => x.ShNum), // 申请数量合计
                ys = g.Sum(x => x.YsNum) // 已扫数量合计
                sq = g.Sum(x => x.FQty), // 申请数量合计
                ys = g.Sum(x => x.SQty), // 调出已扫数量合计
                rs = g.Sum(x => x.RQty), // 调入已扫数量合计
            })
            .Where(x => (x.sq ?? 0) != (x.ys ?? 0))
            .Where(x => !((x.sq ?? 0) == (x.ys ?? 0) && (x.sq ?? 0) == (x.rs ?? 0)))
            .Select(x => x.pid)
            .ToList();
        // 根据pid查询对应的出库单号
        var billNos = Db.Queryable<TransferOut>()
            .Where(x => result.Contains(x.Guid))
            .Select(x => x.BillNo)
        var billNos = Db.Queryable<MesDbck>()
            .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1)
            .Select(x => x.FBillNo)
            .ToList();
        return billNos;
@@ -50,7 +52,7 @@
    /// </summary>
    /// <param name="query">查询参数,包含单据号</param>
    /// <returns>待处理的调拨出库明细列表</returns>
    public List<TransferOutDetail> GetTransferOutDetailListByBillNo(
    public List<TransferOutDetailModel> GetTransferOutDetailListByBillNo(
        WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -58,25 +60,63 @@
        // 根据SQL查询条件获取待处理的出库明细
        // 关联查询TransferOutDetail、TransferOut和MesItems三张表
        // 筛选条件:未完成数量大于0且单据已审核
        var result = Db.Queryable<TransferOutDetail, TransferOut, MesItems>(
        var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
                (b, a, s) => new JoinQueryInfos(
                    JoinType.Left, b.Pid == a.Guid,
                    JoinType.Left, b.ItemId == s.Id))
                    JoinType.Left, b.Pid == a.Id,
                    JoinType.Left, b.FMaterialId == s.Id.ToString()))
            .Where((b, a, s) =>
                (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0 // 未完成数量大于0
                && a.BillNo == p_bill_no // 匹配单据号
                && a.Status == 1) // 单据已审核
                !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
                && a.FBillNo == p_bill_no // 匹配单据号
                && a.FApproveStatus == 1) // 单据已审核
            .OrderBy((b, a, s) => s.ItemNo)
            .Select((b, a, s) => new TransferOutDetail
            .Select((b, a, s) => new TransferOutDetailModel
            {
                ItemNo = s.ItemNo,
                ItemName = s.ItemName,
                ItemModel = s.ItemModel,
                ShNum = b.ShNum, // 申请数量
                YsNum = b.YsNum, // 已扫数量
                FQty = b.FQty, // 申请数量
                SQty = b.SQty, // 已扫数量
                RQty = b.RQty, // 已扫数量
                // 保留其他必要字段...
                Pid = b.Pid,
                ItemId = b.ItemId,
                Guid = b.Guid
                Pid = b.Pid.ToString(),
                FMaterialId = b.FMaterialId,
                Id = b.Id.ToString()
            })
            .ToList();
        if(result.Count < 1) throw new Exception("该调拨单不存在或已扫完,请重新扫描");
        return result;
    }
    public List<TransferOutDetailModel> GetDBCKDetal(
        WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
        // 根据SQL查询条件获取待处理的出库明细
        // 关联查询TransferOutDetail、TransferOut和MesItems三张表
        // 筛选条件:未完成数量大于0且单据已审核
        var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
                (b, a, s) => new JoinQueryInfos(
                    JoinType.Left, b.Pid == a.Id,
                    JoinType.Left, b.FMaterialId == s.Id.ToString()))
            .Where((b, a, s) =>
                (b.FQty ?? 0) - (b.SQty ?? 0) > 0 // 未完成数量大于0
                && a.FBillNo == p_bill_no // 匹配单据号
                && a.FApproveStatus == 1) // 单据已审核
            .OrderBy((b, a, s) => s.ItemNo)
            .Select((b, a, s) => new TransferOutDetailModel
            {
                ItemNo = s.ItemNo,
                ItemName = s.ItemName,
                ItemModel = s.ItemModel,
                FQty = b.FQty, // 申请数量
                SQty = b.SQty, // 已扫数量
                // 保留其他必要字段...
                Pid = b.Pid.ToString(),
                FMaterialId = b.FMaterialId,
                Id = b.Id.ToString()
            })
            .ToList();
@@ -88,7 +128,7 @@
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
    public (WarehouseQuery form, List<TransferOutDetail> items)
    public (WarehouseQuery form, List<TransferOutDetailModel> items)
        ScanMoveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -98,8 +138,8 @@
        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!");
        // 查询出库单并验证状态
        var transferOut = Db.Queryable<TransferOut>()
            .Where(x => x.BillNo == p_bill_no && x.Status == 1)
        var transferOut = Db.Queryable<MesDbck>()
            .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
            .First();
        if (transferOut == null) throw new Exception("未找到调拨申请单或者调拨申请单没审核");
@@ -158,7 +198,7 @@
                    query.Fum = Convert.ToDecimal(splitNum);
                    // 返回更新后的表单和待处理明细
                    return (query, GetTransferOutDetailListByBillNo(query));
                    return (query, GetDBCKDetal(query));
                }
                catch (Exception ex)
                {
@@ -177,7 +217,7 @@
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
    public (WarehouseQuery form, List<TransferOutDetail> items)
    public (WarehouseQuery form, List<TransferOutDetailModel> items)
        ScanReceiveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -248,7 +288,7 @@
                    query.Fum = Convert.ToDecimal(splitNum);
                    // 返回更新后的表单和待处理明细
                    return (query, GetTransferOutDetailListByBillNo(query));
                    return (query, GetDBCKDetal(query));
                }
                catch (Exception ex)
                {