get_usage_detail_list_logic.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package UsageDetail
  2. import (
  3. "context"
  4. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  5. "github.com/suyuan32/simple-admin-common/utils/pointy"
  6. "github.com/suyuan32/simple-admin-core/rpc/types/core"
  7. "time"
  8. "wechat-api/ent/predicate"
  9. "wechat-api/ent/usagedetail"
  10. "wechat-api/internal/svc"
  11. "wechat-api/internal/types"
  12. "wechat-api/internal/utils/dberrorhandler"
  13. "github.com/zeromicro/go-zero/core/logx"
  14. )
  15. type GetUsageDetailListLogic struct {
  16. logx.Logger
  17. ctx context.Context
  18. svcCtx *svc.ServiceContext
  19. }
  20. func NewGetUsageDetailListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUsageDetailListLogic {
  21. return &GetUsageDetailListLogic{
  22. Logger: logx.WithContext(ctx),
  23. ctx: ctx,
  24. svcCtx: svcCtx}
  25. }
  26. func (l *GetUsageDetailListLogic) GetUsageDetailList(req *types.UsageDetailListReq) (resp *types.UsageDetailListResp, err error) {
  27. organizationId := l.ctx.Value("organizationId").(uint64)
  28. isAdmin := l.ctx.Value("isAdmin").(bool)
  29. var predicates []predicate.UsageDetail
  30. if !isAdmin {
  31. predicates = append(predicates, usagedetail.OrganizationIDEQ(organizationId))
  32. } else {
  33. if req.OrganizationId != nil && *req.OrganizationId > 0 {
  34. predicates = append(predicates, usagedetail.OrganizationIDEQ(*req.OrganizationId))
  35. }
  36. }
  37. if req.Type != nil && *req.Type > 0 {
  38. predicates = append(predicates, usagedetail.TypeEQ(*req.Type))
  39. }
  40. if req.BotId != nil && *req.BotId != "" {
  41. predicates = append(predicates, usagedetail.BotID(*req.BotId))
  42. }
  43. if req.ReceiverId != nil && *req.ReceiverId != "" {
  44. predicates = append(predicates, usagedetail.ReceiverID(*req.ReceiverId))
  45. }
  46. // 这里是为限制时间段
  47. if req.SearchDate != nil && len(req.SearchDate) == 2 {
  48. startDate, err := time.Parse("2006-01-02 15:04:05", req.SearchDate[0])
  49. if err != nil {
  50. l.Logger.Errorf("时间字符串startDate转换错误: %v", err)
  51. } else {
  52. predicates = append(predicates, usagedetail.CreatedAtGTE(startDate))
  53. }
  54. endDate, err := time.Parse("2006-01-02 15:04:05", req.SearchDate[1])
  55. if err != nil {
  56. l.Logger.Errorf("时间字符串endDate转换错误: %v", err)
  57. } else {
  58. predicates = append(predicates, usagedetail.CreatedAtLTE(endDate))
  59. }
  60. }
  61. data, err := l.svcCtx.DB.UsageDetail.Query().Where(predicates...).Page(l.ctx, req.Page, req.PageSize)
  62. if err != nil {
  63. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  64. }
  65. resp = &types.UsageDetailListResp{}
  66. resp.Msg = errormsg.Success
  67. resp.Data.Total = data.PageDetails.Total
  68. orgaMap := make(map[uint64]string)
  69. for _, v := range data.List {
  70. app := "未知"
  71. if v.App == 1 {
  72. app = "智能回复"
  73. } else if v.App == 2 {
  74. app = "AI角色-优化问题"
  75. } else if v.App == 3 {
  76. app = "AI角色-回复"
  77. } else if v.App == 4 {
  78. app = "SOP-节点判断"
  79. } else if v.App == 5 {
  80. app = "SOP-节点判断"
  81. }
  82. request := v.Request
  83. if v.App == 2 {
  84. request = "问题优化"
  85. } else if v.App == 4 {
  86. request = "节点判断"
  87. }
  88. organizationName := ""
  89. if oname, ok := orgaMap[v.OrganizationID]; ok {
  90. organizationName = oname
  91. } else {
  92. departmentInfo, err := l.svcCtx.CoreRpc.GetDepartmentById(l.ctx, &core.IDReq{Id: v.OrganizationID})
  93. if err == nil {
  94. organizationName = *departmentInfo.Name
  95. orgaMap[v.OrganizationID] = organizationName
  96. }
  97. }
  98. resp.Data.Data = append(resp.Data.Data,
  99. types.UsageDetailInfo{
  100. BaseIDInfo: types.BaseIDInfo{
  101. Id: &v.ID,
  102. CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
  103. //UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
  104. },
  105. //Status: &v.Status,
  106. Type: &v.Type,
  107. BotId: &v.BotID,
  108. ReceiverId: &v.ReceiverID,
  109. App: &app,
  110. //SessionId: &v.SessionID,
  111. Request: &request,
  112. Response: &v.Response,
  113. TotalTokens: &v.TotalTokens,
  114. //PromptTokens: &v.PromptTokens,
  115. //CompletionTokens: &v.CompletionTokens,
  116. OrganizationId: &v.OrganizationID,
  117. OrganizationName: &organizationName,
  118. Model: &v.Model,
  119. })
  120. }
  121. return resp, nil
  122. //return nil, nil
  123. }