diff --git a/core/utils/file.go b/core/utils/file.go new file mode 100644 index 0000000..3e45ae3 --- /dev/null +++ b/core/utils/file.go @@ -0,0 +1,106 @@ +package utils + +import ( + "archive/zip" + "encoding/json" + "fmt" + "io" + "omc/handle/model" + "os" +) + +//BJ/HX/RJ/OMC/FM/告警文件生成时间 +///FTP根目录/省份简称/专业简称/厂家编码/OMC名称/数据类别/日期或时间/ +//<省份简称>-<数据类别>-<网元类型>[-网元子类]-<主机编号>-<数据版本>-<数据时间>[-登录用户名][-同步请求标识][-Ri][-统计周期] [-序列号].<后缀> +//BJ-FM-OMC-主机编码-v0-告警文件生成时间-001.txt + +type FileMeta struct { + DirRoot string `json:"dir_root"` + Province string `json:"province"` //网元所在省份 + DeviceCode string `json:"device_code"` //主机编码 四位,每1位可用0-9、A-Z编码 + Index string `json:"index"` //文件标识 + Compress bool `json:"compress"` //文件是否压缩 + ReqId string `json:"req_id"` +} + +// func FileName(meta *FileMeta) string { +// reqIdStr := fmt.Sprintf("%03s", meta.ReqId) +// timeStr := time.Now().Format() +// fileName := strings.Join([]string{meta.Province, "FM", "OMC", meta.DeviceCode, "v0", meta.Time, meta.Index}, "-", reqIdStr) +// return strings.ToUpper(fileName) +// } + +func CreateFile(fileName string, data []model.OmcAlarm) error { + filePath := fileName + + // 创建或打开文件 + file, err := os.Create(filePath) + if err != nil { + return err + } + defer file.Close() + + // 遍历切片并将每个元素序列化为 JSON 字符串并写入文件 + for _, alarm := range data { + jsonData, err := json.Marshal(alarm) + if err != nil { + return err + } + + // 写入 JSON 字符串到文件,并换行 + _, err = file.WriteString(string(jsonData) + "\r\n") + if err != nil { + return err + } + } + return nil +} + +// 将文件添加到 ZIP 压缩文件 +func FileToZip(zipFileName, filePath string) error { + // 创建一个新的 ZIP 文件 + newZipFile, err := os.Create(zipFileName) + if err != nil { + return fmt.Errorf("创建 ZIP 文件失败: %w", err) + } + defer newZipFile.Close() + + // 创建 ZIP 写入器 + zipWriter := zip.NewWriter(newZipFile) + defer zipWriter.Close() + + fileToCompress, err := os.Open(filePath) + if err != nil { + return fmt.Errorf("打开文件失败: %w", err) + } + defer fileToCompress.Close() + + // 获取文件信息 + fileInfo, err := fileToCompress.Stat() + if err != nil { + return fmt.Errorf("获取文件信息失败: %w", err) + } + + // 创建文件头 + header, err := zip.FileInfoHeader(fileInfo) + if err != nil { + return fmt.Errorf("创建文件头失败: %w", err) + } + + // 设置文件头中的名称 + header.Name = fileInfo.Name() + + // 创建文件在 ZIP 中的写入器 + writer, err := zipWriter.CreateHeader(header) + if err != nil { + return fmt.Errorf("创建文件写入器失败: %w", err) + } + + // 将文件内容复制到 ZIP 文件中 + _, err = io.Copy(writer, fileToCompress) + if err != nil { + return fmt.Errorf("将文件内容复制到 ZIP 失败: %w", err) + } + + return nil +}