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 module shtrih-kkt
go 1.23.4 go 1.17
require ( require (
github.com/go-ole/go-ole v1.3.0 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 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0=
github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY= 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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 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 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
go.bug.st/serial v1.6.4 h1:7FmqNPgVp3pu2Jz5PoPtbZ9jJO5gnEnZIvnI1lzve8A= 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.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= 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 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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) { func setupLogger(config *ServiceConfig) {
// setupLogger настраивает систему логирования на основе конфигурации.
// Если конфигурация не передана или повреждена, логирование продолжается в консоль.
// Создает директорию для логов и настраивает ротацию с использованием lumberjack.
if config == nil { if config == nil {
log.Printf("Предупреждение: файл настроек '%s' не найден или некорректен. Логирование продолжится в консоль.", serviceConfigName) log.Printf("Предупреждение: файл настроек '%s' не найден или некорректен. Логирование продолжится в консоль.", serviceConfigName)
return return
@@ -147,7 +150,9 @@ func setupLogger(config *ServiceConfig) {
} }
func runConfigMode(data []byte) { func runConfigMode(data []byte) {
// setupLogger() // <--- УДАЛИТЕ ЭТУ СТРОКУ // runConfigMode запускает приложение в стационарном режиме с использованием
// конфигурации из файла connect.json. Парсит настройки устройств и запускает
// процесс опроса ККТ. При ошибках парсинга переключается на режим автопоиска.
var configFile ConfigFile var configFile ConfigFile
if err := json.Unmarshal(data, &configFile); err != nil { if err := json.Unmarshal(data, &configFile); err != nil {
@@ -182,6 +187,9 @@ func runConfigMode(data []byte) {
} }
func runDiscoveryMode() { func runDiscoveryMode() {
// runDiscoveryMode запускает приложение в режиме автопоиска устройств.
// Выполняет сканирование COM-портов и TCP-сетей для обнаружения ККТ Штрих-М.
// При обнаружении устройств сохраняет их конфигурацию для последующих запусков.
configs, err := shtrih.SearchDevices(comSearchTimeout, tcpSearchTimeout) configs, err := shtrih.SearchDevices(comSearchTimeout, tcpSearchTimeout)
if err != nil { if err != nil {
log.Printf("Во время поиска устройств произошла ошибка: %v", err) log.Printf("Во время поиска устройств произошла ошибка: %v", err)
@@ -476,6 +484,9 @@ func saveEmptyShtrihConfig() {
} }
func saveConfiguration(polledDevices []PolledDevice) { func saveConfiguration(polledDevices []PolledDevice) {
// saveConfiguration сохраняет конфигурацию найденных устройств в файл connect.json.
// Функция работает неразрушающим образом, сохраняя все остальные секции файла.
// Преобразует внутренние структуры shtrih.Config в формат ConnectionSettings для JSON.
log.Printf("Сохранение %d найденных конфигураций в файл '%s'...", len(polledDevices), configFileName) log.Printf("Сохранение %d найденных конфигураций в файл '%s'...", len(polledDevices), configFileName)
// Используем map[string]interface{} для неразрушающего редактирования JSON. // Используем map[string]interface{} для неразрушающего редактирования JSON.
@@ -519,6 +530,9 @@ func saveConfiguration(polledDevices []PolledDevice) {
// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ --- // --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---
func convertSettingsToConfigs(settings []ConnectionSettings) []shtrih.Config { func convertSettingsToConfigs(settings []ConnectionSettings) []shtrih.Config {
// convertSettingsToConfigs преобразует настройки подключения из JSON-формата
// в внутренние структуры shtrih.Config. Выполняет валидацию параметров
// и пропускает некорректные конфигурации с соответствующим логированием.
var configs []shtrih.Config var configs []shtrih.Config
baudRateMap := map[string]int32{ baudRateMap := map[string]int32{
"115200": 6, "57600": 5, "38400": 4, "19200": 3, "9600": 2, "4800": 1, "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"` // Заводской номер ККТ SerialNumber string `json:"serialNumber"` // Заводской номер ККТ
RNM string `json:"RNM"` // Регистрационный номер машины (РНМ) RNM string `json:"RNM"` // Регистрационный номер машины (РНМ)
OrganizationName string `json:"organizationName"` // Наименование организации пользователя OrganizationName string `json:"organizationName"` // Наименование организации пользователя
Address string `json:"address"` // Адрес установки ККТ
Inn string `json:"INN"` // ИНН пользователя Inn string `json:"INN"` // ИНН пользователя
FnSerial string `json:"fn_serial"` // Серийный номер фискального накопителя FnSerial string `json:"fn_serial"` // Серийный номер фискального накопителя
RegistrationDate string `json:"datetime_reg"` // Дата и время регистрации ККТ RegistrationDate string `json:"datetime_reg"` // Дата и время регистрации ККТ
@@ -299,6 +300,10 @@ func (d *comDriver) getInfoFromTables(info *FiscalInfo) error {
if err == nil { if err == nil {
info.OfdName = strings.TrimSpace(ofdName) 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" // Версия ФФД хранится в виде кода: 2 - "1.05", 4 - "1.2"
ffdValueStr, err := d.readTableField(17, 1, 17) ffdValueStr, err := d.readTableField(17, 1, 17)