diff --git a/apps/iot/src/database/ai_event_bo.erl b/apps/iot/src/database/ai_event_bo.erl new file mode 100644 index 0000000..a20be94 --- /dev/null +++ b/apps/iot/src/database/ai_event_bo.erl @@ -0,0 +1,22 @@ +%%%------------------------------------------------------------------- +%%% @author aresei +%%% @copyright (C) 2023, +%%% @doc +%%% +%%% @end +%%% Created : 16. 5月 2023 12:48 +%%%------------------------------------------------------------------- +-module(ai_event_bo). +-author("aresei"). +-include("iot.hrl"). + +%% API +-export([get_all_events/0, get_event_by_event_type/1]). + +-spec get_all_events() -> {ok, Devices :: [map()]} | {error, Reason :: any()}. +get_all_events() -> + mysql_pool:get_all(mysql_iot, <<"SELECT * FROM ai_event">>). + +-spec get_event_by_event_type(EventType :: integer()) -> {ok, EventInfo :: map()} | undefined. +get_event_by_event_type(EventType) when is_integer(EventType) -> + mysql_pool:get_row(mysql_iot, <<"SELECT * FROM ai_event WHERE event_type = ? LIMIT 1">>, [EventType]). \ No newline at end of file diff --git a/apps/iot/src/iot_device.erl b/apps/iot/src/iot_device.erl index e75cee0..6ddb14a 100644 --- a/apps/iot/src/iot_device.erl +++ b/apps/iot/src/iot_device.erl @@ -204,7 +204,9 @@ handle_cast({auth, false}, State = #state{device_uuid = DeviceUUID}) -> {noreply, State#state{auth_status = 0}}; %% ai事件的延迟整流逻辑, 保证在间隔事件内只发送一次 -handle_cast({ai_event, EventType, Params}, State = #state{device_uuid = DeviceUUID, ai_event_throttle = EventThrottle, ai_event_ttl = EventTTL}) -> +handle_cast({ai_event, EventType, Params0}, State = #state{device_uuid = DeviceUUID, ai_event_throttle = EventThrottle, ai_event_ttl = EventTTL}) -> + %% 查询数据库,覆盖params的部分信息 + Params = rewrite_ai_event(EventType, Params0), case maps:find(EventType, EventThrottle) of {ok, Interval} -> LastTimestamp = maps:get(EventType, EventTTL, 0), @@ -321,3 +323,13 @@ extract_build_location_code(<>) -> <>; extract_build_location_code(Code) when is_binary(Code) -> Code. + +-spec rewrite_ai_event(EventType :: integer(), Params :: map()) -> NParams :: map(). +rewrite_ai_event(EventType, Params) when is_integer(EventType), is_map(Params) -> + %% 查询数据库,覆盖params的部分信息 + case ai_event_bo:get_event_by_event_type(EventType) of + {ok, #{<<"event_code">> := EventCode, <<"event_name">> := EventName}} -> + Params#{<<"event_code">> => EventCode, <<"description">> => EventName}; + undefined -> + Params + end. \ No newline at end of file