home.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package daytask
  2. import (
  3. "app/commons/model/entity"
  4. "app/commons/services"
  5. "github.com/gin-gonic/gin"
  6. )
  7. // HomeIndex 首页数据
  8. func (s *Server) HomeIndex(c *gin.Context) {
  9. ctx := s.FromContext(c)
  10. db := s.DB()
  11. // 获取Banner列表
  12. banners := make([]*entity.DtBanner, 0)
  13. db.Model(&entity.DtBanner{}).
  14. Where("status = ? AND position = ?", 1, "home").
  15. Order("sort DESC, id DESC").
  16. Limit(5).
  17. Find(&banners)
  18. // 获取任务分类
  19. categories := make([]*entity.DtTaskCategory, 0)
  20. db.Model(&entity.DtTaskCategory{}).
  21. Where("status = ?", 1).
  22. Order("sort ASC").
  23. Find(&categories)
  24. // 获取推荐任务
  25. recommendTasks := make([]*entity.DtTask, 0)
  26. db.Model(&entity.DtTask{}).
  27. Where("status = ? AND is_recommend = ?", 1, 1).
  28. Order("sort DESC, id DESC").
  29. Limit(10).
  30. Find(&recommendTasks)
  31. // 获取普通任务
  32. normalTasks := make([]*entity.DtTask, 0)
  33. db.Model(&entity.DtTask{}).
  34. Where("status = ? AND remain_count > 0", 1).
  35. Order("is_top DESC, created_at DESC").
  36. Limit(20).
  37. Find(&normalTasks)
  38. ctx.OK(gin.H{
  39. "banners": banners,
  40. "categories": categories,
  41. "recommendTasks": recommendTasks,
  42. "normalTasks": normalTasks,
  43. })
  44. }
  45. // HomeBanner Banner列表
  46. func (s *Server) HomeBanner(c *gin.Context) {
  47. ctx := s.FromContext(c)
  48. db := s.DB()
  49. position := c.DefaultQuery("position", "home")
  50. banners := make([]*entity.DtBanner, 0)
  51. db.Model(&entity.DtBanner{}).
  52. Where("status = ? AND position = ?", 1, position).
  53. Order("sort DESC, id DESC").
  54. Find(&banners)
  55. ctx.OK(banners)
  56. }
  57. // HomeHall 大厅数据
  58. func (s *Server) HomeHall(c *gin.Context) {
  59. ctx := s.FromContext(c)
  60. db := s.DB()
  61. // 平台发放收益统计
  62. var totalReward float64
  63. db.Model(&entity.DtUserTask{}).
  64. Where("status = ?", entity.UserTaskStatusCompleted).
  65. Select("COALESCE(SUM(reward_amount), 0)").
  66. Scan(&totalReward)
  67. // 已完成任务数
  68. var completedCount int64
  69. db.Model(&entity.DtUserTask{}).
  70. Where("status = ?", entity.UserTaskStatusCompleted).
  71. Count(&completedCount)
  72. // 任务列表
  73. paging := &services.Pagination{
  74. Current: ctx.QueryInt64("current", 1),
  75. Size: ctx.QueryInt64("size", 20),
  76. }
  77. tasks := make([]*entity.DtTask, 0)
  78. query := db.Model(&entity.DtTask{}).
  79. Where("status = ? AND remain_count > 0", 1)
  80. query.Count(&paging.Total)
  81. paging.Computer()
  82. query.Order("is_top DESC, is_recommend DESC, created_at DESC").
  83. Offset(int(paging.Start)).
  84. Limit(int(paging.Size)).
  85. Find(&tasks)
  86. ctx.OK(gin.H{
  87. "totalReward": totalReward,
  88. "completedCount": completedCount,
  89. "tasks": tasks,
  90. "paging": paging,
  91. })
  92. }
  93. // TaskCategories 任务分类列表
  94. func (s *Server) TaskCategories(c *gin.Context) {
  95. ctx := s.FromContext(c)
  96. db := s.DB()
  97. categories := make([]*entity.DtTaskCategory, 0)
  98. db.Model(&entity.DtTaskCategory{}).
  99. Where("status = ?", 1).
  100. Order("sort ASC").
  101. Find(&categories)
  102. ctx.OK(categories)
  103. }
  104. // TaskList 任务列表
  105. func (s *Server) TaskList(c *gin.Context) {
  106. ctx := s.FromContext(c)
  107. db := s.DB()
  108. categoryId := ctx.QueryInt64("categoryId", 0)
  109. keyword := c.Query("keyword")
  110. paging := &services.Pagination{
  111. Current: ctx.QueryInt64("current", 1),
  112. Size: ctx.QueryInt64("size", 20),
  113. }
  114. query := db.Model(&entity.DtTask{}).
  115. Where("status = ? AND remain_count > 0", 1)
  116. if categoryId > 0 {
  117. query = query.Where("category_id = ?", categoryId)
  118. }
  119. if keyword != "" {
  120. query = query.Where("title LIKE ?", "%"+keyword+"%")
  121. }
  122. query.Count(&paging.Total)
  123. paging.Computer()
  124. tasks := make([]*entity.DtTask, 0)
  125. query.Order("is_top DESC, is_recommend DESC, created_at DESC").
  126. Offset(int(paging.Start)).
  127. Limit(int(paging.Size)).
  128. Find(&tasks)
  129. ctx.OK(gin.H{
  130. "list": tasks,
  131. "paging": paging,
  132. })
  133. }
  134. // TaskDetail 任务详情
  135. func (s *Server) TaskDetail(c *gin.Context) {
  136. ctx := s.FromContext(c)
  137. db := s.DB()
  138. taskId := ctx.QueryInt64("id", 0)
  139. if taskId == 0 {
  140. ctx.Fail("task_id_required")
  141. return
  142. }
  143. // 获取任务
  144. task := &entity.DtTask{}
  145. if err := db.Where("id = ? AND status = ?", taskId, 1).First(task).Error; err != nil {
  146. ctx.Fail("task_not_found")
  147. return
  148. }
  149. // 获取任务分类
  150. category := &entity.DtTaskCategory{}
  151. db.Where("id = ?", task.CategoryId).First(category)
  152. // 获取任务步骤
  153. steps := make([]*entity.DtTaskStep, 0)
  154. db.Model(&entity.DtTaskStep{}).
  155. Where("task_id = ?", taskId).
  156. Order("step_no ASC, sort ASC").
  157. Find(&steps)
  158. ctx.OK(gin.H{
  159. "task": task,
  160. "category": category,
  161. "steps": steps,
  162. })
  163. }
  164. // ConfigGet 获取配置
  165. func (s *Server) ConfigGet(c *gin.Context) {
  166. ctx := s.FromContext(c)
  167. db := s.DB()
  168. key := c.Query("key")
  169. group := c.Query("group")
  170. if key != "" {
  171. // 获取单个配置
  172. config := &entity.DtConfig{}
  173. if err := db.Where("`key` = ?", key).First(config).Error; err != nil {
  174. ctx.Fail("config_not_found")
  175. return
  176. }
  177. ctx.OK(config.Value)
  178. return
  179. }
  180. if group != "" {
  181. // 获取分组配置
  182. configs := make([]*entity.DtConfig, 0)
  183. db.Where("`group` = ?", group).Order("sort ASC").Find(&configs)
  184. result := make(map[string]string)
  185. for _, cfg := range configs {
  186. result[cfg.Key] = cfg.Value
  187. }
  188. ctx.OK(result)
  189. return
  190. }
  191. ctx.Fail("key_or_group_required")
  192. }
  193. // CustomerService 客服配置
  194. func (s *Server) CustomerService(c *gin.Context) {
  195. ctx := s.FromContext(c)
  196. db := s.DB()
  197. services := make([]*entity.DtCustomerService, 0)
  198. db.Model(&entity.DtCustomerService{}).
  199. Where("status = ?", 1).
  200. Order("sort ASC").
  201. Find(&services)
  202. ctx.OK(services)
  203. }