refactor(gate.lua): 重构票务设备状态更新逻辑,提取公共工具函数

将原handleScan中重复的票务设备状态更新代码封装为统一的处理函数,替换原有冗余的遍历更新逻辑,提升代码可读性与可维护性。
This commit is contained in:
2026-07-10 21:39:01 +08:00
parent 33155ef2ed
commit 0ef09239fd
+32 -11
View File
@@ -922,6 +922,36 @@ local function updateDeviceField(dev, key, value)
pcall(dev.updateTicket, key, value)
end
local function callTicketStateMethod(dev, methodName)
if type(dev) ~= "table" then return false end
local fn = dev[methodName]
if type(fn) ~= "function" then return false end
local okCall, okRes = pcall(fn)
if not okCall then return false end
return okRes ~= false
end
local function applyTicketDeviceState(dev, action, rides)
if type(dev) ~= "table" then return end
if action == "entry" then
if not callTicketStateMethod(dev, "markEntered") then
updateDeviceField(dev, "entered", true)
updateDeviceField(dev, "exited", false)
end
elseif action == "exit" then
if not callTicketStateMethod(dev, "markExited") then
updateDeviceField(dev, "exited", true)
updateDeviceField(dev, "entered", false)
end
elseif action == "reset" then
if not callTicketStateMethod(dev, "resetTicketState") then
updateDeviceField(dev, "entered", false)
updateDeviceField(dev, "exited", false)
end
end
if rides ~= nil then updateDeviceField(dev, "rides", rides) end
end
local function updateICCardField(dev, key, value)
if type(dev) ~= "table" or type(dev.updateICCard) ~= "function" then return false end
local okCall, okRes, detail = pcall(dev.updateICCard, key, value)
@@ -1267,23 +1297,14 @@ local function handleScan(scan, side, scanDev)
or tonumber(scan.trips_remaining or scan.rides_remaining)
or tonumber(scan.rides)
for _, dev in ipairs(inspectionDevs) do
if type(dev) == "table" and type(dev.updateTicket) == "function" then
if usedAction == "entry" then
dev.updateTicket("entered", true)
dev.updateTicket("exited", false)
if newRides ~= nil then dev.updateTicket("rides", newRides) end
else
dev.updateTicket("exited", true)
dev.updateTicket("entered", false)
if newRides ~= nil then dev.updateTicket("rides", newRides) end
end
end
applyTicketDeviceState(dev, usedAction, newRides)
end
end)
local remaining = tonumber(resp.trips_remaining)
if usedAction == "exit" and isTruthy(resp.destroy_ticket) and remaining ~= nil and remaining <= 0 then
for _, dev in ipairs(inspectionDevs) do
applyTicketDeviceState(dev, "reset", remaining)
if type(dev) == "table" and type(dev.destroyTicket) == "function" then
pcall(dev.destroyTicket)
end