提交代码

This commit is contained in:
lmk
2026-07-02 10:23:07 +08:00
parent 7f6ec3a757
commit 802139c349
24 changed files with 7373 additions and 314 deletions
+118 -10
View File
@@ -2,12 +2,15 @@ package report
import (
"context"
"strconv"
"strings"
reportSvc "dataengine/common/report"
"dataengine/common/report/model"
"gitea.redpowerfuture.com/red-future/common/beans"
"github.com/gogf/gf/v2/frame/g"
"github.com/sirupsen/logrus"
)
type report struct{}
@@ -28,19 +31,23 @@ func ctxWithUser(ctx context.Context) context.Context {
type listBusinessesReq struct {
g.Meta `path:"/businesses" method:"get" tags:"报表引擎" summary:"业务列表"`
model.PageReq
}
type listBusinessesRes struct {
List []model.BusinessConfig `json:"list"`
model.PageRes
}
func (c *report) ListBusinesses(ctx context.Context, req *listBusinessesReq) (*listBusinessesRes, error) {
ctx = ctxWithUser(ctx)
list, err := svc().GetAllBusinesses(ctx)
list, total, err := svc().ListBusinesses(ctx, req.PageNum, req.PageSize)
if err != nil {
logrus.Errorf("[报表引擎] 获取业务列表失败: %v", err)
return nil, err
}
return &listBusinessesRes{List: list}, nil
totalPages := (total + req.PageSize - 1) / req.PageSize
return &listBusinessesRes{List: list, PageRes: model.PageRes{Total: total, Page: req.PageNum, PageSize: req.PageSize, TotalPages: totalPages}}, nil
}
type getBusinessReq struct {
@@ -56,6 +63,7 @@ func (c *report) GetBusiness(ctx context.Context, req *getBusinessReq) (*getBusi
ctx = ctxWithUser(ctx)
data, err := svc().GetBusiness(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 获取业务失败 id=%d: %v", req.ID, err)
return nil, err
}
return &getBusinessRes{Data: data}, nil
@@ -74,6 +82,7 @@ func (c *report) SaveBusiness(ctx context.Context, req *saveBusinessReq) (*saveB
ctx = ctxWithUser(ctx)
result, err := svc().SaveBusiness(ctx, &req.SaveBusinessReq)
if err != nil {
logrus.Errorf("[报表引擎] 保存业务失败: %v", err)
return nil, err
}
return &saveBusinessRes{SaveResult: result}, nil
@@ -92,6 +101,7 @@ func (c *report) DeleteBusiness(ctx context.Context, req *deleteBusinessReq) (*d
ctx = ctxWithUser(ctx)
result, err := svc().DeleteBusiness(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 删除业务失败 id=%d: %v", req.ID, err)
return nil, err
}
return &deleteBusinessRes{DeleteResult: result}, nil
@@ -104,19 +114,37 @@ func (c *report) DeleteBusiness(ctx context.Context, req *deleteBusinessReq) (*d
type listReportsReq struct {
g.Meta `path:"/reports" method:"get" tags:"报表引擎" summary:"报表列表"`
BusinessCode string `json:"businessCode" v:"required"`
ReportName string `json:"reportName" dc:"报表名称(模糊搜索)"`
model.PageReq
}
type listReportsRes struct {
List []model.ReportConfig `json:"list"`
model.PageRes
}
func (c *report) ListReports(ctx context.Context, req *listReportsReq) (*listReportsRes, error) {
ctx = ctxWithUser(ctx)
list, err := svc().GetAllReports(ctx, req.BusinessCode)
list, total, err := svc().ListReports(ctx, req.BusinessCode, req.ReportName, req.PageNum, req.PageSize)
if err != nil {
logrus.Errorf("[报表引擎] 获取报表列表失败 %s: %v", req.BusinessCode, err)
return nil, err
}
return &listReportsRes{List: list}, nil
// 填充抽取配置ID(逗号分隔,不限 status)
for i := range list {
configs, err := svc().GetExtractConfigsAll(ctx, list[i].BusinessCode, list[i].ReportCode)
if err == nil {
ids := make([]string, 0, len(configs))
for _, ec := range configs {
ids = append(ids, strconv.FormatInt(ec.Id, 10))
}
list[i].ExtractConfigIDs = strings.Join(ids, ",")
}
}
totalPages := (total + req.PageSize - 1) / req.PageSize
return &listReportsRes{List: list, PageRes: model.PageRes{Total: total, Page: req.PageNum, PageSize: req.PageSize, TotalPages: totalPages}}, nil
}
type getReportReq struct {
@@ -132,8 +160,20 @@ func (c *report) GetReport(ctx context.Context, req *getReportReq) (*getReportRe
ctx = ctxWithUser(ctx)
data, err := svc().GetReport(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 获取报表失败 id=%d: %v", req.ID, err)
return nil, err
}
// 填充抽取配置ID(逗号分隔,不限 status)
configs, err := svc().GetExtractConfigsAll(ctx, data.BusinessCode, data.ReportCode)
if err == nil {
ids := make([]string, 0, len(configs))
for _, ec := range configs {
ids = append(ids, strconv.FormatInt(ec.Id, 10))
}
data.ExtractConfigIDs = strings.Join(ids, ",")
}
return &getReportRes{Data: data}, nil
}
@@ -150,11 +190,32 @@ func (c *report) SaveReport(ctx context.Context, req *saveReportReq) (*saveRepor
ctx = ctxWithUser(ctx)
result, err := svc().SaveReport(ctx, &req.SaveReportReq)
if err != nil {
logrus.Errorf("[报表引擎] 保存报表失败: %v", err)
return nil, err
}
return &saveReportRes{SaveResult: result}, nil
}
type saveReportWithFieldsReq struct {
g.Meta `path:"/report/saveWithFields" method:"post" tags:"报表引擎" summary:"保存报表及字段配置(全量替换)"`
model.SaveReportWithFieldsReq
}
type saveReportWithFieldsRes struct {
*model.SaveResult
}
func (c *report) SaveReportWithFields(ctx context.Context, req *saveReportWithFieldsReq) (*saveReportWithFieldsRes, error) {
ctx = ctxWithUser(ctx)
result, err := svc().SaveReportWithFields(ctx, &req.SaveReportWithFieldsReq)
if err != nil {
logrus.Errorf("[报表引擎] 保存报表及字段失败 %s/%s: %v", req.BusinessCode, req.ReportCode, err)
return nil, err
}
logrus.Infof("[报表引擎] 保存报表及字段成功 %s/%s id=%d", req.BusinessCode, req.ReportCode, result.ID)
return &saveReportWithFieldsRes{SaveResult: result}, nil
}
type deleteReportReq struct {
g.Meta `path:"/report" method:"delete" tags:"报表引擎" summary:"删除报表"`
ID int64 `json:"id" v:"required"`
@@ -168,6 +229,7 @@ func (c *report) DeleteReport(ctx context.Context, req *deleteReportReq) (*delet
ctx = ctxWithUser(ctx)
result, err := svc().DeleteReport(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 删除报表失败 id=%d: %v", req.ID, err)
return nil, err
}
return &deleteReportRes{DeleteResult: result}, nil
@@ -181,11 +243,17 @@ type getReportFieldsReq struct {
g.Meta `path:"/fields" method:"get" tags:"报表引擎" summary:"报表字段列表(按角色分组)"`
BusinessCode string `json:"businessCode" v:"required"`
ReportCode string `json:"reportCode" v:"required"`
model.PageReq
}
func (c *report) GetReportFields(ctx context.Context, req *getReportFieldsReq) (*model.GetReportFieldsResp, error) {
ctx = ctxWithUser(ctx)
return svc().GetReportFields(ctx, req.BusinessCode, req.ReportCode)
resp, err := svc().GetReportFields(ctx, req.BusinessCode, req.ReportCode)
if err != nil {
logrus.Errorf("[报表引擎] 获取报表字段失败 %s/%s: %v", req.BusinessCode, req.ReportCode, err)
return nil, err
}
return resp, nil
}
type getFieldReq struct {
@@ -201,6 +269,7 @@ func (c *report) GetField(ctx context.Context, req *getFieldReq) (*getFieldRes,
ctx = ctxWithUser(ctx)
data, err := svc().GetField(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 获取字段失败 id=%d: %v", req.ID, err)
return nil, err
}
return &getFieldRes{Data: data}, nil
@@ -219,6 +288,7 @@ func (c *report) SaveField(ctx context.Context, req *saveFieldReq) (*saveFieldRe
ctx = ctxWithUser(ctx)
result, err := svc().SaveField(ctx, &req.SaveFieldReq)
if err != nil {
logrus.Errorf("[报表引擎] 保存字段失败: %v", err)
return nil, err
}
return &saveFieldRes{SaveResult: result}, nil
@@ -237,6 +307,7 @@ func (c *report) DeleteField(ctx context.Context, req *deleteFieldReq) (*deleteF
ctx = ctxWithUser(ctx)
result, err := svc().DeleteField(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 删除字段失败 id=%d: %v", req.ID, err)
return nil, err
}
return &deleteFieldRes{DeleteResult: result}, nil
@@ -250,19 +321,23 @@ type getExtractConfigsReq struct {
g.Meta `path:"/extractConfigs" method:"get" tags:"报表引擎" summary:"抽取配置列表"`
BusinessCode string `json:"businessCode" v:"required"`
ReportCode string `json:"reportCode" v:"required"`
model.PageReq
}
type getExtractConfigsRes struct {
List []model.ExtractConfig `json:"list"`
model.PageRes
}
func (c *report) GetExtractConfigs(ctx context.Context, req *getExtractConfigsReq) (*getExtractConfigsRes, error) {
ctx = ctxWithUser(ctx)
list, err := svc().GetExtractConfigs(ctx, req.BusinessCode, req.ReportCode)
list, total, err := svc().ListExtractConfigs(ctx, req.BusinessCode, req.ReportCode, req.PageNum, req.PageSize)
if err != nil {
logrus.Errorf("[报表引擎] 获取抽取配置列表失败 %s/%s: %v", req.BusinessCode, req.ReportCode, err)
return nil, err
}
return &getExtractConfigsRes{List: list}, nil
totalPages := (total + req.PageSize - 1) / req.PageSize
return &getExtractConfigsRes{List: list, PageRes: model.PageRes{Total: total, Page: req.PageNum, PageSize: req.PageSize, TotalPages: totalPages}}, nil
}
type getExtractConfigReq struct {
@@ -278,6 +353,7 @@ func (c *report) GetExtractConfig(ctx context.Context, req *getExtractConfigReq)
ctx = ctxWithUser(ctx)
data, err := svc().GetExtractConfig(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 获取抽取配置失败 id=%d: %v", req.ID, err)
return nil, err
}
return &getExtractConfigRes{Data: data}, nil
@@ -296,6 +372,7 @@ func (c *report) SaveExtractConfig(ctx context.Context, req *saveExtractConfigRe
ctx = ctxWithUser(ctx)
result, err := svc().SaveExtractConfig(ctx, &req.SaveExtractConfigReq)
if err != nil {
logrus.Errorf("[报表引擎] 保存抽取配置失败: %v", err)
return nil, err
}
return &saveExtractConfigRes{SaveResult: result}, nil
@@ -314,6 +391,7 @@ func (c *report) DeleteExtractConfig(ctx context.Context, req *deleteExtractConf
ctx = ctxWithUser(ctx)
result, err := svc().DeleteExtractConfig(ctx, req.ID)
if err != nil {
logrus.Errorf("[报表引擎] 删除抽取配置失败 id=%d: %v", req.ID, err)
return nil, err
}
return &deleteExtractConfigRes{DeleteResult: result}, nil
@@ -330,7 +408,27 @@ type extractDataReq struct {
func (c *report) ExtractData(ctx context.Context, req *extractDataReq) (*model.ExtractDailyDataResp, error) {
ctx = ctxWithUser(ctx)
return svc().ExtractDailyData(ctx, req.BusinessCode, req.ReportCode, req.StatDate, req.Executor)
resp, err := svc().ExtractDailyData(ctx, req.BusinessCode, req.ReportCode, req.StatDate, req.Executor)
if err != nil {
logrus.Errorf("[报表引擎] 按天抽取失败 %s/%s %s: %v", req.BusinessCode, req.ReportCode, req.StatDate, err)
return nil, err
}
return resp, nil
}
type backfillReq struct {
g.Meta `path:"/backfill" method:"post" tags:"报表引擎" summary:"批量回填数据"`
model.BackfillReq
}
func (c *report) Backfill(ctx context.Context, req *backfillReq) (*model.BackfillResp, error) {
ctx = ctxWithUser(ctx)
resp, err := svc().Backfill(ctx, &req.BackfillReq)
if err != nil {
logrus.Errorf("[报表引擎] 批量回填失败 %s/%s %s~%s: %v", req.BusinessCode, req.ReportCode, req.StartDate, req.EndDate, err)
return nil, err
}
return resp, nil
}
type autoCreateTableReq struct {
@@ -340,7 +438,12 @@ type autoCreateTableReq struct {
func (c *report) AutoCreateTable(ctx context.Context, req *autoCreateTableReq) (*model.AutoCreateStatTableResp, error) {
ctx = ctxWithUser(ctx)
return svc().AutoCreateStatTable(ctx, req.BusinessCode, req.ReportCode)
resp, err := svc().AutoCreateStatTable(ctx, req.BusinessCode, req.ReportCode)
if err != nil {
logrus.Errorf("[报表引擎] 自动建表失败 %s/%s: %v", req.BusinessCode, req.ReportCode, err)
return nil, err
}
return resp, nil
}
type queryReportReq struct {
@@ -350,7 +453,12 @@ type queryReportReq struct {
func (c *report) QueryReport(ctx context.Context, req *queryReportReq) (*model.UserSelectQueryResp, error) {
ctx = ctxWithUser(ctx)
return svc().QueryReportByUserSelect(ctx, &req.UserSelectQueryReq)
resp, err := svc().QueryReportByUserSelect(ctx, &req.UserSelectQueryReq)
if err != nil {
logrus.Errorf("[报表引擎] 查询报表失败 %s/%s: %v", req.BusinessCode, req.ReportCode, err)
return nil, err
}
return resp, nil
}
type initTablesReq struct {