package services import ( "context" "fmt" "fwh-toolbox-server/domain" "fwh-toolbox-server/dto" "fwh-toolbox-server/repositories" "fwh-toolbox-server/taskQueue" "fwh-toolbox-server/utils/global" "strconv" "time" "github.com/xuri/excelize/v2" "go.uber.org/zap" ) // 获取更新状态 func GetSiteInfoUpdateStatus() (*domain.SiteInfoUpdateRecord, error) { return repositories.GetSiteInfoUpdateNewRecord() } // 请求更新站点信息表 func UpdateSiteInfoDate() error { id, err := repositories.CreateSiteInfoUpdateInfo() if err != nil { return err } if err := taskQueue.EnqueueSiteInfoUpdateTask(domain.TaskSiteInfoUpdate{ Id: *id, }); err != nil { return err } return nil } // 获取站点信息表 func QuerySiteInfoDataList(para dto.SiteInfoRequest) (*dto.ResPage[dto.SiteInfoDTO], error) { res, err := repositories.GetSiteInfoManageList(para.PageNum, para.PageSize, para.Filter, para.Search) if err != nil { return nil, err } result := dto.ResPage[dto.SiteInfoDTO]{ Data: []dto.SiteInfoDTO{}, PageSize: res.PageSize, PageNum: res.PageNum, Total: res.Total, } for _, d := range res.Data { result.Data = append(result.Data, *dto.SiteInfoDomainToSiteInfoDTO(&d)) } return &result, nil } // 导出站点信息表 func ExportSiteInfoDataList(filer *domain.SiteInfoFilter) (*excelize.File, error) { res, err := repositories.GetSiteInfoManageList(0, 0, filer, "") if err != nil { return nil, err } record, err := repositories.GetSiteInfoUpdateNewRecord() if err != nil { return nil, err } // 创建新的excel文件 f := excelize.NewFile() // 写标题行 f.SetCellValue("Sheet1", "A1", "SN") f.SetCellValue("Sheet1", "B1", "Installer") f.SetCellValue("Sheet1", "C1", "ActiveTime") f.SetCellValue("Sheet1", "D1", "Status") f.SetCellValue("Sheet1", "E1", "OnLineTime") f.SetCellValue("Sheet1", "F1", "OffLineTime") f.SetCellValue("Sheet1", "G1", "FhpSn") f.SetCellValue("Sheet1", "H1", "Version") f.SetCellValue("Sheet1", "I1", "SlVersion") f.SetCellValue("Sheet1", "J1", "SlVersionJson") f.SetCellValue("Sheet1", "K1", "MeterVersion") f.SetCellValue("Sheet1", "L1", "MbVersion") f.SetCellValue("Sheet1", "M1", "AwsVersion") f.SetCellValue("Sheet1", "N1", "AppVersion") f.SetCellValue("Sheet1", "O1", "ProtocolVer") f.SetCellValue("Sheet1", "P1", "SysHdVersion") f.SetCellValue("Sheet1", "Q1", "Remark") f.SetCellValue("Sheet1", "R1", "Country") f.SetCellValue("Sheet1", "S1", "Province") f.SetCellValue("Sheet1", "T1", "ManufactureDate") f.SetCellValue("Sheet1", "U1", "HardwareVersion") f.SetCellValue("Sheet1", "V1", "CveStatus") f.SetCellValue("Sheet1", "W1", "SecurityPatchLevel") f.SetCellValue("Sheet1", "X1", "TargetVersion") f.SetCellValue("Sheet1", "Y1", "LastUpgradeTime") f.SetCellValue("Sheet1", "Z1", "UpgradeStatus") f.SetCellValue("Sheet1", "AA1", "Owner/Maintainer") f.SetCellValue("Sheet1", "AB1", "DataSource") f.SetCellValue("Sheet1", "AC1", "LastUpdated") // 写入数据 for i, d := range res.Data { f.SetCellValue("Sheet1", "A"+strconv.Itoa(i+2), d.Sn) f.SetCellValue("Sheet1", "B"+strconv.Itoa(i+2), global.Deref(d.InstallerName, "")) f.SetCellValue("Sheet1", "C"+strconv.Itoa(i+2), d.ActiveTime) f.SetCellValue("Sheet1", "D"+strconv.Itoa(i+2), d.Status) f.SetCellValue("Sheet1", "E"+strconv.Itoa(i+2), global.Deref(d.OnLineTime, "")) f.SetCellValue("Sheet1", "F"+strconv.Itoa(i+2), global.Deref(d.OffLineTime, "")) f.SetCellValue("Sheet1", "G"+strconv.Itoa(i+2), d.FhpSn) f.SetCellValue("Sheet1", "H"+strconv.Itoa(i+2), d.Version) f.SetCellValue("Sheet1", "I"+strconv.Itoa(i+2), d.SlVersion) f.SetCellValue("Sheet1", "J"+strconv.Itoa(i+2), d.SlVersionJson) f.SetCellValue("Sheet1", "K"+strconv.Itoa(i+2), global.Deref(d.MeterVersion, "")) f.SetCellValue("Sheet1", "L"+strconv.Itoa(i+2), global.Deref(d.MbVersion, "")) f.SetCellValue("Sheet1", "M"+strconv.Itoa(i+2), global.Deref(d.AwsVersion, "")) f.SetCellValue("Sheet1", "N"+strconv.Itoa(i+2), global.Deref(d.AppVersion, "")) f.SetCellValue("Sheet1", "O"+strconv.Itoa(i+2), d.ProtocolVer) f.SetCellValue("Sheet1", "P"+strconv.Itoa(i+2), d.SysHdVersion) f.SetCellValue("Sheet1", "Q"+strconv.Itoa(i+2), global.Deref(d.Remark, "")) f.SetCellValue("Sheet1", "R"+strconv.Itoa(i+2), d.Country) f.SetCellValue("Sheet1", "S"+strconv.Itoa(i+2), d.Province) var manufactureDate string = "" if len(d.Sn) > 9 { year := d.Sn[len(d.Sn)-8 : len(d.Sn)-6] week := d.Sn[len(d.Sn)-6 : len(d.Sn)-4] manufactureDate = fmt.Sprintf("%s年%s周", year, week) } f.SetCellValue("Sheet1", "T"+strconv.Itoa(i+2), manufactureDate) f.SetCellValue("Sheet1", "U"+strconv.Itoa(i+2), "V"+strconv.Itoa(d.SysHdVersion)) f.SetCellValue("Sheet1", "V"+strconv.Itoa(i+2), "无") f.SetCellValue("Sheet1", "W"+strconv.Itoa(i+2), "安全") f.SetCellValue("Sheet1", "X"+strconv.Itoa(i+2), d.Version) f.SetCellValue("Sheet1", "Y"+strconv.Itoa(i+2), global.Deref(d.FirmUpgradeTime, "")) f.SetCellValue("Sheet1", "Z"+strconv.Itoa(i+2), "成功") f.SetCellValue("Sheet1", "AA"+strconv.Itoa(i+2), "Jerry Liang/LMT") f.SetCellValue("Sheet1", "AB"+strconv.Itoa(i+2), "Fleetview") f.SetCellValue("Sheet1", "AC"+strconv.Itoa(i+2), record.UpdateTime.Format(time.DateTime)) } return f, err } // 查询单个站点实时信息(同时更新单个站点数据) func GetSiteInfoData(sn string) (*dto.SiteInfoDTO, error) { res, err := repositories.QuerySiteInfoList(dto.SiteInfoPara{ SN: &sn, PageSize: 10, PageNum: 1, }) if err != nil { return nil, err } if res.Result == nil { return nil, fmt.Errorf("code: %s, msg: %s", strconv.Itoa(res.Code), res.Message) } if len(*res.Result) == 0 { return nil, fmt.Errorf("code: %s, msg: %s", strconv.Itoa(res.Code), res.Message) } domainData := domain.FwhSiteInfoToSiteInfoDomain(&(*res.Result)[0]) // 数据插入数据库 if err := repositories.InsertSiteInfoData(*domainData); err != nil { zap.L().Error("保存站点信息失败", zap.String("err", err.Error()), zap.String("sn", sn)) } dtoData := dto.SiteInfoDomainToSiteInfoDTO(domainData) return dtoData, nil } // 使能站点xlog func OperateSiteInfoEnableXlog(ctx context.Context, sn string) (string, error) { return repositories.FwhMqttEnableXlog(ctx, sn) }