Przeglądaj źródła

feat: 票机按钮API——创建无车牌入场+打印小票

lq 1 miesiąc temu
rodzic
commit
97f8ab1a49
2 zmienionych plików z 71 dodań i 0 usunięć
  1. 3 0
      internal/initialize/router.go
  2. 68 0
      internal/modules/printer/api.go

+ 3 - 0
internal/initialize/router.go

@@ -13,6 +13,7 @@ import (
 	"wails-app/internal/modules/report"
 	"wails-app/internal/modules/shift"
 	"wails-app/internal/modules/payment"
+	"wails-app/internal/modules/printer"
 	"wails-app/internal/router/parking"
 	"wails-app/internal/router/vehicle"
 
@@ -121,6 +122,8 @@ func Routers() *gin.Engine {
 
 		// 交接班路由
 		shift.SetupShiftRouter(PrivateGroup)
+		// 打印机路由
+		printer.SetupPrinterRouter(PrivateGroup)
 
 		// 收入报表路由
 		report.SetupReportRouter(PrivateGroup)

+ 68 - 0
internal/modules/printer/api.go

@@ -0,0 +1,68 @@
+package printer
+
+import (
+	"github.com/gin-gonic/gin"
+	"wails-app/internal/dao"
+	"wails-app/internal/global"
+	"wails-app/internal/model/common/response"
+	"wails-app/internal/model/vehicle/request"
+	printService "wails-app/internal/modules/printer/service"
+	svc "wails-app/internal/service"
+)
+
+var printSvc = printService.NewPrintService()
+var vehicleSvc = svc.ServiceGroupApp.VehicleServiceGroup.VehicleService
+
+type buttonReq struct {
+	PrinterID   uint   `json:"printer_id"`
+	ChannelCode string `json:"channel_code"`
+	PlateNo     string `json:"plate_number"`
+}
+
+func TicketMachineButton(c *gin.Context) {
+	var req buttonReq
+	if err := c.ShouldBindJSON(&req); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	// 创建入场记录(临时车,可能无车牌)
+	entryResp, err := vehicleSvc.VehicleEntry(request.VehicleEntry{
+		PlateNumber: req.PlateNo, RFIDTag: "",
+		ParkingLotID: 1, ParkingSpaceID: 1,
+	})
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	// 获取刚创建的数字票
+	var tickets []dao.DigitalTicket
+	global.GVA_DB.Where("plate_number = ?", entryResp.Data.PlateNumber).Order("id DESC").Limit(1).Find(&tickets)
+	if len(tickets) == 0 {
+		response.FailWithMessage("数字票创建失败", c)
+		return
+	}
+
+	// 获取停车场名
+	var lot dao.ParkingLot
+	global.GVA_DB.First(&lot, entryResp.Data.ParkingLotID)
+
+	// 打印小票
+	if err := printSvc.PrintTicket(req.PrinterID, lot.LotName, req.ChannelCode, req.PlateNo, tickets[0].ID, tickets[0].TicketNo); err != nil {
+		response.FailWithMessage("打印失败: "+err.Error(), c)
+		return
+	}
+
+	response.OkWithData(gin.H{
+		"ticket_id":   tickets[0].ID,
+		"ticket_no":   tickets[0].TicketNo,
+		"slip_no":     tickets[0].ID,
+		"entry_time":  entryResp.Data.EntryTime,
+		"plate_number": entryResp.Data.PlateNumber,
+	}, c)
+}
+
+func SetupPrinterRouter(router *gin.RouterGroup) {
+	router.POST("/ticket-machine/button", TicketMachineButton)
+}