fee_config.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package vehicle
  2. import (
  3. "errors"
  4. "server/dao"
  5. "server/global"
  6. "server/model/vehicle/request"
  7. )
  8. type FeeConfigService struct{}
  9. // CreateFeeConfig 创建收费配置
  10. func (s *FeeConfigService) CreateFeeConfig(req request.FeeConfigCreate) error {
  11. // 检查车辆类型是否存在
  12. var vehicleType dao.VehicleType
  13. result := global.GVA_DB.First(&vehicleType, req.VehicleTypeID)
  14. if result.RowsAffected == 0 {
  15. return errors.New("车辆类型不存在")
  16. }
  17. // 检查车辆类型是否已存在收费配置
  18. var existingConfig dao.FeeConfig
  19. result = global.GVA_DB.Where("vehicle_type_id = ?", req.VehicleTypeID).First(&existingConfig)
  20. if result.RowsAffected > 0 {
  21. return errors.New("该车辆类型的收费配置已存在")
  22. }
  23. config := dao.FeeConfig{
  24. VehicleTypeID: req.VehicleTypeID,
  25. StartTime: req.StartTime,
  26. StartFee: req.StartFee,
  27. UnitTime: req.UnitTime,
  28. UnitFee: req.UnitFee,
  29. DailyMaxFee: req.DailyMaxFee,
  30. IsVIPFree: req.IsVIPFree,
  31. VIPDiscount: req.VIPDiscount,
  32. Description: req.Description,
  33. }
  34. return global.GVA_DB.Create(&config).Error
  35. }
  36. // UpdateFeeConfig 更新收费配置
  37. func (s *FeeConfigService) UpdateFeeConfig(req request.FeeConfigUpdate) error {
  38. var config dao.FeeConfig
  39. result := global.GVA_DB.First(&config, req.ID)
  40. if result.RowsAffected == 0 {
  41. return errors.New("收费配置不存在")
  42. }
  43. // 检查车辆类型是否存在
  44. var vehicleType dao.VehicleType
  45. result = global.GVA_DB.First(&vehicleType, req.VehicleTypeID)
  46. if result.RowsAffected == 0 {
  47. return errors.New("车辆类型不存在")
  48. }
  49. // 检查车辆类型是否被其他配置使用
  50. var existingConfig dao.FeeConfig
  51. result = global.GVA_DB.Where("vehicle_type_id = ? AND id != ?", req.VehicleTypeID, req.ID).First(&existingConfig)
  52. if result.RowsAffected > 0 {
  53. return errors.New("该车辆类型的收费配置已存在")
  54. }
  55. config.VehicleTypeID = req.VehicleTypeID
  56. config.StartTime = req.StartTime
  57. config.StartFee = req.StartFee
  58. config.UnitTime = req.UnitTime
  59. config.UnitFee = req.UnitFee
  60. config.DailyMaxFee = req.DailyMaxFee
  61. config.IsVIPFree = req.IsVIPFree
  62. config.VIPDiscount = req.VIPDiscount
  63. config.Description = req.Description
  64. return global.GVA_DB.Save(&config).Error
  65. }
  66. // GetFeeConfigByID 根据ID获取收费配置
  67. func (s *FeeConfigService) GetFeeConfigByID(id uint) (dao.FeeConfig, error) {
  68. var config dao.FeeConfig
  69. result := global.GVA_DB.First(&config, id)
  70. if result.RowsAffected == 0 {
  71. return dao.FeeConfig{}, errors.New("收费配置不存在")
  72. }
  73. return config, nil
  74. }
  75. // GetFeeConfigByVehicleType 根据车辆类型ID获取收费配置
  76. func (s *FeeConfigService) GetFeeConfigByVehicleType(vehicleTypeID uint) (dao.FeeConfig, error) {
  77. var config dao.FeeConfig
  78. result := global.GVA_DB.Where("vehicle_type_id = ?", vehicleTypeID).First(&config)
  79. if result.RowsAffected == 0 {
  80. return dao.FeeConfig{}, errors.New("收费配置不存在")
  81. }
  82. return config, nil
  83. }
  84. // ListFeeConfigs 获取收费配置列表
  85. func (s *FeeConfigService) ListFeeConfigs(req request.FeeConfigQuery) (int64, []dao.FeeConfig, error) {
  86. var configs []dao.FeeConfig
  87. var total int64
  88. query := global.GVA_DB.Model(&dao.FeeConfig{})
  89. if req.VehicleTypeID > 0 {
  90. query = query.Where("vehicle_type_id = ?", req.VehicleTypeID)
  91. }
  92. // 计算总数
  93. query.Count(&total)
  94. // 分页查询
  95. offset := (req.Page - 1) * req.PageSize
  96. result := query.Offset(offset).Limit(req.PageSize).Preload("VehicleType").Find(&configs)
  97. if result.Error != nil {
  98. return 0, nil, result.Error
  99. }
  100. return total, configs, nil
  101. }
  102. // DeleteFeeConfig 删除收费配置
  103. func (s *FeeConfigService) DeleteFeeConfig(id uint) error {
  104. result := global.GVA_DB.Delete(&dao.FeeConfig{}, id)
  105. if result.RowsAffected == 0 {
  106. return errors.New("收费配置不存在")
  107. }
  108. return result.Error
  109. }