package foundation.system;
|
|
import java.util.Set;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
import org.json.JSONObject;
|
|
import foundation.action.ActionProvider;
|
import foundation.capacity.role.RoleAgent;
|
import foundation.capacity.role.RoleBucket;
|
import foundation.capacity.role.RoleMenu;
|
import foundation.dao.Filter;
|
import foundation.dao.preload.Tree;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.object.DataObject;
|
import foundation.data.object.EntitySaver;
|
import foundation.json.JArrayReader;
|
import foundation.json.JObjectReader;
|
import foundation.json.JSONReader;
|
import foundation.json.JType;
|
import foundation.menu.Menu;
|
import foundation.menu.MenuTree;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.translator.ValueType;
|
import foundation.user.User;
|
import foundation.user.UserBucket;
|
import foundation.util.Util;
|
|
|
public class FrontHandler extends ActionProvider {
|
|
protected static Logger logger;
|
|
static {
|
logger = LogManager.getLogger(FrontHandler.class);
|
}
|
|
public FrontHandler() {
|
|
}
|
|
@Override
|
protected void publishMethod() {
|
//1. save user
|
addMethod("saveUser");
|
|
//2. delete user
|
addMethod("deleteUser");
|
|
//3. save user capacity
|
addMethod("saveCaptcity");
|
|
//4. save role menus
|
addMethod("saveRoleMenus");
|
}
|
|
public void saveUser() throws Exception {
|
//1. read user
|
JObjectReader jObjectReader = dataReader.getReader("data", JType.Object);
|
JObjectReader userReader = jObjectReader.getReader("user", JType.Object);
|
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
Entity entity = dataObject.createTableEmptyEntity();
|
|
for (JSONReader item: userReader) {
|
String name = item.getName();
|
Object value = item.getValue();
|
|
if (!entity.contains(name)) {
|
continue;
|
}
|
|
if (JSONObject.NULL == value) {
|
entity.set(name, ValueType.Null);
|
continue;
|
}
|
|
value = Util.decodeValue(value);
|
entity.set(name, value);
|
}
|
|
//2. save
|
String name = entity.getString("name");
|
entity.set("org_id", "org-01");
|
|
if (entity.isEmptyValue("password")) {
|
entity.set("password", name);
|
}
|
|
dataObject.saveEntity(entity);
|
|
//3. load cache
|
UserBucket userBucket = UserBucket.getInstance();
|
User user = new User();
|
user.load(entity);
|
|
String userId = user.getId();
|
User old = userBucket.get(userId);
|
if (old == null) {
|
userBucket.loadOne(userId, user);
|
}
|
else {
|
old.load(entity);
|
}
|
|
//4. result
|
dataWriter.addValue("user", user);
|
}
|
|
public void deleteUser() throws Exception {
|
String userId = dataReader.getString("id");
|
UserBucket userBucket = UserBucket.getInstance();
|
|
User user = userBucket.get(userId);
|
|
if (user == null) {
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
dataObject.deleteEntity(userId);
|
|
userBucket.remove(userId);
|
|
dataWriter.addValue("user", user);
|
}
|
|
public void saveCaptcity() throws Exception {
|
String userId = dataReader.getString("user_id");
|
UserBucket userBucket = UserBucket.getInstance();
|
|
User user = userBucket.get(userId);
|
|
if (user == null) {
|
return;
|
}
|
|
JArrayReader capacitys = dataReader.getReader("capacitys", JType.Array);
|
|
if (capacitys == null) {
|
return;
|
}
|
|
user.saveCapacitys(capacitys);
|
}
|
|
public void saveRoleMenus() throws Exception {
|
//1. get user menus
|
String roleId = dataReader.getString("role_code");
|
RoleBucket roleBucket = RoleBucket.getInstance();
|
RoleAgent role = roleBucket.get(roleId);
|
|
if (role == null) {
|
return;
|
}
|
|
Tree<RoleMenu> roleMenuTree = role.getMenuTree();
|
|
//2. get changes
|
JArrayReader array = dataReader.getReader("menus", JType.Array);
|
|
if (array == null) {
|
return;
|
}
|
|
//3. save changes
|
Set<String> changes = array.getStringSet();
|
|
MenuTree menuTree = MenuTree.getInstance();
|
|
DataObject dataObject = DataObject.getInstance("sys_role_menu");
|
String roleCode = role.getCode();
|
|
for (RoleMenu roleMenu: roleMenuTree) {
|
String id = roleMenu.getId();
|
|
if (!changes.contains(id)) {
|
Filter filter = new Filter();
|
filter.add("menu_id", id);
|
filter.add("role_code", roleCode);
|
dataObject.deleteEntity(filter);
|
}
|
}
|
|
for (String id: changes) {
|
if (!roleMenuTree.contains(id)) {
|
EntitySaver saver = dataObject.createEntitySaver();
|
saver.set("menu_id", id);
|
saver.set("role_code", roleCode);
|
saver.set("is_active", "T");
|
saver.insert();
|
}
|
}
|
|
//4. reload
|
Tree<RoleMenu> newTree = new Tree<RoleMenu>();
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getOneRoleMenus");
|
namedSQL.setParam("role_code", roleCode);
|
EntitySet entitySet = SQLRunner.getEntitySet(namedSQL);
|
|
for (Entity entity: entitySet) {
|
String menuId = entity.getString("menu_id");
|
Menu menu = menuTree.get(menuId);
|
|
if (menu == null) {
|
continue;
|
}
|
|
RoleMenu roleMenu = new RoleMenu(menu);
|
newTree.loadOne(roleMenu.getId(), roleMenu);
|
}
|
|
newTree.onAfterLoad();
|
role.resetMenuTree(newTree);
|
|
//4. result
|
dataWriter.addValue("menus", roleMenuTree);
|
}
|
}
|