chore: 并入 iotlcm-admin-svr 历史到 admin-svr/(原提交 49818c6)

This commit is contained in:
MiFaZhan
2026-11-02 13:27:59 +08:00
1250 changed files with 154111 additions and 0 deletions
@@ -0,0 +1,117 @@
package allocate
import (
"context"
"fmt"
"strings"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/consts"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/allocationunits"
"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/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
)
const (
importDir = "sim-card-allocate/import"
resultDir = "sim-card-allocate/result"
maxFileSize = 50 << 20
maxAllocateRows = 10000
)
type Processor struct{}
func NewProcessor() *Processor {
return &Processor{}
}
func (p *Processor) Config() batchimport.ProcessorConfig {
return batchimport.ProcessorConfig{
Code: "sim_card_allocate",
BatchType: consts.BatchTypeAllocate,
BatchNoPrefix: consts.BatchNoPrefixAllocate,
TaskName: "卡划拨结果",
ExportScene: consts.ResourceExportSceneAllocate,
ImportDir: importDir,
ResultDir: resultDir,
MaxFileSize: maxFileSize,
MaxRows: maxAllocateRows,
TemplateHeaders: []string{"ICCID", "MSISDN", "IMSI", "目标客户名称"},
RequiredHeaders: []string{"ICCID"},
}
}
func (p *Processor) ParseRows(ctx context.Context, filePath string) ([]batchimport.Row, error) {
return ParseExcelFileRows(ctx, filePath)
}
func (p *Processor) ValidateRows(_ context.Context, rows []batchimport.Row) error {
firstByIccid := make(map[string]*Row, len(rows))
for _, item := range rows {
row, ok := item.(*Row)
if !ok || row == nil {
continue
}
row.Iccid = strings.TrimSpace(row.Iccid)
row.Msisdn = strings.TrimSpace(row.Msisdn)
row.Imsi = strings.TrimSpace(row.Imsi)
row.TargetDeptKey = strings.TrimSpace(row.TargetDeptKey)
row.TargetDeptName = strings.TrimSpace(row.TargetDeptName)
row.Remark = strings.TrimSpace(row.Remark)
if row.Iccid == "" {
row.AddErrorReason("ICCID不能为空")
continue
}
if first, exists := firstByIccid[row.Iccid]; exists {
row.AddErrorReason(fmt.Sprintf("ICCID与第%d行重复", first.RowNo))
first.AddErrorReason("ICCID重复")
continue
}
firstByIccid[row.Iccid] = row
}
return nil
}
func (p *Processor) BuildBatchInfo(_ context.Context, req batchimport.SubmitRequest, result *batchimport.Result, importOss *model.SysOssSaveContentModel, resultOss *model.SysOssSaveContentModel, downloadId int64) *gjson.Json {
options := optionsFromParams(req.BizParams)
info := g.Map{
"operation": "sim_card_allocate",
"configName": "卡划拨",
"submitScene": submitScene(req.SourceType),
"targetDeptId": options.TargetDeptId,
"remark": strings.TrimSpace(options.Remark),
"resultFile": g.Map{"status": "pending"},
}
if result != nil && result.ImportFileOssId > 0 {
info["importFileOssId"] = result.ImportFileOssId
} else if importOss != nil && importOss.OssId > 0 {
info["importFileOssId"] = importOss.OssId
}
if resultOss != nil && resultOss.OssId > 0 {
info["resultFileOssId"] = resultOss.OssId
}
if downloadId > 0 {
info["resultDownloadId"] = downloadId
}
return allocationunits.Merge(gjson.New(info), options.Units)
}
func optionsFromParams(params any) SubmitOptions {
if options, ok := params.(*SubmitOptions); ok && options != nil {
return *options
}
return SubmitOptions{}
}
func submitScene(sourceType int) string {
switch sourceType {
case consts.BatchSourceTypeFile:
return "excel"
case consts.BatchSourceTypeBatchInput:
return "input"
default:
return ""
}
}