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 }