Compare commits
No commits in common. "c901be50564b8b8bc005c76e7705250d94938a51" and "3a907417d64e9e2dab4c4579cd12f2d93f100106" have entirely different histories.
c901be5056
...
3a907417d6
1
.gitignore
vendored
1
.gitignore
vendored
@ -17,4 +17,3 @@ _build
|
|||||||
*.iml
|
*.iml
|
||||||
rebar3.crashdump
|
rebar3.crashdump
|
||||||
*~
|
*~
|
||||||
config/sys.config
|
|
||||||
|
|||||||
@ -25,82 +25,49 @@ init(Req0, Opts) ->
|
|||||||
}, Resp, Req1),
|
}, Resp, Req1),
|
||||||
{ok, Req2, Opts}.
|
{ok, Req2, Opts}.
|
||||||
|
|
||||||
%% 健康检查
|
|
||||||
handle_request("GET", "/api/health_check", _) ->
|
|
||||||
{ok, 200, <<"OK">>};
|
|
||||||
|
|
||||||
%% 场地信息
|
%% 场地信息
|
||||||
handle_request("POST", "/api/device_info/storeInfo", ReqBody) when is_binary(ReqBody) ->
|
handle_request("POST", "/api/device_info/storeInfo", ReqBody) when is_binary(ReqBody) ->
|
||||||
#{<<"storeInfos">> := StoreInfos} = jiffy:decode(ReqBody, [return_maps]),
|
#{<<"storeInfos">> := StoreInfos} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
lists:foreach(fun(Info) ->
|
lager:debug("[api_handler] get storeInfo: ~p", [StoreInfos]),
|
||||||
Msg = jiffy:encode(Info, [force_utf8]),
|
|
||||||
case catch njau_bot_database:insert_store_info(Info) of
|
njau_bot_logger:write(ReqBody),
|
||||||
{ok, _} ->
|
|
||||||
njau_bot_logger:write([<<"storeInfo: OK">>, Msg]);
|
|
||||||
{error, Error} ->
|
|
||||||
njau_bot_logger:write([<<"storeInfo: ERROR">>, Msg, format_error(Error)])
|
|
||||||
end
|
|
||||||
end, StoreInfos),
|
|
||||||
|
|
||||||
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
%% 设备信息
|
%% 设备信息
|
||||||
handle_request("POST", "/api/device_info/equip", ReqBody) ->
|
handle_request("POST", "/api/device_info/equip", ReqBody) ->
|
||||||
#{<<"equips">> := Equips} = jiffy:decode(ReqBody, [return_maps]),
|
#{<<"equips">> := Equips} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
lists:foreach(fun(Fields) ->
|
lager:debug("[api_handler] get equips: ~p", [Equips]),
|
||||||
Msg = jiffy:encode(Fields, [force_utf8]),
|
|
||||||
case catch njau_bot_database:insert_equip(Fields) of
|
njau_bot_logger:write(ReqBody),
|
||||||
{ok, _} ->
|
|
||||||
njau_bot_logger:write([<<"equip: OK">>, Msg]);
|
|
||||||
{error, Error} ->
|
|
||||||
njau_bot_logger:write([<<"equip: ERROR">>, Msg, format_error(Error)])
|
|
||||||
end
|
|
||||||
end, Equips),
|
|
||||||
|
|
||||||
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
%% 设备离线,在线状态
|
%% 设备离线,在线状态
|
||||||
handle_request("POST", "/api/device_info/online", ReqBody) ->
|
handle_request("POST", "/api/device_info/online", ReqBody) ->
|
||||||
#{<<"equipStatus">> := EquipStatus} = jiffy:decode(ReqBody, [return_maps]),
|
#{<<"equipStatus">> := Equips} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
lists:foreach(fun(Fields) ->
|
lager:debug("[api_handler] get online: ~p", [Equips]),
|
||||||
Msg = jiffy:encode(Fields, [force_utf8]),
|
|
||||||
case catch njau_bot_database:insert_equip_status(Fields) of
|
njau_bot_logger:write(ReqBody),
|
||||||
{ok, _} ->
|
|
||||||
njau_bot_logger:write([<<"equipStatus: OK">>, Msg]);
|
|
||||||
{error, Error} ->
|
|
||||||
njau_bot_logger:write([<<"equipStatus: ERROR">>, Msg, format_error(Error)])
|
|
||||||
end
|
|
||||||
end, EquipStatus),
|
|
||||||
|
|
||||||
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
%% 设备运行状态
|
%% 设备运行状态
|
||||||
handle_request("POST", "/api/device_info/runStatus", ReqBody) ->
|
handle_request("POST", "/api/device_info/runStatus", ReqBody) ->
|
||||||
#{<<"equipRunStatus">> := EquipRunStatus} = jiffy:decode(ReqBody, [return_maps]),
|
#{<<"equipRunStatus">> := EquipRunStatus} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
lists:foreach(fun(Fields) ->
|
lager:debug("[api_handler] get equipRunStatus: ~p", [EquipRunStatus]),
|
||||||
Msg = jiffy:encode(Fields, [force_utf8]),
|
|
||||||
case catch njau_bot_database:insert_run_status(Fields) of
|
njau_bot_logger:write(ReqBody),
|
||||||
{ok, _} ->
|
|
||||||
njau_bot_logger:write([<<"equipRunStatus: OK">>, Msg]);
|
|
||||||
{error, Error} ->
|
|
||||||
njau_bot_logger:write([<<"equipRunStatus: ERROR">>, Msg, format_error(Error)])
|
|
||||||
end
|
|
||||||
end, EquipRunStatus),
|
|
||||||
|
|
||||||
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
%% 订单信息推送
|
%% 订单信息推送
|
||||||
handle_request("POST", "/api/device_info/order", ReqBody) ->
|
handle_request("POST", "/api/device_info/order", ReqBody) ->
|
||||||
#{<<"orderInfos">> := OrderInfos} = jiffy:decode(ReqBody, [return_maps]),
|
%#{<<"equipRunStatus">> := EquipRunStatus} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
lists:foreach(fun(Order) ->
|
lager:debug("[api_handler] get order: ~p", [ReqBody]),
|
||||||
Msg = jiffy:encode(Order, [force_utf8]),
|
|
||||||
case catch njau_bot_database:insert_order(Order) of
|
njau_bot_logger:write(ReqBody),
|
||||||
{ok, _} ->
|
|
||||||
njau_bot_logger:write([<<"order: OK">>, Msg]);
|
|
||||||
{error, Error} ->
|
|
||||||
njau_bot_logger:write([<<"order: ERROR">>, Msg, format_error(Error)])
|
|
||||||
end
|
|
||||||
end, OrderInfos),
|
|
||||||
|
|
||||||
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
@ -138,10 +105,3 @@ json_reply(Result, Message) when is_boolean(Result), is_binary(Message) ->
|
|||||||
<<"message">> => Message
|
<<"message">> => Message
|
||||||
}, [force_utf8]),
|
}, [force_utf8]),
|
||||||
iolist_to_binary(Json).
|
iolist_to_binary(Json).
|
||||||
|
|
||||||
format_error({_, Message}) when is_binary(Message) ->
|
|
||||||
Message;
|
|
||||||
format_error(Message) when is_binary(Message) ->
|
|
||||||
Message;
|
|
||||||
format_error(Err) ->
|
|
||||||
iolist_to_binary(io_lib:format("~p", [Err])).
|
|
||||||
118
apps/njau_bot/src/http_handler/api_handler1.erl
Normal file
118
apps/njau_bot/src/http_handler/api_handler1.erl
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
%%%-------------------------------------------------------------------
|
||||||
|
%%% @author licheng5
|
||||||
|
%%% @copyright (C) 2020, <COMPANY>
|
||||||
|
%%% @doc
|
||||||
|
%%%
|
||||||
|
%%% @end
|
||||||
|
%%% Created : 26. 4月 2020 3:36 下午
|
||||||
|
%%%-------------------------------------------------------------------
|
||||||
|
-module(api_handler1).
|
||||||
|
-author("licheng5").
|
||||||
|
|
||||||
|
%% API
|
||||||
|
-export([init/2]).
|
||||||
|
|
||||||
|
init(Req0, Opts) ->
|
||||||
|
Method = binary_to_list(cowboy_req:method(Req0)),
|
||||||
|
Path = binary_to_list(cowboy_req:path(Req0)),
|
||||||
|
|
||||||
|
{ok, ReqBody, Req1} = parse_body(Req0),
|
||||||
|
Sign = cowboy_req:header(<<"sign">>, Req1, <<>>),
|
||||||
|
BodySign = njau_bot_signer:sign(ReqBody),
|
||||||
|
case BodySign =:= string:lowercase(Sign) of
|
||||||
|
true ->
|
||||||
|
{ok, StatusCode, Resp} = handle_request(Method, Path, ReqBody),
|
||||||
|
lager:debug("[http_protocol] request path: ~p, post_params: ~p, response: ~ts",
|
||||||
|
[Path, ReqBody, Resp]),
|
||||||
|
Req2 = cowboy_req:reply(StatusCode, #{
|
||||||
|
<<"Content-Type">> => <<"application/json">>
|
||||||
|
}, Resp, Req1),
|
||||||
|
{ok, Req2, Opts};
|
||||||
|
false ->
|
||||||
|
lager:debug("[api_handler] invalid sign: ~p, body sign: ~p, request body: ``~ts``", [Sign, BodySign, ReqBody]),
|
||||||
|
Req2 = cowboy_req:reply(500, #{
|
||||||
|
<<"Content-Type">> => <<"text/html;charset=utf-8">>
|
||||||
|
}, <<"Internal Server Error">>, Req1),
|
||||||
|
{ok, Req2, Opts}
|
||||||
|
end.
|
||||||
|
|
||||||
|
%% 场地信息
|
||||||
|
handle_request("POST", "/api/device_info/storeInfo", ReqBody) when is_binary(ReqBody) ->
|
||||||
|
#{<<"storeInfos">> := StoreInfos} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
|
lager:debug("[api_handler] get storeInfo: ~p", [StoreInfos]),
|
||||||
|
|
||||||
|
njau_bot_logger:write(ReqBody),
|
||||||
|
|
||||||
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
|
%% 设备信息
|
||||||
|
handle_request("POST", "/api/device_info/equip", ReqBody) ->
|
||||||
|
#{<<"equips">> := Equips} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
|
lager:debug("[api_handler] get equips: ~p", [Equips]),
|
||||||
|
|
||||||
|
njau_bot_logger:write(ReqBody),
|
||||||
|
|
||||||
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
|
%% 设备离线,在线状态
|
||||||
|
handle_request("POST", "/api/device_info/online", ReqBody) ->
|
||||||
|
#{<<"equipStatus">> := Equips} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
|
lager:debug("[api_handler] get online: ~p", [Equips]),
|
||||||
|
|
||||||
|
njau_bot_logger:write(ReqBody),
|
||||||
|
|
||||||
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
|
%% 设备运行状态
|
||||||
|
handle_request("POST", "/api/device_info/runStatus", ReqBody) ->
|
||||||
|
#{<<"equipRunStatus">> := EquipRunStatus} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
|
lager:debug("[api_handler] get equipRunStatus: ~p", [EquipRunStatus]),
|
||||||
|
|
||||||
|
njau_bot_logger:write(ReqBody),
|
||||||
|
|
||||||
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
|
%% 订单信息推送
|
||||||
|
handle_request("POST", "/api/device_info/order", ReqBody) ->
|
||||||
|
%#{<<"equipRunStatus">> := EquipRunStatus} = jiffy:decode(ReqBody, [return_maps]),
|
||||||
|
lager:debug("[api_handler] get order: ~p", [ReqBody]),
|
||||||
|
|
||||||
|
njau_bot_logger:write(ReqBody),
|
||||||
|
|
||||||
|
{ok, 200, json_reply(true, <<"接收成功"/utf8>>)};
|
||||||
|
|
||||||
|
handle_request(_, Path, _) ->
|
||||||
|
Path1 = list_to_binary(Path),
|
||||||
|
{ok, 200, json_reply(false, <<"url: ", Path1/binary, " not found">>)}.
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%% helper methods
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
parse_body(Req0) ->
|
||||||
|
ContentType = cowboy_req:header(<<"content-type">>, Req0),
|
||||||
|
case ContentType of
|
||||||
|
<<"application/json", _/binary>> ->
|
||||||
|
{ok, Body, Req1} = read_body(Req0),
|
||||||
|
{ok, Body, Req1};
|
||||||
|
_ ->
|
||||||
|
{ok, #{}, Req0}
|
||||||
|
end.
|
||||||
|
|
||||||
|
%% 读取请求体
|
||||||
|
read_body(Req) ->
|
||||||
|
read_body(Req, <<>>).
|
||||||
|
read_body(Req, AccData) ->
|
||||||
|
case cowboy_req:read_body(Req) of
|
||||||
|
{ok, Data, Req1} ->
|
||||||
|
{ok, <<AccData/binary, Data/binary>>, Req1};
|
||||||
|
{more, Data, Req1} ->
|
||||||
|
read_body(Req1, <<AccData/binary, Data/binary>>)
|
||||||
|
end.
|
||||||
|
|
||||||
|
json_reply(Result, Message) when is_boolean(Result), is_binary(Message) ->
|
||||||
|
Json = jiffy:encode(#{
|
||||||
|
<<"result">> => Result,
|
||||||
|
<<"message">> => Message
|
||||||
|
}, [force_utf8]),
|
||||||
|
iolist_to_binary(Json).
|
||||||
@ -1,50 +0,0 @@
|
|||||||
%%%-------------------------------------------------------------------
|
|
||||||
%%% @author aresei
|
|
||||||
%%% @copyright (C) 2018, <COMPANY>
|
|
||||||
%%% @doc
|
|
||||||
%%%
|
|
||||||
%%% @end
|
|
||||||
%%% Created : 29. 九月 2018 17:01
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
-module(mysql_pool).
|
|
||||||
-author("aresei").
|
|
||||||
|
|
||||||
%% API
|
|
||||||
-export([get_row/1, get_row/2, get_all/1, get_all/2]).
|
|
||||||
-export([update/3, update_by/1, update_by/2, insert/3]).
|
|
||||||
|
|
||||||
-define(POOL, mysql_bot).
|
|
||||||
|
|
||||||
%% 从数据库中查找一行记录
|
|
||||||
-spec get_row(Sql::binary()) -> {ok, Record::map()} | undefined.
|
|
||||||
get_row(Sql) when is_binary(Sql) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:get_row(ConnPid, Sql) end).
|
|
||||||
|
|
||||||
-spec get_row(Sql::binary(), Params::list()) -> {ok, Record::map()} | undefined.
|
|
||||||
get_row(Sql, Params) when is_binary(Sql), is_list(Params) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:get_row(ConnPid, Sql, Params) end).
|
|
||||||
|
|
||||||
-spec get_all(Sql::binary()) -> {ok, Rows::list()} | {error, Reason :: any()}.
|
|
||||||
get_all(Sql) when is_binary(Sql) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:get_all(ConnPid, Sql) end).
|
|
||||||
|
|
||||||
-spec get_all(Sql::binary(), Params::list()) -> {ok, Rows::list()} | {error, Reason::any()}.
|
|
||||||
get_all(Sql, Params) when is_binary(Sql), is_list(Params) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:get_all(ConnPid, Sql, Params) end).
|
|
||||||
|
|
||||||
-spec insert(Table :: binary(), Fields :: map() | list(), boolean()) ->
|
|
||||||
ok | {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert(Table, Fields, FetchInsertId) when is_binary(Table), is_list(Fields); is_map(Fields), is_boolean(FetchInsertId) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:insert(ConnPid, Table, Fields, FetchInsertId) end).
|
|
||||||
|
|
||||||
-spec update_by(UpdateSql :: binary()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}.
|
|
||||||
update_by(UpdateSql) when is_binary(UpdateSql) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:update_by(ConnPid, UpdateSql) end).
|
|
||||||
|
|
||||||
-spec update_by(UpdateSql :: binary(), Params :: list()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}.
|
|
||||||
update_by(UpdateSql, Params) when is_binary(UpdateSql) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:update_by(ConnPid, UpdateSql, Params) end).
|
|
||||||
|
|
||||||
-spec update(Table :: binary(), Fields :: map(), WhereFields :: map()) -> {ok, AffectedRows::integer()} | {error, Reason::any()}.
|
|
||||||
update(Table, Fields, WhereFields) when is_binary(Table), is_map(Fields), is_map(WhereFields) ->
|
|
||||||
poolboy:transaction(?POOL, fun(ConnPid) -> mysql_provider:update(ConnPid, Table, Fields, WhereFields) end).
|
|
||||||
@ -1,144 +0,0 @@
|
|||||||
%%%-------------------------------------------------------------------
|
|
||||||
%%% @author aresei
|
|
||||||
%%% @copyright (C) 2018, <COMPANY>
|
|
||||||
%%% @doc
|
|
||||||
%%%
|
|
||||||
%%% @end
|
|
||||||
%%% Created : 29. 九月 2018 17:01
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
-module(mysql_provider).
|
|
||||||
-author("aresei").
|
|
||||||
|
|
||||||
%% API
|
|
||||||
-export([get_row/2, get_row/3, get_all/2, get_all/3]).
|
|
||||||
-export([update/4, update_by/2, update_by/3, insert/4]).
|
|
||||||
|
|
||||||
%% 从数据库中查找一行记录
|
|
||||||
-spec get_row(ConnPid :: pid(), Sql::binary()) -> {ok, Record::map()} | undefined.
|
|
||||||
get_row(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) ->
|
|
||||||
lager:debug("[mysql_client] get_row sql is: ~p", [Sql]),
|
|
||||||
case mysql:query(ConnPid, Sql) of
|
|
||||||
{ok, Names, [Row | _]} ->
|
|
||||||
{ok, maps:from_list(lists:zip(Names, Row))};
|
|
||||||
{ok, _, []} ->
|
|
||||||
undefined;
|
|
||||||
Error ->
|
|
||||||
lager:warning("[mysql_client] get error: ~p", [Error]),
|
|
||||||
undefined
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec get_row(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Record::map()} | undefined.
|
|
||||||
get_row(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) ->
|
|
||||||
lager:debug("[mysql_client] get_row sql is: ~p, params: ~p", [Sql, Params]),
|
|
||||||
case mysql:query(ConnPid, Sql, Params) of
|
|
||||||
{ok, Names, [Row | _]} ->
|
|
||||||
{ok, maps:from_list(lists:zip(Names, Row))};
|
|
||||||
{ok, _, []} ->
|
|
||||||
undefined;
|
|
||||||
Error ->
|
|
||||||
lager:warning("[mysql_client] get error: ~p", [Error]),
|
|
||||||
undefined
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec get_all(ConnPid :: pid(), Sql::binary()) -> {ok, Rows::list()} | {error, Reason :: any()}.
|
|
||||||
get_all(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) ->
|
|
||||||
lager:debug("[mysql_client] get_all sql is: ~p", [Sql]),
|
|
||||||
case mysql:query(ConnPid, Sql) of
|
|
||||||
{ok, Names, Rows} ->
|
|
||||||
{ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)};
|
|
||||||
{error, Reason} ->
|
|
||||||
lager:warning("[mysql_client] get error: ~p", [Reason]),
|
|
||||||
{error, Reason}
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec get_all(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Rows::list()} | {error, Reason::any()}.
|
|
||||||
get_all(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) ->
|
|
||||||
lager:debug("[mysql_client] get_all sql is: ~p, params: ~p", [Sql, Params]),
|
|
||||||
case mysql:query(ConnPid, Sql, Params) of
|
|
||||||
{ok, Names, Rows} ->
|
|
||||||
{ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)};
|
|
||||||
{error, Reason} ->
|
|
||||||
lager:warning("[mysql_client] get error: ~p", [Reason]),
|
|
||||||
{error, Reason}
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec insert(ConnPid :: pid(), Table :: binary(), Fields :: map() | list(), boolean()) ->
|
|
||||||
ok | {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_boolean(FetchInsertId) ->
|
|
||||||
insert(ConnPid, Table, maps:to_list(Fields), FetchInsertId);
|
|
||||||
insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_list(Fields), is_boolean(FetchInsertId) ->
|
|
||||||
{Keys, Values} = kvs(Fields),
|
|
||||||
|
|
||||||
FieldSql = iolist_to_binary(lists:join(<<", ">>, Keys)),
|
|
||||||
Placeholders = lists:duplicate(length(Keys), <<"?">>),
|
|
||||||
ValuesPlaceholder = iolist_to_binary(lists:join(<<", ">>, Placeholders)),
|
|
||||||
|
|
||||||
Sql = <<"INSERT INTO ", Table/binary, "(", FieldSql/binary, ") VALUES(", ValuesPlaceholder/binary, ")">>,
|
|
||||||
lager:debug("[mysql_client] insert sql is: ~p, params: ~p", [Sql, Values]),
|
|
||||||
case mysql:query(ConnPid, Sql, Values) of
|
|
||||||
ok ->
|
|
||||||
case FetchInsertId of
|
|
||||||
true ->
|
|
||||||
InsertId = mysql:insert_id(ConnPid),
|
|
||||||
{ok, InsertId};
|
|
||||||
false ->
|
|
||||||
ok
|
|
||||||
end;
|
|
||||||
Error ->
|
|
||||||
Error
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec update_by(ConnPid :: pid(), UpdateSql :: binary()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}.
|
|
||||||
update_by(ConnPid, UpdateSql) when is_pid(ConnPid), is_binary(UpdateSql) ->
|
|
||||||
lager:debug("[mysql_client] updateBySql sql: ~p", [UpdateSql]),
|
|
||||||
case mysql:query(ConnPid, UpdateSql) of
|
|
||||||
ok ->
|
|
||||||
AffectedRows = mysql:affected_rows(ConnPid),
|
|
||||||
{ok, AffectedRows};
|
|
||||||
Error ->
|
|
||||||
Error
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec update_by(ConnPid :: pid(), UpdateSql :: binary(), Params :: list()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}.
|
|
||||||
update_by(ConnPid, UpdateSql, Params) when is_pid(ConnPid), is_binary(UpdateSql) ->
|
|
||||||
lager:debug("[mysql_client] updateBySql sql: ~p, params: ~p", [UpdateSql, Params]),
|
|
||||||
case mysql:query(ConnPid, UpdateSql, Params) of
|
|
||||||
ok ->
|
|
||||||
AffectedRows = mysql:affected_rows(ConnPid),
|
|
||||||
{ok, AffectedRows};
|
|
||||||
Error ->
|
|
||||||
Error
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec update(ConnPid :: pid(), Sql :: binary(), Fields :: map(), WhereFields :: map()) ->
|
|
||||||
{ok, AffectedRows::integer()} | {error, Reason::any()}.
|
|
||||||
update(ConnPid, Table, Fields, WhereFields) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_map(WhereFields) ->
|
|
||||||
%% 拼接set
|
|
||||||
{SetKeys, SetVals} = kvs(Fields),
|
|
||||||
SetKeys1 = lists:map(fun(K) when is_binary(K) -> <<"`", K/binary, "` = ?">> end, SetKeys),
|
|
||||||
SetSql = iolist_to_binary(lists:join(<<", ">>, SetKeys1)),
|
|
||||||
|
|
||||||
%% 拼接where
|
|
||||||
{WhereKeys, WhereVals} = kvs(WhereFields),
|
|
||||||
WhereKeys1 = lists:map(fun(K) when is_binary(K) -> <<"`", K/binary, "` = ?">> end, WhereKeys),
|
|
||||||
WhereSql = iolist_to_binary(lists:join(<<" AND ">>, WhereKeys1)),
|
|
||||||
|
|
||||||
Params = SetVals ++ WhereVals,
|
|
||||||
|
|
||||||
Sql = <<"UPDATE ", Table/binary, " SET ", SetSql/binary, " WHERE ", WhereSql/binary>>,
|
|
||||||
lager:debug("[mysql_client] update sql is: ~p, params: ~p", [Sql, Params]),
|
|
||||||
case mysql:query(ConnPid, Sql, Params) of
|
|
||||||
ok ->
|
|
||||||
AffectedRows = mysql:affected_rows(ConnPid),
|
|
||||||
{ok, AffectedRows};
|
|
||||||
Error ->
|
|
||||||
lager:error("[mysql_client] update sql: ~p, params: ~p, get a error: ~p", [Sql, Params, Error]),
|
|
||||||
Error
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec kvs(Fields :: map() | list()) -> {Keys :: list(), Values :: list()}.
|
|
||||||
kvs(Fields) when is_map(Fields) ->
|
|
||||||
kvs(maps:to_list(Fields));
|
|
||||||
kvs(Fields) when is_list(Fields) ->
|
|
||||||
{Keys0, Values0} = lists:foldl(fun({K, V}, {Acc0, Acc1}) -> {[K|Acc0], [V|Acc1]} end, {[], []}, Fields),
|
|
||||||
{lists:reverse(Keys0), lists:reverse(Values0)}.
|
|
||||||
@ -10,8 +10,6 @@
|
|||||||
cowboy,
|
cowboy,
|
||||||
lager,
|
lager,
|
||||||
jiffy,
|
jiffy,
|
||||||
poolboy,
|
|
||||||
mysql,
|
|
||||||
parse_trans,
|
parse_trans,
|
||||||
public_key,
|
public_key,
|
||||||
kernel,
|
kernel,
|
||||||
|
|||||||
@ -1,127 +0,0 @@
|
|||||||
%%%-------------------------------------------------------------------
|
|
||||||
%%% @author aresei
|
|
||||||
%%% @copyright (C) 2023, <COMPANY>
|
|
||||||
%%% @doc
|
|
||||||
%%%
|
|
||||||
%%% @end
|
|
||||||
%%% Created : 16. 5月 2023 12:48
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
-module(njau_bot_database).
|
|
||||||
-author("aresei").
|
|
||||||
|
|
||||||
-export([insert_equip/1, insert_store_info/1, insert_equip_status/1, insert_run_status/1, insert_order/1]).
|
|
||||||
|
|
||||||
-spec insert_store_info(Fields :: map()) -> {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert_store_info(Fields = #{<<"storeId">> := StoreId, <<"name">> := Name, <<"active">> := Active, <<"address">> := Address, <<"updateTime">> := UpdateTime}) ->
|
|
||||||
Longitude = maps:get(<<"longitude">>, Fields, <<"">>),
|
|
||||||
Latitude = maps:get(<<"latitude">>, Fields, <<"">>),
|
|
||||||
|
|
||||||
mysql_pool:insert(<<"store_info">>, #{
|
|
||||||
<<"storeId">> => StoreId,
|
|
||||||
<<"name">> => Name,
|
|
||||||
<<"longitude">> => Longitude,
|
|
||||||
<<"latitude">> => Latitude,
|
|
||||||
<<"active">> => Active,
|
|
||||||
<<"address">> => Address,
|
|
||||||
<<"updateTime">> => UpdateTime
|
|
||||||
}, true);
|
|
||||||
insert_store_info(Fields) when is_map(Fields) ->
|
|
||||||
Data = iolist_to_binary(jiffy:encode(Fields, [force_utf8])),
|
|
||||||
{error, <<"Invalid store info: ", Data/binary>>}.
|
|
||||||
|
|
||||||
-spec insert_equip(Fields :: map()) -> {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert_equip(Fields = #{<<"equipId">> := EquipId, <<"equipValue">> := EquipValue, <<"etype">> := EType, <<"address">> := Address, <<"updateTime">> := UpdateTime}) ->
|
|
||||||
mysql_pool:insert(<<"equip">>, #{
|
|
||||||
<<"equipId">> => EquipId,
|
|
||||||
<<"equipValue">> => EquipValue,
|
|
||||||
<<"storeId">> => maps:get(<<"storeId">>, Fields, 0),
|
|
||||||
<<"etype">> => EType,
|
|
||||||
<<"remark">> => maps:get(<<"remark">>, Fields, <<"">>),
|
|
||||||
<<"address">> => Address,
|
|
||||||
<<"updateTime">> => UpdateTime
|
|
||||||
}, true);
|
|
||||||
insert_equip(Fields) when is_map(Fields) ->
|
|
||||||
Data = iolist_to_binary(jiffy:encode(Fields, [force_utf8])),
|
|
||||||
{error, <<"Invalid equip info: ", Data/binary>>}.
|
|
||||||
|
|
||||||
-spec insert_run_status(Fields :: map()) -> {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert_run_status(Fields = #{<<"equipValue">> := EquipValue, <<"etype">> := EType, <<"status">> := Status, <<"storeId">> := StoreId, <<"updateTime">> := UpdateTime}) ->
|
|
||||||
mysql_pool:insert(<<"run_status">>, #{
|
|
||||||
<<"equipValue">> => EquipValue,
|
|
||||||
<<"etype">> => EType,
|
|
||||||
<<"status">> => Status,
|
|
||||||
<<"num">> => maps:get(<<"num">>, Fields, 0),
|
|
||||||
<<"storeId">> => StoreId,
|
|
||||||
<<"updateTime">> => UpdateTime
|
|
||||||
}, true);
|
|
||||||
insert_run_status(Fields) when is_map(Fields) ->
|
|
||||||
Data = iolist_to_binary(jiffy:encode(Fields, [force_utf8])),
|
|
||||||
{error, <<"Invalid run_status info: ", Data/binary>>}.
|
|
||||||
|
|
||||||
-spec insert_equip_status(Fields :: map()) -> {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert_equip_status(#{<<"equipValue">> := EquipValue, <<"status">> := Status, <<"updateTime">> := UpdateTime}) ->
|
|
||||||
mysql_pool:insert(<<"equip_status">>, #{
|
|
||||||
<<"equipValue">> => EquipValue,
|
|
||||||
<<"status">> => Status,
|
|
||||||
<<"updateTime">> => UpdateTime
|
|
||||||
}, true);
|
|
||||||
insert_equip_status(Fields) when is_map(Fields) ->
|
|
||||||
Data = iolist_to_binary(jiffy:encode(Fields, [force_utf8])),
|
|
||||||
{error, <<"Invalid equip_status info: ", Data/binary>>}.
|
|
||||||
|
|
||||||
-spec insert_order(Fields :: map()) -> {ok, InsertId :: integer()} | {error, Reason :: any()}.
|
|
||||||
insert_order(Fields = #{
|
|
||||||
<<"outTradeNo">> := OutTradeNo, <<"orderAmount">> := OrderAmount, <<"createTime">> := CreateTime, <<"status">> := Status,
|
|
||||||
<<"equipValue">> := EquipValue, <<"etype">> := EType,
|
|
||||||
<<"storeId">> := StoreId, <<"storeName">> := StoreName}) ->
|
|
||||||
|
|
||||||
TableFields = #{
|
|
||||||
<<"outTradeNo">> => OutTradeNo,
|
|
||||||
<<"orderAmount">> => OrderAmount,
|
|
||||||
<<"serviceName">> => maps:get(<<"serviceName">>, Fields, <<"">>),
|
|
||||||
<<"userId">> => maps:get(<<"userId">>, Fields, 0),
|
|
||||||
<<"createTime">> => CreateTime,
|
|
||||||
% <<"payFinishTime">> => maps:get(<<"payFinishTime">>, Fields, <<"0000-00-00 00:00:00">>),
|
|
||||||
<<"status">> => Status,
|
|
||||||
<<"equipValue">> => EquipValue,
|
|
||||||
<<"etype">> => EType,
|
|
||||||
<<"num">> => maps:get(<<"num">>, Fields, 0),
|
|
||||||
|
|
||||||
<<"storeId">> => StoreId,
|
|
||||||
<<"storeName">> => StoreName,
|
|
||||||
|
|
||||||
<<"refundOrderNo">> => maps:get(<<"refundOrderNo">>, Fields, <<"">>),
|
|
||||||
% <<"refundTime">> => maps:get(<<"refundTime">>, Fields, <<"0000-00-00 00:00:00">>),
|
|
||||||
<<"refundAmount">> => maps:get(<<"refundAmount">>, Fields, 0)
|
|
||||||
},
|
|
||||||
|
|
||||||
TableFields1 = case maps:is_key(<<"payFinishTime">>, Fields) of
|
|
||||||
true ->
|
|
||||||
PayFinishTime = maps:get(<<"payFinishTime">>, Fields),
|
|
||||||
case PayFinishTime =/= <<"">> of
|
|
||||||
true ->
|
|
||||||
TableFields#{<<"payFinishTime">> => PayFinishTime};
|
|
||||||
false ->
|
|
||||||
TableFields
|
|
||||||
end;
|
|
||||||
false ->
|
|
||||||
TableFields
|
|
||||||
end,
|
|
||||||
|
|
||||||
TableFields2 = case maps:is_key(<<"refundTime">>, Fields) of
|
|
||||||
true ->
|
|
||||||
RefundTime = maps:get(<<"refundTime">>, Fields),
|
|
||||||
case RefundTime =/= <<"">> of
|
|
||||||
true ->
|
|
||||||
TableFields1#{<<"refundTime">> => RefundTime};
|
|
||||||
false ->
|
|
||||||
TableFields1
|
|
||||||
end;
|
|
||||||
false ->
|
|
||||||
TableFields1
|
|
||||||
end,
|
|
||||||
|
|
||||||
mysql_pool:insert(<<"orders">>, TableFields2, true);
|
|
||||||
insert_order(Fields) when is_map(Fields) ->
|
|
||||||
Data = iolist_to_binary(jiffy:encode(Fields, [force_utf8])),
|
|
||||||
{error, <<"Invalid order info: ", Data/binary>>}.
|
|
||||||
@ -37,12 +37,6 @@ init([]) ->
|
|||||||
modules => ['njau_bot_logger']
|
modules => ['njau_bot_logger']
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
{ok, {SupFlags, pools() ++ ChildSpecs}}.
|
{ok, {SupFlags, ChildSpecs}}.
|
||||||
|
|
||||||
%% internal functions
|
%% internal functions
|
||||||
|
|
||||||
pools() ->
|
|
||||||
{ok, Pools} = application:get_env(njau_bot, pools),
|
|
||||||
lists:map(fun({Name, PoolArgs, WorkerArgs}) ->
|
|
||||||
poolboy:child_spec(Name, [{name, {local, Name}}|PoolArgs], WorkerArgs)
|
|
||||||
end, Pools).
|
|
||||||
|
|||||||
@ -1,65 +0,0 @@
|
|||||||
[
|
|
||||||
{njau_bot, [
|
|
||||||
|
|
||||||
{http_server, [
|
|
||||||
{port, 18085},
|
|
||||||
{acceptors, 500},
|
|
||||||
{max_connections, 10240},
|
|
||||||
{backlog, 10240}
|
|
||||||
]},
|
|
||||||
|
|
||||||
{pools, [
|
|
||||||
%% mysql连接池配置
|
|
||||||
{mysql_bot,
|
|
||||||
[{size, 10}, {max_overflow, 20}, {worker_module, mysql}],
|
|
||||||
[
|
|
||||||
{host, "172.30.37.212"},
|
|
||||||
{port, 3306},
|
|
||||||
{user, "njaubot"},
|
|
||||||
{connect_mode, synchronous},
|
|
||||||
{keep_alive, true},
|
|
||||||
{password, "v238xo@J1c8WGu"},
|
|
||||||
{database, "njau_bot"},
|
|
||||||
{queries, [<<"set names utf8">>]}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]},
|
|
||||||
|
|
||||||
{token, "aB3$dEfGhiJkLmNoPqRsTuVwXyZ!@#4f5e6d7c8b9a0f1e2d"}
|
|
||||||
]},
|
|
||||||
|
|
||||||
%% 系统日志配置,系统日志为lager, 支持日志按日期自动分割
|
|
||||||
{lager, [
|
|
||||||
{colored, true},
|
|
||||||
%% Whether to write a crash log, and where. Undefined means no crash logger.
|
|
||||||
{crash_log, "trade_hub.crash.log"},
|
|
||||||
%% Maximum size in bytes of events in the crash log - defaults to 65536
|
|
||||||
{crash_log_msg_size, 65536},
|
|
||||||
%% Maximum size of the crash log in bytes, before its rotated, set
|
|
||||||
%% to 0 to disable rotation - default is 0
|
|
||||||
{crash_log_size, 10485760},
|
|
||||||
%% What time to rotate the crash log - default is no time
|
|
||||||
%% rotation. See the README for a description of this format.
|
|
||||||
{crash_log_date, "$D0"},
|
|
||||||
%% Number of rotated crash logs to keep, 0 means keep only the
|
|
||||||
%% current one - default is 0
|
|
||||||
{crash_log_count, 5},
|
|
||||||
%% Whether to redirect error_logger messages into lager - defaults to true
|
|
||||||
{error_logger_redirect, true},
|
|
||||||
|
|
||||||
%% How big the gen_event mailbox can get before it is switched into sync mode
|
|
||||||
{async_threshold, 20},
|
|
||||||
%% Switch back to async mode, when gen_event mailbox size decrease from `async_threshold'
|
|
||||||
%% to async_threshold - async_threshold_window
|
|
||||||
{async_threshold_window, 5},
|
|
||||||
|
|
||||||
{handlers, [
|
|
||||||
%% debug | info | warning | error, 日志级别
|
|
||||||
% {lager_console_backend, debug},
|
|
||||||
{lager_file_backend, [{file, "debug.log"}, {level, debug}, {size, 314572800}]},
|
|
||||||
{lager_file_backend, [{file, "notice.log"}, {level, notice}, {size, 314572800}]},
|
|
||||||
{lager_file_backend, [{file, "error.log"}, {level, error}, {size, 314572800}]},
|
|
||||||
{lager_file_backend, [{file, "info.log"}, {level, info}, {size, 314572800}]}
|
|
||||||
]}
|
|
||||||
]}
|
|
||||||
].
|
|
||||||
@ -8,23 +8,6 @@
|
|||||||
{backlog, 10240}
|
{backlog, 10240}
|
||||||
]},
|
]},
|
||||||
|
|
||||||
{pools, [
|
|
||||||
%% mysql连接池配置
|
|
||||||
{mysql_bot,
|
|
||||||
[{size, 10}, {max_overflow, 20}, {worker_module, mysql}],
|
|
||||||
[
|
|
||||||
{host, "39.98.184.67"},
|
|
||||||
{port, 3306},
|
|
||||||
{user, "nannonguser"},
|
|
||||||
{connect_mode, synchronous},
|
|
||||||
{keep_alive, true},
|
|
||||||
{password, "nannong@Fe7w"},
|
|
||||||
{database, "njau_bot"},
|
|
||||||
{queries, [<<"set names utf8">>]}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]},
|
|
||||||
|
|
||||||
{token, "aB3$dEfGhiJkLmNoPqRsTuVwXyZ!@#4f5e6d7c8b9a0f1e2d"}
|
{token, "aB3$dEfGhiJkLmNoPqRsTuVwXyZ!@#4f5e6d7c8b9a0f1e2d"}
|
||||||
]},
|
]},
|
||||||
|
|
||||||
@ -1,9 +1,5 @@
|
|||||||
# 签名算法的说明
|
# 签名算法的说明
|
||||||
|
|
||||||
## 服务提供方式
|
|
||||||
nginx代理转发
|
|
||||||
部署的域名为: https://lgsiot.njau.edu.cn/bot
|
|
||||||
|
|
||||||
## 约定token的值为
|
## 约定token的值为
|
||||||
aB3$dEfGhiJkLmNoPqRsTuVwXyZ!@#4f5e6d7c8b9a0f1e2d
|
aB3$dEfGhiJkLmNoPqRsTuVwXyZ!@#4f5e6d7c8b9a0f1e2d
|
||||||
|
|
||||||
|
|||||||
@ -1,70 +0,0 @@
|
|||||||
CREATE TABLE `store_info` (
|
|
||||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`storeId` bigint(20) unsigned NOT NULL COMMENT '场地ID',
|
|
||||||
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '场地名称',
|
|
||||||
`longitude` varchar(20) NOT NULL DEFAULT '' COMMENT '场地经度',
|
|
||||||
`latitude` varchar(10) NOT NULL DEFAULT '' COMMENT '场地纬度',
|
|
||||||
`active` varchar(10) DEFAULT '' COMMENT '状态,Y有效 N无效',
|
|
||||||
`address` varchar(255) DEFAULT '' COMMENT '详细地址',
|
|
||||||
`updateTime` datetime NOT NULL COMMENT '最新更新时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY (`storeId`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE `equip` (
|
|
||||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`equipId` bigint(20) unsigned NOT NULL COMMENT '设备id',
|
|
||||||
`equipValue` varchar(100) NOT NULL DEFAULT '' COMMENT '设备编号',
|
|
||||||
`storeId` bigint(20) unsigned NOT NULL COMMENT '场地ID',
|
|
||||||
`etype` varchar(10) NOT NULL DEFAULT '' COMMENT '设备类型:XYJ 洗衣机 HGJ 烘干机 XXJ 洗鞋机 CFT 吹风机',
|
|
||||||
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '设备类型:XYJ 洗衣机 HGJ 烘干机 XXJ 洗鞋机 CFT 吹风机',
|
|
||||||
`address` varchar(255) DEFAULT '' COMMENT '详细地址',
|
|
||||||
`updateTime` datetime NOT NULL COMMENT '最新更新时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY (`equipId`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE `run_status` (
|
|
||||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`equipValue` varchar(100) NOT NULL DEFAULT '' COMMENT '设备编号',
|
|
||||||
`etype` varchar(10) NOT NULL DEFAULT '' COMMENT '设备类型:XYJ 洗衣机 HGJ 烘干机 XXJ 洗鞋机 CFT 吹风机',
|
|
||||||
`status` smallint(1) unsigned NOT NULL COMMENT '状态 1空闲 2工作中 3故障 4暂停',
|
|
||||||
`num` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '端口号,仅吹风机有',
|
|
||||||
`storeId` bigint(20) unsigned NOT NULL COMMENT '设备当前场地id',
|
|
||||||
`updateTime` datetime NOT NULL COMMENT '最新更新时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY (`equipValue`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE `equip_status` (
|
|
||||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`equipValue` varchar(100) NOT NULL DEFAULT '' COMMENT '设备编号',
|
|
||||||
`status` smallint(1) unsigned NOT NULL COMMENT '状态 1: 在线, 0: 离线',
|
|
||||||
`updateTime` datetime NOT NULL COMMENT '最新更新时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY (`equipValue`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE `orders` (
|
|
||||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`outTradeNo` varchar(100) NOT NULL DEFAULT '' COMMENT '订单号',
|
|
||||||
`orderAmount` decimal(11,2) DEFAULT NULL COMMENT '订单金额',
|
|
||||||
`serviceName` varchar(100) NOT NULL DEFAULT '' COMMENT '套餐名称',
|
|
||||||
`userId` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '用户ID',
|
|
||||||
|
|
||||||
`createTime` datetime NOT NULL COMMENT '订单创建时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
`payFinishTime` datetime DEFAULT NULL COMMENT '订单支付完成时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
`status` smallint unsigned NOT NULL COMMENT '订单状态 1未支付 2已支付 3.退款中 4已退款',
|
|
||||||
|
|
||||||
`equipValue` varchar(100) NOT NULL DEFAULT '' COMMENT '设备编号',
|
|
||||||
`etype` varchar(10) NOT NULL DEFAULT '' COMMENT '设备类型:XYJ 洗衣机 HGJ 烘干机 XXJ 洗鞋机 CFT 吹风机',
|
|
||||||
`num` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '端口号,仅吹风机有',
|
|
||||||
`storeId` bigint(20) unsigned NOT NULL COMMENT '设备当前场地id',
|
|
||||||
`storeName` varchar(255) NOT NULL DEFAULT '' COMMENT '场地名称',
|
|
||||||
|
|
||||||
`refundOrderNo` varchar(255) NOT NULL DEFAULT '' COMMENT '退款订单号',
|
|
||||||
`refundTime` datetime DEFAULT NULL COMMENT '退款时间,格式: yyyy-MM-dd HH:mm:ss',
|
|
||||||
`refundAmount` decimal(11,2) DEFAULT NULL COMMENT '退款金额',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY (`outTradeNo`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
||||||
@ -4,8 +4,6 @@
|
|||||||
{sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}},
|
{sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}},
|
||||||
{cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.10.0"}}},
|
{cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.10.0"}}},
|
||||||
{jiffy, ".*", {git, "https://github.com/davisp/jiffy.git", {tag, "1.1.1"}}},
|
{jiffy, ".*", {git, "https://github.com/davisp/jiffy.git", {tag, "1.1.1"}}},
|
||||||
{poolboy, ".*", {git, "https://github.com/devinus/poolboy.git", {tag, "1.5.1"}}},
|
|
||||||
{mysql, ".*", {git, "https://github.com/mysql-otp/mysql-otp", {tag, "1.8.0"}}},
|
|
||||||
{parse_trans, ".*", {git, "https://github.com/uwiger/parse_trans", {tag, "3.0.0"}}},
|
{parse_trans, ".*", {git, "https://github.com/uwiger/parse_trans", {tag, "3.0.0"}}},
|
||||||
{lager, ".*", {git,"https://github.com/erlang-lager/lager.git", {tag, "3.9.2"}}}
|
{lager, ".*", {git,"https://github.com/erlang-lager/lager.git", {tag, "3.9.2"}}}
|
||||||
]}.
|
]}.
|
||||||
|
|||||||
@ -25,18 +25,10 @@
|
|||||||
0},
|
0},
|
||||||
{<<"metrics">>,{pkg,<<"metrics">>,<<"1.0.1">>},1},
|
{<<"metrics">>,{pkg,<<"metrics">>,<<"1.0.1">>},1},
|
||||||
{<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.2.0">>},1},
|
{<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.2.0">>},1},
|
||||||
{<<"mysql">>,
|
|
||||||
{git,"https://github.com/mysql-otp/mysql-otp",
|
|
||||||
{ref,"caf5ff96c677a8fe0ce6f4082bc036c8fd27dd62"}},
|
|
||||||
0},
|
|
||||||
{<<"parse_trans">>,
|
{<<"parse_trans">>,
|
||||||
{git,"https://github.com/uwiger/parse_trans",
|
{git,"https://github.com/uwiger/parse_trans",
|
||||||
{ref,"6f3645afb43c7c57d61b54ef59aecab288ce1013"}},
|
{ref,"6f3645afb43c7c57d61b54ef59aecab288ce1013"}},
|
||||||
0},
|
0},
|
||||||
{<<"poolboy">>,
|
|
||||||
{git,"https://github.com/devinus/poolboy.git",
|
|
||||||
{ref,"3bb48a893ff5598f7c73731ac17545206d259fac"}},
|
|
||||||
0},
|
|
||||||
{<<"ranch">>,
|
{<<"ranch">>,
|
||||||
{git,"https://github.com/ninenines/ranch",
|
{git,"https://github.com/ninenines/ranch",
|
||||||
{ref,"a692f44567034dacf5efcaa24a24183788594eb7"}},
|
{ref,"a692f44567034dacf5efcaa24a24183788594eb7"}},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user