fonchain-fiee/pkg/service/artistInfo/asUser/artistInfoUserBackendUserViewHandler.go

237 lines
8.0 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package asUser
import (
"fmt"
"github.com/fonchain_enterprise/fonchain-main/api/artistInfoUser"
"github.com/fonchain_enterprise/fonchain-main/pkg/common/syncDownload"
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"github.com/fonchain_enterprise/fonchain-main/pkg/model"
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
"github.com/fonchain_enterprise/fonchain-main/pkg/service/artistInfo/asUtil"
"github.com/fonchain_enterprise/fonchain-main/pkg/utils"
"github.com/fonchain_enterprise/fonchain-main/pkg/utils/excel"
"github.com/gin-gonic/gin"
"os"
"path"
"path/filepath"
"sync"
"time"
)
var exportBackendUserViewListLock sync.RWMutex
// 批量查询BackendUserView
func GetBackendUserViewList(c *gin.Context) {
var req GetBackendUserViewListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq artistInfoUser.GetBackendUserViewListRequest
asUtil.RequestDataConvert(&req, &protoReq)
resp, err := service.GrpcArtistInfoUserImpl.GetBackendUserViewList(c, &protoReq)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetBackendUserViewList Err", "查询失败")
return
}
service.ResponseList(c, resp.List,
service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"),
service.OptionAddField_ArtshowCount("artistUid"),
)
}
func ExportBackendUserViewList(c *gin.Context) {
var req ExportBackendUserViewListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var accId uint64
claims, err := GetJwtInfo(c)
if err == nil && claims != nil {
accId = claims.ID
}
resp, err := service.GrpcArtistInfoUserImpl.GetBackendUserViewList(c, &artistInfoUser.GetBackendUserViewListRequest{
Page: 1,
PageSize: -1,
SelectColumns: req.ColumnIds,
UserIds: req.UserIds,
IsArtist: req.IsArtist,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportBackendUserViewList: GrpcArtistInfoUserImpl.GetBackendUserViewList", "查询失败")
return
}
columnResp, err := service.GrpcArtistInfoUserImpl.GetExportFieldList(c, &artistInfoUser.GetExportFieldListRequest{
Page: 1,
PageSize: -1,
Ids: req.ColumnIds,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportBackendUserViewList: GetExportFieldList", "查询失败")
return
}
filePath, _, err := writeToExcel(accId, resp.List, columnResp.List)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportBackendUserViewList: writeToExcel", "导出失败")
return
}
defer func() {
if filePath != "" {
service.DelayDeleteFileTask.AddPendingDeleteFile(service.DelayDeleteFile{
Path: filePath,
RetentionTime: time.Now().Add(2 * time.Minute),
})
}
}()
var httpType string
if config.IsHttps {
httpType = model.HttpsType
} else {
httpType = model.HttpType
}
var exportUrl = fmt.Sprintf("%s%s/static/tmp/%s", httpType, c.Request.Host, filepath.Base(filePath))
service.Success(c, map[string]interface{}{"ExportUrl": exportUrl})
}
func ExportBackendUserStatic(c *gin.Context) {
var req ExportBackendUserViewListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var accId uint64
claims, err := GetJwtInfo(c)
if err == nil && claims != nil {
accId = claims.ID
}
res, err := service.GrpcArtistInfoUserImpl.GetExportFieldList(c, &artistInfoUser.GetExportFieldListRequest{
Query: &artistInfoUser.ExportFieldData{
Origin: "backend_user_view",
},
Page: 1,
PageSize: -1,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportBackendUserStaticGetExportFieldList", "导出失败")
return
}
for _, v := range res.List {
if v.Column == "real_name" || v.Column == "tnum" {
req.ColumnIds = append(req.ColumnIds, v.ID)
}
}
resp, err := service.GrpcArtistInfoUserImpl.GetBackendUserViewList(c, &artistInfoUser.GetBackendUserViewListRequest{
Page: 1,
PageSize: -1,
SelectColumns: req.ColumnIds,
UserIds: req.UserIds,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportBackendUserViewList: GrpcArtistInfoUserImpl.GetBackendUserViewList", "查询失败")
return
}
if resp.Total > 0 {
staticRootDir := path.Join("./runtime/tmp", fmt.Sprintf("画家静态资源_%d_%d", accId, time.Now().Unix()))
if err = os.MkdirAll(staticRootDir, os.ModePerm); err != nil {
service.ErrorWithMark(c, e.Failed, err, "文件生成失败,请稍后再试!")
return
}
var wg sync.WaitGroup
var downloadTasks []*syncDownload.DownLoadInfo
for _, v := range resp.List {
//userStaticRoot := filepath.Join(staticRootDir, v.Tnum+"_"+v.RealName)
userStaticRoot := staticRootDir
if err = os.MkdirAll(userStaticRoot, os.ModePerm); err != nil {
service.ErrorWithMark(c, e.Failed, err, "文件生成失败,请稍后再试!")
return
}
if v.CertificateImg != "" {
fileExt := filepath.Ext(v.CertificateImg)
filePath := filepath.Join(userStaticRoot, v.Tnum+"_"+v.RealName+"_美协编号"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.CertificateImg,
SavePath: filePath,
Wg: &wg,
})
}
if v.IdcardBack != "" {
fileExt := filepath.Ext(v.IdcardBack)
filePath := filepath.Join(userStaticRoot, v.Tnum+"_"+v.RealName+"_身份证反面"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.IdcardBack,
SavePath: filePath,
Wg: &wg,
})
}
if v.IdcardFront != "" {
fileExt := filepath.Ext(v.IdcardFront)
filePath := filepath.Join(userStaticRoot, v.Tnum+"_"+v.RealName+"_身份证正面"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.IdcardFront,
SavePath: filePath,
Wg: &wg,
})
}
if v.Photo != "" {
fileExt := filepath.Ext(v.Photo)
filePath := filepath.Join(userStaticRoot, v.Tnum+"_"+v.RealName+"_近照"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.Photo,
SavePath: filePath,
Wg: &wg,
})
}
}
wg.Add(len(downloadTasks))
syncDownload.DownloadService.AddDownLoadTask(downloadTasks...)
wg.Wait()
zipPath := staticRootDir + ".zip"
err = utils.ZipDirectory(staticRootDir, zipPath)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportBackendUserStatic:zipDirectory", "文件压缩失败")
return
}
defer func() {
if zipPath != "" || staticRootDir != "" {
service.DelayDeleteFileTask.AddPendingDeleteFile(service.DelayDeleteFile{
Path: zipPath,
RetentionTime: time.Now().Add(2 * time.Minute),
}, service.DelayDeleteFile{
Path: staticRootDir,
RetentionTime: time.Now().Add(2 * time.Minute),
})
}
}()
var httpType string
if config.IsHttps {
httpType = model.HttpsType
} else {
httpType = model.HttpType
}
var exportUrl = fmt.Sprintf("%s%s/static/tmp/%s", httpType, c.Request.Host, filepath.Base(zipPath))
service.Success(c, map[string]interface{}{"ExportUrl": exportUrl})
} else {
service.Error(c, e.Failed, nil, "查询数据为空,无法下载")
}
}
func writeToExcel(accId uint64, datas []*artistInfoUser.BackendUserViewData, columns []*artistInfoUser.ExportFieldData) (path string, filename string, err error) {
exportBackendUserViewListLock.Lock()
defer exportBackendUserViewListLock.Unlock()
var (
sheet1Columns []string
jsonFiledList []string
)
for _, col := range columns {
sheet1Columns = append(sheet1Columns, col.ColumnDesc)
jsonFiledList = append(jsonFiledList, utils.SnakeToCamel(col.Column))
}
sheet1Data := excel.NewSheet("Sheet1", datas, sheet1Columns, jsonFiledList)
var fileName = fmt.Sprintf("画家宝画家列表_%d.xlsx", accId)
path, filename, err = excel.WriteToExcel(fileName, "./runtime/tmp", "", sheet1Data)
return
}