|
|
@@ -9,10 +9,20 @@ import (
|
|
|
"wails-app/internal/model/vehicle/request"
|
|
|
vehicleResponse "wails-app/internal/model/vehicle/response"
|
|
|
paymentService "wails-app/internal/modules/payment/service"
|
|
|
+
|
|
|
+ "gorm.io/gorm"
|
|
|
)
|
|
|
|
|
|
type VehicleService struct{}
|
|
|
|
|
|
+// buildPlateOrRfidQuery 按车牌或RFID查询,RFID为空时仅用车牌(避免 rfid_tag='' 匹配所有无标签车辆)
|
|
|
+func buildPlateOrRfidQuery(db *gorm.DB, plateNumber, rfidTag string) *gorm.DB {
|
|
|
+ if rfidTag != "" {
|
|
|
+ return db.Where("plate_number = ? OR rfid_tag = ?", plateNumber, rfidTag)
|
|
|
+ }
|
|
|
+ return db.Where("plate_number = ?", plateNumber)
|
|
|
+}
|
|
|
+
|
|
|
// CreateVehicle 创建车辆信息
|
|
|
func (s *VehicleService) CreateVehicle(req request.VehicleCreate) error {
|
|
|
// 检查车牌号是否已存在
|
|
|
@@ -186,7 +196,7 @@ func (s *VehicleService) VehicleEntry(req request.VehicleEntry) (request.Vehicle
|
|
|
|
|
|
// 检查是否有未出场的记录
|
|
|
var existingRecord dao.VehicleRecord
|
|
|
- result := global.GVA_DB.Where("(plate_number = ? OR rfid_tag = ?) AND exit_time IS NULL", req.PlateNumber, req.RFIDTag).First(&existingRecord)
|
|
|
+ result := buildPlateOrRfidQuery(global.GVA_DB, req.PlateNumber, req.RFIDTag).Where("exit_time IS NULL").First(&existingRecord)
|
|
|
if result.RowsAffected > 0 {
|
|
|
return request.VehicleEntryResponse{}, errors.New("车辆已入场,未出场")
|
|
|
}
|
|
|
@@ -228,7 +238,7 @@ func (s *VehicleService) VehicleEntry(req request.VehicleEntry) (request.Vehicle
|
|
|
func (s *VehicleService) VehicleExit(req request.VehicleExit) (request.VehicleExitResponse, error) {
|
|
|
// 1. 查询未出场记录
|
|
|
var record dao.VehicleRecord
|
|
|
- if err := global.GVA_DB.Where("(plate_number = ? OR rfid_tag = ?) AND exit_time IS NULL", req.PlateNumber, req.RFIDTag).First(&record).Error; err != nil {
|
|
|
+ if err := buildPlateOrRfidQuery(global.GVA_DB, req.PlateNumber, req.RFIDTag).Where("exit_time IS NULL").First(&record).Error; err != nil {
|
|
|
return request.VehicleExitResponse{}, errors.New("车辆未入场或已出场")
|
|
|
}
|
|
|
|
|
|
@@ -280,8 +290,7 @@ func (s *VehicleService) VehicleExit(req request.VehicleExit) (request.VehicleEx
|
|
|
// ExitPreview 费用预览(不修改数据库,仅查询+计算费用)
|
|
|
func (s *VehicleService) ExitPreview(req request.VehicleEntry) (vehicleResponse.ExitPreviewResponse, error) {
|
|
|
var record dao.VehicleRecord
|
|
|
- err := global.GVA_DB.Where("(plate_number = ? OR rfid_tag = ?) AND exit_time IS NULL",
|
|
|
- req.PlateNumber, req.RFIDTag).First(&record).Error
|
|
|
+ err := buildPlateOrRfidQuery(global.GVA_DB, req.PlateNumber, req.RFIDTag).Where("exit_time IS NULL").First(&record).Error
|
|
|
if err != nil {
|
|
|
return vehicleResponse.ExitPreviewResponse{}, errors.New("车辆未入场或已出场")
|
|
|
}
|
|
|
@@ -317,9 +326,8 @@ func (s *VehicleService) ExitPreview(req request.VehicleEntry) (vehicleResponse.
|
|
|
|
|
|
// ExitConfirm 确认出场 + 支付(更新车辆记录 + 创建支付记录)
|
|
|
func (s *VehicleService) ExitConfirm(req request.ExitConfirmRequest, operatorID uint) (vehicleResponse.ExitConfirmResponse, error) {
|
|
|
- var record dao.VehicleRecord
|
|
|
- err := global.GVA_DB.Where("(plate_number = ? OR rfid_tag = ?) AND exit_time IS NULL",
|
|
|
- req.PlateNumber, req.RFIDTag).First(&record).Error
|
|
|
+var record dao.VehicleRecord
|
|
|
+ err := buildPlateOrRfidQuery(global.GVA_DB, req.PlateNumber, req.RFIDTag).Where("exit_time IS NULL").First(&record).Error
|
|
|
if err != nil {
|
|
|
return vehicleResponse.ExitConfirmResponse{}, errors.New("车辆未入场或已出场")
|
|
|
}
|