channel.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package parking
  2. import (
  3. "errors"
  4. "server/dao"
  5. "server/global"
  6. "server/model/parking/request"
  7. )
  8. type channelService struct{}
  9. func NewChannelService() *channelService {
  10. return &channelService{}
  11. }
  12. // CreateChannel 创建通道
  13. func (s *channelService) CreateChannel(req request.ChannelCreate) error {
  14. // 检查通道编码是否已存在
  15. var existingChannel dao.Channel
  16. result := global.GVA_DB.Where("channel_code = ?", req.ChannelCode).First(&existingChannel)
  17. if result.RowsAffected > 0 {
  18. return errors.New("通道编码已存在")
  19. }
  20. channel := dao.Channel{
  21. ChannelCode: req.ChannelCode,
  22. ChannelName: req.ChannelName,
  23. Direction: req.Direction,
  24. AllowTemporary: req.AllowTemporary,
  25. Description: req.Description,
  26. }
  27. return global.GVA_DB.Create(&channel).Error
  28. }
  29. // UpdateChannel 更新通道
  30. func (s *channelService) UpdateChannel(req request.ChannelUpdate) error {
  31. var channel dao.Channel
  32. result := global.GVA_DB.First(&channel, req.ID)
  33. if result.RowsAffected == 0 {
  34. return errors.New("通道不存在")
  35. }
  36. // 检查通道编码是否被其他通道使用
  37. var existingChannel dao.Channel
  38. result = global.GVA_DB.Where("channel_code = ? AND id != ?", req.ChannelCode, req.ID).First(&existingChannel)
  39. if result.RowsAffected > 0 {
  40. return errors.New("通道编码已被其他通道使用")
  41. }
  42. channel.ChannelCode = req.ChannelCode
  43. channel.ChannelName = req.ChannelName
  44. channel.Direction = req.Direction
  45. channel.AllowTemporary = req.AllowTemporary
  46. channel.Description = req.Description
  47. return global.GVA_DB.Save(&channel).Error
  48. }
  49. // GetChannelByID 根据ID获取通道
  50. func (s *channelService) GetChannelByID(id uint) (dao.Channel, error) {
  51. var channel dao.Channel
  52. result := global.GVA_DB.First(&channel, id)
  53. if result.RowsAffected == 0 {
  54. return dao.Channel{}, errors.New("通道不存在")
  55. }
  56. return channel, nil
  57. }
  58. // GetChannelByCode 根据编码获取通道
  59. func (s *channelService) GetChannelByCode(code string) (dao.Channel, error) {
  60. var channel dao.Channel
  61. result := global.GVA_DB.Where("channel_code = ?", code).First(&channel)
  62. if result.RowsAffected == 0 {
  63. return dao.Channel{}, errors.New("通道不存在")
  64. }
  65. return channel, nil
  66. }
  67. // ListChannels 获取通道列表
  68. func (s *channelService) ListChannels(req request.ChannelQuery) (int64, []dao.Channel, error) {
  69. var channels []dao.Channel
  70. var total int64
  71. query := global.GVA_DB.Model(&dao.Channel{})
  72. if req.ChannelCode != "" {
  73. query = query.Where("channel_code LIKE ?", "%"+req.ChannelCode+"%")
  74. }
  75. if req.ChannelName != "" {
  76. query = query.Where("channel_name LIKE ?", "%"+req.ChannelName+"%")
  77. }
  78. if req.Direction != "" {
  79. query = query.Where("direction = ?", req.Direction)
  80. }
  81. // 计算总数
  82. query.Count(&total)
  83. // 分页查询
  84. offset := (req.Page - 1) * req.PageSize
  85. result := query.Offset(offset).Limit(req.PageSize).Find(&channels)
  86. if result.Error != nil {
  87. return 0, nil, result.Error
  88. }
  89. return total, channels, nil
  90. }
  91. // DeleteChannel 删除通道
  92. func (s *channelService) DeleteChannel(id uint) error {
  93. result := global.GVA_DB.Delete(&dao.Channel{}, id)
  94. if result.RowsAffected == 0 {
  95. return errors.New("通道不存在")
  96. }
  97. return result.Error
  98. }