get_api_avatar_config_logic.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package avatar
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. avatar20220130 "github.com/alibabacloud-go/avatar-20220130/v2/client"
  7. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  8. "github.com/zeromicro/go-zero/core/errorx"
  9. "strconv"
  10. "wechat-api/ent/wxcard"
  11. "wechat-api/hook/aliyun"
  12. "wechat-api/internal/utils/dberrorhandler"
  13. "wechat-api/internal/svc"
  14. "wechat-api/internal/types"
  15. "github.com/zeromicro/go-zero/core/logx"
  16. )
  17. type GetApiAvatarConfigLogic struct {
  18. logx.Logger
  19. ctx context.Context
  20. svcCtx *svc.ServiceContext
  21. }
  22. func NewGetApiAvatarConfigLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetApiAvatarConfigLogic {
  23. return &GetApiAvatarConfigLogic{
  24. Logger: logx.WithContext(ctx),
  25. ctx: ctx,
  26. svcCtx: svcCtx}
  27. }
  28. func (l *GetApiAvatarConfigLogic) GetApiAvatarConfig(req *types.AvatarConfigReq) (*types.AvatarConfigResp, error) {
  29. userId := l.ctx.Value("userId").(uint64)
  30. card, err := l.svcCtx.DB.WxCard.Query().Where(wxcard.ID(*req.CardId)).Only(l.ctx)
  31. if err != nil {
  32. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  33. }
  34. if card.AiInfo == "" {
  35. return nil, errorx.NewInvalidArgumentError("AiInfo is empty")
  36. }
  37. var jsonData aliyun.AiTypes
  38. err = json.Unmarshal([]byte(card.AiInfo), &jsonData)
  39. if err != nil {
  40. return nil, errorx.NewInvalidArgumentError(err.Error())
  41. }
  42. var aiData *avatar20220130.StartInstanceResponseBodyData
  43. if jsonData.AiType == 1 { // 阿里云数字人
  44. userIdStr := strconv.Itoa(int(userId))
  45. aiData, err = aliyun.StartInstance(userIdStr, aliyun.GetBizID(userId))
  46. fmt.Printf("aliData=%v error=%v \n", aiData, err)
  47. if err != nil {
  48. return nil, errorx.NewInternalError(err.Error())
  49. }
  50. } else if jsonData.AiType == 2 { //TODO 小冰
  51. }
  52. return &types.AvatarConfigResp{
  53. BaseDataInfo: types.BaseDataInfo{
  54. Code: 0,
  55. Msg: errormsg.Success,
  56. },
  57. Data: types.AvatarInfo{
  58. RequestId: aiData.RequestId,
  59. SessionId: aiData.SessionId,
  60. Token: aiData.Token,
  61. Channel: types.Channel{
  62. ChannelId: aiData.Channel.ChannelId,
  63. Token: aiData.Channel.Token,
  64. Type: aiData.Channel.Type,
  65. ExpiredTime: aiData.Channel.ExpiredTime,
  66. Nonce: aiData.Channel.Nonce,
  67. UserId: aiData.Channel.UserId,
  68. AppId: aiData.Channel.AppId,
  69. UserInfoInChannel: aiData.Channel.UserInfoInChannel,
  70. Gslb: aiData.Channel.Gslb,
  71. },
  72. },
  73. }, nil
  74. }