com.eryansky.modules.sys.web.OrganController.java Source code

Java tutorial

Introduction

Here is the source code for com.eryansky.modules.sys.web.OrganController.java

Source

/**
 *  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.mapper.JsonMapper;
import com.eryansky.common.web.springmvc.BaseController;
import com.eryansky.core.security.SecurityUtils;
import com.eryansky.core.security.SessionInfo;
import com.eryansky.modules.sys._enum.OrganType;
import com.eryansky.modules.sys.entity.Organ;
import com.eryansky.modules.sys.entity.User;
import com.eryansky.modules.sys.service.OrganManager;
import com.eryansky.modules.sys.service.UserManager;
import com.eryansky.utils.SelectType;
import com.google.common.collect.Lists;
import org.apache.commons.collections.ListUtils;
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.*;

import java.util.Iterator;
import java.util.List;

/**
 * Organ? Controller.
 *
 * @author &Eryan eryanwcp@gmail.com
 * @date 2013-09-09 ?21:36:24
 */
@SuppressWarnings("serial")
@Controller
@RequestMapping(value = "${adminPath}/sys/organ")
public class OrganController extends BaseController<Organ, Long> {

    @Autowired
    private OrganManager organManager;
    @Autowired
    private UserManager userManager;

    @Override
    public EntityManager<Organ, Long> getEntityManager() {
        return organManager;
    }

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

    /**
     * @param organ
     * @param parentOrganType 
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "input" })
    public String input(@ModelAttribute("model") Organ organ, Integer parentOrganType, Model model)
            throws Exception {
        if (parentOrganType == null && organ.getParentOrgan() != null) {
            parentOrganType = organ.getParentOrgan().getType();
        }
        model.addAttribute("parentOrganType", parentOrganType);
        //        model.addAttribute("hasChild", Collections3.isNotEmpty(organ.getSubOrgans()));
        return "modules/sys/organ-input";
    }

    @RequestMapping(value = { "treegrid" })
    @ResponseBody
    public Datagrid<Organ> treegrid(String sort, String order) throws Exception {
        List<PropertyFilter> filters = Lists.newArrayList();
        SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo();
        User sueperUser = userManager.getSuperUser();
        List<Organ> list = null;
        if (sessionInfo != null && sueperUser != null && sessionInfo.getUserId().equals(sueperUser.getId())) {
            list = getEntityManager().find(filters, sort, order);
        } else {
            list = organManager.findOrgansBySysCode(sessionInfo.getLoginOrganSysCode());
            int minSysCodeLength = 0;

            Iterator<Organ> iterator = list.iterator();
            while (iterator.hasNext()) {
                Organ organ = iterator.next();
                if (minSysCodeLength == 0) {
                    minSysCodeLength = organ.getSysCode().length();
                }
                if (minSysCodeLength > organ.getSysCode().length()) {
                    minSysCodeLength = organ.getSysCode().length();
                }
            }

            Iterator<Organ> iterator2 = list.iterator();
            while (iterator2.hasNext()) {
                Organ organ = iterator2.next();
                if (minSysCodeLength == organ.getSysCode().length()) {
                    //                    getEntityManager().evict(organ);
                    organ.setParentOrgan(null);
                }
            }

        }
        Datagrid<Organ> dg = new Datagrid<Organ>(list.size(), list);
        return dg;
    }

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

            if (StringUtils.isNotBlank(nameOrCode)) {
                Criterion nameCriterion = Restrictions.like("name", nameOrCode, MatchMode.ANYWHERE);
                Criterion codeCriterion = Restrictions.like("code", nameOrCode, MatchMode.ANYWHERE);
                Criterion criterion1 = Restrictions.or(nameCriterion, codeCriterion);
                criterion = Restrictions.or(inCriterion, criterion1);
            } else {
                criterion = inCriterion;
            }
            //??
            criterions = ArrayUtils.add(criterions, 0, criterion);
        } else {
            if (StringUtils.isNotBlank(nameOrCode)) {
                Criterion nameCriterion = Restrictions.like("name", nameOrCode, MatchMode.ANYWHERE);
                Criterion codeCriterion = Restrictions.like("code", nameOrCode, MatchMode.ANYWHERE);
                criterion = Restrictions.or(nameCriterion, codeCriterion);
                //??
                criterions = ArrayUtils.add(criterions, 0, criterion);
            }
        }

        //
        Page<Organ> p = new Page<Organ>(rows);//
        p = organManager.findPageByCriteria(p, criterions);
        Datagrid<Organ> dg = new Datagrid<Organ>(p.getTotalCount(), p.getResult());
        return dg;
    }

    /**
     * ?ID
     *
     * @param id ID
     * @return
     */
    @RequestMapping(value = { "delete/{id}" })
    @ResponseBody
    public Result delete(@PathVariable Long id) {
        organManager.deleteById(id);
        return Result.successResult();
    }

    /**
     * ?.
     */
    @RequestMapping(value = { "_save" })
    @ResponseBody
    public Result save(@ModelAttribute("model") Organ organ, Long _parentId) {
        getEntityManager().evict(organ);
        Result result = null;
        organ.setParentOrgan(null);
        // ????
        Organ checkOrgan = organManager.getByName(organ.getName());
        if (checkOrgan != null && !checkOrgan.getId().equals(organ.getId())) {
            result = new Result(Result.WARN, "??[" + organ.getName() + "],!", "name");
            logger.debug(result.toString());
            return result;
        }

        // 
        if (_parentId != null) {
            Organ parentOrgan = organManager.loadById(_parentId);
            if (parentOrgan == null) {
                logger.error("[{}].", _parentId);
                throw new ActionException(".");
            }
            organ.setParentOrgan(parentOrgan);
        }

        //?
        if (organ.getId() != null) {
            if (organ.getId().equals(organ.get_parentId())) {
                result = new Result(Result.ERROR, "[]?[??]?.", null);
                logger.debug(result.toString());
                return result;
            }
        }

        organManager.saveEntity(organ);
        result = Result.successResult();
        return result;
    }

    /**
     *  ?
     *
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "user" })
    public String user(@ModelAttribute("model") Organ organ, Model model) throws Exception {
        List<User> organUsers = organ.getUsers();
        Datagrid<User> dg = new Datagrid<User>(organUsers.size(), organUsers);
        String managerUserCombogridData = JsonMapper.nonDefaultMapper().toJson(dg);
        logger.debug(managerUserCombogridData);
        model.addAttribute("managerUserCombogridData", managerUserCombogridData);

        String usersCombogridData = JsonMapper.getInstance().toJson(userManager.getAllNormal());
        model.addAttribute("usersCombogridData", usersCombogridData);

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

    /**
     * 
     *
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "updateOrganUser" })
    @ResponseBody
    public Result updateOrganUser(@RequestParam(value = "userIds", required = false) List<Long> userIds,
            @ModelAttribute("model") Organ organ, Long managerUserId, Long superManagerUserId) throws Exception {
        getEntityManager().evict(organ);
        Result result;
        //
        List<User> userList = Lists.newArrayList();
        if (Collections3.isNotEmpty(userIds)) {
            for (Long userId : userIds) {
                User user = userManager.loadById(userId);
                userList.add(user);
            }
        }
        organ.setUsers(userList);
        //
        organ.setManagerUserId(managerUserId);

        //
        if (superManagerUserId != null) {
            organ.setSuperManagerUser(userManager.loadById(superManagerUserId));
        }
        //        organManager.saveOrgan(organ);
        organManager.saveEntity(organ);
        result = Result.successResult();
        logger.debug(result.toString());
        return result;
    }

    /**
     *
     * @param selectType
     * @param grade ??? 1(?) 0 (??)
     * @return
     * @throws Exception
     */
    @RequestMapping(value = { "tree" })
    @ResponseBody
    public List<TreeNode> tree(String selectType, Integer grade) throws Exception {
        List<TreeNode> treeNodes = null;
        List<TreeNode> titleList = Lists.newArrayList();
        TreeNode treeNode = SelectType.treeNode(selectType);
        if (treeNode != null) {
            titleList.add(treeNode);
        }

        SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo();
        User sueperUser = userManager.getSuperUser();
        Long userId = sessionInfo.getUserId();
        if ((grade != null && grade.intValue() == 0)) {
            userId = sueperUser.getId();//? ???
        }

        treeNodes = organManager.getUserOrganTree(userId);
        //        treeNodes = organManager.getOrganTree(organId,null, true);
        List<TreeNode> unionList = ListUtils.union(titleList, treeNodes);
        return unionList;
    }

    /**
     * .
     */
    @RequestMapping(value = { "organTypeCombobox" })
    @ResponseBody
    public List<Combobox> organTypeCombobox(String selectType, Integer parentOrganType) throws Exception {
        List<Combobox> cList = Lists.newArrayList();
        Combobox titleCombobox = SelectType.combobox(selectType);
        if (titleCombobox != null) {
            cList.add(titleCombobox);
        }

        OrganType _enumParentType = OrganType.getOrganType(parentOrganType);
        if (_enumParentType != null) {
            if (_enumParentType.equals(OrganType.organ)) {
                OrganType[] rss = OrganType.values();
                for (int i = 0; i < rss.length; i++) {
                    Combobox combobox = new Combobox();
                    combobox.setValue(rss[i].getValue().toString());
                    combobox.setText(rss[i].getDescription());
                    cList.add(combobox);
                }
            } else if (_enumParentType.equals(OrganType.department)) {
                Combobox departmentCombobox = new Combobox(OrganType.department.getValue().toString(),
                        OrganType.department.getDescription().toString());
                Combobox groupCombobox = new Combobox(OrganType.group.getValue().toString(),
                        OrganType.group.getDescription().toString());
                cList.add(departmentCombobox);
                cList.add(groupCombobox);
            } else if (_enumParentType.equals(OrganType.group)) {
                Combobox groupCombobox = new Combobox(OrganType.group.getValue().toString(),
                        OrganType.group.getDescription().toString());
                cList.add(groupCombobox);
            }
        } else {
            Combobox groupCombobox = new Combobox(OrganType.organ.getValue().toString(),
                    OrganType.organ.getDescription().toString());
            cList.add(groupCombobox);
        }
        return cList;
    }

    /**
     * .
     */
    @SuppressWarnings("unchecked")
    @RequestMapping(value = { "parentOrgan" })
    @ResponseBody
    public List<TreeNode> parentOrgan(String selectType, @ModelAttribute("model") Organ organ) throws Exception {
        List<TreeNode> treeNodes = null;
        List<TreeNode> titleList = Lists.newArrayList();
        TreeNode treeNode = SelectType.treeNode(selectType);
        if (treeNode != null) {
            titleList.add(treeNode);
        }
        SessionInfo sessionInfo = SecurityUtils.getCurrentSessionInfo();
        User sueperUser = userManager.getSuperUser();
        Long organId = sessionInfo.getLoginOrganId();
        if (sessionInfo != null && sueperUser != null && sessionInfo.getUserId().equals(sueperUser.getId())) {
            organId = null;
        }
        treeNodes = organManager.getOrganTree(organId, organ.getId(), true, false, null);
        List<TreeNode> unionList = ListUtils.union(titleList, treeNodes);
        return unionList;
    }

    /**
     * ?.
     */
    @RequestMapping(value = { "maxSort" })
    @ResponseBody
    public Result maxSort() throws Exception {
        Result result;
        Integer maxSort = organManager.getMaxSort();
        result = new Result(Result.SUCCESS, null, maxSort);
        logger.debug(result.toString());
        return result;
    }

}