liuying
2024-11-26 0a7bf282841eea43da4406f9a9d14e31a72fea75
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs
@@ -13,9 +13,13 @@
public class WmsStockQuanService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<WmsStockQuan> _rep;
    public WmsStockQuanService(SqlSugarRepository<WmsStockQuan> rep)
    private readonly SqlSugarRepository<Mes_BatchOrderUPI_New> _Mes_BatchOrderUPI_New_Rep;
    public WmsStockQuanService(SqlSugarRepository<WmsStockQuan> rep,
        SqlSugarRepository<Mes_BatchOrderUPI_New> Mes_BatchOrderUPI_New_Rep)
    {
        _rep = rep;
        _Mes_BatchOrderUPI_New_Rep = Mes_BatchOrderUPI_New_Rep;
    }
    /// <summary>
@@ -302,5 +306,124 @@
        return groupedResult; // 返回分组结果
    }
    /// <summary>
    /// 不分页查询批次缺料清单 不齐包
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "ShortageList")]
    [Description("WmsStockQuan/ShortageList")]
    public async Task<List<WmsShortageListOutput>> ShortageList([FromQuery] KittingListInput input)
    {
        var list = await _rep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.PlaceCode.Contains(input.DetailName.Trim()))
            .Select(x => new WmsShortageListOutput
            {
                OrderId = x.OrderId,
                PlanNo = x.PlanNo,
                PackageCode = x.PackageCode
            })
            .ToListAsync(); // 确保获取结果为 List
        // 分组并返回分组信息
        var groupedResult = list
            .GroupBy(x => x.OrderId) // 按 OrderId 分组
            .Select(g => new WmsShortageListOutput
            {
                OrderId = g.Key, // 获取分组的键
                PlanNo = g.FirstOrDefault().PlanNo, // 获取组内的第一个 PlanNo
                PackageCode = g.FirstOrDefault().PackageCode, // 获取组内的第一个 PackageCode
                HasCount = g.Count(), // 统计每组的数量
                TotalCount = 0, // 初始化 TotalCount
                ShortageCount = 0 // 初始化 ShortageCount
            })
            .OrderBy(g => g.OrderId) // 根据 OrderId 排序
            .ToList(); // 转换为 List
        // 循环 groupedResult 给每一条加上总数量 CountTotal
        foreach (var item in groupedResult)
        {
            item.TotalCount = await _Mes_BatchOrderUPI_New_Rep.AsQueryable().CountAsync(m => m.PackageCode == item.PackageCode); // 根据 PackageCode 统计总条数
            item.ShortageCount = item.TotalCount - item.HasCount > 0 ? item.TotalCount - item.HasCount : 0;
        }
        return groupedResult; // 返回分组结果
    }
    /// <summary>
    /// 分页查询批次缺料清单 不齐包
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "ShortagePage")]
    [Description("WmsStockQuan/ShortagePage")]
    public async Task<SqlSugarPagedList<WmsShortageListOutput>> ShortagePage(KittingListInput input)
    {
        // 获取基础数据
        var list = await _rep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.PlaceCode.Contains(input.DetailName.Trim()))
            .Select(x => new WmsShortageListOutput
            {
                OrderId = x.OrderId,
                PlanNo = x.PlanNo,
                PackageCode = x.PackageCode
            })
            .ToListAsync(); // 确保获取结果为 List
        // 分组并返回分组信息
        var groupedResult = list
            .GroupBy(x => x.OrderId) // 按 OrderId 分组
            .Select(g => new WmsShortageListOutput
            {
                OrderId = g.Key, // 获取分组的键
                PlanNo = g.FirstOrDefault().PlanNo, // 获取组内的第一个 PlanNo
                PackageCode = g.FirstOrDefault().PackageCode, // 获取组内的第一个 PackageCode
                HasCount = g.Count(), // 统计每组的数量
                TotalCount = 0, // 初始化 TotalCount
                ShortageCount = 0 // 初始化 ShortageCount
            })
            .OrderBy(g => g.OrderId) // 根据 OrderId 排序
            .ToList(); // 转换为 List
        // 循环 groupedResult 给每一条加上总数量 TotalCount
        foreach (var item in groupedResult)
        {
            item.TotalCount = await _Mes_BatchOrderUPI_New_Rep.AsQueryable().CountAsync(m => m.PackageCode == item.PackageCode); // 根据 PackageCode 统计总条数
            item.ShortageCount = item.TotalCount - item.HasCount > 0 ? item.TotalCount - item.HasCount : 0;
        }
        // 分页处理
        var pagedResult = groupedResult.AsQueryable() // 将分组结果转换为可查询的集合
            .OrderBy(g => g.OrderId) // 进行排序
            .Skip((input.Page - 1) * input.PageSize) // 跳过前面的页数
            .Take(input.PageSize) // 取出当前页的数据
            .ToList(); // 转换为 List
        var totalCount = groupedResult.Count; // 获取总数
        var totalPages = (int)Math.Ceiling((double)totalCount / input.PageSize); // 计算总页数
        // 构造并返回分页结果
        return new SqlSugarPagedList<WmsShortageListOutput>
        {
            Page = input.Page,
            PageSize = input.PageSize,
            Total = totalCount,
            TotalPages = totalPages,
            Items = pagedResult,
            HasPrevPage = input.Page > 1,
            HasNextPage = input.Page < totalPages
        };
    }
}