package com.norteksoft.acs.service.organization; import java.util.Date; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate; import com.norteksoft.acs.entity.organization.Company; import com.norteksoft.acs.entity.organization.Department; import com.norteksoft.acs.entity.organization.MailDeploy; import com.norteksoft.acs.entity.organization.Workgroup; import com.norteksoft.acs.entity.sale.Subsciber; import com.norteksoft.acs.entity.sale.SubscriberItem; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; /** * 单位管理 */ @Service @Transactional public class CompanyManager { private Log log = LogFactory.getLog(CompanyManager.class); public DepartmentManager departmentManager; public Department department; public WorkGroupManager workGroupManager; public Workgroup workGroup; private Long companyId; private SimpleHibernateTemplate<Company, Long> companyDao; private SimpleHibernateTemplate<Department, Long> departmentDao; private SimpleHibernateTemplate<Workgroup, Long> workGroupDao; private SimpleHibernateTemplate<Subsciber, Long> subsciberDao; private SimpleHibernateTemplate<MailDeploy, Long> mailDeployDao; @Autowired public void setSessionFactory(SessionFactory sessionFactory) { companyDao = new SimpleHibernateTemplate<Company, Long>(sessionFactory, Company.class); departmentDao = new SimpleHibernateTemplate<Department, Long>( sessionFactory, Department.class); workGroupDao = new SimpleHibernateTemplate<Workgroup, Long>( sessionFactory, Workgroup.class); subsciberDao = new SimpleHibernateTemplate<Subsciber, Long>( sessionFactory, Subsciber.class); mailDeployDao = new SimpleHibernateTemplate<MailDeploy, Long>( sessionFactory, MailDeploy.class); } /** * 通过公司名称得到公司ID */ public Long getSchoolId(String schoolName){ String hql="select c.id from Company c where c.name=?"; Long schoolId = companyDao.findLong(hql, schoolName); return schoolId; } /** * 添加子公司 */ public void addSubCompany(Company parentCompany, Company subCompany) { subCompany.setParent(parentCompany); subCompany.setCompanyId(getCompanyId()); companyDao.save(subCompany); } /** * 公司新建部门 */ public void addDepartment(Company company, Department department) { department.setCompany(company); departmentDao.save(department); } /** * 公司新建工作组 */ public void addWorkGroup(Company company, Workgroup workGroup) { workGroup.setCompany(company); workGroupDao.save(workGroup); } @Transactional(readOnly = true) public Company getCompany(Long id) { return companyDao.get(id); } /** * 判断给定系统所在的公司账户是否在有效期内 */ @SuppressWarnings("unchecked") @Transactional(readOnly = true) public boolean isCompanyValidDate(Long companyId, Long systemId){ log.debug("*** isCompanyValidDate 开始"); log.debug("*** Received parameter: [companyId=" + companyId + ", systemId=" + systemId + "]"); String hql = "select si from SubscriberItem si join si.subsciber s join si.product p " + "where si.deleted=? and s.deleted=? and p.deleted=? and s.tenantId=? and p.systemId=?"; List<SubscriberItem> list = subsciberDao.find(hql, false, false, false, companyId, systemId); Date current = new Date(); boolean isValid = false; for(SubscriberItem si : list){ if(current.after(si.getEffectDate()) && current.before(si.getInvalidDate())){ isValid = true; break; } } log.debug("*** Return:" + isValid); log.debug("*** isCompanyValidDate 结束"); return isValid; } /** * 分页查询所有公司信息 */ @Transactional(readOnly = true) public Page<Company> getAllCompanys(Page<Company> page) { return companyDao.findByCriteria(page, Restrictions.eq("companyId", getCompanyId()), Restrictions.eq("deleted", false)); } /** * 查询所有公司信息 */ @Transactional(readOnly = true) public List<Company> getAllCompanys() { return companyDao.findByCriteria(Restrictions.eq("companyId",getCompanyId()), Restrictions.eq("deleted", false)); } /** * 获取所有的集团公司 */ public List<Company> getCompanys(){ List<Company> companys = companyDao.findByCriteria(Restrictions.eq("deleted", false), Restrictions.isNull("parent.id")); return companys; } public void saveCompany(Company company) { companyDao.save(company); } public void deleteCompany(Long id) { Company company = companyDao.get(id); company.setDeleted(true); companyDao.save(company); } /** * 根据公司code获取公司ID */ public Long getCompanyIdByCode(String code){ return companyDao.findUniqueByProperty("code", code).getId(); } // 测试用DAO public SimpleHibernateTemplate<Company, Long> getCompanyDao() { return companyDao; } public SimpleHibernateTemplate<Department, Long> getDepartmentDao() { return departmentDao; } public SimpleHibernateTemplate<Workgroup, Long> getWorkGroupDao() { return workGroupDao; } public Long getCompanyId() { if (companyId == null) { return ContextUtils.getCompanyId(); } else return companyId; } public void setCompanyId(Long companyId) { this.companyId = companyId; } /** * 根据公司id获得邮件配置 * @return */ public MailDeploy getMailDeployByCompanyId() { return mailDeployDao.findUniqueByProperty("companyId", ContextUtils.getCompanyId()); } }