get_employee_search_logic.go 6.1 KB

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