775 lines
26 KiB
Go
775 lines
26 KiB
Go
|
// Package service -----------------------------
|
|||
|
// @file : oneQueryExt.go
|
|||
|
// @author : JJXu
|
|||
|
// @contact : wavingbear@163.com
|
|||
|
// @time : 2024/2/4 13:53
|
|||
|
// -------------------------------------------
|
|||
|
package service
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"dubbo.apache.org/dubbo-go/v3/common/logger"
|
|||
|
dubboConfig "dubbo.apache.org/dubbo-go/v3/config"
|
|||
|
"encoding/json"
|
|||
|
"errors"
|
|||
|
"fmt"
|
|||
|
"github.com/dorlolo/simpleRequest"
|
|||
|
artShow "github.com/fonchain_enterprise/fonchain-main/api/artShow"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/artist"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/artwork"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/artwork_query"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/cache"
|
|||
|
"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/utils"
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
"github.com/go-redis/redis"
|
|||
|
"github.com/robfig/cron/v3"
|
|||
|
"go.uber.org/zap"
|
|||
|
"io"
|
|||
|
"net/http"
|
|||
|
"strings"
|
|||
|
"sync"
|
|||
|
)
|
|||
|
|
|||
|
var (
|
|||
|
ArtistOneQueryAuditLock sync.RWMutex
|
|||
|
ArtistOneQueryAuditCacheKey = "artist:one_query_audit"
|
|||
|
)
|
|||
|
var (
|
|||
|
ArtworkOneQueryAuditLock sync.RWMutex
|
|||
|
ArtworkOneQueryAuditCacheKey = "artwork:one_query_audit"
|
|||
|
)
|
|||
|
|
|||
|
type ArtistOneQueryAuditReq struct {
|
|||
|
artist.OneQueryAuditReq
|
|||
|
UseCache bool `json:"useCache"` //暂存数据
|
|||
|
}
|
|||
|
|
|||
|
func ArtistOneQueryAudit(c *gin.Context) {
|
|||
|
fmt.Println("一键查询-画家管理-核验")
|
|||
|
var req ArtistOneQueryAuditReq
|
|||
|
var err error
|
|||
|
if err = c.ShouldBindJSON(&req); err != nil {
|
|||
|
fmt.Println("参数解析失败", err.Error())
|
|||
|
logger.Errorf("ArtistOneQueryAudit ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 1")
|
|||
|
//查询数据详情
|
|||
|
auditRecordRes, err := GrpcArtistImpl.GetArtistOneQueryCheckRecordDetail(c, &artist.GetArtistOneQueryCheckRecordByIdRequest{Id: req.ID})
|
|||
|
if err != nil {
|
|||
|
ErrorWithMark(c, e.Failed, err, "GetArtistOneQueryCheckRecordDetail Err:"+err.Error(), "更新失败")
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 2")
|
|||
|
//判断是否需要暂存数据
|
|||
|
if cache.RedisClient == nil {
|
|||
|
logger.Error("redis 客户端没有启动")
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 3")
|
|||
|
ArtistOneQueryAuditLock.Lock()
|
|||
|
defer ArtistOneQueryAuditLock.Unlock()
|
|||
|
value := cache.RedisClient.Get(ArtistOneQueryAuditCacheKey)
|
|||
|
var cacheData = make(map[string]string)
|
|||
|
if value.Err() == nil {
|
|||
|
var cacheBytes []byte
|
|||
|
err2 := value.Scan(&cacheBytes)
|
|||
|
if err2 != nil {
|
|||
|
logger.Error("查询暂存数据失败", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "查询暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
err = json.Unmarshal(cacheBytes, &cacheData)
|
|||
|
if err != nil {
|
|||
|
Error(c, e.Failed, err, "暂存数据解析失败")
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 4")
|
|||
|
// 按要求同步到总部
|
|||
|
go func() {
|
|||
|
if req.Resume2 != "" && config.Env == "prod" {
|
|||
|
artistProfile, errs := GrpcArtistImpl.ArtistInfo(context.Background(), &artist.ArtistInfoRequest{
|
|||
|
Uid: auditRecordRes.ArtistUID,
|
|||
|
})
|
|||
|
if errs != nil {
|
|||
|
logger.Error("同步画家简介2到总部失败", zap.Error(errs))
|
|||
|
} else {
|
|||
|
Resume2SyncToHeadOffice(artistProfile.ProfileInfo.Name, artistProfile.ProfileInfo.Phone, req.Resume2, auditRecordRes.ArtistUID)
|
|||
|
}
|
|||
|
}
|
|||
|
}()
|
|||
|
fmt.Println("一键查询-画家管理-核验 5")
|
|||
|
if req.UseCache { //暂存Resume2
|
|||
|
cacheData[auditRecordRes.ArtistUID] = req.Resume2
|
|||
|
cacheBytes, err := json.Marshal(&cacheData)
|
|||
|
logger.Error("暂存数据失败1111", zap.Error(err))
|
|||
|
if err != nil {
|
|||
|
Error(c, e.Failed, err, "暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
_, err = cache.RedisClient.Set(ArtistOneQueryAuditCacheKey, cacheBytes, 0).Result()
|
|||
|
if err != nil {
|
|||
|
logger.Error("暂存数据失败2222", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "暂存成功", struct{}{})
|
|||
|
return
|
|||
|
} else {
|
|||
|
fmt.Println("一键查询-画家管理-核验 6")
|
|||
|
//如果是待画家确认,则判断是否存在邀请函,如果已存在则改为已核验
|
|||
|
if req.OneQueryAuditReq.CheckStatus == 4 {
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.1")
|
|||
|
recordResp, errs := GrpcArtistImpl.GetArtistOneQueryCheckRecordDetail(c, &artist.GetArtistOneQueryCheckRecordByIdRequest{Id: req.ID})
|
|||
|
if errs != nil {
|
|||
|
ErrorWithMark(c, e.Failed, errs, "GetArtistOneQueryCheckRecordDetail Err", "更新失败")
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.1.1")
|
|||
|
letterResp, errs := GrpcArtistImpl.GetInvitationLetterList(c, &artist.GetInvitationLetterListRequest{Page: 1, PageSize: 1, Query: &artist.InvitationLetterData{ShowUid: recordResp.ShowUid}})
|
|||
|
if errs != nil {
|
|||
|
ErrorWithMark(c, e.Failed, errs, "GetInvitationLetterList Err", "更新失败")
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.1.2")
|
|||
|
if letterResp.Total > 0 {
|
|||
|
req.OneQueryAuditReq.CheckStatus = 3
|
|||
|
req.OneQueryAuditReq.ConfirmType = 1
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.1.3")
|
|||
|
//魏鹏说这段代码用不到了 2024-12-12
|
|||
|
//魏鹏说审核通过调用这个接口
|
|||
|
//_, _ = GrpcExhibitionFClientImpl.Verification(c, &exhibition_f.VerificationReq{Type: 1, ShowUid: recordResp.ShowUid})
|
|||
|
//fmt.Println("一键查询-画家管理-核验 6.1.4")
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.2")
|
|||
|
resp, errs := GrpcArtistImpl.OneQueryAudit(c, &req.OneQueryAuditReq)
|
|||
|
if errs != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, errs.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.3")
|
|||
|
//清理暂存
|
|||
|
if req.CheckStatus == 3 {
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.4")
|
|||
|
if _, ok := cacheData[auditRecordRes.ArtistUID]; ok {
|
|||
|
delete(cacheData, auditRecordRes.ArtistUID)
|
|||
|
cacheBytes, err := json.Marshal(&cacheData)
|
|||
|
if err != nil {
|
|||
|
logger.Error("暂存数据清理失败1111", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "暂存数据清理失败")
|
|||
|
return
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.5")
|
|||
|
_, err = cache.RedisClient.Set(ArtistOneQueryAuditCacheKey, cacheBytes, 0).Result()
|
|||
|
if err != nil {
|
|||
|
logger.Error("清理暂存数据失败2222", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "清理暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println("一键查询-画家管理-核验 6.6")
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
type ArtworkOneQueryAuditRequest struct {
|
|||
|
ArtworkUid string `json:"artworkUid"`
|
|||
|
CheckStatus int32 `json:"checkStatus"`
|
|||
|
EduEvaluation string `json:"eduEvaluation"`
|
|||
|
}
|
|||
|
|
|||
|
func ArtworkOneQueryAudit(c *gin.Context) {
|
|||
|
var req ArtworkOneQueryAuditRequest
|
|||
|
var err error
|
|||
|
if err = c.ShouldBindJSON(&req); err != nil {
|
|||
|
fmt.Println("参数解析失败", err.Error())
|
|||
|
logger.Error("ArtworkOneQueryAudit ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
if cache.RedisClient == nil {
|
|||
|
logger.Error("redis 客户端没有启动")
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
go func() {
|
|||
|
var artworkProfileRes *artwork_query.GetArtworkProfileListResp
|
|||
|
artworkProfileRes, err = GrpcArtworkQueryImpl.GetArtworkProfileList(context.Background(), &artwork_query.GetArtworkProfileListRequest{Query: &artwork_query.ArtworkProfileData{Uuid: req.ArtworkUid}, Page: 1, PageSize: 1})
|
|||
|
if err != nil {
|
|||
|
zap.L().Error("ArtworkOneQueryAudit.GetArtworkProfileList Err", zap.Error(err))
|
|||
|
return
|
|||
|
}
|
|||
|
SyncArtworkResume2ToHeadOffice(artworkProfileRes.List[0].Tfnum, req.EduEvaluation)
|
|||
|
}()
|
|||
|
//判断是否需要暂存数据
|
|||
|
ArtworkOneQueryAuditLock.Lock()
|
|||
|
defer ArtworkOneQueryAuditLock.Unlock()
|
|||
|
value := cache.RedisClient.Get(ArtworkOneQueryAuditCacheKey)
|
|||
|
var cacheData = make(map[string]string)
|
|||
|
if value.Err() == nil {
|
|||
|
var cacheBytes []byte
|
|||
|
err2 := value.Scan(&cacheBytes)
|
|||
|
if err2 != nil {
|
|||
|
logger.Error("查询暂存数据失败", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "查询暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
err = json.Unmarshal(cacheBytes, &cacheData)
|
|||
|
if err != nil {
|
|||
|
Error(c, e.Failed, err, "暂存数据解析失败")
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
if req.CheckStatus == 4 { //暂存Resume2
|
|||
|
cacheData[req.ArtworkUid] = req.EduEvaluation
|
|||
|
cacheBytes, err := json.Marshal(&cacheData)
|
|||
|
if err != nil {
|
|||
|
logger.Error("暂存数据失败1111", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
_, err = cache.RedisClient.Set(ArtworkOneQueryAuditCacheKey, cacheBytes, 0).Result()
|
|||
|
if err != nil {
|
|||
|
logger.Error("暂存数据失败2222", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "暂存成功", struct{}{})
|
|||
|
return
|
|||
|
} else {
|
|||
|
var protoReq = &artwork.OneQueryAuditReq{
|
|||
|
ArtworkUid: req.ArtworkUid,
|
|||
|
CheckStatus: req.CheckStatus,
|
|||
|
EduEvaluation: req.EduEvaluation,
|
|||
|
}
|
|||
|
resp, errs := GrpcArtworkImpl.OneQueryAudit(context.Background(), protoReq)
|
|||
|
if errs != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, errs.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
//清理暂存
|
|||
|
if req.CheckStatus == 3 && len(cacheData) > 0 {
|
|||
|
if _, ok := cacheData[req.ArtworkUid]; ok {
|
|||
|
delete(cacheData, req.ArtworkUid)
|
|||
|
cacheBytes, err := json.Marshal(&cacheData)
|
|||
|
if err != nil {
|
|||
|
logger.Error("ArtworkOneQueryAudit缓存数据解析失败", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "暂存数据清理失败")
|
|||
|
return
|
|||
|
}
|
|||
|
_, err = cache.RedisClient.Set(ArtworkOneQueryAuditCacheKey, cacheBytes, 0).Result()
|
|||
|
if err != nil {
|
|||
|
logger.Error("ArtworkOneQueryAudit清理暂存数据失败", zap.Error(err))
|
|||
|
Error(c, e.Failed, err, "清理暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
func GetArtistUidListFromOneQueryDataCache() (artistList []string, err error) {
|
|||
|
ArtistOneQueryAuditLock.RLock()
|
|||
|
//获取画家的缓存数据
|
|||
|
value := cache.RedisClient.Get(ArtistOneQueryAuditCacheKey)
|
|||
|
//获取需要删除的画家缓存
|
|||
|
deleteValue, deleteErrs := cache.RedisClient.Get("artist_one_query_audit_delete_cache").Result()
|
|||
|
ArtistOneQueryAuditLock.RUnlock()
|
|||
|
var cacheBytes []byte
|
|||
|
var cacheData = make(map[string]string)
|
|||
|
if value.Err() == nil {
|
|||
|
err2 := value.Scan(&cacheBytes)
|
|||
|
if err2 != nil {
|
|||
|
logger.Error("GetArtistListFromOneQueryDataCache Err:获取暂存数据失败", zap.Error(err2))
|
|||
|
err = errors.New("获取暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
err = json.Unmarshal(cacheBytes, &cacheData)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
if deleteErrs == nil && deleteValue != "" {
|
|||
|
deleteArtistUidList := strings.Split(deleteValue, ",")
|
|||
|
for _, deleteArtistUid := range deleteArtistUidList {
|
|||
|
if _, ok := cacheData[deleteArtistUid]; ok {
|
|||
|
delete(cacheData, deleteArtistUid)
|
|||
|
}
|
|||
|
}
|
|||
|
cache.RedisClient.Set("artist_one_query_audit_delete_cache", nil, 0)
|
|||
|
}
|
|||
|
}
|
|||
|
if len(cacheData) == 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
for k, _ := range cacheData {
|
|||
|
artistList = append(artistList, k)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
type AristOneQueryRespData struct {
|
|||
|
artist.OneQueryResp_Info
|
|||
|
CacheContent string `json:"CacheContent"`
|
|||
|
QueryShowTime string `json:"QueryShowTime"` //用户筛选的画展时间
|
|||
|
//邀请函中的数据
|
|||
|
HasInvitationLetter bool `json:"HasInvitationLetter"` //存在邀请函
|
|||
|
SuggestionStatus int32 `json:"SuggestionStatus"`
|
|||
|
ModifySuggestion string `json:"ModifySuggestion"`
|
|||
|
ShowUid string `json:"ShowUid"`
|
|||
|
//画展包中的数据, 通过邀请函中的ShowUid查询
|
|||
|
ShowName string `json:"ShowName"` //画展名称
|
|||
|
ShowTime string `json:"ShowTime"` //实际画展时间
|
|||
|
PreTime string `json:"PreTime"` //预计画展时间
|
|||
|
}
|
|||
|
|
|||
|
func UpdateArtistOneQueryDataUseCache(data []*artist.OneQueryResp_Info, permission string, queryShowTime string) (resp []*AristOneQueryRespData, err error) {
|
|||
|
fmt.Println("data len", len(data))
|
|||
|
fmt.Println("data len", len(data))
|
|||
|
fmt.Println("data len", len(data))
|
|||
|
if len(data) == 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
resp = []*AristOneQueryRespData{}
|
|||
|
//如果用户角色为model.PermissionPublicize,则从缓存中读取暂存数据
|
|||
|
// 注意这个判断逻辑在本函数中有两处
|
|||
|
var cacheData map[string]string
|
|||
|
cacheData, err = GetOneQueryCacheData()
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
for _, v := range data {
|
|||
|
v := v
|
|||
|
var cacheContent string
|
|||
|
if permission == model.PermissionPublicize {
|
|||
|
if len(cacheData) > 0 {
|
|||
|
resume2, ok := cacheData[v.ArtistUuid]
|
|||
|
if ok {
|
|||
|
cacheContent = resume2
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println("1111showUid:", v.ShowUid)
|
|||
|
resp = append(resp, &AristOneQueryRespData{
|
|||
|
CacheContent: cacheContent,
|
|||
|
QueryShowTime: queryShowTime,
|
|||
|
OneQueryResp_Info: artist.OneQueryResp_Info{
|
|||
|
CardId: v.CardId,
|
|||
|
Tnum: v.Tnum,
|
|||
|
StyleFaction: v.StyleFaction,
|
|||
|
Resume: v.Resume,
|
|||
|
Age: v.Age,
|
|||
|
CaaCertNum: v.CaaCertNum,
|
|||
|
PenName: v.PenName,
|
|||
|
CoopPlatform: v.CoopPlatform,
|
|||
|
Gender: v.Gender,
|
|||
|
Student: v.Student,
|
|||
|
Teacher: v.Teacher,
|
|||
|
NativePlace: v.NativePlace,
|
|||
|
Name: v.Name,
|
|||
|
School: v.School,
|
|||
|
Position: v.Position,
|
|||
|
StageName: v.StageName,
|
|||
|
CaaJoinTime: v.CaaJoinTime,
|
|||
|
ArtistUuid: v.ArtistUuid,
|
|||
|
JoinShow: v.JoinShow,
|
|||
|
Phone: v.Phone,
|
|||
|
Resume2: v.Resume2,
|
|||
|
CheckStatus: v.CheckStatus,
|
|||
|
ShowUid: v.ShowUid,
|
|||
|
ID: v.ID,
|
|||
|
PkUuid: v.PkUuid,
|
|||
|
},
|
|||
|
ShowUid: v.ShowUid,
|
|||
|
})
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func UpdateArtistOneQueryDataUseInvitationLetter(data []*AristOneQueryRespData) error {
|
|||
|
if len(data) == 0 {
|
|||
|
return nil
|
|||
|
}
|
|||
|
var showUids []string
|
|||
|
for _, v := range data {
|
|||
|
showUids = append(showUids, v.ShowUid)
|
|||
|
}
|
|||
|
fmt.Println("showUids:", showUids)
|
|||
|
invitationList, err := GrpcArtistImpl.GetInvitationLetterList(context.Background(), &artist.GetInvitationLetterListRequest{ShowUids: showUids})
|
|||
|
if err != nil {
|
|||
|
logger.Error("UpdateArtistOneQueryDataUseInvitationLetter.GetInvitationLetterList error", zap.Error(err))
|
|||
|
fmt.Println("GrpcArtistImpl.GetInvitationLetterLis err:", err.Error())
|
|||
|
return err
|
|||
|
}
|
|||
|
fmt.Println("invitationList.Total:", invitationList.Total)
|
|||
|
for i, v1 := range data {
|
|||
|
fmt.Println("ShowUid1:", v1.ShowUid)
|
|||
|
var findedLetter bool
|
|||
|
for _, v2 := range invitationList.List {
|
|||
|
v2 := v2
|
|||
|
if v1.ShowUid == v2.ShowUid {
|
|||
|
findedLetter = true
|
|||
|
fmt.Println("ShowUid2:", v2.ShowUid)
|
|||
|
data[i].SuggestionStatus = v2.SuggestionStatus
|
|||
|
data[i].ModifySuggestion = v2.ModifySuggestion
|
|||
|
break
|
|||
|
}
|
|||
|
data[i].HasInvitationLetter = findedLetter
|
|||
|
}
|
|||
|
}
|
|||
|
return nil
|
|||
|
}
|
|||
|
|
|||
|
func UpdateArtistOneQueryDataUseArtShow(data []*AristOneQueryRespData) error {
|
|||
|
if len(data) == 0 {
|
|||
|
return nil
|
|||
|
}
|
|||
|
var showUids []string
|
|||
|
for _, v := range data {
|
|||
|
showUids = append(showUids, v.ShowUid)
|
|||
|
}
|
|||
|
fmt.Println("UpdateArtistOneQueryDataUseArtShow --1")
|
|||
|
showTimeRes, err := GrpcArtShowImpl.GetShowTimeWithShowUid(context.Background(), &artShow.GetShowTimeWithShowUidReq{ShowUids: showUids})
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
fmt.Println("UpdateArtistOneQueryDataUseArtShow --2")
|
|||
|
recordRes, errs := GrpcArtistImpl.GetArtistOneQueryCheckRecordList(context.Background(), &artist.GetArtistOneQueryCheckRecordListRequest{Page: 1, PageSize: -1, ShowUids: showUids})
|
|||
|
if errs != nil {
|
|||
|
return errs
|
|||
|
}
|
|||
|
fmt.Println("UpdateArtistOneQueryDataUseArtShow --3")
|
|||
|
fmt.Printf("UpdateArtistOneQueryDataUseArtShow data:%+v\n\n", data)
|
|||
|
fmt.Printf("UpdateArtistOneQueryDataUseArtShow showTimeRes:%+v\n\n", showTimeRes)
|
|||
|
fmt.Printf("UpdateArtistOneQueryDataUseArtShow recordRes.List:%+v\n\n", showTimeRes)
|
|||
|
for i, v := range data {
|
|||
|
for _, sub := range showTimeRes.Data {
|
|||
|
if v.ShowUid == sub.ShowUid {
|
|||
|
sub := sub
|
|||
|
data[i].PreTime = sub.PreTime
|
|||
|
data[i].ShowTime = sub.ShowTime
|
|||
|
data[i].ShowName = sub.ShowName
|
|||
|
}
|
|||
|
}
|
|||
|
for _, r := range recordRes.List {
|
|||
|
if r.ShowUid == v.ShowUid {
|
|||
|
r := r
|
|||
|
data[i].ConfirmType = r.ConfirmType
|
|||
|
data[i].ConfirmTime = r.ConfirmTime
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println("UpdateArtistOneQueryDataUseArtShow --4")
|
|||
|
return nil
|
|||
|
}
|
|||
|
func GetArtworkUidListFromOneQueryDataCache() (artworkUidList []string, err error) {
|
|||
|
ArtworkOneQueryAuditLock.RLock()
|
|||
|
value := cache.RedisClient.Get(ArtworkOneQueryAuditCacheKey)
|
|||
|
ArtworkOneQueryAuditLock.RUnlock()
|
|||
|
var cacheBytes []byte
|
|||
|
var cacheData = make(map[string]string)
|
|||
|
if value.Err() == nil {
|
|||
|
err2 := value.Scan(&cacheBytes)
|
|||
|
if err2 != nil {
|
|||
|
logger.Error("GetArtworkUidListFromOneQueryDataCache Err:获取暂存数据失败", zap.Error(err2))
|
|||
|
err = errors.New("获取暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
err = json.Unmarshal(cacheBytes, &cacheData)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
if len(cacheData) > 0 {
|
|||
|
for k, _ := range cacheData {
|
|||
|
artworkUidList = append(artworkUidList, k)
|
|||
|
}
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
type ArtworkOneQueryRespData struct {
|
|||
|
artwork_query.OneQueryResp_Info
|
|||
|
CacheContent string `json:"CacheContent"`
|
|||
|
}
|
|||
|
|
|||
|
func UpdateArtworkOneQueryDataUseCache(data []*artwork_query.OneQueryResp_Info, permission string) (resp []ArtworkOneQueryRespData, err error) {
|
|||
|
resp = []ArtworkOneQueryRespData{}
|
|||
|
//判断是否需要暂存数据
|
|||
|
var value *redis.StringCmd
|
|||
|
var cacheData = make(map[string]string)
|
|||
|
//如果是permission=auth_search_training,需要从缓存中获取暂存的画作简介2
|
|||
|
//注意permission这个判断逻辑在本函数中有两个地方
|
|||
|
if permission == "auth_search_training" {
|
|||
|
ArtworkOneQueryAuditLock.RLock()
|
|||
|
value = cache.RedisClient.Get(ArtworkOneQueryAuditCacheKey)
|
|||
|
ArtworkOneQueryAuditLock.RUnlock()
|
|||
|
if value.Err() == nil {
|
|||
|
var cacheBytes []byte
|
|||
|
err2 := value.Scan(&cacheBytes)
|
|||
|
if err2 != nil {
|
|||
|
logger.Error("获取暂存数据失败", zap.Error(err2))
|
|||
|
err = errors.New("获取暂存数据失败")
|
|||
|
return
|
|||
|
}
|
|||
|
err = json.Unmarshal(cacheBytes, &cacheData)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
for _, v := range data {
|
|||
|
v := v
|
|||
|
var cacheContent string
|
|||
|
if permission == "auth_search_training" {
|
|||
|
content, ok := cacheData[v.ArtworkUuid]
|
|||
|
fmt.Println("for:", v.ArtworkUuid, ok, content)
|
|||
|
if ok {
|
|||
|
cacheContent = content
|
|||
|
}
|
|||
|
}
|
|||
|
resp = append(resp, ArtworkOneQueryRespData{
|
|||
|
OneQueryResp_Info: artwork_query.OneQueryResp_Info{
|
|||
|
ArtworkName: v.ArtworkName,
|
|||
|
ArtistName: v.ArtistName,
|
|||
|
Length: v.Length,
|
|||
|
Width: v.Width,
|
|||
|
Ruler: v.Ruler,
|
|||
|
Abstract: v.Abstract,
|
|||
|
Comment: v.Comment,
|
|||
|
ArtworkUuid: v.ArtworkUuid,
|
|||
|
DigiArtImg: v.DigiArtImg,
|
|||
|
EduEvaluation: v.EduEvaluation,
|
|||
|
CheckStatus: v.CheckStatus,
|
|||
|
ArtistUuid: v.ArtistUuid,
|
|||
|
},
|
|||
|
CacheContent: cacheContent,
|
|||
|
})
|
|||
|
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func ArtistOneQueryShowTimePoint(c *gin.Context) {
|
|||
|
var showUidList = []string{}
|
|||
|
recordRes, err := GrpcArtistImpl.GetArtistOneQueryCheckRecordList(c,
|
|||
|
&artist.GetArtistOneQueryCheckRecordListRequest{Query: nil, Where: "check_status = 2 OR check_status=5", Page: 1, PageSize: -1},
|
|||
|
)
|
|||
|
fmt.Println("recordRes.Total:", recordRes.Total)
|
|||
|
if err != nil {
|
|||
|
logger.Error("ArtistOneQueryShowTimePoint Err:", zap.Error(err))
|
|||
|
ResponseData(c, showUidList)
|
|||
|
return
|
|||
|
}
|
|||
|
if len(recordRes.List) == 0 {
|
|||
|
ResponseData(c, showUidList)
|
|||
|
return
|
|||
|
} else {
|
|||
|
for _, v := range recordRes.List {
|
|||
|
showUidList = append(showUidList, v.ShowUid)
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Println("showUidList :", showUidList)
|
|||
|
res, err := GrpcArtShowImpl.GetShowTimeWithShowUid(c, &artShow.GetShowTimeWithShowUidReq{ShowUids: showUidList})
|
|||
|
if err != nil {
|
|||
|
fmt.Println("GetShowTimeWithShowUid err", err.Error())
|
|||
|
ResponseData(c, []struct{}{})
|
|||
|
return
|
|||
|
}
|
|||
|
if len(res.Data) == 0 {
|
|||
|
fmt.Println("GetShowTimeWithShowUid 数据为空")
|
|||
|
ResponseData(c, []struct{}{})
|
|||
|
return
|
|||
|
}
|
|||
|
var showTimeList []string
|
|||
|
for _, v := range res.Data {
|
|||
|
if v.ShowTime != "" {
|
|||
|
showTimeList = append(showTimeList, getYearMonth(v.ShowTime))
|
|||
|
} else if v.PreTime != "" {
|
|||
|
showTimeList = append(showTimeList, getYearMonth(v.PreTime))
|
|||
|
}
|
|||
|
}
|
|||
|
showTimeList = utils.ArrayDeduplicate(showTimeList)
|
|||
|
fmt.Println("ShowTimeList :", showTimeList)
|
|||
|
ResponseData(c, showTimeList)
|
|||
|
}
|
|||
|
func getYearMonth(timeStr string) string {
|
|||
|
items := strings.Split(timeStr, "-")
|
|||
|
return fmt.Sprintf("%s-%s", items[0], items[1])
|
|||
|
}
|
|||
|
|
|||
|
func OneQueryTask(c *cron.Cron) {
|
|||
|
if dubboConfig.GetConsumerService("ArtistInfoUserClientImpl") != nil && dubboConfig.GetConsumerService("ArtistClientImpl") != nil {
|
|||
|
var cronSchedulerSpaceTime = "0 0 * * *" //每天凌晨执行
|
|||
|
if config.Env == "test" || config.Env == "dev" {
|
|||
|
cronSchedulerSpaceTime = "*/1 * * * *" //每分钟执行一次
|
|||
|
}
|
|||
|
_, err := c.AddFunc(cronSchedulerSpaceTime, func() {
|
|||
|
resp, err := GrpcArtistImpl.UpdateOneQueryCheckStatusThatUserNotPerformed(context.Background(), &artist.UpdateOneQueryCheckStatusThatUserNotPerformedReq{})
|
|||
|
if err != nil {
|
|||
|
zap.L().Error("执行定时任务[更新用户在7天内没有确认的'一键查询画家'的审批状态]失败", zap.Error(err))
|
|||
|
}
|
|||
|
//个人简介2同步到总部
|
|||
|
if config.Env == "prod" {
|
|||
|
for _, artistUid := range resp.ArtistUidList {
|
|||
|
artistProfileRes, errs := GrpcArtistImpl.ArtistInfo(context.Background(), &artist.ArtistInfoRequest{Uid: artistUid})
|
|||
|
if errs != nil {
|
|||
|
zap.L().Error("OneQueryTask 获取画家信息失败", zap.Error(errs), zap.String("artistUid", artistUid))
|
|||
|
continue
|
|||
|
}
|
|||
|
cacheData, cacheErr := GetOneQueryCacheData()
|
|||
|
if cacheErr != nil {
|
|||
|
zap.L().Error("OneQueryTask 获取暂存数据失败", zap.Error(cacheErr), zap.String("artistUid", artistUid))
|
|||
|
continue
|
|||
|
}
|
|||
|
var resume2 string
|
|||
|
if len(cacheData) > 0 {
|
|||
|
var ok bool
|
|||
|
resume2, ok = cacheData[artistUid]
|
|||
|
if ok {
|
|||
|
cacheData[artistUid] = resume2
|
|||
|
} else {
|
|||
|
var recordRes *artist.GetArtistOneQueryCheckRecordListResp
|
|||
|
recordRes, err = GrpcArtistImpl.GetArtistOneQueryCheckRecordList(context.Background(), &artist.GetArtistOneQueryCheckRecordListRequest{Query: &artist.ArtistOneQueryCheckRecordData{ArtistUID: artistUid}, Page: 1, PageSize: -1, Order: "id desc"})
|
|||
|
if err != nil {
|
|||
|
zap.L().Error("OneQueryTask 获取画家审核记录失败", zap.Error(err), zap.String("artistUid", artistUid))
|
|||
|
continue
|
|||
|
}
|
|||
|
if recordRes.Total > 0 {
|
|||
|
resume2 = recordRes.List[0].Resume2
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
Resume2SyncToHeadOffice(artistProfileRes.ProfileInfo.Name, artistProfileRes.ProfileInfo.Phone, resume2, artistUid)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
})
|
|||
|
if err != nil {
|
|||
|
zap.L().Error("添加定时任务[[更新用户在7天内没有确认的'一键查询画家'的审批状态]失败", zap.Error(err))
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Resume2SyncToHeadOffice 个人简介2同步到总部
|
|||
|
func Resume2SyncToHeadOffice(artistName, phone, resume2, artistUid string) {
|
|||
|
httpReq := simpleRequest.NewRequest()
|
|||
|
httpReq.Headers().ConentType_json()
|
|||
|
httpReq.Body().Sets(map[string]interface{}{
|
|||
|
"artist_name": artistName,
|
|||
|
"brand_phone": phone,
|
|||
|
"artist_desc": resume2,
|
|||
|
})
|
|||
|
results, errs := httpReq.POST("https://www.tyfon.com.cn/index.php?app=fontree&act=add_brand")
|
|||
|
if errs != nil {
|
|||
|
zap.L().Error("同步画家简介2到总部失败,请求失败", zap.Error(errs), zap.String("artist_uid", artistUid))
|
|||
|
fmt.Println("同步画家简介2到总部失败,请求失败", errs)
|
|||
|
} else {
|
|||
|
var resultBody = struct {
|
|||
|
Code int `json:"code"`
|
|||
|
Msg string `json:"msg"`
|
|||
|
}{}
|
|||
|
_ = json.Unmarshal(results, &resultBody)
|
|||
|
if resultBody.Code != 200 {
|
|||
|
zap.L().Error("同步画家简介2到总部失败,请求失败", zap.Error(errs), zap.String("artist_uid", artistUid), zap.Any("resultBody", resultBody))
|
|||
|
fmt.Println("同步画家简介2到总部失败", resultBody.Msg)
|
|||
|
} else {
|
|||
|
zap.L().Info("同步画家简介2到总部成功", zap.String("artist_uid", artistUid))
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// GetOneQueryCacheData 获取redis中缓存的个人简介2数据 map[{artistUid}]{resume2}
|
|||
|
func GetOneQueryCacheData() (cacheData map[string]string, err error) {
|
|||
|
ArtistOneQueryAuditLock.RLock()
|
|||
|
value := cache.RedisClient.Get(ArtistOneQueryAuditCacheKey)
|
|||
|
ArtistOneQueryAuditLock.RUnlock()
|
|||
|
if value.Err() == nil {
|
|||
|
var cacheBytes []byte
|
|||
|
err2 := value.Scan(&cacheBytes)
|
|||
|
if err2 != nil {
|
|||
|
logger.Error("获取暂存数据失败", zap.Error(err2))
|
|||
|
err = errors.New("获取暂存数据失败")
|
|||
|
}
|
|||
|
fmt.Println("cacheBytes:", string(cacheBytes))
|
|||
|
err = json.Unmarshal(cacheBytes, &cacheData)
|
|||
|
return
|
|||
|
}
|
|||
|
return nil, value.Err()
|
|||
|
}
|
|||
|
|
|||
|
// 同步画家评价2到总部
|
|||
|
func SyncArtworkResume2ToHeadOffice(tfnum, resume2 string) error {
|
|||
|
httpReq := simpleRequest.NewRequest()
|
|||
|
httpReq.Headers().ConentType_json()
|
|||
|
httpReq.Body().Sets(map[string]any{
|
|||
|
"app": "fontree",
|
|||
|
"act": "batch_add_art",
|
|||
|
"art_arr": []map[string]any{
|
|||
|
{
|
|||
|
"cert_id": tfnum,
|
|||
|
"art_desc": resume2,
|
|||
|
},
|
|||
|
},
|
|||
|
})
|
|||
|
resBytes, err := httpReq.POST("https://www.tyfon.com.cn/index.php?app=fontree&act=batch_add_art")
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
var res struct {
|
|||
|
Code int `json:"code"`
|
|||
|
Msg string `json:"msg"`
|
|||
|
}
|
|||
|
_ = json.Unmarshal(resBytes, &res)
|
|||
|
if res.Code != 0 {
|
|||
|
zap.L().Error("同步画作评价2到总部失败", zap.String("msg", res.Msg), zap.Any("res", res), zap.String("tfnum", tfnum))
|
|||
|
} else {
|
|||
|
zap.L().Info("同步画作评价2到总部成功", zap.String("tfnum", tfnum))
|
|||
|
}
|
|||
|
return nil
|
|||
|
}
|
|||
|
func SyncArtworkTest(c *gin.Context) {
|
|||
|
var req = struct {
|
|||
|
Tfnum string `json:"tfnum"`
|
|||
|
Resume2 string `json:"resume2"`
|
|||
|
}{}
|
|||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
fmt.Println("参数解析失败", err.Error())
|
|||
|
logger.Error("SyncArtworkTest ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
err := SyncArtworkResume2ToHeadOffice(req.Tfnum, req.Resume2)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "同步成功", nil)
|
|||
|
}
|
|||
|
|
|||
|
// 下载长文本字符串
|
|||
|
func DownloadIfHttpLongText(resume string) string {
|
|||
|
if strings.HasPrefix(resume, "http") {
|
|||
|
//下载文字内容
|
|||
|
resumeResp, _ := http.Get(resume)
|
|||
|
defer resumeResp.Body.Close()
|
|||
|
body, _ := io.ReadAll(resumeResp.Body)
|
|||
|
if body != nil {
|
|||
|
return string(body)
|
|||
|
}
|
|||
|
}
|
|||
|
return resume
|
|||
|
}
|