1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-02-21 20:47:37 +02:00
starter/mssql_stek/mssql_stek.go
2023-11-27 18:05:53 +03:00

137 lines
3.5 KiB
Go

package mssql_stek
import (
"context"
"database/sql"
"errors"
"fmt"
"github.com/ManyakRus/starter/logger"
"time"
"github.com/golang-module/carbon/v2"
"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/connections"
//"github.com/ManyakRus/starter/common/pkg/v0/stopapp"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/mssql_gorm"
)
// log - глобальный логгер
var log = logger.GetLog()
// Loc - Локация (страна)
var Loc = time.Local
// FindDate_ClosedMonth - возвращает дату последнего закрытого периода в СТЕК
func FindDate_ClosedMonth(c connections.Connection) (time.Time, error) {
var err error
var Otvet time.Time
Connection_id := c.ID
ctxMain := contextmain.GetContext()
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*600)
defer ctxCancelFunc()
db := mssql_gorm.GetConnection(Connection_id)
db.WithContext(ctx)
text_sql := `
SELECT
[Месяц] AT TIME ZONE 'Russian Standard Time' as Date
FROM
[stack].[Закрытые месяцы]
WHERE
Задача = @Kod
`
kod := 252
if c.IsLegal == true {
kod = 11058
}
// Execute query
//DateNow1 := time.Now()
param1 := sql.Named("Kod", kod)
DB, err := db.DB()
if err != nil {
sError := fmt.Sprint("db.DB() error: ", err)
//log.Error(sError)
//stopapp.StopAppAndWait()
log.Panicln(sError)
return Otvet, errors.New(sError)
}
rows, err := DB.QueryContext(ctx, text_sql, param1)
defer func() {
err := rows.Close()
if err != nil {
log.Error("rows.Close() error: ", err)
}
}()
if err != nil {
sError := fmt.Sprint("MSSQL query error: ", err, " connection_id: ", Connection_id)
//log.Error(sError)
//stopapp.StopAppAndWait()
log.Panicln(sError)
return Otvet, errors.New(sError)
}
//даты
for rows.Next() {
err := rows.Scan(&Otvet)
if err != nil {
log.Warn("Scan() error: ", err)
continue
}
}
Otvet = Otvet.Local()
return Otvet, err
}
// FindDateFromTo - находит даты загрузки остатков и документов
func FindDateFromTo(Connection connections.Connection) (date1_balances, date2_balances, date1_doc, date2_doc time.Time, err error) {
date_closed, err := FindDate_ClosedMonth(Connection)
if err != nil {
return date1_balances, date2_balances, date1_doc, date2_doc, err
}
if date_closed.Year() < 2022 {
Text := "Error: Closed month < 2022"
log.Panic(Text)
err = errors.New(Text)
return date1_balances, date2_balances, date1_doc, date2_doc, err
}
date1_balances, date2_balances, date1_doc, date2_doc = FindDates_from_DateClosed(date_closed)
return date1_balances, date2_balances, date1_doc, date2_doc, nil
}
// FindDates_from_DateClosed - находит даты загрузки с учётом даты закрытого периода
func FindDates_from_DateClosed(date_closed time.Time) (date1_balances, date2_balances, date1_doc, date2_doc time.Time) {
// дата сегодня
carbon.SetLocation(Loc)
DateNow1 := time.Now()
DateNow2 := carbon.Time2Carbon(DateNow1).EndOfDay().Carbon2Time()
// 2 месяца разделим по 1 месяцу
date_closed_next1 := carbon.Time2Carbon(date_closed).AddMonth().StartOfMonth().Carbon2Time()
date1_balances = date_closed_next1
date2_balances = carbon.Time2Carbon(date1_balances).EndOfMonth().Carbon2Time()
if date2_balances.After(DateNow2) {
date2_balances = DateNow2
}
date1_doc = date_closed_next1
date2_doc = DateNow2
return date1_balances, date2_balances, date1_doc, date2_doc
}