tjx
2025-11-21 6c1dece09c289cc04375459d9a463be22d041086
1111
已修改4个文件
已添加2个文件
422 ■■■■■ 文件已修改
StandardPda/MES.Service/Dto/webApi/PagedResult.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/Dto/webApi/ReturnableStockSearchDto.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/obj/Debug/net8.0/MES.Service.AssemblyInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MESApplication/Controllers/Warehouse/MesInvItemStocksController.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MESApplication/obj/Debug/net8.0/MESApplication.AssemblyInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/Dto/webApi/PagedResult.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
namespace MES.Service.Dto.webApi;
/// <summary>
///     åˆ†é¡µå“åº”结果
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
public class PagedResult<T>
{
    /// <summary>
    ///     æ•°æ®åˆ—表
    /// </summary>
    public List<T> TbBillList { get; set; } = new();
    /// <summary>
    ///     åˆ†é¡µä¿¡æ¯
    /// </summary>
    public PaginationInfo Pagination { get; set; } = new();
}
/// <summary>
///     åˆ†é¡µä¿¡æ¯
/// </summary>
public class PaginationInfo
{
    /// <summary>
    ///     å½“前页码
    /// </summary>
    public int CurrentPage { get; set; }
    /// <summary>
    ///     æ¯é¡µæ¡æ•°
    /// </summary>
    public int PageSize { get; set; }
    /// <summary>
    ///     æ€»è®°å½•æ•°
    /// </summary>
    public int TotalRecords { get; set; }
    /// <summary>
    ///     æ€»é¡µæ•°
    /// </summary>
    public int TotalPages { get; set; }
}
StandardPda/MES.Service/Dto/webApi/ReturnableStockSearchDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
namespace MES.Service.Dto.webApi;
/// <summary>
///     å¯é€€è´§ç‰©æ–™æœç´¢è¯·æ±‚DTO
/// </summary>
public class ReturnableStockSearchDto
{
    /// <summary>
    ///     å½“前页码,从1开始
    /// </summary>
    public int PageIndex { get; set; } = 1;
    /// <summary>
    ///     æ¯é¡µæ•°é‡ï¼Œåªå…è®¸10/20/50
    /// </summary>
    public int PageSize { get; set; } = 20;
    /// <summary>
    ///     æœç´¢æ¡ä»¶å¯¹è±¡
    /// </summary>
    public SearchConditions? Conditions { get; set; }
}
/// <summary>
///     æœç´¢æ¡ä»¶
/// </summary>
public class SearchConditions
{
    /// <summary>
    ///     è‰¯å“çŠ¶æ€ï¼š1=良品,0=非良品
    /// </summary>
    public string? IqcStatus { get; set; }
    /// <summary>
    ///     ç‰©æ–™ç±»åž‹ï¼š1=成品,0=非成品
    /// </summary>
    public string? ItemType { get; set; }
    /// <summary>
    ///     æ¯æ‰˜ç›˜ç¼–号
    /// </summary>
    public string? StackCode { get; set; }
    /// <summary>
    ///     ä»“库名称
    /// </summary>
    public string? DepotName { get; set; }
    /// <summary>
    ///     åº“位代码
    /// </summary>
    public string? DepotSectionsCode { get; set; }
    /// <summary>
    ///     ç‰©æ–™ç¼–号
    /// </summary>
    public string? ItemNo { get; set; }
    /// <summary>
    ///     ç‰©æ–™åç§°
    /// </summary>
    public string? ItemName { get; set; }
    /// <summary>
    ///     ç‰©æ–™è§„æ ¼
    /// </summary>
    public string? ItemModel { get; set; }
    /// <summary>
    ///     æ•°é‡
    /// </summary>
    public decimal? Quantity { get; set; }
    /// <summary>
    ///     å•位
    /// </summary>
    public string? ItemUnitName { get; set; }
    /// <summary>
    ///     å…¥åº“日期起始 (格式: YYYY-MM-DD)
    /// </summary>
    public string? IndepDateStart { get; set; }
    /// <summary>
    ///     å…¥åº“日期结束 (格式: YYYY-MM-DD)
    /// </summary>
    public string? IndepDateEnd { get; set; }
    /// <summary>
    ///     ç»„织代码
    /// </summary>
    public string? OrgCode { get; set; }
    /// <summary>
    ///     ç»„织名称
    /// </summary>
    public string? OrgName { get; set; }
    /// <summary>
    ///     ç‰©æ–™æ¡ç 
    /// </summary>
    public string? ItemBarcode { get; set; }
}
StandardPda/MES.Service/obj/Debug/net8.0/MES.Service.AssemblyInfo.cs
@@ -13,7 +13,7 @@
[assembly: System.Reflection.AssemblyCompanyAttribute("MES.Service")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+03013bae1636497e8ea1946eb44831d8794fa055")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7d13b041f6cf87bddb0e3523c4cf1a328fc159f6")]
[assembly: System.Reflection.AssemblyProductAttribute("MES.Service")]
[assembly: System.Reflection.AssemblyTitleAttribute("MES.Service")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
@@ -10,7 +10,228 @@
public class MesInvItemStocksManager : Repository<MesInvItemStocks>
{
    /// <summary>
    ///     æŸ¥è¯¢å¯ä»¥é€€è´§çš„物料
    ///     æŸ¥è¯¢å¯ä»¥é€€è´§çš„物料(带分页和搜索)
    /// </summary>
    /// <param name="searchDto">搜索请求参数</param>
    /// <returns>分页结果</returns>
    public PagedResult<ReturnableStockDto> GetReturnableStocks(ReturnableStockSearchDto searchDto)
    {
        // å‚数校验
        if (searchDto.PageIndex < 1)
        {
            throw new Exception("页码必须大于0");
        }
        if (!new[] { 10, 20, 50 }.Contains(searchDto.PageSize))
        {
            throw new Exception("每页条数必须为10、20或50");
        }
        // 1. æŸ¥è¯¢XB_RACKING_TASK_SYXT_LOG中所有的条码并去重
        var distinctBarcodes = Db.Queryable<XbRackingTaskSyxtLog>()
            .Where(x => !string.IsNullOrEmpty(x.ItemBarcode))
            .Select(x => x.ItemBarcode)
            .Distinct()
            .ToList();
        if (distinctBarcodes == null || !distinctBarcodes.Any())
        {
            return new PagedResult<ReturnableStockDto>
            {
                TbBillList = new List<ReturnableStockDto>(),
                Pagination = new PaginationInfo
                {
                    CurrentPage = searchDto.PageIndex,
                    PageSize = searchDto.PageSize,
                    TotalRecords = 0,
                    TotalPages = 0
                }
            };
        }
        // 2. æž„建查询条件
        var query = Db.Queryable<MesInvItemStocks>()
            .LeftJoin<MesItems>((stock, item) => stock.ItemId == item.Id)
            .LeftJoin<MesDepots>((stock, item, depot) => stock.DepotsCode == depot.DepotCode)
            .LeftJoin<Organize>((stock, item, depot, org) => item.UseOrg == org.Id.ToString())
            .LeftJoin<MesUnit>((stock, item, depot, org, unit) => item.ItemUnit == unit.Id.ToString())
            .Where((stock, item, depot, org, unit) =>
                distinctBarcodes.Contains(stock.ItemBarcode) &&
                stock.Quantity > 0);
        // 3. åº”用搜索条件
        var conditions = searchDto.Conditions;
        if (conditions != null)
        {
            // ç²¾ç¡®åŒ¹é…æ¡ä»¶
            if (!string.IsNullOrEmpty(conditions.IqcStatus))
            {
                query = query.Where((stock, item, depot, org, unit) => stock.IqcStatus == conditions.IqcStatus);
            }
            if (conditions.Quantity.HasValue)
            {
                query = query.Where((stock, item, depot, org, unit) => stock.Quantity == conditions.Quantity.Value);
            }
            // æ¨¡ç³ŠåŒ¹é…æ¡ä»¶
            if (!string.IsNullOrEmpty(conditions.StackCode))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    stock.StackCode != null && stock.StackCode.Contains(conditions.StackCode));
            }
            if (!string.IsNullOrEmpty(conditions.DepotName))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    depot.DepotName != null && depot.DepotName.Contains(conditions.DepotName));
            }
            if (!string.IsNullOrEmpty(conditions.DepotSectionsCode))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    stock.DepotSectionsCode != null && stock.DepotSectionsCode.Contains(conditions.DepotSectionsCode));
            }
            if (!string.IsNullOrEmpty(conditions.ItemNo))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    item.ItemNo != null && item.ItemNo.Contains(conditions.ItemNo));
            }
            if (!string.IsNullOrEmpty(conditions.ItemName))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    item.ItemName != null && item.ItemName.Contains(conditions.ItemName));
            }
            if (!string.IsNullOrEmpty(conditions.ItemModel))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    item.ItemModel != null && item.ItemModel.Contains(conditions.ItemModel));
            }
            if (!string.IsNullOrEmpty(conditions.ItemUnitName))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    unit.Fname != null && unit.Fname.Contains(conditions.ItemUnitName));
            }
            if (!string.IsNullOrEmpty(conditions.OrgCode))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    org.Fnumber != null && org.Fnumber.Contains(conditions.OrgCode));
            }
            if (!string.IsNullOrEmpty(conditions.OrgName))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    org.Fname != null && org.Fname.Contains(conditions.OrgName));
            }
            if (!string.IsNullOrEmpty(conditions.ItemBarcode))
            {
                query = query.Where((stock, item, depot, org, unit) =>
                    stock.ItemBarcode != null && stock.ItemBarcode.Contains(conditions.ItemBarcode));
            }
            // æ—¥æœŸèŒƒå›´æ¡ä»¶
            if (!string.IsNullOrEmpty(conditions.IndepDateStart))
            {
                if (DateTime.TryParse(conditions.IndepDateStart, out var startDate))
                {
                    query = query.Where((stock, item, depot, org, unit) => stock.IndepDate >= startDate);
                }
            }
            if (!string.IsNullOrEmpty(conditions.IndepDateEnd))
            {
                if (DateTime.TryParse(conditions.IndepDateEnd, out var endDate))
                {
                    query = query.Where((stock, item, depot, org, unit) => stock.IndepDate <= endDate);
                }
            }
        }
        // 4. æŸ¥è¯¢æ€»è®°å½•æ•°
        var totalRecords = query.Count();
        // 5. è®¡ç®—分页参数
        var totalPages = (int)Math.Ceiling((double)totalRecords / searchDto.PageSize);
        var skip = (searchDto.PageIndex - 1) * searchDto.PageSize;
        // 6. æŸ¥è¯¢å½“前页数据(先查出中间数据)
        var queryResult = query
            .OrderByDescending((stock, item, depot, org, unit) => stock.IndepDate)
            .Select((stock, item, depot, org, unit) => new
            {
                stock.IqcStatus,
                stock.StackCode,
                DepotCode = stock.DepotsCode,
                depot.DepotName,
                stock.DepotSectionsCode,
                item.ItemNo,
                item.ItemName,
                item.ItemModel,
                stock.Quantity,
                item.ItemUnit,
                ItemUnitName = unit.Fname,
                stock.IndepDate,
                OrgCode = org.Fnumber,
                OrgName = org.Fname,
                stock.ItemBarcode
            })
            .Skip(skip)
            .Take(searchDto.PageSize)
            .ToList();
        // 7. åœ¨å†…存中转换为DTO
        var dataList = queryResult.Select(x => new ReturnableStockDto
        {
            IqcStatus = x.IqcStatus == "已检" ? "1" : "0",
            ItemType = x.DepotName == "原材料仓" ? "0" : "1",
            StackCode = x.StackCode,
            DepotCode = x.DepotCode,
            DepotName = x.DepotName,
            DepotSectionsCode = x.DepotSectionsCode,
            ItemNo = x.ItemNo,
            ItemName = x.ItemName,
            ItemModel = x.ItemModel,
            Quantity = x.Quantity,
            ItemUnit = x.ItemUnit,
            ItemUnitName = x.ItemUnitName,
            IndepDate = x.IndepDate,
            OrgCode = x.OrgCode,
            OrgName = x.OrgName,
            ItemBarcode = x.ItemBarcode
        }).ToList();
        // 8. åº”用ItemType筛选(在内存中过滤)
        if (conditions?.ItemType != null)
        {
            dataList = dataList.Where(x => x.ItemType == conditions.ItemType).ToList();
            // é‡æ–°è®¡ç®—分页信息
            totalRecords = dataList.Count;
            totalPages = (int)Math.Ceiling((double)totalRecords / searchDto.PageSize);
            dataList = dataList.Skip(skip).Take(searchDto.PageSize).ToList();
        }
        // 9. è¿”回分页结果
        return new PagedResult<ReturnableStockDto>
        {
            TbBillList = dataList,
            Pagination = new PaginationInfo
            {
                CurrentPage = searchDto.PageIndex,
                PageSize = searchDto.PageSize,
                TotalRecords = totalRecords,
                TotalPages = totalPages
            }
        };
    }
    /// <summary>
    ///     æŸ¥è¯¢å¯ä»¥é€€è´§çš„物料(旧版本,保留兼容)
    /// </summary>
    /// <returns>可退货物料库存列表</returns>
    public List<ReturnableStockDto> GetReturnableStocks()
@@ -41,21 +262,21 @@
                stock.Quantity > 0)
            .Select((stock, item, depot, org, unit) => new
            {
                IqcStatus = stock.IqcStatus,
                StackCode = stock.StackCode,
                stock.IqcStatus,
                stock.StackCode,
                DepotCode = stock.DepotsCode,
                DepotName = depot.DepotName,
                DepotSectionsCode = stock.DepotSectionsCode,
                ItemNo = item.ItemNo,
                ItemName = item.ItemName,
                ItemModel = item.ItemModel,
                Quantity = stock.Quantity,
                ItemUnit = item.ItemUnit,
                depot.DepotName,
                stock.DepotSectionsCode,
                item.ItemNo,
                item.ItemName,
                item.ItemModel,
                stock.Quantity,
                item.ItemUnit,
                ItemUnitName = unit.Fname,
                IndepDate = stock.IndepDate,
                stock.IndepDate,
                OrgCode = org.Fnumber,
                OrgName = org.Fname,
                ItemBarcode = stock.ItemBarcode
                stock.ItemBarcode
            })
            .ToList();
StandardPda/MESApplication/Controllers/Warehouse/MesInvItemStocksController.cs
@@ -14,7 +14,7 @@
    private readonly MesInvItemStocksManager m = new();
    /// <summary>
    ///     èŽ·å–å¯é€€è´§ç‰©æ–™åº“å­˜
    ///     èŽ·å–å¯é€€è´§ç‰©æ–™åº“å­˜(旧版本,保留兼容)
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetReturnableStocks")]
@@ -38,6 +38,30 @@
    }
    /// <summary>
    ///     èŽ·å–å¯é€€è´§ç‰©æ–™åº“å­˜(带分页和搜索)
    /// </summary>
    /// <param name="searchDto">搜索请求参数</param>
    /// <returns></returns>
    [HttpPost("GetReturnableStocksWithPaging")]
    public ResponseResult GetReturnableStocksWithPaging([FromBody] ReturnableStockSearchDto searchDto)
    {
        try
        {
            var result = m.GetReturnableStocks(searchDto);
            return new ResponseResult
            {
                status = 0,
                message = "查询成功",
                data = result
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     ç”Ÿæˆé€€æ–™è¯·æ±‚单
    /// </summary>
    /// <param name="dto">退料请求参数</param>
StandardPda/MESApplication/obj/Debug/net8.0/MESApplication.AssemblyInfo.cs
@@ -13,7 +13,7 @@
[assembly: System.Reflection.AssemblyCompanyAttribute("MESApplication")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+03013bae1636497e8ea1946eb44831d8794fa055")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7d13b041f6cf87bddb0e3523c4cf1a328fc159f6")]
[assembly: System.Reflection.AssemblyProductAttribute("MESApplication")]
[assembly: System.Reflection.AssemblyTitleAttribute("MESApplication")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]