Java tutorial
/** * Copyright (c) 2012-2014 http://www.eryansky.com * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.eryansky.modules.sys.web; import com.eryansky.common.exception.ActionException; import com.eryansky.common.model.Combobox; import com.eryansky.common.model.Datagrid; import com.eryansky.common.model.Result; import com.eryansky.common.model.TreeNode; import com.eryansky.common.orm.Page; import com.eryansky.common.orm.PropertyFilter; import com.eryansky.common.orm.entity.StatusState; import com.eryansky.common.orm.hibernate.EntityManager; import com.eryansky.common.utils.StringUtils; import com.eryansky.common.utils.collections.Collections3; import com.eryansky.common.utils.encode.Encrypt; import com.eryansky.common.utils.encode.Encryption; import com.eryansky.common.utils.mapper.JsonMapper; import com.eryansky.common.web.springmvc.BaseController; import com.eryansky.common.web.springmvc.SpringMVCHolder; import com.eryansky.common.web.utils.WebUtils; import com.google.common.collect.Lists; import com.eryansky.core.excelTools.ExcelUtils; import com.eryansky.core.excelTools.JsGridReportBase; import com.eryansky.core.excelTools.TableData; import com.eryansky.core.security.SecurityUtils; import com.eryansky.core.security.SessionInfo; import com.eryansky.core.security.annotation.RequiresUser; import com.eryansky.core.web.upload.exception.FileNameLengthLimitExceededException; import com.eryansky.core.web.upload.exception.InvalidExtensionException; import com.eryansky.modules.disk.utils.DiskUtils; import com.eryansky.modules.sys._enum.*; import com.eryansky.modules.sys.entity.Organ; import com.eryansky.modules.sys.entity.User; import com.eryansky.modules.sys.entity.UserPassword; import com.eryansky.modules.sys.service.*; import com.eryansky.modules.sys.utils.UserUtils; import com.eryansky.utils.AppConstants; import com.eryansky.utils.SelectType; import org.apache.commons.fileupload.FileUploadBase; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; /** * User? Controller. * * @author &Eryan eryanwcp@gmail.com * @date 2013-3-21 ?12:20:13 */ @SuppressWarnings("serial") @Controller @RequestMapping(value = "${adminPath}/sys/user") public class UserController extends BaseController<User, String> { @Autowired private UserManager userManager; @Autowired private OrganManager organManager; @Autowired private RoleManager roleManager; @Autowired private ResourceManager resourceManager; @Autowired private PostManager postManager; @Autowired private UserPasswordManager userPasswordManager; @Override public EntityManager<User, String> getEntityManager() { return userManager; } @RequestMapping(value = { "" }) public String list() { return "modules/sys/user"; } /** * * @param userIds ID * @param excludeUserIds ID * @param dataScope {@link DataScope} * @param multiple * @return */ @RequestMapping(value = { "select" }) public ModelAndView selectPage(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(value = "excludeUserIds", required = false) List<String> excludeUserIds, String dataScope, Boolean multiple, @RequestParam(value = "cascade", required = false, defaultValue = "false") Boolean cascade) { ModelAndView modelAndView = new ModelAndView("modules/sys/user-select"); List<User> users = Lists.newArrayList(); if (Collections3.isNotEmpty(userIds)) { Criterion inUserCriterion = Restrictions.in("id", userIds); users = userManager.findByCriteria(inUserCriterion); } modelAndView.addObject("users", users); modelAndView.addObject("excludeUserIds", excludeUserIds); if (Collections3.isNotEmpty(excludeUserIds)) { modelAndView.addObject("excludeUserIdStrs", Collections3.convertToString(excludeUserIds, ",")); } modelAndView.addObject("dataScope", dataScope); modelAndView.addObject("multiple", multiple); modelAndView.addObject("cascade", cascade); modelAndView.addObject("userDatagridData", JsonMapper.getInstance().toJson(new Datagrid(users.size(), users), User.class, new String[] { "id", "name", "sexView", "defaultOrganName" })); return modelAndView; } @RequestMapping(value = { "datagridSelectUser" }) @ResponseBody public String datagridSelectUser(String organId, String loginNameOrName, @RequestParam(value = "excludeUserIds", required = false) List<String> excludeUserIds) { Page<User> page = new Page<User>(SpringMVCHolder.getRequest()); page = userManager.findUsersByOrgan(page, organId, loginNameOrName, excludeUserIds); Datagrid<User> dg = new Datagrid<User>(page.getTotalCount(), page.getResult()); return JsonMapper.getInstance().toJson(dg, User.class, new String[] { "id", "name", "sexView", "defaultOrganName" }); } /** * @param model * @return * @throws Exception */ @RequestMapping(value = { "input" }) public ModelAndView input(@ModelAttribute("model") User model) throws Exception { ModelAndView modelAndView = new ModelAndView("modules/sys/user-input"); return modelAndView; } @RequestMapping(value = { "_remove" }) @ResponseBody @Override public Result remove(@RequestParam(value = "ids", required = false) List<String> ids) { Result result; userManager.deleteByIds(ids); result = Result.successResult(); logger.debug(result.toString()); return result; } /** * * * @return * @throws Exception */ @RequestMapping(value = { "userDatagrid" }) @ResponseBody public Datagrid<User> userDatagrid(String organId, String loginNameOrName, Integer userType) { Page<User> page = new Page<User>(SpringMVCHolder.getRequest()); SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo(); if (StringUtils.isBlank(organId)) { organId = sessionInfo.getLoginOrganId(); } page = userManager.findPage(page, organId, loginNameOrName, userType); Datagrid<User> dg = new Datagrid<User>(page.getTotalCount(), page.getResult()); return dg; } /** * * * @return * @throws Exception * */ @RequestMapping(value = { "userList" }) @ResponseBody public String userList(@RequestParam(value = "excludeUserIds", required = false) List<String> excludeUserIds, String dataScope, @RequestParam(value = "includeUserIds", required = false) List<String> includeUserIds, HttpServletRequest request, HttpServletResponse response, String query) { List<User> list = null; SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo(); if ((StringUtils.isBlank(dataScope) || SecurityUtils.isCurrentUserAdmin())) { list = userManager.findWithInclude(includeUserIds, query); } else if ((StringUtils.isNotBlank(dataScope) && dataScope.equals(DataScope.ALL.getValue()))) { list = userManager.findAllNormalWithExclude(excludeUserIds); } else if ((StringUtils.isNotBlank(dataScope) && dataScope.equals(DataScope.COMPANY_AND_CHILD.getValue()))) { User user = userManager.loadById(sessionInfo.getUserId()); String organId = user.getCompanyId(); list = userManager.findOwnerAndChildsUsers(organId, excludeUserIds); } else if ((StringUtils.isNotBlank(dataScope) && dataScope.equals(DataScope.COMPANY.getValue()))) { User user = userManager.loadById(sessionInfo.getUserId()); String organId = user.getCompanyId(); List<String> organIds = organManager.findOrganChildsDepartmentOrganIds(organId); list = userManager.findUsersByOrganIds(organIds); } else if ((StringUtils.isNotBlank(dataScope) && dataScope.equals(DataScope.OFFICE_AND_CHILD.getValue()))) { User user = userManager.loadById(sessionInfo.getUserId()); String organId = user.getOfficeId(); list = userManager.findOwnerAndChildsUsers(organId, excludeUserIds); } else { User user = userManager.loadById(sessionInfo.getUserId()); String organId = user.getCompanyId(); list = userManager.findOwnerAndChildsUsers(organId, excludeUserIds); } String json = JsonMapper.getInstance().toJson(list, User.class, new String[] { "id", "name", "defaultOrganName" }); // new String[]{"id","name","sexView","defaultOrganName"}); WebUtils.setExpiresHeader(response, 5 * 60 * 1000); return json; } /** * * @param dataScope * @param request * @param response * @param query * @return */ @RequestMapping(value = { "customUserList" }) @ResponseBody public String userList(String dataScope, HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "includeUserIds", required = false) List<String> includeUserIds, String query) { List<User> list = userManager.findWithInclude(includeUserIds, query); String json = JsonMapper.getInstance().toJson(list, User.class, new String[] { "id", "name", "defaultOrganName" }); // new String[]{"id","name","sexView","defaultOrganName"}); WebUtils.setExpiresHeader(response, 5 * 60 * 1000); return json; } /** * ? * @param organId ID * @return */ @RequestMapping(value = { "combogridOrganUser" }) @ResponseBody public String combogridOrganUser(@RequestParam(value = "organId", required = true) String organId) { List<User> users = userManager.findOrganUsers(organId); Datagrid dg = new Datagrid(users.size(), users); return JsonMapper.getInstance().toJson(dg, User.class, new String[] { "id", "loginName", "name", "sexView", "defaultOrganName", "organNames" }); } /** * ?. */ @RequestMapping(value = { "save" }) @ResponseBody public Result save(@ModelAttribute("model") User user) { getEntityManager().evict(user);//model.setXX? evict Hibernate session? Result result = null; // ???? User nameCheckUser = userManager.getUserByLoginName(user.getLoginName()); if (nameCheckUser != null && !nameCheckUser.getId().equals(user.getId())) { result = new Result(Result.WARN, "??[" + user.getLoginName() + "],!", "loginName"); logger.debug(result.toString()); return result; } if (StringUtils.isBlank(user.getId())) {// try { user.setOriginalPassword(Encryption.encrypt(user.getPassword())); } catch (Exception e) { logger.error(e.getMessage(), e); } user.setPassword(Encrypt.e(user.getPassword())); } else {// User superUser = userManager.getSuperUser(); User sessionUser = SecurityUtils.getCurrentUser(); if (superUser.getId().equals(user.getId()) && !sessionUser.getId().equals(superUser.getId())) { result = new Result(Result.ERROR, "??!", null); logger.debug(result.toString()); return result; } } userManager.saveEntity(user); result = Result.successResult(); logger.debug(result.toString()); return result; } /** * ??. */ @RequestMapping(value = { "password" }) public String password(@ModelAttribute("model") User model) throws Exception { return "modules/sys/user-password"; } /** * ?. * @param id ID * @param upateOperate ??"1" ???"0". * @param password ? * @param newPassword ? * @return * @throws Exception */ @RequestMapping(value = { "updateUserPassword" }) @ResponseBody public Result updateUserPassword(@RequestParam(value = "id", required = true) String id, @RequestParam(value = "upateOperate", required = true) String upateOperate, String password, @RequestParam(value = "newPassword", required = true) String newPassword) throws Exception { Result result; User u = userManager.loadById(id); if (u != null) { boolean isCheck = true; //?? if (AppConstants.USER_UPDATE_PASSWORD_YES.equals(upateOperate)) { String originalPassword = u.getPassword(); //?? String pagePassword = password; //?? checkSecurity(newPassword); if (!originalPassword.equals(Encrypt.e(pagePassword))) { isCheck = false; } } //??? if (AppConstants.USER_UPDATE_PASSWORD_NO.equals(upateOperate)) { isCheck = true; } if (isCheck) { u.setOriginalPassword(Encryption.encrypt(newPassword)); u.setPassword(Encrypt.e(newPassword)); userManager.saveEntity(u); UserUtils.addUserPasswordUpdate(u); result = Result.successResult(); } else { result = new Result(Result.WARN, "?.", "password"); } } else { throw new ActionException("?" + id + "?."); } logger.debug(result.toString()); return result; } public void checkSecurity(String pagePassword) { SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo(); if (AppConstants.getIsSecurityOn()) { int max = AppConstants.getUserPasswordRepeatCount(); List<UserPassword> userPasswords = userPasswordManager.getUserPasswordsByUserId(sessionInfo.getUserId(), max); if (Collections3.isNotEmpty(userPasswords)) { for (UserPassword userPassword : userPasswords) { if (userPassword.getPassword().equals(Encrypt.e(pagePassword))) { throw new ActionException( "?" + max + "??"); } } } } } /** * ? ???. * @param userIds ID? * @param newPassword ? * @return * @throws Exception */ @RequestMapping(value = { "_updateUserPassword" }) @ResponseBody public Result updateUserPassword(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(value = "newPassword", required = true) String newPassword) throws Exception { userManager.updateUserPassword(userIds, newPassword); return Result.successResult(); } /** * ?. */ @RequestMapping(value = { "role" }) public ModelAndView role(@ModelAttribute("model") User model) throws Exception { ModelAndView modelAndView = new ModelAndView("modules/sys/user-role"); return modelAndView; } /** * . */ @RequestMapping(value = { "updateUserRole" }) @ResponseBody public Result updateUserRole(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(value = "roleIds", required = false) List<String> roleIds) throws Exception { Result result = null; userManager.updateUserRole(userIds, roleIds); userManager.clearCache(); result = Result.successResult(); return result; } /** * ?. */ @RequestMapping(value = { "organ" }) public String organ(@ModelAttribute("model") User user, Model model) throws Exception { //? List<Combobox> defaultOrganCombobox = Lists.newArrayList(); if (user.getId() != null) { List<Organ> organs = user.getOrgans(); Combobox combobox; if (!Collections3.isEmpty(organs)) { for (Organ organ : organs) { combobox = new Combobox(organ.getId().toString(), organ.getName()); defaultOrganCombobox.add(combobox); } } } String defaultOrganComboboxData = JsonMapper.nonDefaultMapper().toJson(defaultOrganCombobox); logger.debug(defaultOrganComboboxData); model.addAttribute("defaultOrganComboboxData", defaultOrganComboboxData); return "modules/sys/user-organ"; } /** * ? ? * @param userIds Id? * @param organIds ID? * @param defaultOrganId * @return * @throws Exception */ @RequestMapping(value = { "updateUserOrgan" }) @ResponseBody public Result updateUserOrgan(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(value = "organIds", required = false) List<String> organIds, String defaultOrganId) throws Exception { Result result = null; userManager.updateUserOrgan(userIds, organIds, defaultOrganId); result = Result.successResult(); return result; } /** * ??. */ @RequestMapping(value = { "post" }) public String post(@ModelAttribute("model") User model, String organId, Model uiModel) throws Exception { uiModel.addAttribute("organId", organId); return "modules/sys/user-post"; } /** * ?. * @param userIds Id? * @param postIds ?ID? */ @RequestMapping(value = { "updateUserPost" }) @ResponseBody public Result updateUserPost(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(value = "postIds", required = false) List<String> postIds) { Result result = null; userManager.updateUserPost(userIds, postIds); result = Result.successResult(); return result; } /** * ??. */ @RequestMapping(value = { "resource" }) public String resource(@ModelAttribute("model") User model, Model uiModel) throws Exception { List<TreeNode> treeNodes = resourceManager.findTreeNodeResources(); String resourceComboboxData = JsonMapper.getInstance().toJson(treeNodes); logger.debug(resourceComboboxData); uiModel.addAttribute("resourceComboboxData", resourceComboboxData); return "modules/sys/user-resource"; } /** * ?. * @param userIds ID? * @param resourceIds ?ID? * @return * @throws Exception */ @RequestMapping(value = { "updateUserResource" }) @ResponseBody public Result updateUserResource(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(value = "resourceIds", required = false) List<String> resourceIds) throws Exception { Result result = null; userManager.updateUserResource(userIds, resourceIds); userManager.clearCache(); result = Result.successResult(); return result; } /** * ? * @param request * @param multipartFile * @return */ @RequestMapping(value = { "upload" }) @ResponseBody public Result upload(HttpServletRequest request, @RequestParam(value = "uploadFile", required = false) MultipartFile multipartFile) { Result result = null; try { SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo(); com.eryansky.modules.disk.entity.File file = DiskUtils.saveSystemFile(DiskUtils.FOLDER_USER_PHOTO, sessionInfo, multipartFile); String filename = DiskUtils.getVirtualFilePath(file); result = Result.successResult().setObj(filename); } catch (InvalidExtensionException e) { result = Result.errorResult().setMsg(DiskUtils.UPLOAD_FAIL_MSG + e.getMessage()); } catch (FileUploadBase.FileSizeLimitExceededException e) { result = Result.errorResult().setMsg(DiskUtils.UPLOAD_FAIL_MSG); } catch (FileNameLengthLimitExceededException e) { result = Result.errorResult().setMsg(DiskUtils.UPLOAD_FAIL_MSG); } catch (IOException e) { result = Result.errorResult().setMsg(DiskUtils.UPLOAD_FAIL_MSG + e.getMessage()); } return result; } /** * * * @throws Exception */ @RequestMapping(value = { "sexTypeCombobox" }) @ResponseBody public List<Combobox> sexTypeCombobox(String selectType) throws Exception { List<Combobox> cList = Lists.newArrayList(); Combobox titleCombobox = SelectType.combobox(selectType); if (titleCombobox != null) { cList.add(titleCombobox); } SexType[] _enums = SexType.values(); for (int i = 0; i < _enums.length; i++) { Combobox combobox = new Combobox(_enums[i].getValue().toString(), _enums[i].getDescription()); cList.add(combobox); } return cList; } /** * * @param q * @return * @throws Exception */ @RequiresUser(required = false) @RequestMapping(value = { "autoComplete" }) @ResponseBody public List<String> autoComplete(String q) throws Exception { List<String> cList = Lists.newArrayList(); List<PropertyFilter> filters = Lists.newArrayList(); PropertyFilter propertyFilter = new PropertyFilter("LIKES_name", q); PropertyFilter statusFilter = new PropertyFilter("EQS_status", StatusState.NORMAL.getValue()); filters.add(propertyFilter); filters.add(statusFilter); Page<User> page = new Page<User>(SpringMVCHolder.getRequest()); page = userManager.findPage(page, filters); for (User user : page.getResult()) { cList.add(user.getName()); } return cList; } /** * ?. */ @RequestMapping(value = { "maxSort" }) @ResponseBody public Result maxSort() { Result result; Integer maxSort = userManager.getMaxSort(); result = new Result(Result.SUCCESS, null, maxSort); return result; } /** * ?. */ @RequestMapping("userInfoInput") public ModelAndView userInfoInput() { ModelAndView modelAndView = new ModelAndView("layout/north-userInfoInput"); SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo(); User user = userManager.loadById(sessionInfo.getUserId()); JsonMapper jsonMapper = JsonMapper.getInstance(); // hibernate jsonMapper.registerHibernate4Module(); modelAndView.addObject("userJson", jsonMapper.toJson(user)); return modelAndView; } /** * ??. */ @RequestMapping("saveUserinfo") @ResponseBody public Result saveUserinfo(@ModelAttribute("model") User model) throws Exception { Result result = null; userManager.saveEntity(model); result = Result.successResult(); return result; } /** * * @param checkedUserIds ID? * @return */ @RequiresUser(required = false) @RequestMapping(value = { "organUserTreePage" }) public ModelAndView organUserTreePage(String parentId, @RequestParam(value = "checkedUserIds", required = false) List<String> checkedUserIds, @RequestParam(value = "checkbox", defaultValue = "true") Boolean checkbox, @RequestParam(value = "cascade", defaultValue = "true") Boolean cascade) { ModelAndView modelAndView = new ModelAndView("modules/sys/user-tree"); // List<TreeNode> treeNodes = organManager.findOrganUserTree(parentId, checkedUserIds,false); modelAndView.addObject("checkedUserIds", checkedUserIds); modelAndView.addObject("checkbox", checkbox); modelAndView.addObject("cascade", cascade); // modelAndView.addObject("organUserTreeData",JsonMapper.getInstance().toJson(treeNodes)); return modelAndView; } @RequiresUser(required = false) @RequestMapping(value = { "organUserTree" }) @ResponseBody public List<TreeNode> organUserTree(String parentId, @RequestParam(value = "checkedUserIds", required = false) List<String> checkedUserIds, @RequestParam(value = "checkbox", defaultValue = "true") Boolean checkbox, @RequestParam(value = "cascade", defaultValue = "true") Boolean cascade) { List<TreeNode> treeNodes = organManager.findOrganUserTree(parentId, checkedUserIds, cascade); return treeNodes; } /** * ? * @param upUserId * @param downUserId * @param moveUp * @return */ @RequestMapping(value = { "changeOrderNo" }) @ResponseBody public Result changeOrderNo(@RequestParam(required = true) String upUserId, @RequestParam(required = true) String downUserId, boolean moveUp) { userManager.changeOrderNo(upUserId, downUserId, moveUp); return Result.successResult(); } /** * ? ? * @param userIds * @param status {@link com.eryansky.common.orm.entity.StatusState} * @return */ @RequestMapping(value = { "lock" }) @ResponseBody public Result lock(@RequestParam(value = "userIds", required = false) List<String> userIds, @RequestParam(required = false, defaultValue = User.STATUS_DELETE) String status) { userManager.lockUsers(userIds, status); return Result.successResult(); } /** * ? * @param loginName * @return * @throws Exception */ @RequestMapping("viewUserPassword") @ResponseBody public Result viewUserPassword(String loginName) throws Exception { Result result = Result.successResult(); User user = userManager.getUserByLoginName(loginName); if (user != null && user.getOriginalPassword() != null) { result.setObj(Encryption.decrypt(user.getOriginalPassword().trim())); } return result; } /** * Sheet Excel???List<Object[]> * @return * @throws Exception */ @RequestMapping("export") public void export(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("application/msexcel;charset=UTF-8"); List<User> users = userManager.findAllNormal(); List<Object[]> list = new ArrayList<Object[]>(); Iterator<User> iterator = users.iterator(); while (iterator.hasNext()) { User user = iterator.next(); list.add(new Object[] { user.getCompanyName(), user.getOfficeName(), user.getLoginName(), user.getName(), user.getSexView(), user.getTel(), user.getMobile(), user.getEmail() }); } List<TableData> tds = new ArrayList<TableData>(); //Sheet2 String[] hearders = new String[] { "??", "", "?", "??", "", "?", "??", "" };// TableData td = ExcelUtils.createTableData(list, ExcelUtils.createTableHeader(hearders), null); td.setSheetTitle(""); tds.add(td); String title = "?"; JsGridReportBase report = new JsGridReportBase(request, response); report.exportToExcel(title, SecurityUtils.getCurrentSessionInfo().getName(), tds); } }