UserGroupAction.java
package com.mycim.webapp.actions.setting.security.usergroup;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.logging.Logger;
import com.mycim.framework.logging.LoggerFactory;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.SystemSetupAction;
import com.mycim.webapp.forms.security.UserGroupInfoForm;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
* @author Johnson Wang
**/
public class UserGroupAction extends SystemSetupAction {
private static final Logger log = LoggerFactory.getLogger(UserGroupAction.class);
private static String LOT_OWNER_REF = "$LOT_OWNER_CREATE_LOT";
@Override
public ActionForward init(ActionMapping mapping, ActionForm theform, HttpServletRequest request,
HttpServletResponse response) {
return mapping.getInputForward();
}
public UserGroupInfoForm getUserGroup(UserGroupInfoForm theform) {
long roleRrn = theform.getInstanceRrn();
UserGroup ug = new UserGroup();
if (roleRrn > 0) {
ug.setInstanceRrn(roleRrn);
ug = securityService.getUserGroup(ug);
if (ug != null) {
BeanUtils.copyProperties(ug, theform);
}
theform.setTransId(Constants.MODIFY_KEY);
} else {
ug = new UserGroup("", getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
ObjectList.USERGROUP_KEY);
BeanUtils.copyProperties(ug, theform);
theform.setTransId(Constants.CREATE_KEY);
}
return theform;
}
public void saveUserGroup(UserGroupInfoForm userGroupForm) {
String isAdd = userGroupForm.getTransId();
String userGroupId = StringUtils.trimToUpperCase(userGroupForm.getInstanceId());
String userId = LocalContext.getUserId();
Assert.isFalse(StringUtils.isBlank(userGroupId),
Errors.create().key(MessageIdList.USERGROUP_MISSING_ID).content("用户组Id为空或者不存在!").build());
UserGroup userGroup = new UserGroup(userGroupId,
getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
ObjectList.USERGROUP_KEY);
userGroup.setInstanceDesc(userGroupForm.getInstanceDesc());
userGroup.setTransPerformedby(userId);
if (StringUtils.isNotBlank(isAdd)) {
if (StringUtils.trim(isAdd).equals(Constants.CREATE_KEY)) {
userGroup.setTransId(TransactionNames.CREATE_KEY);
securityService.insertUserGroup(userGroup);
} else if (StringUtils.trim(isAdd).equals(Constants.MODIFY_KEY)) {
userGroup.setTransId(TransactionNames.MODIFY_KEY);
securityService.updateUserGroup(userGroup);
}
}
}
public void saveUserGroupGrantUser(UserGroupInfoForm userGroupInfoForm) {
long userGroupRrn = userGroupInfoForm.getUserGroupRrn();
String userId = userGroupInfoForm.getUserId();
Assert.isFalse(userGroupRrn == 0,
Errors.create().key(MessageIdList.USERGROUP_MISSING_RRN).content("用户组Rrn为空或者不存在!").build());
Assert.isFalse(StringUtils.isBlank(userId),
Errors.create().key(MessageIdList.USER_MISSING_RRN_ARRAY).content("用户Rrn数组为空或者不存在!").build());
Relation relation = new Relation();
relation.setTransId(Constants.CREATE_KEY);
long noEnterRrn = getInstanceRrn(Constants.NO_ENTER_KEY, LocalContext.getFacilityRrn(),
ObjectList.USERGROUP_KEY);
String[] userRrns = StringUtils.split(StringUtils.substringBeforeLast(userId, ","), ",");
for (int i = 0; i < userRrns.length; i++) {
relation.setFromRrn(new Long(userRrns[i]));
relation.setLinkType(LinkTypeList.USER_USERGROUP_KEY);
relation.setToRrn(userGroupRrn);
processDetails(relation);
// 如果是NO_ENTER用户组,从NO_ENTER中删除用户的话,要改变用户的状态,从LOCKED变为NORMAL
if (noEnterRrn == Long.valueOf(userGroupRrn)) {
securityService.changeUserStatus(new Long(userRrns[i]), Constants.LOCKED_KEY, LocalContext.getUserId());
}
}
}
private void processDetails(Relation relation) {
String action = relation.getTransId();
if (action.equals(Constants.CREATE_KEY)) {
securityService.addUserToUsergroup(relation);
} else if (action.equals(Constants.DELETE_KEY)) {
securityService.removeUserFromGroup(relation);
}
}
public void deleteUserGroup(UserGroupInfoForm userGroupInfoForm) {
String userGroupId = userGroupInfoForm.getUserGroupId();
Assert.isFalse(StringUtils.isBlank(userGroupId),
Errors.create().key(MessageIdList.USERGROUP_MISSING_ID).content("用户组Id为空或者不存在!").build());
UserGroup userGroup = new UserGroup(userGroupId, baseService
.getNamedSpace(LocalContext.getFacilityRrn(), ObjectList.USERGROUP_KEY), ObjectList.USERGROUP_KEY);
userGroup = securityService.getUserGroup(userGroup);
userGroup.setTransId(Constants.DELETE_KEY);
Assert.isFalse(securityService.isAdminGroup(userGroup.getInstanceRrn()),
Errors.create().key(MessageIdList.USERGROUP_IS_ADMIN).content("用户组为管理员组,无法删除!").build());
boolean confirmDeleteFlag = userGroupInfoForm.isConfirmDelete();
if (confirmDeleteFlag != true) {
Collection users = securityService.getUsers(userGroup);
Assert.isFalse(users != null && users.size() > 0,
Errors.create().key(MessageIdList.USERGROUP_HAS_USER).content("用户组下有用户,无法删除!").build());
}
securityService.deleteUserGroup(userGroup);
}
public void deleteHasUserGroupGrantUser(UserGroupInfoForm userGroupInfoForm) {
long userGroupRrn = userGroupInfoForm.getUserGroupRrn();
String userId = userGroupInfoForm.getUserId();
Assert.isFalse(userGroupRrn == 0,
Errors.create().key(MessageIdList.USERGROUP_MISSING_ID).content("用户组Id为空或者不存在!").build());
Assert.isFalse(StringUtils.isBlank(userId),
Errors.create().key(MessageIdList.USER_MISSING_RRN_ARRAY).content("用户Rrn数组为空或者不存在!").build());
Relation relation = new Relation();
relation.setTransId(Constants.DELETE_KEY);
long noEnterRrn = getInstanceRrn(Constants.NO_ENTER_KEY, LocalContext.getFacilityRrn(),
ObjectList.USERGROUP_KEY);
String[] userRrns = StringUtils.split(StringUtils.substringBeforeLast(userId, ","), ",");
for (int i = 0; i < userRrns.length; i++) {
relation.setFromRrn(new Long(userRrns[i]));
relation.setLinkType(LinkTypeList.USER_USERGROUP_KEY);
relation.setToRrn(userGroupRrn);
processDetails(relation);
// 如果是NO_ENTER用户组,从NO_ENTER中删除用户的话,要改变用户的状态,从LOCKED变为NORMAL
if (noEnterRrn == userGroupRrn) {
securityService.changeUserStatus(new Long(userRrns[i]), Constants.NORMAL_KEY, LocalContext.getUserId());
}
}
}
public Map qryUserGroupAll() {
Collection userGroupList = null;
userGroupList = securityService.getUserGroupAll();
Map json = new HashMap();
json.put("results", userGroupList);
json.put("rows", userGroupList.size() + "");
return json;
}
public Map qryUserGroupGrantUserAll(UserGroupInfoForm userGroupInfoForm) {
Collection userGroupGrantUserList = null;
Collection hasUserGroupGrantUserList = null;
String userId = userGroupInfoForm.getUserId();
long userGroupRrn = userGroupInfoForm.getUserGroupRrn();
Collection tempMenuTree = new ArrayList();
if (StringUtils.isNotBlank(userId)) {
userGroupGrantUserList = securityService
.getGroupUserById(StringUtils.trimToUpperCase(userId), new Long(userGroupRrn).longValue());
} else {
userGroupGrantUserList = securityService.getUserAll();
hasUserGroupGrantUserList = securityService.getHasGrantUserAll(new Long(userGroupRrn).longValue(), "");
for (Iterator iterator = userGroupGrantUserList.iterator(); iterator.hasNext(); ) {
HashMap grantUser = (HashMap) iterator.next();
String grantUserId = (String) grantUser.get("instanceId");
for (Iterator iterator2 = hasUserGroupGrantUserList.iterator(); iterator2.hasNext(); ) {
HashMap hasGrantUser = (HashMap) iterator2.next();
String hasGrantUserId = (String) hasGrantUser.get("instanceId");
if (grantUserId.equals(hasGrantUserId)) {
tempMenuTree.add(grantUser);
}
}
}
if (tempMenuTree.size() > 0) {
userGroupGrantUserList.removeAll(tempMenuTree);
}
}
Map json = new HashMap();
json.put("results", userGroupGrantUserList);
json.put("rows", userGroupGrantUserList.size() + "");
return json;
}
public Map qryHasUserGroupGrantUserAll(UserGroupInfoForm userGroupInfoForm) {
long userGroupRrn = userGroupInfoForm.getUserGroupRrn();
String userid = userGroupInfoForm.getUserId();
List<Map> userGroupGrantUserList = securityService
.getHasGrantUserAll(new Long(userGroupRrn).longValue(), userid);
Map json = new HashMap();
json.put("results", userGroupGrantUserList);
json.put("rows", userGroupGrantUserList.size() + "");
return json;
}
public Map qrylotOwnerInfo(UserGroupInfoForm userGroupInfoForm) {
Collection userGroupGrantUserList = new HashSet();
List<String> groupsList = sysService.getRefFileKey(LOT_OWNER_REF, "");
for (Iterator<String> iterator = groupsList.iterator(); iterator.hasNext(); ) {
long userGroupRrn = getInstanceRrn(iterator.next(), LocalContext.getFacilityRrn(),
ObjectList.USERGROUP_KEY);
userGroupGrantUserList.addAll(securityService.getHasGrantUserAll(userGroupRrn, ""));
}
Map json = new HashMap();
json.put("results", userGroupGrantUserList);
json.put("rows", userGroupGrantUserList.size() + "");
return json;
}
public List<Map> qryUserGroupGrantTree(UserGroupInfoForm userGroupInfoForm) {
long userGroupRrn = userGroupInfoForm.getUserGroupRrn();
Assert.isFalse(userGroupRrn == 0,
Errors.create().key(MessageIdList.USERGROUP_MISSING_RRN).content("用户组Rrn为空或者不存在!").build());
List<Map> userList = securityService.getUserAll();
for (Map map : userList) {
HashMap userItem = (HashMap) map;
String instanceId = (String) userItem.get("instanceId");
String instanceRrn = (String) userItem.get("instanceRrn");
userItem.put("boxLabel", instanceId);
userItem.put("inputValue", instanceRrn);
userItem.put("checked", new Boolean(false));
}
return userList;
}
// 菜单是否选中
private void isChecked(Collection roleGrantMenuList, HashMap menuItem, String id) {
for (Iterator iteratorGrant = roleGrantMenuList.iterator(); iteratorGrant.hasNext(); ) {
HashMap grantItem = (HashMap) iteratorGrant.next();
String torrn = (String) grantItem.get("torrn");
if (id.equals(torrn)) {
menuItem.put("checked", new Boolean(true));
break;
} else {
menuItem.put("checked", new Boolean(false));
}
}
if (roleGrantMenuList.size() <= 0) {
menuItem.put("checked", new Boolean(false));
}
}
private long getUserMenuRrn(long useRrn) {
return securityService.getUserMenuRrn(useRrn);
}
}