From 122b26348f47b69c59e06547652e6ef7c99023e5 Mon Sep 17 00:00:00 2001 From: juzeon <812312770@qq.com> Date: Sat, 11 Feb 2023 09:57:58 +0800 Subject: [PATCH] modify scripts --- script/main.go | 71 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 7 deletions(-) diff --git a/script/main.go b/script/main.go index 1ef9d18..6e3694e 100644 --- a/script/main.go +++ b/script/main.go @@ -6,31 +6,87 @@ import ( "io" "os" "sort" + "strconv" ) type UserActivityWithRealName struct { RealName string `json:"real_name"` + Username string `json:"username"` po.UserActivity } func main() { dao.Setup() + Student() +} +func Student() { var userActivities []UserActivityWithRealName - err := dao.DB.Raw("select u.real_name,ua.* from user_activity ua " + + err := dao.DB.Raw("select u.real_name,u.username,ua.* from user_activity ua " + + " left join users u on u.id=ua.user_id where u.type=1").Find(&userActivities).Error + if err != nil { + panic(err) + } + days := map[string]struct{}{} + studentDays := map[string]map[string]int{} + username2realName := map[string]string{} + for _, userActivity := range userActivities { + if _, ok := days[userActivity.Day]; !ok { + days[userActivity.Day] = struct{}{} + } + if studentDays[userActivity.Username] == nil { + studentDays[userActivity.Username] = map[string]int{} + username2realName[userActivity.Username] = userActivity.RealName + } + studentDays[userActivity.Username][userActivity.Day] += userActivity.Credit + } + var daysArr []string + for day := range days { + daysArr = append(daysArr, day) + } + sort.Slice(daysArr, func(i, j int) bool { + return daysArr[i] < daysArr[j] + }) + f, err := os.OpenFile("out.csv", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + panic(err) + } + io.WriteString(f, "姓名,学号") + for _, day := range daysArr { + io.WriteString(f, ","+day) + } + io.WriteString(f, "\n") + for username, studentMap := range studentDays { + io.WriteString(f, username2realName[username]+",") + io.WriteString(f, username) + for _, day := range daysArr { + if credit, ok := studentMap[day]; ok { + io.WriteString(f, ","+strconv.Itoa(credit)) + } else { + io.WriteString(f, ",0") + } + } + io.WriteString(f, "\n") + } +} +func Teacher() { + var userActivities []UserActivityWithRealName + err := dao.DB.Raw("select u.real_name,u.username,ua.* from user_activity ua " + " left join users u on u.id=ua.user_id where u.type=2").Find(&userActivities).Error if err != nil { panic(err) } days := map[string]struct{}{} teacherDays := map[string]map[string]struct{}{} + username2realName := map[string]string{} for _, userActivity := range userActivities { if _, ok := days[userActivity.Day]; !ok { days[userActivity.Day] = struct{}{} } - if teacherDays[userActivity.RealName] == nil { - teacherDays[userActivity.RealName] = map[string]struct{}{} + if teacherDays[userActivity.Username] == nil { + teacherDays[userActivity.Username] = map[string]struct{}{} + username2realName[userActivity.Username] = userActivity.RealName } - teacherDays[userActivity.RealName][userActivity.Day] = struct{}{} + teacherDays[userActivity.Username][userActivity.Day] = struct{}{} } var daysArr []string for day := range days { @@ -43,13 +99,14 @@ func main() { if err != nil { panic(err) } - io.WriteString(f, "姓名") + io.WriteString(f, "姓名,工号") for _, day := range daysArr { io.WriteString(f, ","+day) } io.WriteString(f, "\n") - for teacherName, teacherMap := range teacherDays { - io.WriteString(f, teacherName) + for username, teacherMap := range teacherDays { + io.WriteString(f, username2realName[username]+",") + io.WriteString(f, username) for _, day := range daysArr { if _, ok := teacherMap[day]; ok { io.WriteString(f, ",1")