package com.norteksoft.acs.api;
import java.util.ArrayList;
import java.util.Collection;
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.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.norteksoft.acs.entity.authorization.BusinessSystem;
import com.norteksoft.acs.entity.authorization.Role;
import com.norteksoft.acs.entity.organization.Department;
import com.norteksoft.acs.entity.organization.User;
import com.norteksoft.acs.entity.organization.Workgroup;
import com.norteksoft.acs.service.authorization.AcsApiManager;
import com.norteksoft.product.util.ContextUtils;
/**
* 权限API
* @author xiaoj
*/
@Service
@Transactional
public class AcsApi {
private static Log log = LogFactory.getLog(AcsApi.class);
public static final String DEPARTMENT_NAME_CONDITION = "d.department_name";
public static final String WORKGROUP_NAME_CONDITION = "wg.work_group_name";
public static final String ROLE_NAME_CONDITION = "r.role_name";
public static final String USER_NAME_CONDITION = "u.user_name";
private static AcsApiManager getAcsApiManager(){
return (AcsApiManager)ContextUtils.getBean("acsApiManager");
}
/**
* 查询公司所有的部门
* @param companyId 公司ID
* @return List [部门名称列表, 是否有子部门(true,false),是否有人员(true,false)]
*/
public static List<String[]> getAllDepts(Long companyId){
log.debug("*** getAllDepts 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append("]").toString());
//Map<Department, String> depts = getAcsApiManager().getAllDepts(companyId);
List<Department> depts = getAcsApiManager().getAllDeptsInOrder(companyId);
List<String[]> results = new ArrayList<String[]>();
for(Department dept : depts){
String isHasUsersInDept=getAcsApiManager().getUsersByDept(companyId, dept.getName()).size()>0?"true":"false";
results.add(new String[]{dept.getName(), getAcsApiManager().hasSubDepartment(dept),isHasUsersInDept});
}
log.debug("*** getAllDepts 方法结束");
return results;
}
/**
* 根据部门名称查询该部门的所有子部门
* @param companyId
* @param parentDeptName
* @return List [部门名称列表, 是否有子部门(true,false),是否有人员(true,false)]
*/
public static List<String[]> getSubDeptsByParentDept(Long companyId, String parentDeptName){
log.debug("*** getSubDeptsByParentDept 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", parentDeptName:").append(parentDeptName)
.append("]").toString());
Map<Department, String> depts = getAcsApiManager().getSubDeptsByParentDept(companyId, parentDeptName);
List<String[]> results = new ArrayList<String[]>();
for(Department dept : depts.keySet()){
String isHasUsersInDept=getAcsApiManager().getUsersByDept(companyId, dept.getName()).size()>0?"true":"false";
results.add(new String[]{dept.getName(), depts.get(dept),isHasUsersInDept});
}
log.debug("*** getSubDeptsByParentDept 方法结束");
return results;
}
/**
* 查询公司所有的工作组
* @param companyId 公司ID
* @return List 工作组名称列表
*/
public static List<String> getAllWorkGroups(Long companyId){
log.debug("*** getAllWorkGroups 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append("]").toString());
List<Workgroup> wgs = getAcsApiManager().getAllWorkGroups(companyId);
List<String> results = new ArrayList<String>();
for(Workgroup wg : wgs){
results.add(wg.getName());
}
log.debug("*** getAllWorkGroups 方法结束");
return results;
}
/**
* 查询公司所有的角色
* @param companyId 公司ID
* @return List 角色名称列表
*/
public static List<String> getAllRolesBySystemId(Long systemId){
log.debug("*** getAllRolesBySystemId 方法开始");
List<Role> rs = getAcsApiManager().getAllRoles(systemId);
List<String> results = new ArrayList<String>();
for(Role r : rs){
results.add(r.getName());
}
log.debug("*** getAllRolesBySystemId 方法结束");
return results;
}
/**
* 查询公司所有的角色
* @param companyId 公司ID
* @return List 角色名称列表
*/
public static List<String> getAllRoles(String systemCode){
log.debug("*** getAllRoles 方法开始");
BusinessSystem system=getAcsApiManager().getSystemBySystemCode(systemCode);
if(system!=null)return getAllRolesBySystemId(system.getId());
log.debug("*** getAllRoles 方法结束");
return new ArrayList<String>();
}
/**
* 查询公司所有的人员
* @param companyId
* @return String[用户名称,用户登录名称]
*/
public static List<String[]> getAllUsers(Long companyId){
log.debug("*** getAllUsers 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append("]").toString());
List<User> us = getAcsApiManager().getAllUsers(companyId);
log.debug("*** getAllUsers 方法结束");
return getUserNamesFromList(us);
}
/**
* 查询部门下所有的人员
* @param companyId
* @param name
* @return String[用户名称,用户登录名称]
*/
public static List<String[]> getUsersByDept(Long companyId, String name){
log.debug("*** getUsersByDept 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", name:").append(name)
.append("]").toString());
List<User> us = getAcsApiManager().getUsersByDept(companyId, name);
log.debug("*** getUsersByDept 方法结束");
return getUserNamesFromList(us);
}
/**
* 查询工作组下所有的人员
* @param companyId
* @param workGroupName
* @return String[用户名称,用户登录名称]
*/
public static List<String[]> getUsersByWorkGroup(Long companyId, String workGroupName){
log.debug("*** getUsersByWorkGroup 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", name:").append(workGroupName)
.append("]").toString());
List<User> us = getAcsApiManager().getUsersByWorkGroup(companyId, workGroupName);
log.debug("*** getUsersByWorkGroup 方法结束");
return getUserNamesFromList(us);
}
/**
* 查询拥有该角色的所有人员
* @param companyId
* @param roleName
* @return String[用户名称,用户登录名称]
*/
public static List<String[]> getUsersByRole(Long companyId, String roleName){
log.debug("*** getUsersByRole 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", roleName:").append(roleName)
.append("]").toString());
Set<User> us = getAcsApiManager().getUsersByRole(ContextUtils.getSystemId(), companyId, roleName);
log.debug("*** getUsersByRole 方法结束");
return getUserNamesFromList(us);
}
/**
* 查询与给定用户名在同一部门的用户
* @param companyId
* @param userLoginName 用户登录名
* @return
*/
public static List<String[]> getUsersInSameDept(Long companyId, String userLoginName){
log.debug("*** getUsersInSameDept 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", userLoginName:").append(userLoginName)
.append("]").toString());
List<User> us = getAcsApiManager().getUsersInSameDept(companyId, userLoginName);
log.debug("*** getUsersInSameDept 方法结束");
return getUserNamesFromList(us);
}
/**
* 根据条件查询用户
* @param companyId
* @param conditions
* @return
*/
public static List<String[]> getUsersByCondition(Long companyId, String conditions){
log.debug("*** getUsersByCondition 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append(", conditions:").append(conditions)
.append("]").toString());
List<User> us = getAcsApiManager().getUsersByCondition(companyId, conditions);
log.debug("*** getUsersByCondition 方法结束");
return getUserNamesFromList(us);
}
/**
* 根据条件查询用户
* @param companyId
* @param conditions
* @return List<[用户名, 登录名, 邮件地址]>
*/
public static List<String[]> getUserEmailByCondition(Long companyId, String conditions){
List<User> users = getAcsApiManager().getUsersByCondition(companyId, conditions);
List<String[]> results = new ArrayList<String[]>();
String[] names = null;
if(users != null){
for(User u : users){
names = new String[3];
names[0] = u.getName();
names[1] = u.getLoginName();
names[2] = u.getEmail();
results.add(names);
}
}
return results;
}
/**
* 查询没有在任何部门的用户
* @param companyId
* @return
*/
public static List<String[]> getUsersNotInDept(Long companyId){
log.debug("*** getUsersNotInDept 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("companyId:").append(companyId)
.append("]").toString());
List<User> us = getAcsApiManager().getUsersNotInDept(companyId);
log.debug("*** getUsersNotInDept 方法结束");
return getUserNamesFromList(us);
}
private static List<String[]> getUserNamesFromList(Collection<User> users){
log.debug("*** getUserNamesFromList 方法开始");
List<String[]> results = new ArrayList<String[]>();
String[] names = null;
if(users != null){
for(User u : users){
names = new String[2];
names[0] = u.getName();
names[1] = u.getLoginName();
results.add(names);
}
}
log.debug("*** getUserNamesFromList 方法结束");
return results;
}
/**
* 查询所有业务系统信息
*/
public static List<String[]> getAllBusiness(Long companyId){
List<BusinessSystem> list=getAcsApiManager().getAllBusiness(companyId);
List<String[]> results = new ArrayList<String[]>();
String[] bs = null;
if(list != null){
for(BusinessSystem u : list){
bs = new String[3];
bs[0] = u.getId().toString();
bs[1] = u.getName();
bs[2] = u.getCode();
results.add(bs);
}
}
return results;
}
}