0.1.5-prod

windows 7 compatible
address added
This commit is contained in:
2025-09-22 03:16:33 +03:00
parent e9fa4f30e1
commit 2ac80c029f
4 changed files with 29 additions and 2 deletions

2
go.mod
View File

@@ -1,6 +1,6 @@
module shtrih-kkt
go 1.23.4
go 1.17
require (
github.com/go-ole/go-ole v1.3.0

8
go.sum
View File

@@ -1,11 +1,17 @@
github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0=
github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
go.bug.st/serial v1.6.4 h1:7FmqNPgVp3pu2Jz5PoPtbZ9jJO5gnEnZIvnI1lzve8A=
@@ -13,7 +19,9 @@ go.bug.st/serial v1.6.4/go.mod h1:nofMJxTeNVny/m6+KaafC6vJGj3miwQZ6vW4BZUGJPI=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

16
main.go
View File

@@ -117,6 +117,9 @@ func loadServiceConfig() *ServiceConfig {
}
func setupLogger(config *ServiceConfig) {
// setupLogger настраивает систему логирования на основе конфигурации.
// Если конфигурация не передана или повреждена, логирование продолжается в консоль.
// Создает директорию для логов и настраивает ротацию с использованием lumberjack.
if config == nil {
log.Printf("Предупреждение: файл настроек '%s' не найден или некорректен. Логирование продолжится в консоль.", serviceConfigName)
return
@@ -147,7 +150,9 @@ func setupLogger(config *ServiceConfig) {
}
func runConfigMode(data []byte) {
// setupLogger() // <--- УДАЛИТЕ ЭТУ СТРОКУ
// runConfigMode запускает приложение в стационарном режиме с использованием
// конфигурации из файла connect.json. Парсит настройки устройств и запускает
// процесс опроса ККТ. При ошибках парсинга переключается на режим автопоиска.
var configFile ConfigFile
if err := json.Unmarshal(data, &configFile); err != nil {
@@ -182,6 +187,9 @@ func runConfigMode(data []byte) {
}
func runDiscoveryMode() {
// runDiscoveryMode запускает приложение в режиме автопоиска устройств.
// Выполняет сканирование COM-портов и TCP-сетей для обнаружения ККТ Штрих-М.
// При обнаружении устройств сохраняет их конфигурацию для последующих запусков.
configs, err := shtrih.SearchDevices(comSearchTimeout, tcpSearchTimeout)
if err != nil {
log.Printf("Во время поиска устройств произошла ошибка: %v", err)
@@ -476,6 +484,9 @@ func saveEmptyShtrihConfig() {
}
func saveConfiguration(polledDevices []PolledDevice) {
// saveConfiguration сохраняет конфигурацию найденных устройств в файл connect.json.
// Функция работает неразрушающим образом, сохраняя все остальные секции файла.
// Преобразует внутренние структуры shtrih.Config в формат ConnectionSettings для JSON.
log.Printf("Сохранение %d найденных конфигураций в файл '%s'...", len(polledDevices), configFileName)
// Используем map[string]interface{} для неразрушающего редактирования JSON.
@@ -519,6 +530,9 @@ func saveConfiguration(polledDevices []PolledDevice) {
// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---
func convertSettingsToConfigs(settings []ConnectionSettings) []shtrih.Config {
// convertSettingsToConfigs преобразует настройки подключения из JSON-формата
// в внутренние структуры shtrih.Config. Выполняет валидацию параметров
// и пропускает некорректные конфигурации с соответствующим логированием.
var configs []shtrih.Config
baudRateMap := map[string]int32{
"115200": 6, "57600": 5, "38400": 4, "19200": 3, "9600": 2, "4800": 1,

View File

@@ -41,6 +41,7 @@ type FiscalInfo struct {
SerialNumber string `json:"serialNumber"` // Заводской номер ККТ
RNM string `json:"RNM"` // Регистрационный номер машины (РНМ)
OrganizationName string `json:"organizationName"` // Наименование организации пользователя
Address string `json:"address"` // Адрес установки ККТ
Inn string `json:"INN"` // ИНН пользователя
FnSerial string `json:"fn_serial"` // Серийный номер фискального накопителя
RegistrationDate string `json:"datetime_reg"` // Дата и время регистрации ККТ
@@ -299,6 +300,10 @@ func (d *comDriver) getInfoFromTables(info *FiscalInfo) error {
if err == nil {
info.OfdName = strings.TrimSpace(ofdName)
}
address, err := d.readTableField(18, 1, 9)
if err == nil {
info.Address = strings.TrimSpace(address)
}
// Версия ФФД хранится в виде кода: 2 - "1.05", 4 - "1.2"
ffdValueStr, err := d.readTableField(17, 1, 17)