fonchain-fiee/pkg/service/artistInfo/asArtwork/supplement.go

1609 lines
61 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
// Package asArtwork -----------------------------
// @file : artworkSupplement.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/2/27 11:22
// -------------------------------------------
package asArtwork
import (
"context"
"encoding/json"
"fmt"
artShow "github.com/fonchain_enterprise/fonchain-main/api/artShow"
"github.com/fonchain_enterprise/fonchain-main/api/artistInfoArtwork"
"github.com/fonchain_enterprise/fonchain-main/api/artistInfoUser"
"github.com/fonchain_enterprise/fonchain-main/api/artistinfoArtshow"
"github.com/fonchain_enterprise/fonchain-main/api/artwork"
"github.com/fonchain_enterprise/fonchain-main/api/artwork_query"
"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/asPush"
"github.com/fonchain_enterprise/fonchain-main/pkg/service/artistInfo/asUser"
"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/fonchain_enterprise/fonchain-main/pkg/utils/stime"
"github.com/gin-gonic/gin"
"os"
"path"
"path/filepath"
"strings"
"sync"
"time"
)
// 画作补充信息
var Supplement = artworkSupplement{}
// 画作补充模块
type artworkSupplement struct {
}
// GetUnsupplementedExtDataList 获取补充信息的画作列表
//func (a artworkSupplement) GetUnsupplementedDataList(c *gin.Context) {
// var req GetAuditSupplementDataListRequest
// if err := c.ShouldBindJSON(&req); err != nil {
// service.Error(c, e.InvalidParams, err, err.Error())
// return
// }
// if req.ArtistUid == "" {
// userInfo, err, code := asAccount.GetUserInfoWithToken(c)
// if err != nil {
// service.Error(c, code, err, err.Error())
// return
// }
// req.ArtistUid = userInfo.MgmtArtistUid
// }
// artworkDatas, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockRecords(c, &artistInfoArtwork.GetArtworkLockRecordsRequest{
// ArtistUid: req.ArtistUid,
// QueryType: artistInfoArtwork.ArtworkQueryMode_NowLockedArtwork,
// })
// if err != nil {
// service.Error(c, e.Failed, err, err.Error())
// return
// }
// var cleanDatas = []*artistInfoArtwork.ArtistLockInfo{}
// for i, v := range artworkDatas.Data {
// //筛选出已被锁定并且未审核通过的画作
// if v.Status == 2 && v.LockTime != "" && v.SupplementAuditStatus != 2 {
// cleanDatas = append(cleanDatas, artworkDatas.Data[i])
// }
// }
// result, err := ReplenishArtwork(cleanDatas)
// if err != nil {
// service.ErrorWithMark(c, e.Failed, err, "GetIncompleteExtDataList ReplenishArtwork Error", err.Error())
// return
// }
// service.ResponseList(c, result, service.OptionPage(req.Page, req.PageSize, len(result)), service.OptionMsg("查询成功"))
//}
// Detail 获取画作补充信息详情
func (a artworkSupplement) Detail(c *gin.Context) {
var req DelAwRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
res, err := service.GrpcArtworkImpl.ArtworkDetail(c, &artwork.ArtworkDetailRequest{
Type: "1,2,3", //1=首选项 2=画作荣誉信息 3=获取画作补充信息
ArtworkUuid: req.ArtworkUuid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "Detail: GrpcArtworkImpl.ArtworkDetail", "查询失败")
return
}
lockRecords, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockDetail(c, &artistInfoArtwork.GetArtworkLockDetailRequest{
ArtworkUid: res.ArtworkUuid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "Detail : GrpcArtistInfoArtworkImpl.GetArtworkLockRecords Error", err.Error())
return
}
//转换成利于前端对接的数据结构
var returnData = ArtworkSupplementInfo{}
err = returnData.ConvertResponse(lockRecords, res.ProfileInfo, res.MarketInfo, res.ExtDataInfo)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "Detail:returnData.ConvertResponse", "查询失败")
return
}
service.Success(c, returnData)
}
// GetSupplementDataListAtUserSide 获取用户端画作补充信息列表
func (a artworkSupplement) GetSupplementDataListAtUserSide(c *gin.Context) {
userInfo, err, code := asUser.GetUserInfoWithToken(c)
if err != nil {
service.Error(c, code, err, err.Error())
return
}
var req GetSupplementDataListAtUserSideRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
lockRecords, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockRecords(c, &artistInfoArtwork.GetArtworkLockRecordsRequest{
ArtistUid: userInfo.MgmtArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_NowAuditFlowOfSupplementing,
})
if err != nil {
service.ErrorWithMark(c, code, err, "GetSupplementDataListAtUserSide : GrpcArtistInfoArtworkImpl.GetArtworkLockRecords Error", err.Error())
return
}
var datasPagination = []*artistInfoArtwork.ArtworkLockInfo{}
if req.PageSize != -1 {
for k, v := range lockRecords.Data {
if k >= req.PageSize*(req.Page-1) && k < req.PageSize*req.Page {
datasPagination = append(datasPagination, v)
}
}
} else {
datasPagination = lockRecords.Data
}
//returnDatas, err := ReplenishArtwork(datasPagination)
//if err != nil {
// service.ErrorWithMark(c, code, err, "GetSupplementDataListAtUserSide :ReplenishArtwork Error", err.Error())
// return
//}
var returnDatas []ArtworkSupplementInfo
for _, v := range datasPagination {
// todo 后续优化
artworkDetail, err := service.GrpcArtworkImpl.ArtworkDetail(c, &artwork.ArtworkDetailRequest{
Type: "1,2,3",
ArtworkUuid: v.ArtworkUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : GrpcArtworkImpl.ArtworkDetail Error", err.Error())
return
}
var data ArtworkSupplementInfo
if err = data.ConvertResponse(v, artworkDetail.ProfileInfo, artworkDetail.MarketInfo, artworkDetail.ExtDataInfo); err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : data.ConvertResponse Error", err.Error())
return
}
returnDatas = append(returnDatas, data)
}
service.ResponseList(c, returnDatas, service.OptionPage(req.Page, req.PageSize, len(returnDatas)), service.OptionMsg("查询成功"))
}
// GetSupplementDataListAtBackendSide 获取后台的画作补充信息列表
// Deprecated: 此方法已弃用,请使用 GetSupplementDataListAtBackendSide2 替代
func (a artworkSupplement) GetSupplementDataListAtBackendSide(c *gin.Context) {
var req GetSupplementDataListAtBackendSideRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
//模糊查询画作名称
var artworkUids []string
if req.ArtworkName != "" {
res, err := service.GrpcArtworkQueryImpl.ArtworkPreviewList(c, &artwork_query.ArtworkPreviewListRequest{ArtworkName: req.ArtworkName, ArtistUid: req.ArtistUid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetArtworkPreviewListAtBackendSide: GrpcArtworkQueryImpl.ArtworkPreviewList Error", "画作服务查询失败")
}
for _, v := range res.Data {
artworkUids = append(artworkUids, v.ArtworkUid)
}
}
var lockRecords *artistInfoArtwork.ArtworkLockList
var err error
if req.History {
lockRecords, err = service.GrpcArtistInfoArtworkImpl.GetArtworkLockRecords(c, &artistInfoArtwork.GetArtworkLockRecordsRequest{
ArtistUid: req.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_HistorySupplementInfo,
ArtworkUids: artworkUids,
SupplementAuditStatus: int64(req.SupplementAuditStatus),
})
} else {
lockRecords, err = service.GrpcArtistInfoArtworkImpl.GetArtworkLockRecords(c, &artistInfoArtwork.GetArtworkLockRecordsRequest{
ArtistUid: req.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_NowAuditFlowOfSupplementing,
ArtworkUids: artworkUids,
SupplementAuditStatus: int64(req.SupplementAuditStatus),
})
}
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : GrpcArtistInfoArtworkImpl.GetArtworkLockRecords Error", err.Error())
return
}
var datasPagination = []*artistInfoArtwork.ArtworkLockInfo{}
if req.PageSize != -1 {
for k, v := range lockRecords.Data {
if k >= req.PageSize*(req.Page-1) && k < req.PageSize*req.Page {
datasPagination = append(datasPagination, v)
}
}
} else {
datasPagination = lockRecords.Data
}
//datas, err := ReplenishArtwork(datasPagination)
//if err != nil {
// service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide :ReplenishArtwork Error", err.Error())
// return
//}
var returnDatas []ArtworkSupplementInfo
for _, v := range datasPagination {
// todo 后续优化 提升效率
artworkDetail, err := service.GrpcArtworkImpl.ArtworkDetail(c, &artwork.ArtworkDetailRequest{
Type: "123",
ArtworkUuid: v.ArtworkUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : GrpcArtworkImpl.ArtworkDetail Error", err.Error())
return
}
var data = ArtworkSupplementInfo{}
if err = data.ConvertResponse(v, artworkDetail.ProfileInfo, artworkDetail.MarketInfo, artworkDetail.ExtDataInfo); err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : data.ConvertResponse Error", err.Error())
return
}
returnDatas = append(returnDatas, data)
}
service.ResponseList(c, returnDatas, service.OptionPage(req.Page, req.PageSize, len(lockRecords.Data)), service.OptionMsg("查询成功"))
}
// UpdateExtData 更新画作补充信息
func (artworkSupplement) UpdateSupplement(c *gin.Context) {
//userInfo, err, code := asAccount.GetUserInfoWithToken(c)
//if err != nil {
// service.Error(c, code, err, err.Error())
// return
//}
var req ArtworkSupplementInfo
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
if req.ArtworkUuid == "" {
service.Error(c, e.InvalidParams, nil, "画作uid不能为空")
return
}
//查询画作锁定和审批状态
artworkLock, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockDetail(c, &artistInfoArtwork.GetArtworkLockDetailRequest{ArtworkUid: req.ArtworkUuid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtistInfoArtworkImpl.GetArtworkLockDetail Error", "更新失败")
return
}
if artworkLock.Status != 2 {
service.Error(c, e.Failed, nil, "画作未在锁定列表,操作取消")
return
}
profile, marketDatas, extdata := req.ConvertGrpcRequest()
//更新首选项
_, err = service.GrpcArtworkImpl.UpdateArtworkProfile(c, profile)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtworkImpl.UpdateExtData Error", "更新失败")
return
}
//更新荣誉
for _, marketData := range marketDatas {
_, err = service.GrpcArtworkImpl.UpdateMarketInfo(c, marketData)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtworkImpl.UpdateExtData Error", "更新失败")
return
}
}
//更新网络首发情况
_, err = service.GrpcArtworkImpl.UpdateExtData(c, extdata)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtworkImpl.UpdateExtData Error", "更新失败")
return
}
service.Success(c)
}
// AuditExt 画作基本信息和补充信息审批
func (artworkSupplement) AuditSupplement(c *gin.Context) {
accInfo, err, code := asUser.GetAccInfoWithToken(c)
if err != nil {
service.Error(c, code, err, err.Error())
return
}
var req AuditSupplement
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
var artworkUids = []string{}
if req.ArtworkUid != "" {
artworkUids = append(artworkUids, req.ArtworkUid)
} else if req.ArtworkUids != nil {
artworkUids = append(artworkUids, req.ArtworkUids...)
}
defer func() {
if err != nil {
return
}
for _, artworkUid := range artworkUids {
if req.FlowIndex == 2 {
asUser.UpdateOperationTime(c, artistinfoArtshow.OdType_artworkBaseData, artworkUid)
} else if req.FlowIndex == 3 {
asUser.UpdateOperationTime(c, artistinfoArtshow.OdType_artworkSupplyData, artworkUid)
}
}
if (req.AuditStatus != 4 && req.FlowIndex == 2) || req.FlowIndex == 3 {
pusher := asPush.NewPusher()
for _, artworkUid := range artworkUids {
//查询画作锁定和审批状态
artworkLock, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockDetail(context.Background(), &artistInfoArtwork.GetArtworkLockDetailRequest{ArtworkUid: artworkUid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtistInfoArtworkImpl.GetArtworkLockDetail Error", "审批失败")
return
}
if artworkLock.Status == 3 {
service.Error(c, e.Failed, nil, "画作已解锁,不允许审批")
return
}
//生成流转记录请求数据
flowRecord, auditType, auditResult := generateArtworkAuditFlowIndex(req.AuditStatus, req.FlowIndex, artworkLock, time.Now().Unix())
if req.AuditMark != "" {
flowRecord.ClauseList = append(flowRecord.ClauseList, req.AuditMark)
}
if req.AuditMark2 != "" {
flowRecord.ClauseList = append(flowRecord.ClauseList, req.AuditMark2)
}
fmt.Printf("flowRecord:%+v\n", flowRecord)
_, err = service.GrpcArtistInfoArtworkImpl.AddArtworkFlowRecord(context.Background(), flowRecord)
if err != nil {
fmt.Println("AuditSupplement AddArtworkFlowRecord Err", err.Error())
}
//发送审批通知
userData, err := service.GrpcArtistInfoUserImpl.FindUser(context.Background(), &artistInfoUser.FindUserRequest{MgmtArtistUid: artworkLock.ArtistUid})
if err != nil {
fmt.Println("AuditSupplement FindUser Err", err.Error())
continue
}
artworkView, err := service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(context.Background(), &artistInfoArtwork.ArtworkViewRequest{ArtworkUids: []string{artworkUid}, PageSize: 1, Page: 1})
if err != nil || artworkView.Total == 0 {
fmt.Println("AuditSupplement GetArtworkViewList Err", err.Error())
continue
}
//if err = asUser.ArtistInfoPushNotice.ArtworkAuditResultNotice(userData.Id, artworkView.Datas[0].ArtworkName, auditType, auditResult); err != nil {
// fmt.Println("AuditSupplement ArtworkAuditResultNotice Err", err.Error())
//}
if err = pusher.ArtworkAuditResultNotice(userData.Id, artworkView.Datas[0].ArtworkName, auditType, auditResult); err != nil {
fmt.Println("AuditSupplement ArtworkAuditResultNotice Err", err.Error())
}
}
}
}()
fmt.Println("accInfo:", accInfo.ID, accInfo.NickName)
_, err = service.GrpcArtistInfoArtworkImpl.UpdateArtworkAuditStatus(c, req.ConvertGrpcRequest(accInfo.ID, accInfo.NickName))
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtistInfoArtworkImpl.UpdateArtworkAuditStatus Error", "审批失败")
return
}
service.Success(c)
}
// 基本画作重新审批
// Deprecated 此逻辑由前端控制,后台不需要处理
func (artworkSupplement) ReAuditBaseInfo(c *gin.Context) {
accInfo, err, code := asUser.GetAccInfoWithToken(c)
if err != nil {
service.Error(c, code, err, err.Error())
return
}
var req AuditSupplement
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
artworkDetail, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockDetail(c, &artistInfoArtwork.GetArtworkLockDetailRequest{ArtworkUid: req.ArtworkUid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtistInfoArtworkImpl.GetArtworkLockDetail Error", "查询画作信息失败")
return
}
if artworkDetail.Status == 3 {
service.Error(c, e.Failed, nil, "画作已解锁,不允许重新审批")
return
}
if artworkDetail.BaseAuditStatus == 7 {
service.Error(c, e.Failed, nil, "画作处于复审中,不允许重新审批")
return
}
if artworkDetail.BaseAuditStatus == 4 {
service.Error(c, e.Failed, nil, "画作审批状态为已通过,不允许重新审批!")
return
}
fmt.Println("accInfo:", accInfo.ID, accInfo.NickName)
_, err = service.GrpcArtistInfoArtworkImpl.UpdateArtworkAuditStatus(c, req.ConvertGrpcRequest(accInfo.ID, accInfo.NickName))
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtistInfoArtworkImpl.UpdateArtworkAuditStatus Error", "审批失败")
return
}
{
//记录操作时间
if req.FlowIndex == 2 {
asUser.UpdateOperationTime(c, artistinfoArtshow.OdType_artworkBaseData, req.ArtworkUid)
} else if req.FlowIndex == 3 {
asUser.UpdateOperationTime(c, artistinfoArtshow.OdType_artworkSupplyData, req.ArtworkUid)
}
//生成流转记录请求数据
if req.AuditStatus != 4 {
flowRecord, auditType, auditResult := generateArtworkAuditFlowIndex(req.AuditStatus, req.FlowIndex, artworkDetail, time.Now().Unix())
fmt.Printf("flowRecord:%+v\n", flowRecord)
_, err = service.GrpcArtistInfoArtworkImpl.AddArtworkFlowRecord(context.Background(), flowRecord)
if err != nil {
fmt.Println("AuditSupplement AddArtworkFlowRecord Err", err.Error())
}
//发送审批通知
userData, err := service.GrpcArtistInfoUserImpl.FindUser(context.Background(), &artistInfoUser.FindUserRequest{MgmtArtistUid: artworkDetail.ArtistUid})
if err != nil {
fmt.Println("AuditSupplement FindUser Err", err.Error())
return
}
artworkView, err := service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(context.Background(), &artistInfoArtwork.ArtworkViewRequest{ArtworkUids: []string{req.ArtworkUid}, PageSize: 1, Page: 1})
if err != nil || artworkView.Total == 0 {
fmt.Println("AuditSupplement GetArtworkViewList Err", err.Error())
return
}
//if err = asUser.ArtistInfoPushNotice.ArtworkAuditResultNotice(userData.Id, artworkView.Datas[0].ArtworkName, auditType, auditResult); err != nil {
// fmt.Println("AuditSupplement ArtworkAuditResultNotice Err", err.Error())
//}
pusher := asPush.NewPusher()
if err = pusher.ArtworkAuditResultNotice(userData.Id, artworkView.Datas[0].ArtworkName, auditType, auditResult); err != nil {
fmt.Println("AuditSupplement ArtworkAuditResultNotice Err", err.Error())
}
}
}
service.Success(c)
}
// GenerateSupplementInfo 生成画作补充信息
func (a artworkSupplement) GenerateSupplementInfo(c *gin.Context) {
var req GenerateSupplementInfoRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
if req.ArtworkUids == nil {
service.Error(c, e.InvalidParams, nil, "artworkUids 不能为空")
return
}
err := SupplementService.GenerateSupplementInfo(req.ArtworkUids)
if err != nil {
service.Error(c, e.Failed, err, "生成失败")
return
}
service.Success(c)
}
// ReviewBaseArtwork 画作基本信息复审列表
func (a artworkSupplement) ReviewBaseArtworkList(c *gin.Context) {
var req GetViewReviewArtworkListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq = artistInfoArtwork.GetViewReviewArtworkListRequest{}
asUtil.RequestDataConvert(&req, &protoReq)
if req.History {
history, err := service.GrpcArtistInfoArtworkImpl.GetArtworkBaseAuditHistoryList(c, &artistInfoArtwork.GetArtworkBaseAuditHistoryListRequest{
Query: &artistInfoArtwork.ArtworkBaseAuditHistoryData{
ArtistUid: req.ArtistUid,
Node: 2,
},
Page: 1,
PageSize: -1,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ReviewBaseArtworkList:GetArtworkBaseAuditHistoryList Err", "查询失败")
return
}
var artworkUids []string
for _, v := range history.List {
artworkUids = append(artworkUids, "'"+v.ArtworkUid+"'")
}
if len(artworkUids) == 0 {
service.ResponseList(c, []struct{}{}, service.OptionPage(req.Page, req.PageSize, history.Total), service.OptionMsg("查询成功"))
return
}
protoReq.Where = fmt.Sprintf("artwork_uid in (%s)", "'"+strings.Join(artworkUids, "','")+"'")
}
resp, err := service.GrpcArtistInfoArtworkImpl.GetViewReviewArtworkList(c, &protoReq)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetViewReviewArtworkList Err", "查询失败")
return
}
if !req.History {
cacheData, err := service.GrpcArtistInfoArtworkImpl.GetTempSaveReviewStatusList(c, &artistInfoArtwork.GetTempSaveReviewStatusListRequest{
CacheArtistUid: req.ArtistUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ReviewBaseArtworkList:GetArtworkBaseAuditHistoryList Err222", "查询失败")
return
}
for _, v := range cacheData.List {
for i, _ := range resp.List {
if v.ArtworkUid == resp.List[i].ArtworkUid {
resp.List[i].ReviewStatus = artistInfoArtwork.ReviewAuditStatus(v.ReviewStatus)
resp.List[i].ReviewMark = v.ReviewMark
resp.List[i].ReviewMark2 = v.ReviewMark2
resp.List[i].ReviewUpdatedAt = v.OptTime
break
}
}
}
}
service.ResponseList(c, resp.List,
service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"),
service.OptionAddField_ArtshowCount("artistUid"),
)
}
// 复审画作
func (a artworkSupplement) ReviewBaseArtwork(c *gin.Context) {
var req artistInfoArtwork.ReviewBaseArtworkAuditRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
//获取账号信息
accInfo, err, code := asUser.GetAccInfoWithToken(c)
if err != nil {
service.ErrorWithMark(c, code, err, "", "无效的登录状态")
return
}
req.ApproverAccid = int32(accInfo.ID)
req.Approver = accInfo.NickName
//从缓存中拿去审批数据为后面添加路转记录做准备
fmt.Printf("req.CacheArtistUid:%+v\n", req.CacheArtistUid)
var tmpAuditData = &artistInfoArtwork.GetTempSaveReviewStatusListResp{}
if req.CacheArtistUid != "" {
fmt.Println("从缓存中获取审批数据111111111111111111")
tmpAuditData, err = service.GrpcArtistInfoArtworkImpl.GetTempSaveReviewStatusList(c, &artistInfoArtwork.GetTempSaveReviewStatusListRequest{
CacheArtistUid: req.CacheArtistUid,
})
fmt.Println("从缓存中获取审批数据22222", err)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ReviewBaseArtwork: GetTempSaveReviewStatusList Error", "审批失败,请稍后重试")
return
}
}
fmt.Println("3333333333333333333333")
//进行审批
fmt.Printf("tmpAuditData:%+v\n", tmpAuditData)
resp, err := service.GrpcArtistInfoArtworkImpl.ReviewBaseArtworkAudit(c, &req)
fmt.Printf("ReviewBaseArtworkAudit resp:%+v\n", resp)
if err != nil {
if utils.Contains([]string{"该画家画作已经审批完成,请勿重复提交", "请审批完后再提交", "未识别到您的审批操作,操作取消"}, err.Error()) {
service.ErrorWithMark(c, e.Failed, err, "ReviewBaseArtwork: ReviewBaseArtwork Error", err.Error())
return
}
service.ErrorWithMark(c, e.Failed, err, "ReviewBaseArtwork: ReviewBaseArtwork Error", "审批失败")
return
}
fmt.Println("444444444444444444444")
// 添加画作流转记录(如果审批通过)
if req.ArtworkUid != "" {
req.BatchAudit = append(req.BatchAudit, &artistInfoArtwork.BatchReviewAudit{
ArtworkUid: req.ArtworkUid,
ReviewStatus: req.ReviewStatus,
ReviewMark: req.ReviewMark,
ReviewMark2: req.ReviewMark2,
})
}
fmt.Println("555555555555555555")
if tmpAuditData.List != nil && len(tmpAuditData.List) > 0 {
for _, v := range tmpAuditData.List {
fmt.Println("v.ArtworkUid:", v.ArtworkUid, "v.ReviewStatus:", v.ReviewStatus)
req.BatchAudit = append(req.BatchAudit, &artistInfoArtwork.BatchReviewAudit{
ArtworkUid: v.ArtworkUid,
ReviewStatus: artistInfoArtwork.ReviewAuditStatus(v.ReviewStatus),
ReviewMark: v.ReviewMark,
ReviewMark2: v.ReviewMark2,
})
}
}
fmt.Printf("准备添加流转记录:%+v\n", req.BatchAudit)
for _, artAudit := range req.BatchAudit {
if artAudit.ReviewStatus != artistInfoArtwork.ReviewAuditStatus_Pass {
fmt.Println(artAudit.ArtworkUid+"没有通过,跳过流转记录添加 reviewStatus", artAudit.ReviewStatus)
continue
}
fmt.Println(artAudit.ArtworkUid+"通过复审,添加流转记录 reviewStatus", artAudit.ReviewStatus)
//查询画作锁定和审批状态
artworkLock, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockDetail(context.Background(), &artistInfoArtwork.GetArtworkLockDetailRequest{ArtworkUid: artAudit.ArtworkUid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateExtData: GrpcArtistInfoArtworkImpl.GetArtworkLockDetail Error", "审批失败")
return
}
//if artworkLock.Status == 3 {
// service.Error(c, e.Failed, nil, "画作已解锁,不允许审批")
// return
//}
//生成流转记录请求数据
flowRecord, auditType, auditResult := generateArtworkAuditFlowIndex(4, 2, artworkLock, time.Now().Unix())
fmt.Printf("flowRecord:%+v\n", flowRecord)
_, err = service.GrpcArtistInfoArtworkImpl.AddArtworkFlowRecord(context.Background(), flowRecord)
if err != nil {
fmt.Println("AuditSupplement AddArtworkFlowRecord Err", err.Error())
}
//发送审批通知
userData, err := service.GrpcArtistInfoUserImpl.FindUser(context.Background(), &artistInfoUser.FindUserRequest{MgmtArtistUid: artworkLock.ArtistUid})
if err != nil {
fmt.Println("AuditSupplement FindUser Err", err.Error())
continue
}
artworkView, err := service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(context.Background(), &artistInfoArtwork.ArtworkViewRequest{ArtworkUids: []string{artAudit.ArtworkUid}, PageSize: 1, Page: 1})
if err != nil || artworkView.Total == 0 {
fmt.Println("AuditSupplement GetArtworkViewList Err", err.Error())
continue
}
//if err = asUser.ArtistInfoPushNotice.ArtworkAuditResultNotice(userData.Id, artworkView.Datas[0].ArtworkName, auditType, auditResult); err != nil {
// fmt.Println("AuditSupplement ArtworkAuditResultNotice Err", err.Error())
//}
pusher := asPush.NewPusher()
if err = pusher.ArtworkAuditResultNotice(userData.Id, artworkView.Datas[0].ArtworkName, auditType, auditResult); err != nil {
fmt.Println("AuditSupplement ArtworkAuditResultNotice Err", err.Error())
}
}
service.Success(c)
}
// GetSupplementDataListAtBackendSide 获取后台的画作补充信息列表
func (a artworkSupplement) GetSupplementDataListAtBackendSide2(c *gin.Context) {
var req GetSupplementDataListAtBackendSideRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
//模糊查询画作名称
var artworkUids []string
if req.ArtworkName != "" {
res, err := service.GrpcArtworkQueryImpl.ArtworkPreviewList(c, &artwork_query.ArtworkPreviewListRequest{ArtworkName: req.ArtworkName, ArtistUid: req.ArtistUid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetArtworkPreviewListAtBackendSide: GrpcArtworkQueryImpl.ArtworkPreviewList Error", "画作服务查询失败")
}
for _, v := range res.Data {
artworkUids = append(artworkUids, v.ArtworkUid)
}
}
var lockRecords *artistInfoArtwork.GetArtworkViewListResponse
var err error
if req.History {
lockRecords, err = service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(c, &artistInfoArtwork.ArtworkViewRequest{
ArtistUid: req.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_HistorySupplementInfo,
ArtworkUids: artworkUids,
SupplementAuditStatus: int64(req.SupplementAuditStatus),
Page: int64(req.Page),
PageSize: int64(req.PageSize),
})
} else {
lockRecords, err = service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(c, &artistInfoArtwork.ArtworkViewRequest{
ArtistUid: req.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_NowAuditFlowOfSupplementing,
ArtworkUids: artworkUids,
SupplementAuditStatus: int64(req.SupplementAuditStatus),
Page: int64(req.Page),
PageSize: int64(req.PageSize),
})
}
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : GrpcArtistInfoArtworkImpl.GetArtworkLockRecords Error", err.Error())
return
}
//datas, err := ReplenishArtwork(datasPagination)
//if err != nil {
// service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide :ReplenishArtwork Error", err.Error())
// return
//}
var returnDatas []ArtworkSupplementInfo
for _, v := range lockRecords.Datas {
//获取并处理一下字段数据
var (
editable bool
ArtistMarketDetail string
ArtistMarketUrl1 string
ArtistMarketUrl2 string
ArtistMarketId1 int32
ArtistMarketId2 int32
ArtistMarketId3 int32
)
var lockStatus *artistInfoArtwork.CheckArtworkEditableResponse
lockStatus, err = service.GrpcArtistInfoArtworkImpl.CheckArtworkSupplementInfoEditable(context.Background(), &artistInfoArtwork.ArtworkUidRequest{ArtworkUid: v.ArtworkUid})
if err != nil {
return
}
editable = lockStatus.Editable
var artworkMarket *artwork.ArtworkDetailResponse
artworkMarket, err := service.GrpcArtworkImpl.ArtworkDetail(c, &artwork.ArtworkDetailRequest{
Type: "2",
ArtworkUuid: v.ArtworkUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : GrpcArtworkImpl.ArtworkDetail Error", err.Error())
return
}
if config.Env == "test" || config.Env == "dev" {
time.Sleep(time.Microsecond * 300)
}
if artworkMarket.MarketInfo != nil && len(artworkMarket.MarketInfo) > 0 {
for _, v := range artworkMarket.MarketInfo {
switch v.Type {
case 0:
ArtistMarketDetail = v.Detail
ArtistMarketId1 = v.MarketId
case 2:
if ArtistMarketUrl1 == "" {
ArtistMarketUrl1 = v.Detail
ArtistMarketId2 = v.MarketId
} else if ArtistMarketUrl2 == "" {
ArtistMarketUrl2 = v.Detail
ArtistMarketId3 = v.MarketId
break
}
}
}
}
returnDatas = append(returnDatas, ArtworkSupplementInfo{
ArtworkUuid: v.ArtworkUid,
ArtistName: v.ArtistName,
ArtistUid: v.ArtistUid,
ArtworkName: v.ArtworkName,
Length: v.Length,
Width: v.Width,
Ruler: v.Ruler,
InscribeDate: v.InscribeDate,
Abstract: v.SupplementAbstract,
HdPic: v.HdPic,
ArtistPhoto: v.ArtistPhoto,
CreatedDate: v.CreatedDate,
CreatedAddress: strings.Join(v.CreatedAddress, ","),
PriceRun: float32(v.PriceRun),
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
DeletedAt: v.DeletedAt,
FirstPublish: v.FirstPublish,
SupplementAuditStatus: v.SupplementAuditStatus,
SupplementAuditMark: v.SupplementAuditMark,
SupplementAuditMark2: v.SupplementAuditMark2,
Editable: editable,
IsFirstPublish: utils.If(v.FirstPublish == "", false, true).(bool),
Status: int64(v.LockStatus),
ArtistMarketDetail: ArtistMarketDetail,
ArtistMarketUrl1: ArtistMarketUrl1,
ArtistMarketUrl2: ArtistMarketUrl2,
ArtistMarketId1: ArtistMarketId1,
ArtistMarketId2: ArtistMarketId2,
ArtistMarketId3: ArtistMarketId3,
Tfnum: v.Tfnum,
})
}
service.ResponseList(c, returnDatas, service.OptionPage(req.Page, req.PageSize, lockRecords.Total), service.OptionMsg("查询成功"))
}
// GetSupplementDataListAtBackendSide3
// Deprecated
func (a artworkSupplement) GetSupplementDataListAtBackendSide3(c *gin.Context) {
var req GetSupplementDataListAtBackendSideRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
//var order []string
//if req.SortField != "" {
// var orderType = "asc"
// if req.SortOrder == "descend" {
// orderType = "desc"
// }
// order = append(order, fmt.Sprintf("%s %s", utils.CamelToSnake(req.SortField), orderType))
//}
//模糊查询画作名称
var artworkUids []string
if req.ArtworkName != "" {
//res, err := service.GrpcArtworkQueryImpl.ArtworkPreviewList(c, &artwork_query.ArtworkPreviewListRequest{ArtworkName: req.ArtworkName, ArtistUid: req.ArtistUid, Order})
res, err := service.GrpcArtworkQueryImpl.ArtworkPreviewList(c, &artwork_query.ArtworkPreviewListRequest{ArtworkName: req.ArtworkName, ArtistUid: req.ArtistUid})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetArtworkPreviewListAtBackendSide: GrpcArtworkQueryImpl.ArtworkPreviewList Error", "画作服务查询失败")
}
for _, v := range res.Data {
artworkUids = append(artworkUids, v.ArtworkUid)
}
}
//todo 下面开始改成获取画作补充信息视图列表
var lockRecords *artistInfoArtwork.GetArtworkViewListResponse
var err error
if req.History {
lockRecords, err = service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(c, &artistInfoArtwork.ArtworkViewRequest{
ArtistUid: req.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_HistorySupplementInfo,
ArtworkUids: artworkUids,
SupplementAuditStatus: int64(req.SupplementAuditStatus),
Page: int64(req.Page),
PageSize: int64(req.PageSize),
})
} else {
lockRecords, err = service.GrpcArtistInfoArtworkImpl.GetArtworkViewList(c, &artistInfoArtwork.ArtworkViewRequest{
ArtistUid: req.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_NowAuditFlowOfSupplementing,
ArtworkUids: artworkUids,
SupplementAuditStatus: int64(req.SupplementAuditStatus),
Page: int64(req.Page),
PageSize: int64(req.PageSize),
})
}
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetSupplementDataListAtUserSide : GrpcArtistInfoArtworkImpl.GetArtworkLockRecords Error", err.Error())
return
}
var returnDatas []ArtworkSupplementInfo
for _, v := range lockRecords.Datas {
//获取并处理一下字段数据
var (
editable bool
ArtistMarketDetail string
ArtistMarketUrl1 string
ArtistMarketUrl2 string
ArtistMarketId1 int32
ArtistMarketId2 int32
ArtistMarketId3 int32
)
var lockStatus *artistInfoArtwork.CheckArtworkEditableResponse
lockStatus, err = service.GrpcArtistInfoArtworkImpl.CheckArtworkSupplementInfoEditable(context.Background(), &artistInfoArtwork.ArtworkUidRequest{ArtworkUid: v.ArtworkUid})
if err != nil {
return
}
editable = lockStatus.Editable
supplyInfo, err := service.GrpcArtistInfoArtworkImpl.GetViewArtworkSupplementDetail(c, &artistInfoArtwork.GetViewArtworkSupplementByIdRequest{
ArtworkUid: v.ArtworkUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "assdf : GrpcArtistInfoArtworkImpl.GetViewArtworkSupplementDetail Error", err.Error())
return
}
if len(supplyInfo.ArtworkMarkets) > 0 {
tmpMarket := ConvertMarketDataToResponse(supplyInfo.ArtworkMarkets)
ArtistMarketId1 = tmpMarket.ArtistMarketId1
ArtistMarketId2 = tmpMarket.ArtistMarketId2
ArtistMarketId3 = tmpMarket.ArtistMarketId3
ArtistMarketDetail = tmpMarket.ArtistMarketDetail
ArtistMarketUrl1 = tmpMarket.ArtistMarketUrl1
ArtistMarketUrl2 = tmpMarket.ArtistMarketUrl2
}
returnDatas = append(returnDatas, ArtworkSupplementInfo{
ArtworkUuid: supplyInfo.ArtworkUuid,
ArtistName: supplyInfo.ArtistName,
ArtistUid: supplyInfo.ArtistUid,
ArtworkName: supplyInfo.ArtworkName,
Length: supplyInfo.Length,
Width: supplyInfo.Width,
Ruler: supplyInfo.Ruler,
InscribeDate: supplyInfo.InscribeDate,
Abstract: supplyInfo.Abstract,
HdPic: supplyInfo.HdPic,
ArtistPhoto: supplyInfo.ArtistPhoto,
CreatedDate: supplyInfo.CreatedDate,
CreatedAddress: strings.Join(v.CreatedAddress, ","),
PriceRun: float32(v.PriceRun),
CreatedAt: supplyInfo.CreatedAt, //todo supplyInfo.CreatedAt 是字符串类型的数字
UpdatedAt: supplyInfo.UpdatedAt,
DeletedAt: time.Unix(supplyInfo.DeletedAt, 0).Format(stime.Format_Normal_YMDhms),
FirstPublish: supplyInfo.FirstPublish,
SupplementAuditStatus: supplyInfo.SupplementAuditStatus,
SupplementAuditMark: supplyInfo.SupplementAuditMark,
SupplementAuditMark2: supplyInfo.SupplementAuditMark2,
Editable: editable,
IsFirstPublish: utils.If(v.FirstPublish == "", false, true).(bool),
Status: int64(v.LockStatus),
ArtistMarketDetail: ArtistMarketDetail,
ArtistMarketUrl1: ArtistMarketUrl1,
ArtistMarketUrl2: ArtistMarketUrl2,
ArtistMarketId1: ArtistMarketId1,
ArtistMarketId2: ArtistMarketId2,
ArtistMarketId3: ArtistMarketId3,
Tfnum: v.Tfnum,
})
}
service.ResponseList(c, returnDatas, service.OptionPage(req.Page, req.PageSize, lockRecords.Total), service.OptionMsg("查询成功"))
}
func generateArtworkAuditFlowIndex(auditStatus int64, flowIndex int64, artworkLockInfo *artistInfoArtwork.ArtworkLockInfo, timestamp int64) (record *artistInfoArtwork.AddArtworkFlowRecordRequest, auditType, auditResult string) {
record = &artistInfoArtwork.AddArtworkFlowRecordRequest{
ArtistUid: artworkLockInfo.ArtistUid,
ArtworkUid: artworkLockInfo.ArtworkUid,
TimeStamp: timestamp,
Operator: artistInfoArtwork.Operator_Backend,
}
if flowIndex < 3 { //基本信息审批
auditType = "基本信息"
switch auditStatus {
case 4:
auditResult = "通过"
record.FlowState = artistInfoArtwork.FlowState_BaseInfoAuditPass
case 3:
auditResult = "不通过"
record.FlowState = artistInfoArtwork.FlowState_BaseInfoAuditNoPass
case 6:
auditResult = "驳回"
record.FlowState = artistInfoArtwork.FlowState_BaseInfoAuditReject
}
} else { //补充信息审批
auditType = "补充信息"
switch auditStatus {
case 2:
auditResult = "通过"
record.FlowState = artistInfoArtwork.FlowState_ArtWorkSupplementPass
case 3:
auditResult = "不通过"
record.FlowState = artistInfoArtwork.FlowState_ArtWorkSupplementNoPass
}
}
return
}
func (a artworkSupplement) ExportArtworkReviewList(c *gin.Context) {
var req ExportArtworkReviewListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var accId uint64
claims, err := asUser.GetJwtInfo(c)
if err == nil && claims != nil {
accId = claims.ID
}
if req.ReviewUpdatedFrom == "" || req.ReviewUpdatedTo == "" {
service.Error(c, e.InvalidParams, err, "请选择时间区间")
return
}
resp, err := service.GrpcArtistInfoArtworkImpl.GetViewReviewArtworkList(c, &artistInfoArtwork.GetViewReviewArtworkListRequest{
Page: 1,
PageSize: -1,
SelectColumns: req.ColumnIds,
//ArtworkUids: req.ArtworkUids,
ReviewUpdatedFrom: req.ReviewUpdatedFrom,
ReviewUpdatedTo: req.ReviewUpdatedTo,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportArtworkReviewList: 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, "ExportArtworkReviewList: GetExportFieldList", "查询失败")
return
}
var exportData []*ViewReviewArtworkExportData
for _, v := range resp.List {
temp := &ViewReviewArtworkExportData{
ID: v.ID,
CreatedAt: v.CreatedAt,
DeletedAt: v.DeletedAt,
ReviewMark: v.ReviewMark,
ArtworkName: v.ArtworkName,
ArtworkUid: v.ArtworkUid,
Tfnum: v.Tfnum,
ArtistName: v.ArtistName,
ArtistUid: v.ArtistUid,
Tnum: v.Tnum,
Width: v.Width,
Length: v.Length,
Ruler: v.Ruler,
HdPic: v.HdPic,
ArtistPhoto: v.ArtistPhoto,
SealPic: v.SealPic,
LockStatus: v.LockStatus,
LockTime: v.LockTime,
ReviewMark2: v.ReviewMark2,
ReviewUpdatedAt: v.ReviewUpdatedAt,
}
if v.ReviewStatus != 0 {
switch v.ReviewStatus {
case 2:
temp.ReviewStatus = "待审核"
case 3:
temp.ReviewStatus = "不通过"
case 4:
temp.ReviewStatus = "通过"
default:
temp.ReviewStatus = "无"
}
}
if v.InSource != 0 {
switch v.InSource {
case 3:
temp.InSource = "已导入"
default:
temp.InSource = "未导入"
}
}
if v.ArtworkType != 0 {
switch v.ArtworkType {
case 1:
temp.ArtworkType = "优秀画作"
case 2:
temp.ArtworkType = "赠画"
case 3:
temp.ArtworkType = "卷轴"
case 4:
temp.ArtworkType = "普通画作"
default:
temp.ArtworkType = "普通画作"
}
}
if v.NationalExhibition != 0 {
switch v.NationalExhibition {
case 1:
temp.NationalExhibition = "无"
case 2:
temp.NationalExhibition = "入围"
case 3:
temp.NationalExhibition = "入选"
case 4:
temp.NationalExhibition = "入围+入选"
}
}
exportData = append(exportData, temp)
}
var headerTime = fmt.Sprintf("操作日期: %s-%s", strings.Replace(req.ReviewUpdatedFrom, "-", "/", -1), strings.Replace(req.ReviewUpdatedTo, "-", "/", -1))
filePath, _, err := writeToExcel(headerTime, accId, exportData, 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})
}
var exportExportArtworkReviewStaticLock = sync.RWMutex{}
func (a artworkSupplement) ExportArtworkReviewStatic(c *gin.Context) {
if !exportExportArtworkReviewStaticLock.TryLock() {
service.Error(c, e.InvalidParams, nil, "正在压缩文件,请勿重复操作!")
return
}
defer exportExportArtworkReviewStaticLock.Unlock()
var req ExportArtworkReviewListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var accId uint64
claims, err := asUser.GetJwtInfo(c)
if err == nil && claims != nil {
accId = claims.ID
}
if req.ReviewUpdatedFrom == "" || req.ReviewUpdatedTo == "" {
service.Error(c, e.InvalidParams, err, "请选择时间区间")
return
}
//添加为文件命名时用的参数
res, err := service.GrpcArtistInfoUserImpl.GetExportFieldList(c, &artistInfoUser.GetExportFieldListRequest{
Query: &artistInfoUser.ExportFieldData{
Origin: "view_review_artwork_detail",
},
Page: 1,
PageSize: -1,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportArtworkReviewStaticGetExportFieldList", "导出失败")
return
}
for _, v := range res.List {
if v.Column == "artist_name" || v.Column == "artwork_name" || v.Column == "tfnum" || v.Column == "tnum" {
fmt.Println("找到了", v.Column)
req.ColumnIds = append(req.ColumnIds, v.ID)
}
}
fmt.Printf("req.ColumnIds:%+v\n", req.ColumnIds)
resp, err := service.GrpcArtistInfoArtworkImpl.GetViewReviewArtworkList(c, &artistInfoArtwork.GetViewReviewArtworkListRequest{
Page: 1,
PageSize: -1,
SelectColumns: req.ColumnIds,
ReviewUpdatedFrom: req.ReviewUpdatedFrom,
ReviewUpdatedTo: req.ReviewUpdatedTo,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ExportArtworkReviewStatic: GetViewReviewArtworkList", "查询失败")
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 (
childDir_hdpic = staticRootDir
childDir_artistpic = staticRootDir
childDir_sealpic = staticRootDir
)
if len(req.ColumnIds) > 1 { //选择的图片类型数量大于1需要分目录
childDir_hdpic = path.Join(staticRootDir, "画作高清图")
childDir_artistpic = path.Join(staticRootDir, "画家画作合照")
childDir_sealpic = path.Join(staticRootDir, "人名章图")
if err = os.MkdirAll(childDir_hdpic, os.ModePerm); err != nil {
service.ErrorWithMark(c, e.Failed, err, "文件生成失败,请稍后再试!")
return
}
if err = os.MkdirAll(childDir_artistpic, os.ModePerm); err != nil {
service.ErrorWithMark(c, e.Failed, err, "文件生成失败,请稍后再试!")
return
}
if err = os.MkdirAll(childDir_sealpic, 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
}
fmt.Println("v.HdPic:", v.HdPic)
fmt.Println("v.ArtistPhoto:", v.ArtistPhoto)
fmt.Println("v.SealPic:", v.SealPic)
if v.HdPic != "" {
fileExt := filepath.Ext(v.HdPic)
filePath := filepath.Join(childDir_hdpic, v.ArtistName+"["+v.Tnum+"]_"+v.ArtworkName+"["+v.Tfnum+"]"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.HdPic,
SavePath: filePath,
Wg: &wg,
})
}
if v.ArtistPhoto != "" {
fileExt := filepath.Ext(v.ArtistPhoto)
filePath := filepath.Join(childDir_artistpic, v.ArtistName+"["+v.Tnum+"]_"+v.ArtworkName+"["+v.Tfnum+"]"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.ArtistPhoto,
SavePath: filePath,
Wg: &wg,
})
}
if v.SealPic != "" {
fileExt := filepath.Ext(v.SealPic)
filePath := filepath.Join(childDir_sealpic, v.ArtistName+"["+v.Tnum+"]_"+v.ArtworkName+"["+v.Tfnum+"]"+fileExt)
downloadTasks = append(downloadTasks, &syncDownload.DownLoadInfo{
DownloadUrl: v.SealPic,
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(headerTime string, accId uint64, datas []*ViewReviewArtworkExportData, columns []*artistInfoUser.ExportFieldData) (path string, filename string, err error) {
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)
ex, _ := excel.NewExcelCreatorWithNewFile(fileName, "./runtime/tmp", sheet1Data)
ex.UseOption(excel.OptionFileNameSuffixWithUnixTime)
ex.AfterAddData(excel.AfterAddHeader1(sheet1Data, headerTime))
path, filename, err = ex.WriteToFile()
return
}
func (a artworkSupplement) TempSaveReviewStatus(c *gin.Context) {
var req artistInfoArtwork.TempSaveReviewStatusData
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
if config.Env == "local" {
req.Accid = 1
} else {
accInfo, err, code := asUser.GetAccInfoWithToken(c)
if err != nil {
service.Error(c, code, err, "登录状态失效")
return
}
req.Accid = int32(accInfo.ID)
}
if _, err := service.GrpcArtistInfoArtworkImpl.SaveTempSaveReviewStatus(c, &req); err != nil {
service.Error(c, e.Failed, err, "保存审批状态失败")
return
}
service.Success(c)
}
func (a artworkSupplement) TempSaveReviewStatusList(c *gin.Context) {
var req artistInfoArtwork.GetTempSaveReviewStatusListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, err.Error())
return
}
if result, err := service.GrpcArtistInfoArtworkImpl.GetTempSaveReviewStatusList(c, &req); err != nil {
service.Error(c, e.Failed, err, "查审批状态失败")
return
} else {
service.ResponseList(c, result.List, service.OptionPage(result.Page, result.PageSize, result.Total))
}
}
// 批量查询ViewReviewArtistStatic
func (a *artworkSupplement) GetViewReviewArtistStaticList(c *gin.Context) {
var req GetViewReviewArtistStaticListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq artistInfoArtwork.GetViewReviewArtistStaticListRequest
asUtil.RequestDataConvert(&req, &protoReq)
switch req.Mode {
case 1: //查询有待审核画作的画家
protoReq.Where = "artwork_num_pending > 0"
case 2: //查询有复审历史记录的画家
protoReq.Query.HaveHistory = true
}
resp, err := service.GrpcArtistInfoArtworkImpl.GetViewReviewArtistStaticList(c, &protoReq)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetViewReviewArtistStaticList Err", "查询失败")
return
}
//按徐家鸿要求修改,审核页面的画作数量和平尺数统计按照缓存中的审批数据实时展示
if req.Mode == 1 {
for i, thisArtist := range resp.List {
//2. 统计各个复审状态下的画作数量
//2.1 拿到当前待审核的画作数据
artworkResp, err := service.GrpcArtistInfoArtworkImpl.GetViewReviewArtworkList(c, &artistInfoArtwork.GetViewReviewArtworkListRequest{
Query: &artistInfoArtwork.ViewReviewArtworkData{ReviewStatus: 2, ArtistUid: thisArtist.ArtistUid},
Page: 1,
PageSize: -1,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetViewReviewArtworkList Err", "查询失败")
return
}
//2.2 拿到缓存中的复审数据
cacheData, err := service.GrpcArtistInfoArtworkImpl.GetTempSaveReviewStatusList(c, &artistInfoArtwork.GetTempSaveReviewStatusListRequest{
CacheArtistUid: thisArtist.ArtistUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "ReviewBaseArtworkList:GetArtworkBaseAuditHistoryList Err222", "查询失败")
return
}
//2.4 缓存数据合并到artworkResp
for cacheIndex, cache := range cacheData.List {
for realIndex, _ := range artworkResp.List {
if cache.ArtworkUid == artworkResp.List[realIndex].ArtworkUid {
artworkResp.List[realIndex].ReviewStatus = artistInfoArtwork.ReviewAuditStatus(cacheData.List[cacheIndex].ReviewStatus)
artworkResp.List[realIndex].ReviewMark = cacheData.List[cacheIndex].ReviewMark
artworkResp.List[realIndex].ReviewMark2 = cacheData.List[cacheIndex].ReviewMark2
artworkResp.List[realIndex].ReviewUpdatedAt = cacheData.List[cacheIndex].OptTime
break
}
}
}
//2.5 重新统计当前审批列表中的信息
resp.List[i].RulerTotal = 0
resp.List[i].RulerTotalPassed = 0
resp.List[i].RulerTotalNoPassed = 0
resp.List[i].RulerTotalPending = 0
resp.List[i].ArtworkNumAll = 0
resp.List[i].ArtworkNumNoPassed = 0
resp.List[i].ArtworkNumPassed = 0
resp.List[i].ArtworkNumPending = 0
for _, v := range artworkResp.List {
resp.List[i].RulerTotal += v.Ruler
resp.List[i].ArtworkNumAll++
switch v.ReviewStatus {
case artistInfoArtwork.ReviewAuditStatus_Pass:
resp.List[i].RulerTotalPassed += v.Ruler
resp.List[i].ArtworkNumPassed++
case artistInfoArtwork.ReviewAuditStatus_Failed:
resp.List[i].RulerTotalNoPassed += v.Ruler
resp.List[i].ArtworkNumNoPassed++
case artistInfoArtwork.ReviewAuditStatus_Pending:
resp.List[i].RulerTotalPending += v.Ruler
resp.List[i].ArtworkNumPending++
}
}
}
} else if req.Mode == 2 { //复审历史记录页面
for i, thisArtist := range resp.List {
//2. 统计各个复审状态下的画作数量
//2.1 拿到当前待审核的画作数据
history, err := service.GrpcArtistInfoArtworkImpl.GetArtworkBaseAuditHistoryList(c, &artistInfoArtwork.GetArtworkBaseAuditHistoryListRequest{
Query: &artistInfoArtwork.ArtworkBaseAuditHistoryData{
ArtistUid: thisArtist.ArtistUid,
Node: 2,
},
Page: 1,
PageSize: -1,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetViewReviewArtistStaticList:GetArtworkBaseAuditHistoryList Err", "查询失败")
return
}
var artworkUids []string
for _, v := range history.List {
artworkUids = append(artworkUids, "'"+v.ArtworkUid+"'")
}
var req2 = &artistInfoArtwork.GetViewReviewArtworkListRequest{Page: 1, PageSize: -1}
req2.Where = fmt.Sprintf("artwork_uid in (%s)", strings.Join(artworkUids, ","))
artworkResp, err := service.GrpcArtistInfoArtworkImpl.GetViewReviewArtworkList(c, req2)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetViewReviewArtistStaticList:GetViewReviewArtworkList Err", "查询失败")
return
}
//2.5 统计当前审批的画作数量
resp.List[i].RulerTotal = 0
resp.List[i].RulerTotalPassed = 0
resp.List[i].RulerTotalNoPassed = 0
resp.List[i].RulerTotalPending = 0
resp.List[i].ArtworkNumAll = 0
resp.List[i].ArtworkNumNoPassed = 0
resp.List[i].ArtworkNumPassed = 0
resp.List[i].ArtworkNumPending = 0
for _, v := range artworkResp.List {
resp.List[i].RulerTotal += v.Ruler
resp.List[i].ArtworkNumAll++
switch v.ReviewStatus {
case artistInfoArtwork.ReviewAuditStatus_Pass:
resp.List[i].RulerTotalPassed += v.Ruler
resp.List[i].ArtworkNumPassed++
case artistInfoArtwork.ReviewAuditStatus_Failed:
resp.List[i].RulerTotalNoPassed += v.Ruler
resp.List[i].ArtworkNumNoPassed++
case artistInfoArtwork.ReviewAuditStatus_Pending:
resp.List[i].RulerTotalPending += v.Ruler
resp.List[i].ArtworkNumPending++
}
}
}
}
service.ResponseList(c, resp.List,
service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"),
service.OptionAddField_ArtshowCount("artistUid"))
}
// 批量查询ArtworkBaseAuditHistory
func (a *artworkSupplement) GetArtworkBaseAuditHistoryList(c *gin.Context) {
var req GetArtworkBaseAuditHistoryListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq artistInfoArtwork.GetArtworkBaseAuditHistoryListRequest
asUtil.RequestDataConvert(&req, &protoReq)
protoReq.Where = "(node=1 AND audit_status=7) OR node=2"
resp, err := service.GrpcArtistInfoArtworkImpl.GetArtworkBaseAuditHistoryList(c, &protoReq)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetArtworkBaseAuditHistoryList Err", "查询失败")
return
}
service.ResponseList(c, resp.List,
service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"),
service.OptionAddField_ArtshowCount("artistUid"),
)
}
// 批量查询ViewArtworkSupplementDetail
func (a *artworkSupplement) GetViewArtworkSupplementDetailList(c *gin.Context) {
var req GetViewArtworkSupplementDetailListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq = artistInfoArtwork.GetViewArtworkSupplementDetailListRequest{Query: &artistInfoArtwork.ViewArtworkSupplementDetailData{}}
asUtil.RequestDataConvert(&req, &protoReq)
if req.SupplementAuditStatus != 0 {
protoReq.Query.SupplementAuditStatus = req.SupplementAuditStatus
}
// 配置排序
var order []string
if req.SortField != "" {
var orderType = "asc"
if req.SortOrder == "descend" {
orderType = "desc"
}
order = append(order, fmt.Sprintf("%s %s", utils.CamelToSnake(req.SortField), orderType))
protoReq.Order = strings.Join(order, ",")
}
switch req.History {
case 1:
protoReq.Query.LockStatus = 2
case 2:
protoReq.Query.LockStatus = 3
}
resp, err := service.GrpcArtistInfoArtworkImpl.GetViewArtworkSupplementDetailList(c, &protoReq)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetViewArtworkSupplementDetailList Err", "查询失败")
return
}
service.ResponseList(c, resp.List,
service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"),
service.OptionAddField_ArtshowCount("artistUid"),
)
}
// 批量查询ReviewAuditMessage
func (a *artworkSupplement) GetReviewAuditMessageList(c *gin.Context) {
var req GetReviewAuditMessageListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq = artistInfoArtwork.GetReviewAuditMessageListRequest{Query: &artistInfoArtwork.ReviewAuditMessageData{}}
asUtil.RequestDataConvert(&req, &protoReq)
protoReq.Query.History = &artistInfoArtwork.ArtworkBaseAuditHistoryData{
ArtworkName: req.ArtworkName,
ArtistName: req.ArtistName,
ArtistUid: req.ArtistUid,
ArtworkUid: req.ArtworkUid,
Tnum: req.Tnum,
Tfnum: req.Tfnum,
}
resp, err := service.GrpcArtistInfoArtworkImpl.GetReviewAuditMessageList(c, &protoReq)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetReviewAuditMessageList Err", "查询失败")
return
}
if resp != nil && resp.Total > 0 {
//查询画家的画展次数
var artistUidList []string
for _, v := range resp.List {
if v.History != nil && v.History.ArtistUid != "" {
artistUidList = append(artistUidList, v.History.ArtistUid)
}
}
countList, _ := service.GrpcArtShowImpl.ArtistExhibitionCount(context.Background(), &artShow.ArtistExhibitionCountReq{ArtistUid: artistUidList})
//增加artistShowCount字段
jsonBytes, _ := json.Marshal(resp.List)
var mapList []map[string]any
json.Unmarshal(jsonBytes, &mapList)
fmt.Println("mapList len: ", len(mapList))
fmt.Println("resp.list len: ", len(resp.List))
for i, v := range mapList {
if v["history"] != nil {
artistUid := v["history"].(map[string]any)["artistUid"].(string)
found := false
for _, countInfo := range countList.ArtistShowCount {
if countInfo.ArtistUid == artistUid {
found = true
mapList[i]["history"].(map[string]any)["artistShowCount"] = fmt.Sprintf("%s(%d)",
mapList[i]["history"].(map[string]any)["artistName"], countInfo.ShowCount)
break
}
}
if !found {
mapList[i]["history"].(map[string]any)["artistShowCount"] = fmt.Sprintf("%s(0)",
mapList[i]["history"].(map[string]any)["artistName"])
}
}
}
service.ResponseList(c, mapList, service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"))
} else {
service.ResponseList(c, resp.List, service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"))
}
}
func (a *artworkSupplement) GetReviewAuditMessageStatic(c *gin.Context) {
//var req GetReviewAuditMessageListRequest
//if err := c.ShouldBindJSON(&req); err != nil {
// service.Error(c, e.InvalidParams, err, "无效参数")
// return
//}
//var protoReq = artistInfoArtwork.GetReviewAuditMessageListRequest{Query: &artistInfoArtwork.ReviewAuditMessageData{}}
//asUtil.RequestDataConvert(&req, &protoReq)
resp, err := service.GrpcArtistInfoArtworkImpl.GetReviewAuditMessageStatic(c, &artistInfoArtwork.GetReviewAuditMessageStaticRequest{})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GetReviewAuditMessageList Err", "查询失败")
return
}
if resp == nil {
resp = &artistInfoArtwork.GetReviewAuditMessageStaticResp{}
}
service.Success(c, resp)
}
// 更新ReviewAuditMessage
func (a *artworkSupplement) UpdateReviewAuditMessage(c *gin.Context) {
var req artistInfoArtwork.ReviewAuditMessageData
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
_, err := service.GrpcArtistInfoArtworkImpl.UpdateReviewAuditMessage(c, &req)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "GrpcArtistInfoArtworkImpl.UpdateReviewAuditMessage Err", "更新失败")
return
}
service.Success(c)
}
// 删除ReviewAuditMessage
func (a *artworkSupplement) DeleteReviewAuditMessage(c *gin.Context) {
var req artistInfoArtwork.DeleteReviewAuditMessageRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
_, err := service.GrpcArtistInfoArtworkImpl.DeleteReviewAuditMessage(c, &req)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "DeleteReviewAuditMessage Err", "删除失败")
return
}
service.Success(c)
}