fonchain-fiee/pkg/service/oneQueryExt.go
2025-02-19 14:24:15 +08:00

775 lines
26 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
}