MockWarehouseDataService.cs 3.2 KB
using IndustrialControl.ViewModels;

namespace IndustrialControl.Services;

public interface IWarehouseDataService
{
    Task<InboundOrder> GetInboundOrderAsync(string orderNo);
    Task<SimpleOk> ConfirmInboundAsync(string orderNo, IEnumerable<ScanItem> items);

    Task<SimpleOk> ConfirmInboundProductionAsync(string orderNo, IEnumerable<ScanItem> items);
    Task<SimpleOk> ConfirmOutboundMaterialAsync(string orderNo, IEnumerable<ScanItem> items);
    Task<SimpleOk> ConfirmOutboundFinishedAsync(string orderNo, IEnumerable<ScanItem> items);
    Task<IEnumerable<string>> ListInboundBinsAsync(string orderNo);

    // NEW: 查询列表(图1)
    Task<IEnumerable<InboundOrderSummary>> ListInboundOrdersAsync(string? orderNoOrBarcode, DateTime createdDate);
}

public record InboundOrder(string OrderNo, string Supplier, string LinkedNo, int ExpectedQty);
public record ScanItem(int Index, string Barcode, string? Bin, int Qty);
public record SimpleOk(bool Succeeded, string? Message = null);

public class MockWarehouseDataService : IWarehouseDataService
{
    private readonly Random _rand = new();

    public Task<InboundOrder> GetInboundOrderAsync(string orderNo)
        => Task.FromResult(new InboundOrder(orderNo, "XXXX", "DHD_23326", _rand.Next(10, 80)));

    public Task<SimpleOk> ConfirmInboundAsync(string orderNo, IEnumerable<ScanItem> items)
        => Task.FromResult(new SimpleOk(true, $"入库成功:{items.Count()} 条"));

    public Task<SimpleOk> ConfirmInboundProductionAsync(string orderNo, IEnumerable<ScanItem> items)
        => Task.FromResult(new SimpleOk(true, $"生产入库成功:{items.Count()} 条"));

    public Task<SimpleOk> ConfirmOutboundMaterialAsync(string orderNo, IEnumerable<ScanItem> items)
        => Task.FromResult(new SimpleOk(true, $"物料出库成功:{items.Count()} 条"));

    public Task<SimpleOk> ConfirmOutboundFinishedAsync(string orderNo, IEnumerable<ScanItem> items)
        => Task.FromResult(new SimpleOk(true, $"成品出库成功:{items.Count()} 条"));
    public Task<IEnumerable<InboundOrderSummary>> ListInboundOrdersAsync(string? orderNoOrBarcode, DateTime createdDate)
    {
        // 简单过滤逻辑(按需改造)
        var today = DateTime.Today;
        var all = Enumerable.Range(1, 8).Select(i =>
            new InboundOrderSummary(
                OrderNo: $"CGD{today:yyyyMMdd}-{i:000}",
                InboundType: (i % 2 == 0) ? "采购入库" : "生产入库",
                Supplier: $"供应商{i}",
                CreatedAt: today.AddDays(-i)
            ));

        IEnumerable<InboundOrderSummary> filtered = all;

        //if (!string.IsNullOrWhiteSpace(orderNoOrBarcode))
        //    filtered = filtered.Where(x => x.OrderNo.Contains(orderNoOrBarcode, StringComparison.OrdinalIgnoreCase));

        //// 示例:按创建日期“同一天”过滤(你可以换成 >= 起始 && < 次日)
        //filtered = filtered.Where(x => x.CreatedAt.Date == createdDate.Date);

        return Task.FromResult(filtered);
    }

    public Task<IEnumerable<string>> ListInboundBinsAsync(string orderNo)
    {
        var bins = new[] { "CK1_A201", "CK1_A202", "CK1_A203", "CK1_A204", "CK1_B101" };
        return Task.FromResult<IEnumerable<string>>(bins);
    }


}