get_employee_search_logic.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. var userId string
  37. var departmentId float64
  38. var organizationID uint64
  39. if _, ok := claims["userId"]; ok {
  40. userId = claims["userId"].(string)
  41. departmentId = claims["deptId"].(float64)
  42. organizationID = uint64(departmentId)
  43. isLogin = true
  44. }
  45. employeeIds := make([]uint64, 0)
  46. if isLogin {
  47. allocAgentItem, err := l.svcCtx.DB.AllocAgent.Query().Where(
  48. allocagent.Or(
  49. allocagent.UserIDEQ(userId),
  50. allocagent.OrganizationID(organizationID),
  51. ),
  52. ).Only(l.ctx)
  53. if err != nil {
  54. l.Logger.Errorf("getEmployeeSearch err: %v", err)
  55. if !ent.IsNotFound(err) {
  56. return nil, errorx.NewApiInternalError("获取智能体信息失败")
  57. }
  58. } else {
  59. employeeIds = append(employeeIds, allocAgentItem.Agents...)
  60. }
  61. }
  62. var data *ent.EmployeePageList
  63. if !isLogin || len(employeeIds) == 0 {
  64. var predicates []predicate.Employee
  65. //predicates = append(predicates, employee.OrganizationIDEQ(organizationId))
  66. if req.Title != nil && *req.Title != "" {
  67. predicates = append(predicates, employee.TitleContains(*req.Title))
  68. }
  69. if req.CategoryId != nil && *req.CategoryId > 0 {
  70. predicates = append(predicates, employee.CategoryIDEQ(*req.CategoryId))
  71. }
  72. data, err = l.svcCtx.DB.Employee.Query().Where(predicates...).WithEmWorkExperiences().WithEmTutorial().Page(l.ctx, req.Page, req.PageSize)
  73. if err != nil {
  74. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  75. }
  76. } else {
  77. data, err = l.svcCtx.DB.Employee.Query().Where(employee.IDIn(employeeIds...)).WithEmWorkExperiences().WithEmTutorial().Page(l.ctx, req.Page, req.PageSize)
  78. }
  79. resp := &types.EmployeeListResp{}
  80. resp.Msg = errormsg.Success
  81. resp.Data.Total = data.PageDetails.Total
  82. for _, v := range data.List {
  83. workExperience := make([]types.WorkExperienceInfo, 0, len(v.Edges.EmWorkExperiences))
  84. for _, work := range v.Edges.EmWorkExperiences {
  85. workExperience = append(workExperience, types.WorkExperienceInfo{
  86. BaseIDInfo: types.BaseIDInfo{
  87. Id: &work.ID,
  88. CreatedAt: pointy.GetPointer(work.CreatedAt.UnixMilli()),
  89. UpdatedAt: pointy.GetPointer(work.UpdatedAt.UnixMilli()),
  90. },
  91. EmployeeId: &work.EmployeeID,
  92. Company: &work.Company,
  93. StartDate: pointy.GetPointer(work.StartDate.UnixMilli()),
  94. StartDateStr: pointy.GetPointer(work.StartDate.Format("2006-01-02 15:04:05")),
  95. EndDate: pointy.GetPointer(work.EndDate.UnixMilli()),
  96. EndDateStr: pointy.GetPointer(work.EndDate.Format("2006-01-02 15:04:05")),
  97. Experience: &work.Experience,
  98. })
  99. }
  100. tutorial := make([]types.TutorialInfo, 0, len(v.Edges.EmTutorial))
  101. for _, tt := range v.Edges.EmTutorial {
  102. tutorial = append(tutorial, types.TutorialInfo{
  103. BaseIDInfo: types.BaseIDInfo{
  104. Id: &tt.ID,
  105. CreatedAt: pointy.GetPointer(tt.CreatedAt.UnixMilli()),
  106. UpdatedAt: pointy.GetPointer(tt.UpdatedAt.UnixMilli()),
  107. },
  108. EmployeeId: &tt.EmployeeID,
  109. Content: &tt.Content,
  110. Title: &tt.Title,
  111. Index: &tt.Index,
  112. })
  113. }
  114. //sceneList := getEmployeeConfig(l, v.Scene)
  115. //switchInList := getEmployeeConfig(l, v.SwitchIn)
  116. resp.Data.Data = append(resp.Data.Data,
  117. types.EmployeeInfo{
  118. BaseIDInfo: types.BaseIDInfo{
  119. Id: &v.ID,
  120. CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
  121. UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
  122. },
  123. Title: &v.Title,
  124. Avatar: &v.Avatar,
  125. Tags: &v.Tags,
  126. HireCount: &v.HireCount,
  127. ServiceCount: &v.ServiceCount,
  128. AchievementCount: &v.AchievementCount,
  129. Intro: &v.Intro,
  130. Estimate: &v.Estimate,
  131. Skill: &v.Skill,
  132. AbilityType: &v.AbilityType,
  133. Scene: &v.Scene,
  134. //SceneList: sceneList,
  135. SwitchIn: &v.SwitchIn,
  136. //SwitchInList: switchInList,
  137. //Tutorial: tutorial,
  138. VideoUrl: &v.VideoURL,
  139. //WorkExperience: workExperience,
  140. CategoryId: &v.CategoryID,
  141. })
  142. }
  143. return resp, nil
  144. }
  145. func getEmployeeConfig(l *GetEmployeeSearchLogic, ids string) []types.EmployeeConfigInfo {
  146. sceneList := make([]types.EmployeeConfigInfo, 0)
  147. sceneIds := FormatIds(ids)
  148. if len(sceneIds) == 0 {
  149. return sceneList
  150. }
  151. employeeConfigList, err := l.svcCtx.DB.EmployeeConfig.Query().Where(
  152. employeeconfig.IDIn(sceneIds...),
  153. ).All(l.ctx)
  154. if err == nil && len(employeeConfigList) > 0 {
  155. for _, val := range employeeConfigList {
  156. sceneList = append(sceneList, types.EmployeeConfigInfo{
  157. BaseIDInfo: types.BaseIDInfo{
  158. Id: &val.ID,
  159. CreatedAt: pointy.GetPointer(val.CreatedAt.UnixMilli()),
  160. UpdatedAt: pointy.GetPointer(val.UpdatedAt.UnixMilli()),
  161. },
  162. Stype: &val.Stype,
  163. Title: &val.Title,
  164. Photo: &val.Photo,
  165. })
  166. }
  167. }
  168. return sceneList
  169. }