get_usage_detail_list_logic.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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 {
  38. predicates = append(predicates, usagedetail.TypeEQ(*req.Type))
  39. }
  40. if req.BotId != nil {
  41. predicates = append(predicates, usagedetail.BotID(*req.BotId))
  42. }
  43. if req.ReceiverId != nil {
  44. predicates = append(predicates, usagedetail.ReceiverID(*req.ReceiverId))
  45. }
  46. // 这里是为限制时间段
  47. if req.StartDate != nil && *req.StartDate != "" {
  48. startDate, err := time.Parse("2006-01-02 15:04:05", *req.StartDate)
  49. if err != nil {
  50. l.Logger.Errorf("时间字符串startDate转换错误: %v", err)
  51. } else {
  52. predicates = append(predicates, usagedetail.CreatedAtGTE(startDate))
  53. }
  54. }
  55. if req.EndDate != nil && *req.EndDate != "" {
  56. endDate, err := time.Parse("2006-01-02 15:04:05", *req.EndDate)
  57. if err != nil {
  58. l.Logger.Errorf("时间字符串endDate转换错误: %v", err)
  59. } else {
  60. predicates = append(predicates, usagedetail.CreatedAtLTE(endDate))
  61. }
  62. }
  63. data, err := l.svcCtx.DB.UsageDetail.Query().Where(predicates...).Page(l.ctx, req.Page, req.PageSize)
  64. if err != nil {
  65. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  66. }
  67. resp = &types.UsageDetailListResp{}
  68. resp.Msg = errormsg.Success
  69. resp.Data.Total = data.PageDetails.Total
  70. orgaMap := make(map[uint64]string)
  71. for _, v := range data.List {
  72. app := "未知"
  73. if v.App == 1 {
  74. app = "智能回复"
  75. } else if v.App == 2 {
  76. app = "AI角色-优化问题"
  77. } else if v.App == 3 {
  78. app = "AI角色-回复"
  79. } else if v.App == 4 {
  80. app = "SOP-节点判断"
  81. } else if v.App == 5 {
  82. app = "SOP-节点判断"
  83. }
  84. request := v.Request
  85. if v.App == 2 {
  86. request = "问题优化"
  87. } else if v.App == 4 {
  88. request = "节点判断"
  89. }
  90. organizationName := ""
  91. if oname, ok := orgaMap[v.OrganizationID]; ok {
  92. organizationName = oname
  93. } else {
  94. departmentInfo, err := l.svcCtx.CoreRpc.GetDepartmentById(l.ctx, &core.IDReq{Id: v.OrganizationID})
  95. if err == nil {
  96. organizationName = *departmentInfo.Name
  97. }
  98. }
  99. resp.Data.Data = append(resp.Data.Data,
  100. types.UsageDetailInfo{
  101. BaseIDInfo: types.BaseIDInfo{
  102. Id: &v.ID,
  103. CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
  104. UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
  105. },
  106. Status: &v.Status,
  107. Type: &v.Type,
  108. BotId: &v.BotID,
  109. ReceiverId: &v.ReceiverID,
  110. App: &app,
  111. SessionId: &v.SessionID,
  112. Request: &request,
  113. Response: &v.Response,
  114. TotalTokens: &v.TotalTokens,
  115. PromptTokens: &v.PromptTokens,
  116. CompletionTokens: &v.CompletionTokens,
  117. OrganizationId: &v.OrganizationID,
  118. OrganizationName: &organizationName,
  119. })
  120. }
  121. return resp, nil
  122. //return nil, nil
  123. }