package service import ( "electricity_bill_calc/global" "electricity_bill_calc/logger" "electricity_bill_calc/model" "github.com/doug-martin/goqu/v9" "github.com/georgysavva/scany/v2/pgxscan" "go.uber.org/zap" ) type _StatisticsService struct { l *zap.Logger ss goqu.DialectWrapper } var StatisticsService = _StatisticsService{ logger.Named("Service", "Stat"), goqu.Dialect("postgres"), } //用于统计企业用户数量 func (ss _StatisticsService) EnabledEnterprises() (int64, error) { ss.l.Info("开始统计企业数量。") ctx, cancel := global.TimeoutContext() defer cancel() UserCountQuery, UserCountQueryArgs, _ := ss.ss. From(goqu.T("user")). Where(goqu.I("type").Eq(model.USER_TYPE_ENT)). Where(goqu.I("enabled").Eq(true)). Select(goqu.COUNT("*")).ToSQL() var c int64 err := pgxscan.Get(ctx, global.DB, &c, UserCountQuery, UserCountQueryArgs...) if err != nil { ss.l.Error("统计企业数量出错", zap.Error(err)) return 0, err } return c, nil } //用于统计园区数量 func (ss _StatisticsService) EnabledParks(userIds ...string) (int64, error) { ss.l.Info("开始统计园区数量", zap.Strings("userId", userIds)) ctx, cancel := global.TimeoutContext() defer cancel() ParkCountQuery := ss.ss. From(goqu.T("park")). Where(goqu.I("enabled").Eq(true)) if len(userIds) > 0 { ParkCountQuery = ParkCountQuery.Where(goqu.I("user_id").In(userIds)) } ParkCountQuerySql, ParkCountQueryArgs, _ := ParkCountQuery.Select(goqu.COUNT("*")).ToSQL() var c int64 err := pgxscan.Get(ctx, global.DB, &c, ParkCountQuerySql, ParkCountQueryArgs...) if err != nil { ss.l.Error("园区数量统计错误", zap.Error(err)) return 0, err } return c, nil } //用户统计报表 func (ss _StatisticsService) ParkNewestState(userIds ...string) ([]model.ParkPeriodStatistics, error) { //TODO: 2023.07.26 报表数据库结构改变,此处逻辑复杂放在最后处理 //return nil,errors.New("还未处理逻辑") return []model.ParkPeriodStatistics{}, nil }