package com.norteksoft.acs.web.organization;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import com.norteksoft.acs.base.utils.Ldaper;
import com.norteksoft.acs.base.web.struts2.CRUDActionSupport;
import com.norteksoft.acs.entity.authorization.BusinessSystem;
import com.norteksoft.acs.entity.authorization.Role;
import com.norteksoft.acs.entity.organization.Company;
import com.norteksoft.acs.entity.organization.Department;
import com.norteksoft.acs.entity.organization.User;
import com.norteksoft.acs.entity.organization.UserInfo;
import com.norteksoft.acs.service.authorization.BusinessSystemManager;
import com.norteksoft.acs.service.organization.CompanyManager;
import com.norteksoft.acs.service.organization.DepartmentManager;
import com.norteksoft.acs.service.organization.UserInfoManager;
import com.norteksoft.acs.service.organization.UserManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.JsTreeUtils;
import com.norteksoft.product.util.PageUtils;
import com.norteksoft.product.util.TreeUtils;
import com.norteksoft.tags.tree.DepartmentDisplayType;
/**
* author 李洪超
* version 创建时间:2009-3-11 上午09:51:10
* 部门管理Action
*
* 2010-07-27 xiaoj
*/
@SuppressWarnings("deprecation")
@Namespace("/organization")
@ParentPackage("default")
@Results( { @Result(name = CRUDActionSupport.RELOAD, location = "department!list?departmentId=${departmentId}", type="redirectAction") })
public class DepartmentAction extends CRUDActionSupport<Department>{
private static final long serialVersionUID = 4814560124772644966L;
private DepartmentManager departmentManager;
private CompanyManager companyManager;
private Page<Department> page = new Page<Department>(20, true);
private Page<User> userPage = new Page<User>(0, true);
private Page<UserInfo> pageUserInfo = new Page<UserInfo>(20, true);
private Department department;
private Long id;
private Long parentId;
private Long companyId;
private List<Long> checkedUserIds;
private String departmentName;
private String departmentCode;
private Long departmentId;
private List<Role> allRoles;
private List<Long> roleIds;
private List<Long> checkedRoleIds;
private Integer isAddOrRomove;
private List<Long> departmentIds;
private User user;
private List<BusinessSystem> systems;
private BusinessSystemManager businessSystemManager;
private UserManager userManager;
private UserInfoManager userInfoManager;
private String message = "";
private String currentId;
private List<Long> userIds;
private String ids;
private String treeSelectedNode;
/**
* 分页查询所有不在任何部门的用户
*/
@Override
@Action("department")
public String list() throws Exception {
if(userPage.getPageSize() <= 1){
return SUCCESS;
}else{
if(departmentId != null){
userInfoManager.queryUsersByDepartment(userPage, departmentId);
}else{
userInfoManager.getAllDepartmentUsers(userPage);
}
renderHtml(PageUtils.pageToJson(userPage));
ApiFactory.getBussinessLogService().log("部门管理",
"查看部门列表",ContextUtils.getSystemId("acs"));
return null;
}
}
/**
* 修改部门
*/
@Override
public String input() throws Exception {
if(id == null){
ApiFactory.getBussinessLogService().log("部门管理",
"新建部门",ContextUtils.getSystemId("acs"));
}else{
ApiFactory.getBussinessLogService().log("部门管理",
"修改部门",ContextUtils.getSystemId("acs"));
}
return INPUT;
}
/**
* 保存部门信息
*/
public String saveDepartment() throws Exception{
boolean logSign=true;//该字段只是为了标识日志信息:true表示新建部门、false表示修改部门
if(id==null){
Company company = companyManager.getCompany(ContextUtils.getCompanyId());
department.setCompany(company);
departmentManager.saveDept(department);
logSign=true;
}else{
departmentManager.saveDept(department);
if(Ldaper.isStartedAboutLdap()){
message = Ldaper.addGroup(department,false);
}
logSign=false;
}
addActionMessage(getText("common.saved"));
if(logSign){
ApiFactory.getBussinessLogService().log("部门管理",
"新建部门:"+department.getName(),ContextUtils.getSystemId("acs"));
}else{
ApiFactory.getBussinessLogService().log("部门管理",
"修改部门:"+department.getName(),ContextUtils.getSystemId("acs"));
}
return null;
}
/**
* 删除部门
*/
@Override
public String delete() throws Exception {
String logSign="";//该字段只是为了标识日志信息:部门名称
Department dept = departmentManager.getDepartment(departmentId);
logSign=dept.getName();
Department parentDept = dept.getParent();
List<User> users=userManager.getUsersByDeptId(departmentId);
departmentManager.deleteDepart(dept,users);
if(parentDept != null)
departmentId = dept.getParent().getId();
else
departmentId=null;
addActionMessage(getText("common.deleted"));
ApiFactory.getBussinessLogService().log("部门管理",
"删除部门:"+logSign,ContextUtils.getSystemId("acs"));
return RELOAD;
}
public void prepareSaveDepartment() throws Exception {
prepareModel();
}
@Override
protected void prepareModel() throws Exception {
if (id != null) {
department = departmentManager.getDepartment(id);
} else {
department = new Department();
}
if(parentId != null){
department.setParent(departmentManager.getDepartment(parentId));
}
}
/**
* 部门添加人员
*/
public String addDepartmentToUsers()throws Exception{
return "user-tree";
}
/**
* 部门树
* @return
* @throws Exception
*/
public String tree() throws Exception{
return "tree";
}
/**
* 人员树
* @return
* @throws Exception
*/
public String getCompanyNodes() throws Exception{
this.renderText(TreeUtils.getCreateManDepartmentTree(ContextUtils.getCompanyId(),currentId,false,DepartmentDisplayType.NAME,false));
return null;
}
public String getUserNodes(Long deptId) throws Exception{
StringBuilder nodes = new StringBuilder();
List<User> users = userManager.getUsersByDeptId(deptId);
List<Department> subDepts = departmentManager.getSubDeptments(deptId);
for(Department subDept : subDepts){
nodes.append(JsTreeUtils.generateJsTreeNode("DEPARTMENT," + subDept.getId(), "closed", subDept.getName(), ""));
nodes.append(",");
}
for(User user : users){
nodes.append(JsTreeUtils.generateJsTreeNode("USER," + user.getId(), "", user.getName(), "")).append(",");
}
if(nodes.lastIndexOf(",") != -1 && nodes.lastIndexOf(",") == nodes.length()-1){
nodes.replace(nodes.length()-1, nodes.length(), "");
}
return nodes.toString();
}
public String getNoDepartmentUserNodes(Long companyId){
StringBuilder nodes = new StringBuilder();
List<com.norteksoft.product.api.entity.User> users =ApiFactory.getAcsService().getUsersNotInDepartment(companyId);
for(com.norteksoft.product.api.entity.User user : users){
nodes.append(JsTreeUtils.generateJsTreeNode("USER," + user.getId(), "", user.getName(), "")).append(",");
}
if(nodes.lastIndexOf(",") != -1 && nodes.lastIndexOf(",") == nodes.length()-1){
nodes.replace(nodes.length()-1, nodes.length(), "");
}
return nodes.toString();
}
/**
* 保存部门添加用户
* @return
* @throws Exception
*/
public String departmentAddUser()throws Exception{
departmentManager.departmentToUser(departmentId, userIds, 0);
String logSign="";//该字段只是为了标识日志信息:用户1,用户2,...
department = departmentManager.getDepartment(departmentId);
for(Long userId:userIds){
if(userId.equals(0L)){//全公司时
logSign+="公司所有人";
break;
}else{
user=userManager.getUserById(Long.valueOf(userId));
if(StringUtils.isNotEmpty(logSign)){
logSign+=",";
}
logSign+=user.getName();
}
}
ApiFactory.getBussinessLogService().log("部门管理",
department.getName()+"添加兼职人员:"+logSign,ContextUtils.getSystemId("acs"));
return RELOAD;
}
/**
* 保存部门移除用户
* @return
* @throws Exception
*/
public String removeDepartmentToUsers() throws Exception{
departmentManager.departmentToUser(departmentId, userIds, 1);
String logSign="";//该字段只是为了标识日志信息:用户1,用户2,...
department = departmentManager.getDepartment(departmentId);
for(Long userId:userIds){
user=userManager.getUserById(Long.valueOf(userId));
if(StringUtils.isNotEmpty(logSign)){
logSign+=",";
}
logSign+=user.getName();
}
ApiFactory.getBussinessLogService().log("部门管理",
department.getName()+"移除兼职人员:"+logSign,ContextUtils.getSystemId("acs"));
return RELOAD;
}
@Autowired
public void setUserInfoManager(UserInfoManager userInfoManager) {
this.userInfoManager = userInfoManager;
}
/**
* 验证部门名称唯一性
*/
public String checkDeptName() throws Exception{
boolean department =false;
if(id!=null){
department = departmentManager.checkDeptName(departmentName,id);
}else{
department = departmentManager.checkDeptName(departmentName);
}
if(department==false){
this.renderText("true");
}else{
this.renderText(departmentName);
}
return null;
}
/**
* 验证部门编号唯一性
* liudongxia
*/
public String checkDeptCode() throws Exception{
boolean department =false;
if(id!=null){
department = departmentManager.checkDeptCode(departmentCode,id);
}else{
department = departmentManager.checkDeptCode(departmentCode);
}
if(department==false){
this.renderText("true");
}else{
this.renderText(departmentCode);
}
return null;
}
/**
* 按条件查询
* @return
*/
public void prepareSearch() throws Exception {
prepareModel();
}
public String search() throws Exception {
page = departmentManager.getSearchDepartment(page, department, false);
return SUCCESS;
}
public void prepareSaveUser() throws Exception {
prepareModel();
}
public String saveUser() throws Exception{
Department department = departmentManager.getDepartment(parentId);
this.department.setParent(department);
departmentManager.saveDept(this.department);
addActionMessage(getText("common.saved"));
return RELOAD;
}
/**
* 新建部门
*/
public String inputDepartment() throws Exception{
companyId = companyManager.getCompanyId();
return "input";
}
public void prepareListRoles() throws Exception {
department = departmentManager.getDepartment(departmentId);
}
/**
* 部门添加角色
*/
public String listRoles()throws Exception{
isAddOrRomove = 0;
systems = businessSystemManager.getAllBusiness();
checkedRoleIds = departmentManager.getCheckedRoleIdsByDepartment(departmentId);
return "role";
}
/**
* 部门移除角色
*/
public String removeRoles() throws Exception{
isAddOrRomove = 1;
systems = businessSystemManager.getAllBusiness();
checkedRoleIds = departmentManager.getCheckedRoleIdsByDepartment(departmentId);
return "role";
}
/**
* 给部门分配角色
*/
public String addRolesToDepartment(){
departmentManager.addRolesToDepartments(departmentId, roleIds, isAddOrRomove);
if(isAddOrRomove == 0){
addActionMessage(getText("department.addRolesSuccess"));
}else if(isAddOrRomove == 1){
addActionMessage(getText("department.removeRolesSuccess"));
}
ApiFactory.getBussinessLogService().log("部门管理",
"部门添加或移除角色",ContextUtils.getSystemId("acs"));
return RELOAD;
}
/**
* 保存
*/
@Override
public String save() throws Exception {
departmentManager.saveDept(department);
addActionMessage(getText("common.saved"));
ApiFactory.getBussinessLogService().log("部门管理",
"保存部门信息",ContextUtils.getSystemId("acs"));
return RELOAD;
}
public Department getModel() {
return department;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getIsAddOrRomove() {
return isAddOrRomove;
}
public void setIsAddOrRomove(Integer isAddOrRomove) {
this.isAddOrRomove = isAddOrRomove;
}
public Page<UserInfo> getPageUserInfo() {
return pageUserInfo;
}
public void setPageUserInfo(Page<UserInfo> pageUserInfo) {
this.pageUserInfo = pageUserInfo;
}
public Long getCompanyId() {
return ContextUtils.getCompanyId();
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
public Long getDepartmentId() {
return departmentId;
}
public void setDepartmentId(Long departmentId) {
this.departmentId = departmentId;
}
public List<Long> getCheckedUserIds() {
return checkedUserIds;
}
public void setCheckedUserIds(List<Long> checkedUserIds) {
this.checkedUserIds = checkedUserIds;
}
public Page<User> getUserPage() {
return userPage;
}
public void setUserPage(Page<User> userPage) {
this.userPage = userPage;
}
public String getDepartmentCode() {
return departmentCode;
}
public void setDepartmentCode(String departmentCode) {
this.departmentCode = departmentCode;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public Page<Department> getPage() {
return page;
}
public void setPage(Page<Department> page) {
this.page = page;
}
public String temp()throws Exception{
return SUCCESS;
}
@Required
public void setDepartmentManager(DepartmentManager departmentManager) {
this.departmentManager = departmentManager;
}
@Required
public void setCompanyManager(CompanyManager companyManager) {
this.companyManager = companyManager;
}
@Required
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
public void setId(Long id) {
this.id = id;
}
public List<Role> getAllRoles() {
return allRoles;
}
public void setAllRoles(List<Role> allRoles) {
this.allRoles = allRoles;
}
public List<Long> getRoleIds() {
return roleIds;
}
public void setRoleIds(List<Long> roleIds) {
this.roleIds = roleIds;
}
public List<Long> getCheckedRoleIds() {
return checkedRoleIds;
}
public void setCheckedRoleIds(List<Long> checkedRoleIds) {
this.checkedRoleIds = checkedRoleIds;
}
public String getDepartmentByCompany(){
if(companyId != null){
page = departmentManager.queryDepartmentByCompany(page, companyId);
}
return SUCCESS;
}
public List<BusinessSystem> getSystems() {
return systems;
}
public void setSystems(List<BusinessSystem> systems) {
this.systems = systems;
}
@Required
public void setBusinessSystemManager(BusinessSystemManager businessSystemManager) {
this.businessSystemManager = businessSystemManager;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void setDepartmentIds(List<Long> departmentIds) {
this.departmentIds = departmentIds;
}
public List<Long> getDepartmentIds() {
return departmentIds;
}
public void setCurrentId(String currentId) {
this.currentId = currentId;
}
public List<Long> getUserIds() {
return userIds;
}
public void setUserIds(List<Long> userIds) {
this.userIds = userIds;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public String getTreeSelectedNode() {
return treeSelectedNode;
}
public void setTreeSelectedNode(String treeSelectedNode) {
this.treeSelectedNode = treeSelectedNode;
}
}