fonchain-artistinfo/cmd/internal/logic/artistinfo_artwork.go

298 lines
11 KiB
Go
Raw Normal View History

2023-02-24 16:30:57 +00:00
// Package logic -----------------------------
// @file : artistinfo_artwork.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/2/24 22:26
// -------------------------------------------
package logic
import (
"context"
2023-02-24 16:30:57 +00:00
"errors"
2023-03-10 09:27:10 +00:00
"fmt"
2023-03-24 04:13:09 +00:00
"strings"
2023-02-24 16:30:57 +00:00
"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
2023-03-13 06:24:11 +00:00
"github.com/fonchain/fonchain-artistinfo/pb/artist"
2023-02-24 16:30:57 +00:00
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoArtwork"
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoUser"
"github.com/fonchain/fonchain-artistinfo/pb/artwork_query"
"github.com/fonchain/fonchain-artistinfo/pkg/m"
"github.com/fonchain/fonchain-artistinfo/pkg/service"
2023-03-13 07:54:22 +00:00
"github.com/fonchain/fonchain-artistinfo/pkg/util/stime"
"google.golang.org/protobuf/types/known/emptypb"
2023-02-24 16:30:57 +00:00
)
type IArtistInfoArtwork interface {
2023-02-26 11:59:43 +00:00
GetArtworkLockDetail(request *artistInfoArtwork.GetArtworkLockDetailRequest) (res *artistInfoArtwork.ArtistLockInfo, err error)
CreateArtworkLockRecord(req *artistInfoArtwork.CreateArtworkLockRecordReq) (res *artistInfoArtwork.ArtworkCommonNoParams, err error)
ArtworkLockAction(req *artistInfoArtwork.ArtworkLockActionRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error)
2023-02-24 16:30:57 +00:00
GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (res *artistInfoArtwork.ArtworkLockList, err error)
2023-02-26 11:59:43 +00:00
GetArtworkLockHistoryGroup(request *artistInfoArtwork.GetArtworkLockHistoryRequest) (res *artistInfoArtwork.GetArtworkLockHistoryResponse, err error)
DeleteArtworkRecord(req *artistInfoArtwork.DeleteArtworkRecordRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error)
2023-02-24 16:30:57 +00:00
}
var _ IArtistInfoArtwork = new(ArtistInfoArtworkLogic)
type ArtistInfoArtworkLogic struct{}
func (a ArtistInfoArtworkLogic) GetArtworkLockDetail(request *artistInfoArtwork.GetArtworkLockDetailRequest) (res *artistInfoArtwork.ArtistLockInfo, err error) {
data, err := dao.GetArtworkLockDetail(request.ArtworkUid)
if err != nil {
return
}
res = &artistInfoArtwork.ArtistLockInfo{
ArtistUid: data.ArtistUid,
ArtworkUid: data.ArtworkUid,
Status: data.Status,
LockTime: data.LockTime,
CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(),
DeletedAt: int64(data.DeletedAt),
BaseAuditStatus: int32(data.BaseAuditStatus),
BaseAuditMark: data.BaseAuditMark,
BaseAuditMark2: data.BaseAuditMark2,
SupplementAuditStatus: int32(data.SupplementAuditStatus),
SupplementAuditMark: data.SupplementAuditMark,
SupplementAuditMark2: data.SupplementAuditMark2,
AuditFlowIndex: int32(data.AuditFlowIndex),
2023-03-03 07:28:55 +00:00
BaseEditable: data.BaseEditable(),
SupplementEditable: data.SupplementEditable(),
}
return
}
func (ArtistInfoArtworkLogic) CreateArtworkLockRecord(req *artistInfoArtwork.CreateArtworkLockRecordReq) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
2023-02-24 16:30:57 +00:00
err = dao.CreateArtworkLockRecord(&model.ArtworkLockRecord{
ArtistUid: req.ArtistUid,
ArtworkUid: req.ArtworkUid,
Status: req.Status,
LockTime: req.LockTime,
})
return
}
func (ArtistInfoArtworkLogic) ArtworkLockAction(req *artistInfoArtwork.ArtworkLockActionRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
2023-02-24 16:30:57 +00:00
switch req.Lock {
case 2:
2023-03-02 09:22:10 +00:00
err = dao.BatchLockArtworks(req.ArtistUid, req.LockTime)
2023-02-24 16:30:57 +00:00
case 3:
err = dao.BatchUnlockArtworks(req.ArtistUid)
default:
err = errors.New("lock值错误")
}
return
}
func (ArtistInfoArtworkLogic) GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (res *artistInfoArtwork.ArtworkLockList, err error) {
res = &artistInfoArtwork.ArtworkLockList{}
res, err = dao.GetArtworkLockRecords(req)
return
}
func (a ArtistInfoArtworkLogic) GetArtworkLockHistoryGroup(request *artistInfoArtwork.GetArtworkLockHistoryRequest) (res *artistInfoArtwork.GetArtworkLockHistoryResponse, err error) {
// 查询解锁的画作
unlockArtworkList, err := dao.GetArtworkLockRecords(&artistInfoArtwork.GetArtworkLockRecordsRequest{
ArtistUid: request.ArtistUid,
QueryType: artistInfoArtwork.ArtworkQueryMode_AllUnlockArtwork,
})
if err != nil {
return nil, err
}
if len(unlockArtworkList.Data) == 0 {
return nil, nil
}
res = &artistInfoArtwork.GetArtworkLockHistoryResponse{}
var artworkUidList []string
for _, v := range unlockArtworkList.Data {
artworkUidList = append(artworkUidList, v.ArtworkUid)
}
2023-03-10 09:27:10 +00:00
fmt.Println("artworkUidList", artworkUidList)
//查询画作预览列表
previewListRes, err := service.ArtworkQueryImpl.ArtworkPreviewList(context.Background(), &artwork_query.ArtworkPreviewListRequest{
Page: 1,
PageSize: -1,
ArtworkUids: artworkUidList,
})
if err != nil {
return nil, err
}
2023-03-10 09:27:10 +00:00
fmt.Println("previewListRes count", len(previewListRes.Data))
var thisLockTime = ""
var groupIndex = -1
for _, v := range unlockArtworkList.Data {
var newGroup bool
if thisLockTime != v.LockTime {
thisLockTime = v.LockTime
newGroup = true
groupIndex++
2023-03-10 09:27:10 +00:00
} else {
continue
}
if newGroup {
res.GroupList = append(res.GroupList, &artistInfoArtwork.ArtworkLockRecord{
LockGroup: v.LockTime,
DataList: []*artistInfoArtwork.ArtworkPreviewInfo{},
})
}
for _, artwork := range previewListRes.Data {
res.GroupList[groupIndex].DataList = append(res.GroupList[groupIndex].DataList, &artistInfoArtwork.ArtworkPreviewInfo{
ArtistUuid: artwork.ArtistUuid,
ArtworkName: artwork.ArtworkName,
Length: artwork.Length,
Width: artwork.Width,
Ruler: artwork.Ruler,
CreatedAddress: strings.Split(artwork.CreatedAddress, ""),
ArtistPhoto: artwork.ArtistPhoto,
HdPic: artwork.HdPic,
ArtworkUid: artwork.ArtworkUid,
CreatedDate: artwork.CreateDate,
LockStatus: int32(v.Status),
BaseAuditStatus: v.BaseAuditStatus,
BaseAuditMark: v.BaseAuditMark,
BaseAuditMark2: v.BaseAuditMark2,
SupplementAuditStatus: v.SupplementAuditStatus,
SupplementAuditMark: v.SupplementAuditMark,
SupplementAuditMark2: v.SupplementAuditMark2,
2023-03-10 09:27:10 +00:00
AuditFlowIndex: v.AuditFlowIndex,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
DeletedAt: v.DeletedAt,
})
}
}
2023-03-10 09:27:10 +00:00
fmt.Println("previewListRes count", len(previewListRes.Data))
return
}
func (ArtistInfoArtworkLogic) DeleteArtworkRecord(req *artistInfoArtwork.DeleteArtworkRecordRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
//检查画作锁定情况
for _, v := range req.ArtworkUids {
if dao.HasBeenLocked(v) {
return nil, errors.New(m.ERROR_ISLOCK)
}
}
2023-02-24 16:30:57 +00:00
err = dao.DeletedArtworkLockRecord(req.ArtworkUids...)
return
}
func (a ArtistInfoArtworkLogic) UpdateArtworkAuditStatus(request *artistInfoArtwork.UpdateArtworkAuditStatusRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
if request.ArtworkUid != "" {
err = dao.UpdateAuditStatus(request.ArtworkUid, request.AuditStatus, request.AuditMark, request.AuditMark2, request.FlowIndex)
} else if request.ArtworkUids != nil && len(request.ArtworkUids) > 0 {
err = dao.BatchUpdateAuditStatus(request.ArtworkUids, request.AuditStatus, request.AuditMark, request.AuditMark2, request.FlowIndex)
} else {
return nil, errors.New("画作uid不能为空")
}
return
}
// CheckArtworkEditable 检查画作的可编辑状态
// followIndex 2基本信息审核 3补充信息审核
func (a ArtistInfoArtworkLogic) CheckArtworkEditable(request *artistInfoArtwork.ArtworkUidRequest, followIndex int) (res *artistInfoArtwork.CheckArtworkEditableResponse, err error) {
res = &artistInfoArtwork.CheckArtworkEditableResponse{}
2023-03-01 00:34:45 +00:00
lockDetail, err := dao.GetArtworkLockDetail(request.ArtworkUid)
if err != nil {
return nil, err
}
if followIndex == 2 {
res.Editable = lockDetail.BaseEditable()
} else if followIndex == 3 {
res.Editable = lockDetail.SupplementEditable()
2023-03-01 00:34:45 +00:00
}
return
}
func (a ArtistInfoArtworkLogic) GenerateArtworkSupplementInfo(request *artistInfoArtwork.ArtworkUidsRequest) (*emptypb.Empty, error) {
//更新画作流程
err := dao.GenerateArtworkSupplementInfo(request.ArtworkUids)
return nil, err
2023-03-13 06:24:11 +00:00
}
func (a ArtistInfoArtworkLogic) ArtworkStatic(request *artistInfoArtwork.ArtistArtworkStaticRequest) (res *artistInfoArtwork.ArtistArtworkStaticResponse, err error) {
//查询画家宝中认证成功的用户
2023-03-27 02:07:41 +00:00
userList, total, err := dao.GetViewUserList(&artistInfoUser.FindUsersRequest{
2023-03-24 04:13:09 +00:00
// ArtistRealName: request.ArtistKeyWords,
Keyword: request.ArtistKeyWords,
Page: int32(request.Page),
PageSize: int32(request.PageSize),
IsArtist: true,
})
if err != nil {
return nil, err
}
2023-03-27 01:52:16 +00:00
if len(userList) == 0 {
return nil, nil
}
var artistUids []string
for _, v := range userList {
artistUids = append(artistUids, v.ArtistUid)
}
//查询对应的画家信息
2023-03-13 06:24:11 +00:00
var gender int32 = -1
2023-03-13 07:54:22 +00:00
if request.ArtistGender == 1 {
2023-03-13 06:24:11 +00:00
gender = 0
2023-03-13 07:54:22 +00:00
} else if request.ArtistGender == 2 {
2023-03-13 06:24:11 +00:00
gender = 1
}
//查询匹配的画家数据列表
artistList, err := service.GrpcArtistImpl.ArtistList(context.Background(), &artist.ArtistListRequest{
2023-03-27 02:07:41 +00:00
// Keyword: request.ArtistKeyWords,
Page: 1,
PageSize: -1,
2023-03-13 06:24:11 +00:00
Gender: gender,
2023-03-27 02:08:24 +00:00
Uids: artistUids, //直接搜会导致Count值不对手动筛选
2023-03-13 06:24:11 +00:00
})
if err != nil {
return nil, err
}
2023-03-13 06:24:11 +00:00
//查询这些画家审核通过的画作数据统计
res = &artistInfoArtwork.ArtistArtworkStaticResponse{
2023-03-27 01:52:16 +00:00
Page: int64(artistList.Page),
PageSize: int64(request.PageSize),
2023-03-27 02:07:41 +00:00
Total: total,
2023-03-13 06:24:11 +00:00
}
viewDatas, err := dao.PassedArtworkStatic(request, artistUids)
if err != nil {
return nil, err
}
for i, v := range viewDatas {
var (
penName string
stageName string
artworkTotal int64
rulerTotal int64
passedRulerTotal int64
passedArtworkTotal int64
)
//统计画家素有画作的总数和总平尺数
artworkTotal, rulerTotal = dao.CountAllArtworkTotal(v.ArtistUid)
//统计审核通过的画作总数和平尺总数
passedArtworkTotal, passedRulerTotal = dao.CountArtworkTotalWhichAuditPassed(v.ArtistUid)
//补充画家信息
for _, artistData := range artistList.Data {
if artistData.Uid == v.ArtistUid {
penName = artistData.PenName
stageName = artistData.StageName
}
}
//补充画作信息
res.Data = append(res.Data, &artistInfoArtwork.ArtistArtworkStaticStaticData{
Idx: int64(i + 1),
IsLock: v.IsLock,
ArtistUid: v.ArtistUid,
LatestLockTime: v.LatestLockTime,
2023-03-13 07:54:22 +00:00
LatestUpdatedAt: stime.TimeToString(v.LatestUpdatedAt, stime.Format_Normal_YMDhms),
2023-03-13 06:24:11 +00:00
RealName: v.RealName,
PenName: penName,
StageName: stageName,
ArtworkTotal: artworkTotal,
RulerTotal: rulerTotal,
PassedRulerTotal: passedRulerTotal,
PassedArtworkTotal: passedArtworkTotal,
})
}
return
}