devicedata.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package models
  2. import (
  3. "bytes"
  4. "fmt"
  5. "lc/common/util"
  6. "time"
  7. )
  8. type DeviceHourData struct {
  9. ID string `gorm:"type:varchar(32);primary_key"`
  10. Sid uint16 `gorm:"type:smallint;primary_key"`
  11. Val float32 `gorm:"type:float(10,2)"`
  12. Time time.Time `gorm:"type:datetime;primary_key"`
  13. CreatedAt time.Time
  14. }
  15. func (DeviceHourData) TableName() string {
  16. return "t_device_hour_data"
  17. }
  18. type DeviceDayData struct {
  19. ID string `gorm:"type:varchar(32);primary_key"`
  20. Sid uint16 `gorm:"type:smallint;primary_key"`
  21. ValAvg float32 `gorm:"type:float(10,2)"`
  22. ValMin float32 `gorm:"type:float(10,2)"`
  23. ValMax float32 `gorm:"type:float(10,2)"`
  24. Time time.Time `gorm:"type:datetime;primary_key"`
  25. CreatedAt time.Time
  26. }
  27. func (DeviceDayData) TableName() string {
  28. return "t_device_day_data"
  29. }
  30. type DeviceEnergyDayData struct {
  31. ID string `gorm:"type:varchar(32);primary_key"` //设备编码
  32. Date time.Time `gorm:"type:date;primary_key"` //日期
  33. Beginning float32 `gorm:"type:float(10,2)"` //上次抄表数
  34. Ending float32 `gorm:"type:float(10,2)"` //本次抄表数
  35. Difference float32 `gorm:"type:float(10,2)"` //增量值,不允许为负数
  36. CreatedAt time.Time
  37. }
  38. func (DeviceEnergyDayData) TableName() string {
  39. return "t_device_energy_day_data"
  40. }
  41. type DeviceEnergyMonthData struct {
  42. ID string `gorm:"type:varchar(32);primary_key"` //设备编码
  43. Date time.Time `gorm:"type:date;primary_key"` //日期
  44. Beginning float32 `gorm:"type:float(10,2)"` //上次抄表数
  45. Ending float32 `gorm:"type:float(10,2)"` //本次抄表数
  46. Difference float32 `gorm:"type:float(10,2)"` //增量值,不允许为负数
  47. CreatedAt time.Time
  48. }
  49. func (DeviceEnergyMonthData) TableName() string {
  50. return "t_device_energy_month_data"
  51. }
  52. func MultiInsertDeviceHourData(datas []DeviceHourData) error {
  53. if len(datas) == 0 {
  54. return nil
  55. }
  56. var buffer bytes.Buffer
  57. sql := "insert into t_device_hour_data (id,sid,val,time,created_at) values"
  58. if _, err := buffer.WriteString(sql); err != nil {
  59. return err
  60. }
  61. for i, e := range datas {
  62. if i == len(datas)-1 {
  63. buffer.WriteString(fmt.Sprintf("('%s',%d,%f,'%s','%s');", e.ID, e.Sid, e.Val, e.Time.Format("2006-01-02 15:04:05"), e.CreatedAt.Format("2006-01-02 15:04:05")))
  64. } else {
  65. buffer.WriteString(fmt.Sprintf("('%s',%d,%f,'%s','%s'),", e.ID, e.Sid, e.Val, e.Time.Format("2006-01-02 15:04:05"), e.CreatedAt.Format("2006-01-02 15:04:05")))
  66. }
  67. }
  68. return G_db.Exec(buffer.String()).Error
  69. }
  70. func GetDeviceHourData(Code, Start, End string, Sids []uint16) ([]DeviceHourData, error) {
  71. var array []DeviceHourData
  72. err := G_db.Model(&DeviceHourData{}).Where("id = ? and sid in (?) and time >= ? and time <= ?",
  73. Code, Sids, Start, End).Order("sid asc,time asc").Find(&array).Error
  74. return array, err
  75. }
  76. func GetBDeviceHourData(Codes []string, Start, End string) ([]DeviceHourData, error) {
  77. var array []DeviceHourData
  78. err := G_db.Model(&DeviceHourData{}).Where("id in (?) and time >= ? and time <= ?",
  79. Codes, Start, End).Order("sid asc,time asc").Find(&array).Error
  80. return array, err
  81. }
  82. func GetDeviceDayData(Code, Start, End string, Sids []uint16) ([]DeviceDayData, error) {
  83. var array []DeviceDayData
  84. err := G_db.Model(&DeviceDayData{}).Where("id = ? and sid in (?) and time >= ? and time <= ?",
  85. Code, Sids, Start, End).Order("sid asc,time asc").Find(&array).Error
  86. return array, err
  87. }
  88. func GetBDeviceDayData(Codes []string, Start, End string) ([]DeviceDayData, error) {
  89. var array []DeviceDayData
  90. err := G_db.Model(&DeviceDayData{}).Where("id in (?) and time >= ? and time <= ?",
  91. Codes, Start, End).Order("id asc,time asc").Find(&array).Error
  92. return array, err
  93. }
  94. func GetDeviceEnergyMonthData(Codes []string, Start, End string) ([]DeviceEnergyMonthData, error) {
  95. var array []DeviceEnergyMonthData
  96. err := G_db.Model(&DeviceEnergyMonthData{}).Where("id IN (?) and date >= ? and date <= ?",
  97. Codes, Start, End).Order("id asc,date asc").Find(&array).Error
  98. return array, err
  99. }
  100. func GetDeviceEnergyDayData(Codes []string, Start, End string) ([]DeviceEnergyDayData, error) {
  101. var array []DeviceEnergyDayData
  102. err := G_db.Model(&DeviceEnergyDayData{}).Where("id IN (?) and date >= ? and date <= ?",
  103. Codes, Start, End).Order("id asc,date asc").Find(&array).Error
  104. return array, err
  105. }
  106. func GetRadarDataList(Codes []string, Start, End string, model uint8) ([]RadarData, error) {
  107. var array []RadarData
  108. //0点目标 1车目标 所有目标2
  109. var err error
  110. if model == 2 {
  111. err = G_db.Model(&RadarData{}).Where("d_id IN (?) and time >= ? and time <= ?",
  112. Codes, Start, End).Order("id asc,time asc").Find(&array).Error
  113. } else {
  114. err = G_db.Model(&RadarData{}).Where("d_id IN (?) and time >= ? and time <= ? and type = ?",
  115. Codes, Start, End, model).Order("id asc,time asc").Find(&array).Error
  116. }
  117. return array, err
  118. }
  119. func GetRadarSummaryHourData(Codes []string, Start, End string, Model uint8) ([]RadarHourData, error) {
  120. var array []RadarHourData
  121. //0点目标 1车目标 所有目标2
  122. var err error
  123. if Model == 2 {
  124. err = G_db.Model(&RadarHourData{}).Where("d_id IN (?) and time >= ? and time <= ?",
  125. Codes, Start, End).Order("time asc").Find(&array).Error
  126. } else {
  127. err = G_db.Model(&RadarHourData{}).Where("d_id IN (?) and time >= ? and time <= ? and type = ?",
  128. Codes, Start, End, Model).Order("time asc").Find(&array).Error
  129. }
  130. return array, err
  131. }
  132. func GetRadarSummaryDayData(Codes []string, Start, End string, Model uint8) ([]RadarDayData, error) {
  133. var array []RadarDayData
  134. //0点目标 1车目标 所有目标2
  135. var err error
  136. if Model == 2 {
  137. err = G_db.Model(&RadarDayData{}).Where("d_id IN (?) and date >= ? and date <= ?",
  138. Codes, Start, End).Order("date asc").Find(&array).Error
  139. } else {
  140. err = G_db.Model(&RadarDayData{}).Where("d_id IN (?) and date >= ? and date <= ? and type = ?",
  141. Codes, Start, End, Model).Order("date asc").Find(&array).Error
  142. }
  143. return array, err
  144. }
  145. func StatDay(t time.Time) error {
  146. return G_db.Exec("CALL CalcDayData(?)", t).Error
  147. }
  148. func StatDayEnergy(currhour time.Time, flag int) error {
  149. return G_db.Exec("CALL CalcEnergyDay(?,?)", currhour, flag).Error
  150. }
  151. func StatMonthEnergy(currhour time.Time, flag int) error {
  152. return G_db.Exec("CALL CalcEnergyMonth(?,?)", currhour, flag).Error
  153. }
  154. func StatHourRadarData(hour time.Time) error {
  155. end := util.New(hour).BeginningOfHour()
  156. start := end.Add(-1 * time.Hour)
  157. err := G_db.Where("time = ?", start).Delete(&RadarHourData{}).Error
  158. err = G_db.Model(&RadarHourData{}).Exec(` INSERT INTO t_radar_hour_data
  159. select id,
  160. g_id,
  161. type,
  162. count(*) total,
  163. sum(if(Speed > suggest, 1, 0)) as over_speed_number,
  164. sum(if(Speed < 0, 1, 0)) speed_min_number,
  165. sum(if(Speed > 0 and speed <= 20, 1, 0)) speed20_number,
  166. sum(if(Speed > 20 and speed <= 40, 1, 0)) speed40_number,
  167. sum(if(Speed > 40 and speed <= 60, 1, 0)) speed60_number,
  168. sum(if(Speed > 60 and speed <= 80, 1, 0)) speed80_number,
  169. sum(if(Speed > 80 and speed <= 100, 1, 0)) speed100_number,
  170. sum(if(Speed > 100 and speed <= 120, 1, 0)) speed120_number,
  171. sum(if(Speed > 120, 1, 0)) speed_max_number,
  172. ? as time
  173. from (
  174. select trd.g_id,
  175. trd.time,
  176. trd.speed,
  177. trd.type,
  178. if(tdr.id is null, trd.d_id, tdr.id) id,
  179. if(tdr.id is null, 10000, tdr.suggest_speed) suggest
  180. from t_radar_data trd
  181. left join t_device_radar tdr
  182. on trd.g_id = tdr.g_id and trd.ip = tdr.ip
  183. where time > ?
  184. and time <= ?) a
  185. group by id,
  186. g_id,
  187. type`, start, start, end).Error
  188. return err
  189. }
  190. func StatDayRadarData(day time.Time) error {
  191. end := util.New(day).BeginningOfDay()
  192. start := end.Add(-24 * time.Hour)
  193. err := G_db.Where("date = ?", start).Delete(&RadarDayData{}).Error
  194. err = G_db.Model(&RadarDayData{}).Exec(`INSERT INTO t_radar_day_data
  195. select id,
  196. g_id,
  197. type,
  198. count(*) total,
  199. sum(if(Speed > suggest, 1, 0)) as over_speed_number,
  200. sum(if(Speed < 0, 1, 0)) speed_min_number,
  201. sum(if(Speed > 0 and speed <= 20, 1, 0)) speed20_number,
  202. sum(if(Speed > 20 and speed <= 40, 1, 0)) speed40_number,
  203. sum(if(Speed > 40 and speed <= 60, 1, 0)) speed60_number,
  204. sum(if(Speed > 60 and speed <= 80, 1, 0)) speed80_number,
  205. sum(if(Speed > 80 and speed <= 100, 1, 0)) speed100_number,
  206. sum(if(Speed > 100 and speed <= 120, 1, 0)) speed120_number,
  207. sum(if(Speed > 120, 1, 0)) speed_max_number,
  208. ? as date
  209. from (
  210. select trd.g_id,
  211. trd.time,
  212. trd.speed,
  213. trd.type,
  214. if(tdr.id is null, trd.d_id, tdr.id) id,
  215. if(tdr.id is null, 10000, tdr.suggest_speed) suggest
  216. from t_radar_data trd
  217. left join t_device_radar tdr
  218. on trd.g_id = tdr.g_id and trd.ip = tdr.ip
  219. where time > ?
  220. and time <= ?) a
  221. group by id,
  222. g_id,
  223. type`, start, start, end).Error
  224. return err
  225. }