dt_system.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. package daytask
  2. import (
  3. "time"
  4. model "go_server/model/biz_modules/daytask"
  5. "go_server/model/common/response"
  6. "go_server/service/base"
  7. "github.com/gin-gonic/gin"
  8. )
  9. // DtAdminService 管理员服务
  10. type DtAdminService struct {
  11. base.BizCommonService
  12. }
  13. func (s *DtAdminService) Get(c *gin.Context) {
  14. s.SetDbAlias("daytask")
  15. base.NewBaseHandler(model.NewDtAdmin()).Get(c, s.DB())
  16. }
  17. func (s *DtAdminService) Find(c *gin.Context) {
  18. s.SetDbAlias("daytask")
  19. type request[T any] struct {
  20. base.ListRequest[T]
  21. Id *int64 `form:"id"`
  22. Username *string `form:"username"`
  23. Nickname *string `form:"nickname"`
  24. RoleId *int64 `form:"roleId"`
  25. Status *int8 `form:"status"`
  26. }
  27. req := new(request[model.DtAdmin])
  28. if err := c.BindQuery(req); err != nil {
  29. response.Resp(c, err.Error())
  30. return
  31. }
  32. db := s.DB()
  33. if req.Id != nil && *req.Id != 0 {
  34. db = db.Where("id", req.Id)
  35. }
  36. if req.Username != nil && *req.Username != "" {
  37. db = db.Where("username LIKE ?", "%"+*req.Username+"%")
  38. }
  39. if req.Nickname != nil && *req.Nickname != "" {
  40. db = db.Where("nickname LIKE ?", "%"+*req.Nickname+"%")
  41. }
  42. if req.RoleId != nil && *req.RoleId != 0 {
  43. db = db.Where("role_id", req.RoleId)
  44. }
  45. if req.Status != nil {
  46. db = db.Where("status", req.Status)
  47. }
  48. colInfo := s.GetColumnCommentFromStruct(model.DtAdmin{})
  49. resp, err := base.NewQueryBaseHandler(model.NewDtAdmin()).List(db, req)
  50. if err != nil {
  51. response.Resp(c, err.Error())
  52. return
  53. }
  54. response.Resp(c, map[string]interface{}{
  55. "cols": colInfo,
  56. "list": resp.List,
  57. "paging": resp.Paging,
  58. })
  59. }
  60. func (s *DtAdminService) Create(c *gin.Context) {
  61. s.SetDbAlias("daytask")
  62. base.NewBaseHandler(model.NewDtAdmin()).Create(c, s.DB())
  63. }
  64. func (s *DtAdminService) Update(c *gin.Context) {
  65. s.SetDbAlias("daytask")
  66. base.NewBaseHandler(model.NewDtAdmin()).UpdateOne(c, s.DB())
  67. }
  68. func (s *DtAdminService) Delete(c *gin.Context) {
  69. s.SetDbAlias("daytask")
  70. base.NewBaseHandler(model.NewDtAdmin()).DeleteOne(c, s.DB())
  71. }
  72. // DtRoleService 角色服务
  73. type DtRoleService struct {
  74. base.BizCommonService
  75. }
  76. func (s *DtRoleService) Get(c *gin.Context) {
  77. s.SetDbAlias("daytask")
  78. base.NewBaseHandler(model.NewDtRole()).Get(c, s.DB())
  79. }
  80. func (s *DtRoleService) Find(c *gin.Context) {
  81. s.SetDbAlias("daytask")
  82. type request[T any] struct {
  83. base.ListRequest[T]
  84. Id *int64 `form:"id"`
  85. Name *string `form:"name"`
  86. Code *string `form:"code"`
  87. Status *int8 `form:"status"`
  88. }
  89. req := new(request[model.DtRole])
  90. if err := c.BindQuery(req); err != nil {
  91. response.Resp(c, err.Error())
  92. return
  93. }
  94. db := s.DB()
  95. if req.Id != nil && *req.Id != 0 {
  96. db = db.Where("id", req.Id)
  97. }
  98. if req.Name != nil && *req.Name != "" {
  99. db = db.Where("name LIKE ?", "%"+*req.Name+"%")
  100. }
  101. if req.Code != nil && *req.Code != "" {
  102. db = db.Where("code", req.Code)
  103. }
  104. if req.Status != nil {
  105. db = db.Where("status", req.Status)
  106. }
  107. db = db.Order("sort ASC")
  108. colInfo := s.GetColumnCommentFromStruct(model.DtRole{})
  109. resp, err := base.NewQueryBaseHandler(model.NewDtRole()).List(db, req)
  110. if err != nil {
  111. response.Resp(c, err.Error())
  112. return
  113. }
  114. response.Resp(c, map[string]interface{}{
  115. "cols": colInfo,
  116. "list": resp.List,
  117. "paging": resp.Paging,
  118. })
  119. }
  120. func (s *DtRoleService) Create(c *gin.Context) {
  121. s.SetDbAlias("daytask")
  122. base.NewBaseHandler(model.NewDtRole()).Create(c, s.DB())
  123. }
  124. func (s *DtRoleService) Update(c *gin.Context) {
  125. s.SetDbAlias("daytask")
  126. base.NewBaseHandler(model.NewDtRole()).UpdateOne(c, s.DB())
  127. }
  128. func (s *DtRoleService) Delete(c *gin.Context) {
  129. s.SetDbAlias("daytask")
  130. base.NewBaseHandler(model.NewDtRole()).DeleteOne(c, s.DB())
  131. }
  132. // DtMenuService 菜单服务
  133. type DtMenuService struct {
  134. base.BizCommonService
  135. }
  136. func (s *DtMenuService) Get(c *gin.Context) {
  137. s.SetDbAlias("daytask")
  138. base.NewBaseHandler(model.NewDtMenu()).Get(c, s.DB())
  139. }
  140. func (s *DtMenuService) Find(c *gin.Context) {
  141. s.SetDbAlias("daytask")
  142. type request[T any] struct {
  143. base.ListRequest[T]
  144. Id *int64 `form:"id"`
  145. ParentId *int64 `form:"parentId"`
  146. Name *string `form:"name"`
  147. Type *int8 `form:"type"`
  148. Status *int8 `form:"status"`
  149. }
  150. req := new(request[model.DtMenu])
  151. if err := c.BindQuery(req); err != nil {
  152. response.Resp(c, err.Error())
  153. return
  154. }
  155. db := s.DB()
  156. if req.Id != nil && *req.Id != 0 {
  157. db = db.Where("id", req.Id)
  158. }
  159. if req.ParentId != nil {
  160. db = db.Where("parent_id", req.ParentId)
  161. }
  162. if req.Name != nil && *req.Name != "" {
  163. db = db.Where("name LIKE ?", "%"+*req.Name+"%")
  164. }
  165. if req.Type != nil {
  166. db = db.Where("type", req.Type)
  167. }
  168. if req.Status != nil {
  169. db = db.Where("status", req.Status)
  170. }
  171. db = db.Order("sort ASC")
  172. colInfo := s.GetColumnCommentFromStruct(model.DtMenu{})
  173. resp, err := base.NewQueryBaseHandler(model.NewDtMenu()).List(db, req)
  174. if err != nil {
  175. response.Resp(c, err.Error())
  176. return
  177. }
  178. response.Resp(c, map[string]interface{}{
  179. "cols": colInfo,
  180. "list": resp.List,
  181. "paging": resp.Paging,
  182. })
  183. }
  184. func (s *DtMenuService) Create(c *gin.Context) {
  185. s.SetDbAlias("daytask")
  186. base.NewBaseHandler(model.NewDtMenu()).Create(c, s.DB())
  187. }
  188. func (s *DtMenuService) Update(c *gin.Context) {
  189. s.SetDbAlias("daytask")
  190. base.NewBaseHandler(model.NewDtMenu()).UpdateOne(c, s.DB())
  191. }
  192. func (s *DtMenuService) Delete(c *gin.Context) {
  193. s.SetDbAlias("daytask")
  194. base.NewBaseHandler(model.NewDtMenu()).DeleteOne(c, s.DB())
  195. }
  196. // DtConfigService 系统配置服务
  197. type DtConfigService struct {
  198. base.BizCommonService
  199. }
  200. func (s *DtConfigService) Get(c *gin.Context) {
  201. s.SetDbAlias("daytask")
  202. base.NewBaseHandler(model.NewDtConfig()).Get(c, s.DB())
  203. }
  204. func (s *DtConfigService) Find(c *gin.Context) {
  205. s.SetDbAlias("daytask")
  206. type request[T any] struct {
  207. base.ListRequest[T]
  208. Id *int64 `form:"id"`
  209. Group *string `form:"group"`
  210. Key *string `form:"key"`
  211. Name *string `form:"name"`
  212. Status *int8 `form:"status"`
  213. }
  214. req := new(request[model.DtConfig])
  215. if err := c.BindQuery(req); err != nil {
  216. response.Resp(c, err.Error())
  217. return
  218. }
  219. db := s.DB()
  220. if req.Id != nil && *req.Id != 0 {
  221. db = db.Where("id", req.Id)
  222. }
  223. if req.Group != nil && *req.Group != "" {
  224. db = db.Where("`group`", req.Group)
  225. }
  226. if req.Key != nil && *req.Key != "" {
  227. db = db.Where("`key`", req.Key)
  228. }
  229. if req.Name != nil && *req.Name != "" {
  230. db = db.Where("name LIKE ?", "%"+*req.Name+"%")
  231. }
  232. if req.Status != nil {
  233. db = db.Where("status", req.Status)
  234. }
  235. colInfo := s.GetColumnCommentFromStruct(model.DtConfig{})
  236. resp, err := base.NewQueryBaseHandler(model.NewDtConfig()).List(db, req)
  237. if err != nil {
  238. response.Resp(c, err.Error())
  239. return
  240. }
  241. response.Resp(c, map[string]interface{}{
  242. "cols": colInfo,
  243. "list": resp.List,
  244. "paging": resp.Paging,
  245. })
  246. }
  247. func (s *DtConfigService) Create(c *gin.Context) {
  248. s.SetDbAlias("daytask")
  249. base.NewBaseHandler(model.NewDtConfig()).Create(c, s.DB())
  250. }
  251. func (s *DtConfigService) Update(c *gin.Context) {
  252. s.SetDbAlias("daytask")
  253. var req model.DtConfig
  254. if err := c.ShouldBindJSON(&req); err != nil {
  255. response.Resp(c, err.Error())
  256. return
  257. }
  258. if req.Id == 0 {
  259. response.Resp(c, "id is zero")
  260. return
  261. }
  262. var existing model.DtConfig
  263. if err := s.DB().First(&existing, req.Id).Error; err != nil {
  264. response.Resp(c, err.Error())
  265. return
  266. }
  267. dbEx := s.DB().Model(&existing).Updates(map[string]interface{}{
  268. "group": req.Group,
  269. "key": req.Key,
  270. "value": req.Value,
  271. "type": req.Type,
  272. "name": req.Name,
  273. "description": req.Description,
  274. "status": req.Status,
  275. "sort": req.Sort,
  276. })
  277. if dbEx.Error != nil {
  278. response.Resp(c, dbEx.Error.Error())
  279. return
  280. }
  281. if dbEx.RowsAffected == 0 {
  282. response.Resp(c, "update fail")
  283. return
  284. }
  285. if err := s.DB().First(&existing, req.Id).Error; err != nil {
  286. response.Resp(c, err.Error())
  287. return
  288. }
  289. response.Resp(c, map[string]any{
  290. "info": existing,
  291. "rowsAffected": dbEx.RowsAffected,
  292. })
  293. }
  294. func (s *DtConfigService) Delete(c *gin.Context) {
  295. s.SetDbAlias("daytask")
  296. base.NewBaseHandler(model.NewDtConfig()).DeleteOne(c, s.DB())
  297. }
  298. // GetByGroup 按分组获取配置
  299. func (s *DtConfigService) GetByGroup(c *gin.Context) {
  300. s.SetDbAlias("daytask")
  301. group := c.Query("group")
  302. if group == "" {
  303. response.Resp(c, "分组不能为空")
  304. return
  305. }
  306. var configs []model.DtConfig
  307. err := s.DB().Where("`group` = ?", group).Order("sort ASC").Find(&configs).Error
  308. if err != nil {
  309. response.Resp(c, err.Error())
  310. return
  311. }
  312. response.Resp(c, configs)
  313. }
  314. // DtOperationLogService 操作日志服务
  315. type DtOperationLogService struct {
  316. base.BizCommonService
  317. }
  318. func (s *DtOperationLogService) Get(c *gin.Context) {
  319. s.SetDbAlias("daytask")
  320. base.NewBaseHandler(model.NewDtOperationLog()).Get(c, s.DB())
  321. }
  322. func (s *DtOperationLogService) Find(c *gin.Context) {
  323. s.SetDbAlias("daytask")
  324. type request[T any] struct {
  325. base.ListRequest[T]
  326. AdminId *int64 `form:"adminId"`
  327. AdminName *string `form:"adminName"`
  328. Module *string `form:"module"`
  329. Action *string `form:"action"`
  330. Status *int8 `form:"status"`
  331. BeginTime *int64 `form:"beginTime"`
  332. EndTime *int64 `form:"endTime"`
  333. }
  334. req := new(request[model.DtOperationLog])
  335. if err := c.BindQuery(req); err != nil {
  336. response.Resp(c, err.Error())
  337. return
  338. }
  339. db := s.DB()
  340. if req.AdminId != nil && *req.AdminId != 0 {
  341. db = db.Where("admin_id", req.AdminId)
  342. }
  343. if req.AdminName != nil && *req.AdminName != "" {
  344. db = db.Where("admin_name LIKE ?", "%"+*req.AdminName+"%")
  345. }
  346. if req.Module != nil && *req.Module != "" {
  347. db = db.Where("module", req.Module)
  348. }
  349. if req.Action != nil && *req.Action != "" {
  350. db = db.Where("action", req.Action)
  351. }
  352. if req.Status != nil {
  353. db = db.Where("status", req.Status)
  354. }
  355. if req.BeginTime != nil && *req.BeginTime > 0 && req.EndTime != nil && *req.EndTime > 0 {
  356. db = db.Where("created_at BETWEEN ? AND ?", *req.BeginTime, *req.EndTime)
  357. }
  358. colInfo := s.GetColumnCommentFromStruct(model.DtOperationLog{})
  359. resp, err := base.NewQueryBaseHandler(model.NewDtOperationLog()).List(db, req)
  360. if err != nil {
  361. response.Resp(c, err.Error())
  362. return
  363. }
  364. response.Resp(c, map[string]interface{}{
  365. "cols": colInfo,
  366. "list": resp.List,
  367. "paging": resp.Paging,
  368. })
  369. }
  370. // DtDailyStatsService 每日统计服务
  371. type DtDailyStatsService struct {
  372. base.BizCommonService
  373. }
  374. func (s *DtDailyStatsService) Get(c *gin.Context) {
  375. s.SetDbAlias("daytask")
  376. base.NewBaseHandler(model.NewDtDailyStats()).Get(c, s.DB())
  377. }
  378. func (s *DtDailyStatsService) Find(c *gin.Context) {
  379. s.SetDbAlias("daytask")
  380. type request[T any] struct {
  381. base.ListRequest[T]
  382. StartDate *string `form:"startDate"`
  383. EndDate *string `form:"endDate"`
  384. }
  385. req := new(request[model.DtDailyStats])
  386. if err := c.BindQuery(req); err != nil {
  387. response.Resp(c, err.Error())
  388. return
  389. }
  390. db := s.DB()
  391. if req.StartDate != nil && *req.StartDate != "" && req.EndDate != nil && *req.EndDate != "" {
  392. db = db.Where("date BETWEEN ? AND ?", *req.StartDate, *req.EndDate)
  393. }
  394. db = db.Order("date DESC")
  395. colInfo := s.GetColumnCommentFromStruct(model.DtDailyStats{})
  396. resp, err := base.NewQueryBaseHandler(model.NewDtDailyStats()).List(db, req)
  397. if err != nil {
  398. response.Resp(c, err.Error())
  399. return
  400. }
  401. response.Resp(c, map[string]interface{}{
  402. "cols": colInfo,
  403. "list": resp.List,
  404. "paging": resp.Paging,
  405. })
  406. }
  407. // Summary 核心数据概览:近7日新注册、总注册人数、昨日用户任务提交数
  408. func (s *DtDailyStatsService) Summary(c *gin.Context) {
  409. s.SetDbAlias("daytask")
  410. db := s.DB()
  411. now := time.Now().Unix()
  412. sevenDaysAgo := now - 7*24*3600
  413. var newUsers7d int64
  414. db.Model(&model.DtUser{}).Where("deleted_at IS NULL AND created_at >= ?", sevenDaysAgo).Count(&newUsers7d)
  415. var totalUsers int64
  416. db.Model(&model.DtUser{}).Where("deleted_at IS NULL").Count(&totalUsers)
  417. loc := time.Local
  418. today := time.Now().In(loc)
  419. yesterday := today.AddDate(0, 0, -1)
  420. start := time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 0, 0, 0, 0, loc)
  421. startUnix := start.Unix()
  422. endUnix := start.Add(24 * time.Hour).Unix()
  423. var yesterdayTaskSubmits int64
  424. db.Model(&model.DtUserTask{}).
  425. Where("submit_time > 0 AND submit_time >= ? AND submit_time < ?", startUnix, endUnix).
  426. Count(&yesterdayTaskSubmits)
  427. response.Resp(c, gin.H{
  428. "newUsers7d": newUsers7d,
  429. "totalUsers": totalUsers,
  430. "yesterdayTaskSubmits": yesterdayTaskSubmits,
  431. })
  432. }