Przeglądaj źródła

fix: VIP过期检查加固+全零收费配置回退默认费率

lq 1 miesiąc temu
rodzic
commit
74fc4a7f11
1 zmienionych plików z 8 dodań i 3 usunięć
  1. 8 3
      internal/service/vehicle/vehicle.go

+ 8 - 3
internal/service/vehicle/vehicle.go

@@ -385,16 +385,21 @@ func (s *VehicleService) calculateFee(vehicle *dao.Vehicle, stayTime int64) floa
 	// 1. 根据车辆类型ID获取收费配置(唯一)
 	var feeConfig dao.FeeConfig
 	if err := global.GVA_DB.Where("vehicle_type_id = ?", vehicle.VehicleTypeID).First(&feeConfig).Error; err != nil {
-		// 无配置 → 默认计费
+		// 无配置 → 默认计费:0.1元/分钟
+		return float64(stayTime) * 0.1
+	}
+	// 配置存在但全为 0 → 同样回退默认费率
+	if feeConfig.UnitFee == 0 && feeConfig.StartFee == 0 && feeConfig.DailyMaxFee == 0 {
 		return float64(stayTime) * 0.1
 	}
 
-	// 2. 判断VIP有效性
+	// 2. 判断VIP有效性(必须IsVip=true、过期时间未到、且过期时间非零值)
 	isVIP := false
 	if vehicle.OwnerId != nil {
 		var owner dao.Owner
 		if err := global.GVA_DB.First(&owner, *vehicle.OwnerId).Error; err == nil {
-			isVIP = owner.IsVip && time.Now().Before(owner.VipExpireTime)
+			now := time.Now()
+			isVIP = owner.IsVip && owner.VipExpireTime.After(now) && !owner.VipExpireTime.IsZero()
 		}
 	}