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); } }