get_employee_search_logic.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package employee
  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/zeromicro/go-zero/core/errorx"
  7. "wechat-api/ent"
  8. "wechat-api/ent/allocagent"
  9. "wechat-api/ent/employee"
  10. "wechat-api/ent/employeeconfig"
  11. "wechat-api/ent/predicate"
  12. "wechat-api/internal/utils/dberrorhandler"
  13. jwtutils "wechat-api/internal/utils/jwt"
  14. "wechat-api/internal/svc"
  15. "wechat-api/internal/types"
  16. "github.com/zeromicro/go-zero/core/logx"
  17. )
  18. type GetEmployeeSearchLogic struct {
  19. logx.Logger
  20. ctx context.Context
  21. svcCtx *svc.ServiceContext
  22. }
  23. func NewGetEmployeeSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetEmployeeSearchLogic {
  24. return &GetEmployeeSearchLogic{
  25. Logger: logx.WithContext(ctx),
  26. ctx: ctx,
  27. svcCtx: svcCtx}
  28. }
  29. func (l *GetEmployeeSearchLogic) GetEmployeeSearch(req *types.EmployeeListReq, tokenStr string) (*types.EmployeeListResp, error) {
  30. //organizationId := l.ctx.Value("organizationId").(uint64)
  31. var isLogin bool
  32. claims, err := jwtutils.ParseJwtToken(l.svcCtx.Config.Auth.AccessSecret, tokenStr)
  33. if err != nil {
  34. isLogin = false
  35. }
  36. userId := claims["userId"].(string)
  37. departmentId := claims["deptId"].(float64)
  38. organizationID := uint64(departmentId)
  39. isLogin = true
  40. employeeIds := make([]uint64, 0)
  41. allocagent, err := l.svcCtx.DB.AllocAgent.Query().Where(
  42. allocagent.Or(
  43. allocagent.UserIDEQ(userId),
  44. allocagent.OrganizationID(organizationID),
  45. ),
  46. ).Only(l.ctx)
  47. if err != nil {
  48. if !ent.IsNotFound(err) {
  49. return nil, errorx.NewApiInternalError("获取智能体信息失败")
  50. }
  51. } else {
  52. employeeIds = append(employeeIds, allocagent.Agents...)
  53. }
  54. var data *ent.EmployeePageList
  55. if !isLogin || len(employeeIds) == 0 {
  56. var predicates []predicate.Employee
  57. //predicates = append(predicates, employee.OrganizationIDEQ(organizationId))
  58. if req.Title != nil && *req.Title != "" {
  59. predicates = append(predicates, employee.TitleContains(*req.Title))
  60. }
  61. if req.CategoryId != nil && *req.CategoryId > 0 {
  62. predicates = append(predicates, employee.CategoryIDEQ(*req.CategoryId))
  63. }
  64. data, err = l.svcCtx.DB.Employee.Query().Where(predicates...).WithEmWorkExperiences().WithEmTutorial().Page(l.ctx, req.Page, req.PageSize)
  65. if err != nil {
  66. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  67. }
  68. } else {
  69. data, err = l.svcCtx.DB.Employee.Query().Where(employee.IDIn(employeeIds...)).WithEmWorkExperiences().WithEmTutorial().Page(l.ctx, req.Page, req.PageSize)
  70. }
  71. resp := &types.EmployeeListResp{}
  72. resp.Msg = errormsg.Success
  73. resp.Data.Total = data.PageDetails.Total
  74. for _, v := range data.List {
  75. workExperience := make([]types.WorkExperienceInfo, 0, len(v.Edges.EmWorkExperiences))
  76. for _, work := range v.Edges.EmWorkExperiences {
  77. workExperience = append(workExperience, types.WorkExperienceInfo{
  78. BaseIDInfo: types.BaseIDInfo{
  79. Id: &work.ID,
  80. CreatedAt: pointy.GetPointer(work.CreatedAt.UnixMilli()),
  81. UpdatedAt: pointy.GetPointer(work.UpdatedAt.UnixMilli()),
  82. },
  83. EmployeeId: &work.EmployeeID,
  84. Company: &work.Company,
  85. StartDate: pointy.GetPointer(work.StartDate.UnixMilli()),
  86. StartDateStr: pointy.GetPointer(work.StartDate.Format("2006-01-02 15:04:05")),
  87. EndDate: pointy.GetPointer(work.EndDate.UnixMilli()),
  88. EndDateStr: pointy.GetPointer(work.EndDate.Format("2006-01-02 15:04:05")),
  89. Experience: &work.Experience,
  90. })
  91. }
  92. tutorial := make([]types.TutorialInfo, 0, len(v.Edges.EmTutorial))
  93. for _, tt := range v.Edges.EmTutorial {
  94. tutorial = append(tutorial, types.TutorialInfo{
  95. BaseIDInfo: types.BaseIDInfo{
  96. Id: &tt.ID,
  97. CreatedAt: pointy.GetPointer(tt.CreatedAt.UnixMilli()),
  98. UpdatedAt: pointy.GetPointer(tt.UpdatedAt.UnixMilli()),
  99. },
  100. EmployeeId: &tt.EmployeeID,
  101. Content: &tt.Content,
  102. Title: &tt.Title,
  103. Index: &tt.Index,
  104. })
  105. }
  106. //sceneList := getEmployeeConfig(l, v.Scene)
  107. //switchInList := getEmployeeConfig(l, v.SwitchIn)
  108. resp.Data.Data = append(resp.Data.Data,
  109. types.EmployeeInfo{
  110. BaseIDInfo: types.BaseIDInfo{
  111. Id: &v.ID,
  112. CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
  113. UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
  114. },
  115. Title: &v.Title,
  116. Avatar: &v.Avatar,
  117. Tags: &v.Tags,
  118. HireCount: &v.HireCount,
  119. ServiceCount: &v.ServiceCount,
  120. AchievementCount: &v.AchievementCount,
  121. Intro: &v.Intro,
  122. Estimate: &v.Estimate,
  123. Skill: &v.Skill,
  124. AbilityType: &v.AbilityType,
  125. Scene: &v.Scene,
  126. //SceneList: sceneList,
  127. SwitchIn: &v.SwitchIn,
  128. //SwitchInList: switchInList,
  129. //Tutorial: tutorial,
  130. VideoUrl: &v.VideoURL,
  131. //WorkExperience: workExperience,
  132. CategoryId: &v.CategoryID,
  133. })
  134. }
  135. return resp, nil
  136. }
  137. func getEmployeeConfig(l *GetEmployeeSearchLogic, ids string) []types.EmployeeConfigInfo {
  138. sceneList := make([]types.EmployeeConfigInfo, 0)
  139. sceneIds := FormatIds(ids)
  140. if len(sceneIds) == 0 {
  141. return sceneList
  142. }
  143. employeeConfigList, err := l.svcCtx.DB.EmployeeConfig.Query().Where(
  144. employeeconfig.IDIn(sceneIds...),
  145. ).All(l.ctx)
  146. if err == nil && len(employeeConfigList) > 0 {
  147. for _, val := range employeeConfigList {
  148. sceneList = append(sceneList, types.EmployeeConfigInfo{
  149. BaseIDInfo: types.BaseIDInfo{
  150. Id: &val.ID,
  151. CreatedAt: pointy.GetPointer(val.CreatedAt.UnixMilli()),
  152. UpdatedAt: pointy.GetPointer(val.UpdatedAt.UnixMilli()),
  153. },
  154. Stype: &val.Stype,
  155. Title: &val.Title,
  156. Photo: &val.Photo,
  157. })
  158. }
  159. }
  160. return sceneList
  161. }