|
|
|
@@ -4,6 +4,8 @@ import ( |
|
|
|
"fmt" |
|
|
|
"net/http" |
|
|
|
"net/url" |
|
|
|
"sort" |
|
|
|
"time" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/models" |
|
|
|
"code.gitea.io/gitea/modules/context" |
|
|
|
@@ -123,6 +125,9 @@ func DownloadInvitationDetail(ctx *context.Context) { |
|
|
|
for _, userRecord := range re { |
|
|
|
row++ |
|
|
|
userRecord.Name = userNameMap[userRecord.UserID] |
|
|
|
if userRecord.Name == "" { |
|
|
|
userRecord.Name = "已注销" |
|
|
|
} |
|
|
|
writeInvitationDetailExcel(row, xlsx, sheetName, userRecord) |
|
|
|
} |
|
|
|
indexTotal += PAGE_SIZE |
|
|
|
@@ -271,14 +276,156 @@ func QueryInvitationAll(ctx *context.Context) { |
|
|
|
queryDataFromStaticTable(ctx, "public.user_business_analysis_all", new(models.UserBusinessAnalysisAll)) |
|
|
|
} |
|
|
|
|
|
|
|
// func queryData(ctx *context.Context, startTime int64, endTime int64) { |
|
|
|
// page, pageSize := getPageInfo(ctx) |
|
|
|
// result, count := models.QueryInvitaionPage(startTime, endTime, (page-1)*pageSize, pageSize) |
|
|
|
// mapInterface := make(map[string]interface{}) |
|
|
|
// mapInterface["data"] = result |
|
|
|
// mapInterface["count"] = count |
|
|
|
// ctx.JSON(http.StatusOK, mapInterface) |
|
|
|
// } |
|
|
|
func QueryUserDefineInvitationPage(ctx *context.Context) { |
|
|
|
startDate := ctx.Query("startDate") |
|
|
|
endDate := ctx.Query("endDate") |
|
|
|
startTime, _ := time.ParseInLocation("2006-01-02", startDate, time.Local) |
|
|
|
//startTime = startTime.UTC() |
|
|
|
endTime, _ := time.ParseInLocation("2006-01-02", endDate, time.Local) |
|
|
|
|
|
|
|
queryData(ctx, startTime, endTime) |
|
|
|
} |
|
|
|
|
|
|
|
func queryData(ctx *context.Context, startTime time.Time, endTime time.Time) { |
|
|
|
page, pageSize := getPageInfo(ctx) |
|
|
|
IsReturnFile := ctx.QueryBool("IsReturnFile") |
|
|
|
|
|
|
|
dbResult := models.QueryInvitaionByTime(startTime.Unix(), endTime.Unix()) |
|
|
|
|
|
|
|
invitaionNumMap := make(map[int64]int, 0) |
|
|
|
allUserIds := make([]int64, 0) |
|
|
|
for _, record := range dbResult { |
|
|
|
if _, ok := invitaionNumMap[record.SrcUserID]; !ok { |
|
|
|
invitaionNumMap[record.SrcUserID] = 1 |
|
|
|
} else { |
|
|
|
invitaionNumMap[record.SrcUserID] = invitaionNumMap[record.SrcUserID] + 1 |
|
|
|
} |
|
|
|
} |
|
|
|
invitaionNumList := make([]models.Invitation, 0) |
|
|
|
for key, value := range invitaionNumMap { |
|
|
|
invi := models.Invitation{ |
|
|
|
SrcUserID: key, |
|
|
|
InvitationUserNum: value, |
|
|
|
} |
|
|
|
invitaionNumList = append(invitaionNumList, invi) |
|
|
|
allUserIds = append(allUserIds, key) |
|
|
|
} |
|
|
|
sort.Slice(invitaionNumList, func(i, j int) bool { |
|
|
|
return invitaionNumList[i].InvitationUserNum > invitaionNumList[j].InvitationUserNum |
|
|
|
}) |
|
|
|
if IsReturnFile { |
|
|
|
xlsx := excelize.NewFile() |
|
|
|
sheetName := ctx.Tr("user.static.invitationsheetname") |
|
|
|
index := xlsx.NewSheet(sheetName) |
|
|
|
xlsx.DeleteSheet("Sheet1") |
|
|
|
excelHeader := getInvitationExcelHeader(ctx) |
|
|
|
for k, v := range excelHeader { |
|
|
|
//设置单元格的值 |
|
|
|
xlsx.SetCellValue(sheetName, k, v) |
|
|
|
} |
|
|
|
end := 100 |
|
|
|
userMap := make(map[int64]*models.User, 0) |
|
|
|
log.Info("len(allUserIds)=" + fmt.Sprint(len(allUserIds))) |
|
|
|
for i := 0; i < len(allUserIds); i += 100 { |
|
|
|
if end >= len(allUserIds) { |
|
|
|
end = len(allUserIds) |
|
|
|
} |
|
|
|
log.Info("i=" + fmt.Sprint(i) + " end=" + fmt.Sprint(end)) |
|
|
|
if i == end { |
|
|
|
break |
|
|
|
} |
|
|
|
userList, err := models.GetUsersByIDs(allUserIds[i:end]) |
|
|
|
if err == nil { |
|
|
|
for _, tmp := range userList { |
|
|
|
userMap[tmp.ID] = tmp |
|
|
|
} |
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
end = end + 100 |
|
|
|
} |
|
|
|
row := 1 |
|
|
|
log.Info("len(userMap)=" + fmt.Sprint(len(userMap))) |
|
|
|
for _, userRecord := range invitaionNumList { |
|
|
|
row++ |
|
|
|
rows := fmt.Sprint(row) |
|
|
|
var tmp byte |
|
|
|
tmp = 0 |
|
|
|
|
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, userRecord.SrcUserID) |
|
|
|
tmp = tmp + 1 |
|
|
|
name := "已注销" |
|
|
|
if userMap[userRecord.SrcUserID] != nil { |
|
|
|
name = userMap[userRecord.SrcUserID].Name |
|
|
|
} |
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, name) |
|
|
|
tmp = tmp + 1 |
|
|
|
|
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, userRecord.InvitationUserNum) |
|
|
|
tmp = tmp + 1 |
|
|
|
Phone := "" |
|
|
|
if userMap[userRecord.SrcUserID] != nil { |
|
|
|
Phone = userMap[userRecord.SrcUserID].PhoneNumber |
|
|
|
} |
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, Phone) |
|
|
|
tmp = tmp + 1 |
|
|
|
|
|
|
|
formatTime := "" |
|
|
|
if userMap[userRecord.SrcUserID] != nil { |
|
|
|
formatTime = userMap[userRecord.SrcUserID].CreatedUnix.Format("2006-01-02 15:04:05") |
|
|
|
formatTime = formatTime[0 : len(formatTime)-3] |
|
|
|
} |
|
|
|
xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, formatTime) |
|
|
|
} |
|
|
|
//设置默认打开的表单 |
|
|
|
xlsx.SetActiveSheet(index) |
|
|
|
filename := sheetName + "_" + getTimeFileName(startTime) + "_" + getTimeFileName(endTime) + ".xlsx" |
|
|
|
//filename := sheetName + "_" + ctx.Tr("user.static."+tableName) + ".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()) |
|
|
|
} |
|
|
|
} else { |
|
|
|
result := make([]*models.Invitation, 0) |
|
|
|
userIds := make([]int64, 0) |
|
|
|
end := len(invitaionNumList) - 1 |
|
|
|
for start := (page - 1) * pageSize; start <= end; start++ { |
|
|
|
invi := invitaionNumList[start] |
|
|
|
//todo name phone,createunix |
|
|
|
result = append(result, &invi) |
|
|
|
userIds = append(userIds, invi.SrcUserID) |
|
|
|
if len(result) == pageSize { |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
userList, err := models.GetUsersByIDs(userIds) |
|
|
|
if err == nil { |
|
|
|
for _, invi := range result { |
|
|
|
tmpUser := userList[0] |
|
|
|
for _, tmp := range userList { |
|
|
|
if tmp.ID == invi.SrcUserID { |
|
|
|
tmpUser = tmp |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
if invi.SrcUserID == tmpUser.ID { |
|
|
|
invi.Name = tmpUser.Name |
|
|
|
invi.Phone = tmpUser.PhoneNumber |
|
|
|
invi.CreatedUnix = tmpUser.CreatedUnix |
|
|
|
} else { |
|
|
|
invi.Name = "已注销" |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
log.Info("query user error." + err.Error()) |
|
|
|
} |
|
|
|
mapInterface := make(map[string]interface{}) |
|
|
|
mapInterface["data"] = result |
|
|
|
mapInterface["count"] = len(invitaionNumList) |
|
|
|
ctx.JSON(http.StatusOK, mapInterface) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func getPageInfo(ctx *context.Context) (int, int) { |
|
|
|
page := ctx.QueryInt("page") |
|
|
|
|