Kaynağa Gözat

修改设备为 标签机

xu 4 ay önce
ebeveyn
işleme
ed314919a3

+ 2 - 0
server/api/v1/enter.go

@@ -3,11 +3,13 @@ package v1
 import (
 	"server/api/v1/example"
 	"server/api/v1/system"
+	"server/api/v1/vehicle"
 )
 
 type ApiGroup struct {
 	SystemApiGroup  system.ApiGroup
 	ExampleApiGroup example.ApiGroup
+	VehicleApiGroup vehicle.ApiGroup
 }
 
 var ApiGroupApp = new(ApiGroup)

+ 30 - 17
server/api/v1/vehicle/enter.go

@@ -1,21 +1,34 @@
 package vehicle
 
+import "server/service"
+
 // 车辆相关API
-var ApiGroup = []interface{}{
-	CreateVehicle,
-	UpdateVehicle,
-	GetVehicleByID,
-	GetVehicleByPlateNumber,
-	ListVehicles,
-	DeleteVehicle,
-	VehicleEntry,
-	VehicleExit,
-	CreateFeeConfig,
-	UpdateFeeConfig,
-	GetFeeConfigByID,
-	ListFeeConfigs,
-	DeleteFeeConfig,
-	GetVehicleRecordByID,
-	ListVehicleRecordsByPlateNumber,
-	ListVehicleRecords,
+//var ApiGroup = []interface{}{
+//	CreateVehicle,
+//	UpdateVehicle,
+//	GetVehicleByID,
+//	GetVehicleByPlateNumber,
+//	ListVehicles,
+//	DeleteVehicle,
+//	VehicleEntry,
+//	VehicleExit,
+//	CreateFeeConfig,
+//	UpdateFeeConfig,
+//	GetFeeConfigByID,
+//	ListFeeConfigs,
+//	DeleteFeeConfig,
+//	GetVehicleRecordByID,
+//	ListVehicleRecordsByPlateNumber,
+//	ListVehicleRecords,
+//}
+
+type ApiGroup struct {
+	ShortlistApi
 }
+
+var (
+	shortlistService     = service.ServiceGroupApp.VehicleServiceGroup.ShortlistService
+	vehicleService       = service.ServiceGroupApp.VehicleServiceGroup.VehicleService
+	vehicleRecordService = service.ServiceGroupApp.VehicleServiceGroup.VehicleRecordService
+	feeConfigService     = service.ServiceGroupApp.VehicleServiceGroup.FeeConfigService
+)

+ 6 - 8
server/api/v1/vehicle/fee_config.go

@@ -2,12 +2,10 @@ package vehicle
 
 import (
 	"fmt"
+	"github.com/gin-gonic/gin"
 	"server/model/common/response"
 	"server/model/vehicle/request"
 	vehicleResponse "server/model/vehicle/response"
-	"server/service/vehicle"
-
-	"github.com/gin-gonic/gin"
 )
 
 // CreateFeeConfig 创建收费配置
@@ -18,7 +16,7 @@ func CreateFeeConfig(c *gin.Context) {
 		return
 	}
 
-	err := vehicle.FeeConfigService.CreateFeeConfig(req)
+	err := feeConfigService.CreateFeeConfig(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -35,7 +33,7 @@ func UpdateFeeConfig(c *gin.Context) {
 		return
 	}
 
-	err := vehicle.FeeConfigService.UpdateFeeConfig(req)
+	err := feeConfigService.UpdateFeeConfig(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -54,7 +52,7 @@ func GetFeeConfigByID(c *gin.Context) {
 		return
 	}
 
-	config, err := vehicle.FeeConfigService.GetFeeConfigByID(uintID)
+	config, err := feeConfigService.GetFeeConfigByID(uintID)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -71,7 +69,7 @@ func ListFeeConfigs(c *gin.Context) {
 		return
 	}
 
-	total, list, err := vehicle.FeeConfigService.ListFeeConfigs(req)
+	total, list, err := feeConfigService.ListFeeConfigs(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -93,7 +91,7 @@ func DeleteFeeConfig(c *gin.Context) {
 		return
 	}
 
-	err = vehicle.FeeConfigService.DeleteFeeConfig(uintID)
+	err = feeConfigService.DeleteFeeConfig(uintID)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return

+ 84 - 0
server/api/v1/vehicle/shortlist.go

@@ -0,0 +1,84 @@
+package vehicle
+
+import (
+	"github.com/gin-gonic/gin"
+	"server/dao"
+	"server/model/common/request"
+	"server/model/common/response"
+	"strconv"
+)
+
+type ShortlistApi struct{}
+
+func (sa *ShortlistApi) QueryAllShortlists(c *gin.Context) {
+	shortlists, err := shortlistService.QueryAllShortlists()
+	if err != nil {
+		response.FailWithMessage("查询失败", c)
+		return
+	}
+	response.OkWithData(shortlists, c)
+}
+
+func (sa *ShortlistApi) QueryShortlistList(c *gin.Context) {
+	var info request.PageInfo
+	err := c.ShouldBindJSON(&info)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		return
+	}
+	list, total, err := shortlistService.QueryShortlistList(info)
+	if err != nil {
+		response.FailWithMessage("查询失败", c)
+		return
+	}
+	response.OkWithDetailed(response.PageResult{
+		List:     list,
+		Total:    total,
+		Page:     info.Page,
+		PageSize: info.PageSize,
+	}, "获取成功", c)
+}
+
+func (sa *ShortlistApi) CreateShortlist(c *gin.Context) {
+	var shortlist dao.Shortlist
+	err := c.ShouldBindJSON(&shortlist)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		return
+	}
+	err = shortlistService.CreateShortlist(shortlist)
+	if err != nil {
+		response.FailWithMessage("新增失败", c)
+		return
+	}
+	response.OkWithMessage("新增成功", c)
+}
+
+func (sa *ShortlistApi) UpdateShortlist(c *gin.Context) {
+	var shortlist dao.Shortlist
+	err := c.ShouldBindJSON(&shortlist)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		return
+	}
+	err = shortlistService.UpdateShortlist(shortlist)
+	if err != nil {
+		response.FailWithMessage("修改失败", c)
+		return
+	}
+	response.OkWithMessage("修改成功", c)
+}
+
+func (sa *ShortlistApi) DeleteShortlist(c *gin.Context) {
+	id, err := strconv.Atoi(c.Param("id"))
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		return
+	}
+	err = shortlistService.DeleteShortlist(id)
+	if err != nil {
+		response.FailWithMessage("删除失败", c)
+		return
+	}
+	response.OkWithMessage("删除成功", c)
+}

+ 9 - 11
server/api/v1/vehicle/vehicle.go

@@ -2,12 +2,10 @@ package vehicle
 
 import (
 	"fmt"
+	"github.com/gin-gonic/gin"
 	"server/model/common/response"
 	"server/model/vehicle/request"
 	vehicleResponse "server/model/vehicle/response"
-	"server/service/vehicle"
-
-	"github.com/gin-gonic/gin"
 )
 
 // CreateVehicle 创建车辆信息
@@ -17,7 +15,7 @@ func CreateVehicle(c *gin.Context) {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	err := vehicle.VehicleService.CreateVehicle(req)
+	err := vehicleService.CreateVehicle(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -34,7 +32,7 @@ func UpdateVehicle(c *gin.Context) {
 		return
 	}
 
-	err := vehicle.VehicleService.UpdateVehicle(req)
+	err := vehicleService.UpdateVehicle(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -53,7 +51,7 @@ func GetVehicleByID(c *gin.Context) {
 		return
 	}
 
-	vehicleInfo, err := vehicle.VehicleService.GetVehicleByID(uintID)
+	vehicleInfo, err := vehicleService.GetVehicleByID(uintID)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -70,7 +68,7 @@ func GetVehicleByPlateNumber(c *gin.Context) {
 		return
 	}
 
-	vehicleInfo, err := vehicle.VehicleService.GetVehicleByPlateNumber(plateNumber, "")
+	vehicleInfo, err := vehicleService.GetVehicleByPlateNumber(plateNumber, "")
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -87,7 +85,7 @@ func ListVehicles(c *gin.Context) {
 		return
 	}
 
-	total, list, err := vehicle.VehicleService.ListVehicles(req)
+	total, list, err := vehicleService.ListVehicles(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -109,7 +107,7 @@ func DeleteVehicle(c *gin.Context) {
 		return
 	}
 
-	err = vehicle.VehicleService.DeleteVehicle(uintID)
+	err = vehicleService.DeleteVehicle(uintID)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -126,7 +124,7 @@ func VehicleEntry(c *gin.Context) {
 		return
 	}
 
-	resp, err := vehicle.VehicleService.VehicleEntry(req)
+	resp, err := vehicleService.VehicleEntry(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -143,7 +141,7 @@ func VehicleExit(c *gin.Context) {
 		return
 	}
 
-	resp, err := vehicle.VehicleService.VehicleExit(req)
+	resp, err := vehicleService.VehicleExit(req)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return

+ 3 - 4
server/api/v1/vehicle/vehicle_record.go

@@ -4,7 +4,6 @@ import (
 	"fmt"
 	"server/model/common/response"
 	vehicleResponse "server/model/vehicle/response"
-	"server/service/vehicle"
 
 	"github.com/gin-gonic/gin"
 )
@@ -19,7 +18,7 @@ func GetVehicleRecordByID(c *gin.Context) {
 		return
 	}
 
-	record, err := vehicle.VehicleRecordService.GetVehicleRecordByID(uintID)
+	record, err := vehicleRecordService.GetVehicleRecordByID(uintID)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -45,7 +44,7 @@ func ListVehicleRecordsByPlateNumber(c *gin.Context) {
 		fmt.Sscanf(ps, "%d", &pageSize)
 	}
 
-	total, list, err := vehicle.VehicleRecordService.ListVehicleRecordsByPlateNumber(plateNumber, page, pageSize)
+	total, list, err := vehicleRecordService.ListVehicleRecordsByPlateNumber(plateNumber, page, pageSize)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -68,7 +67,7 @@ func ListVehicleRecords(c *gin.Context) {
 		fmt.Sscanf(ps, "%d", &pageSize)
 	}
 
-	total, list, err := vehicle.VehicleRecordService.ListVehicleRecords(page, pageSize)
+	total, list, err := vehicleRecordService.ListVehicleRecords(page, pageSize)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return

+ 1 - 1
server/config.yaml

@@ -125,7 +125,7 @@ mysql:
     config: charset=utf8mb4&parseTime=True&loc=Local
     db-name: lc_garage
     username: root
-    password: 123456
+    password: root
     path: 127.0.0.1
     engine: ""
     log-mode: error

+ 1 - 1
server/dao/owner.go

@@ -12,7 +12,7 @@ type Owner struct {
 	OwnerPhone    string    `gorm:"size:20;" json:"owner_phone"`
 	Vehicles      []Vehicle `gorm:"foreignKey:OwnerId" json:"vehicles"`
 	IsVip         bool      `gorm:"size:1;" json:"is_vip"`
-	VipExpireTime time.Time `json:"vip_expire_time"`
+	VipExpireTime time.Time `json:"vip_expire_time"  gorm:"default:null"`
 }
 
 func (Owner) TableName() string {

+ 39 - 2
server/dao/shortlist.go

@@ -5,10 +5,47 @@ import (
 	"time"
 )
 
-type ShortList struct {
+type Shortlist struct {
 	global.GVA_MODEL
 	ListType       string    `json:"list_type" gorm:"comment:名单类型"`
 	VehicleId      int       `json:"vehicle_id" gorm:"comment:车辆ID"`
 	Vehicle        Vehicle   `json:"vehicle" gorm:"foreignKey:VehicleId"`
-	ExpirationTime time.Time `json:"expiration_time" gorm:"comment:过期时间"`
+	ExpirationTime time.Time `json:"expiration_time" gorm:"comment:过期时间;default:null"`
+}
+
+func (Shortlist) TableName() string {
+	return "shortlist"
+}
+
+func QueryShortlistList(limit, offset int) (list []Shortlist, total int64, err error) {
+	db := global.GVA_DB.Model(&Shortlist{})
+
+	err = db.Count(&total).Error
+
+	if err != nil {
+		return list, total, err
+	}
+
+	db = db.Limit(limit).Offset(offset)
+
+	err = db.Find(&list).Error
+	return list, total, err
+}
+
+func QueryAllShortlists() (list []Shortlist, err error) {
+	err = global.GVA_DB.Model(&Shortlist{}).Find(&list).Error
+
+	return list, err
+}
+
+func CreateShortlist(shortlist Shortlist) error {
+	return global.GVA_DB.Create(&shortlist).Error
+}
+
+func UpdateShortlist(shortlist *Shortlist) error {
+	return global.GVA_DB.Where("id = ?", shortlist.ID).Updates(shortlist).Error
+}
+
+func DeleteShortlist(id int) error {
+	return global.GVA_DB.Where("id = ?", id).Unscoped().Delete(&Shortlist{}).Error
 }

+ 2 - 2
server/dao/vehicle_record.go

@@ -8,8 +8,8 @@ import (
 type VehicleRecord struct {
 	global.GVA_MODEL
 	PlateNumber    string    `gorm:"size:20;not null;index" json:"plate_number"`     // 车牌号
-	EntryTime      time.Time `json:"entry_time"`                                     // 入场时间
-	ExitTime       time.Time `json:"exit_time"`                                      // 出场时间
+	EntryTime      time.Time `json:"entry_time" gorm:"default:null"`                 // 入场时间
+	ExitTime       time.Time `json:"exit_time" gorm:"default:null"`                  // 出场时间
 	StayTime       int64     `json:"stay_time"`                                      // 停留时间(分钟)
 	Fee            float64   `json:"fee"`                                            // 费用
 	PaymentStatus  string    `gorm:"size:20;default:'unpaid'" json:"payment_status"` // 支付状态

+ 8 - 3
server/initialize/router.go

@@ -1,9 +1,6 @@
 package initialize
 
 import (
-	"github.com/gin-gonic/gin"
-	swaggerFiles "github.com/swaggo/files"
-	ginSwagger "github.com/swaggo/gin-swagger"
 	"net/http"
 	"os"
 	"server/docs"
@@ -13,6 +10,10 @@ import (
 	"server/router/owner"
 	"server/router/parking"
 	"server/router/vehicle"
+
+	"github.com/gin-gonic/gin"
+	swaggerFiles "github.com/swaggo/files"
+	ginSwagger "github.com/swaggo/gin-swagger"
 )
 
 type justFilesFilesystem struct {
@@ -45,6 +46,7 @@ func Routers() *gin.Engine {
 	InstallPlugin(Router) // 安装插件
 	systemRouter := router.RouterGroupApp.System
 	exampleRouter := router.RouterGroupApp.Example
+	vehicleRouter := router.RouterGroupApp.Vehicle
 
 	// 如果想要不使用nginx代理前端网页,可以修改 web/.env.production 下的
 	// VUE_APP_BASE_API = /
@@ -90,6 +92,8 @@ func Routers() *gin.Engine {
 
 		exampleRouter.InitFileUploadAndDownloadRouter(PrivateGroup)
 
+		vehicleRouter.InitShortlistRouter(PrivateGroup)
+
 		// 车辆相关路由
 		vehicle.SetupVehicleRouter(PrivateGroup)
 
@@ -100,6 +104,7 @@ func Routers() *gin.Engine {
 		parking.SetupParkingRouter(PrivateGroup)
 
 		// UHF读写器路由
+		//uhf.SetupUHFRouter(PrivateGroup)
 	}
 
 	global.GVA_LOG.Info("router register success")

+ 8 - 4
server/model/uhf/request/reader.go

@@ -4,10 +4,10 @@ package request
 type UHFReaderCreate struct {
 	DeviceCode   string `json:"device_code"`    // 设备编码
 	DeviceName   string `json:"device_name"`    // 设备名称
+	ConnectType  string `json:"connect_type"`   // 连接类型 tcp/serial
 	IPAddress    string `json:"ip_address"`     // IP地址
 	Port         int    `json:"port"`           // 端口
-	ConnectType  string `json:"connect_type"`   // 明确使用串口连接
-	COMPort      string `json:"com_port"`       // 串口名称(根据实际修改)
+	COMPort      string `json:"com_port"`       // 串口名称
 	BaudRate     int    `json:"baud_rate"`      // 串口波特率
 	IsActive     bool   `json:"is_active"`      // 是否启用
 	Description  string `json:"description"`    // 备注
@@ -19,8 +19,11 @@ type UHFReaderUpdate struct {
 	ID           uint   `json:"id"`             // 设备ID
 	DeviceCode   string `json:"device_code"`    // 设备编码
 	DeviceName   string `json:"device_name"`    // 设备名称
+	ConnectType  string `json:"connect_type"`   // 连接类型 tcp/serial
 	IPAddress    string `json:"ip_address"`     // IP地址
 	Port         int    `json:"port"`           // 端口
+	COMPort      string `json:"com_port"`       // 串口名称
+	BaudRate     int    `json:"baud_rate"`      // 串口波特率
 	IsActive     bool   `json:"is_active"`      // 是否启用
 	Description  string `json:"description"`    // 备注
 	ParkingLotID uint   `json:"parking_lot_id"` // 所属区域ID
@@ -30,6 +33,7 @@ type UHFReaderUpdate struct {
 type UHFReaderQuery struct {
 	DeviceCode   string `form:"device_code"`          // 设备编码
 	DeviceName   string `form:"device_name"`          // 设备名称
+	ConnectType  string `form:"connect_type"`         // 连接类型
 	IPAddress    string `form:"ip_address"`           // IP地址
 	Status       string `form:"status"`               // 状态
 	ParkingLotID uint   `form:"parking_lot_id"`       // 所属区域ID
@@ -55,6 +59,6 @@ type UHFReaderPower struct {
 
 // UHFReaderTagReport UHF读写器标签上报请求
 type UHFReaderTagReport struct {
-	DeviceCode string `json:"device_code"` // 设备编码
-	Tag        string `json:"tag"`         // 标签UII
+	DeviceCode string `json:"device_code" binding:"required"` // 设备编码
+	Tag        string `json:"tag" binding:"required"`         // 标签UII
 }

+ 23 - 3
server/model/uhf/response/reader.go

@@ -1,14 +1,34 @@
 package response
 
-import "server/dao"
+import (
+	"server/dao"
+	"time"
+)
 
 type UHFReader struct {
 	dao.UHFReader
 }
 
+type UHFReaderResponse struct {
+	ID           uint      `json:"id"`
+	DeviceCode   string    `json:"device_code"`
+	DeviceName   string    `json:"device_name"`
+	ConnectType  string    `json:"connect_type"`
+	IPAddress    string    `json:"ip_address"`
+	Port         int       `json:"port"`
+	COMPort      string    `json:"com_port"`
+	BaudRate     int       `json:"baud_rate"`
+	Status       string    `json:"status"`
+	IsActive     bool      `json:"is_active"`
+	Description  string    `json:"description"`
+	ParkingLotID uint      `json:"parking_lot_id"`
+	CreatedAt    time.Time `json:"created_at"`
+	UpdatedAt    time.Time `json:"updated_at"`
+}
+
 type UHFReaderList struct {
-	Total int64           `json:"total"`
-	List  []dao.UHFReader `json:"list"`
+	Total int64               `json:"total"`
+	List  []UHFReaderResponse `json:"list"`
 }
 
 type TagReadResult struct {

+ 2 - 0
server/router/enter.go

@@ -3,11 +3,13 @@ package router
 import (
 	"server/router/example"
 	"server/router/system"
+	"server/router/vehicle"
 )
 
 type RouterGroup struct {
 	System  system.RouterGroup
 	Example example.RouterGroup
+	Vehicle vehicle.RouterGroup
 }
 
 var RouterGroupApp = new(RouterGroup)

+ 11 - 0
server/router/parking/parking.go

@@ -2,6 +2,7 @@ package parking
 
 import (
 	"server/api/v1/parking"
+	"server/api/v1/uhf"
 
 	"github.com/gin-gonic/gin"
 )
@@ -38,5 +39,15 @@ func SetupParkingRouter(router *gin.RouterGroup) {
 			channelGroup.GET("/list", parking.ListChannels)
 			channelGroup.DELETE("/delete", parking.DeleteChannel)
 		}
+
+		uhfGroup := parkingGroup.Group("/device")
+		{
+			uhfGroup.POST("/create", uhf.CreateReader)
+			uhfGroup.PUT("/update", uhf.UpdateReader)
+			uhfGroup.GET("/get", uhf.GetReaderByID)
+			uhfGroup.GET("/get-by-code", uhf.GetReaderByCode)
+			uhfGroup.GET("/list", uhf.ListReaders)
+			uhfGroup.DELETE("/delete", uhf.DeleteReader)
+		}
 	}
 }

+ 6 - 2
server/router/vehicle/enter.go

@@ -1,6 +1,10 @@
 package vehicle
 
 // 车辆相关路由
-var RouterGroup = []interface{}{
-	SetupVehicleRouter,
+//var RouterGroup = []interface{}{
+//	SetupVehicleRouter,
+//}
+
+type RouterGroup struct {
+	ShortlistRouter
 }

+ 25 - 0
server/router/vehicle/shortlist.go

@@ -0,0 +1,25 @@
+package vehicle
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "server/api/v1"
+	"server/middleware"
+)
+
+type ShortlistRouter struct{}
+
+func (s *ShortlistRouter) InitShortlistRouter(Router *gin.RouterGroup) {
+	shortlistRouter := Router.Group("shortlist").Use(middleware.OperationRecord())
+	shortlistRouterWithoutRecord := Router.Group("shortlist")
+
+	shortlistRouterShortlist := v1.ApiGroupApp.VehicleApiGroup.ShortlistApi
+	{
+		shortlistRouter.POST("createShortlist", shortlistRouterShortlist.CreateShortlist)   // 创建shortlist
+		shortlistRouter.DELETE("deleteShortlist", shortlistRouterShortlist.DeleteShortlist) // 删除shortlist
+		shortlistRouter.PUT("updateShortlist", shortlistRouterShortlist.UpdateShortlist)    // 更新shortlist
+	}
+	{
+		shortlistRouterWithoutRecord.POST("queryAllShortlists", shortlistRouterShortlist.QueryAllShortlists) // 获取所有shortlist
+		shortlistRouterWithoutRecord.POST("queryShortlistList", shortlistRouterShortlist.QueryShortlistList) // 获取shortlist列表
+	}
+}

BIN
server/server.exe


+ 2 - 0
server/service/enter.go

@@ -3,11 +3,13 @@ package service
 import (
 	"server/service/example"
 	"server/service/system"
+	"server/service/vehicle"
 )
 
 type ServiceGroup struct {
 	SystemServiceGroup  system.ServiceGroup
 	ExampleServiceGroup example.ServiceGroup
+	VehicleServiceGroup vehicle.ServiceGroup
 }
 
 var ServiceGroupApp = new(ServiceGroup)

+ 12 - 5
server/service/vehicle/enter.go

@@ -1,7 +1,14 @@
 package vehicle
 
-var (
-	VehicleService       = NewVehicleService()
-	FeeConfigService     = NewFeeConfigService()
-	VehicleRecordService = NewVehicleRecordService()
-)
+type ServiceGroup struct {
+	ShortlistService
+	VehicleService
+	VehicleRecordService
+	FeeConfigService
+}
+
+//var (
+//	VehicleService       = NewVehicleService()
+//	FeeConfigService     = NewFeeConfigService()
+//	VehicleRecordService = NewVehicleRecordService()
+//)

+ 7 - 11
server/service/vehicle/fee_config.go

@@ -7,14 +7,10 @@ import (
 	"server/model/vehicle/request"
 )
 
-type feeConfigService struct{}
-
-func NewFeeConfigService() *feeConfigService {
-	return &feeConfigService{}
-}
+type FeeConfigService struct{}
 
 // CreateFeeConfig 创建收费配置
-func (s *feeConfigService) CreateFeeConfig(req request.FeeConfigCreate) error {
+func (s *FeeConfigService) CreateFeeConfig(req request.FeeConfigCreate) error {
 	// 检查车辆类型是否已存在
 	var existingConfig dao.FeeConfig
 	result := global.GVA_DB.Where("vehicle_type = ?", req.VehicleType).First(&existingConfig)
@@ -38,7 +34,7 @@ func (s *feeConfigService) CreateFeeConfig(req request.FeeConfigCreate) error {
 }
 
 // UpdateFeeConfig 更新收费配置
-func (s *feeConfigService) UpdateFeeConfig(req request.FeeConfigUpdate) error {
+func (s *FeeConfigService) UpdateFeeConfig(req request.FeeConfigUpdate) error {
 	var config dao.FeeConfig
 	result := global.GVA_DB.First(&config, req.ID)
 	if result.RowsAffected == 0 {
@@ -66,7 +62,7 @@ func (s *feeConfigService) UpdateFeeConfig(req request.FeeConfigUpdate) error {
 }
 
 // GetFeeConfigByID 根据ID获取收费配置
-func (s *feeConfigService) GetFeeConfigByID(id uint) (dao.FeeConfig, error) {
+func (s *FeeConfigService) GetFeeConfigByID(id uint) (dao.FeeConfig, error) {
 	var config dao.FeeConfig
 	result := global.GVA_DB.First(&config, id)
 	if result.RowsAffected == 0 {
@@ -76,7 +72,7 @@ func (s *feeConfigService) GetFeeConfigByID(id uint) (dao.FeeConfig, error) {
 }
 
 // GetFeeConfigByVehicleType 根据车辆类型获取收费配置
-func (s *feeConfigService) GetFeeConfigByVehicleType(vehicleType string) (dao.FeeConfig, error) {
+func (s *FeeConfigService) GetFeeConfigByVehicleType(vehicleType string) (dao.FeeConfig, error) {
 	var config dao.FeeConfig
 	result := global.GVA_DB.Where("vehicle_type = ?", vehicleType).First(&config)
 	if result.RowsAffected == 0 {
@@ -86,7 +82,7 @@ func (s *feeConfigService) GetFeeConfigByVehicleType(vehicleType string) (dao.Fe
 }
 
 // ListFeeConfigs 获取收费配置列表
-func (s *feeConfigService) ListFeeConfigs(req request.FeeConfigQuery) (int64, []dao.FeeConfig, error) {
+func (s *FeeConfigService) ListFeeConfigs(req request.FeeConfigQuery) (int64, []dao.FeeConfig, error) {
 	var configs []dao.FeeConfig
 	var total int64
 
@@ -110,7 +106,7 @@ func (s *feeConfigService) ListFeeConfigs(req request.FeeConfigQuery) (int64, []
 }
 
 // DeleteFeeConfig 删除收费配置
-func (s *feeConfigService) DeleteFeeConfig(id uint) error {
+func (s *FeeConfigService) DeleteFeeConfig(id uint) error {
 	result := global.GVA_DB.Delete(&dao.FeeConfig{}, id)
 	if result.RowsAffected == 0 {
 		return errors.New("收费配置不存在")

+ 35 - 0
server/service/vehicle/shortlist.go

@@ -0,0 +1,35 @@
+package vehicle
+
+import (
+	"server/dao"
+	"server/model/common/request"
+)
+
+type ShortlistService struct{}
+
+func (shortlistService *ShortlistService) QueryShortlistList(info request.PageInfo) (list interface{}, total int64, err error) {
+	limit := info.PageSize
+	offset := info.PageSize * (info.Page - 1)
+
+	shortlistList, t, err := dao.QueryShortlistList(limit, offset)
+	if err != nil {
+		return nil, 0, err
+	}
+	return shortlistList, t, nil
+}
+
+func (shortlistService *ShortlistService) QueryAllShortlists() (shortlists []dao.Shortlist, err error) {
+	return dao.QueryAllShortlists()
+}
+
+func (shortlistService *ShortlistService) CreateShortlist(shortlist dao.Shortlist) error {
+	return dao.CreateShortlist(shortlist)
+}
+
+func (shortlistService *ShortlistService) UpdateShortlist(shortlist dao.Shortlist) error {
+	return dao.CreateShortlist(shortlist)
+}
+
+func (shortlistService *ShortlistService) DeleteShortlist(id int) error {
+	return dao.DeleteShortlist(id)
+}

+ 10 - 14
server/service/vehicle/vehicle.go

@@ -9,14 +9,10 @@ import (
 	"time"
 )
 
-type vehicleService struct{}
-
-func NewVehicleService() *vehicleService {
-	return &vehicleService{}
-}
+type VehicleService struct{}
 
 // CreateVehicle 创建车辆信息
-func (s *vehicleService) CreateVehicle(req request.VehicleCreate) error {
+func (s *VehicleService) CreateVehicle(req request.VehicleCreate) error {
 	// 检查车牌号是否已存在
 	var existingVehicle dao.Vehicle
 	result := global.GVA_DB.Where("plate_number = ?", req.PlateNumber).First(&existingVehicle)
@@ -40,7 +36,7 @@ func (s *vehicleService) CreateVehicle(req request.VehicleCreate) error {
 }
 
 // UpdateVehicle 更新车辆信息
-func (s *vehicleService) UpdateVehicle(req request.VehicleUpdate) error {
+func (s *VehicleService) UpdateVehicle(req request.VehicleUpdate) error {
 	var vehicle dao.Vehicle
 	result := global.GVA_DB.First(&vehicle, req.ID)
 	if result.RowsAffected == 0 {
@@ -74,7 +70,7 @@ func (s *vehicleService) UpdateVehicle(req request.VehicleUpdate) error {
 }
 
 // GetVehicleByID 根据ID获取车辆信息
-func (s *vehicleService) GetVehicleByID(id uint) (dao.Vehicle, error) {
+func (s *VehicleService) GetVehicleByID(id uint) (dao.Vehicle, error) {
 	var vehicle dao.Vehicle
 	result := global.GVA_DB.First(&vehicle, id)
 	if result.RowsAffected == 0 {
@@ -84,7 +80,7 @@ func (s *vehicleService) GetVehicleByID(id uint) (dao.Vehicle, error) {
 }
 
 // GetVehicleByPlateNumber 根据车牌号获取车辆信息
-func (s *vehicleService) GetVehicleByPlateNumber(plateNumber, RFIDTag string) (dao.Vehicle, error) {
+func (s *VehicleService) GetVehicleByPlateNumber(plateNumber, RFIDTag string) (dao.Vehicle, error) {
 	var vehicle dao.Vehicle
 	result := global.GVA_DB.Where("plate_number = ? or rfid_tag = ?", plateNumber, RFIDTag).First(&vehicle)
 	if result.RowsAffected == 0 {
@@ -94,7 +90,7 @@ func (s *vehicleService) GetVehicleByPlateNumber(plateNumber, RFIDTag string) (d
 }
 
 // ListVehicles 获取车辆列表
-func (s *vehicleService) ListVehicles(req request.VehicleQuery) (int64, []dao.Vehicle, error) {
+func (s *VehicleService) ListVehicles(req request.VehicleQuery) (int64, []dao.Vehicle, error) {
 	var vehicles []dao.Vehicle
 	var total int64
 
@@ -126,7 +122,7 @@ func (s *vehicleService) ListVehicles(req request.VehicleQuery) (int64, []dao.Ve
 }
 
 // DeleteVehicle 删除车辆
-func (s *vehicleService) DeleteVehicle(id uint) error {
+func (s *VehicleService) DeleteVehicle(id uint) error {
 	result := global.GVA_DB.Delete(&dao.Vehicle{}, id)
 	if result.RowsAffected == 0 {
 		return errors.New("车辆不存在")
@@ -135,7 +131,7 @@ func (s *vehicleService) DeleteVehicle(id uint) error {
 }
 
 // VehicleEntry 车辆入场
-func (s *vehicleService) VehicleEntry(req request.VehicleEntry) (request.VehicleEntryResponse, error) {
+func (s *VehicleService) VehicleEntry(req request.VehicleEntry) (request.VehicleEntryResponse, error) {
 	// 检查车辆是否存在
 	vehicle, err := s.GetVehicleByPlateNumber(req.PlateNumber, req.RFIDTag)
 	if err != nil {
@@ -192,7 +188,7 @@ func (s *vehicleService) VehicleEntry(req request.VehicleEntry) (request.Vehicle
 }
 
 // VehicleExit 车辆出场
-func (s *vehicleService) VehicleExit(req request.VehicleExit) (request.VehicleExitResponse, error) {
+func (s *VehicleService) VehicleExit(req request.VehicleExit) (request.VehicleExitResponse, error) {
 	// 检查是否有未出场的记录
 	var record dao.VehicleRecord
 	result := global.GVA_DB.Where("plate_number = ? AND exit_time IS NULL", req.PlateNumber).First(&record)
@@ -244,7 +240,7 @@ func (s *vehicleService) VehicleExit(req request.VehicleExit) (request.VehicleEx
 }
 
 // calculateFee 计算停车费用
-func (s *vehicleService) calculateFee(vehicle dao.Vehicle, stayTime int64) float64 {
+func (s *VehicleService) calculateFee(vehicle dao.Vehicle, stayTime int64) float64 {
 	// 获取收费配置
 	var feeConfig dao.FeeConfig
 	result := global.GVA_DB.Where("vehicle_type = ?", vehicle.VehicleType).First(&feeConfig)

+ 4 - 8
server/service/vehicle/vehicle_record.go

@@ -5,14 +5,10 @@ import (
 	"server/global"
 )
 
-type vehicleRecordService struct{}
-
-func NewVehicleRecordService() *vehicleRecordService {
-	return &vehicleRecordService{}
-}
+type VehicleRecordService struct{}
 
 // GetVehicleRecordByID 根据ID获取车辆记录
-func (s *vehicleRecordService) GetVehicleRecordByID(id uint) (dao.VehicleRecord, error) {
+func (s *VehicleRecordService) GetVehicleRecordByID(id uint) (dao.VehicleRecord, error) {
 	var record dao.VehicleRecord
 	result := global.GVA_DB.First(&record, id)
 	if result.RowsAffected == 0 {
@@ -22,7 +18,7 @@ func (s *vehicleRecordService) GetVehicleRecordByID(id uint) (dao.VehicleRecord,
 }
 
 // ListVehicleRecordsByPlateNumber 根据车牌号获取车辆记录列表
-func (s *vehicleRecordService) ListVehicleRecordsByPlateNumber(plateNumber string, page, pageSize int) (int64, []dao.VehicleRecord, error) {
+func (s *VehicleRecordService) ListVehicleRecordsByPlateNumber(plateNumber string, page, pageSize int) (int64, []dao.VehicleRecord, error) {
 	var records []dao.VehicleRecord
 	var total int64
 
@@ -42,7 +38,7 @@ func (s *vehicleRecordService) ListVehicleRecordsByPlateNumber(plateNumber strin
 }
 
 // ListVehicleRecords 获取所有车辆记录列表
-func (s *vehicleRecordService) ListVehicleRecords(page, pageSize int) (int64, []dao.VehicleRecord, error) {
+func (s *VehicleRecordService) ListVehicleRecords(page, pageSize int) (int64, []dao.VehicleRecord, error) {
 	var records []dao.VehicleRecord
 	var total int64