Index: forgon-core/src/main/java/com/forgon/directory/service/DirectoryManagerImpl.java =================================================================== diff -u -r16279 -r22468 --- forgon-core/src/main/java/com/forgon/directory/service/DirectoryManagerImpl.java (.../DirectoryManagerImpl.java) (revision 16279) +++ forgon-core/src/main/java/com/forgon/directory/service/DirectoryManagerImpl.java (.../DirectoryManagerImpl.java) (revision 22468) @@ -7,6 +7,8 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.util.ObjectUtil; import com.forgon.tools.util.PageUtil; +import com.forgon.tools.util.SqlUtils; + import org.apache.commons.collections.map.HashedMap; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -20,6 +22,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -84,6 +87,27 @@ @Override + public List findAllUserByCondition(User userCondition, Map otherCondition) { + List users = null ; + try { + Session session = objectDao.getHibernateSession(); + Criteria criteria = session.createCriteria(User.class); + this.buildUserConditionCriteria(criteria, userCondition); + this.buildOtherConditionOrCriteria(criteria, otherCondition); + //使用投影获得总条数 + Integer count = Integer.parseInt(criteria.setProjection(Projections.rowCount()).uniqueResult().toString()); + //将投影清空,如果不设置为null,结果集会不正常 + criteria.setProjection(null); + users = criteria.list(); + return users; + } + catch (Exception e) { + logger.error(e); + throw new RuntimeException(e); + } + } + + @Override public PageEntity findAllUserByCondition(PageEntity pageEntity, User userCondition, Map otherCondition) { try { Session session = objectDao.getHibernateSession(); @@ -136,21 +160,27 @@ if (otherCondition != null) { String[] fullNames; Object objFullNames = otherCondition.get("fullNames"); + String dycondition = ""; Disjunction disjunction = Restrictions.disjunction(); if (objFullNames != null && ArrayUtils.isNotEmpty((fullNames = (String[]) objFullNames))) { - disjunction.add(Restrictions.or(Restrictions.in("fullName", Arrays.asList(fullNames)))); + dycondition += SqlUtils.getStringFieldInLargeCollectionsPredicate("fullName",Arrays.asList(fullNames)); } Long[] userIds; Object objUserIds = otherCondition.get("userIds"); if (objUserIds != null && ArrayUtils.isNotEmpty((userIds = (Long[]) objUserIds))) { - disjunction.add(Restrictions.or(Restrictions.in("id", Arrays.asList(userIds)))); + List userIdsList = Arrays.asList(userIds); + if(userIdsList.get(0)==null&& userIdsList.size() == 1){ + dycondition += ""; + }else{ + dycondition += SqlUtils.getNonStringFieldInLargeCollectionsPredicate("{alias}.id",userIdsList); + } } String[] names; Object objNames = otherCondition.get("names"); if (objNames != null && ArrayUtils.isNotEmpty((names = (String[]) objNames))) { - disjunction.add(Restrictions.or(Restrictions.in("name", Arrays.asList(names)))); + dycondition += SqlUtils.getStringFieldInLargeCollectionsPredicate("name",Arrays.asList(names)); } - criteria.add(disjunction); + criteria.add(Restrictions.sqlRestriction(dycondition)); } } Index: ssts-web/src/main/webapp/common/selPersonByOrgUnitByExt.js =================================================================== diff -u -r16279 -r22468 --- ssts-web/src/main/webapp/common/selPersonByOrgUnitByExt.js (.../selPersonByOrgUnitByExt.js) (revision 16279) +++ ssts-web/src/main/webapp/common/selPersonByOrgUnitByExt.js (.../selPersonByOrgUnitByExt.js) (revision 22468) @@ -44,9 +44,11 @@ }); //右边用户的store var userStore2 = userObj.getUserStore(WWWROOT + '/systemmanage/directoryAction!findExitsUser.do'); +var firstLoadUserStote2 = 0; userStore2.addListener('beforeload',function (store, options) { // 从缓存中读取数据,把数据赋值到请求中(用于用户进行了翻页) - Ext.apply(options.params, rightSearchCache); + setRightSearchCondition(saveCache); + Ext.apply(options.params, rightSearchCache); }); //事件处理对象 @@ -139,6 +141,7 @@ alert('请选择要添加的用户!'); return false; } + var existedFullName = ''; Ext.each(selections, function (select) { var ele = select.get('id'); //从缓存中查找是否已经存在此记录,如果不存在则添加到缓存中 @@ -147,10 +150,13 @@ saveCache[ele] = select.data; } else { - alert("【" + select.get('fullName') + "】已存在,添加失败!"); + existedFullName += select.get('fullName') + ";" // return false就会中断操作,暂时默认遇到重复不添加,只给予提示,后续的继续执行 } }); + if(existedFullName != ''){ + alert("【" + existedFullName + "】已存在,添加失败!"); + } setRightSearchCondition(saveCache); userStore2.load({params: {start: 0, limit: pageSize}}); } @@ -264,7 +270,6 @@ var seletedValue = document.getElementById("seletedList").options[i].value.Trim(); if (seletedValue != 'undefined' && seletedValue != '') { returnArr.push(seletedValue); - } } self.returnValue = returnArr; Index: ssts-web/src/main/webapp/common/orgUnitHelper.js =================================================================== diff -u -r16279 -r22468 --- ssts-web/src/main/webapp/common/orgUnitHelper.js (.../orgUnitHelper.js) (revision 16279) +++ ssts-web/src/main/webapp/common/orgUnitHelper.js (.../orgUnitHelper.js) (revision 22468) @@ -127,7 +127,7 @@ * @param saveCache 要缓存的地方 */ userObj.setSaveCache = function (records, option, saveCache) { - Ext.each(records, function (record) { + Ext.each(records, function (record) { var id = record.get('id'); saveCache[id] = record.data; }); @@ -148,6 +148,15 @@ * @param para 要请求的参数(包括:action,userNamesArrays,userIdsArray,pageSize) */ userObj.loadUserStore2 = function (userStore, para) { + var userCacheStore = new Ext.data.JsonStore({ + autoDestroy: true, + fields: ['id', 'name', 'fullName'], + url: WWWROOT + '/systemmanage/directoryAction!findExitsUserByDisPaged.do', + root: 'data', + baseParams: {ifReturnId: false}, + totalProperty: 'totalCount' + }); + var me = this; var action = para.action; var userNamesArrays = para.userNamesArrays; @@ -158,7 +167,12 @@ userStore.load({ params: {start: 0, limit: pageSize, userNamesArrays: userNamesArrays}, callback: function (records, option) { - me.setSaveCache(records, option, saveCache); + userCacheStore.load({ + params: {start: 0, limit: pageSize, userNamesArrays: userNamesArrays}, + callback: function (userCacheRecords, userCacheOption) { + me.setSaveCache(userCacheRecords, userCacheOption, saveCache); + } + }); } }); } @@ -167,7 +181,12 @@ userStore.load({ params: {start: 0, limit: pageSize, names: me.getIds(userIdsArray)}, callback: function (records, option) { - me.setSaveCache(records, option, saveCache); + userCacheStore.load({ + params: {start: 0, limit: pageSize, names: me.getIds(userIdsArray)}, + callback: function (userCacheRecords, userCacheOption) { + me.setSaveCache(userCacheRecords, userCacheOption, saveCache); + } + }); } }); } @@ -176,7 +195,12 @@ userStore.load({ params: {start: 0, limit: pageSize, userIds: userIdsArray}, callback: function (records, option) { - me.setSaveCache(records, option, saveCache); + userCacheStore.load({ + params: {start: 0, limit: pageSize, userIds: userIdsArray}, + callback: function (userCacheRecords, userCacheOption) { + me.setSaveCache(userCacheRecords, userCacheOption, saveCache); + } + }); } }); } @@ -285,14 +309,8 @@ } } } - console.log(userIds); - console.log(userNames); } - - return new OrgUnitFactory(); - - })(); Index: forgon-core/src/main/java/com/forgon/directory/action/DirectoryAction.java =================================================================== diff -u -r16279 -r22468 --- forgon-core/src/main/java/com/forgon/directory/action/DirectoryAction.java (.../DirectoryAction.java) (revision 16279) +++ forgon-core/src/main/java/com/forgon/directory/action/DirectoryAction.java (.../DirectoryAction.java) (revision 22468) @@ -1,5 +1,6 @@ package com.forgon.directory.action; +import com.alibaba.fastjson.JSONArray; import com.forgon.directory.service.DirectoryHelper; import com.forgon.directory.service.DirectoryManager; import com.forgon.directory.service.DirectoryReHandler; @@ -8,9 +9,12 @@ import com.forgon.security.model.User; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.util.PageUtil; +import com.google.gson.JsonArray; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.Preparable; + import net.sf.json.JSONObject; + import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; @@ -133,7 +137,40 @@ } } - + /** + * 查找已存在的用户(不分页) + */ + public void findExitsUserByDisPaged() { + try { + Map condition = directoryManagerImpl.buildQueryCondition(directoryVo); + if (condition.size() != 0) { + List userList = directoryManagerImpl.findAllUserByCondition(null, condition); + JSONArray jsonArray = new JSONArray(); + JSONObject json = null; + User user = null; + for(int i=0;i findAllUserByRoleId(String roleId); + + /** + * 根据条件查询对应的用户 + * + * @param userCondition 要查询的条件 + * @param otherCondition 其他的条件,用于扩展 + * @return + */ + List findAllUserByCondition(User userCondition, Map otherCondition); /** * 根据用户选择的下拉来查询对应的用户