|
|
@@ -174,6 +174,11 @@ func (s *VehicleService) DeleteVehicle(id uint) error {
|
|
|
|
|
|
// VehicleEntry 车辆入场
|
|
|
func (s *VehicleService) VehicleEntry(req request.VehicleEntry) (request.VehicleEntryResponse, error) {
|
|
|
+ // 黑名单检查
|
|
|
+ var shortlistSvc ShortlistService
|
|
|
+ if isBlack, _ := shortlistSvc.CheckVehicleShortlist(req.PlateNumber, req.RFIDTag); isBlack {
|
|
|
+ return request.VehicleEntryResponse{}, errors.New("车辆在黑名单中,禁止入场")
|
|
|
+ }
|
|
|
// 检查车辆是否存在
|
|
|
vehicle, err := s.GetVehicleByPlateNumber(req.PlateNumber, req.RFIDTag)
|
|
|
if err != nil {
|
|
|
@@ -326,46 +331,44 @@ 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
|
|
|
+ // 黑名单检查
|
|
|
+ var shortlistSvc ShortlistService
|
|
|
+ if isBlack, _ := shortlistSvc.CheckVehicleShortlist(req.PlateNumber, req.RFIDTag); isBlack {
|
|
|
+ return vehicleResponse.ExitConfirmResponse{}, errors.New("车辆在黑名单中,禁止出场")
|
|
|
+ }
|
|
|
+ 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("车辆未入场或已出场")
|
|
|
}
|
|
|
-
|
|
|
vehicle, err := s.GetVehicleByPlateNumber(req.PlateNumber, req.RFIDTag)
|
|
|
if err != nil {
|
|
|
return vehicleResponse.ExitConfirmResponse{}, err
|
|
|
}
|
|
|
-
|
|
|
exitTime := time.Now()
|
|
|
stayTime := int64(exitTime.Sub(record.EntryTime).Minutes())
|
|
|
if stayTime < 0 {
|
|
|
stayTime = 0
|
|
|
}
|
|
|
fee := s.calculateFee(&vehicle, stayTime)
|
|
|
-
|
|
|
record.ExitTime = &exitTime
|
|
|
record.StayTime = stayTime
|
|
|
record.Fee = fee
|
|
|
record.PaymentMethod = req.PaymentMethod
|
|
|
global.GVA_DB.Save(&record)
|
|
|
-
|
|
|
vehicle.LastExitTime = &exitTime
|
|
|
vehicle.TotalStayTime += stayTime
|
|
|
vehicle.TotalFee += fee
|
|
|
global.GVA_DB.Save(&vehicle)
|
|
|
-
|
|
|
paymentSvc := paymentService.NewPaymentService()
|
|
|
pr, err := paymentSvc.ProcessPayment(record.ID, req.PaymentMethod, fee, req.PaidAmount, operatorID)
|
|
|
if err != nil {
|
|
|
return vehicleResponse.ExitConfirmResponse{}, err
|
|
|
}
|
|
|
-
|
|
|
changeAmount := 0.0
|
|
|
if pr != nil {
|
|
|
changeAmount = pr.ChangeAmount
|
|
|
}
|
|
|
-
|
|
|
return vehicleResponse.ExitConfirmResponse{
|
|
|
PlateNumber: vehicle.PlateNumber,
|
|
|
EntryTime: record.EntryTime.Unix(),
|