goweb-gin-demo/service/wt/wt_output.go

142 lines
3.7 KiB
Go

package wt
import (
"errors"
"fmt"
"github.com/xuri/excelize/v2"
"goweb-gin-demo/model/common"
"goweb-gin-demo/model/common/request"
"goweb-gin-demo/model/wt"
wtReq "goweb-gin-demo/model/wt/request"
wtRes "goweb-gin-demo/model/wt/response"
"goweb-gin-demo/utils"
"jaytaylor.com/html2text"
)
type WtOutputService struct {
}
// GetWtRule 根据id获取WtRule记录
func (wtOutputService *WtOutputService) GetStatResult(idInfo request.GetByUserID) (err error, wtRule wtRes.StatResult) {
//首先查询要统计的人
ruleInfo := wtReq.WtRuleSearch{}
ruleInfo.UserId = int(idInfo.UserId)
var WtServiceGroup WtServiceGroup
err, wtRuleResultList, _ := WtServiceGroup.WtRuleService.GetWtRuleInfoList(ruleInfo)
if err != nil {
return err, wtRes.StatResult{}
}
wtRuleResult := wtRuleResultList[0]
//计算起始时间 起始时间是 5-0900 7-1000
startTime := utils.GetTimeFromWeek(wtRuleResult.StartWeek, wtRuleResult.StartHour)
endTime := utils.GetTimeFromWeek(wtRuleResult.EndWeek, wtRuleResult.EndHour)
//在周报表中进行统计
reports := wtRuleResult.Reporters
var reportSearch wtReq.WtReportsSearch
reportSearch.StartTime = startTime
reportSearch.EndTime = endTime
var userIds []int
for _, userInfo := range reports {
userIds = append(userIds, int(userInfo.ID))
}
var statData wt.StatDataSearch
statData.StartTime = startTime
statData.EndTime = endTime
statData.UserIds = userIds
err, commitedUserIds := WtServiceGroup.WtReportsService.getWtReportListForStat(statData)
if err != nil {
}
var commitedList []common.UserInfo
var uncommitedList []common.UserInfo
// 比较那些人提交了,那些人没有提交
for _, needCommitPeoples := range reports {
isCommit := false
for _, commitedUserId := range commitedUserIds {
if int(needCommitPeoples.ID) == commitedUserId {
isCommit = true
}
}
if isCommit {
commitedList = append(commitedList, needCommitPeoples)
} else {
uncommitedList = append(uncommitedList, needCommitPeoples)
}
}
var statResult wtRes.StatResult
statResult.CommitCount = len(commitedList)
statResult.CommitPeoples = commitedList
statResult.UncommitCount = len(uncommitedList)
statResult.UncommitPeoples = uncommitedList
return err, statResult
}
func (wtOutputService *WtOutputService) ExportReportToExcel(info wt.StatDataSearch, excelPath string) (err error) {
var WtServiceGroup WtServiceGroup
err, reportResultList := WtServiceGroup.WtReportsService.getWtReportListForExcel(info)
if err != nil {
return err
}
if len(reportResultList) == 0 {
return errors.New("没有任何数据可以导出!")
}
excel := excelize.NewFile()
var titles []string
titles = append(titles, "序号")
titles = append(titles, "标题")
titles = append(titles, "用户名")
for _, content := range reportResultList[0].Contents {
titles = append(titles, content.Title)
}
titles = append(titles, "创建时间")
titles = append(titles, "更新时间")
//sheetName := reportResultList[0].Header
excel.SetSheetRow("Sheet1", "A1", &titles)
for i, report := range reportResultList {
axis := fmt.Sprintf("A%d", i+2)
var excelContent []interface{}
excelContent = append(excelContent, i + 1)
excelContent = append(excelContent, report.Header)
excelContent = append(excelContent, report.UserName)
for _, content := range report.Contents {
fromString, err := html2text.FromString(content.Content, html2text.Options{TextOnly: true})
if err != nil {
return err
}
excelContent = append(excelContent, fromString)
}
excelContent = append(excelContent, report.CreatedAt)
excelContent = append(excelContent, report.UpdatedAt)
excel.SetSheetRow("Sheet1", axis, &excelContent)
}
err = excel.SaveAs(excelPath)
return err
}