mirror of
https://github.com/ManyakRus/starter.git
synced 2025-02-21 20:47:37 +02:00
137 lines
3.5 KiB
Go
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
|
|
|
|
}
|