| 123456789101112131415161718192021222324252627282930313233 |
- package service
- import "wails-app/internal/global"
- type RevenueItem struct {
- Date string `json:"date"`
- ParkingLot string `json:"parking_lot"`
- Cash float64 `json:"cash"`
- Free float64 `json:"free"`
- Total float64 `json:"total"`
- Count int64 `json:"count"`
- }
- type ReportService struct{}
- func (s *ReportService) RevenueReport(startDate, endDate string, lotID uint) ([]RevenueItem, error) {
- var items []RevenueItem
- db := global.GVA_DB.Table("payment_record p").
- Select(`DATE(p.paid_at) as date, COALESCE(pr.lot_name,'-') as parking_lot,
- COALESCE(SUM(CASE WHEN p.payment_method='cash' THEN p.amount ELSE 0 END),0) as cash,
- COALESCE(SUM(CASE WHEN p.payment_method='free' THEN p.amount ELSE 0 END),0) as free,
- COALESCE(SUM(p.amount),0) as total, COUNT(*) as count`).
- Joins("LEFT JOIN vehicle_record vr ON vr.id = p.record_id").
- Joins("LEFT JOIN parking_lot pr ON pr.id = vr.parking_lot_id")
- if startDate != "" && endDate != "" {
- db = db.Where("p.paid_at >= ? AND p.paid_at <= ?", startDate, endDate+" 23:59:59")
- }
- if lotID > 0 {
- db = db.Where("vr.parking_lot_id = ?", lotID)
- }
- err := db.Group("DATE(p.paid_at), vr.parking_lot_id").Order("date DESC").Scan(&items).Error
- return items, err
- }
|