get_api_avatar_config_logic.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. "wechat-api/ent/wxcard"
  10. "wechat-api/hook/aliyun"
  11. "wechat-api/internal/utils/dberrorhandler"
  12. "wechat-api/internal/svc"
  13. "wechat-api/internal/types"
  14. "github.com/zeromicro/go-zero/core/logx"
  15. )
  16. type GetApiAvatarConfigLogic struct {
  17. logx.Logger
  18. ctx context.Context
  19. svcCtx *svc.ServiceContext
  20. }
  21. func NewGetApiAvatarConfigLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetApiAvatarConfigLogic {
  22. return &GetApiAvatarConfigLogic{
  23. Logger: logx.WithContext(ctx),
  24. ctx: ctx,
  25. svcCtx: svcCtx}
  26. }
  27. func (l *GetApiAvatarConfigLogic) GetApiAvatarConfig(req *types.AvatarConfigReq) (*types.AvatarConfigResp, error) {
  28. userId := l.ctx.Value("userId").(uint64)
  29. card, err := l.svcCtx.DB.WxCard.Query().Where(wxcard.ID(*req.CardId)).Only(l.ctx)
  30. if err != nil {
  31. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  32. }
  33. if card.AiInfo == "" {
  34. return nil, errorx.NewInvalidArgumentError("AiInfo is empty")
  35. }
  36. var jsonData aliyun.AiTypes
  37. err = json.Unmarshal([]byte(card.AiInfo), &jsonData)
  38. if err != nil {
  39. return nil, errorx.NewInvalidArgumentError(err.Error())
  40. }
  41. var aiData *avatar20220130.StartInstanceResponseBodyData
  42. if jsonData.AiType == 1 { // 阿里云数字人
  43. aiData, err = aliyun.StartInstance(userId, jsonData)
  44. fmt.Printf("aliData=%v error=%v \n", aiData, err)
  45. if err != nil {
  46. return nil, errorx.NewInternalError(err.Error())
  47. }
  48. // 开启的数字人信息入库
  49. bizId := aliyun.GenerateBizID(userId)
  50. _, err := l.svcCtx.DB.AliyunAvatar.Create().
  51. SetNotNilUserID(&userId).
  52. SetNotNilBizID(&bizId).
  53. SetNotNilAccessKeyID(&jsonData.AccessKeyId).
  54. SetNotNilAccessKeySecret(&jsonData.AccessKeySecret).
  55. SetNotNilAppID(&jsonData.AppId).
  56. SetNotNilTenantID(&jsonData.TenantId).
  57. SetNotNilSessionID(aiData.SessionId).
  58. SetResponse(aiData.String()).
  59. SetNotNilToken(aiData.Token).
  60. Save(l.ctx)
  61. if err != nil {
  62. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  63. }
  64. } else if jsonData.AiType == 2 { //TODO 小冰
  65. }
  66. return &types.AvatarConfigResp{
  67. BaseDataInfo: types.BaseDataInfo{
  68. Code: 0,
  69. Msg: errormsg.Success,
  70. },
  71. Data: types.AvatarInfo{
  72. RequestId: aiData.RequestId,
  73. SessionId: aiData.SessionId,
  74. Token: aiData.Token,
  75. Channel: types.Channel{
  76. ChannelId: aiData.Channel.ChannelId,
  77. Token: aiData.Channel.Token,
  78. Type: aiData.Channel.Type,
  79. ExpiredTime: aiData.Channel.ExpiredTime,
  80. Nonce: aiData.Channel.Nonce,
  81. UserId: aiData.Channel.UserId,
  82. AppId: aiData.Channel.AppId,
  83. UserInfoInChannel: aiData.Channel.UserInfoInChannel,
  84. Gslb: aiData.Channel.Gslb,
  85. },
  86. },
  87. }, nil
  88. }