modify scripts

This commit is contained in:
juzeon 2023-02-11 09:57:58 +08:00
父節點 fff1cb12ab
當前提交 122b26348f

查看文件

@ -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")