InboundProductionViewModel.cs
4.0 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using IndustrialControl.Services;
using System.Collections.ObjectModel;
namespace IndustrialControl.ViewModels
{
public partial class InboundProductionViewModel : ObservableObject
{
[ObservableProperty] private string? scanCode;
private readonly IWarehouseDataService _warehouseSvc;
public InboundProductionViewModel(IWarehouseDataService warehouseSvc)
{
_warehouseSvc = warehouseSvc;
ConfirmCommand = new AsyncRelayCommand(ConfirmInboundAsync);
// 测试数据
Lines = new ObservableCollection<ProductionScanItem>
{
new ProductionScanItem { IsSelected = false, Barcode="FSC2025060300001", Bin="CK1_A201", Qty=1 },
new ProductionScanItem { IsSelected = false, Barcode="FSC2025060300002", Bin="CK1_A201", Qty=1 }
};
AvailableBins = new ObservableCollection<string>
{
"CK1_A201", "CK1_A202", "CK1_A203"
};
}
// 基础信息
[ObservableProperty] private string orderNo;
[ObservableProperty] private string workOrderNo;
[ObservableProperty] private string productName;
[ObservableProperty] private int pendingQty;
public ObservableCollection<ProductionScanItem> Lines { get; set; }
public ObservableCollection<string> AvailableBins { get; set; }
public IAsyncRelayCommand ConfirmCommand { get; }
public void ClearScan()
{
Lines.Clear();
}
public void ClearAll()
{
OrderNo = string.Empty;
WorkOrderNo = string.Empty;
ProductName = string.Empty;
PendingQty = 0;
Lines.Clear();
}
public void PassSelectedScan()
{
foreach (var item in Lines)
{
if (item.IsSelected)
{
// 扫描通过处理
}
}
}
public void CancelSelectedScan()
{
for (int i = Lines.Count - 1; i >= 0; i--)
{
if (Lines[i].IsSelected)
Lines.RemoveAt(i);
}
}
public async Task<bool> ConfirmInboundAsync()
{
if (string.IsNullOrWhiteSpace(OrderNo))
return false;
var result = await _warehouseSvc.ConfirmInboundProductionAsync(OrderNo,
Lines.Select(x => new ScanItem(0, x.Barcode, x.Bin, x.Qty)));
return result.Succeeded;
}
public async Task HandleScannedAsync(string data, string symbology)
{
// TODO: 你的规则(判断是订单号/物料码/包装码等)
// 然后:查询接口 / 加入列表 / 自动提交
await Task.CompletedTask;
}
public async Task LoadOrderAsync(string orderNo)
{
// 0) 清空旧数据
ClearAll();
// 1) 基础信息
var order = await _warehouseSvc.GetInboundOrderAsync(orderNo);
OrderNo = order.OrderNo;
try
{
var bins = await _warehouseSvc.ListInboundBinsAsync(orderNo);
AvailableBins.Clear();
foreach (var b in bins) AvailableBins.Add(b);
}
catch
{
// 兜底:本地 mock,避免空集合导致 Picker 无选项
AvailableBins.Clear();
foreach (var b in new[] { "CK1_A201", "CK1_A202", "CK1_A203", "CK1_A204" })
AvailableBins.Add(b);
}
var defaultBin = AvailableBins.FirstOrDefault() ?? "CK1_A201";
}
}
public class ProductionScanItem
{
public bool IsSelected { get; set; }
public string Barcode { get; set; }
public string Bin { get; set; }
public int Qty { get; set; }
}
}