package foundation.system; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import foundation.capacity.Actor; import foundation.capacity.ActorBucket; import foundation.capacity.ActorTarget; import foundation.capacity.ActorsRuntime; import foundation.capacity.role.Role; import foundation.capacity.role.RoleMenu; import foundation.capacity.role.RolePage; import foundation.dao.preload.Bucket; import foundation.dao.preload.Tree; import foundation.data.entity.Entity; import foundation.data.entity.IDictionary; import foundation.dictionary.DictionaryBucket; import foundation.geography.CityBucket; import foundation.geography.CountyBucket; import foundation.geography.ProvinceBucket; import foundation.handler.Handler; import foundation.json.JObjectReader; import foundation.json.JSONBuilder; import foundation.menu.Menu; import foundation.menu.MenuTree; import foundation.persist.NamedSQL; import foundation.persist.SQLRunner; import foundation.token.UserToken; import foundation.user.OnlineUser; import foundation.user.User; import foundation.user.UserBucket; import foundation.util.Util; public class ClientHandler extends Handler { protected static Logger logger; private static DateFormat dateFormat; static { logger = LogManager.getLogger(ClientHandler.class); dateFormat = new SimpleDateFormat("yyyy-MM-dd"); } @Override protected void publishMethod() { //1. login addMethod("login"); //2. login addMethod("systemLogin"); //3. get user addMethod("getUser"); //4. change password addMethod("changePassword"); //5. get user capacity addMethod("getCapacity"); //6. change user actor addMethod("changeCurrentActor"); //7. get menu tree addMethod("getMenuTree"); //8. get menu tree all addMethod("getMenuTreeAll"); //9. get page addMethod("getPage"); //10. 获取字典 addMethod("getDictionarys"); //11. 获取一个字典 addMethod("getOneDictionary"); //12. 获取省份列表 addMethod("getProvinceList"); //13. 获取城市列表 addMethod("getCityList"); //14. 得到区县列表 addMethod("getCountyList"); //15. 得到系统当前日期 addMethod("getCalendar"); //16. 得到对应角色的菜单页面 addMethod("getPageByRole"); //1. 获取角色页面button、tab addMethod("getBtnTabByRolePage"); } public void login() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); if (dataReader.isEmpty()) { resultPool.setSuccess(false); return; } String userName = dataReader.getString("userName"); String password = dataReader.getString("password"); NamedSQL namedSQL = NamedSQL.getInstance("getUser"); namedSQL.setParam("userName", userName); namedSQL.setParam("password", password); namedSQL.setParam("is_active", "T"); Entity entity = SQLRunner.getEntity(namedSQL); if (entity == null) { resultPool.setSuccess(false); return; } String userCaption = entity.getString("employee_name"); if (Util.isEmpty(userCaption)) { userCaption = entity.getString("name"); } LoginResult result = new LoginResult(entity); resultPool.addValue("data", result); } public void systemLogin() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); if (dataReader.isEmpty()) { resultPool.setSuccess(false); return; } String secret = dataReader.getString("secret"); String systemId = dataReader.getString("systemId"); String userSecret = dataReader.getString("userSecret"); String oaAccount = dataReader.getString("oaAccount"); //1. 进行secret合法性检查 boolean systemIdentify = "SystemOAWeaver".equalsIgnoreCase(systemId); boolean systemSecretentify = "KCMSIEUASKEOIQWANTVWOWPOWPPWIEIR".equalsIgnoreCase(secret); if (systemIdentify && systemSecretentify) { //2. 进行用户存在检查 NamedSQL namedSQL = NamedSQL.getInstance("getUserByUsername"); namedSQL.setParam("oaAccount", oaAccount); namedSQL.setParam("userSecret", userSecret); namedSQL.setParam("isActive", "T"); Entity entity = SQLRunner.getEntity(namedSQL); if (entity == null) { resultPool.setSuccess(false); return; } String userCaption = entity.getString("employee_name"); if (Util.isEmpty(userCaption)) { userCaption = entity.getString("name"); } LoginResult result = new LoginResult(entity); resultPool.addValue("data", result); } else { resultPool.setSuccess(false); return; } } public void getUser() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); if (dataReader.isEmpty()) { resultPool.setSuccess(false); return; } OnlineUser user = OnlineUser.getInstance(); if (user == null) { return; } user.collectActors(); resultPool.addValue("user", user); } public void changePassword() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); if (dataReader.isEmpty()) { resultPool.setSuccess(false); return; } OnlineUser user = OnlineUser.getInstance(); if (user == null) { return; } String oldPass = dataReader.getString("old_pass"); String newPass = dataReader.getString("new_pass"); if (Util.isEmpty(newPass) || Util.isEmpty(oldPass)) { resultPool.reportOneError("密码修改", "新密码或旧密码为空,不能修改"); return; } if (!oldPass.equals(user.getPassword())) { resultPool.reportOneError("密码修改", "用户输入的旧密码不对,不能修改"); return; } user.chagnePassword(newPass); resultPool.reportOneMessage("密码修改", "密码修改成功"); } public void getActor() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); String token = null; if (dataReader.isEmpty()) { resultPool.setSuccess(false); return; } String userId = dataReader.getString("userId"); UserToken userToken = null; if (Util.isEmpty(userId)) { token = dataReader.getString("token"); userToken = UserToken.getInstance(token); } UserBucket userBucket = UserBucket.getInstance(); if (!Util.isEmpty(token) && userToken != null) { userId = userToken.getUserId(); } User user = userBucket.get(userId); if (user == null) { return; } ActorsRuntime actors = user.getActorsRuntime(); resultPool.addValue("actors", actors); } public void changeCurrentActor() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); String actorId = dataReader.getString("actor_target_id"); OnlineUser user = OnlineUser.getInstance(); if (user == null) { return; } ActorTarget actor = user.changeCurrentCapacity(actorId); resultPool.addValue("capacity", actor); } public void getMenuTreeAll() throws Exception { LoadMonitor monitor = new LoadMonitor(); MenuTree menuTree = monitor.get(MenuTree.class); List menuList = new ArrayList(); Iterator menuIterator = menuTree.iterator(); while(menuIterator.hasNext()) { Menu menu = menuIterator.next(); if (Util.isEmpty(menu.getParentId())) { menuList.add(menuTree.get(menu.getId())); } } resultPool.addValue("menus", menuList); } public void getMenuTree() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); String actorId = dataReader.getString("actor_id"); //1. 当前用获取自己的菜单 if (Util.isEmpty(actorId)) { OnlineUser user = OnlineUser.getInstance(); ActorTarget actor = user.getCurrentActor(); if (actor == null) { return; } Role role = actor.getRoleRuntime(); Tree roleMenuTree = role.getMenuTree(); resultPool.addValue("menus", roleMenuTree); return; } //2. 根据角色获取菜单 Actor actor = ActorBucket.getInstance().get(actorId); if (actor == null) { return; } Role role = actor.getRoleRuntime(); Tree roleMenuTree = role.getMenuTree(); resultPool.addValue("roleAddress", role.toString()); resultPool.addValue("menus", roleMenuTree); } public void getPageByRole() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); String actorId = dataReader.getString("actor_id"); //1. 根据角色获取菜单 Actor actor = ActorBucket.getInstance().get(actorId); if (actor == null) { return; } Role role = actor.getRoleRuntime(); Bucket pages = role.getPages(); resultPool.addValue("pages", pages); } public void getPage() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); String pageId = dataReader.getString(ISystem.PageId); String menuId = dataReader.getString(ISystem.MenuId); OnlineUser user = OnlineUser.getInstance(); if (user == null) { return; } ActorTarget actor = user.getCurrentActor(); if (actor == null) { return; } Role role = actor.getRoleRuntime(); String pageKey = RolePage.createKey(menuId, pageId); RolePage rolePage = role.getPageById(pageKey); resultPool.addValue("page", rolePage); } public void getDictionarys() throws Exception { DictionaryBucket dictionarys = DictionaryBucket.getInstance(); resultPool.addValue("dictionarys", dictionarys); } public void getOneDictionary() throws Exception { JObjectReader dataReader = dataPool.getJObjectReader(); String dictionaryName = dataReader.getString(ISystem.DictionaryCode); DictionaryBucket dictionaryBucket = DictionaryBucket.getInstance(); IDictionary dictionary = dictionaryBucket.getDictionary(dictionaryName); resultPool.addValue("dictionary", dictionary); } public void getProvinceList() throws Exception { ProvinceBucket provinceBucket = ProvinceBucket.getInstance(); resultPool.addValue("provinces", provinceBucket); } public void getCityList() throws Exception { CityBucket cityBucket = CityBucket.getInstance(); resultPool.addValue("citys", cityBucket); } public void getCountyList() throws Exception { CountyBucket countyBucket = CountyBucket.getInstance(); resultPool.addValue("countys", countyBucket); } public void getCalendar() throws Exception { //1. Date now = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(now); //2. int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; String monthNo = year + "" + (month < 10 ? "0" + month : month); String date = dateFormat.format(now); //3. JSONBuilder builder = new JSONBuilder(); builder.beginObject(); builder.write("year", year); builder.write("month", month); builder.write("monthNo", monthNo); builder.write("day", calendar.get(Calendar.DAY_OF_MONTH)); builder.write("date", date); builder.endObject(); resultPool.addValue("calendar", builder); } }