提交代码
This commit is contained in:
+255
@@ -0,0 +1,255 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Final pass: apply all list-pagination + deleted_at filter changes."""
|
||||
import re
|
||||
|
||||
# ============= LOADER =============
|
||||
lp = '/Users/xujiaqian/GolandProjects/HDWL/data-engine/common/report/config/loader.go'
|
||||
with open(lp) as f:
|
||||
l = f.read()
|
||||
|
||||
# 1. GetAllBusinesses: status=ACTIVE -> deleted_at IS NULL
|
||||
l = l.replace(
|
||||
'"SELECT * FROM report_business_config WHERE status = $1 ORDER BY id ASC"',
|
||||
'"SELECT * FROM report_business_config WHERE deleted_at IS NULL ORDER BY id ASC"'
|
||||
)
|
||||
l = l.replace('\t\tmodel.StatusActive)', ')\n\t\t// (removed status filter)')
|
||||
|
||||
# 2. GetAllReports: add deleted_at IS NULL (keep existing)
|
||||
# Already has no status filter, just verify
|
||||
# (The user already removed status filter from GetAllReports earlier)
|
||||
|
||||
# 3. GetFields: status=ACTIVE -> deleted_at IS NULL
|
||||
l = l.replace(
|
||||
'"SELECT * FROM report_field_config WHERE business_code = $1 AND report_code = $2 AND status = $3 ORDER BY sort_order ASC"',
|
||||
'"SELECT * FROM report_field_config WHERE business_code = $1 AND report_code = $2 AND deleted_at IS NULL ORDER BY sort_order ASC"'
|
||||
)
|
||||
# Remove StatusActive arg from GetFields call
|
||||
l = l.replace(
|
||||
'businessCode, reportCode, model.StatusActive)',
|
||||
'businessCode, reportCode)'
|
||||
)
|
||||
|
||||
# 4. GetExtractConfigs: status=ACTIVE AND is_enabled=true -> deleted_at IS NULL
|
||||
l = l.replace(
|
||||
'"SELECT * FROM report_extract_config WHERE business_code = $1 AND report_code = $2 AND status = $3 AND is_enabled = $4"',
|
||||
'"SELECT * FROM report_extract_config WHERE business_code = $1 AND report_code = $2 AND deleted_at IS NULL ORDER BY id ASC"'
|
||||
)
|
||||
l = l.replace(
|
||||
'businessCode, reportCode, model.StatusActive, true)',
|
||||
'businessCode, reportCode)'
|
||||
)
|
||||
|
||||
# 5. Add GetAllFields (for edit query, returns all non-deleted regardless of status)
|
||||
if 'GetAllFields' not in l:
|
||||
# Add after GetFields function ends
|
||||
marker = 'return fields, nil\n}\n\n// GetFieldMap 获取字段配置Map'
|
||||
add = '''return fields, nil
|
||||
}
|
||||
|
||||
// GetAllFields 获取报表全部字段(含 INACTIVE,不含已删除,用于编辑回显)
|
||||
func (l *ConfigLoader) GetAllFields(ctx context.Context, businessCode, reportCode string) ([]model.FieldConfig, error) {
|
||||
\tr, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT * FROM report_field_config WHERE business_code = $1 AND report_code = $2 AND deleted_at IS NULL ORDER BY sort_order ASC",
|
||||
\t\tbusinessCode, reportCode)
|
||||
\tif err != nil {
|
||||
\t\treturn nil, err
|
||||
\t}
|
||||
\tvar fields []model.FieldConfig
|
||||
\tfor _, record := range r {
|
||||
\t\tvar f model.FieldConfig
|
||||
\t\tif err := record.Struct(&f); err != nil {
|
||||
\t\t\treturn nil, err
|
||||
\t\t}
|
||||
\t\tif f.ValidAggregates == nil {
|
||||
\t\t\tf.ValidAggregates = []string{}
|
||||
\t\t}
|
||||
\t\tif f.FilterOperators == nil {
|
||||
\t\t\tf.FilterOperators = []string{"=", "!=", ">", "<", ">=", "<=", "IN", "LIKE", "BETWEEN"}
|
||||
\t\t}
|
||||
\t\tfields = append(fields, f)
|
||||
\t}
|
||||
\treturn fields, nil
|
||||
}
|
||||
|
||||
// GetFieldMap 获取字段配置Map'''
|
||||
l = l.replace(marker, add, 1)
|
||||
|
||||
# 6. Add paginated list methods
|
||||
# ListBusinesses
|
||||
if 'ListBusinesses' not in l:
|
||||
add = '''// ListBusinesses 分页获取业务列表
|
||||
func (l *ConfigLoader) ListBusinesses(ctx context.Context, pageNum, pageSize int) ([]model.BusinessConfig, int, error) {
|
||||
\ttotal, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT COUNT(*) AS cnt FROM report_business_config WHERE deleted_at IS NULL")
|
||||
\tif err != nil {
|
||||
\t\treturn nil, 0, err
|
||||
\t}
|
||||
\tcount := 0
|
||||
\tif !total.IsEmpty() {
|
||||
\t\tcount = total[0]["cnt"].Int()
|
||||
\t}
|
||||
\toffset := (pageNum - 1) * pageSize
|
||||
\tr, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT * FROM report_business_config WHERE deleted_at IS NULL ORDER BY id ASC LIMIT $1 OFFSET $2",
|
||||
\t\tpageSize, offset)
|
||||
\tif err != nil {
|
||||
\t\treturn nil, 0, err
|
||||
\t}
|
||||
\tvar businesses []model.BusinessConfig
|
||||
\tfor _, record := range r {
|
||||
\t\tvar biz model.BusinessConfig
|
||||
\t\tif err := record.Struct(&biz); err != nil {
|
||||
\t\t\treturn nil, 0, err
|
||||
\t\t}
|
||||
\t\tbusinesses = append(businesses, biz)
|
||||
\t}
|
||||
\treturn businesses, count, nil
|
||||
}
|
||||
|
||||
// ListReports 分页获取报表列表
|
||||
func (l *ConfigLoader) ListReports(ctx context.Context, businessCode string, pageNum, pageSize int) ([]model.ReportConfig, int, error) {
|
||||
\ttotal, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT COUNT(*) AS cnt FROM report_report_config WHERE business_code = $1 AND deleted_at IS NULL",
|
||||
\t\tbusinessCode)
|
||||
\tif err != nil {
|
||||
\t\treturn nil, 0, err
|
||||
\t}
|
||||
\tcount := 0
|
||||
\tif !total.IsEmpty() {
|
||||
\t\tcount = total[0]["cnt"].Int()
|
||||
\t}
|
||||
\toffset := (pageNum - 1) * pageSize
|
||||
\tr, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT * FROM report_report_config WHERE business_code = $1 AND deleted_at IS NULL ORDER BY id ASC LIMIT $2 OFFSET $3",
|
||||
\t\tbusinessCode, pageSize, offset)
|
||||
\tif err != nil {
|
||||
\t\treturn nil, 0, err
|
||||
\t}
|
||||
\tvar reports []model.ReportConfig
|
||||
\tfor _, record := range r {
|
||||
\t\tvar rpt model.ReportConfig
|
||||
\t\tif err := record.Struct(&rpt); err != nil {
|
||||
\t\t\treturn nil, 0, err
|
||||
\t\t}
|
||||
\t\treports = append(reports, rpt)
|
||||
\t}
|
||||
\treturn reports, count, nil
|
||||
}
|
||||
|
||||
// ListExtractConfigs 分页获取抽取配置列表
|
||||
func (l *ConfigLoader) ListExtractConfigs(ctx context.Context, businessCode, reportCode string, pageNum, pageSize int) ([]model.ExtractConfig, int, error) {
|
||||
\ttotal, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT COUNT(*) AS cnt FROM report_extract_config WHERE business_code = $1 AND report_code = $2 AND deleted_at IS NULL",
|
||||
\t\tbusinessCode, reportCode)
|
||||
\tif err != nil {
|
||||
\t\treturn nil, 0, err
|
||||
\t}
|
||||
\tcount := 0
|
||||
\tif !total.IsEmpty() {
|
||||
\t\tcount = total[0]["cnt"].Int()
|
||||
\t}
|
||||
\toffset := (pageNum - 1) * pageSize
|
||||
\tr, err := gfdb.DB(ctx).GetAll(ctx,
|
||||
\t\t"SELECT * FROM report_extract_config WHERE business_code = $1 AND report_code = $2 AND deleted_at IS NULL ORDER BY id ASC LIMIT $3 OFFSET $4",
|
||||
\t\tbusinessCode, reportCode, pageSize, offset)
|
||||
\tif err != nil {
|
||||
\t\treturn nil, 0, err
|
||||
\t}
|
||||
\tvar configs []model.ExtractConfig
|
||||
\tfor _, record := range r {
|
||||
\t\tvar ec model.ExtractConfig
|
||||
\t\tif err := record.Struct(&ec); err != nil {
|
||||
\t\t\treturn nil, 0, err
|
||||
\t\t}
|
||||
\t\tconfigs = append(configs, ec)
|
||||
\t}
|
||||
\tl.mu.Lock()
|
||||
\tl.extractCache[businessCode+":"+reportCode] = configs
|
||||
\tl.mu.Unlock()
|
||||
\treturn configs, count, nil
|
||||
}
|
||||
'''
|
||||
# Insert before the "//" comment separator near the end
|
||||
marker2 = '\n// GetReportFields 获取报表可用字段(按角色分类)'
|
||||
if marker2 in l:
|
||||
l = l.replace(marker2, add + marker2, 1)
|
||||
else:
|
||||
l += add
|
||||
|
||||
with open(lp, 'w') as f:
|
||||
f.write(l)
|
||||
print('✅ Loader')
|
||||
|
||||
# ============= SERVICE (api.go) =============
|
||||
ap = '/Users/xujiaqian/GolandProjects/HDWL/data-engine/common/report/api.go'
|
||||
with open(ap) as f:
|
||||
a = f.read()
|
||||
|
||||
# Add ListBusinesses/ListReports/ListExtractConfigs service methods
|
||||
if 'func (s *ReportService) ListBusinesses' not in a:
|
||||
add_svc = '''
|
||||
// ListBusinesses 分页获取业务列表
|
||||
func (s *ReportService) ListBusinesses(ctx context.Context, pageNum, pageSize int) ([]model.BusinessConfig, int, error) {
|
||||
\treturn s.configLoader.ListBusinesses(ctx, pageNum, pageSize)
|
||||
}
|
||||
|
||||
// ListReports 分页获取报表列表
|
||||
func (s *ReportService) ListReports(ctx context.Context, businessCode string, pageNum, pageSize int) ([]model.ReportConfig, int, error) {
|
||||
\treturn s.configLoader.ListReports(ctx, businessCode, pageNum, pageSize)
|
||||
}
|
||||
|
||||
// ListExtractConfigs 分页获取抽取配置列表
|
||||
func (s *ReportService) ListExtractConfigs(ctx context.Context, businessCode, reportCode string, pageNum, pageSize int) ([]model.ExtractConfig, int, error) {
|
||||
\treturn s.configLoader.ListExtractConfigs(ctx, businessCode, reportCode, pageNum, pageSize)
|
||||
}
|
||||
'''
|
||||
# Insert after the service type definition
|
||||
a = a.replace(
|
||||
's.configLoader.GetAllBusinesses(ctx)\n}',
|
||||
's.configLoader.GetAllBusinesses(ctx)\n}' + add_svc
|
||||
)
|
||||
|
||||
with open(ap, 'w') as f:
|
||||
f.write(a)
|
||||
print('✅ Service')
|
||||
|
||||
# ============= CONTROLLER =============
|
||||
cp = '/Users/xujiaqian/GolandProjects/HDWL/data-engine/controller/report/report_controller.go'
|
||||
with open(cp) as f:
|
||||
c = f.read()
|
||||
|
||||
# Fix ListBusinesses handler
|
||||
c = c.replace(
|
||||
'list, err := svc().GetAllBusinesses(ctx)',
|
||||
'list, total, err := svc().ListBusinesses(ctx, req.PageNum, req.PageSize)'
|
||||
)
|
||||
c = c.replace(
|
||||
'return &listBusinessesRes{List: list}, nil',
|
||||
'totalPages := (total + req.PageSize - 1) / req.PageSize\n\t\treturn &listBusinessesRes{List: list, PageRes: model.PageRes{Total: total, Page: req.PageNum, PageSize: req.PageSize, TotalPages: totalPages}}, nil'
|
||||
)
|
||||
|
||||
# Fix ListReports handler
|
||||
c = c.replace(
|
||||
'list, err := svc().GetAllReports(ctx, req.BusinessCode)',
|
||||
'list, total, err := svc().ListReports(ctx, req.BusinessCode, req.PageNum, req.PageSize)'
|
||||
)
|
||||
c = c.replace(
|
||||
'return &listReportsRes{List: list}, nil',
|
||||
'totalPages := (total + req.PageSize - 1) / req.PageSize\n\t\treturn &listReportsRes{List: list, PageRes: model.PageRes{Total: total, Page: req.PageNum, PageSize: req.PageSize, TotalPages: totalPages}}, nil'
|
||||
)
|
||||
|
||||
# Fix GetExtractConfigs handler
|
||||
c = c.replace(
|
||||
'list, err := svc().GetExtractConfigs(ctx, req.BusinessCode, req.ReportCode)',
|
||||
'list, total, err := svc().ListExtractConfigs(ctx, req.BusinessCode, req.ReportCode, req.PageNum, req.PageSize)'
|
||||
)
|
||||
c = c.replace(
|
||||
'return &getExtractConfigsRes{List: list}, nil',
|
||||
'totalPages := (total + req.PageSize - 1) / req.PageSize\n\t\treturn &getExtractConfigsRes{List: list, PageRes: model.PageRes{Total: total, Page: req.PageNum, PageSize: req.PageSize, TotalPages: totalPages}}, nil'
|
||||
)
|
||||
|
||||
with open(cp, 'w') as f:
|
||||
f.write(c)
|
||||
print('✅ Controller')
|
||||
|
||||
print('\nAll done!')
|
||||
Reference in New Issue
Block a user