Files
nbi_alarm/core/utils/file.go
2023-08-24 22:08:26 +08:00

107 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}