增加气站历史账户显式修复与审计

This commit is contained in:
czl231
2026-08-17 22:34:02 +08:00
parent d6bb3bd43e
commit eef791427a
9 changed files with 354 additions and 4 deletions

View File

@@ -3,6 +3,8 @@ package main
import (
"encoding/json"
"errors"
"flag"
"fmt"
"io"
"os"
@@ -20,6 +22,7 @@ import (
gaslogic "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/gas"
"git.apinb.com/heqiapp/platforms/backend/api/internal/logic/platform"
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
"git.apinb.com/heqiapp/platforms/backend/api/internal/repair"
"git.apinb.com/heqiapp/platforms/backend/api/internal/routers"
"git.apinb.com/heqiapp/platforms/backend/api/internal/seed"
"github.com/gin-gonic/gin"
@@ -85,6 +88,11 @@ func main() {
os.Exit(1)
}
fmt.Printf("mock refund reviewers repaired: %d\n", count)
case "repair-legacy-gas-account":
if err := repairLegacyGasAccount(os.Args[2:], os.Stdout); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
case "migrate":
if err := migrateDatabase(); err != nil {
fmt.Fprintln(os.Stderr, err)
@@ -99,7 +107,7 @@ func main() {
}
func printUsage() {
fmt.Fprintln(os.Stderr, "usage: platform-cli <version|resource-contract|gas-resource-contract|delivery-resource-contract|migrate|mock-data|repair-mock-gasorder-status|repair-mock-ec-order|repair-mock-track-point|repair-mock-refund-reviewer>")
fmt.Fprintln(os.Stderr, "usage: platform-cli <version|resource-contract|gas-resource-contract|delivery-resource-contract|migrate|mock-data|repair-mock-gasorder-status|repair-mock-ec-order|repair-mock-track-point|repair-mock-refund-reviewer|repair-legacy-gas-account>")
}
type route struct {
@@ -293,6 +301,49 @@ func repairMockRefundReviewer() (int64, error) {
return count, nil
}
// repairLegacyGasAccount 显式修复唯一历史 010 气站账号,并将前后值写入操作审计表。
func repairLegacyGasAccount(arguments []string, output io.Writer) error {
flags := flag.NewFlagSet("repair-legacy-gas-account", flag.ContinueOnError)
flags.SetOutput(io.Discard)
operator := flags.String("operator", "", "执行修复的平台账户用户名")
displayName := flags.String("display-name", "", "修复后的显示名称")
dryRun := flags.Bool("dry-run", false, "只读核对目标,不执行修复")
if err := flags.Parse(arguments); err != nil {
return fmt.Errorf("parse repair arguments: %w", err)
}
if strings.TrimSpace(*operator) == "" || strings.TrimSpace(*displayName) == "" {
return errors.New("repair-legacy-gas-account requires --operator and --display-name")
}
config.New(serviceKey)
if config.Spec.Databases == nil {
return fmt.Errorf("database configuration is required")
}
databaseService, err := database.NewDatabase(
config.Spec.Databases.Driver,
config.Spec.Databases.Source,
dbsql.SetOptions(nil),
)
if err != nil {
return fmt.Errorf("connect database: %w", err)
}
if *dryRun {
result, err := repair.InspectLegacyGasAccount(databaseService, *operator, *displayName)
if err != nil {
return fmt.Errorf("inspect legacy gas account: %w", err)
}
return json.NewEncoder(output).Encode(result)
}
if err := databaseService.AutoMigrate(&models.AuditOperationLog{}); err != nil {
return fmt.Errorf("migrate operation audit table: %w", err)
}
result, err := repair.RepairLegacyGasAccount(databaseService, *operator, *displayName)
if err != nil {
return fmt.Errorf("repair legacy gas account: %w", err)
}
return json.NewEncoder(output).Encode(result)
}
func migrateDatabase() error {
config.New(serviceKey)
options := &types.SqlOptions{