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 }