forked from free-lancers/electricity_bill_calc_service
		
	统计当前系统中的报表
This commit is contained in:
		| @@ -2,6 +2,7 @@ package controller | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"electricity_bill_calc/logger" | 	"electricity_bill_calc/logger" | ||||||
|  | 	"electricity_bill_calc/model" | ||||||
| 	"electricity_bill_calc/response" | 	"electricity_bill_calc/response" | ||||||
| 	"electricity_bill_calc/security" | 	"electricity_bill_calc/security" | ||||||
| 	"electricity_bill_calc/service" | 	"electricity_bill_calc/service" | ||||||
| @@ -14,6 +15,7 @@ var StatisticsWithdrawLog = logger.Named("Handler", "StatisticsWithdraw") | |||||||
|  |  | ||||||
| func InitializeStatisticsController(router *fiber.App) { | func InitializeStatisticsController(router *fiber.App) { | ||||||
| 	router.Get("/audits", security.OPSAuthorize, currentAuditAmount) | 	router.Get("/audits", security.OPSAuthorize, currentAuditAmount) | ||||||
|  | 	router.Get("/stat/reports", statReports) | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -31,4 +33,53 @@ func currentAuditAmount(c *fiber.Ctx) error { | |||||||
| 		fiber.Map{"withdraw": amount}) | 		fiber.Map{"withdraw": amount}) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func statReports(c *fiber.Ctx) error { | ||||||
|  | 	result := response.NewResult(c) | ||||||
|  | 	session, err := _retreiveSession(c) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return result.Unauthorized(err.Error()) | ||||||
|  | 	} | ||||||
|  | 	var ( | ||||||
|  | 		enterprises int64 = 0 | ||||||
|  | 		parks       int64 = 0 | ||||||
|  | 		reports     []model.ParkPeriodStatistics | ||||||
|  | 	) | ||||||
|  | 	if session.Type != 0 { | ||||||
|  | 		enterprises, err = service.StatisticsService.EnabledEnterprises() | ||||||
|  | 		if err != nil { | ||||||
|  | 			StatisticsWithdrawLog.Error(err.Error()) | ||||||
|  | 			return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
|  | 		} | ||||||
|  | 		parks, err = service.StatisticsService.EnabledParks() | ||||||
|  | 		if err != nil { | ||||||
|  | 			StatisticsWithdrawLog.Error(err.Error()) | ||||||
|  | 			return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
|  | 		} | ||||||
|  | 		//TODO: 2023.07.26 报表数据库结构改变,此处逻辑复杂放在最后处理 | ||||||
|  | 		reports, err = service.StatisticsService.ParkNewestState() | ||||||
|  | 		if err != nil { | ||||||
|  | 			StatisticsWithdrawLog.Error(err.Error()) | ||||||
|  | 			return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		parks, err = service.StatisticsService.EnabledParks(session.Uid) | ||||||
|  | 		if err != nil { | ||||||
|  | 			StatisticsWithdrawLog.Error(err.Error()) | ||||||
|  | 			return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
|  | 		} | ||||||
|  | 		//TODO: 2023.07.26 报表数据库结构改变,此处逻辑复杂放在最后处理 | ||||||
|  | 		reports, err = service.StatisticsService.ParkNewestState(session.Uid) | ||||||
|  | 		if err != nil { | ||||||
|  | 			StatisticsWithdrawLog.Error(err.Error()) | ||||||
|  | 			return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return result.Success("已经完成园区报告的统计。", fiber.Map{ | ||||||
|  | 		"statistics": fiber.Map{ | ||||||
|  | 			"enterprises": enterprises, | ||||||
|  | 			"parks":       parks, | ||||||
|  | 			"reports":     reports, | ||||||
|  | 		}, | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package model | package model | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"electricity_bill_calc/types" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/shopspring/decimal" | 	"github.com/shopspring/decimal" | ||||||
| @@ -35,4 +36,10 @@ type Park struct { | |||||||
| type Parks struct { | type Parks struct { | ||||||
| 	Park | 	Park | ||||||
| 	NormAuthorizedLossRate float64 `json:"norm_authorized_loss_rate"` | 	NormAuthorizedLossRate float64 `json:"norm_authorized_loss_rate"` | ||||||
| }  | } | ||||||
|  |  | ||||||
|  | type ParkPeriodStatistics struct { | ||||||
|  | 	Id string `json:"id"` | ||||||
|  | 	Name string `json:"name"` | ||||||
|  | 	Period *types.DateRange | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										74
									
								
								service/statistics.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								service/statistics.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | |||||||
|  | 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 | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user