refactor(gate.lua): 重构票务设备状态更新逻辑,提取公共工具函数
将原handleScan中重复的票务设备状态更新代码封装为统一的处理函数,替换原有冗余的遍历更新逻辑,提升代码可读性与可维护性。
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user