package foundation.system;
|
|
import java.io.File;
|
import java.io.FileReader;
|
import java.sql.SQLException;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Set;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.Domain;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.Filter;
|
import foundation.data.loader.NamedSQLLoader;
|
import foundation.data.meta.DataMetaCenter;
|
import foundation.data.object.DataObject;
|
import foundation.data.object.DataObjectContainer;
|
import foundation.data.object.EntitySaver;
|
import foundation.data.object.Sequence;
|
import foundation.io.FileCenter;
|
import foundation.io.FileRepository;
|
import foundation.json.JArrayReader;
|
import foundation.json.JSONReader;
|
import foundation.json.JType;
|
import foundation.menu.Menu;
|
import foundation.menu.MenuTree;
|
import foundation.page.PageBucket;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.server.config.Configer;
|
import foundation.user.OnlineUser;
|
import foundation.util.ID;
|
import foundation.util.Util;
|
import foundation.variant.provider.VariantCenter;
|
import foundation.workflow.ActionProvider;
|
|
public class SystemHandler extends ActionProvider {
|
|
@Override
|
protected void publishMethod() {
|
//1.
|
addMethod("getVariantListeners");
|
|
//2. 得到下一个变量的值
|
addMethod("getOneVariantValue");
|
|
//3. 重新加载配置
|
addMethod("reload");
|
|
//4.1 同步字段配置(所有对象)
|
addMethod("synchronizFields");
|
|
//4.2 同步属性配置(所有对象)
|
addMethod("synchronizPropertys");
|
|
//4.3 同步字段+属性配置
|
addMethod("synchronizOneObjectMeta");
|
|
//4.4 同步字段配置
|
addMethod("synchronizOneObjectFields");
|
|
//4.5 同步属性配置
|
addMethod("synchronizOneObjectPropertys");
|
|
//4.6 刷新datapackage
|
addMethod("refreshOneDataPackage");
|
|
//4.7 刷新namedSQL
|
addMethod("reloadSqlFile");
|
|
//5. 得到数据源配置
|
addMethod("getDataSourceList");
|
|
//6. 获取数据对象
|
addMethod("getDataObjectList");
|
|
//7. 得到指定sequence的当前值
|
addMethod("getSequence");
|
|
//8. 修改表字符集
|
addMethod("alterTablesCharset");
|
|
//9. 保存角色菜单
|
addMethod("saveRoleMenus");
|
|
//10. 保存角色菜单的button、tab
|
addMethod("saveBtnAndTab");
|
|
//11. 操作数据权限明细配置
|
addMethod("operateSightLine");
|
|
//12. 计算过期
|
addMethod("refreshExpire");
|
|
//13. 重新加载角色
|
addMethod("reloadRole");
|
|
//14. 重新加载角色页面
|
addMethod("reloadRolePage");
|
|
//16. 保存用户个性化设置
|
addMethod("saveUserPersonalize");
|
|
//17. 获取用户个性化设置
|
addMethod("getUserPersonalize");
|
|
//18. 重新加载菜单
|
addMethod("reloadMenuByPage");
|
|
//19. 删除菜单
|
addMethod("deleteMenuByPage");
|
}
|
|
public void alterTablesCharset() throws Exception {
|
List<String> tables = SQLRunner.getTableList();
|
|
NamedSQL namedSQL = NamedSQL.getInstance("alterTableCharset");
|
|
for (String table: tables) {
|
namedSQL.setTableName(table);
|
namedSQL.execute();
|
}
|
}
|
|
public void getVariantListeners() throws Exception {
|
VariantCenter variantCenter = VariantCenter.getInstance();
|
dataWriter.addValue("variantListeners", variantCenter);
|
}
|
|
public void getOneVariantValue() throws Exception {
|
OnlineUser user = OnlineUser.getInstance();
|
|
String variantName = dataReader.getString(ISystem.VariantName);
|
Object value = VariantCenter.getValue(null, variantName, user);
|
|
dataWriter.addValue(value);
|
}
|
|
public void reload() throws Exception {
|
|
}
|
|
public void synchronizMetas() throws Exception {
|
String tablePrefix = dataReader.getString("prefix");
|
DataMetaCenter.synchronizMetas(tablePrefix);
|
}
|
|
public void synchronizFields() throws Exception {
|
String tablePrefix = dataReader.getString("prefix");
|
DataMetaCenter.synchronizFields(tablePrefix, null, null);
|
}
|
|
public void synchronizPropertys() throws Exception {
|
String tablePrefix = dataReader.getString("prefix");
|
DataMetaCenter.synchronizPropertys(tablePrefix, null, null);
|
}
|
|
public void synchronizOneObjectMeta() throws Exception {
|
String dataName = dataReader.getString("dataName");
|
Set<String> includeFields = dataReader.getStringSet("includeFields");
|
|
if (Util.isEmpty(dataName)) {
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
DataMetaCenter.synchronizOneObjectMeta(dataObject, includeFields, null);
|
}
|
|
public void synchronizOneObjectFields() throws Exception {
|
String dataName = dataReader.getString("dataName");
|
Set<String> includeFields = dataReader.getStringSet("includeFields");
|
|
if (Util.isEmpty(dataName)) {
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
DataMetaCenter.synchronizOneObjectFields(dataObject, includeFields, null);
|
}
|
|
public void synchronizOneObjectPropertys() throws Exception {
|
String dataName = dataReader.getString("dataName");
|
Set<String> includeFields = dataReader.getStringSet("includeFields");
|
|
if (Util.isEmpty(dataName)) {
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
DataMetaCenter.synchronizOneObjectPropertys(dataObject, includeFields, null);
|
}
|
|
public void refreshOneDataPackage() throws Exception {
|
String dataName = dataReader.getString("dataName");
|
|
if (Util.isEmpty(dataName)) {
|
return;
|
}
|
|
DataPackage.refresh(dataName);
|
|
dataWriter.addValue("dataPackage已刷新");
|
}
|
|
public void reloadSqlFile() throws Exception{
|
String fileName = dataReader.getString("file_name");
|
String path = Configer.getPath_SQLConfig();
|
File file = new File(path + fileName);
|
|
NamedSQLLoader loader = NamedSQLLoader.getInstance();
|
loader.loadOneFile(file);
|
}
|
|
public void getDataSourceList() throws Exception {
|
|
}
|
|
public void getDataObjectList() throws Exception {
|
DataObjectContainer objectContainer = DataObjectContainer.getInstance();
|
dataWriter.addValue(objectContainer);
|
}
|
|
public void getSequence() throws Exception {
|
String dataName = dataReader.getString("dataName");
|
DataObject dataObject = DataObject.getInstance(dataName);
|
|
if (dataObject == null) {
|
return;
|
}
|
|
String tableName = dataObject.getTableName();
|
Sequence sequence = new Sequence(tableName);
|
long result = sequence.current();
|
|
dataWriter.addValue("sequence", result);
|
}
|
|
public void saveRoleMenus() throws Exception{
|
//1.获取接口传过来的值
|
String dataName = dataReader.getString("dataName");
|
String roleId = dataReader.getString("roleId");
|
JArrayReader menusList = dataReader.getReader("menus", JType.Array);
|
|
//2.创建连接
|
DataObject dataObject = null;
|
Filter filter = null;
|
|
SQLRunner.beginTrans();
|
try {
|
//3.删除(角色菜单表)sys_role_page
|
dataObject = DataObject.getInstance(dataName);
|
filter = new Filter();
|
filter.add("role_id", roleId);
|
dataObject.deleteEntitySet(filter);
|
|
//4.将menus列表中的菜单插入
|
for (JSONReader menu : menusList) {
|
dataObject = DataObject.getInstance(dataName);
|
|
EntitySaver saver = dataObject.createEntitySaver();
|
saver.set("id", ID.newValue());
|
saver.set("role_id", roleId);
|
saver.set("page_id", menu.getString("pageId"));
|
saver.set("menu_id", menu.getString("menuId"));
|
saver.set("remark", menu.getString("remark"));
|
saver.set("is_active", "T");
|
saver.insert();
|
}
|
|
SQLRunner.commit();
|
}
|
catch(Exception e) {
|
e.printStackTrace();
|
try {
|
SQLRunner.rollback();
|
} catch (SQLException e1) {
|
e1.printStackTrace();
|
}
|
}
|
|
SystemLoader.reloadRole(roleId, null);
|
}
|
|
public void saveBtnAndTab() throws Exception{
|
//1.获取接口传过来的值
|
String roleId = dataReader.getString("roleId");
|
String roleCode = dataReader.getString("roleCode");
|
String pageId = dataReader.getString("pageId");
|
String menuId = dataReader.getString("menuId");
|
|
JArrayReader buttons = dataReader.getReader("buttons", JType.Array);
|
List<String> tabs = dataReader.getStringList("tabs");
|
|
SQLRunner.beginTrans();
|
try {
|
//3.保存角色页面按钮(sys_role_page_button)
|
saveButton(roleId, roleCode, menuId, pageId, buttons);
|
|
//4.保存角色页面Tab(sys_role_page_tab)
|
saveTab(roleId, roleCode, menuId, pageId, tabs);
|
|
SQLRunner.commit();
|
}
|
catch(Exception e) {
|
e.printStackTrace();
|
try {
|
SQLRunner.rollback();
|
} catch (SQLException e1) {
|
}
|
}
|
}
|
|
public void refreshExpire() throws Exception {
|
Domain domain = dataReader.getDomain();
|
String dataName = domain.getDataName();
|
|
if (Util.isEmpty(domain)) {
|
return;
|
}
|
|
|
DataObject dataObject = DataObject.getInstance("sys_expire");
|
Entity entity = dataObject.getTableEntity(new Filter("data_name", dataName));
|
|
if (entity == null || !entity.getBoolean("is_active", true)) {
|
return;
|
}
|
|
String field_expire_tag = entity.getString("field_expire_tag", "is_expire");
|
String field_date_to = entity.getString("field_date_to", "date_to");
|
|
NamedSQL namedSQL = NamedSQL.getInstance("refreshExpire");
|
namedSQL.setTableName(dataName);
|
namedSQL.setParam("expire_tag", field_expire_tag);
|
namedSQL.setParam("date_to", field_date_to);
|
namedSQL.setParam("now", new Date());
|
|
int cnt = namedSQL.execute();
|
dataWriter.addValue(cnt);
|
}
|
|
public void reloadRole() throws Exception {
|
String roleId = dataReader.getString("role_id");
|
SystemLoader.reloadRole(roleId, null);
|
}
|
|
public void reloadRolePage() throws Exception {
|
String roleId = dataReader.getString("role_id");
|
String pageId = dataReader.getString("page_id");
|
SystemLoader.reloadRole(roleId, pageId);
|
}
|
|
public void saveUserPersonalize() throws Exception {
|
String dataStr = dataReader.getBody();
|
JSONObject json = JSONObject.parseObject(dataStr);
|
JSONObject data = json.getJSONObject("data");
|
|
OnlineUser user = OnlineUser.getInstance();
|
String fileUrl = "self_preference/" + user.getName() + ".json";
|
|
FileCenter.writeFile(fileUrl, data.toJSONString());
|
}
|
|
public void getUserPersonalize() throws Exception {
|
OnlineUser user = OnlineUser.getInstance();
|
String fileUrl = "self_preference/" + user.getName() + ".json";
|
String filePath = FileRepository.urlToPath(fileUrl);
|
FileReader fileReader = new FileReader(filePath);
|
|
StringBuilder jsonContent = new StringBuilder();
|
int character;
|
while ((character = fileReader.read()) != -1) {
|
jsonContent.append((char) character);
|
}
|
|
fileReader.close();
|
|
dataWriter.addValue(jsonContent.toString());
|
}
|
|
public void reloadMenuByPage() throws Exception {
|
String pageId = dataReader.getString("page_id");
|
SystemLoader.reloadMenuById(pageId);
|
|
DataObject dataObject = DataObject.getInstance("sys_right_role_menu");
|
EntitySet entitySet = dataObject.getTableEntitySet(new Filter("page_id", pageId));
|
|
for(Entity entity : entitySet) {
|
String roleId = entity.getString("role_id");
|
SystemLoader.reloadRole(roleId, pageId);
|
}
|
}
|
|
public void deleteMenuByPage() throws Exception {
|
DataObject dataObject; EntitySet entitySet;
|
String pageId = dataReader.getString("page_id");
|
Filter filter = new Filter("page_id", pageId);
|
|
// 1. 删除角色权限
|
dataObject = DataObject.getInstance("sys_right_role_menu");
|
entitySet = dataObject.getTableEntitySet(new Filter("page_id", pageId));
|
|
dataObject.deleteEntitySet(filter);
|
|
for(Entity entity : entitySet) {
|
String roleId = entity.getString("role_id");
|
SystemLoader.reloadRole(roleId, null);
|
}
|
|
// 2. 删除菜单
|
MenuTree menuTree = MenuTree.getInstance();
|
|
dataObject = DataObject.getInstance("sys_menu");
|
entitySet = dataObject.getTableEntitySet(filter);
|
|
dataObject.deleteEntitySet(filter);
|
|
for (Entity entity : entitySet) {
|
String menuId = entity.getId();
|
menuTree.remove(menuId);
|
|
String paretnId = entity.getParentId();
|
Menu menu = menuTree.get(paretnId);
|
menu.deleteOneChild(menuId);
|
}
|
|
menuTree.onAfterLoad();
|
|
// 3. 删除页面
|
dataObject = DataObject.getInstance("sys_page");
|
dataObject.deleteEntity(pageId);
|
|
PageBucket pageBucket = PageBucket.getInstance();
|
pageBucket.remove(pageId);
|
}
|
|
public void saveTab(String roleId, String roleCode, String menuId, String pageId, List<String> tabs) throws Exception {
|
DataObject dataObject = null;
|
Filter filter = null;
|
Entity entity = null;
|
|
if (tabs == null || tabs.isEmpty()) {
|
return;
|
}
|
|
dataObject = DataObject.getInstance("sys_right_role_page_tab");
|
filter = new Filter();
|
filter.add("role_id", roleId);
|
filter.add("page_id", pageId);
|
filter.add("menu_id", menuId);
|
dataObject.deleteEntitySet(filter);
|
|
//1.将buttons列表中的菜单插入
|
for (String tabId : tabs) {
|
//1.1 保存(角色菜单表)sys_role_page
|
dataObject = DataObject.getInstance("sys_right_role_page_tab");
|
entity = dataObject.createTableEntity(true);
|
entity.set("id", ID.newValue());
|
entity.set("role_id", roleId);
|
entity.set("role_code", roleCode);
|
entity.set("menu_id", menuId);
|
entity.set("page_id", pageId);
|
entity.set("tab_id", tabId);
|
entity.set("is_visible", "T");
|
entity.set("is_active", "T");
|
|
dataObject.insertEntity(entity);
|
}
|
}
|
|
public void saveButton(String roleId, String roleCode, String menuId, String pageId, JArrayReader buttons) throws Exception {
|
DataObject dataObject = null;
|
Filter filter = null;
|
Entity entity = null;
|
|
if (buttons == null) {
|
return;
|
}
|
|
dataObject = DataObject.getInstance("sys_right_role_page_button");
|
filter = new Filter();
|
filter.add("role_id", roleId);
|
filter.add("page_id", pageId);
|
filter.add("menu_id", menuId);
|
dataObject.deleteEntitySet(filter);
|
|
//1.将buttons列表中的菜单插入
|
for (JSONReader button : buttons) {
|
//1.1 保存(角色菜单表)sys_role_page
|
dataObject = DataObject.getInstance("sys_right_role_page_button");
|
entity = dataObject.createTableEntity(true);
|
entity.set("id", ID.newValue());
|
entity.set("role_id", roleId);
|
entity.set("role_code", roleCode);
|
entity.set("page_id", pageId);
|
entity.set("menu_id", menuId);
|
entity.set("tab_id", button.getString("tab_id"));
|
entity.set("button_id", button.getString("button_id"));
|
entity.set("is_visible", "T");
|
entity.set("is_active", "T");
|
|
dataObject.insertEntity(entity);
|
}
|
}
|
}
|