food-market/deploy/hwcheck-publish.sh
nns f15a12695c fix(pos): автопоиск весов не виснет на Bluetooth-портах (реальный баг на кассе 11.10)
На ноутбуке магазина автопоиск спотыкался о Bluetooth-порты (COM7/COM8 — Open/Write
висят), выбирал по умолчанию BT и не доходил до COM22 (USB-SERIAL CH340, где весы).
Парсер/протокол исправны (ручной выбор COM22 57600 работает) — баг только в поиске.

- ScaleAutodiscovery.DiscoverAsync: тирами по типу порта — USB-serial первыми,
  неопознанные в середине, Bluetooth последними; на каждый порт ЖЁСТКИЙ таймаут
  (Open обёрнут в задачу с гонкой против Task.Delay — SerialPort.Open на BT виснет);
  порты перебираются параллельно (до 4), общий бюджет ~15 с; любая ошибка/таймаут →
  следующий порт; по каждому порту строка в лог («COM22 CH340: ENQ→ACK, вес 0.000 кг»,
  «COM7 Bluetooth: пропущен», «COM15: нет ответа»).
- HardwareProbe: Classify (CH340/Prolific/FTDI/CP210x → USB-serial; BTHENUM/Bluetooth
  → Bluetooth; ttyUSB/ttyACM → USB-serial), ClassifyPorts (без открытия портов),
  OpenCloseBounded (жёсткий таймаут — листинг не виснет на BT). ListComPorts не
  открывает Bluetooth-порты.
- HwCheck: по умолчанию выбирается НЕ Bluetooth-порт; окно показывает журнал
  автопоиска по портам; список портов помечает [USB-serial]/[Bluetooth].
- Основная касса (экран «Оборудование») — та же DiscoverScaleAsync; --probe-hw не
  открывает BT-порты.
- Из zip hardware-check убран ярлык «(с тестовой печатью).bat» (печать — отдельно
  по слову владельца).
- Тесты: зависающий порт (Open 30 с) не задерживает поиск > таймаута, живой порт
  вторым — найден; USB-serial проверяется раньше Bluetooth (BT не трогаем). 53/53.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 09:03:45 +05:00

46 lines
2.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Сборка «ALL MARKET — Проверка оборудования» (food-market.pos.hwcheck) под Windows x64.
# Self-contained + ReadyToRun (без установленного .NET). В zip кладём ярлык-bat и README.
# Обычная касса в этот zip НЕ входит — этим exe нельзя пользоваться как кассой.
set -euo pipefail
cd "$(dirname "$0")/.."
PROJ=src/food-market.pos.hwcheck/food-market.pos.hwcheck.csproj
OUT=deploy/pos-dist
VER="$(date +%Y.%m.%d)"
RID=win-x64
DIR="$OUT/allmarket-hardware-check-$RID"
mkdir -p "$OUT"
rm -rf "$DIR"
echo "[hwcheck] publish $RID …"
dotnet publish "$PROJ" -c Release -r "$RID" --self-contained true \
-p:PublishReadyToRun=true -p:Version="$VER" -p:DebugType=none \
-o "$DIR" >/tmp/hwcheck-publish.log 2>&1 || { tail -30 /tmp/hwcheck-publish.log; exit 1; }
# Ярлык-bat (без ключей — тестовая печать выключена). Ярлык печати НЕ включаем:
# тестовую печать владелец включит отдельной сборкой/ключом по своему слову.
cat > "$DIR/Проверка оборудования.bat" <<'BAT'
@echo off
start "" "%~dp0foodmarket.Pos.HwCheck.exe"
BAT
cat > "$DIR/README.txt" <<'TXT'
ALL MARKET — Проверка оборудования
1. Распакуйте папку целиком в любое место (например, на Рабочий стол).
2. На время проверки закройте «Кассу МойСклад» (она держит COM-порт весов).
3. Запустите «Проверка оборудования.bat». Вход и пароль НЕ нужны.
4. Весы: нажмите «Найти весы», затем «Запустить» — вес обновляется вживую.
Для проверки с грузом положите гирю/товар и смотрите значение и «стабильно».
5. Принтеры и COM-порты показываются только для чтения.
На принтер НИЧЕГО не печатается (тестовая печать выключена).
6. «Сохранить отчёт» — текстовый файл рядом с программой; «Копировать отчёт» —
в буфер обмена. Пришлите отчёт — по нему настроим кассу.
На принтер ничего не печатается. Тестовую печать включает владелец отдельно.
TXT
( cd "$OUT" && zip -qr "allmarket-hardware-check-$RID-$VER.zip" "allmarket-hardware-check-$RID" )
echo "[hwcheck] zip: $OUT/allmarket-hardware-check-$RID-$VER.zip"