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 roleMenuTree = role.getMenuTree(); //2. get changes JArrayReader array = dataReader.getReader("menus", JType.Array); if (array == null) { return; } //3. save changes Set 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 newTree = new Tree(); 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); } }