139 行
3.9 KiB
Go
139 行
3.9 KiB
Go
package main
|
|
|
|
import (
|
|
"integrity-checkin/dao"
|
|
"integrity-checkin/data/po"
|
|
"io"
|
|
"os"
|
|
"sort"
|
|
"strconv"
|
|
)
|
|
|
|
type UserActivityWithRealName struct {
|
|
RealName string `json:"real_name"`
|
|
Username string `json:"username"`
|
|
ActivityName string `json:"activity_name"`
|
|
po.UserActivity
|
|
}
|
|
|
|
func main() {
|
|
dao.Setup()
|
|
UserActivity()
|
|
}
|
|
func UserActivity() {
|
|
var userActivities []UserActivityWithRealName
|
|
err := dao.DB.Raw("select u.real_name,u.username,a.name activity_name,ua.* from user_activity ua " +
|
|
" left join users u on u.id=ua.user_id " +
|
|
" left join activities a on a.id=ua.activity_id where u.type=1 and ua.credit!=0").Find(&userActivities).Error
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
f, err := os.OpenFile("out.csv", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
io.WriteString(f, "姓名,学号,日期,活动,图片\n")
|
|
for _, userActivity := range userActivities {
|
|
io.WriteString(f, userActivity.RealName+","+userActivity.Username+","+
|
|
userActivity.Day+","+userActivity.ActivityName+","+userActivity.Files+"\n")
|
|
}
|
|
}
|
|
func Student() {
|
|
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=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.Username] == nil {
|
|
teacherDays[userActivity.Username] = map[string]struct{}{}
|
|
username2realName[userActivity.Username] = userActivity.RealName
|
|
}
|
|
teacherDays[userActivity.Username][userActivity.Day] = struct{}{}
|
|
}
|
|
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, 0644)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
io.WriteString(f, "姓名,工号")
|
|
for _, day := range daysArr {
|
|
io.WriteString(f, ","+day)
|
|
}
|
|
io.WriteString(f, "\n")
|
|
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")
|
|
} else {
|
|
io.WriteString(f, ",0")
|
|
}
|
|
}
|
|
io.WriteString(f, "\n")
|
|
}
|
|
}
|