Files
data-engine/syncdata/base_report_sync.go
2026-04-09 10:48:30 +08:00

80 lines
2.1 KiB
Go

package syncdata
import (
"context"
)
type ReportSyncable interface {
FetchReport(ctx context.Context, params interface{}) (interface{}, error)
ConvertToSum(apiData interface{}, dataType string) interface{}
ConvertToDetails(apiData interface{}, dataType string) []interface{}
SaveSum(ctx context.Context, data interface{}) (int64, error)
SaveDetails(ctx context.Context, data []interface{}) (successCount, failCount int64, err error)
}
type BaseReportSync struct {
httpClient *HttpClient
}
func NewBaseReportSync() *BaseReportSync {
return &BaseReportSync{
httpClient: NewHttpClient("", 0),
}
}
func (b *BaseReportSync) FetchReport(ctx context.Context, params interface{}) (interface{}, error) {
return nil, nil
}
func (b *BaseReportSync) ConvertToSum(apiData interface{}, dataType string) interface{} {
return nil
}
func (b *BaseReportSync) ConvertToDetails(apiData interface{}, dataType string) []interface{} {
return nil
}
func (b *BaseReportSync) SaveSum(ctx context.Context, data interface{}) (int64, error) {
return 0, nil
}
func (b *BaseReportSync) SaveDetails(ctx context.Context, data []interface{}) (int64, int64, error) {
return 0, 0, nil
}
func (b *BaseReportSync) ExecuteSync(ctx context.Context, syncer ReportSyncable, params interface{}, dataType string, useMock bool) (*SyncResult, error) {
result := &SyncResult{}
apiData, err := syncer.FetchReport(ctx, params)
if err != nil {
result.Error = err
return result, err
}
sumData := syncer.ConvertToSum(apiData, dataType)
if sumData != nil {
sumID, err := syncer.SaveSum(ctx, sumData)
if err != nil {
result.Error = err
return result, err
}
result.SumSuccess = true
result.SumID = sumID
}
detailData := syncer.ConvertToDetails(apiData, dataType)
if len(detailData) > 0 {
successCount, failCount, err := syncer.SaveDetails(ctx, detailData)
if err != nil {
result.Error = err
return result, err
}
result.DetailSuccess = true
result.DetailCount = len(detailData)
result.DetailSuccessCount = successCount
result.DetailFailCount = failCount
}
return result, nil
}