|
@@ -0,0 +1,50 @@
|
|
|
|
|
+package system
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "time"
|
|
|
|
|
+ "wails-app/internal/global"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+type DeviceStatus struct {
|
|
|
|
|
+ ChannelName string `json:"channel_name"`
|
|
|
|
|
+ Direction string `json:"direction"`
|
|
|
|
|
+ DeviceName string `json:"device_name"`
|
|
|
|
|
+ DeviceStatus string `json:"device_status"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+type MonitorData struct {
|
|
|
|
|
+ TotalSpaces int64 `json:"total_spaces"`
|
|
|
|
|
+ UsedSpaces int64 `json:"used_spaces"`
|
|
|
|
|
+ InPark int64 `json:"in_park"`
|
|
|
|
|
+ TodayIncome float64 `json:"today_income"`
|
|
|
|
|
+ TodayEntry int64 `json:"today_entry"`
|
|
|
|
|
+ TodayExit int64 `json:"today_exit"`
|
|
|
|
|
+ Devices []DeviceStatus `json:"devices"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+type DashboardService struct{}
|
|
|
|
|
+
|
|
|
|
|
+func (s *DashboardService) GetMonitorData() (MonitorData, error) {
|
|
|
|
|
+ var d MonitorData
|
|
|
|
|
+ today := time.Now().Format("2006-01-02")
|
|
|
|
|
+
|
|
|
|
|
+ global.GVA_DB.Raw("SELECT COALESCE(SUM(capacity), 0) FROM parking_lot").Scan(&d.TotalSpaces)
|
|
|
|
|
+ global.GVA_DB.Raw("SELECT COUNT(*) FROM vehicle_record WHERE exit_time IS NULL").Scan(&d.InPark)
|
|
|
|
|
+ d.UsedSpaces = d.InPark
|
|
|
|
|
+
|
|
|
|
|
+ global.GVA_DB.Raw("SELECT COALESCE(SUM(amount), 0) FROM payment_record WHERE paid_at >= ? AND paid_at < ?",
|
|
|
|
|
+ today, today+" 23:59:59").Scan(&d.TodayIncome)
|
|
|
|
|
+
|
|
|
|
|
+ global.GVA_DB.Raw("SELECT COUNT(*) FROM vehicle_record WHERE entry_time >= ? AND entry_time < ?",
|
|
|
|
|
+ today, today+" 23:59:59").Scan(&d.TodayEntry)
|
|
|
|
|
+ global.GVA_DB.Raw("SELECT COUNT(*) FROM vehicle_record WHERE exit_time >= ? AND exit_time < ?",
|
|
|
|
|
+ today, today+" 23:59:59").Scan(&d.TodayExit)
|
|
|
|
|
+
|
|
|
|
|
+ global.GVA_DB.Raw(`SELECT ch.channel_name, ch.direction,
|
|
|
|
|
+ COALESCE(uhf.device_name, '-') as device_name,
|
|
|
|
|
+ COALESCE(uhf.status, 'offline') as device_status
|
|
|
|
|
+ FROM channel ch LEFT JOIN uhf_reader uhf ON uhf.channel_id = ch.id
|
|
|
|
|
+ WHERE ch.deleted_at IS NULL ORDER BY ch.id`).Scan(&d.Devices)
|
|
|
|
|
+
|
|
|
|
|
+ return d, nil
|
|
|
|
|
+}
|