get_employee_search_logic.go 5.7 KB

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