From 0ef09239fd0c907384df49d6df8c90d652a1ad8e Mon Sep 17 00:00:00 2001 From: HenryDu8133 <813367384@qq.com> Date: Fri, 10 Jul 2026 21:39:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gate.lua):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E7=A5=A8=E5=8A=A1=E8=AE=BE=E5=A4=87=E7=8A=B6=E6=80=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8F=96=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E5=B7=A5=E5=85=B7=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将原handleScan中重复的票务设备状态更新代码封装为统一的处理函数,替换原有冗余的遍历更新逻辑,提升代码可读性与可维护性。 --- gate.lua | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/gate.lua b/gate.lua index ac8b5a7..89f7e5b 100644 --- a/gate.lua +++ b/gate.lua @@ -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