1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
| %%%-------------------------------------------------------------------
| %%% @author panse
| %%% @copyright (C) 2018, <COMPANY>
| %%% @doc
| %%%
| %%% @end
| %%% Created : 06. 八月 2018 10:16
| %%%-------------------------------------------------------------------
| -module(device_info).
| -author("panse").
|
| %%% 设备信息表
| %%-record(device_info, {node_id, uuid, device_name, dev_address,
| %% father_node, node_online, create_time, update_time, create_by, del_flag}).
| -record(device_info, {node_id, uuid, device_id, cluster_id, create_time, update_time, create_by, del_flag}).
|
| -include_lib("stdlib/include/ms_transform.hrl").
| -include_lib("stdlib/include/qlc.hrl").
|
| %% API
| %%% 创建,增,删,改,查
| -export([create_deviceInfotable/2, add_deviceInfo/4, del_DevInfo/1, findDeviceInfo/2]).
| %%-export([del_deviceInfo/1]).
| %%% 查找在线设备,数据格式转换
| -export([findDeviceOnlineList/2, deviceOnlineList2Maps/1]).
| %%% 根据节点名返回uuid
| -export([findNodeId/1]).
|
|
| %%% 创建基本设备表
| %%% 应仅在集群初始化的时候调用一次
| create_deviceInfotable(Nodes, TableName) ->
| Ret = mnesia:create_table(TableName,
| [{disc_copies, Nodes},
| {attributes,
| record_info(fields, device_info)}
| ]),
| io:format("create_deviceInfoTable Ret=~p~n", [Ret]),
| syncTool:changeTableConfig(Nodes, TableName),
| %% mnesia:change_table_copy_type(TableName, node(), disc_copies),
| Ret.
|
| %%% 增加设备信息
| %%%
| %%% @DevId 设备uuid
| %%% @DevName 设备名称
| %%% @DevAdd 设备地址
| %%% @NodeId 节点地址名称 name@ip
| %%% @FNode 父节点地址
| add_deviceInfo(UUid, DevId, NodeId, ClusterID) ->
| CreateTime = syncTool:getTimeStr(),
| UpdateTime = syncTool:getTimeStr(),
| %% io:format("UpdateTime=~p~n", [UpdateTime]),
| CreateUser = node(),
| Delflag = "0",
| F = fun() ->
| mnesia:write(#device_info{uuid = UUid, device_id = DevId, node_id = NodeId, cluster_id = ClusterID,
| create_time = CreateTime, update_time = UpdateTime, create_by = CreateUser, del_flag = Delflag})
| end,
| mnesia:activity(transaction, F).
|
| %%% 物理删除
| del_DevInfo(NodeName) ->
| mnesia:transaction(
| fun() ->
| mnesia:delete({device_info, NodeName})
| end).
|
| %%逻辑删除
| %%del_deviceInfo(NodeName) ->
| %% %%根据id获取整条记录
| %% [ADR | TheList] = findDeviceInfo('device_info', NodeName),
| %% io:format("ADR ~p~n~n~n~n", [ADR]),
| %% TempADR = erlang:setelement(8, ADR, syncTool:getTimeStr()),
| %% NewADR = erlang:setelement(10, TempADR, '1'),
| %% io:format("NewADR ~p~n~n~n~n", [NewADR]),
| %% %% #todoupdate_time
| %% %%修改记录的删除状态
| %% mnesia:transaction(
| %% fun() ->
| %% %mnesia:delete({account, ID})
| %% mnesia:write(#device_info{uuid = element(1, NewADR), device_name = element(2, NewADR),
| %% dev_address = element(3, NewADR), node_id = element(4, NewADR), father_node = element(5, NewADR),
| %% node_online = element(6, NewADR), create_time = element(7, NewADR), update_time = element(8, NewADR),
| %% create_by = element(9, NewADR), del_flag = element(10, NewADR)})
| %% end).
|
| %%del_deviceInfo(NodeName) ->
| %%修改记录的删除状态
| %% mnesia:transaction(
| %% fun() ->
| %% [P] = mnesia:wread({'device_info', NodeName}),
| %% mnesia:write(P#device_info{update_time=getTimeStr(),del_flag="1"})
| %% end
| %% ).
|
| %%% 查询设备信息
| %%% @TableName 表名
| %%% @Expertise 约束条件的值
| findDeviceInfo(TableName, Expertise) ->
| F = fun() ->
| qlc:eval(qlc:q([{NodeId, Uuid, DevID, CluID, CreateTime, UpdateTime, CreateUser, Delflag}
| || #device_info{node_id = NodeId, uuid = Uuid, device_id = DevID,
| cluster_id = CluID, create_time = CreateTime, update_time = UpdateTime,
| create_by = CreateUser, del_flag = Delflag}
| <- mnesia:table(TableName), NodeId =:= Expertise]))
| end,
| mnesia:activity(transaction, F).
|
| %%%lists:flatten 查询在线设备列表
| findDeviceOnlineList(_TableName, []) ->
| [];
| findDeviceOnlineList(TableName, _ExpertiseList = [OnlineNode | T]) ->
| F = fun() ->
| qlc:eval(qlc:q([{NodeId, Uuid, DevID, CluID, CreateTime, UpdateTime, CreateUser, Delflag}
| || #device_info{node_id = NodeId, uuid = Uuid, device_id = DevID, cluster_id = CluID, create_time = CreateTime,
| update_time = UpdateTime, create_by = CreateUser, del_flag = Delflag}
| <- mnesia:table(TableName), NodeId =:= OnlineNode]))
| end,
| [mnesia:activity(transaction, F) | findDeviceOnlineList(TableName, T)].
|
| %%% 在线设备list转map转list
| deviceOnlineList2Maps([]) ->
| [];
| deviceOnlineList2Maps(_ExpertiseList = [OnlineNodes | T]) ->
| [OnlineNode | TEMP] = OnlineNodes,
| [ClusterInfo | Temp2] = clusterInfo:findClusterInfo('cluster_info', element(4, OnlineNode)),
| io:format("ClusterInfo ~p~n~n~n", [ClusterInfo]),
| TemMaps = #{"node_id" => element(1, OnlineNode), "uuid" => element(2, OnlineNode),
| "device_id" => element(3, OnlineNode), "cluster_id" => element(4, OnlineNode),
| "cluster_name" => element(2, ClusterInfo), "create_time" => element(5, OnlineNode),
| "update_time" => element(6, OnlineNode), "create_by" => element(7, OnlineNode),
| "del_flag" => element(8, OnlineNode)
| %tableName,id,tableDesc,tableType,create_time,update_time,create_by,del_flag
| },
| io:format("~p~n~n~n", [TemMaps]),
| [maps:to_list(TemMaps) | deviceOnlineList2Maps(T)].
|
| %%根据节点名称查找id
| findNodeId(NodeName) ->
| F =
| fun() ->
| MatchHead = #device_info{uuid = '$1', node_id = '$2', _ = '_'},
| Guard = [],
| Result = ['$$'],
| mnesia:select('device_info', [{MatchHead, Guard, Result}])
| end,
| mnesia:transaction(F).
|
|