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 java.util.UUID;
|
|
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.DataPackage;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.Filter;
|
import foundation.data.entity.IDictionary;
|
import foundation.data.object.DataObject;
|
import foundation.data.object.EntitySaver;
|
import foundation.dictionary.DictionaryBucket;
|
import foundation.geography.CityBucket;
|
import foundation.geography.CountyBucket;
|
import foundation.geography.ProvinceBucket;
|
import foundation.handler.Handler;
|
import foundation.icall.ICallCenter;
|
import foundation.json.JObjectReader;
|
import foundation.json.JSONBuilder;
|
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.preload.Bucket;
|
import foundation.preload.Tree;
|
import foundation.token.UserToken;
|
import foundation.user.OnlineUser;
|
import foundation.user.User;
|
import foundation.user.UserBucket;
|
import foundation.util.EncipherUtil;
|
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.1 login
|
addMethod("systemLogin");
|
|
//2.3 login
|
addMethod("systemSSO");
|
|
//2.4 creat authorize url
|
addMethod("createAuthorizeUrl");
|
|
//3. get user
|
addMethod("getUser");
|
|
//4. change password
|
addMethod("changePassword");
|
|
//5. get user capacity
|
addMethod("getCapacity");
|
|
//6. change default actor
|
addMethod("changeDefaultActor");
|
|
//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");
|
|
//17. 获取角色页面button、tab
|
addMethod("getBtnTabByRolePage");
|
|
//18. 批量加密密码
|
addMethod("encodeUsersPassword");
|
|
//19.1 加密
|
addMethod("decodeValue");
|
|
//19.2 解密
|
addMethod("encodeValue");
|
|
//20 初始化密码
|
addMethod("initPassword");
|
|
//21 初始化密码
|
addMethod("saveUserPassword");
|
|
//22 发送验证码
|
addMethod("sendVerifyCode");
|
}
|
|
public void systemSSO() throws Exception{
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
|
if (dataReader.isEmpty()) {
|
resultPool.setSuccess(false);
|
return;
|
}
|
|
String serverName = dataReader.getString("serverName");
|
String unionId = dataReader.getString("unionId");
|
String field = serverName + "_union_id";
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getUserBySystem");
|
namedSQL.setParam("userNameField", field);
|
namedSQL.setParam("unionId", unionId);
|
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 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", EncipherUtil.encode(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();
|
String serverName = dataPool.getParam("servername");
|
ICallCenter icallCenter = ICallCenter.getInstance();
|
|
if (!dataReader.isEmpty() && !Util.isEmpty(dataReader.getString("password"))) {
|
login();
|
|
if (resultPool.isSuccess()){
|
Entity user = icallCenter.systemLogin(dataPool, serverName);
|
LoginResult result = new LoginResult(user);
|
resultPool.addValue("data", result);
|
}
|
|
return;
|
}
|
|
Entity user = icallCenter.systemLogin(dataPool, serverName);
|
|
//1. 首次登录, 返回登录页面
|
LoginResult result = new LoginResult(user);
|
resultPool.addValue("data", result);
|
}
|
|
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 (!EncipherUtil.encode(oldPass).equals(user.getPassword())) {
|
resultPool.reportOneError("密码修改", "用户输入的旧密码不对,不能修改");
|
return;
|
}
|
|
user.chagnePassword(newPass);
|
|
resultPool.reportOneMessage("密码修改", "密码修改成功");
|
}
|
|
public void saveUserPassword() throws Exception {
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
String userName = dataReader.getString("account");
|
String password = dataReader.getString("password");
|
password = EncipherUtil.encode(password);
|
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
Entity entity = dataObject.getTableEntity(new Filter("name", userName).add("is_active","T"));
|
|
if (entity == null) {
|
resultPool.reportOneMessage("密码重置", "未获取到用户");
|
return ;
|
}
|
|
String userId = entity.getId();
|
|
User user = User.getInstance(userId);
|
|
user.changePassword(password);
|
|
resultPool.reportOneMessage("密码重置", "密码重置成功");
|
}
|
|
public void sendVerifyCode() throws Exception {
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
String userName = dataReader.getString("userName");
|
String verifyCode = ClientHandler.createVerifyCode(userName);
|
|
if (Util.isEmpty(verifyCode)) {
|
resultPool.reportOneError("sendVerifyCode", "账号不存在");
|
}
|
|
Filter filter = new Filter().add("name", userName).add("is_active", "T");
|
DataPackage dataPackage = DataPackage.getInstance("sys_user");
|
dataPackage.setFilter(filter);
|
dataPackage.loadOneDataFromDB();
|
}
|
|
public static String createVerifyCode(String userName) throws Exception{
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
Filter filter = new Filter("name", userName).add("is_active", "T");
|
Entity userEntity = dataObject.getTableEntity(filter);
|
|
if (userEntity == null) {
|
return null;
|
}
|
|
UUID uuid = UUID.randomUUID();
|
String verifyCode = uuid.toString().substring(0,6);
|
userEntity.set("verify_code", verifyCode);
|
|
dataObject.updateEntity(userEntity);
|
return verifyCode;
|
}
|
|
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 changeDefaultActor() throws Exception {
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
String actorId = dataReader.getString("actor_target_id");
|
|
OnlineUser user = OnlineUser.getInstance();
|
|
if (user == null) {
|
return;
|
}
|
|
ActorTarget actor = user.changeDefaultCapacity(actorId);
|
resultPool.addValue("default_capacity", actor);
|
}
|
|
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);
|
|
if (actor == null) {
|
resultPool.reportOneError("changeCurrentActor", "数据权限不存在");
|
}
|
else {
|
resultPool.addValue("capacity", actor);
|
}
|
}
|
|
public void getMenuTreeAll() throws Exception {
|
LoadMonitor monitor = new LoadMonitor();
|
|
MenuTree menuTree = monitor.get(MenuTree.class);
|
List<Menu> menuList = new ArrayList<Menu>();
|
Iterator<Menu> 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<RoleMenu> roleMenuTree = role.getMenuTree();
|
|
resultPool.addValue("menus", roleMenuTree);
|
return;
|
}
|
|
//2. 根据角色获取菜单
|
Actor actor = ActorBucket.getInstance().get(actorId);
|
|
if (actor == null) {
|
return;
|
}
|
|
Role role = actor.getRoleRuntime();
|
Tree<RoleMenu> 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<RolePage> 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);
|
}
|
|
public void encodeUsersPassword() throws Exception {
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
EntitySet entitySet = dataObject.getTableEntitySet();
|
EntitySaver saver;
|
|
for (Entity entity: entitySet) {
|
String password = entity.getString("password");
|
password = EncipherUtil.encode(password);
|
|
saver = dataObject.createEntitySaver(entity.getId());
|
saver.set("password", password);
|
|
saver.update();
|
}
|
}
|
|
public void encodeValue() throws Exception {
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
String value = dataReader.getString("value");
|
value = EncipherUtil.encode(value);
|
resultPool.addValue("data", value);
|
}
|
|
public void decodeValue() throws Exception {
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
String value = dataReader.getString("value");
|
value = EncipherUtil.decode(value);
|
resultPool.addValue("data", value);
|
}
|
|
public void initPassword() throws Exception {
|
JObjectReader dataReader = dataPool.getJObjectReader();
|
JSONReader datas = dataReader.getReader("data", JType.Object);
|
JSONReader user = datas.getReader("sys_user", JType.Object);
|
String id = user.getString("id");
|
String password = user.getString("password");
|
password = EncipherUtil.encode(password);
|
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
EntitySaver saver = dataObject.createEntitySaver(id);
|
saver.set("password", password);
|
saver.update();
|
}
|
}
|