Compare commits
2 commits
d465d82248
...
12406d2503
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12406d2503 | ||
|
|
b72b375381 |
|
|
@ -28,8 +28,9 @@
|
||||||
`weightedCodeFormat`; уникальность. `GenerateUniqueWeightedShortCodeAsync`.
|
`weightedCodeFormat`; уникальность. `GenerateUniqueWeightedShortCodeAsync`.
|
||||||
5. [x] `/api/pos/v1/sync`: + `unitShort` («шт»/«кг»/«л») рядом с `unitCode` (ОКЕИ); в строках
|
5. [x] `/api/pos/v1/sync`: + `unitShort` («шт»/«кг»/«л») рядом с `unitCode` (ОКЕИ); в строках
|
||||||
возврата тоже; shared `UnitShort`; docs/mobile-api.md обновлён.
|
возврата тоже; shared `UnitShort`; docs/mobile-api.md обновлён.
|
||||||
6. [~] Тесты: unit 321/321 ✓ (WeightedBarcode/UnitShort/ScaleMonitor/PosBarcode); integration
|
6. [x] Тесты: unit 321/321 ✓ (WeightedBarcode/UnitShort/ScaleMonitor/PosBarcode); integration
|
||||||
MobileApi 9/9 ✓. full-chain + деплой — ниже.
|
19/19 ✓ (MobileApi/SignupFlow/DemoSeeder/ProductCardParity/Oversell). full-chain 16/16 ✓,
|
||||||
|
filters-sweep 21/21 ✓, деплой на стенд ✓.
|
||||||
|
|
||||||
### Автопоиск весов (данные sysadmin: МойСклад-касса спамит «Порт не выбран»/«Таймаут»)
|
### Автопоиск весов (данные sysadmin: МойСклад-касса спамит «Порт не выбран»/«Таймаут»)
|
||||||
- [x] Автоскан всех COM (вкл. USB-COM CH340/Prolific) × Масса-К/CAS × скорости; кнопка
|
- [x] Автоскан всех COM (вкл. USB-COM CH340/Prolific) × Масса-К/CAS × скорости; кнопка
|
||||||
|
|
@ -38,5 +39,23 @@
|
||||||
- [x] Весы не отвечают → «Весы не подключены» + ручной ввод; опрос только при весовом товаре.
|
- [x] Весы не отвечают → «Весы не подключены» + ручной ввод; опрос только при весовом товаре.
|
||||||
- [x] В логе — одна запись о потере/восстановлении связи (тест: 100 опросов → 1 запись).
|
- [x] В логе — одна запись о потере/восстановлении связи (тест: 100 опросов → 1 запись).
|
||||||
|
|
||||||
|
## Итог (2026-10-09)
|
||||||
|
Оба бага владельца устранены по корню и проверены на стенде:
|
||||||
|
- Поиск по ШК больше НЕ матчит по артикулу (вода арт.12345 + этикетка 2112345015007 → 404,
|
||||||
|
а не «1,5 кг»); разбор этикеток ВЫКЛ по умолчанию (Phase40 выключил и у существующих орг).
|
||||||
|
- Поиск по ШК — сначала точное совпадение (вкл. короткие «27xxxxx»), разбор этикетки лишь
|
||||||
|
если включён в орг И точного кода нет.
|
||||||
|
|
||||||
|
Сделано «лучше МойСклада» (данные sysadmin про спам «Порт не выбран»):
|
||||||
|
- Касса сама находит весы (автоскан COM × Масса-К/CAS × скорости), запоминает порт; весы не
|
||||||
|
отвечают → ручной ввод, опрос только при весовом товаре, одна запись в лог о потере связи.
|
||||||
|
- Генератор кода нового весового товара: короткий «27xxxxx» (next-free) или EAN-13 по настройке
|
||||||
|
— проверено на стенде (создан товар → код 2700001).
|
||||||
|
- unitShort («кг») на кассе вместо кода ОКЕИ («796»); на реальном окне Windows 11 плитки
|
||||||
|
показывают «690 ₸/кг», строка «1,235 кг × 690 ₸/кг».
|
||||||
|
|
||||||
|
Приёмочные ворота: unit 321/321, integration 19/19, full-chain 16/16, filters-sweep 21/21 —
|
||||||
|
зелёные. Коммиты в main (Co-Authored-By: Claude Opus 5.5), запушено; global.json не трогали.
|
||||||
|
|
||||||
## Что НЕ трогаем
|
## Что НЕ трогаем
|
||||||
Прод, shared-postgres, global.json, gateway nginx, sklad.
|
Прод, shared-postgres, global.json, gateway nginx, sklad.
|
||||||
|
|
|
||||||
|
|
@ -187,23 +187,24 @@ private static string LocalVersion()
|
||||||
private void RefreshStatus() { if (_svc is not null) { QueueCount = _svc.Store.PendingCount(); RefreshNegatives(); } }
|
private void RefreshStatus() { if (_svc is not null) { QueueCount = _svc.Store.PendingCount(); RefreshNegatives(); } }
|
||||||
|
|
||||||
// Весы: статус в верхней панели + «Найти весы» (автоскан COM-портов).
|
// Весы: статус в верхней панели + «Найти весы» (автоскан COM-портов).
|
||||||
[ObservableProperty] private string _scaleBadge = "Весы: не подключены";
|
[ObservableProperty] private string _scaleBadge = "не подключены";
|
||||||
[ObservableProperty] private bool _scaleBusy;
|
[ObservableProperty] private bool _scaleBusy;
|
||||||
|
|
||||||
private void RefreshScaleBadge() => ScaleBadge = _svc?.Scales.StatusText ?? "Весы: не подключены";
|
private void RefreshScaleBadge()
|
||||||
|
=> ScaleBadge = (_svc?.Scales.StatusText ?? "Весы не подключены").Replace("Весы ", "");
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private async Task DiscoverScales()
|
private async Task DiscoverScales()
|
||||||
{
|
{
|
||||||
if (_svc is null || ScaleBusy) return;
|
if (_svc is null || ScaleBusy) return;
|
||||||
ScaleBusy = true;
|
ScaleBusy = true;
|
||||||
ScaleBadge = "Весы: ищу…";
|
ScaleBadge = "ищу…";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var ok = await _svc.DiscoverScaleAsync();
|
var ok = await _svc.DiscoverScaleAsync();
|
||||||
ScaleBadge = ok ? "Весы: на связи" : "Весы не найдены";
|
ScaleBadge = ok ? "на связи" : "не найдены";
|
||||||
}
|
}
|
||||||
catch { ScaleBadge = "Весы: ошибка поиска"; }
|
catch { ScaleBadge = "ошибка поиска"; }
|
||||||
finally { ScaleBusy = false; }
|
finally { ScaleBusy = false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue