69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
package file
|
||
|
||
import (
|
||
"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
|
||
}
|
||
return fileName, nil
|
||
}
|