All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m26s
统一停复机规则转正的第一次发布:总开关仍关闭,现有停复机行为不变。 - 新增停复机规则演练:GET /stop-resume-rule/dry-run 按新规则对开机与停机卡只判断不执行,返回运营商账户 × 停机原因 × 判断结果汇总与分页明细,可假设通道实名管控配置;POST /stop-resume-rule/dry-run/export 导出明细(场景 stop_resume_rule_dry_run);仅超级管理员与平台账号 - 风险停机、已销户关闭轮询不再限于独立卡,只关该卡自身轮询,不级联设备 - 错误分类规则增加 auto_disable_polling,仅终态类别可勾选;停复机(含设备停复机)命中该规则时不重试、关闭该卡轮询、回写网关扩展状态并写审计 iot_card.terminal_disable_polling - 迁移 000250 加列与约束,并为"已销户""仅支持风险复机"置位
92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
package exporter
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
|
)
|
|
|
|
// Registry 导出数据源注册中心。
|
|
type Registry struct {
|
|
sources map[string]DataSource
|
|
}
|
|
|
|
// NewRegistry 创建导出数据源注册中心。
|
|
func NewRegistry(sources ...DataSource) *Registry {
|
|
m := make(map[string]DataSource, len(sources))
|
|
for _, source := range sources {
|
|
if source == nil {
|
|
continue
|
|
}
|
|
m[source.Scene()] = source
|
|
}
|
|
return &Registry{sources: m}
|
|
}
|
|
|
|
// NewDefaultRegistry 创建默认导出数据源注册中心。
|
|
func NewDefaultRegistry(db *gorm.DB) *Registry {
|
|
return NewRegistry(
|
|
NewDeviceDataSource(db),
|
|
NewIotCardDataSource(db),
|
|
NewOrderDataSource(db),
|
|
NewPackageDataSource(db),
|
|
NewAgentWalletTransactionDataSource(db),
|
|
NewAgentRechargeDataSource(db),
|
|
NewRefundDataSource(db),
|
|
NewExchangeDataSource(db),
|
|
NewCommissionRecordDataSource(db),
|
|
NewPackageTrafficAlertDataSource(db),
|
|
NewExpiringAssetDataSource(db),
|
|
NewOperationsActivationDataSource(db),
|
|
NewOperationsRenewalDataSource(db),
|
|
NewStopResumeRuleDataSource(db),
|
|
)
|
|
}
|
|
|
|
// Get 获取指定场景数据源。
|
|
func (r *Registry) Get(scene string) (DataSource, bool) {
|
|
source, ok := r.sources[scene]
|
|
return source, ok
|
|
}
|
|
|
|
// IsSupported 判断场景是否支持。
|
|
func (r *Registry) IsSupported(scene string) bool {
|
|
_, ok := r.sources[scene]
|
|
return ok
|
|
}
|
|
|
|
// Scenes 返回当前支持的场景列表。
|
|
func (r *Registry) Scenes() []string {
|
|
result := make([]string, 0, len(r.sources))
|
|
for scene := range r.sources {
|
|
result = append(result, scene)
|
|
}
|
|
sort.Strings(result)
|
|
return result
|
|
}
|
|
|
|
// IsSupportedScene 判断是否为受支持的场景。
|
|
func IsSupportedScene(scene string) bool {
|
|
switch scene {
|
|
case constants.ExportTaskSceneDevice,
|
|
constants.ExportTaskSceneIotCard,
|
|
constants.ExportTaskSceneOrder,
|
|
constants.ExportTaskScenePackage,
|
|
constants.ExportTaskSceneAgentWalletTransaction,
|
|
constants.ExportTaskSceneAgentRecharge,
|
|
constants.ExportTaskSceneRefund,
|
|
constants.ExportTaskSceneExchange,
|
|
constants.ExportTaskSceneCommissionRecord,
|
|
constants.ExportTaskScenePackageTrafficAlert,
|
|
constants.ExportTaskSceneExpiringAsset,
|
|
constants.ExportTaskSceneOperationsActivation,
|
|
constants.ExportTaskSceneOperationsRenewal,
|
|
constants.ExportTaskSceneStopResumeRuleDryRun:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|