refactor(stat):统计服务基本完成迁移。
This commit is contained in:
parent
df08c31278
commit
805911f72b
|
@ -3,64 +3,77 @@ package service
|
||||||
import (
|
import (
|
||||||
"electricity_bill_calc/cache"
|
"electricity_bill_calc/cache"
|
||||||
"electricity_bill_calc/global"
|
"electricity_bill_calc/global"
|
||||||
|
"electricity_bill_calc/logger"
|
||||||
"electricity_bill_calc/model"
|
"electricity_bill_calc/model"
|
||||||
|
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
"xorm.io/builder"
|
"github.com/uptrace/bun"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type _StatisticsService struct{}
|
type _StatisticsService struct {
|
||||||
|
l *zap.Logger
|
||||||
|
}
|
||||||
|
|
||||||
var StatisticsService _StatisticsService
|
var StatisticsService = _StatisticsService{
|
||||||
|
l: logger.Named("Service", "Stat"),
|
||||||
|
}
|
||||||
|
|
||||||
func (_StatisticsService) EnabledEnterprises() (int64, error) {
|
func (_StatisticsService) EnabledEnterprises() (int64, error) {
|
||||||
if cachedCount, err := cache.RetreiveCount("enabled_ent"); cachedCount != -1 && err == nil {
|
if cachedCount, err := cache.RetreiveCount("enabled_ent"); cachedCount != -1 && err == nil {
|
||||||
return cachedCount, nil
|
return cachedCount, nil
|
||||||
}
|
}
|
||||||
c, err := global.DBConn.
|
ctx, cancel := global.TimeoutContext()
|
||||||
Table(new(model.User)).
|
defer cancel()
|
||||||
Where(builder.Eq{"type": 0, "enabled": true}).
|
|
||||||
Count()
|
c, err := global.DB.NewSelect().Model((*model.User)(nil)).
|
||||||
|
Where("type = ?", model.USER_TYPE_ENT).
|
||||||
|
Where("enabled = ?", true).
|
||||||
|
Count(ctx)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cache.CacheCount([]string{"user"}, "enabled_ent", c)
|
cache.CacheCount([]string{"user"}, "enabled_ent", int64(c))
|
||||||
}
|
}
|
||||||
return c, err
|
return int64(c), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_StatisticsService) EnabledParks(userIds ...string) (int64, error) {
|
func (_StatisticsService) EnabledParks(userIds ...string) (int64, error) {
|
||||||
if cachedParks, err := cache.RetreiveCount("enabled_parks", userIds...); cachedParks != -1 && err == nil {
|
if cachedParks, err := cache.RetreiveCount("enabled_parks", userIds...); cachedParks != -1 && err == nil {
|
||||||
return cachedParks, nil
|
return cachedParks, nil
|
||||||
}
|
}
|
||||||
cond := builder.NewCond().And(builder.Eq{"enabled": true})
|
ctx, cancel := global.TimeoutContext()
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
query := global.DB.NewSelect().Model((*model.Park)(nil)).
|
||||||
|
Where("enabled = ?", true)
|
||||||
if len(userIds) > 0 {
|
if len(userIds) > 0 {
|
||||||
cond = cond.And(builder.Eq{"user_id": userIds})
|
query = query.Where("user_id in (?)", bun.In(userIds))
|
||||||
}
|
}
|
||||||
c, err := global.DBConn.
|
c, err := query.Count(ctx)
|
||||||
Table(new(model.Park)).
|
|
||||||
Where(cond).
|
|
||||||
Count()
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cache.CacheCount([]string{"user", "park"}, "enabled_parks", c, userIds...)
|
cache.CacheCount([]string{"user", "park"}, "enabled_parks", int64(c), userIds...)
|
||||||
}
|
}
|
||||||
return c, err
|
return int64(c), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_StatisticsService) ParksNewestState(userIds ...string) ([]model.ParkPeriodStatistics, error) {
|
func (_StatisticsService) ParksNewestState(userIds ...string) ([]model.ParkPeriodStatistics, error) {
|
||||||
if cachedState, _ := cache.RetreiveSearch[[]model.ParkPeriodStatistics]("park_period_stat", userIds...); cachedState != nil {
|
if cachedState, _ := cache.RetreiveSearch[[]model.ParkPeriodStatistics]("park_period_stat", userIds...); cachedState != nil {
|
||||||
return *cachedState, nil
|
return *cachedState, nil
|
||||||
}
|
}
|
||||||
cond := builder.NewCond().And(builder.Eq{"p.enabled": true, "r.published": true})
|
ctx, cancel := global.TimeoutContext()
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
query := global.DB.NewSelect().Model((*model.Report)(nil)).
|
||||||
|
Relation("Park", func(q *bun.SelectQuery) *bun.SelectQuery {
|
||||||
|
return q.Column("id", "name")
|
||||||
|
}).
|
||||||
|
Where("p.enabled = ?", true).
|
||||||
|
Where("r.publidhed = ?", true)
|
||||||
if len(userIds) > 0 {
|
if len(userIds) > 0 {
|
||||||
cond = cond.And(builder.Eq{"p.user_id": userIds})
|
query = query.Where("p.user_id in (?)", bun.In(userIds))
|
||||||
}
|
}
|
||||||
parks := make([]model.ParkPeriodStatistics, 0)
|
parks := make([]model.ParkPeriodStatistics, 0)
|
||||||
groupedParks := make(map[string]model.ParkPeriodStatistics, 0)
|
groupedParks := make(map[string]model.ParkPeriodStatistics, 0)
|
||||||
err := global.DBConn.
|
err := query.Column("period").Scan(ctx, &parks)
|
||||||
Table("park").Alias("p").
|
|
||||||
Join("LEFT", []string{"report", "r"}, "r.park_id=p.id").
|
|
||||||
Where(cond).
|
|
||||||
Cols("p.id", "p.name", "r.period").
|
|
||||||
Find(&parks)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return make([]model.ParkPeriodStatistics, 0), err
|
return make([]model.ParkPeriodStatistics, 0), err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user