|
|
@@ -436,3 +436,53 @@ func (s *VehicleService) calculateFee(vehicle *dao.Vehicle, stayTime int64) floa
|
|
|
|
|
|
return fee
|
|
|
}
|
|
|
+
|
|
|
+// InParkVehicle 在场车辆信息
|
|
|
+type InParkVehicle struct {
|
|
|
+ RecordID uint `json:"record_id"`
|
|
|
+ PlateNumber string `json:"plate_number"`
|
|
|
+ VehicleType string `json:"vehicle_type"`
|
|
|
+ OwnerName string `json:"owner_name"`
|
|
|
+ OwnerPhone string `json:"owner_phone"`
|
|
|
+ EntryTime string `json:"entry_time"`
|
|
|
+ StayMinutes int64 `json:"stay_minutes"`
|
|
|
+ ParkingLot string `json:"parking_lot"`
|
|
|
+ ParkingSpace string `json:"parking_space"`
|
|
|
+}
|
|
|
+
|
|
|
+// GetInParkVehicles 获取所有在场车辆
|
|
|
+func (s *VehicleService) GetInParkVehicles(lotID uint, plateNumber string) ([]InParkVehicle, error) {
|
|
|
+ var results []InParkVehicle
|
|
|
+ now := time.Now()
|
|
|
+ query := global.GVA_DB.Table("vehicle_record").
|
|
|
+ Select(`vehicle_record.id as record_id, vehicle_record.plate_number, vehicle_type.name as vehicle_type,
|
|
|
+ owner.owner_name, owner.owner_phone, vehicle_record.entry_time,
|
|
|
+ parking_lot.lot_name as parking_lot`).
|
|
|
+ Joins("LEFT JOIN vehicle ON vehicle.plate_number = vehicle_record.plate_number").
|
|
|
+ Joins("LEFT JOIN vehicle_type ON vehicle_type.id = vehicle.vehicle_type_id").
|
|
|
+ Joins("LEFT JOIN owner ON owner.id = vehicle.owner_id").
|
|
|
+ Joins("LEFT JOIN parking_lot ON parking_lot.id = vehicle_record.parking_lot_id").
|
|
|
+ Where("vehicle_record.exit_time IS NULL")
|
|
|
+ if lotID > 0 {
|
|
|
+ query = query.Where("vehicle_record.parking_lot_id = ?", lotID)
|
|
|
+ }
|
|
|
+ if plateNumber != "" {
|
|
|
+ query = query.Where("vehicle_record.plate_number LIKE ?", "%"+plateNumber+"%")
|
|
|
+ }
|
|
|
+ err := query.Order("vehicle_record.entry_time ASC").Scan(&results).Error
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for i := range results {
|
|
|
+ // Parse entry time and calculate stay duration
|
|
|
+ t, parseErr := time.Parse("2006-01-02T15:04:05-07:00", results[i].EntryTime)
|
|
|
+ if parseErr != nil {
|
|
|
+ t, _ = time.Parse("2006-01-02 15:04:05", results[i].EntryTime)
|
|
|
+ }
|
|
|
+ results[i].StayMinutes = int64(now.Sub(t).Minutes())
|
|
|
+ if results[i].StayMinutes < 0 {
|
|
|
+ results[i].StayMinutes = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return results, nil
|
|
|
+}
|