com.lushapp.modules.sys.web.UserController.java Source code

Java tutorial

Introduction

Here is the source code for com.lushapp.modules.sys.web.UserController.java

Source

/**
 *  Copyright (c) 2014 http://www.lushapp.wang
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.lushapp.modules.sys.web;

import com.google.common.collect.Lists;
import com.lushapp.common.model.Combobox;
import com.lushapp.common.model.Datagrid;
import com.lushapp.common.model.Result;
import com.lushapp.common.model.TreeNode;
import com.lushapp.common.orm.Page;
import com.lushapp.common.orm.PropertyFilter;
import com.lushapp.common.orm.entity.StatusState;
import com.lushapp.common.orm.hibernate.EntityManager;
import com.lushapp.common.utils.StringUtils;
import com.lushapp.common.utils.collections.Collections3;
import com.lushapp.common.utils.encode.Encrypt;
import com.lushapp.common.utils.mapper.JsonMapper;
import com.lushapp.common.web.springmvc.BaseController;
import com.lushapp.modules.sys._enum.SexType;
import com.lushapp.modules.sys.entity.*;
import com.lushapp.modules.sys.service.*;
import com.lushapp.utils.AppConstants;
import com.lushapp.utils.SelectType;

import org.apache.commons.lang3.ArrayUtils;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.MatchMode;
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 java.util.Iterator;
import java.util.List;

/**
 * User? Controller.
 *
 * @author honey.zhao@aliyun.com  
 * @date 2014-10-21 ?12:20:13
 */
@SuppressWarnings("serial")
@Controller
@RequestMapping(value = "/sys/user")
public class UserController extends BaseController<User, Long> {

    @Autowired
    private UserManager userManager;
    @Autowired
    private OrganManager organManager;
    @Autowired
    private RoleManager roleManager;
    @Autowired
    private ResourceManager resourceManager;
    @Autowired
    private PostManager postManager;

    @Override
    public EntityManager<User, Long> getEntityManager() {
        return userManager;
    }

    @RequestMapping(value = { "" })
    public String list() {
        return "modules/sys/user";
    }

    @RequestMapping(value = { "select" })
    public String selectPage(String userIds, Model model) {
        List<User> users = Lists.newArrayList();
        if (StringUtils.isNotBlank(userIds)) {
            String[] userIdss = userIds.split(",");
            List<Long> userIdLs = Lists.newArrayList();
            for (String userId : userIdss) {
                userIdLs.add(Long.valueOf(userId));
            }
            Criterion inUserCriterion = Restrictions.in("id", userIdLs);
            users = userManager.findByCriteria(inUserCriterion);
        }
        model.addAttribute("users", users);

        return "modules/sys/user-select";
    }

    @RequestMapping(value = { "combogridSelectUser" })
    @ResponseBody
    public String combogridSelectUser(Long organId, Long roleId, String loginNameOrName, String sort,
            String order) {
        List<User> users = userManager.getUsersByOrgOrRole(organId, roleId, loginNameOrName, sort, order);
        Datagrid<User> dg = new Datagrid<User>(users.size(), users);
        return JsonMapper.getInstance().toJson(dg, User.class,
                new String[] { "id", "loginName", "name", "sexView" });
    }

    /**
     * @param user
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "input" })
    public String input(@ModelAttribute("model") User user) throws Exception {
        return "modules/sys/user-input";
    }

    @RequestMapping(value = { "_remove" })
    @ResponseBody
    @Override
    public Result remove(@RequestParam(value = "ids", required = false) List<Long> 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(Long organId, String loginNameOrName, Integer page, Integer rows,
            String sort, String order) throws Exception {
        Page<User> p = userManager.getUsersByQuery(organId, loginNameOrName, page, rows, sort, order);
        Datagrid<User> dg = new Datagrid<User>(p.getTotalCount(), p.getResult());
        return dg;
    }

    /**
     * combogrid
     *
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "combogridAll" })
    @ResponseBody
    public String combogridAll() {
        List<PropertyFilter> filters = Lists.newArrayList();
        filters.add(new PropertyFilter("EQI_status", StatusState.normal.getValue().toString()));
        List<User> users = userManager.find(filters, "id", "asc");
        Datagrid<User> dg = new Datagrid<User>(users.size(), users);
        return JsonMapper.getInstance().toJson(dg, User.class,
                new String[] { "id", "loginName", "name", "sexView" });
    }

    /**
     * ?
     * @param organId ID
     * @return
     */
    @RequestMapping(value = { "combogridOrganUser" })
    @ResponseBody
    public String combogridOrganUser(@RequestParam(value = "organId", required = true) Long organId) {
        List<User> users = userManager.getUsersByOrganId(organId);
        Datagrid dg = new Datagrid(users.size(), users);
        return JsonMapper.getInstance().toJson(dg, User.class, new String[] { "id", "loginName", "name" });
    }

    /**
     * combogrid
     *
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "combogrid" })
    @ResponseBody
    public Datagrid<User> combogrid(@RequestParam(value = "ids", required = false) List<Long> ids,
            String loginNameOrName, Integer rows) throws Exception {
        Criterion statusCriterion = Restrictions.eq("status", StatusState.normal.getValue());
        Criterion[] criterions = new Criterion[0];
        criterions = (Criterion[]) ArrayUtils.add(criterions, 0, statusCriterion);
        Criterion criterion = null;
        if (Collections3.isNotEmpty(ids)) {
            //in?
            Criterion inCriterion = Restrictions.in("id", ids);

            if (StringUtils.isNotBlank(loginNameOrName)) {
                Criterion loginNameCriterion = Restrictions.like("loginName", loginNameOrName, MatchMode.ANYWHERE);
                Criterion nameCriterion = Restrictions.like("name", loginNameOrName, MatchMode.ANYWHERE);
                Criterion criterion1 = Restrictions.or(loginNameCriterion, nameCriterion);
                criterion = Restrictions.or(inCriterion, criterion1);
            } else {
                criterion = inCriterion;
            }
            //??
            criterions = (Criterion[]) ArrayUtils.add(criterions, 0, criterion);
        } else {
            if (StringUtils.isNotBlank(loginNameOrName)) {
                Criterion loginNameCriterion = Restrictions.like("loginName", loginNameOrName, MatchMode.ANYWHERE);
                Criterion nameCriterion = Restrictions.like("name", loginNameOrName, MatchMode.ANYWHERE);
                criterion = Restrictions.or(loginNameCriterion, nameCriterion);
                //??
                criterions = (Criterion[]) ArrayUtils.add(criterions, 0, criterion);
            }
        }

        //
        Page<User> p = new Page<User>(rows);//
        p = userManager.findByCriteria(p, criterions);
        Datagrid<User> dg = new Datagrid<User>(p.getTotalCount(), p.getResult());
        return dg;
    }

    /**
     * ?.
     */
    @RequestMapping(value = { "save" })
    @ResponseBody
    public Result save(@ModelAttribute("model") User user) {
        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 (user.getId() == null) {// 
            user.setPassword(Encrypt.e(user.getPassword()));
        } else {// 
            User superUser = userManager.getSuperUser();
            User sessionUser = userManager.getCurrentUser();
            if (!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() throws Exception {
        return "modules/sys/user-password";

    }

    /**
     * ?.
     * <br>?upateOperate ??"1" ???"0".
     */
    @RequestMapping(value = { "updateUserPassword" })
    @ResponseBody
    public Result updateUserPassword(@ModelAttribute("model") User user, String upateOperate, String newPassword)
            throws Exception {
        Result result;
        if (!StringUtils.isEmpty(upateOperate)) {
            User u = userManager.loadById(user.getId());
            if (u != null) {
                boolean isCheck = true;
                //??
                if (AppConstants.USER_UPDATE_PASSWORD_YES.equals(upateOperate)) {
                    String originalPassword = u.getPassword(); //??
                    String pagePassword = u.getPassword(); //??
                    if (!originalPassword.equals(Encrypt.e(pagePassword))) {
                        isCheck = false;
                    }
                }
                //???
                if (AppConstants.USER_UPDATE_PASSWORD_NO.equals(upateOperate)) {
                    isCheck = true;
                }
                if (isCheck) {
                    u.setPassword(Encrypt.e(newPassword));
                    userManager.saveEntity(u);
                    result = Result.successResult();
                } else {
                    result = new Result(Result.WARN, "?.", "password");
                }
            } else {
                result = new Result(Result.ERROR, "?.", null);
            }
        } else {
            result = Result.errorResult();
            logger.warn("?,?[upateOperate].");
        }
        logger.debug(result.toString());
        return result;
    }

    /**
     * ?.
     */
    @RequestMapping(value = { "role" })
    public String role() throws Exception {
        return "modules/sys/user-role";
    }

    /**
     * .
     */
    @RequestMapping(value = { "updateUserRole" })
    @ResponseBody
    public Result updateUserRole(@ModelAttribute("model") User user,
            @RequestParam(value = "roleIds", required = false) List<Long> roleIds) throws Exception {
        Result result = null;
        List<Role> rs = Lists.newArrayList();
        if (Collections3.isNotEmpty(roleIds)) {
            for (Long id : roleIds) {
                Role role = roleManager.loadById(id);
                rs.add(role);
            }
        }

        user.setRoles(rs);
        userManager.saveEntity(user);
        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";
    }

    /**
     * .
     */
    @RequestMapping(value = { "updateUserOrgan" })
    @ResponseBody
    public Result updateUserOrgan(@ModelAttribute("model") User model,
            @RequestParam(value = "organIds", required = false) List<Long> organIds, String defaultOrganId)
            throws Exception {
        Result result = null;
        List<Organ> oldOrgans = model.getOrgans();
        //
        model.setOrgans(null);
        List<Organ> organs = Lists.newArrayList();
        if (Collections3.isNotEmpty(organIds)) {
            for (Long organId : organIds) {
                Organ organ = organManager.loadById(organId);
                organs.add(organ);
                if (Collections3.isNotEmpty(oldOrgans)) {
                    Iterator<Organ> iterator = oldOrgans.iterator();
                    while (iterator.hasNext()) {
                        Organ oldOrgan = iterator.next();
                        if (oldOrgan.getId().equals(organ.getId())) {
                            iterator.remove();
                        }
                    }

                }
            }
        }

        //??
        List<Post> userPosts = model.getPosts();
        if (Collections3.isNotEmpty(oldOrgans)) {//
            Iterator<Organ> iterator = oldOrgans.iterator();
            while (iterator.hasNext()) {
                Organ oldOrgan = iterator.next();
                List<Post> organPosts = oldOrgan.getPosts();
                for (Post organPost : organPosts) {
                    if (Collections3.isNotEmpty(userPosts)) {
                        Iterator<Post> iteratorPost = userPosts.iterator();
                        while (iteratorPost.hasNext()) {
                            Post userPost = iteratorPost.next();
                            if (userPost.getId().equals(organPost.getId())) {
                                iteratorPost.remove();
                            }
                        }
                    }
                }
            }

        }

        model.setOrgans(organs);

        //
        model.setDefaultOrgan(null);
        Organ defaultOrgan = null;
        if (defaultOrganId != null) {
            defaultOrgan = organManager.loadById(model.getDefaultOrganId());
        }
        model.setDefaultOrgan(defaultOrgan);

        userManager.saveEntity(model);
        result = Result.successResult();
        return result;
    }

    /**
     * ??.
     */
    @RequestMapping(value = { "post" })
    public String post() throws Exception {
        return "modules/sys/user-post";
    }

    /**
     * ?.
     */
    @RequestMapping(value = { "updateUserPost" })
    @ResponseBody
    public Result updateUserPost(@ModelAttribute("model") User model,
            @RequestParam(value = "postIds", required = false) List<Long> postIds) throws Exception {
        Result result = null;
        List<Post> ps = Lists.newArrayList();
        if (Collections3.isNotEmpty(postIds)) {
            for (Long id : postIds) {
                Post post = postManager.loadById(id);
                ps.add(post);
            }
        }

        model.setPosts(ps);

        getEntityManager().saveEntity(model);
        result = Result.successResult();
        return result;
    }

    /**
     * ??.
     */
    @RequestMapping(value = { "resource" })
    public String resource(Model model) throws Exception {
        List<TreeNode> treeNodes = resourceManager.getResourceTree(null, false);
        String resourceComboboxData = JsonMapper.nonDefaultMapper().toJson(treeNodes);
        logger.debug(resourceComboboxData);
        model.addAttribute("resourceComboboxData", resourceComboboxData);
        return "modules/sys/user-resource";
    }

    /**
     * ?.
     */
    @RequestMapping(value = { "updateUserResource" })
    @ResponseBody
    public Result updateUserResource(@ModelAttribute("model") User user,
            @RequestParam(value = "resourceIds", required = false) List<Long> resourceIds) throws Exception {
        Result result = null;
        List<Resource> rs = Lists.newArrayList();
        if (Collections3.isNotEmpty(resourceIds)) {
            for (Long id : resourceIds) {
                Resource resource = resourceManager.loadById(id);
                rs.add(resource);
            }
        }

        user.setResources(rs);
        userManager.saveEntity(user);
        result = Result.successResult();
        return result;

    }

    /**
     * 
     *
     * @throws Exception
     */
    @RequestMapping(value = { "sexTypeCombobox" })
    @ResponseBody
    public List<Combobox> sexTypeCombobox(String selectType) throws Exception {
        List<Combobox> cList = Lists.newArrayList();

        //combobox  "------"?"------"
        if (!StringUtils.isBlank(selectType)) {
            SelectType s = SelectType.getSelectTypeValue(selectType);
            if (s != null) {
                Combobox selectCombobox = new Combobox("", s.getDescription());
                cList.add(selectCombobox);
            }
        }
        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;
    }

}