channel.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. var booth dao.Booth
  21. global.GVA_DB.Model(&booth).Where("id = ?", req.BoothId).First(&booth)
  22. channel := dao.Channel{
  23. ChannelCode: req.ChannelCode,
  24. ChannelName: req.ChannelName,
  25. Direction: req.Direction,
  26. AllowTemporary: req.AllowTemporary,
  27. Description: req.Description,
  28. BoothID: req.BoothId,
  29. ParkingLotID: booth.ParkingLotID,
  30. }
  31. return global.GVA_DB.Create(&channel).Error
  32. }
  33. // UpdateChannel 更新通道
  34. func (s *channelService) UpdateChannel(req request.ChannelUpdate) error {
  35. var channel dao.Channel
  36. result := global.GVA_DB.First(&channel, req.ID)
  37. if result.RowsAffected == 0 {
  38. return errors.New("通道不存在")
  39. }
  40. // 检查通道编码是否被其他通道使用
  41. var existingChannel dao.Channel
  42. result = global.GVA_DB.Where("channel_code = ? AND id != ?", req.ChannelCode, req.ID).First(&existingChannel)
  43. if result.RowsAffected > 0 {
  44. return errors.New("通道编码已被其他通道使用")
  45. }
  46. channel.ChannelCode = req.ChannelCode
  47. channel.ChannelName = req.ChannelName
  48. channel.Direction = req.Direction
  49. channel.AllowTemporary = req.AllowTemporary
  50. channel.Description = req.Description
  51. channel.BoothID = req.BoothId
  52. return global.GVA_DB.Save(&channel).Error
  53. }
  54. // GetChannelByID 根据ID获取通道
  55. func (s *channelService) GetChannelByID(id uint) (dao.Channel, error) {
  56. var channel dao.Channel
  57. result := global.GVA_DB.First(&channel, id)
  58. if result.RowsAffected == 0 {
  59. return dao.Channel{}, errors.New("通道不存在")
  60. }
  61. return channel, nil
  62. }
  63. // GetChannelByCode 根据编码获取通道
  64. func (s *channelService) GetChannelByCode(code string) (dao.Channel, error) {
  65. var channel dao.Channel
  66. result := global.GVA_DB.Where("channel_code = ?", code).First(&channel)
  67. if result.RowsAffected == 0 {
  68. return dao.Channel{}, errors.New("通道不存在")
  69. }
  70. return channel, nil
  71. }
  72. func (s *channelService) QueryAllChannels() ([]dao.Channel, error) {
  73. var channels []dao.Channel
  74. err := global.GVA_DB.Find(&channels).Error
  75. if err != nil {
  76. return channels, err
  77. }
  78. return channels, nil
  79. }
  80. // ListChannels 获取通道列表
  81. func (s *channelService) ListChannels(req request.ChannelQuery) (int64, []dao.Channel, error) {
  82. var channels []dao.Channel
  83. var total int64
  84. query := global.GVA_DB.Model(&dao.Channel{})
  85. if req.ChannelCode != "" {
  86. query = query.Where("channel_code LIKE ?", "%"+req.ChannelCode+"%")
  87. }
  88. if req.ChannelName != "" {
  89. query = query.Where("channel_name LIKE ?", "%"+req.ChannelName+"%")
  90. }
  91. if req.Direction != "" {
  92. query = query.Where("direction = ?", req.Direction)
  93. }
  94. // 计算总数
  95. query.Count(&total)
  96. // 分页查询
  97. offset := (req.Page - 1) * req.PageSize
  98. result := query.Offset(offset).Limit(req.PageSize).Find(&channels)
  99. if result.Error != nil {
  100. return 0, nil, result.Error
  101. }
  102. return total, channels, nil
  103. }
  104. // DeleteChannel 删除通道
  105. func (s *channelService) DeleteChannel(id uint) error {
  106. result := global.GVA_DB.Delete(&dao.Channel{}, id)
  107. if result.RowsAffected == 0 {
  108. return errors.New("通道不存在")
  109. }
  110. return result.Error
  111. }