project_info.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package youngee_talent_service
  2. import (
  3. "fmt"
  4. "reflect"
  5. "youngmini_server/app/dao"
  6. "youngmini_server/app/model/youngee_talent_model"
  7. "github.com/gogf/gf/frame/g"
  8. "github.com/gogf/gf/net/ghttp"
  9. )
  10. type projectStatus int
  11. const (
  12. projectStatusCreating = iota + 1
  13. projectStatusReviewing
  14. projectStatusReviewed
  15. projectStatusRecruiting
  16. projectStatusRecruited
  17. projectStatusPaying
  18. projectStatusPaid
  19. projectStatusInvalid
  20. projectStatusInProgress
  21. projectStatusClosed
  22. )
  23. // 获取项目信息列表service
  24. func GetProjectInfoList(r *ghttp.Request) *TalentHttpResult {
  25. pageIndex := r.GetQueryInt("idx", -1)
  26. cntPerPage := r.GetQueryInt("cnt", -1)
  27. platform := r.Get("platform")
  28. projectForm := r.Get("projectform")
  29. feeForm := r.Get("feeform")
  30. if pageIndex == -1 || cntPerPage == -1 || cntPerPage == 0 {
  31. return &TalentHttpResult{Code: -1, Msg: "参数错误"}
  32. }
  33. // 如果有平台的过滤条件,则将平台列表保存于platformList
  34. var platformList []interface{}
  35. if platform != nil {
  36. if reflect.TypeOf(platform).Kind() != reflect.Slice {
  37. return &TalentHttpResult{Code: -2, Msg: "搜索条件平台类型错误"}
  38. }
  39. platformList = make([]interface{}, 0)
  40. platformList = platform.([]interface{})
  41. }
  42. // 如果有任务形式的过滤条件,则将过滤条件保存于taskModeList
  43. var projectFormList []interface{}
  44. if projectForm != nil {
  45. if reflect.TypeOf(projectForm).Kind() != reflect.Slice {
  46. return &TalentHttpResult{Code: -3, Msg: "搜索条件任务形式错误"}
  47. }
  48. projectFormList = make([]interface{}, 0)
  49. projectFormList = projectForm.([]interface{})
  50. }
  51. // 如果有稿费形式的过滤条件,则将过滤条件保存于taskModeList
  52. var feeFormList []interface{}
  53. if feeForm != nil {
  54. if reflect.TypeOf(feeForm).Kind() != reflect.Slice {
  55. return &TalentHttpResult{Code: -3, Msg: "搜索条件稿费形式错误"}
  56. }
  57. feeFormList = make([]interface{}, 0)
  58. feeFormList = feeForm.([]interface{})
  59. }
  60. // 构造查询的条件
  61. startId := pageIndex * cntPerPage
  62. whereStr := fmt.Sprintf("project_status = %d or project_status = %d", projectStatusRecruiting, projectStatusRecruited)
  63. if platformList != nil {
  64. whereStr = whereStr + " and project_platform in ("
  65. for _, v := range platformList {
  66. whereStr += v.(string) + ", "
  67. }
  68. whereStr = whereStr[0 : len(whereStr)-2]
  69. whereStr += ")"
  70. }
  71. if projectFormList != nil {
  72. whereStr += " and project_form in ("
  73. for _, v := range projectFormList {
  74. whereStr += v.(string) + ", "
  75. }
  76. whereStr = whereStr[0 : len(whereStr)-2]
  77. whereStr += ")"
  78. }
  79. if feeFormList != nil {
  80. whereStr += " and fee_form in ("
  81. for _, v := range feeFormList {
  82. whereStr += v.(string) + ", "
  83. }
  84. whereStr = whereStr[0 : len(whereStr)-2]
  85. whereStr += ")"
  86. }
  87. // 判断请求页面是否超过最大页面
  88. c, err := g.DB().Model(dao.ProjectInfo.Table).Fields("project_id").
  89. Count()
  90. // c, err := g.DB().Model("project_info").WithAll().Where(whereStr).Count()
  91. if c <= 0 {
  92. return &TalentHttpResult{Code: -4, Msg: "has no project", Data: nil}
  93. }
  94. maxPage := c / cntPerPage
  95. if c%cntPerPage > 0 {
  96. maxPage += 1
  97. }
  98. if pageIndex+1 > maxPage {
  99. return &TalentHttpResult{Code: -5, Msg: "over max page"}
  100. }
  101. var projectInfoList = youngee_talent_model.ProjectInfoList{}
  102. err = g.DB().Model("project_info").WithAll().
  103. Where(whereStr).
  104. Order("recruit_ddl DESC, project_id").Limit(startId, cntPerPage).Scan(&projectInfoList.ProjectInfos)
  105. if err != nil {
  106. return &TalentHttpResult{Code: -6, Msg: "查询数据库失败"}
  107. }
  108. projectInfoList.MaxPage = maxPage
  109. return &TalentHttpResult{Code: 0, Msg: "success", Data: projectInfoList}
  110. }
  111. // 获取单个项目详情service
  112. func GetProjectDetail(r *ghttp.Request) *TalentHttpResult {
  113. pid := r.GetQueryInt("projectid", 0)
  114. if pid == 0 {
  115. return &TalentHttpResult{Code: -2, Msg: "parse param error"}
  116. }
  117. var ProjectDetail *youngee_talent_model.ProjectDetail
  118. err := g.DB().Model(youngee_talent_model.ProjectDetail{}).WithAll().Where("project_id", pid).Scan(&ProjectDetail)
  119. if err != nil {
  120. return &TalentHttpResult{Code: -3, Msg: "data query failed"}
  121. }
  122. return &TalentHttpResult{Code: 0, Msg: "success", Data: ProjectDetail}
  123. }