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

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));
}
}