| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- package models
- import (
- "bytes"
- "fmt"
- "lc/common/util"
- "time"
- )
- type DeviceHourData struct {
- ID string `gorm:"type:varchar(32);primary_key"`
- Sid uint16 `gorm:"type:smallint;primary_key"`
- Val float32 `gorm:"type:float(10,2)"`
- Time time.Time `gorm:"type:datetime;primary_key"`
- CreatedAt time.Time
- }
- func (DeviceHourData) TableName() string {
- return "t_device_hour_data"
- }
- type DeviceDayData struct {
- ID string `gorm:"type:varchar(32);primary_key"`
- Sid uint16 `gorm:"type:smallint;primary_key"`
- ValAvg float32 `gorm:"type:float(10,2)"`
- ValMin float32 `gorm:"type:float(10,2)"`
- ValMax float32 `gorm:"type:float(10,2)"`
- Time time.Time `gorm:"type:datetime;primary_key"`
- CreatedAt time.Time
- }
- func (DeviceDayData) TableName() string {
- return "t_device_day_data"
- }
- type DeviceEnergyDayData struct {
- ID string `gorm:"type:varchar(32);primary_key"` //设备编码
- Date time.Time `gorm:"type:date;primary_key"` //日期
- Beginning float32 `gorm:"type:float(10,2)"` //上次抄表数
- Ending float32 `gorm:"type:float(10,2)"` //本次抄表数
- Difference float32 `gorm:"type:float(10,2)"` //增量值,不允许为负数
- CreatedAt time.Time
- }
- func (DeviceEnergyDayData) TableName() string {
- return "t_device_energy_day_data"
- }
- type DeviceEnergyMonthData struct {
- ID string `gorm:"type:varchar(32);primary_key"` //设备编码
- Date time.Time `gorm:"type:date;primary_key"` //日期
- Beginning float32 `gorm:"type:float(10,2)"` //上次抄表数
- Ending float32 `gorm:"type:float(10,2)"` //本次抄表数
- Difference float32 `gorm:"type:float(10,2)"` //增量值,不允许为负数
- CreatedAt time.Time
- }
- func (DeviceEnergyMonthData) TableName() string {
- return "t_device_energy_month_data"
- }
- func MultiInsertDeviceHourData(datas []DeviceHourData) error {
- if len(datas) == 0 {
- return nil
- }
- var buffer bytes.Buffer
- sql := "insert into t_device_hour_data (id,sid,val,time,created_at) values"
- if _, err := buffer.WriteString(sql); err != nil {
- return err
- }
- for i, e := range datas {
- if i == len(datas)-1 {
- 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")))
- } else {
- 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")))
- }
- }
- return G_db.Exec(buffer.String()).Error
- }
- func GetDeviceHourData(Code, Start, End string, Sids []uint16) ([]DeviceHourData, error) {
- var array []DeviceHourData
- err := G_db.Model(&DeviceHourData{}).Where("id = ? and sid in (?) and time >= ? and time <= ?",
- Code, Sids, Start, End).Order("sid asc,time asc").Find(&array).Error
- return array, err
- }
- func GetBDeviceHourData(Codes []string, Start, End string) ([]DeviceHourData, error) {
- var array []DeviceHourData
- err := G_db.Model(&DeviceHourData{}).Where("id in (?) and time >= ? and time <= ?",
- Codes, Start, End).Order("sid asc,time asc").Find(&array).Error
- return array, err
- }
- func GetDeviceDayData(Code, Start, End string, Sids []uint16) ([]DeviceDayData, error) {
- var array []DeviceDayData
- err := G_db.Model(&DeviceDayData{}).Where("id = ? and sid in (?) and time >= ? and time <= ?",
- Code, Sids, Start, End).Order("sid asc,time asc").Find(&array).Error
- return array, err
- }
- func GetBDeviceDayData(Codes []string, Start, End string) ([]DeviceDayData, error) {
- var array []DeviceDayData
- err := G_db.Model(&DeviceDayData{}).Where("id in (?) and time >= ? and time <= ?",
- Codes, Start, End).Order("id asc,time asc").Find(&array).Error
- return array, err
- }
- func GetDeviceEnergyMonthData(Codes []string, Start, End string) ([]DeviceEnergyMonthData, error) {
- var array []DeviceEnergyMonthData
- err := G_db.Model(&DeviceEnergyMonthData{}).Where("id IN (?) and date >= ? and date <= ?",
- Codes, Start, End).Order("id asc,date asc").Find(&array).Error
- return array, err
- }
- func GetDeviceEnergyDayData(Codes []string, Start, End string) ([]DeviceEnergyDayData, error) {
- var array []DeviceEnergyDayData
- err := G_db.Model(&DeviceEnergyDayData{}).Where("id IN (?) and date >= ? and date <= ?",
- Codes, Start, End).Order("id asc,date asc").Find(&array).Error
- return array, err
- }
- func GetRadarDataList(Codes []string, Start, End string, model uint8) ([]RadarData, error) {
- var array []RadarData
- //0点目标 1车目标 所有目标2
- var err error
- if model == 2 {
- err = G_db.Model(&RadarData{}).Where("d_id IN (?) and time >= ? and time <= ?",
- Codes, Start, End).Order("id asc,time asc").Find(&array).Error
- } else {
- err = G_db.Model(&RadarData{}).Where("d_id IN (?) and time >= ? and time <= ? and type = ?",
- Codes, Start, End, model).Order("id asc,time asc").Find(&array).Error
- }
- return array, err
- }
- func GetRadarSummaryHourData(Codes []string, Start, End string, Model uint8) ([]RadarHourData, error) {
- var array []RadarHourData
- //0点目标 1车目标 所有目标2
- var err error
- if Model == 2 {
- err = G_db.Model(&RadarHourData{}).Where("d_id IN (?) and time >= ? and time <= ?",
- Codes, Start, End).Order("time asc").Find(&array).Error
- } else {
- err = G_db.Model(&RadarHourData{}).Where("d_id IN (?) and time >= ? and time <= ? and type = ?",
- Codes, Start, End, Model).Order("time asc").Find(&array).Error
- }
- return array, err
- }
- func GetRadarSummaryDayData(Codes []string, Start, End string, Model uint8) ([]RadarDayData, error) {
- var array []RadarDayData
- //0点目标 1车目标 所有目标2
- var err error
- if Model == 2 {
- err = G_db.Model(&RadarDayData{}).Where("d_id IN (?) and date >= ? and date <= ?",
- Codes, Start, End).Order("date asc").Find(&array).Error
- } else {
- err = G_db.Model(&RadarDayData{}).Where("d_id IN (?) and date >= ? and date <= ? and type = ?",
- Codes, Start, End, Model).Order("date asc").Find(&array).Error
- }
- return array, err
- }
- func StatDay(t time.Time) error {
- return G_db.Exec("CALL CalcDayData(?)", t).Error
- }
- func StatDayEnergy(currhour time.Time, flag int) error {
- return G_db.Exec("CALL CalcEnergyDay(?,?)", currhour, flag).Error
- }
- func StatMonthEnergy(currhour time.Time, flag int) error {
- return G_db.Exec("CALL CalcEnergyMonth(?,?)", currhour, flag).Error
- }
- func StatHourRadarData(hour time.Time) error {
- end := util.New(hour).BeginningOfHour()
- start := end.Add(-1 * time.Hour)
- err := G_db.Where("time = ?", start).Delete(&RadarHourData{}).Error
- err = G_db.Model(&RadarHourData{}).Exec(` INSERT INTO t_radar_hour_data
- select id,
- g_id,
- type,
- count(*) total,
- sum(if(Speed > suggest, 1, 0)) as over_speed_number,
- sum(if(Speed < 0, 1, 0)) speed_min_number,
- sum(if(Speed > 0 and speed <= 20, 1, 0)) speed20_number,
- sum(if(Speed > 20 and speed <= 40, 1, 0)) speed40_number,
- sum(if(Speed > 40 and speed <= 60, 1, 0)) speed60_number,
- sum(if(Speed > 60 and speed <= 80, 1, 0)) speed80_number,
- sum(if(Speed > 80 and speed <= 100, 1, 0)) speed100_number,
- sum(if(Speed > 100 and speed <= 120, 1, 0)) speed120_number,
- sum(if(Speed > 120, 1, 0)) speed_max_number,
- ? as time
- from (
- select trd.g_id,
- trd.time,
- trd.speed,
- trd.type,
- if(tdr.id is null, trd.d_id, tdr.id) id,
- if(tdr.id is null, 10000, tdr.suggest_speed) suggest
- from t_radar_data trd
- left join t_device_radar tdr
- on trd.g_id = tdr.g_id and trd.ip = tdr.ip
- where time > ?
- and time <= ?) a
- group by id,
- g_id,
- type`, start, start, end).Error
- return err
- }
- func StatDayRadarData(day time.Time) error {
- end := util.New(day).BeginningOfDay()
- start := end.Add(-24 * time.Hour)
- err := G_db.Where("date = ?", start).Delete(&RadarDayData{}).Error
- err = G_db.Model(&RadarDayData{}).Exec(`INSERT INTO t_radar_day_data
- select id,
- g_id,
- type,
- count(*) total,
- sum(if(Speed > suggest, 1, 0)) as over_speed_number,
- sum(if(Speed < 0, 1, 0)) speed_min_number,
- sum(if(Speed > 0 and speed <= 20, 1, 0)) speed20_number,
- sum(if(Speed > 20 and speed <= 40, 1, 0)) speed40_number,
- sum(if(Speed > 40 and speed <= 60, 1, 0)) speed60_number,
- sum(if(Speed > 60 and speed <= 80, 1, 0)) speed80_number,
- sum(if(Speed > 80 and speed <= 100, 1, 0)) speed100_number,
- sum(if(Speed > 100 and speed <= 120, 1, 0)) speed120_number,
- sum(if(Speed > 120, 1, 0)) speed_max_number,
- ? as date
- from (
- select trd.g_id,
- trd.time,
- trd.speed,
- trd.type,
- if(tdr.id is null, trd.d_id, tdr.id) id,
- if(tdr.id is null, 10000, tdr.suggest_speed) suggest
- from t_radar_data trd
- left join t_device_radar tdr
- on trd.g_id = tdr.g_id and trd.ip = tdr.ip
- where time > ?
- and time <= ?) a
- group by id,
- g_id,
- type`, start, start, end).Error
- return err
- }
|