|
|
|
@@ -5,6 +5,8 @@ import ( |
|
|
|
"net/http" |
|
|
|
"net/url" |
|
|
|
"os" |
|
|
|
"strconv" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/models" |
|
|
|
@@ -847,3 +849,61 @@ func writeUserActivityToExcel(startTime time.Time, endTime time.Time, filePath s |
|
|
|
log.Info("write to file succeed, filepath=" + filePath) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// URL: /api/v1/query_user_login?userId=1,2,3,4 |
|
|
|
func QueryUserLoginInfo(ctx *context.Context) { |
|
|
|
userId := ctx.Query("userId") |
|
|
|
userIds := strings.Split(userId, ",") |
|
|
|
userIdInt := make([]int64, 0) |
|
|
|
for _, id := range userIds { |
|
|
|
idInt, err := strconv.ParseInt(id, 10, 64) |
|
|
|
if err == nil { |
|
|
|
userIdInt = append(userIdInt, idInt) |
|
|
|
} |
|
|
|
} |
|
|
|
result := models.QueryUserLoginInfo(userIdInt) |
|
|
|
|
|
|
|
xlsx := excelize.NewFile() |
|
|
|
sheetName := ctx.Tr("用户登录信息") |
|
|
|
index := xlsx.NewSheet(sheetName) |
|
|
|
xlsx.DeleteSheet("Sheet1") |
|
|
|
|
|
|
|
excelHeader := make([]string, 0) |
|
|
|
excelHeader = append(excelHeader, "用户ID") |
|
|
|
excelHeader = append(excelHeader, "登录IP") |
|
|
|
excelHeader = append(excelHeader, "登录时间") |
|
|
|
|
|
|
|
excelHeaderMap := make(map[string]string, 0) |
|
|
|
var j byte |
|
|
|
j = 0 |
|
|
|
for _, value := range excelHeader { |
|
|
|
excelColumn := getColumn(j) + fmt.Sprint(1) |
|
|
|
log.Info("excelColumn=" + excelColumn) |
|
|
|
excelHeaderMap[excelColumn] = value |
|
|
|
j++ |
|
|
|
} |
|
|
|
for k, v := range excelHeaderMap { |
|
|
|
//设置单元格的值 |
|
|
|
xlsx.SetCellValue(sheetName, k, v) |
|
|
|
} |
|
|
|
for i, userLogin := range result { |
|
|
|
row := i + 2 |
|
|
|
rows := fmt.Sprint(row) |
|
|
|
var tmp byte |
|
|
|
tmp = 0 |
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, userLogin.UId) |
|
|
|
tmp = tmp + 1 |
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, userLogin.IpAddr) |
|
|
|
tmp = tmp + 1 |
|
|
|
formatTime := userLogin.CreatedUnix.Format("2006-01-02 15:04:05") |
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, formatTime[0:len(formatTime)-3]) |
|
|
|
} |
|
|
|
//设置默认打开的表单 |
|
|
|
xlsx.SetActiveSheet(index) |
|
|
|
filename := sheetName + "_" + time.Now().Format("2006-01-02 15:04:05") + ".xlsx" |
|
|
|
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(filename)) |
|
|
|
ctx.Resp.Header().Set("Content-Type", "application/octet-stream") |
|
|
|
if _, err := xlsx.WriteTo(ctx.Resp); err != nil { |
|
|
|
log.Info("writer exel error." + err.Error()) |
|
|
|
} |
|
|
|
} |