fee_config.go 3.3 KB

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