excel-export/pkg/func.go

124 lines
2.8 KiB
Go

package pkg
import (
"encoding/json"
"excel_export/biz/config"
"fmt"
"os"
"sort"
"strings"
"time"
)
func GetTaskId() string {
return fmt.Sprintf("%d", time.Now().UnixNano())
}
func HideStringMiddle(value string, front int, bak int) string {
if len(value) < front+bak {
return value
}
prefix := value[:front]
suffix := value[len(value)-bak:]
// 中间部分用*号替代
middle := strings.Repeat("*", len(value)-(front+bak))
// 拼接结果
return prefix + middle + suffix
}
func MergeMaps(m1, m2 map[string]string) map[string]string {
merged := make(map[string]string, len(m1)+len(m2))
// 复制 m1 到 merged
for k, v := range m1 {
merged[k] = v
}
// 将 m2 的键值对合并到 merged 中,如果键已存在则覆盖
for k, v := range m2 {
merged[k] = v
}
return merged
}
func SortFileWithModTime(dir string) []config.FileInfoWithModTime {
// 获取目录中的文件信息
d, _ := os.Open(dir)
defer d.Close()
files, _ := d.ReadDir(0)
var fileInfoList []config.FileInfoWithModTime
// 填充切片
for _, file := range files {
fileInfo, err := file.Info()
if err != nil {
fmt.Println("Error getting file info:", err)
continue
}
fileInfoList = append(fileInfoList, config.FileInfoWithModTime{FileInfo: fileInfo, ModTime: fileInfo.ModTime()})
}
// 根据修改时间对切片进行排序
sort.Slice(fileInfoList, func(i, j int) bool {
return fileInfoList[i].ModTime.After(fileInfoList[j].ModTime)
})
return fileInfoList
}
type OrderExportData struct {
FileName string `json:"file_name"`
Process int `json:"process"`
Status int8 `json:"status"`
Time string `json:"time"`
}
func SortFileWithStatus(dir string) []config.FileInfoStatus {
// 获取目录中的文件信息
d, _ := os.Open(dir)
defer d.Close()
files, _ := d.ReadDir(0)
var fileInfoList []config.FileInfoStatus
// 填充切片
for _, file := range files {
fileName := file.Name()
fileInfo, _ := file.Info()
bytes, _ := os.ReadFile(dir + "/" + fileName)
var info OrderExportData
_ = json.Unmarshal(bytes, &info)
times, _ := time.Parse(time.DateTime, info.Time)
fileInfoList = append(fileInfoList, config.FileInfoStatus{FileInfo: fileInfo, Status: info.Status, Time: times})
}
// 根据修改时间对切片进行排序
sort.Slice(fileInfoList, func(i, j int) bool {
return fileInfoList[i].Time.After(fileInfoList[j].Time)
})
return fileInfoList
}
// InterfaceSliceToStringSlice 将 []interface{} 转换为 []string
func InterfaceSliceToStringSlice(in []interface{}) ([]string, error) {
var out []string
for _, item := range in {
// 检查 item 是否为 string 类型
if str, ok := item.(string); ok {
out = append(out, str)
} else {
// 如果 item 不是 string 类型,则返回一个错误
return nil, fmt.Errorf("non-string value found in slice: %v", item)
}
}
return out, nil
}