111 lines
3.4 KiB
Go
111 lines
3.4 KiB
Go
package service
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/csv"
|
|
"fmt"
|
|
"go-common/app/admin/main/laser/model"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
csvMetaNodes = []model.CsvMetaNode{
|
|
{Index: 0, Name: "日期", DataCode: 25},
|
|
{Index: 1, Name: "操作人", DataCode: 26},
|
|
{Index: 2, Name: "总操视频量", DataCode: model.TotalVideo},
|
|
{Index: 3, Name: "总操作次数", DataCode: model.TotalVideoOper},
|
|
{Index: 4, Name: "开放浏视频量", DataCode: model.OpenVideo},
|
|
{Index: 5, Name: "开放浏览操作次数", DataCode: model.OpenVideoOper},
|
|
{Index: 6, Name: "会员可视频量", DataCode: model.VipAccessVideo},
|
|
{Index: 7, Name: "会员可见操作次数", DataCode: model.VipAccessVideoOper},
|
|
{Index: 8, Name: "打视频量", DataCode: model.RejectVideo},
|
|
{Index: 9, Name: "打回操作次数", DataCode: model.RejectVideoOper},
|
|
{Index: 10, Name: "锁视频量", DataCode: model.LockVideo},
|
|
{Index: 11, Name: "锁定操作次数", DataCode: model.LockVideoOper},
|
|
{Index: 12, Name: "通过视频总时长", DataCode: model.PassVideoTotalDuration},
|
|
{Index: 13, Name: "未通过视频总时长", DataCode: model.FailVideoTotalDuration},
|
|
{Index: 14, Name: "视频提交到进入待审平均响应时间", DataCode: model.WaitAuditAvgTime},
|
|
{Index: 15, Name: "视频提交到进入待审时间", DataCode: model.WaitAuditDuration},
|
|
{Index: 16, Name: "视频提交到进入待审次数", DataCode: model.WaitAuditOper},
|
|
}
|
|
)
|
|
|
|
// FormatCSV format to csv data
|
|
func FormatCSV(records [][]string) (data []byte, err error) {
|
|
buf := new(bytes.Buffer)
|
|
|
|
// add utf bom
|
|
if len(records) > 0 {
|
|
buf.WriteString("\xEF\xBB\xBF")
|
|
}
|
|
|
|
w := csv.NewWriter(buf)
|
|
err = w.WriteAll(records)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
data = buf.Bytes()
|
|
return
|
|
}
|
|
|
|
func formatAuditCargo(wrappers []*model.CargoViewWrapper, lineWidth int) (data [][]string) {
|
|
size := len(wrappers)
|
|
if size <= 0 {
|
|
return
|
|
}
|
|
|
|
data = make([][]string, lineWidth+1)
|
|
index := 0
|
|
data[index] = []string{"username", "审核时间段", "接收量", "完成量"}
|
|
for _, v1 := range wrappers {
|
|
for k2, v2 := range v1.Data {
|
|
data[index+1] = []string{
|
|
v1.Username,
|
|
fmt.Sprintf("%s %d:00:00", v1.Date, k2),
|
|
strconv.FormatInt(v2.ReceiveValue, 10),
|
|
strconv.FormatInt(v2.AuditValue, 10),
|
|
}
|
|
index = index + 1
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func formatVideoAuditStat(statViewExts []*model.StatViewExt, lineWidth int) (data [][]string) {
|
|
if lineWidth <= 0 {
|
|
return
|
|
}
|
|
data = make([][]string, lineWidth+1)
|
|
index := 0
|
|
rowHeight := len(csvMetaNodes)
|
|
titles := make([]string, rowHeight)
|
|
cursorMap := make(map[int]int)
|
|
for _, v := range csvMetaNodes {
|
|
titles[v.Index] = v.Name
|
|
cursorMap[v.DataCode] = v.Index
|
|
}
|
|
data[index] = titles
|
|
for _, v1 := range statViewExts {
|
|
date := time.Unix(v1.Date, 0).Format("2006-01-02")
|
|
for _, v2 := range v1.Wraps {
|
|
name := v2.Uname
|
|
tempRows := make([]string, rowHeight)
|
|
tempRows = append([]string{date, name}, tempRows[0:]...)
|
|
for _, v3 := range v2.Stats {
|
|
if cursor, ok := cursorMap[v3.DataCode]; ok {
|
|
if v3.DataCode == model.WaitAuditAvgTime || v3.DataCode == model.WaitAuditDuration || v3.DataCode == model.PassVideoTotalDuration || v3.DataCode == model.FailVideoTotalDuration {
|
|
tempRows[cursor] = fmt.Sprintf("%d:%d:%d", v3.Value/3600, v3.Value%3600/60, v3.Value%3600%60/1)
|
|
} else {
|
|
tempRows[cursor] = strconv.FormatInt(v3.Value, 10)
|
|
}
|
|
}
|
|
}
|
|
data[index+1] = tempRows
|
|
index = index + 1
|
|
}
|
|
}
|
|
return
|
|
}
|