| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package initialize
- import (
- "wails-app/internal/dao"
- "wails-app/internal/global"
- )
- // EnsureDefaultFeeConfig 确保系统内置"临时车"类型存在收费配置占位记录,
- // 并修复存量脏配置(旧版本无校验时可能写入无业务含义的数值)。
- //
- // 补正规则(只修无业务含义的值,不动用户的有效费率):
- // - unit_time <= 0:单位时间无意义,补正为 60 分钟(配合全零费用表示显式免费)。
- // - vip_discount <= 0:折扣为 0 会让 VIP 费用归零,补正为 1.0(不打折)。
- // - 负金额:补正为 0(防止出场倒贴)。
- func EnsureDefaultFeeConfig() error {
- db := global.GVA_DB
- if db == nil {
- return nil
- }
- // 存量脏配置修复
- var invalidUnitTime []dao.FeeConfig
- if err := db.Where("unit_time <= 0").Find(&invalidUnitTime).Error; err == nil {
- for i := range invalidUnitTime {
- db.Model(&invalidUnitTime[i]).Update("unit_time", 60)
- }
- }
- var invalidDiscount []dao.FeeConfig
- // 注意:GORM 对 VIPDiscount 的列名转换是 v_ip_discount(手写 SQL 须用真实列名)
- if err := db.Where("v_ip_discount <= 0").Find(&invalidDiscount).Error; err == nil {
- for i := range invalidDiscount {
- // 用结构体更新以依赖 GORM 列名转换
- db.Model(&invalidDiscount[i]).Updates(dao.FeeConfig{VIPDiscount: 1.0})
- }
- }
- var negativeFees []dao.FeeConfig
- if err := db.Where("start_fee < 0 OR unit_fee < 0 OR daily_max_fee < 0").Find(&negativeFees).Error; err == nil {
- for i := range negativeFees {
- updates := map[string]interface{}{}
- if negativeFees[i].StartFee < 0 {
- updates["start_fee"] = 0
- }
- if negativeFees[i].UnitFee < 0 {
- updates["unit_fee"] = 0
- }
- if negativeFees[i].DailyMaxFee < 0 {
- updates["daily_max_fee"] = 0
- }
- db.Model(&negativeFees[i]).Updates(updates)
- }
- }
- var tempType dao.VehicleType
- if err := db.Where("name = ? AND is_system = ?", "临时车", true).First(&tempType).Error; err != nil {
- return nil // 临时车类型不存在(新库种子尚未执行),跳过
- }
- var existing dao.FeeConfig
- result := db.Where("vehicle_type_id = ?", tempType.ID).First(&existing)
- if result.RowsAffected == 0 {
- return db.Create(&dao.FeeConfig{
- VehicleTypeID: tempType.ID,
- UnitTime: 60,
- VIPDiscount: 1.0,
- Description: "系统默认占位配置(免费),请按实际费率修改",
- }).Error
- }
- return nil
- }
|