itsstatic.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. package models
  2. import (
  3. "bytes"
  4. "fmt"
  5. "time"
  6. )
  7. type ItsVehicleSpeed struct {
  8. ID int64 `gorm:"primary_key"` //主键
  9. DID string `gorm:"type:varchar(32)"` //设备编码
  10. Time time.Time `gorm:"type:datetime"` //日期
  11. Plate string `gorm:"type:varchar(16)"` //车牌
  12. Vtype int `gorm:"type:smallint"` //车辆类型
  13. Speed int `gorm:"type:int"` //车辆速度
  14. }
  15. func (ItsVehicleSpeed) TableName() string {
  16. return "t_its_vehicle_speed"
  17. }
  18. func MultiItsVehicleSpeed(datas []ItsVehicleSpeed) error {
  19. if len(datas) == 0 {
  20. return nil
  21. }
  22. var buffer bytes.Buffer
  23. sql := "insert into t_its_vehicle_speed (d_id,time,plate,vtype,speed) values"
  24. if _, err := buffer.WriteString(sql); err != nil {
  25. return err
  26. }
  27. for i, e := range datas {
  28. if i == len(datas)-1 {
  29. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%d,%d);", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Plate, e.Vtype, e.Speed))
  30. } else {
  31. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%d,%d),", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Plate, e.Vtype, e.Speed))
  32. }
  33. }
  34. return G_db.Exec(buffer.String()).Error
  35. }
  36. type ItsVehicleDirection struct {
  37. ID int64 `gorm:"primary_key"` //主键
  38. DID string `gorm:"type:varchar(32)"` //设备编码
  39. Time time.Time `gorm:"type:datetime"` //日期
  40. Direction int `gorm:"type:tinyint"` //方向
  41. Total int `gorm:"type:int"` //总数
  42. }
  43. func (ItsVehicleDirection) TableName() string {
  44. return "t_its_vehicle_direction"
  45. }
  46. func MultiItsVehicleDirection(datas []ItsVehicleDirection) error {
  47. if len(datas) == 0 {
  48. return nil
  49. }
  50. var buffer bytes.Buffer
  51. sql := "insert into t_its_vehicle_direction (d_id,time,direction,total) values"
  52. if _, err := buffer.WriteString(sql); err != nil {
  53. return err
  54. }
  55. for i, e := range datas {
  56. if i == len(datas)-1 {
  57. buffer.WriteString(fmt.Sprintf("('%s','%s',%d,%d);", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Direction, e.Total))
  58. } else {
  59. buffer.WriteString(fmt.Sprintf("('%s','%s',%d,%d),", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Direction, e.Total))
  60. }
  61. }
  62. return G_db.Exec(buffer.String()).Error
  63. }
  64. type ItsVehicleProvince struct {
  65. ID int64 `gorm:"primary_key"` //主键
  66. DID string `gorm:"type:varchar(32)"` //设备编码
  67. Time time.Time `gorm:"type:datetime"` //日期
  68. Province string `gorm:"type:varchar(12)"` //省份
  69. Total int `gorm:"type:int"` //车辆数
  70. }
  71. func (ItsVehicleProvince) TableName() string {
  72. return "t_its_vehicle_province"
  73. }
  74. func MultiItsVehicleProvince(datas []ItsVehicleProvince) error {
  75. if len(datas) == 0 {
  76. return nil
  77. }
  78. var buffer bytes.Buffer
  79. sql := "insert into t_its_vehicle_province (d_id,time,province,total) values"
  80. if _, err := buffer.WriteString(sql); err != nil {
  81. return err
  82. }
  83. for i, e := range datas {
  84. if i == len(datas)-1 {
  85. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%d);", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Province, e.Total))
  86. } else {
  87. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%d),", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Province, e.Total))
  88. }
  89. }
  90. return G_db.Exec(buffer.String()).Error
  91. }
  92. type VehicleProvinceTag struct {
  93. DID string `json:"code"` //设备ID
  94. Time string `json:"time"` //数据时间
  95. Province string `json:"province"` //省,市
  96. Total int `json:"total"` //车辆数
  97. Flag int `json:"flag"` //类型标识,0:日数据;1:月数据
  98. }
  99. func GetVehicleProvince(Codes []string, start, end string, flag int) ([]VehicleProvinceTag, error) {
  100. var (
  101. err error
  102. sql string
  103. arr []VehicleProvinceTag
  104. )
  105. if flag == 0 {
  106. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d') as time,province,SUM(total) as total, 0 as flag FROM t_its_vehicle_province
  107. WHERE time >= ? AND time <= ? AND d_id IN (?)
  108. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),province
  109. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),province`
  110. } else {
  111. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m') as time,province,SUM(total) as total, 1 as flag FROM t_its_vehicle_province
  112. WHERE time >= ? AND time <= ? AND d_id IN (?)
  113. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m'),province
  114. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m'),province`
  115. }
  116. err = G_db.Raw(sql, start, end, Codes).Scan(&arr).Error
  117. return arr, err
  118. }
  119. type ItsVehicleProvinceCity struct {
  120. ID int64 `gorm:"primary_key"` //主键
  121. DID string `gorm:"type:varchar(32)"` //设备编码
  122. Time time.Time `gorm:"type:datetime"` //日期
  123. ProvinceCity string `gorm:"type:varchar(12)"` //城市
  124. Total int `gorm:"type:int"` //车辆数
  125. }
  126. func (ItsVehicleProvinceCity) TableName() string {
  127. return "t_its_vehicle_province_city"
  128. }
  129. func MultiItsVehicleProvinceCity(datas []ItsVehicleProvinceCity) error {
  130. if len(datas) == 0 {
  131. return nil
  132. }
  133. var buffer bytes.Buffer
  134. sql := "insert into t_its_vehicle_province_city (d_id,time,province_city,total) values"
  135. if _, err := buffer.WriteString(sql); err != nil {
  136. return err
  137. }
  138. for i, e := range datas {
  139. if i == len(datas)-1 {
  140. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%d);", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.ProvinceCity, e.Total))
  141. } else {
  142. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%d),", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.ProvinceCity, e.Total))
  143. }
  144. }
  145. return G_db.Exec(buffer.String()).Error
  146. }
  147. type VehicleProvinceCityTag struct {
  148. DID string `json:"code"` //设备ID
  149. Time string `json:"time"` //数据时间
  150. ProvinceCity string `json:"city"` //省,市
  151. Total int `json:"total"` //车辆数
  152. Flag int `json:"flag"` //类型标识,0:日数据;1:月数据
  153. }
  154. func GetVehicleProvinceCity(Codes []string, start, end string, flag int) ([]VehicleProvinceCityTag, error) {
  155. var (
  156. err error
  157. sql string
  158. arr []VehicleProvinceCityTag
  159. )
  160. if flag == 0 {
  161. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d') as time,province_city,SUM(total) as total, 0 as flag FROM t_its_vehicle_province_city
  162. WHERE time >= ? AND time <= ? AND d_id IN (?)
  163. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),province_city
  164. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),province_city`
  165. } else {
  166. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m') as time,province_city,SUM(total) as total, 1 as flag FROM t_its_vehicle_province_city
  167. WHERE time >= ? AND time <= ? AND d_id IN (?)
  168. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m'),province_city
  169. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m'),province_city`
  170. }
  171. err = G_db.Raw(sql, start, end, Codes).Scan(&arr).Error
  172. return arr, err
  173. }
  174. type ItsVehicleType struct {
  175. ID int64 `gorm:"primary_key"` //主键
  176. DID string `gorm:"type:varchar(32)"` //设备编码
  177. Time time.Time `gorm:"type:datetime"` //日期
  178. Vtype int `gorm:"type:int"` //类型
  179. Total int `gorm:"type:int"` //车辆数
  180. }
  181. func (ItsVehicleType) TableName() string {
  182. return "t_its_vehicle_type"
  183. }
  184. func MultiItsVehicleType(datas []ItsVehicleType) error {
  185. if len(datas) == 0 {
  186. return nil
  187. }
  188. var buffer bytes.Buffer
  189. sql := "insert into t_its_vehicle_type (d_id,time,vtype,total) values"
  190. if _, err := buffer.WriteString(sql); err != nil {
  191. return err
  192. }
  193. for i, e := range datas {
  194. if i == len(datas)-1 {
  195. buffer.WriteString(fmt.Sprintf("('%s','%s',%d,%d);", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Vtype, e.Total))
  196. } else {
  197. buffer.WriteString(fmt.Sprintf("('%s','%s',%d,%d),", e.DID, e.Time.Format("2006-01-02 15:04:05"), e.Vtype, e.Total))
  198. }
  199. }
  200. return G_db.Exec(buffer.String()).Error
  201. }
  202. type VehicleTypeTag struct {
  203. DID string `json:"code"` //设备ID
  204. Time string `json:"time"` //数据时间
  205. Vtype int `json:"vtype"` //车辆类型
  206. Total int `json:"total"` //车辆数
  207. Flag int `json:"flag"` //类型标识,0:日数据;1:月数据;2小时数据
  208. }
  209. func GetVehicleType(Codes []string, start, end string, flag int) ([]VehicleTypeTag, error) {
  210. var (
  211. err error
  212. sql string
  213. arr []VehicleTypeTag
  214. )
  215. if flag == 0 {
  216. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d') as time,vtype,SUM(total) as total, 0 as flag FROM t_its_vehicle_type
  217. WHERE time >= ? AND time <= ? AND d_id IN (?)
  218. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),vtype
  219. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),vtype`
  220. } else {
  221. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m') as time,vtype,SUM(total) as total, 1 as flag FROM t_its_vehicle_type
  222. WHERE time >= ? AND time <= ? AND d_id IN (?)
  223. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m'),vtype
  224. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m'),vtype`
  225. }
  226. err = G_db.Raw(sql, start, end, Codes).Scan(&arr).Error
  227. return arr, err
  228. }
  229. func GetVehicleTypeEx(Codes []string, start, end string, Type []int, flag int) ([]VehicleTypeTag, error) {
  230. var (
  231. err error
  232. sql string
  233. arr []VehicleTypeTag
  234. )
  235. if flag == 0 {
  236. if len(Type) > 0 {
  237. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d') as time,vtype,SUM(total) as total, 0 as flag FROM t_its_vehicle_type
  238. WHERE time >= ? AND time <= ? AND d_id IN (?) AND vtype IN (?)
  239. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),vtype
  240. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),vtype`
  241. } else {
  242. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d') as time,vtype,SUM(total) as total, 0 as flag FROM t_its_vehicle_type
  243. WHERE time >= ? AND time <= ? AND d_id IN (?)
  244. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),vtype
  245. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d'),vtype`
  246. }
  247. } else if flag == 1 {
  248. if len(Type) > 0 {
  249. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m') as time,vtype,SUM(total) as total, 1 as flag FROM t_its_vehicle_type
  250. WHERE time >= ? AND time <= ? AND d_id IN (?) AND vtype IN (?)
  251. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m'),vtype
  252. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m'),vtype`
  253. } else {
  254. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m') as time,vtype,SUM(total) as total, 1 as flag FROM t_its_vehicle_type
  255. WHERE time >= ? AND time <= ? AND d_id IN (?)
  256. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m'),vtype
  257. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m'),vtype`
  258. }
  259. } else if flag == 2 {
  260. if len(Type) > 0 {
  261. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d %H') as time,vtype,SUM(total) as total, 2 as flag FROM t_its_vehicle_type
  262. WHERE time >= ? AND time <= ? AND d_id IN (?) AND vtype IN (?)
  263. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d %H'),vtype
  264. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d %H'),vtype`
  265. } else {
  266. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d %H') as time,vtype,SUM(total) as total, 2 as flag FROM t_its_vehicle_type
  267. WHERE time >= ? AND time <= ? AND d_id IN (?)
  268. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d %H'),vtype
  269. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d %H'),vtype`
  270. }
  271. }
  272. if len(Type) > 0 {
  273. err = G_db.Raw(sql, start, end, Codes, Type).Scan(&arr).Error
  274. } else {
  275. err = G_db.Raw(sql, start, end, Codes).Scan(&arr).Error
  276. }
  277. return arr, err
  278. }
  279. //车流
  280. type VehicleStreamsTotalTag struct {
  281. DID string `json:"code"` //设备ID
  282. Time string `json:"time"` //数据时间
  283. Total int `json:"total"` //车辆数
  284. Flag int `json:"flag"` //类型标识,0:日数据;1:月数据
  285. }
  286. func GetVehicleStreamsTag(Codes []string, start, end string, flag int) ([]VehicleStreamsTotalTag, error) {
  287. var (
  288. err error
  289. sql string
  290. arr []VehicleStreamsTotalTag
  291. )
  292. if flag == 0 {
  293. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d') as time,SUM(total) as total, 0 as flag FROM t_its_vehicle_direction
  294. WHERE time >= ? AND time <= ? AND d_id IN (?)
  295. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d')
  296. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d')`
  297. } else {
  298. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m') as time,SUM(total) as total, 1 as flag FROM t_its_vehicle_direction
  299. WHERE time >= ? AND time <= ? AND d_id IN (?)
  300. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m')
  301. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m')`
  302. }
  303. err = G_db.Raw(sql, start, end, Codes).Scan(&arr).Error
  304. return arr, err
  305. }
  306. //车流分小时统计
  307. type VehicleHourTotalTag struct {
  308. DID string `json:"code"` //设备ID
  309. Time string `json:"time"` //数据时间
  310. Total int `json:"total"` //车辆数
  311. }
  312. func GetVehicleHourTotalTag(Codes []string, start, end string) ([]VehicleHourTotalTag, error) {
  313. var (
  314. err error
  315. sql string
  316. arr []VehicleHourTotalTag
  317. )
  318. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d %H:00:00') as time,SUM(total) as total FROM t_its_vehicle_direction
  319. WHERE time >= ? AND time <= ? AND d_id IN (?)
  320. GROUP BY d_id,DATE_FORMAT(time,'%Y-%m-%d %H:00:00')
  321. ORDER BY d_id,DATE_FORMAT(time,'%Y-%m-%d %H:00:00')`
  322. err = G_db.Raw(sql, start, end, Codes).Scan(&arr).Error
  323. return arr, err
  324. }
  325. //速度
  326. type VehicleSpeedTag struct {
  327. DID string `json:"code"` //设备ID
  328. Time string `json:"time"` //数据时间
  329. Flag int `json:"flag"` //类型标识,0:日数据;1:月数据
  330. Sflag int `json:"sflag"` //速度标识
  331. Total int `json:"total"` //总数
  332. }
  333. func GetVehicleSpeedRange(Codes []string, start, end string, flag int) ([]VehicleSpeedTag, error) {
  334. var (
  335. err error
  336. sql string
  337. arr []VehicleSpeedTag
  338. )
  339. if flag == 0 {
  340. sql = `SELECT a.d_id as d_id,DATE_FORMAT(a.t,'%Y-%m-%d') as time ,0 as flag, a.sp as sflag,COUNT(*) as total
  341. FROM (SELECT d_id,time AS t,FLOOR(speed/20) AS sp FROM t_its_vehicle_speed
  342. WHERE d_id IN (?) AND time >= ? AND time <= ? ) a
  343. GROUP BY a.d_id,DATE_FORMAT(a.t,'%Y-%m-%d'),a.sp`
  344. } else {
  345. sql = `SELECT a.d_id as d_id,DATE_FORMAT(a.t,'%Y-%m') as time ,1 as flag, a.sp as sflag,COUNT(*) as total
  346. FROM (SELECT d_id,time AS t,FLOOR(speed/20) AS sp FROM t_its_vehicle_speed
  347. WHERE d_id IN (?) AND time >= ? AND time <= ? ) a
  348. GROUP BY a.d_id,DATE_FORMAT(a.t,'%Y-%m'),a.sp`
  349. }
  350. err = G_db.Raw(sql, Codes, start, end).Scan(&arr).Error
  351. return arr, err
  352. }
  353. func GetVehicleOverSpeed(Codes []string, start, end string, flag int) ([]VehicleSpeedTag, error) {
  354. var (
  355. err error
  356. sql string
  357. arr []VehicleSpeedTag
  358. )
  359. if flag == 0 {
  360. sql = `SELECT t.d_id AS d_id,DATE_FORMAT(t.time,'%Y-%m-%d') AS time ,0 AS flag, t.flag AS sflag,COUNT(*) AS total
  361. FROM (SELECT a.d_id ,a.time,
  362. CASE WHEN ROUND(100*a.speed/b.suggest_speed)<= 100 THEN 100
  363. WHEN ROUND(100*a.speed/b.suggest_speed) > 100 AND ROUND(100*a.speed/b.suggest_speed) < 110 THEN 101
  364. WHEN ROUND(100*a.speed/b.suggest_speed) >=110 AND ROUND(100*a.speed/b.suggest_speed) <120 THEN 102
  365. WHEN ROUND(100*a.speed/b.suggest_speed) >=120 AND ROUND(100*a.speed/b.suggest_speed) <150 THEN 103
  366. ELSE 104 END AS flag FROM t_its_vehicle_speed a,t_device_its b
  367. WHERE a.d_id IN (?) AND a.time >= ? AND a.time <= ? AND a.d_id = b.id) t
  368. GROUP BY t.d_id,DATE_FORMAT(t.time,'%Y-%m-%d'),t.flag
  369. ORDER BY t.d_id ,DATE_FORMAT(t.time,'%Y-%m-%d'),t.flag`
  370. } else {
  371. sql = `SELECT t.d_id AS d_id,DATE_FORMAT(t.time,'%Y-%m') AS time ,1 AS flag, t.flag AS sflag,COUNT(*) AS total
  372. FROM (SELECT a.d_id ,a.time,
  373. CASE WHEN ROUND(100*a.speed/b.suggest_speed)<= 100 THEN 100
  374. WHEN ROUND(100*a.speed/b.suggest_speed) > 100 AND ROUND(100*a.speed/b.suggest_speed) < 110 THEN 101
  375. WHEN ROUND(100*a.speed/b.suggest_speed) >=110 AND ROUND(100*a.speed/b.suggest_speed) <120 THEN 102
  376. WHEN ROUND(100*a.speed/b.suggest_speed) >=120 AND ROUND(100*a.speed/b.suggest_speed) <150 THEN 103
  377. ELSE 104 END AS flag FROM t_its_vehicle_speed a,t_device_its b
  378. WHERE a.d_id IN (?) AND a.time >= ? AND a.time <= ? AND a.d_id = b.id) t
  379. GROUP BY t.d_id,DATE_FORMAT(t.time,'%Y-%m'),t.flag
  380. ORDER BY t.d_id ,DATE_FORMAT(t.time,'%Y-%m'),t.flag`
  381. }
  382. err = G_db.Raw(sql, Codes, start, end).Scan(&arr).Error
  383. return arr, err
  384. }
  385. //速度
  386. type VehiclePlateTag struct {
  387. DID string `json:"code"` //设备ID
  388. Time string `json:"time"` //数据时间
  389. Vtype int `json:"vtype"` //车辆类型
  390. Plate string `json:"plate"` //车牌
  391. Speed int `json:"speed"` //车速
  392. }
  393. func GetVehiclePlate(Codes []string, start, end string, Types []int) ([]VehiclePlateTag, error) {
  394. var (
  395. err error
  396. sql string
  397. arr []VehiclePlateTag
  398. )
  399. if len(Types) > 0 {
  400. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d %H:%i:%s') AS time, vtype,plate,speed FROM t_its_vehicle_speed
  401. WHERE d_id IN (?) AND time >= ? AND time <= ? AND vtype IN (?)`
  402. } else {
  403. sql = `SELECT d_id,DATE_FORMAT(time,'%Y-%m-%d %H:%i:%s') AS time, vtype,plate,speed FROM t_its_vehicle_speed
  404. WHERE d_id IN (?) AND time >= ? AND time <= ? `
  405. }
  406. err = G_db.Raw(sql, Codes, start, end, Types).Scan(&arr).Error
  407. return arr, err
  408. }
  409. //速度
  410. type OverSpeedPlate struct {
  411. ID int64 `json:"id"`
  412. DID string `json:"code"` //设备ID
  413. Time string `json:"time"` //数据时间
  414. Vtype int `json:"vtype"` //车辆类型
  415. Plate string `json:"plate"` //车牌
  416. Speed int `json:"speed"` //车速
  417. Flag int `json:"flag"` //超速范围
  418. }
  419. func GetOverSpeedPlate(id int64, start, end string) ([]OverSpeedPlate, error) {
  420. var (
  421. err error
  422. sql string
  423. arr []OverSpeedPlate
  424. )
  425. sql = `SELECT a.id,a.d_id,DATE_FORMAT(a.time,'%Y-%m-%d %H:%i:%s') AS time,a.vtype,a.plate,a.speed,
  426. CASE WHEN ROUND(100*a.speed/b.suggest_speed)<= 100 THEN 100
  427. WHEN ROUND(100*a.speed/b.suggest_speed) > 100 AND ROUND(100*a.speed/b.suggest_speed) < 110 THEN 101
  428. WHEN ROUND(100*a.speed/b.suggest_speed) >=110 AND ROUND(100*a.speed/b.suggest_speed) <120 THEN 102
  429. WHEN ROUND(100*a.speed/b.suggest_speed) >=120 AND ROUND(100*a.speed/b.suggest_speed) <150 THEN 103
  430. ELSE 104 END AS flag FROM t_its_vehicle_speed a,t_device_its b
  431. WHERE a.id >= ? and a.time >= ? AND a.time < ? AND a.d_id = b.id AND a.speed > b.suggest_speed*1.1`
  432. err = G_db.Raw(sql, id, start, end).Scan(&arr).Error
  433. return arr, err
  434. }