package renew import ( "context" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchimport" "git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/encoding/gjson" ) type ExcelProcessor struct { *Processor options *ExcelSubmitOptions } func NewExcelProcessor() *ExcelProcessor { return &ExcelProcessor{ Processor: NewProcessor(), } } // PrepareExcelProcessor parses the customer-facing Excel format but persists // an internal prepare batch. The worker performs the database validation before // the user can confirm the formal renew batch. type PrepareExcelProcessor struct { parser *ExcelProcessor prepare *PrepareProcessor } func NewPrepareExcelProcessor() *PrepareExcelProcessor { return &PrepareExcelProcessor{ parser: NewExcelProcessor(), prepare: NewPrepareProcessor(), } } func (p *ExcelProcessor) Config() batchimport.ProcessorConfig { cfg := p.Processor.Config() cfg.TemplateHeaders = ExcelTemplateHeaders() cfg.RequiredHeaders = []string{"ICCID"} return cfg } func (p *ExcelProcessor) ParseRows(ctx context.Context, filePath string) ([]batchimport.Row, error) { rows, options, err := ParseExcelFileRows(ctx, filePath) if err != nil { return nil, err } p.options = options out := make([]batchimport.Row, 0, len(rows)) for _, row := range rows { out = append(out, row) } return out, nil } func (p *ExcelProcessor) Execute(ctx context.Context, tx gdb.TX, req *batchimport.SubmitRequest, rows []batchimport.Row) error { return p.Processor.Execute(ctx, tx, req, rows) } func (p *ExcelProcessor) BuildBatchInfo(ctx context.Context, req batchimport.SubmitRequest, result *batchimport.Result, importOss *model.SysOssSaveContentModel, resultOss *model.SysOssSaveContentModel, downloadId int64) *gjson.Json { return p.Processor.BuildBatchInfo(ctx, req, result, importOss, resultOss, downloadId) } func (p *ExcelProcessor) ExcelSubmitOptions() *ExcelSubmitOptions { return p.options } func (p *PrepareExcelProcessor) Config() batchimport.ProcessorConfig { cfg := p.prepare.Config() cfg.TemplateHeaders = ExcelTemplateHeaders() cfg.RequiredHeaders = []string{"ICCID"} return cfg } func (p *PrepareExcelProcessor) ParseRows(ctx context.Context, filePath string) ([]batchimport.Row, error) { return p.parser.ParseRows(ctx, filePath) } func (p *PrepareExcelProcessor) ValidateRows(ctx context.Context, rows []batchimport.Row) error { // Keep submit non-blocking; the worker owns prepare validation. return nil } func (p *PrepareExcelProcessor) ExcelSubmitOptions() *ExcelSubmitOptions { return p.parser.ExcelSubmitOptions() } func (p *PrepareExcelProcessor) BuildBatchInfo( ctx context.Context, req batchimport.SubmitRequest, result *batchimport.Result, importOss *model.SysOssSaveContentModel, resultOss *model.SysOssSaveContentModel, downloadId int64, ) *gjson.Json { return p.prepare.BuildBatchInfo(ctx, req, result, importOss, resultOss, downloadId) }