You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
382 lines
17 KiB
382 lines
17 KiB
package com.fr.plugin.cpic.web.controller; |
|
|
|
import com.fr.decision.authority.AuthorityContext; |
|
import com.fr.decision.authority.base.constant.type.authority.GradeManagementAuthorityType; |
|
import com.fr.decision.authority.data.CustomRole; |
|
import com.fr.decision.authority.data.Department; |
|
import com.fr.decision.authority.data.Post; |
|
import com.fr.decision.authority.data.User; |
|
import com.fr.decision.service.DecisionService; |
|
import com.fr.decision.webservice.Response; |
|
import com.fr.decision.webservice.annotation.LoginStatusChecker; |
|
import com.fr.decision.webservice.utils.ControllerFactory; |
|
import com.fr.decision.webservice.v10.user.UserService; |
|
import com.fr.general.ComparatorUtils; |
|
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
|
import com.fr.plugin.cpic.db.bean.CpicUserBean; |
|
import com.fr.plugin.cpic.db.service.CpicHomeService; |
|
import com.fr.plugin.cpic.db.service.CpicUserService; |
|
import com.fr.plugin.cpic.utils.ConvertUtil; |
|
import com.fr.plugin.cpic.web.bean.UserMenuBean; |
|
import com.fr.stable.query.QueryFactory; |
|
import com.fr.stable.query.data.DataList; |
|
import com.fr.stable.query.restriction.RestrictionFactory; |
|
import com.fr.third.org.apache.commons.collections4.CollectionUtils; |
|
import com.fr.third.springframework.stereotype.Controller; |
|
import com.fr.third.springframework.web.bind.annotation.RequestBody; |
|
import com.fr.third.springframework.web.bind.annotation.RequestMapping; |
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
|
import com.fr.third.springframework.web.bind.annotation.ResponseBody; |
|
import com.fr.web.utils.WebUtils; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
import java.util.*; |
|
import java.util.stream.Collectors; |
|
|
|
/** |
|
* 用户 |
|
*/ |
|
@Controller |
|
@LoginStatusChecker(required = false) |
|
@RequestMapping(value = "/cpic") |
|
public class CpicUserController { |
|
|
|
@RequestMapping(value = "/user", method = RequestMethod.GET) |
|
public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { |
|
// 查询初始化数据 |
|
String homeId = request.getParameter("homeId"); |
|
CpicHomeBean home = CpicHomeService.findById(homeId); |
|
|
|
HashMap hashMap = new HashMap(); |
|
hashMap.put("homeId", home.getId()); |
|
hashMap.put("homeName", home.getName()); |
|
WebUtils.writeOutTemplate("/com/fr/plugin/cpic/web/html/user.html", response, hashMap); |
|
} |
|
|
|
@RequestMapping(value = "/user/menus", method = RequestMethod.GET) |
|
@ResponseBody |
|
public Response getMenus2(HttpServletRequest request, HttpServletResponse response) throws Exception { |
|
try { |
|
String dimensionType = request.getParameter("dimensionType"); |
|
// String adminId = UserService.getInstance().getAdminUserIdList().get(0); |
|
String adminId = DecisionService.getInstance().authority().userService().getAdminUserIdList().get(0); |
|
// 查询菜单结构 |
|
List<UserMenuBean> menuList = new ArrayList<>(); |
|
if ("department".equals(dimensionType)) { |
|
// 部门 |
|
Department[] departments = ControllerFactory.getInstance().getDepartmentController(adminId).getDepartmentTree(adminId); |
|
List<Department> departmentList = new ArrayList<Department>(departments.length); |
|
Collections.addAll(departmentList, departments); |
|
departmentList.sort((var0, var1x) -> ComparatorUtils.compare(var0.getAlias(), var1x.getAlias())); |
|
menuList = ConvertUtil.departmentListToTree(departmentList); |
|
} |
|
if ("customrole".equals(dimensionType)) { |
|
// 角色 |
|
List<CustomRole> customRoleList = ControllerFactory.getInstance().getCustomRoleController(adminId).getAllCustomRoles(adminId, "", GradeManagementAuthorityType.TYPE); |
|
customRoleList.sort((var0, var1x) -> ComparatorUtils.compare(var0.getAlias(), var1x.getAlias())); |
|
menuList = ConvertUtil.roleListToMenuList(customRoleList); |
|
} |
|
return Response.ok(menuList); |
|
} catch (Exception e) { |
|
return Response.error("-1", "error:" + e.getMessage()); |
|
} |
|
} |
|
|
|
@RequestMapping(value = "/user/list", method = RequestMethod.GET) |
|
@ResponseBody |
|
public Response getUsers(HttpServletRequest request, HttpServletResponse response) throws Exception { |
|
try { |
|
String menuId = request.getParameter("menuId"); |
|
String menuType = request.getParameter("menuType"); |
|
String homeId = request.getParameter("homeId"); |
|
CpicHomeBean home = CpicHomeService.findById(homeId); |
|
// 查询所有已配置的用户 |
|
List<CpicUserBean> userList = CpicUserService.findList(homeId); |
|
|
|
List<CpicUserBean> resultUserList = new ArrayList<>(); |
|
// 获取全部用户 |
|
if ("all".equals(menuType)) { |
|
// 查询 |
|
List<User> sysUserList = AuthorityContext.getInstance().getUserController().find(QueryFactory.create().addRestriction(RestrictionFactory.eq("enable", true))); |
|
CpicUserBean cpicUser; |
|
if (CollectionUtils.isNotEmpty(sysUserList)) { |
|
for (User user : sysUserList) { |
|
cpicUser = new CpicUserBean(); |
|
cpicUser.setHomeId(home.getId()); |
|
cpicUser.setHomeName(home.getName()); |
|
cpicUser.setUserId(user.getId()); |
|
cpicUser.setUserAccount(user.getUserName()); |
|
cpicUser.setUserName(user.getRealName()); |
|
resultUserList.add(cpicUser); |
|
} |
|
} |
|
// 剔除已配置的用户返回 |
|
return Response.ok(eliminateUser(resultUserList, userList)); |
|
} else { |
|
List<User> sysUserList = new ArrayList<>(); |
|
if ("department".equals(menuType)) { |
|
// 查询指定部门用户(部门下可能有多个职务) |
|
sysUserList = this.getUserListByDept(menuId); |
|
} |
|
if ("customrole".equals(menuType)) { |
|
// 查询指定角色用户 |
|
DataList<User> roleUserList = AuthorityContext.getInstance().getUserController().findByCustomRole(menuId, null); |
|
if (!roleUserList.isEmpty()) { |
|
sysUserList.addAll(roleUserList.getList()); |
|
} |
|
} |
|
if (CollectionUtils.isNotEmpty(sysUserList)) { |
|
CpicUserBean cpicUser; |
|
for (User user : sysUserList) { |
|
cpicUser = new CpicUserBean(); |
|
cpicUser.setHomeId(home.getId()); |
|
cpicUser.setHomeName(home.getName()); |
|
cpicUser.setUserId(user.getId()); |
|
cpicUser.setUserAccount(user.getUserName()); |
|
cpicUser.setUserName(user.getRealName()); |
|
resultUserList.add(cpicUser); |
|
} |
|
} |
|
// 筛选出当前部门或者角色已配置用户 |
|
List<CpicUserBean> filterUserList = new ArrayList<>(); |
|
for (CpicUserBean userBean : userList) { |
|
CpicUserBean temp = resultUserList.stream().filter(item -> item.getUserId().equals(userBean.getUserId())).findFirst().orElse(null); |
|
if (null != temp) { |
|
filterUserList.add(userBean); |
|
} |
|
} |
|
return Response.ok(eliminateUser(resultUserList, filterUserList)); |
|
} |
|
} catch ( |
|
Exception e) { |
|
return Response.error("-1", "error:" + e.getMessage()); |
|
} |
|
} |
|
|
|
@RequestMapping(value = "/user/list2", method = RequestMethod.GET) |
|
@ResponseBody |
|
public Response getUsers2(HttpServletRequest request, HttpServletResponse response) throws Exception { |
|
try { |
|
String menuId = request.getParameter("menuId"); |
|
String menuType = request.getParameter("menuType"); |
|
String homeId = request.getParameter("homeId"); |
|
CpicHomeBean home = CpicHomeService.findById(homeId); |
|
|
|
// 查询所有已配置的用户 |
|
List<CpicUserBean> userList = CpicUserService.findList(homeId); |
|
|
|
// 获取全部用户 |
|
if ("all".equals(menuType)) { |
|
return Response.ok(userList); |
|
} else { |
|
List<CpicUserBean> allUserList = new ArrayList<>(); |
|
List<User> sysUserList = new ArrayList<>(); |
|
if ("department".equals(menuType)) { |
|
// 查询指定部门用户 |
|
sysUserList = this.getUserListByDept(menuId); |
|
} |
|
if ("customrole".equals(menuType)) { |
|
// 查询指定角色用户 |
|
DataList<User> roleUserList = AuthorityContext.getInstance().getUserController().findByCustomRole(menuId, null); |
|
if (!roleUserList.isEmpty()) { |
|
sysUserList.addAll(roleUserList.getList()); |
|
} |
|
} |
|
if (CollectionUtils.isNotEmpty(sysUserList)) { |
|
CpicUserBean cpicUser; |
|
for (User user : sysUserList) { |
|
cpicUser = new CpicUserBean(); |
|
cpicUser.setHomeId(home.getId()); |
|
cpicUser.setHomeName(home.getName()); |
|
cpicUser.setUserId(user.getId()); |
|
cpicUser.setUserAccount(user.getUserName()); |
|
cpicUser.setUserName(user.getRealName()); |
|
allUserList.add(cpicUser); |
|
} |
|
} |
|
// 筛选出当前部门或者角色已配置用户 |
|
List<CpicUserBean> filterUserList = new ArrayList<>(); |
|
for (CpicUserBean userBean : userList) { |
|
CpicUserBean temp = allUserList.stream().filter(item -> item.getUserId().equals(userBean.getUserId())).findFirst().orElse(null); |
|
if (null != temp) { |
|
filterUserList.add(userBean); |
|
} |
|
} |
|
return Response.ok(filterUserList); |
|
} |
|
} catch ( |
|
Exception e) { |
|
return Response.error("-1", "error:" + e.getMessage()); |
|
} |
|
|
|
} |
|
|
|
@RequestMapping(value = "/user/add", method = RequestMethod.POST) |
|
@ResponseBody |
|
public Response saveOrUpdate(HttpServletRequest request, HttpServletResponse response, @RequestBody List<CpicUserBean> userBeanList) throws Exception { |
|
try { |
|
String menuId = request.getParameter("menuId"); |
|
String menuType = request.getParameter("menuType"); |
|
String homeId = request.getParameter("homeId"); |
|
CpicHomeBean home = CpicHomeService.findById(homeId); |
|
|
|
if (null == home) { |
|
return Response.success(); |
|
} |
|
|
|
// 查询所有已配置的用户 |
|
List<CpicUserBean> userList = CpicUserService.findList(homeId); |
|
Map<String, List<CpicUserBean>> result; |
|
// 获取全部用户 |
|
if ("all".equals(menuType)) { |
|
result = handleUserList(userList, userBeanList, home); |
|
} else { |
|
List<CpicUserBean> allUserList = new ArrayList<>(); |
|
List<User> sysUserList = new ArrayList<>(); |
|
if ("department".equals(menuType)) { |
|
// 查询指定部门用户 |
|
sysUserList = this.getUserListByDept(menuId); |
|
} |
|
if ("customrole".equals(menuType)) { |
|
// 查询指定角色用户 |
|
DataList<User> roleUserList = AuthorityContext.getInstance().getUserController().findByCustomRole(menuId, null); |
|
if (!roleUserList.isEmpty()) { |
|
sysUserList.addAll(roleUserList.getList()); |
|
} |
|
} |
|
if (CollectionUtils.isNotEmpty(sysUserList)) { |
|
CpicUserBean cpicUser; |
|
for (User user : sysUserList) { |
|
cpicUser = new CpicUserBean(); |
|
cpicUser.setHomeId(home.getId()); |
|
cpicUser.setHomeName(home.getName()); |
|
cpicUser.setUserId(user.getId()); |
|
cpicUser.setUserAccount(user.getUserName()); |
|
cpicUser.setUserName(user.getRealName()); |
|
allUserList.add(cpicUser); |
|
} |
|
} |
|
|
|
// 筛选出当前部门或者角色已配置用户 |
|
List<CpicUserBean> filterUserList = new ArrayList<>(); |
|
for (CpicUserBean userBean : userList) { |
|
CpicUserBean temp = allUserList.stream().filter(item -> item.getUserId().equals(userBean.getUserId())).findFirst().orElse(null); |
|
if (null != temp) { |
|
filterUserList.add(userBean); |
|
} |
|
} |
|
result = handleUserList(filterUserList, userBeanList, home); |
|
} |
|
|
|
// 新增/修改/删除列表 |
|
List<CpicUserBean> addList = result.getOrDefault("ADD", new ArrayList<>()); |
|
List<CpicUserBean> updateList = result.getOrDefault("UPDATE", new ArrayList<>()); |
|
List<CpicUserBean> delList = result.getOrDefault("DELETE", new ArrayList<>()); |
|
|
|
// 更新 |
|
if (CollectionUtils.isNotEmpty(updateList)) { |
|
for (CpicUserBean user : updateList) { |
|
CpicUserService.saveOrUpdate(user); |
|
} |
|
} |
|
|
|
// 新增 |
|
if (CollectionUtils.isNotEmpty(addList)) { |
|
for (CpicUserBean user : addList) { |
|
CpicUserService.saveOrUpdate(user); |
|
} |
|
} |
|
|
|
// 删除 |
|
if (CollectionUtils.isNotEmpty(delList)) { |
|
for (CpicUserBean user : delList) { |
|
CpicUserService.realDel(user.getId()); |
|
} |
|
} |
|
return Response.success(); |
|
} catch (Exception e) { |
|
return Response.error("-1", "error:" + e.getMessage()); |
|
} |
|
} |
|
|
|
/** |
|
* 返回新增/修改/删除列表 |
|
* |
|
* @param oldList |
|
* @param newList |
|
* @return |
|
*/ |
|
private Map<String, List<CpicUserBean>> handleUserList(List<CpicUserBean> oldList, List<CpicUserBean> newList, CpicHomeBean home) { |
|
Map<String, List<CpicUserBean>> result = new HashMap<>(); |
|
List<CpicUserBean> addList = new ArrayList<>(); |
|
List<CpicUserBean> updateList = new ArrayList<>(); |
|
List<CpicUserBean> delList = new ArrayList<>(); |
|
|
|
// 获取新增和更新列表 |
|
for (CpicUserBean item : newList) { |
|
CpicUserBean temp = oldList.stream().filter(entry -> entry.getUserId().equals(item.getUserId())).findFirst().orElse(null); |
|
if (null != temp) { |
|
temp.setHomeId(home.getId()); |
|
temp.setHomeName(home.getName()); |
|
temp.setUserName(item.getUserName()); |
|
updateList.add(temp); |
|
} else { |
|
item.setHomeId(home.getId()); |
|
item.setHomeName(home.getName()); |
|
addList.add(item); |
|
} |
|
} |
|
|
|
// 获取删除列表 |
|
for (CpicUserBean item : oldList) { |
|
CpicUserBean temp = newList.stream().filter(entry -> entry.getUserId().equals(item.getUserId())).findFirst().orElse(null); |
|
if (null == temp) { |
|
delList.add(item); |
|
} |
|
} |
|
|
|
result.put("ADD", addList); |
|
result.put("UPDATE", updateList); |
|
result.put("DELETE", delList); |
|
return result; |
|
} |
|
|
|
/** |
|
* 已选择的用户不返回 |
|
* |
|
* @param allList |
|
* @param checkedList |
|
* @return |
|
*/ |
|
public List<CpicUserBean> eliminateUser(List<CpicUserBean> allList, List<CpicUserBean> checkedList) { |
|
List<CpicUserBean> resultList = new ArrayList<>(); |
|
for (CpicUserBean item : allList) { |
|
CpicUserBean temp = checkedList.stream().filter(entry -> entry.getUserId().equals(item.getUserId())).findFirst().orElse(null); |
|
if (null == temp) { |
|
resultList.add(item); |
|
} |
|
} |
|
return resultList; |
|
} |
|
|
|
public List<User> getUserListByDept(String deptId) throws Exception { |
|
List<User> sysUserList = new ArrayList<>(); |
|
DataList<User> deptUserList = AuthorityContext.getInstance().getUserController().findByDepartment(deptId, null); |
|
if (!deptUserList.isEmpty()) { |
|
sysUserList.addAll(deptUserList.getList()); |
|
} |
|
// 部门下所有职务 |
|
List<Post> postList = AuthorityContext.getInstance().getPostController().findByDepartment(deptId, null); |
|
// 循环查询职务下的用户 |
|
for (Post post : postList) { |
|
DataList<User> postUserList = AuthorityContext.getInstance().getUserController().findByDepartmentAndPost(deptId, post.getId(), null); |
|
if (!postUserList.isEmpty()) { |
|
sysUserList.addAll(postUserList.getList()); |
|
} |
|
} |
|
// 去重 |
|
return sysUserList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new)); |
|
} |
|
|
|
}
|
|
|