Files
nbi_alarm/lib/file.go
2023-08-21 11:00:22 +08:00

82 lines
2.1 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 lib
import (
"archive/zip"
"os"
"strings"
)
//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编码
Time string `json:"time"` //文件生成时间
Index string `json:"index"` //文件标识
Compress bool `json:"compress"` //文件是否压缩
ReqId string `json:"req_id"`
}
// HasDir 判断文件夹是否存在
func HasDir(path string) (bool, error) {
_, _err := os.Stat(path)
if _err == nil {
return true, nil
}
if os.IsNotExist(_err) {
return false, nil
}
return false, _err
}
func CreateDir(meta *FileMeta) (string, error) {
dir := strings.Join([]string{meta.DirRoot, meta.Province, "HX", "RJ", "OMC", "FM", meta.Time}, "/")
exist, err := HasDir(dir)
if err != nil {
return "", err
}
if !exist {
err := os.MkdirAll(dir, os.ModePerm)
if err != nil {
return "", err
}
}
return dir, err
}
func GetName(meta *FileMeta) string {
fileName := strings.Join([]string{meta.Province, "FM", "OMC", meta.DeviceCode, "v0", meta.Time, meta.Index}, "-")
return strings.ToUpper(fileName)
}
func GenFile(meta *FileMeta, content []byte) (string, error) {
// 创建文件夹
dir, err := CreateDir(meta)
if err != nil {
return "", err
}
//创建文件
fileName := dir + "/" + GetName(meta) + ".txt"
err = os.WriteFile(fileName, content, 0666)
if err != nil {
return "", err
}
// 创建一个新的ZIP文件
fileName = fileName + ".zip"
zipFile, err := os.Create(fileName)
if err != nil {
return "", err
}
defer zipFile.Close()
// 创建一个ZIP写入器
zipWriter := zip.NewWriter(zipFile)
defer zipWriter.Close()
return fileName, nil
}