%%%------------------------------------------------------------------- %%% @author pansen %%% @copyright (C) 2018, %%% @doc %%% %%% @end %%% Created : 06. 八月 2018 10:24 %%%------------------------------------------------------------------- -module(sys_o_tables). -author("pansen"). %%% 底库-管理表 %%% #todo开始时间,结束时间,sync -record(sys_o_tables, {tableName, id, tableDesc, tableType, create_time, update_time, create_by, del_flag, startTime, endTime}). -include_lib("stdlib/include/ms_transform.hrl"). -include_lib("stdlib/include/qlc.hrl"). -compile(export_all). %%% 创建底库基本表(只管理同步表) %%% 应仅在集群初始化的时候调用一次 create_sys_table(Nodes, TableName) -> Ret = mnesia:create_table(TableName, [{disc_copies, Nodes}, {attributes, record_info(fields, sys_o_tables)} %% ,{index, [#device_info.id]} ]), io:format("create_sys_table Ret=~p~n", [Ret]), syncTool:changeTableConfig(Nodes, TableName), %% mnesia:change_table_copy_type(TableName, node(), disc_copies), Ret. %%% 创建同步表后应添加一条记录 add_sys_table(Uuid, TableName, TableDesc, TableType, StartTime, EndTime) -> if Uuid == "" -> ID = syncTool:getUUIDStr(); true -> ID = Uuid end, CreateTime = syncTool:getTimeStr(), UpdateTime = syncTool:getTimeStr(), CreateUser = node(), Delflag = "0", F = fun() -> mnesia:write(#sys_o_tables{id = ID, tableName = TableName, tableDesc = TableDesc, tableType = TableType, create_time = CreateTime, update_time = UpdateTime, create_by = CreateUser, del_flag = Delflag, startTime = StartTime, endTime = EndTime}) end, Ret = mnesia:activity(transaction, F), if Ret == ok -> Result = ID; true -> Result = "" end, Result. %%% 删除同步表后应删除记录 %%% 逻辑删除 %%del_sys_table(TableName) -> %% %%根据id获取整条记录 %% [ADR | TheList] = findSysTableInfo('sys_o_tables', TableName), %% io:format("ADR ~p~n~n~n~n", [ADR]), %% NewADR = erlang:setelement(8, ADR, "1"), %% io:format("NewADR ~p~n~n~n~n", [NewADR]), %% %% #todo update_time %% %%修改记录的删除状态 %% mnesia:transaction( %% fun() -> %% %mnesia:delete({account, ID}) %% mnesia:write(#sys_o_tables{id = element(1, NewADR), tableName = element(2, NewADR), %% tableDesc = element(3, NewADR), tableType = element(4, NewADR), create_time = element(5, NewADR), %% update_time = syncTool:getTimeStr(), create_by = element(7, NewADR), del_flag = "1"}) %% end %% ). %%% 物理删除 del_SysTabInfo(TableName) -> mnesia:transaction( fun() -> mnesia:delete({sys_o_tables, TableName}) end). %%% 查找所有信息 findAllSysTableInfo(TableName) -> %% Q = qlc:q([[E#y_account.id, E#y_account.account] || E <- mnesia:table(y_account)]), %%qlc:e(Q) F = fun() -> qlc:e(qlc:q([{TabName, ID, TableDesc, TableType, CreateTime, UpdateTime, CreateUser, Delflag, StartTime, EndTime} || #sys_o_tables{tableName = TabName, id = ID, tableDesc = TableDesc, tableType = TableType, create_time = CreateTime, update_time = UpdateTime, create_by = CreateUser, del_flag = Delflag, startTime = StartTime, endTime = EndTime} <- mnesia:table(TableName)])) end, mnesia:activity(transaction, F). sysTabformat2Mat([]) -> []; sysTabformat2Mat(_ExpertiseList = [OnlineNodes | T]) -> OnlineNode = OnlineNodes, TemMaps = #{"tableName" => element(1, OnlineNode), "uuid" => element(2, OnlineNode), "tableDesc" => element(3, OnlineNode), "tableType" => element(4, OnlineNode), "create_time" => element(5, OnlineNode), "update_time" => element(6, OnlineNode), "create_by" => element(7, OnlineNode), "del_flag" => element(8, OnlineNode), "startTime" => element(9, OnlineNode), "endTime" => element(10, OnlineNode) %tableName,id,tableDesc,tableType,create_time,update_time,create_by,del_flag }, io:format("~p~n~n~n", [TemMaps]), [maps:to_list(TemMaps) | sysTabformat2Mat(T)]. %%% 查找信息 findSysTableInfo(TableName, Expertise) -> F = fun() -> qlc:e(qlc:q([{TabName, ID, TableDesc, TableType, CreateTime, UpdateTime, CreateUser, Delflag, StartTime, EndTime} || #sys_o_tables{tableName = TabName, id = ID, tableDesc = TableDesc, tableType = TableType, create_time = CreateTime, update_time = UpdateTime, create_by = CreateUser, del_flag = Delflag, startTime = StartTime, endTime = EndTime} <- mnesia:table(TableName), TabName =:= Expertise])) end, mnesia:activity(transaction, F).