Newer
Older
EMS-WEB-3.0 / src / main / java / com / casic / accessControl / user / manager / CompanyManager.java
zhangyingjie on 19 Dec 2020 7 KB 增加组织管理功能
package com.casic.accessControl.user.manager;

import com.casic.accessControl.core.hibernate.HibernateEntityDao;
import com.casic.accessControl.core.page.Page;
import com.casic.accessControl.user.domain.Company;
import com.casic.accessControl.user.domain.User;
import com.casic.accessControl.user.dto.CompanyDto;
import com.casic.accessControl.util.DataTable;
import com.casic.accessControl.util.DataTableParameter;
import com.casic.accessControl.util.DataTableUtils;
import com.casic.accessControl.util.StringUtils;
import org.apache.commons.collections.CollectionUtils;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by lenovo on 2016/4/20.
 */
@Service("companyManager")
public class CompanyManager extends HibernateEntityDao<Company> {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource
    private UserManager userManager;

    /**
     * 获取用户角色
     *
     * @param
     * @return
     */
    @Cacheable(value = "getCompanies")
    public List<Company> getCompanies() {

        Criteria criteria = this.createCriteria(Company.class);
        criteria.add(Restrictions.eq("isValid", 1));
        List<Company> companies = criteria.list();
        return companies;
    }

    public List<Company> getCompanies(HttpSession session) {

        Criteria criteria = this.createCriteria(Company.class);
        criteria.add(Restrictions.eq("isValid", 1));

        User user = (User) session.getAttribute(com.casic.accessControl.util.StringUtils.SYS_USER);
        // 数据权限
        if(com.casic.accessControl.core.util.StringUtils.isNotBlank(user.getDatascope())){
            String[] datascope = user.getDatascope().split(",");
            List<Long> compnyIds = new ArrayList<>();
            Arrays.asList(datascope).forEach(obj -> compnyIds.add(Long.valueOf(obj)));
            criteria.add(Restrictions.in("id",compnyIds));
        } else {
            criteria.add(Restrictions.eq("id", user.getCompany().getId()));
        }

        List<Company> companies = criteria.list();
        return companies;
    }

    public Company getCompanyById(Long companyId){
        Company company = null;
        company = this.get(companyId);
        return company;
    }

    public List<Company> getCompanyByIds(List<Long> companyIds){
        Criteria criteria = this.createCriteria(Company.class);
        criteria.add(Restrictions.in("id",companyIds));
        List<Company> companies = criteria.list();
        return companies;
    }


    public Company getCompanyByName(String companyName, Long companyId){
        Criteria criteria = this.createCriteria(Company.class);
        criteria.add(Restrictions.eq("companyName", companyName));
        criteria.add(Restrictions.eq("isValid", 1));
        if(companyId != null){
            criteria.add(Restrictions.ne("id",companyId));
        }
        List<Company> companies = criteria.list();
        if (CollectionUtils.isEmpty(companies)) {
            return null;
        } else {
            return companies.get(0);
        }
    }

    public CompanyDto getCompanyDtoById(Long companyId){
        Company company = null;
        company = this.get(companyId);
        return CompanyDto.Convert(company);
    }

    /**
     * 以分页方式获取组织列表
     *
     * @param params json格式的请求参数
     * @param user   登录用户的信息
     * @return
     */
    public DataTable<CompanyDto> pageCompany(String params, User user) {
        DataTable<CompanyDto> result = new DataTable<CompanyDto>();
        DataTableParameter parameter = DataTableUtils.getDataTableParameterByJsonParam(params);
        int start = parameter.getiDisplayStart();
        int pageSize = parameter.getiDisplayLength();
        int pageNo = (start / pageSize) + 1;
        Criteria criteria = this.createCriteria(Company.class);
        criteria.addOrder(Order.desc("id"));
        criteria.add(Restrictions.eq("isValid", 1));

        // 数据权限
        if(com.casic.accessControl.core.util.StringUtils.isNotBlank(user.getDatascope())){
            String[] datascope = user.getDatascope().split(",");
            List<Long> compnyIds = new ArrayList<>();
            Arrays.asList(datascope).forEach(obj -> compnyIds.add(Long.valueOf(obj)));
            criteria.add(Restrictions.in("id",compnyIds));
        } else {
            criteria.add(Restrictions.eq("id", user.getCompany().getId()));
        }

        if (StringUtils.isNotBlank(parameter.getsSearch())) {
            criteria.add(Restrictions.like("companyName", "%" + parameter.getsSearch() + "%"));
        }
        Page page = pagedQuery(criteria, pageNo, pageSize);
        List<CompanyDto> companyDtos = CompanyDto.Converts((List<Company>) page.getResult());
        result.setAaData(companyDtos);
        result.setiTotalDisplayRecords((int) page.getTotalCount());
        result.setiTotalRecords((int) page.getTotalCount());
        result.setsEcho(parameter.getsEcho());
        return result;
    }

    public List<Company> getCompanisByParent(Long parentCompanyId){
        Company parentCompny = getCompanyById(parentCompanyId);
        if(parentCompny != null){
            Criteria criteria = this.createCriteria(Company.class);
            criteria.add(Restrictions.eq("isValid", 1));
            criteria.add(Restrictions.eq("parentCompany", parentCompny));
            List<Company> companies = (List<Company>)criteria.list();
            return companies;
        }else {
            return null;
        }

    }

    public List<Company> getParentCompanyList(User user){
        Company topCompany = this.getCompanyById(0L);
        Criteria criteria = this.createCriteria(Company.class);
        criteria.add(Restrictions.eq("isValid", 1));
        criteria.add(Restrictions.or(Restrictions.isNull("parentCompany"),Restrictions.eq("parentCompany", topCompany)));
        String[] datascope = user.getDatascope().split(",");
        List<Long> compnyIds = new ArrayList<>();
        Arrays.asList(datascope).forEach(obj -> compnyIds.add(Long.valueOf(obj)));
        criteria.add(Restrictions.in("id",compnyIds));
        List<Company> companies = (List<Company>)criteria.list();
        return companies;
    }

    /**
     * 删除组织
     *
     * @param companyId
     */
    public boolean deleteCompanyById(Long companyId) {
        Criteria criteria = this.createCriteria(Company.class);
        criteria.add(Restrictions.eq("id", companyId));
        if (CollectionUtils.isEmpty(criteria.list())) {
            return false;
        }
        try {
            Company company = (Company) criteria.list().get(0);
            company.setIsValid(0);
            save(company);
        } catch (Exception e) {
            return false;
        }

        return true;
    }

    /**
     * 保存或更新用户信息
     *
     * @param company
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveCompany(Company company, HttpSession session) {
        if (company == null) {
            logger.error("CompanyInfoService->saveCompanyInfo ERROR,companyInfo is null!");
            return;
        }
        if (company.getId() == null) {//新增
            company.setIsValid(1);
        }
        this.getSession().saveOrUpdate(company);
        System.out.println("add company " + company.getId());
        //  更新当前用户和admin的数据权限
        userManager.updateCurrentDataScope(company.getId(),session);
        userManager.updateAdminDataScope(company.getId(),session);

    }
}