get_api_avatar_config_logic.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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/alibabacloud-go/tea/tea"
  8. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  9. "github.com/zeromicro/go-zero/core/errorx"
  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. aiData, err = aliyun.StartInstance(userId, jsonData)
  45. fmt.Printf("aliData=%v error=%v \n", aiData, err)
  46. if err != nil {
  47. return nil, errorx.NewInternalError(err.Error())
  48. }
  49. // 开启的数字人信息入库
  50. bizId := aliyun.GenerateBizID(userId)
  51. _, err := l.svcCtx.DB.AliyunAvatar.Create().
  52. SetNotNilUserID(&userId).
  53. SetNotNilBizID(&bizId).
  54. SetNotNilAccessKeyID(&jsonData.AccessKeyId).
  55. SetNotNilAccessKeySecret(&jsonData.AccessKeySecret).
  56. SetNotNilAppID(&jsonData.AppId).
  57. SetNotNilTenantID(tea.Uint64(uint64(jsonData.TenantId))).
  58. SetNotNilSessionID(aiData.SessionId).
  59. SetResponse(aiData.String()).
  60. SetNotNilToken(aiData.Token).
  61. Save(l.ctx)
  62. if err != nil {
  63. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  64. }
  65. } else if jsonData.AiType == 2 { //TODO 小冰
  66. }
  67. return &types.AvatarConfigResp{
  68. BaseDataInfo: types.BaseDataInfo{
  69. Code: 0,
  70. Msg: errormsg.Success,
  71. },
  72. Data: types.AvatarInfo{
  73. RequestId: aiData.RequestId,
  74. SessionId: aiData.SessionId,
  75. Token: aiData.Token,
  76. Channel: types.Channel{
  77. ChannelId: aiData.Channel.ChannelId,
  78. Token: aiData.Channel.Token,
  79. Type: aiData.Channel.Type,
  80. ExpiredTime: aiData.Channel.ExpiredTime,
  81. Nonce: aiData.Channel.Nonce,
  82. UserId: aiData.Channel.UserId,
  83. AppId: aiData.Channel.AppId,
  84. UserInfoInChannel: aiData.Channel.UserInfoInChannel,
  85. Gslb: aiData.Channel.Gslb,
  86. },
  87. },
  88. }, nil
  89. }