fonchain-fiee/pkg/service/oneQueryExt.go

775 lines
26 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
// 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
}