grid_open_log.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package service
  2. import (
  3. "dy-admin/internal/pcmserver/bus/model"
  4. "dy-admin/internal/pcmserver/bus/model/request"
  5. "dy-admin/internal/pcmserver/common"
  6. "dy-admin/internal/pcmserver/global"
  7. "dy-admin/internal/pcmserver/pkg/code"
  8. systemService "dy-admin/internal/pcmserver/sys/service"
  9. "dy-admin/internal/pcmserver/utils"
  10. "dy-admin/pkg/log"
  11. "dy-admin/pkg/rescode"
  12. "go.uber.org/zap"
  13. "time"
  14. )
  15. type GridOpenLogService struct {
  16. }
  17. func (s *GridOpenLogService) CreateGridOpenLog(log model.GridOpenLog) (err error) {
  18. err = global.DB.Create(&log).Error
  19. if err != nil {
  20. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  21. }
  22. return
  23. }
  24. func (s *GridOpenLogService) DeleteGridOpenLogByIds(ids common.IdsReq) (err error) {
  25. if err = global.DB.Delete(&[]model.GridOpenLog{}, "id in (?)", ids.IDs).Error; err != nil {
  26. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  27. }
  28. return
  29. }
  30. func (s *GridOpenLogService) GetGridOpenLogList(info request.GridOpenLogSearch, dataPermission *BusPermission) (list []model.GridOpenLog, total int64, err error) {
  31. var limit, offset int
  32. if info.Page == 0 || info.PageSize == 0 {
  33. limit = -1
  34. offset = -1
  35. } else {
  36. limit = info.PageSize
  37. offset = info.PageSize * (info.Page - 1)
  38. }
  39. var (
  40. startTime, endTime *time.Time
  41. )
  42. if info.StartTimeStr != "" {
  43. startTime, err = utils.ParseSecondTime(info.StartTimeStr)
  44. if err != nil {
  45. return list, total, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrLeaveParseTimeCode])
  46. }
  47. }
  48. if info.EndTimeStr != "" {
  49. endTime, err = utils.ParseSecondTime(info.EndTimeStr)
  50. if err != nil {
  51. return list, total, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrLeaveParseTimeCode])
  52. }
  53. }
  54. var logModel model.GridOpenLog
  55. db := global.DB.Model(&logModel).Scopes(Permission(logModel.TableName(), dataPermission))
  56. if info.DepartmentName != "" {
  57. db = db.Where("department_name LIKE ?", "%"+info.DepartmentName+"%")
  58. }
  59. if info.StaffName != "" {
  60. db = db.Where("staff_name LIKE ?", "%"+info.StaffName+"%")
  61. }
  62. if info.CabinetName != "" {
  63. db = db.Where("cabinet_name LIKE ?", "%"+info.CabinetName+"%")
  64. }
  65. if info.OpenState != "" {
  66. db = db.Where("open_state = ?", info.OpenState)
  67. }
  68. if info.Year != 0 {
  69. db = db.Where("year = ?", info.Year)
  70. }
  71. if info.Month != 0 {
  72. db.Where("month = ?", info.Month)
  73. }
  74. if info.Week != 0 {
  75. db.Where("week = ?", info.Week)
  76. }
  77. if startTime != nil && endTime == nil {
  78. db = db.Where("created_at >= ?", startTime).Where("created_at <= ?", time.Now())
  79. }
  80. if endTime != nil && startTime == nil {
  81. db = db.Where("created_at >= ?", time.Now()).Where("created_at <= ?", endTime)
  82. }
  83. if startTime != nil && endTime != nil {
  84. db = db.Where("created_at >= ?", startTime).Where("created_at <= ?", endTime)
  85. }
  86. err = db.Count(&total).Error
  87. if err != nil {
  88. return
  89. }
  90. if err = db.Order("id desc").Limit(limit).Offset(offset).Find(&list).Error; err != nil {
  91. return list, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  92. }
  93. return
  94. }
  95. func (s *GridOpenLogService) GetGridOpenLogStatistics(info request.GridOpenLogStatistics) (list []model.LogStatistics, err error) {
  96. var (
  97. startTime, endTime *time.Time
  98. )
  99. if info.StartTimeStr != "" {
  100. startTime, err = utils.ParseMinuteTime(info.StartTimeStr)
  101. if err != nil {
  102. return list, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrLeaveParseTimeCode])
  103. }
  104. }
  105. if info.EndTimeStr != "" {
  106. endTime, err = utils.ParseMinuteTime(info.EndTimeStr)
  107. if err != nil {
  108. return list, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrLeaveParseTimeCode])
  109. }
  110. }
  111. var where string
  112. args := make([]interface{}, 0)
  113. deptIds, err := systemService.ServicesGroupApp.DeptService.GetSonDeptIds(info.DeptID)
  114. if err != nil {
  115. log.Warn("get son deptIds err", zap.Error(err))
  116. } else {
  117. where = "Where department_id in (?)"
  118. args = append(args, deptIds)
  119. }
  120. if info.Year != 0 {
  121. where += " AND year = ?"
  122. args = append(args, info.Year)
  123. }
  124. if info.Month != 0 {
  125. where += " AND month = ?"
  126. args = append(args, info.Month)
  127. }
  128. if info.Week != 0 {
  129. where += " AND week = ?"
  130. args = append(args, info.Week)
  131. }
  132. if info.OpenState != "" {
  133. where += " AND open_state = ?"
  134. args = append(args, info.OpenState)
  135. }
  136. if startTime != nil && endTime == nil {
  137. where += " AND start_time > ? AND end_time < ?"
  138. args = append(args, startTime, time.Now())
  139. }
  140. if endTime != nil && startTime == nil {
  141. where += " AND start_time > ? AND end_time < ?"
  142. args = append(args, time.Now(), endTime)
  143. }
  144. if startTime != nil && endTime != nil {
  145. where += " AND start_time > ? AND end_time < ?"
  146. args = append(args, startTime, endTime)
  147. }
  148. err = global.DB.Raw("SELECT staff_id,staff_name,COUNT(*) AS total FROM bus_grid_open_logs "+where+
  149. " GROUP BY staff_id,staff_name ORDER BY total DESC ", args...).Scan(&list).Error
  150. if err != nil {
  151. return list, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  152. }
  153. return
  154. }
  155. //SELECT
  156. //staff_id,
  157. //staff_name,
  158. //count(*) AS total
  159. //FROM
  160. //bus_grid_open_logs
  161. //WHERE
  162. //`year` = 2022
  163. //AND `month` = 12
  164. //GROUP BY
  165. //staff_id,
  166. //staff_name
  167. //ORDER BY
  168. //total DESC