com.glaf.base.modules.sys.service.mybatis.SysDeptRoleServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.glaf.base.modules.sys.service.mybatis.SysDeptRoleServiceImpl.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.glaf.base.modules.sys.service.mybatis;

import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.session.RowBounds;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.glaf.base.modules.sys.SysConstants;
import com.glaf.base.modules.sys.mapper.SysAccessMapper;
import com.glaf.base.modules.sys.mapper.SysApplicationMapper;
import com.glaf.base.modules.sys.mapper.SysDeptRoleMapper;
import com.glaf.base.modules.sys.mapper.SysFunctionMapper;
import com.glaf.base.modules.sys.mapper.SysPermissionMapper;
import com.glaf.base.modules.sys.mapper.SysUserMapper;
import com.glaf.base.modules.sys.mapper.SysUserRoleMapper;
import com.glaf.base.modules.sys.model.SysAccess;
import com.glaf.base.modules.sys.model.SysDepartment;
import com.glaf.base.modules.sys.model.SysDeptRole;
import com.glaf.base.modules.sys.model.SysPermission;
import com.glaf.base.modules.sys.model.SysRole;
import com.glaf.base.modules.sys.model.SysUser;
import com.glaf.base.modules.sys.model.SysUserRole;
import com.glaf.base.modules.sys.query.SysAccessQuery;
import com.glaf.base.modules.sys.query.SysDeptRoleQuery;
import com.glaf.base.modules.sys.service.SysApplicationService;
import com.glaf.base.modules.sys.service.SysDepartmentService;
import com.glaf.base.modules.sys.service.SysDeptRoleService;
import com.glaf.base.modules.sys.service.SysFunctionService;
import com.glaf.base.modules.sys.service.SysRoleService;
import com.glaf.base.modules.sys.service.SysUserService;
import com.glaf.core.base.TableModel;
import com.glaf.core.domain.Membership;
import com.glaf.core.id.IdGenerator;
import com.glaf.core.service.ITableDataService;
import com.glaf.core.service.MembershipService;
import com.glaf.core.util.PageResult;

@Service("sysDeptRoleService")
@Transactional(readOnly = true)
public class SysDeptRoleServiceImpl implements SysDeptRoleService {
    protected final static Log logger = LogFactory.getLog(SysDeptRoleServiceImpl.class);

    protected IdGenerator idGenerator;

    protected MembershipService membershipService;

    protected SqlSessionTemplate sqlSessionTemplate;

    protected SysAccessMapper sysAccessMapper;

    protected SysApplicationMapper sysApplicationMapper;

    protected SysApplicationService sysApplicationService;

    protected SysDepartmentService sysDepartmentService;

    protected SysDeptRoleMapper sysDeptRoleMapper;

    protected SysFunctionMapper sysFunctionMapper;

    protected SysFunctionService sysFunctionService;

    protected SysPermissionMapper sysPermissionMapper;

    protected SysRoleService sysRoleService;

    protected SysUserMapper sysUserMapper;

    protected SysUserRoleMapper sysUserRoleMapper;

    protected SysUserService sysUserService;

    protected ITableDataService tableDataService;

    public SysDeptRoleServiceImpl() {

    }

    public int count(SysDeptRoleQuery query) {
        query.ensureInitialized();
        return sysDeptRoleMapper.getSysDeptRoleCount(query);
    }

    @Transactional
    public boolean create(SysDeptRole bean) {
        this.save(bean);
        return true;
    }

    @Transactional
    public boolean delete(long id) {
        this.deleteById(id);
        return true;
    }

    @Transactional
    public boolean delete(SysDeptRole bean) {
        this.deleteById(bean.getId());
        return true;
    }

    @Transactional
    public boolean deleteAll(long[] ids) {
        if (ids != null && ids.length > 0) {
            for (long id : ids) {
                this.deleteById(id);
            }
        }
        return true;
    }

    @Transactional
    public boolean deleteByDept(long deptId) {
        sysDeptRoleMapper.deleteSysDeptRoleByDeptId(deptId);
        return true;
    }

    @Transactional
    public void deleteById(Long id) {
        if (id != null) {
            sysDeptRoleMapper.deleteSysDeptRoleById(id);
        }
    }

    @Transactional
    public void deleteByIds(List<Long> rowIds) {
        if (rowIds != null && !rowIds.isEmpty()) {
            SysDeptRoleQuery query = new SysDeptRoleQuery();
            query.rowIds(rowIds);
            sysDeptRoleMapper.deleteSysDeptRoles(query);
        }
    }

    public SysDeptRole find(long deptId, long roleId) {
        SysDeptRoleQuery query = new SysDeptRoleQuery();
        query.setDeptId(deptId);
        query.setSysRoleId(roleId);
        query.setOrderBy(" E.ID desc ");
        List<SysDeptRole> list = this.list(query);
        if (list != null && !list.isEmpty()) {
            SysDeptRole deptRole = list.get(0);
            deptRole.setDept(sysDepartmentService.findById(deptRole.getDeptId()));
            deptRole.setRole(sysRoleService.findById(deptRole.getSysRoleId()));
            deptRole.getApps().addAll(sysApplicationMapper.getSysApplicationByRoleId(deptRole.getId()));
            deptRole.getFunctions().addAll(sysFunctionMapper.getSysFunctionByRoleId(deptRole.getId()));
            SysDeptRoleQuery q = new SysDeptRoleQuery();
            q.setDeptId(deptId);
            q.setSysRoleId(roleId);
            List<SysUser> users = sysUserMapper.getSysDeptRoleUsers(q);
            deptRole.getUsers().addAll(users);
            return deptRole;
        }
        return null;
    }

    public SysDeptRole findById(long id) {
        return this.getSysDeptRole(id);
    }

    public Set<SysUser> findRoleUser(long deptId, String roleCode) {
        Set<SysUser> users = new HashSet<SysUser>();
        SysDeptRoleQuery query = new SysDeptRoleQuery();
        query.deptId(deptId);
        query.setRoleCode(roleCode);
        List<SysUser> list = sysUserMapper.getSysDeptRoleUsers(query);

        if (list != null && !list.isEmpty()) {
            this.initUserDepartments(list);
            users.addAll(list);
        }

        return users;
    }

    public List<SysDeptRole> getRoleList(long deptId) {
        SysDeptRoleQuery query = new SysDeptRoleQuery();
        query.setDeptId(deptId);
        List<SysDeptRole> list = this.list(query);
        this.initRoles(list);
        return list;
    }

    public PageResult getRoleList(long deptId, int pageNo, int pageSize) {
        // 
        PageResult pager = new PageResult();
        SysDeptRoleQuery query = new SysDeptRoleQuery();
        query.deptId(Long.valueOf(deptId));
        int count = this.count(query);
        if (count == 0) {// 
            pager.setPageSize(pageSize);
            return pager;
        }
        query.setOrderBy(" E.SORT desc");

        int start = pageSize * (pageNo - 1);
        List<SysDeptRole> list = this.getSysDeptRolesByQueryCriteria(start, pageSize, query);
        this.initRoles(list);
        pager.setResults(list);
        pager.setPageSize(pageSize);
        pager.setCurrentPageNo(pageNo);
        pager.setTotalRecordCount(count);

        return pager;
    }

    public SysDeptRole getSysDeptRole(Long id) {
        if (id == null) {
            return null;
        }
        SysDeptRole deptRole = sysDeptRoleMapper.getSysDeptRoleById(id);
        if (deptRole != null) {
            deptRole.setDept(sysDepartmentService.findById(deptRole.getDeptId()));
            deptRole.setRole(sysRoleService.findById(deptRole.getSysRoleId()));
            deptRole.getApps().addAll(sysApplicationMapper.getSysApplicationByRoleId(deptRole.getId()));
            deptRole.getFunctions().addAll(sysFunctionMapper.getSysFunctionByRoleId(deptRole.getId()));
        }
        return deptRole;
    }

    public int getSysDeptRoleCountByQueryCriteria(SysDeptRoleQuery query) {
        return sysDeptRoleMapper.getSysDeptRoleCount(query);
    }

    public List<SysDeptRole> getSysDeptRolesByQueryCriteria(int start, int pageSize, SysDeptRoleQuery query) {
        RowBounds rowBounds = new RowBounds(start, pageSize);
        List<SysDeptRole> rows = sqlSessionTemplate.selectList("getSysDeptRoles", query, rowBounds);
        return rows;
    }

    protected void initRoles(List<SysDeptRole> list) {
        if (list != null && !list.isEmpty()) {
            List<SysRole> rows = sysRoleService.getSysRoleList();
            Map<Long, SysRole> dataMap = new java.util.HashMap<Long, SysRole>();
            if (rows != null && !rows.isEmpty()) {
                for (SysRole m : rows) {
                    dataMap.put(m.getId(), m);
                }
            }
            for (SysDeptRole bean : list) {
                bean.setRole(dataMap.get(Long.valueOf(bean.getSysRoleId())));
            }
        }
    }

    protected void initUserDepartments(List<SysUser> users) {
        if (users != null && !users.isEmpty()) {
            List<SysDepartment> depts = sysDepartmentService.getSysDepartmentList();
            Map<Long, SysDepartment> deptMap = new java.util.HashMap<Long, SysDepartment>();
            if (depts != null && !depts.isEmpty()) {
                for (SysDepartment dept : depts) {
                    deptMap.put(dept.getId(), dept);
                }
            }
            for (SysUser user : users) {
                user.setDepartment(deptMap.get(Long.valueOf(user.getDeptId())));
            }
        }
    }

    public List<SysDeptRole> list(SysDeptRoleQuery query) {
        query.ensureInitialized();
        List<SysDeptRole> list = sysDeptRoleMapper.getSysDeptRoles(query);
        return list;
    }

    @Transactional
    public void save(SysDeptRole sysDeptRole) {
        if (sysDeptRole.getId() == 0) {
            sysDeptRole.setId(idGenerator.nextId());
            sysDeptRole.setCreateDate(new Date());
            sysDeptRoleMapper.insertSysDeptRole(sysDeptRole);
        } else {
            sysDeptRoleMapper.updateSysDeptRole(sysDeptRole);
        }

        Membership membership = new Membership();
        membership.setModifyBy(sysDeptRole.getCreateBy());
        membership.setModifyDate(new java.util.Date());
        membership.setNodeId(sysDeptRole.getDeptId());
        membership.setRoleId(sysDeptRole.getSysRoleId());
        membership.setObjectId("SYS_DEPT_ROLE");
        membership.setObjectValue(String.valueOf(sysDeptRole.getId()));
        membership.setType("SysDeptRole");
        membershipService.save(membership);
    }

    /**
     * ??
     * 
     * @param roleId
     * @param appId
     * @param funcId
     * @return
     */
    @Transactional
    public boolean saveRoleApplication(long roleId, long[] appIds, long[] funcIds) {
        SysDeptRole role = findById(roleId);
        if (appIds != null) {
            sysAccessMapper.deleteSysAccessByRoleId(roleId);
            // ???
            for (int i = 0; i < appIds.length; i++) {
                logger.info("app id:" + appIds[i]);
                if (appIds[i] > 0) {
                    SysAccess access = new SysAccess();
                    access.setAppId(appIds[i]);
                    access.setRoleId(role.getId());
                    sysAccessMapper.insertSysAccess(access);
                }
            }
        }

        // ????
        if (funcIds != null) {
            sysPermissionMapper.deleteSysPermissionByRoleId(roleId);
            for (int i = 0; i < funcIds.length; i++) {
                logger.info("function id:" + funcIds[i]);
                if (funcIds[i] > 0) {
                    SysPermission p = new SysPermission();
                    p.setFuncId(funcIds[i]);
                    p.setRoleId(role.getId());
                    sysPermissionMapper.insertSysPermission(p);
                }
            }
        }
        return true;
    }

    /**
     * ?
     * 
     * @param roleId
     * @param appId
     * @param funcId
     * @return
     */
    @Transactional
    public boolean saveOrCancelRoleApplicationWhole(long deptRoleId, long[] appIds, int saveType) {
        if (appIds != null) {
            // ???
            SysAccessQuery query = new SysAccessQuery();
            for (int i = 0; i < appIds.length; i++) {
                if (appIds[i] > 0) {
                    query.setAppId(appIds[i]);
                    query.setRoleId(deptRoleId);
                    if (saveType == 0) {
                        List<SysAccess> list = sysAccessMapper.getSysAccessByQuery(query);
                        logger.debug("app id:" + appIds[i]);
                        if (null == list || list.isEmpty()) {
                            SysAccess access = new SysAccess();
                            access.setAppId(appIds[i]);
                            access.setRoleId(deptRoleId);
                            sysAccessMapper.insertSysAccess(access);
                        }
                    } else {
                        sysAccessMapper.deleteSysAccessByQuery(query);
                    }
                }
            }
        }
        return true;
    }

    @javax.annotation.Resource
    public void setIdGenerator(IdGenerator idGenerator) {
        this.idGenerator = idGenerator;
    }

    @javax.annotation.Resource
    public void setMembershipService(MembershipService membershipService) {
        this.membershipService = membershipService;
    }

    @javax.annotation.Resource
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }

    @javax.annotation.Resource
    public void setSysAccessMapper(SysAccessMapper sysAccessMapper) {
        this.sysAccessMapper = sysAccessMapper;
    }

    @javax.annotation.Resource
    public void setSysApplicationMapper(SysApplicationMapper sysApplicationMapper) {
        this.sysApplicationMapper = sysApplicationMapper;
    }

    @javax.annotation.Resource
    public void setSysApplicationService(SysApplicationService sysApplicationService) {
        this.sysApplicationService = sysApplicationService;
    }

    @javax.annotation.Resource
    public void setSysDepartmentService(SysDepartmentService sysDepartmentService) {
        this.sysDepartmentService = sysDepartmentService;
    }

    @javax.annotation.Resource
    public void setSysDeptRoleMapper(SysDeptRoleMapper sysDeptRoleMapper) {
        this.sysDeptRoleMapper = sysDeptRoleMapper;
    }

    @javax.annotation.Resource
    public void setSysFunctionMapper(SysFunctionMapper sysFunctionMapper) {
        this.sysFunctionMapper = sysFunctionMapper;
    }

    @javax.annotation.Resource
    public void setSysFunctionService(SysFunctionService sysFunctionService) {
        this.sysFunctionService = sysFunctionService;
    }

    @javax.annotation.Resource
    public void setSysPermissionMapper(SysPermissionMapper sysPermissionMapper) {
        this.sysPermissionMapper = sysPermissionMapper;
    }

    @javax.annotation.Resource
    public void setSysRoleService(SysRoleService sysRoleService) {
        this.sysRoleService = sysRoleService;
    }

    @javax.annotation.Resource
    public void setSysUserMapper(SysUserMapper sysUserMapper) {
        this.sysUserMapper = sysUserMapper;
    }

    @javax.annotation.Resource
    public void setSysUserRoleMapper(SysUserRoleMapper sysUserRoleMapper) {
        this.sysUserRoleMapper = sysUserRoleMapper;
    }

    @javax.annotation.Resource
    public void setSysUserService(SysUserService sysUserService) {
        this.sysUserService = sysUserService;
    }

    @javax.annotation.Resource
    public void setTableDataService(ITableDataService tableDataService) {
        this.tableDataService = tableDataService;
    }

    /**
     * ?
     * 
     * @param bean
     *            SysDeptRole
     * @param operate
     *            int ?
     */
    @Transactional
    public void sort(SysDeptRole bean, int operate) {
        if (bean == null)
            return;
        if (operate == SysConstants.SORT_PREVIOUS) {// ?
            sortByPrevious(bean);
        } else if (operate == SysConstants.SORT_FORWARD) {// ?
            sortByForward(bean);
        }
    }

    /**
     * ???
     * 
     * @param bean
     */
    private void sortByForward(SysDeptRole bean) {
        SysDeptRoleQuery query = new SysDeptRoleQuery();
        query.setDeptId(bean.getDeptId());
        query.setSortLessThan(bean.getSort());
        query.setOrderBy(" E.SORT desc ");

        // ?
        List<SysDeptRole> list = this.list(query);
        if (list != null && list.size() > 0) {// 
            SysDeptRole temp = (SysDeptRole) list.get(0);
            int i = bean.getSort();
            bean.setSort(temp.getSort());
            this.update(bean);// bean

            temp.setSort(i);
            this.update(temp);// temp
        }
    }

    /**
     * ???
     * 
     * @param bean
     */
    private void sortByPrevious(SysDeptRole bean) {
        SysDeptRoleQuery query = new SysDeptRoleQuery();
        query.setDeptId(bean.getDeptId());
        query.setSortGreaterThan(bean.getSort());
        query.setOrderBy(" E.SORT asc ");
        // ?

        List<SysDeptRole> list = this.list(query);
        if (list != null && list.size() > 0) {// 
            SysDeptRole temp = (SysDeptRole) list.get(0);
            int i = bean.getSort();
            bean.setSort(temp.getSort());
            this.update(bean);// bean

            temp.setSort(i);
            this.update(temp);// temp
        }
    }

    @Transactional
    public boolean update(SysDeptRole bean) {
        this.save(bean);
        TableModel table = new TableModel();
        table.setTableName("SYS_USER_ROLE");
        table.addIntegerColumn("AUTHORIZED", 0);
        table.addLongColumn("ROLEID", bean.getId());
        tableDataService.deleteTableData(table);

        List<Membership> memberships = new java.util.ArrayList<Membership>();
        Set<SysUser> users = bean.getUsers();
        if (users != null && !users.isEmpty()) {
            for (SysUser user : users) {
                SysUserRole userRole = new SysUserRole();
                userRole.setId(idGenerator.nextId());
                userRole.setUserId(user.getId());
                userRole.setDeptRoleId(bean.getId());
                userRole.setDeptRole(bean);
                userRole.setCreateBy(bean.getCreateBy());
                userRole.setCreateDate(new Date());
                sysUserRoleMapper.insertSysUserRole(userRole);

                Membership membership = new Membership();
                membership.setActorId(user.getAccount());
                membership.setModifyBy(bean.getCreateBy());
                membership.setModifyDate(new java.util.Date());
                membership.setNodeId(bean.getDeptId());
                membership.setRoleId(bean.getSysRoleId());
                membership.setObjectId("SYS_USER_ROLE");
                membership.setObjectValue(String.valueOf(userRole.getId()));
                memberships.add(membership);
            }
        }

        membershipService.saveMemberships(bean.getDeptId(), bean.getSysRoleId(), "DeptRoleUser", memberships);

        return true;
    }

}