package com.norteksoft.acs.service.organization;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.hibernate.SessionFactory;
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.DepartmentUser;
import com.norteksoft.acs.entity.organization.User;
import com.norteksoft.acs.entity.organization.UserInfo;
import com.norteksoft.bs.options.entity.ImportDefinition;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.api.impl.DefaultDataImporterCallBack;
import com.norteksoft.product.api.utils.BeanUtil;
import com.norteksoft.product.util.ContextUtils;
@Service
@Transactional
public class ImportUserManager extends DefaultDataImporterCallBack{
private SimpleHibernateTemplate<Company, Long> companyDao;
private SimpleHibernateTemplate<Department, Long> departmentDao;
private SimpleHibernateTemplate<DepartmentUser, Long> departmentToUserDao;
private SimpleHibernateTemplate<UserInfo, Long> userInfoDao;
@Autowired
private UserManager userManager;
@Autowired
private UserInfoManager userInfoManager;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
companyDao=new SimpleHibernateTemplate<Company, Long>(sessionFactory, Company.class);
departmentDao = new SimpleHibernateTemplate<Department, Long>(sessionFactory, Department.class);
departmentToUserDao = new SimpleHibernateTemplate<DepartmentUser, Long>(sessionFactory, DepartmentUser.class);
userInfoDao = new SimpleHibernateTemplate<UserInfo, Long>(sessionFactory, UserInfo.class);
}
private String validateUser(User u){
if(ContextUtils.getCompanyId().equals(u.getCompanyId())){
if(u.isDeleted()&&u.getUserInfo().getDr()==0){
return "登陆名为"+u.getLoginName()+"的用户没有彻底删除";
}
}else{
if(!u.isDeleted()||(u.isDeleted()&&u.getUserInfo().getDr()==0)){
return "其他租户中已有登陆名为"+u.getLoginName()+"的用户";
}
}
return "";
}
public String saveSingleRow(String[] rowValue,ImportDefinition importDefinition) {
List<User> users = userManager.getUsersByLoginName(rowValue[2]);
String result="";
if(users != null && users.size()>0){
for(User u:users){
result=validateUser(u);
if(StringUtils.isNotEmpty(result))
return result;
}
}
Integer currentUserNumber = userManager.getUserNumberByCompanyId(ContextUtils.getCompanyId());
Integer companyUserLimit=userManager.getAllowedNumbByCompany(ContextUtils.getCompanyId());
Integer importCount = 0;
if(StringUtils.isNotEmpty(rowValue[0])){
String[] depts=rowValue[0].split("/");
for(int i=0;i<depts.length;i++){
Department department=null;
if(userManager.isDepartmentExist(depts[i],ContextUtils.getCompanyId())){//部门存在
department=getDepartmentByName(depts[i]);
}else{
department=new Department();
}
Company company = companyDao.get(ContextUtils.getCompanyId());
department.setCompany(company);
department.setCode(depts[i]);
department.setName(depts[i]);
if(i>0){
Department parentDept=getDepartmentByName(depts[i-1]);
department.setParent(parentDept);
}
//如果是最后一个部门,则添加人。如:办公室/后勤/车队,周宏1,zhouhong1,68963158,男,zhouhong@bky.com,50,10,如果是“车队”则添加人员
if(depts.length-1==i){
//#####用户
if(StringUtils.isNotEmpty(rowValue[2])){//用户登录名不为空,添加用户
if(currentUserNumber+importCount+1>companyUserLimit)return "已导入"+importCount+"条,超出系统允许注册人数";
departmentDao.save(department);
UserInfo userInfo=userManager.importUserSaveUser(rowValue,department);
//新建用户时默认给用户portal普通用户权限
userInfoManager.giveNewUserPortalCommonRole(userInfo.getUser());
//####部门人员
DepartmentUser departmentToUser;
List<DepartmentUser> dtu=departmentToUserDao.find("from DepartmentUser d where d.user.id=? and d.department.id=?", userInfo.getUser().getId(),department.getId());
if(dtu.size()==0){
departmentToUser = new DepartmentUser();
userInfo = userInfoDao.get(userInfo.getId());
departmentToUser.setUser(userInfo.getUser());
departmentToUser.setDepartment(department);
departmentToUser.setCompanyId(ContextUtils.getCompanyId());
departmentToUserDao.save(departmentToUser);
//记录公司用户数量
importCount++;
}else{
DepartmentUser d=dtu.get(0);
d.setDeleted(false);
departmentToUserDao.save(d);
}
}
}
}
}else{//部门为空,即无部门人员导入
if(StringUtils.isNotEmpty(rowValue[2])){
if(currentUserNumber+importCount+1>companyUserLimit)return "已导入"+importCount+"条,超出系统允许注册人数";
userManager.importUserSaveUser(rowValue,null);
User user = userManager.getUserByLoginName(StringUtils.trim(rowValue[2]));
//新建用户时默认给用户portal普通用户权限
if(user!=null)userInfoManager.giveNewUserPortalCommonRole(user);
if(user==null){
//记录公司用户数量
importCount++;
}
}
}
return "";
}
@SuppressWarnings("unchecked")
public Department getDepartmentByName(String name){
if(name == null) throw new RuntimeException("没有给定查询部门时的查询条件:部门名称");
List<Department> depts = departmentDao.find("from Department d where d.company.id=? and d.name=? and d.deleted=?", ContextUtils.getCompanyId(), name, false);
if(depts.size() == 1){
return depts.get(0);
}
return null;
}
}