124 lines
2.8 KiB
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
|
|
}
|