fonchain-fiee/pkg/service/artistInfo/mailArtwork/mailArtworkMailArtworkHandler.go

492 lines
16 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package mailArtwork
import (
"context"
"errors"
"fmt"
"github.com/fonchain_enterprise/fonchain-main/api/account"
"github.com/fonchain_enterprise/fonchain-main/api/artist"
"github.com/fonchain_enterprise/fonchain-main/api/artistInfoArtwork"
"github.com/fonchain_enterprise/fonchain-main/api/artistInfoUser"
"github.com/fonchain_enterprise/fonchain-main/api/artwork"
"github.com/fonchain_enterprise/fonchain-main/api/mailArtwork"
"github.com/fonchain_enterprise/fonchain-main/pkg/common"
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"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/asUtil"
"github.com/fonchain_enterprise/utils/utils"
"github.com/getsentry/sentry-go"
"github.com/gin-gonic/gin"
"golang.org/x/sync/errgroup"
"net/url"
"strings"
"time"
)
// 创建MailArtwork
func (a *MailArtworkHandler) CreateMailArtwork(c *gin.Context) {
var req mailArtwork.MailArtworkData
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
_, err := service.GrpcMailArtworkImpl.CreateMailArtwork(c, &req)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.Success(c)
}
// 发起寄画
func (a *MailArtworkHandler) ConfirmMailArtwork(c *gin.Context) {
var req mailArtwork.ConfirmMailArtworkRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
if len([]rune(req.Remark)) > 200 {
service.Error(c, e.InvalidParams, nil, "备注内容过长请限制在200字以内")
return
}
// 如果画家为空,则按照画家吧画作进行分组,依次请求
var artistRelArtworkUid = make(map[string][]string)
if req.ArtistUid == "" {
artworkRecords, err := service.GrpcArtistInfoArtworkImpl.GetArtworkLockRecords(c, &artistInfoArtwork.GetArtworkLockRecordsRequest{
Page: 1,
PageSize: int64(len(req.ArtworkUid)),
ArtworkUids: req.ArtworkUid,
})
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "查询失败")
return
}
for _, v := range artworkRecords.Data {
v := v
artistRelArtworkUid[v.ArtistUid] = append(artistRelArtworkUid[v.ArtistUid], v.ArtworkUid)
}
} else {
artistRelArtworkUid[req.ArtistUid] = append(artistRelArtworkUid[req.ArtistUid], req.ArtworkUid...)
}
//用来等待短信全部发送完并获取错误信息
group, _ := errgroup.WithContext(context.Background())
for artistUid, artworkUidList := range artistRelArtworkUid {
artistUid := artistUid
artworkUidList := artworkUidList
var protoReq = mailArtwork.ConfirmMailArtworkRequest{
ArtistUid: artistUid,
ArtworkUid: artworkUidList,
CourierType: req.CourierType,
ReturnReason: req.ReturnReason,
TrackingNo: req.TrackingNo,
Remark: req.Remark,
}
resp, err := service.GrpcMailArtworkImpl.ConfirmMailArtwork(c, &protoReq)
if err != nil {
service.Error(c, e.Failed, err)
return
}
var returnArtworkEditAddress string
if req.CourierType == 2 {
group.Go(func() error {
//发短信
params := url.Values{}
params.Set("groupId", resp.ReturnArtwork[0].GroupId)
returnArtworkEditAddress = config.MailArtwork.EditReturnArtworkUrl + "?" + params.Encode()
fmt.Println("returnArtworkEditAddress:", returnArtworkEditAddress)
returnArtworkEditAddress, err = utils.CreateShortUrl(returnArtworkEditAddress)
if err != nil {
fmt.Println("CreateShortUrl err", err)
sentry.WithScope(func(scope *sentry.Scope) {
scope.SetLevel(sentry.LevelError)
scope.SetExtra("returnArtworkEditAddress", returnArtworkEditAddress)
scope.SetExtra("err", err.Error())
sentry.CaptureMessage("退画管理短网址生成失败")
})
return fmt.Errorf("%s:通知短信生成失败(处理进度:20)", a.GetArtistInfo(artistUid))
}
userRes := &artistInfoUser.GetUserListResp{}
userRes, err = service.GrpcArtistInfoUserImpl.GetUserList(c, &artistInfoUser.GetUserListRequest{
Query: &artistInfoUser.UserData{MgmtArtistUid: artistUid},
Page: 1,
PageSize: 1,
})
if err != nil {
return fmt.Errorf("%s:通知短信生成失败(处理进度:40)", a.GetArtistInfo(artistUid))
}
if userRes.Total == 0 {
return fmt.Errorf("%s:通知短信生成失败(处理进度:60)", a.GetArtistInfo(artistUid))
}
endpoint := strings.Replace(returnArtworkEditAddress, "https://dwz.cn/", "", -1)
_, err = service.AccountProvider.SendCustomMsg(c, &account.SendCustomMsgRequest{
ID: uint64(userRes.List[0].MgmtAccId),
TelNum: userRes.List[0].TelNum,
Url: endpoint,
MId: 203886,
SigNo: 155120,
Domain: config.Domain,
Project: "artistinfo",
})
if err != nil {
return fmt.Errorf("%s:通知短信发送失败(%s)", a.GetArtistInfo(artistUid), err.Error())
}
return nil
})
}
}
if req.CourierType == 2 && req.TrackingNo != "" {
err := group.Wait()
if err != nil {
service.Error(c, e.Failed, err)
return
}
//如果发起退画,需要同步到画作系统
for _, artworkUid := range req.ArtworkUid {
errs := SyncToOutStorageOfArtworkSystem(artworkUid, req.TrackingNo, req.ReturnReason, c.GetHeader(e.Authorization))
if errs != nil {
service.Error(c, e.Failed, errs, errs.Error())
return
}
time.Sleep(200 * time.Millisecond)
}
}
//发起app通知
go func() {
for artistUid, _ := range artistRelArtworkUid {
fmt.Println("artistUid", artistUid)
userRes, errs := service.GrpcArtistInfoUserImpl.GetUserList(c, &artistInfoUser.GetUserListRequest{
Query: &artistInfoUser.UserData{MgmtArtistUid: artistUid},
Page: 1, PageSize: 1,
})
if errs != nil {
fmt.Println("发送app通知失败查询画家用户失败", errs.Error())
}
if userRes.Total == 0 {
fmt.Println("发送app通知失败查询画家用户为空")
}
fmt.Println("userRes.List[0].ID", userRes.List[0].ID)
switch req.CourierType {
case 1:
_ = asPush.NewPusher().ArtworkWaitToBeMailedNotice(userRes.List[0].ID)
// 填写快递单号,变成已寄出时再发送通知
case 2:
if req.TrackingNo != "" {
_ = asPush.NewPusher().ArtworkWaitToBeReceivedNotice(userRes.List[0].ID)
}
}
}
}()
service.Success(c)
}
func (a *MailArtworkHandler) GetArtistInfo(artistUid string) string {
artistProfile, err := service.GrpcArtistImpl.GetArtistProfileList(context.Background(), &artist.GetArtistProfileListRequest{
Query: &artist.ArtistProfileData{Uid: artistUid},
Page: 1,
PageSize: 1,
})
if err != nil {
return ""
}
if artistProfile.Total == 0 {
return ""
}
return fmt.Sprintf("%s[%s]", artistProfile.List[0].Name, artistProfile.List[0].Tnum)
}
// 删除MailArtwork
func (a *MailArtworkHandler) DeleteMailArtwork(c *gin.Context) {
var req mailArtwork.DeleteMailArtworkRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
_, err := service.GrpcMailArtworkImpl.DeleteMailArtwork(c, &req)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.Success(c)
}
// 更新MailArtwork
func (a *MailArtworkHandler) UpdateMailArtwork(c *gin.Context) {
var req mailArtwork.MailArtworkData
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
_, err := service.GrpcMailArtworkImpl.UpdateMailArtwork(c, &req)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.Success(c)
}
// 使用id查询MailArtwork
func (a *MailArtworkHandler) GetMailArtworkDetail(c *gin.Context) {
var req mailArtwork.GetMailArtworkByIdRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
resp, err := service.GrpcMailArtworkImpl.GetMailArtworkDetail(c, &req)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.Success(c, resp)
}
// 批量查询MailArtwork
func (a *MailArtworkHandler) GetMailArtworkList(c *gin.Context) {
var req GetMailArtworkListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq = mailArtwork.GetMailArtworkListRequest{Query: &mailArtwork.MailArtworkData{}}
asUtil.RequestDataConvert(&req, &protoReq)
resp, err := service.GrpcMailArtworkImpl.GetMailArtworkList(c, &protoReq)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.ResponseList(c, resp.List, service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"))
}
// 批量查询 ViewMailArtworkData 包含画作信息
func (a *MailArtworkHandler) GetViewMailArtworkDataList(c *gin.Context) {
var req GetViewMailArtworkDataListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
if req.ArtistUid == "" {
service.Error(c, e.InvalidParams, nil, "画家uid不能为空")
return
}
var protoReq = mailArtwork.GetViewMailArtworkListRequest{Query: &mailArtwork.ViewMailArtworkData{}}
asUtil.RequestDataConvert(&req, &protoReq)
resp, err := service.GrpcMailArtworkImpl.GetViewMailArtworkList(c, &protoReq)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.ResponseList(c, resp.List, service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"))
}
func (a *MailArtworkHandler) CourierEdit(c *gin.Context) {
var req mailArtwork.ArtworkBindCourierRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
//绑定快递信息
resp, err := service.GrpcMailArtworkImpl.ArtworkBindCourier(c, &req)
if err != nil {
service.Error(c, e.Failed, err)
return
}
//将快递信息同步到画作系统的仓储页面
switch req.CourierType {
case 1:
for _, artworkUid := range req.ArtworkUid {
err = SyncToInStorageOfArtworkSystem(artworkUid, req.TrackingNo, c.GetHeader(e.Authorization))
if err != nil {
fmt.Println("同步失败", err.Error())
}
}
case 2:
var thisArtistUid string
for _, artworkUid := range req.ArtworkUid {
returnData, errs := service.GrpcMailArtworkImpl.GetReturnArtworkList(c, &mailArtwork.GetReturnArtworkListRequest{
Query: &mailArtwork.ReturnArtworkData{ArtworkUid: artworkUid},
Page: 1,
PageSize: 1,
Order: "id desc",
})
returnReason := ""
if returnData != nil && len(returnData.List) > 0 {
returnReason = returnData.List[0].ReturnReason
}
if errs == nil {
errs = SyncToOutStorageOfArtworkSystem(artworkUid, req.TrackingNo, returnReason, c.GetHeader(e.Authorization))
if errs != nil {
fmt.Println("同步失败", errs.Error())
}
} else {
fmt.Printf("画作:%s查询失败:%s\n", artworkUid, errs.Error())
}
if returnData != nil && len(returnData.List) > 0 {
thisArtistUid = returnData.List[0].ArtistUid
}
}
if thisArtistUid != "" {
userRes, errs := service.GrpcArtistInfoUserImpl.GetUserList(c, &artistInfoUser.GetUserListRequest{
Query: &artistInfoUser.UserData{MgmtArtistUid: thisArtistUid},
})
if errs == nil {
_ = asPush.NewPusher().ArtworkWaitToBeReceivedNotice(userRes.List[0].ID)
}
}
}
//格式转换
var newResp = MailDetail{}
newResp.Convert(resp.Info, resp.History)
service.Success(c, newResp)
}
func (a *MailArtworkHandler) CourierDetail(c *gin.Context) {
var req mailArtwork.GetCourierInfoByIdRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
if req.Id == 0 {
service.Error(c, e.InvalidParams, errors.New("无效参数"))
return
}
resp, err := service.GrpcMailArtworkImpl.GetCourierInfoDetail(c, &req)
if err != nil {
service.Error(c, e.Failed, err)
return
}
//格式转换
var newResp = MailDetail{}
newResp.Convert(resp.Info, resp.History)
service.Success(c, newResp)
}
func (a *MailArtworkHandler) GetCanSendMailArtworkList(c *gin.Context) {
var req GetCanSendMailArtworkListRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoReq mailArtwork.GetCanSendMailArtworkListRequest
asUtil.RequestDataConvert(&req, &protoReq)
if protoReq.Query == nil || protoReq.Query.ArtistUid == "" {
service.ResponseList(c, []struct{}{}, service.OptionPage(req.Page, req.PageSize, 0), service.OptionMsg("画家uid不能为空"))
return
}
resp, err := service.GrpcMailArtworkImpl.GetCanSendMailArtworkList(c, &protoReq)
if err != nil {
service.Error(c, e.Failed, err)
return
}
service.ResponseList(c, resp.Data, service.OptionPage(resp.Page, resp.PageSize, resp.Total), service.OptionMsg("查询成功"))
}
func (a *MailArtworkHandler) PutInStorage(c *gin.Context) {
var req []PutInStorageRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoRequests []*artwork.UpdateStorageRequest
for _, v := range req {
var storageRequest = &artwork.UpdateStorageRequest{
ArtworkUuid: v.ArtworkUuid,
Type: 1,
Detail: v.Detail,
}
if err := storageRequest.Validate(); err != nil {
err = common.SubstrError(err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
protoRequests = append(protoRequests, storageRequest)
}
// 存储数据到画作系统
var ctx = context.Background()
for i := range protoRequests {
var artworkDetailReq = &artwork.ArtworkDetailRequest{
ArtworkUuid: protoRequests[i].ArtworkUuid,
Type: "1",
}
fmt.Println("service.GrpcArtworkImpl is nil", service.GrpcArtworkImpl == nil)
awDetailInfo, err := service.GrpcArtworkImpl.ArtworkDetail(ctx, artworkDetailReq)
if err != nil {
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
var artistInfoReq artist.ArtistInfoRequest
artistInfoReq.Uid = awDetailInfo.ProfileInfo.ArtistUuid
artistInfo, err := service.GrpcArtistImpl.ArtistInfo(ctx, &artistInfoReq)
if err != nil {
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
protoRequests[i].ArtistData = &artwork.UpdateStorageRequest_ArtistInfo{}
protoRequests[i].ArtistData.ArtistUuid = artistInfo.ProfileInfo.Uid
protoRequests[i].ArtistData.Seqnum = artistInfo.ProfileInfo.Seqnum
protoRequests[i].ArtistData.Tnum = artistInfo.ProfileInfo.Tnum
protoRequests[i].ArtistData.Num = artistInfo.ProfileInfo.Num
_, err = service.GrpcArtworkImpl.UpdateStorage(ctx, protoRequests[i])
if err != nil {
service.Error(c, e.Failed, err)
sentry.WithScope(func(scope *sentry.Scope) {
scope.SetLevel(sentry.LevelError)
scope.SetExtra("err", fmt.Sprintf("%v", err))
//scope.SetFingerprint([]string{"countList"})
sentry.CaptureMessage("寄画-画作系统入库失败")
})
return
}
time.Sleep(200 * time.Millisecond)
}
//更新画家宝的入库状态
{
var updateStorageStatus = mailArtwork.PutInStorageRequest{ArtworkUid: []string{}}
for _, v := range req {
updateStorageStatus.ArtworkUid = append(updateStorageStatus.ArtworkUid, v.ArtworkUuid)
}
_, err := service.GrpcMailArtworkImpl.PutInStorage(c, &updateStorageStatus)
if err != nil {
service.ErrorWithMark(c, e.Failed, err, "UpdateStorage Err", err.Error())
return
}
}
service.Success(c)
}
func (a *MailArtworkHandler) ArtworkCourierGroup(c *gin.Context) {
var req ArtworkCourierGroupRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
var protoRequest = &mailArtwork.GetViewMailArtworkListRequest{
Page: 1,
PageSize: -1,
Where: fmt.Sprintf("artwork_uid in (%s)", "'"+strings.Join(req.ArtworkUid, "','")+"'"),
}
res, err := service.GrpcMailArtworkImpl.GetViewMailArtworkList(c, protoRequest)
if err != nil {
service.Error(c, e.Failed, err, "查询失败")
return
}
service.ResponseList(c, res.List, service.OptionPage(res.Page, res.PageSize, res.Total))
}
func (a *MailArtworkHandler) ShortUrlTest(c *gin.Context) {
var req ShortUrlTestRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err, "无效参数")
return
}
returnArtworkEditAddress, err := utils.CreateShortUrl(req.Url)
if err != nil {
service.Error(c, e.Failed, err, err.Error())
return
}
service.Success(c, map[string]string{
"shortUrl": returnArtworkEditAddress,
})
}