行政组织表:org_adminorg
业务单元和行政组织的管理:
querySQL.append("org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("inner join org_admin_enable on org_admin_enable.pk_adminorg = org_adminorg.pk_adminorg ");
NC65人力行政组织DAO 类:
package nc.impl.om.aos;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.bs.ml.NCLangResOnserver;
import nc.hr.utils.InSQLCreator;
import nc.itf.hi.IPsndocService;
import nc.itf.om.IAOSQueryService.OrgQueryMode;
import nc.jdbc.framework.SQLParameter;
import nc.jdbc.framework.processor.BaseProcessor;
import nc.jdbc.framework.processor.BeanListProcessor;
import nc.jdbc.framework.processor.BeanProcessor;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.ProcessorUtils;
import nc.jdbc.framework.util.DBConsts;
import nc.vo.bd.pub.IPubEnumConst;
import nc.vo.hr.tools.pub.GeneralVO;
import nc.vo.hr.tools.pub.GeneralVOProcessor;
import nc.vo.jcom.lang.StringUtil;
import nc.vo.om.aos.AOSFeaturedOrgVO;
import nc.vo.om.aos.AOSSQLHelper;
import nc.vo.om.aos.SuperVOHelper;
import nc.vo.org.AdminOrgVO;
import nc.vo.org.OrgVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.BusinessRuntimeException;
import nc.vo.trade.sqlutil.IInSqlBatchCallBack;
import nc.vo.trade.sqlutil.InSqlBatchCaller;
import nc.vo.vorg.AdminOrgVersionVO;
import org.apache.commons.lang.StringUtils;
/**
* 行政组织体系DAO<br>
* @author zhangdd
*/
public class AOSDao
{
private BaseDAO baseDAO = null;
enum OrgResultStrategy
{
AOSVO, OrgVO, OrgVOWithAOSRelation
}
AdminOrgVO[] customizeAOSMemberVO(AdminOrgVO[] aosMemberVOs)
{
final StringBuilder querySQL = new StringBuilder();
querySQL.append("select org_adminorg.* ");
querySQL.append("from org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("where org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE + " and org_adminorg.pk_adminorg in ");
String[] pks = SuperVOHelper.getAttributeValueArray(aosMemberVOs, AdminOrgVO.PK_ADMINORG, String.class);
InSqlBatchCaller caller = new InSqlBatchCaller(pks);
List<Object> aosMemberVOList = new ArrayList<Object>();
try
{
aosMemberVOList = (List<Object>) caller.execute(new IInSqlBatchCallBack()
{
List<Object> result = new ArrayList<Object>();
@Override
public Object doWithInSql(String inSql) throws BusinessException, SQLException
{
String sql = querySQL + inSql + " order by org_adminorg.displayorder, org_orgs.code ";
BaseProcessor processor = new BeanListProcessor(AdminOrgVO.class);
List<Object> relist = (List<Object>) getBaseDAO().executeQuery(sql, processor);
result.addAll(relist);
return result;
}
});
}
catch (BusinessException e)
{
nc.bs.logging.Logger.debug(e.getMessage());
}
catch (SQLException e)
{
nc.bs.logging.Logger.debug(e.getMessage());
}
return aosMemberVOList.toArray(new AdminOrgVO[0]);
}
/**
* 根据pk_org 查询,行政体系的 组织VO
* @author
* @param pk_org
* @return AOSFeaturedOrgVO
* @throws DAOException
* @since 从类的V60版本,此方法被添加进来。
*/
AOSFeaturedOrgVO getAOSOrgByOrgPK(String pk_org) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
querySQL.append("select org_orgs.*, org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg as pk_fatheradminorg ");
querySQL.append("from org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg where ");
querySQL.append("org_adminorg.pk_adminorg = ? ");
SQLParameter parameter = new SQLParameter();
parameter.addParam(pk_org);
BaseProcessor processor = new BeanProcessor(AOSFeaturedOrgVO.class);
return (AOSFeaturedOrgVO) getBaseDAO().executeQuery(querySQL.toString(), parameter, processor);
}
public BaseDAO getBaseDAO()
{
if (baseDAO == null)
{
baseDAO = new BaseDAO();
}
return baseDAO;
}
AOSFeaturedOrgVO[] getFirstChildHROrgsByOrgPKSeqControl(String topOrg, String pk_org, boolean includeChildHR) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
querySQL.append("select org_orgs.*, org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg as pk_fatheradminorg ");
querySQL.append("from org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("left outer join org_hrorg on org_orgs.pk_org = org_hrorg.pk_hrorg where ");
if (!includeChildHR)
{
querySQL.append(" ( isnull(org_hrorg.pk_hrorg,'~') = '~' or org_hrorg.enablestate <>" + IPubEnumConst.ENABLESTATE_ENABLE
+ " ) and ");
}
// querySQL.append(" org_adminorg.pk_fatherorg = ? order by " + AdminOrgVO.DISPLAYORDER);
querySQL.append(" org_adminorg.pk_fatherorg = ? and org_adminorg.enablestate = " + IPubEnumConst.ENABLESTATE_ENABLE);
String gkSql = "";
try
{
gkSql = NCLocator.getInstance().lookup(IPsndocService.class).queryControlSql("@@@@Z710000000006M2K", topOrg, true);
}
catch (BusinessException e)
{
e.printStackTrace();
}
if (StringUtils.isEmpty(gkSql))
{
gkSql = AOSSQLHelper.getChildrenBUInSQLByHROrgPK(pk_org);
}
querySQL.append(" and pk_adminorg in (" + gkSql + ")");
if (!topOrg.equals(pk_org))
{
querySQL.append("and pk_adminorg <> '" + pk_org + "'");
}
SQLParameter parameter = new SQLParameter();
parameter.addParam(pk_org);
BaseProcessor processor = new BeanListProcessor(AOSFeaturedOrgVO.class);
List<Object> orgVOList = (List<Object>) getBaseDAO().executeQuery(querySQL.toString(), parameter, processor);
return orgVOList.toArray(new AOSFeaturedOrgVO[0]);
}
/**
* 根据pk_org 查询,行政体系的 直接下级组织
* @param pk_org
* @param includeChildHR 是否包含下级HR组织
* @return AOSFeaturedOrgVO[]
* @throws DAOException
* @since 从类的V60版本,此方法被添加进来。
*/
AOSFeaturedOrgVO[] getFirstChildHROrgsByOrgPK(String pk_org, boolean includeChildHR) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
querySQL.append("select org_orgs.*, org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg as pk_fatheradminorg ");
querySQL.append("from org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("left outer join org_hrorg on org_orgs.pk_org = org_hrorg.pk_hrorg where ");
if (!includeChildHR)
{
querySQL.append(" ( isnull(org_hrorg.pk_hrorg,'~') = '~' or org_hrorg.enablestate <>" + IPubEnumConst.ENABLESTATE_ENABLE
+ " ) and ");
}
// querySQL.append(" org_adminorg.pk_fatherorg = ? order by " + AdminOrgVO.DISPLAYORDER);
querySQL.append(" org_adminorg.pk_fatherorg = ? and org_adminorg.enablestate = " + IPubEnumConst.ENABLESTATE_ENABLE);
SQLParameter parameter = new SQLParameter();
parameter.addParam(pk_org);
BaseProcessor processor = new BeanListProcessor(AOSFeaturedOrgVO.class);
List<Object> orgVOList = (List<Object>) getBaseDAO().executeQuery(querySQL.toString(), parameter, processor);
return orgVOList.toArray(new AOSFeaturedOrgVO[0]);
}
/**
* 为查询业务单元准备SQL<br>
* @param querySQL
* @param innerCode
* @return
*/
private SQLParameter prepareQueryOrgSQL(StringBuilder querySQL, String innerCode, OrgQueryMode mode, OrgResultStrategy strategy,
boolean enablestate)
{
// SQL初始化
querySQL.append("select ");
switch (strategy)
{
case AOSVO :
querySQL.append("org_adminorg.*, org_orgs.orgtype4 ");
break;
case OrgVO :
case OrgVOWithAOSRelation :
querySQL.append("org_orgs.name, org_orgs.name2, org_orgs.name3, org_orgs.name4, org_orgs.name5, org_orgs.name6, ");
querySQL.append("org_orgs.code, org_orgs.pk_corp, org_orgs.pk_currtype, org_orgs.pk_exratescheme, ");
querySQL.append("org_orgs.pk_format, org_orgs.pk_group, org_orgs.pk_org, org_orgs.pk_timezone, ");
querySQL.append("org_orgs.orgtype2, org_orgs.orgtype4, org_orgs.orgtype29, ");
querySQL.append("org_orgs.pk_vid, org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg, ");
querySQL.append("org_adminorg.enablestate, org_adminorg.innercode as aosinnercode ");
break;
}
querySQL.append("from ");
querySQL.append("org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("inner join org_admin_enable on org_admin_enable.pk_adminorg = org_adminorg.pk_adminorg ");
// SQLParameter初始化
SQLParameter parameter = new SQLParameter();
switch (mode)
{
case All :
querySQL.append("where ");
querySQL.append("org_adminorg.innercode like ? ");
if (enablestate)
{
querySQL.append(" and org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
}
parameter.addParam(innerCode + "%");
break;
case Independent :
querySQL.append("where ");
querySQL.append("org_adminorg.innercode like ? ");
if (enablestate)
{
querySQL.append(" and org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
}
querySQL.append(" and org_adminorg.pk_adminorg not in ( ");
querySQL.append("select ");
querySQL.append("aosm.pk_adminorg ");
querySQL.append("from ");
querySQL.append("( select ");
querySQL.append("aos.code, aos.innercode, len(aos.innercode) as innercodelen ");
querySQL.append("from ");
querySQL.append("org_hrorg hrorg inner join org_adminorg aos on hrorg.pk_hrorg = aos.pk_adminorg ");
querySQL.append("where ");
querySQL.append(" hrorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
querySQL.append(" and aos.innercode like ? and aos.innercode <> ? ) ");
querySQL.append(" sub_hrorg, org_adminorg aosm ");
querySQL.append("where ");
querySQL.append("sub_hrorg.innercode = substring(aosm.innercode , 1, sub_hrorg.innercodelen)) ");
parameter.addParam(innerCode + "%");
parameter.addParam(innerCode + "%");
parameter.addParam(innerCode);
break;
case Step_By_Step_Sub_Only :
case Step_By_Step :
case Real_Step_By_Step :
querySQL.append("where ");
querySQL.append(" org_adminorg.innercode like ? ");
if (enablestate)
{
querySQL.append(" and org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
}
parameter.addParam(innerCode + "%");
break;
}
return parameter;
}
Map<String, String> queryHROrgByOrgPK(String[] pk_orgs) throws DAOException
{
HashMap<String, String> hrorgMap = new HashMap<String, String>();
InSQLCreator inSQLCreator = new InSQLCreator();
try
{
String tableName = inSQLCreator.createTempTable(pk_orgs);
// 处理行政组织与HR组织的关系
String hrorgsql =
" select hr_orgs1.pk_hrorg pk_hrorg , hr_orgs2.in_pk "
+ " from (select hr.pk_hrorg, "
+ " a.innercode aos_innercode , " + " "
+ tableName
+ ".in_pk pkorg "
+ " from org_adminorg a "
+ " inner join org_hrorg hr "
+ " on a.pk_adminorg = hr.pk_hrorg "
+ " inner join org_adminorg b "
+ " on a.innercode = substring ( b.innercode, 1, len( a.innercode ) ) "
+ " inner join "
+ tableName
+ " "
+ " on b.pk_adminorg = "
+ tableName
+ ".in_pk "
+ " where hr.enablestate =2 "
+ " ) "
+ " hr_orgs1 "
+ " inner join (select max ( len(a.innercode) ) inlength , "
+ " "
+ tableName
+ ".in_pk "
+ " from org_adminorg a "
+ " inner join org_hrorg hr "
+ " on a.pk_adminorg = hr.pk_hrorg "
+ " inner join org_adminorg b "
+ " on a.innercode = substring ( b.innercode, 1, len( a.innercode ) ) "
+ " inner join "
+ tableName
+ " "
+ " on b.pk_adminorg = "
+ tableName
+ ".in_pk "
+ " where hr.enablestate =2 "
+ " group by "
+ tableName
+ ".in_pk "
+ " ) "
+ " hr_orgs2 "
+ " on hr_orgs1.pkorg = hr_orgs2.in_pk "
+ " where len( hr_orgs1.aos_innercode ) = hr_orgs2.inlength ";
GeneralVO[] hrorgVOs = (GeneralVO[]) new BaseDAO().executeQuery(hrorgsql, new GeneralVOProcessor<GeneralVO>(GeneralVO.class));
for (int i = 0; hrorgVOs != null && i < hrorgVOs.length; i++)
{
hrorgMap.put((String) hrorgVOs[i].getAttributeValue("in_pk"), (String) hrorgVOs[i].getAttributeValue("pk_hrorg"));
}
}
catch (Exception e)
{
Logger.error(e.getMessage(), e);
throw new BusinessRuntimeException(e.getMessage(), e);
}
return hrorgMap;
}
/**
* 返回给定集团所有行政体系中的组织VO<br>
* @param pk_group
* @return OrgVO[]
* @throws DAOException
*/
@SuppressWarnings({
"unchecked", "serial"})
OrgVO[] retrieveAllAOSOrgVO(String pk_group) throws DAOException
{
String sql =
"select org.pk_group, org.pk_org, org.pk_vid, org.pk_fatherorg from org_adminorg aos inner join org_orgs org on aos.pk_adminorg = org.pk_org "
+ "where aos.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE + " aos.pk_group = ?";
SQLParameter parameter = new SQLParameter();
parameter.addParam(pk_group);
List<OrgVO> result = (List<OrgVO>) getBaseDAO().executeQuery(sql, parameter, new BaseProcessor()
{
@Override
public Object processResultSet(ResultSet rs) throws SQLException
{
List<OrgVO> listResult = new ArrayList<OrgVO>();
while (rs.next())
{
OrgVO orgVO = new OrgVO();
orgVO.setPk_group(rs.getString("pk_group"));
orgVO.setPk_org(rs.getString("pk_org"));
orgVO.setPk_vid(rs.getString("pk_vid"));
orgVO.setPk_fatherorg(rs.getString("pk_fatherorg"));
listResult.add(orgVO);
}
return listResult;
}
});
return result.toArray(new OrgVO[0]);
}
/**
* 根据组织主键返回行政组织树中的InnerCode<br>
* @param pk_org
* @return String
* @throws DAOException
*/
String retrieveAOSInnerCodeByOrgPK(String pk_org) throws DAOException
{
String querySQL = "select innercode from org_adminorg where pk_adminorg = ?";
SQLParameter parameter = new SQLParameter();
parameter.addParam(pk_org);
return (String) getBaseDAO().executeQuery(querySQL, parameter, new ColumnProcessor("innercode"));
}
AOSFeaturedOrgVO[] retrieveAOSMembersByCond(String cond, SQLParameter para, boolean blIncludeAll) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
// 查询语句初始化
querySQL.append("select ");
querySQL.append("org_orgs.*, org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg as pk_fatheradminorg ");
querySQL.append("from ");
querySQL.append("org_orgs ");
querySQL.append("inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("where ");
querySQL.append(" org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
querySQL.append(" and ").append(cond);
if (!blIncludeAll)
{
querySQL.append(" and org_adminorg.pk_adminorg in (select pk_adminorg from org_admin_enable) ");
}
List<Object> orgVOList =
(List<Object>) getBaseDAO().executeQuery(querySQL.toString(), para, new BeanListProcessor(AOSFeaturedOrgVO.class));
return orgVOList.toArray(new AOSFeaturedOrgVO[0]);
}
AOSFeaturedOrgVO[] retrieveAOSMembersByGroupPK(String groupPK, boolean blIncludeAll) throws DAOException
{
SQLParameter parameter = new SQLParameter();
parameter.addParam(groupPK);
return retrieveAOSMembersByCond("org_adminorg.pk_group = ? ", parameter, blIncludeAll);
}
/**
* 查询某个hr组织下管理的所有业务单元,遍历到下级的hr组织为止。返回的组织包含hr组织本身
* @param pk_hrorg
* @return AOSFeaturedOrgVO[]
* @throws DAOException
*/
AOSFeaturedOrgVO[] retrieveAOSMembersByHROrgPK(String pk_hrorg, boolean blIncludeAll) throws DAOException
{
return retrieveAOSMembersByCond("org_adminorg.pk_adminorg in(" + AOSSQLHelper.getChildrenBUInSQLByHROrgPK(pk_hrorg) + ")", null,
blIncludeAll);
}
/**
* 查询某个hr组织下管理的所有行政组织,遍历到下级的hr组织为止
* @param pk_hrorg
* @return
* @throws DAOException
*/
public AdminOrgVO[] retrieveAOSOrgByHROrgPK(String pk_hrorg) throws BusinessException
{
StringBuilder querySQL = new StringBuilder();
// 查询语句初始化
querySQL.append("select ");
querySQL.append("org_adminorg.* ");
querySQL.append("from ");
querySQL.append("org_adminorg ");
querySQL.append("where ");
querySQL.append(" org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
querySQL.append(" and org_adminorg.pk_adminorg in(" + AOSSQLHelper.getChildrenBUInSQLByHROrgPK(pk_hrorg) + ")");
BaseProcessor processor = new BeanListProcessor(AdminOrgVO.class);
List<Object> orgVOList = (List<Object>) getBaseDAO().executeQuery(querySQL.toString(), null, processor);
return orgVOList.toArray(new AdminOrgVO[0]);
}
/**
* 返回最新的版本编号<br>
* @param pk_group
* @return String
* @throws DAOException
*/
String retrieveAOSVNO(String pk_group) throws DAOException
{
String sql = "select max(right(vno, 2)) from org_adminorg_v where pk_group = '" + pk_group + "'";
String maxNO = null;
ColumnProcessor processor = new ColumnProcessor();
Object object = getBaseDAO().executeQuery(sql, processor);
if (object != null)
{
maxNO = object.toString();
}
if (maxNO == null)
{
maxNO = "00";
}
String returnPK = String.valueOf(Integer.parseInt(maxNO) + 1);
while (returnPK.length() < 2)
{
returnPK = "0" + returnPK;
}
return returnPK;
}
AOSFeaturedOrgVO[] retrieveDeptsInAOSTree(String groupPK) throws DAOException
{
return retrieveDeptsInAOSTree(groupPK, null);
}
AOSFeaturedOrgVO[] retrieveDeptsInAOSTree(String groupPK, String extraCond) throws DAOException
{
SQLParameter parameter = new SQLParameter();
parameter.addParam(groupPK);
String cond = "org_adminorg.pk_group = ? ";
if (StringUtil.hasText(extraCond))
{
cond += "and (" + extraCond + ")";
}
return retrieveDeptsInAOSTreeByCond(cond, parameter);
}
AOSFeaturedOrgVO[] retrieveDeptsInAOSTreeByCond(String cond, SQLParameter para) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
// 查询语句初始化
querySQL.append("select ");
querySQL.append("org_orgs.*, org_dept.pk_org as pk_deptfather ");
querySQL.append("from ");
querySQL.append("org_dept ");
querySQL.append("inner join org_orgs on org_dept.pk_dept = org_orgs.pk_org ");
querySQL.append("where ");
querySQL.append("org_dept.pk_org in( ");
querySQL.append("select ");
querySQL.append("org_orgs.pk_org ");
querySQL.append("from ");
querySQL.append("org_orgs ");
querySQL.append("inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("where ");
querySQL.append(" org_adminorg.enablestate =" + IPubEnumConst.ENABLESTATE_ENABLE);
querySQL.append(" and ").append(cond);
querySQL.append(")");
BaseProcessor processor = new BeanListProcessor(AOSFeaturedOrgVO.class);
List<Object> orgVOList = (List<Object>) getBaseDAO().executeQuery(querySQL.toString(), para, processor);
return orgVOList.toArray(new AOSFeaturedOrgVO[0]);
}
AOSFeaturedOrgVO[] retrieveDeptsInAOSTreeByHROrgPK(String pk_hrorg) throws DAOException
{
return retrieveDeptsInAOSTreeByHROrgPK(pk_hrorg, null);
}
AOSFeaturedOrgVO[] retrieveDeptsInAOSTreeByHROrgPK(String pk_hrorg, String extraCond) throws DAOException
{
String cond = "org_adminorg.pk_adminorg in(" + AOSSQLHelper.getChildrenBUInSQLByHROrgPK(pk_hrorg) + ") ";
if (StringUtil.hasText(extraCond))
{
cond += "and (" + extraCond + ")";
}
return retrieveDeptsInAOSTreeByCond(cond, null);
}
OrgVO retrieveHROrgByOrgPK(String pk_org) throws DAOException
{
StringBuilder querySql = new StringBuilder();
querySql.append("select * from org_orgs where pk_org in (");
querySql.append(" select hr_orgs1.pk_hrorg");
querySql.append(" from (select hr.*,");
querySql.append(" a.innercode aos_innercode");
querySql.append(" from org_adminorg a");
querySql.append(" inner join org_hrorg hr");
querySql.append(" on a.pk_adminorg = hr.pk_hrorg");
querySql.append(" inner join org_adminorg b");
querySql.append(" on a.innercode=substring(b.innercode, 1, len(a.innercode)) and b.pk_adminorg=?");
querySql.append(" where hr.enablestate=2)");
querySql.append(" hr_orgs1");
querySql.append(" where len(hr_orgs1.aos_innercode)=(select max(len(hr_orgs2.innercode))");
querySql.append(" from (select a.innercode");
querySql.append(" from org_adminorg a");
querySql.append(" inner join org_hrorg hr");
querySql.append(" on a.pk_adminorg=hr.pk_hrorg");
querySql.append(" inner join org_adminorg b");
querySql.append(" on a.innercode=substring(b.innercode, 1, len(a.innercode)) and b.pk_adminorg=?");
querySql.append(" where hr.enablestate=2)");
querySql.append(" hr_orgs2))");
// SQLParameter初始化
SQLParameter parameter = new SQLParameter();
parameter.addParam(pk_org);
parameter.addParam(pk_org);
BaseProcessor processor = new BeanProcessor(OrgVO.class);
return (OrgVO) getBaseDAO().executeQuery(querySql.toString(), parameter, processor);
}
/**
* 返回最新的行政体系版本<br>
* @param pk_group
* @return Collection<AOSVersionVO>
* @throws DAOException
*/
Collection<AdminOrgVersionVO> retrieveLastestAOSVersion(String pk_group) throws DAOException
{
String condition = "pk_group = '" + pk_group + "' and venddate >= '9999-12-31'";
Collection<AdminOrgVersionVO> versionCollection = getBaseDAO().retrieveByClause(AdminOrgVersionVO.class, condition);
return versionCollection;
}
/**
* 根据InnerCode查找所有归次HR组织管理的业务单元<br>
* @param innerCode
* @param condition
* @param orderPart
* @param mode
* @param strategy
* @return Object[]
* @throws DAOException
*/
Object[] retrieveOrgByHROrgInnerCode(String innerCode, String condition, String orderPart, OrgQueryMode mode,
OrgResultStrategy strategy, boolean enablestate) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
SQLParameter parameter = prepareQueryOrgSQL(querySQL, innerCode, mode, strategy, enablestate);
// 部门权限获取
String permissionSQL = null;
if (!StringUtil.isEmptyWithTrim(permissionSQL))
{
querySQL.append(" and org_orgs.pk_org in (").append(permissionSQL).append(")");
}
if (!StringUtil.isEmptyWithTrim(condition))
{
querySQL.append(" and ").append(condition);
}
if (!StringUtil.isEmptyWithTrim(orderPart))
{
querySQL.append(" order by ").append(orderPart);
}
BaseProcessor processor = null;
switch (strategy)
{
case AOSVO :
processor = new BeanListProcessor(AdminOrgVO.class);
break;
case OrgVO :
case OrgVOWithAOSRelation :
processor = new BeanListProcessor(AOSFeaturedOrgVO.class);
break;
}
List<Object> orgVOList = (List<Object>) getBaseDAO().executeQuery(querySQL.toString(), parameter, processor);
List<Object> result = new ArrayList<Object>();
// 对结果进行过滤
switch (mode)
{
case All :
case Independent :
result.addAll(orgVOList);
break;
case Step_By_Step_Sub_Only :// 显示本级和下级
switch (strategy)
{
case AOSVO :
{
// SQL查出的全部VO
AdminOrgVO[] allMemberVOs = orgVOList.toArray(new AdminOrgVO[0]);
boolean[] flags = new boolean[allMemberVOs.length];
// 先查出独立方式下的VO
AdminOrgVO[] memberVOs =
(AdminOrgVO[]) retrieveOrgByHROrgInnerCode(innerCode, condition, orderPart, OrgQueryMode.Independent, strategy,
enablestate);
Set<String> pkCache = SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, memberVOs);
for (int i = 0; i < allMemberVOs.length; i++)
{
if (pkCache.contains(allMemberVOs[i].getPk_adminorg()))
{
flags[i] = true;
}
else if (pkCache.contains(allMemberVOs[i].getPk_fatherorg())
&& !pkCache.contains(allMemberVOs[i].getPk_adminorg()))
{
// 此必为下级HR组织
String subInnercode = allMemberVOs[i].getInnercode();
AdminOrgVO[] childVOs =
(AdminOrgVO[]) retrieveOrgByHROrgInnerCode(subInnercode, null, null, OrgQueryMode.Independent,
strategy, enablestate);
Set<String> childCache =
SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, childVOs);
for (int j = 0; j < allMemberVOs.length; j++)
{
if (childCache.contains(allMemberVOs[j].getPk_adminorg()))
{
flags[j] = true;
}
}
}
}
for (int i = 0; i < flags.length; i++)
{
if (flags[i])
{
result.add(allMemberVOs[i]);
}
}
}
break;
case OrgVO :
case OrgVOWithAOSRelation :
{
// SQL查出的全部VO
AOSFeaturedOrgVO[] allMemberVOs = orgVOList.toArray(new AOSFeaturedOrgVO[0]);
boolean[] flags = new boolean[allMemberVOs.length];
// 先查出独立方式下的VO
AOSFeaturedOrgVO[] memberVOs =
(AOSFeaturedOrgVO[]) retrieveOrgByHROrgInnerCode(innerCode, condition, orderPart, OrgQueryMode.Independent,
OrgResultStrategy.OrgVOWithAOSRelation, enablestate);
Set<String> pkCache = SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, memberVOs);
for (int i = 0; i < allMemberVOs.length; i++)
{
if (pkCache.contains(allMemberVOs[i].getPk_adminorg()))
{
flags[i] = true;
}
else if (pkCache.contains(allMemberVOs[i].getPk_fatherorg())
&& !pkCache.contains(allMemberVOs[i].getPk_adminorg()))
{
// 此必为下级HR组织
// String subInnercode = allMemberVOs[i].getAosinnercode();
// AOSFeaturedOrgVO[] childVOs =
// (AOSFeaturedOrgVO[]) retrieveOrgByHROrgInnerCode(subInnercode, null, null,
// OrgQueryMode.Independent,
// OrgResultStrategy.OrgVOWithAOSRelation);
Set<String> childCache =
SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, allMemberVOs[i]);
for (int j = 0; j < allMemberVOs.length; j++)
{
if (childCache.contains(allMemberVOs[j].getPk_adminorg()))
{
flags[j] = true;
}
}
}
}
for (int i = 0; i < flags.length; i++)
{
if (flags[i])
{
result.add(allMemberVOs[i]);
}
}
}
break;
}
break;
case Step_By_Step :
case Real_Step_By_Step :// 只显示下级
switch (strategy)
{
case AOSVO :
{
// SQL查出的全部VO
AdminOrgVO[] allMemberVOs = orgVOList.toArray(new AdminOrgVO[0]);
boolean[] flags = new boolean[allMemberVOs.length];
// 先查出独立方式下的VO
AdminOrgVO[] memberVOs =
(AdminOrgVO[]) retrieveOrgByHROrgInnerCode(innerCode, condition, orderPart, OrgQueryMode.Independent, strategy,
enablestate);
Set<String> pkCache = SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, memberVOs);
for (int i = 0; i < allMemberVOs.length; i++)
{
if (pkCache.contains(allMemberVOs[i].getPk_fatherorg()) && !pkCache.contains(allMemberVOs[i].getPk_adminorg()))
{
// 此必为下级HR组织
String subInnercode = allMemberVOs[i].getInnercode();
AdminOrgVO[] childVOs =
(AdminOrgVO[]) retrieveOrgByHROrgInnerCode(subInnercode, null, null, OrgQueryMode.Independent,
strategy, enablestate);
Set<String> childCache =
SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, childVOs);
for (int j = 0; j < allMemberVOs.length; j++)
{
if (childCache.contains(allMemberVOs[j].getPk_adminorg()))
{
flags[j] = true;
}
}
}
}
for (int i = 0; i < flags.length; i++)
{
if (flags[i])
{
result.add(allMemberVOs[i]);
}
}
}
break;
case OrgVO :
case OrgVOWithAOSRelation :
{
// SQL查出的全部VO
AOSFeaturedOrgVO[] allMemberVOs = orgVOList.toArray(new AOSFeaturedOrgVO[0]);
boolean[] flags = new boolean[allMemberVOs.length];
// 先查出独立方式下的VO
AOSFeaturedOrgVO[] memberVOs =
(AOSFeaturedOrgVO[]) retrieveOrgByHROrgInnerCode(innerCode, condition, orderPart, OrgQueryMode.Independent,
OrgResultStrategy.OrgVOWithAOSRelation, enablestate);
Set<String> pkCache = SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, memberVOs);
for (int i = 0; i < allMemberVOs.length; i++)
{
if (pkCache.contains(allMemberVOs[i].getPk_fatherorg()) && !pkCache.contains(allMemberVOs[i].getPk_adminorg()))
{
// 此必为下级HR组织
String subInnercode = allMemberVOs[i].getAosinnercode();
AOSFeaturedOrgVO[] childVOs =
(AOSFeaturedOrgVO[]) retrieveOrgByHROrgInnerCode(subInnercode, null, null, OrgQueryMode.Independent,
OrgResultStrategy.OrgVOWithAOSRelation, enablestate);
Set<String> childCache =
SuperVOHelper.buildAttributeHashSet(AdminOrgVO.PK_ADMINORG, String.class, childVOs);
for (int j = 0; j < allMemberVOs.length; j++)
{
if (childCache.contains(allMemberVOs[j].getPk_adminorg()))
{
flags[j] = true;
}
}
}
}
for (int i = 0; i < flags.length; i++)
{
if (flags[i])
{
result.add(allMemberVOs[i]);
}
}
}
break;
}
break;
}
switch (strategy)
{
case AOSVO :
return result.toArray(new AdminOrgVO[0]);
case OrgVO :
AOSFeaturedOrgVO[] orgVOs = result.toArray(new AOSFeaturedOrgVO[0]);
return SuperVOHelper.createSuperVOsFromSuperVOs(orgVOs, OrgVO.class);
case OrgVOWithAOSRelation :
return result.toArray(new AOSFeaturedOrgVO[0]);
default :
throw new DAOException(NCLangResOnserver.getInstance().getStrByID("org", "AOSDao-000000")/* 查询组织时发生错误 */);
}
}
AOSFeaturedOrgVO[] retrieveOrgVOWithAOSRelationship(String[] orgPKs) throws BusinessException
{
StringBuilder querySQL = new StringBuilder();
querySQL.append("select org_orgs.*, org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg as pk_fatheradminorg from ");
querySQL.append("org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("where org_orgs.pk_org in(" + new InSQLCreator().getInSQL(orgPKs) + ")");
List<Object> orgVOList =
(List<Object>) getBaseDAO().executeQuery(querySQL.toString(), new BeanListProcessor(AOSFeaturedOrgVO.class));
return orgVOList.toArray(new AOSFeaturedOrgVO[0]);
}
OrgVO retrieveRootOrgByGroupPK(String groupPK) throws DAOException
{
StringBuilder querySQL = new StringBuilder();
querySQL.append("select org_orgs.* ");
querySQL.append("from org_orgs inner join org_adminorg on org_orgs.pk_org = org_adminorg.pk_adminorg ");
querySQL.append("where org_adminorg.pk_group = ? and org_adminorg.pk_fatherorg = '" + DBConsts.NULL_WAVE + "' ");
SQLParameter parameter = new SQLParameter();
parameter.addParam(groupPK);
return (OrgVO) getBaseDAO().executeQuery(querySQL.toString(), parameter, new BeanProcessor(AOSFeaturedOrgVO.class));
}
AOSFeaturedOrgVO[] retrieveSubOrgVOByOrgPK(String strFields[], String orgPK) throws DAOException
{
String strFieldSQL = "org_orgs.*";
if (strFields != null && strFields.length > 0)
{
strFieldSQL = StringUtils.join(strFields, ",");
}
StringBuilder querySQL = new StringBuilder();
querySQL.append("select " + strFieldSQL + ", org_adminorg.pk_adminorg, org_adminorg.pk_fatherorg as pk_fatheradminorg ");
querySQL.append("from org_orgs inner join org_adminorg on org_orgs.pk_org=org_adminorg.pk_adminorg ");
querySQL
.append("where org_adminorg.enablestate=? and org_adminorg.innercode like (select innercode||'%' from org_adminorg where pk_adminorg=?)");
SQLParameter parameter = new SQLParameter();
parameter.addParam(IPubEnumConst.ENABLESTATE_ENABLE);
parameter.addParam(orgPK);
List<Object> orgVOList =
(List<Object>) getBaseDAO().executeQuery(querySQL.toString(), parameter, new BeanListProcessor(AOSFeaturedOrgVO.class));
return orgVOList.toArray(new AOSFeaturedOrgVO[0]);
}
Map<String, List<AdminOrgVO>> retrieveSubOrgVOByOrgPK(String strFields[], String... strPk_orgs) throws BusinessException
{
String strFieldSQL = "t2.*";
if (strFields != null && strFields.length > 0)
{
strFieldSQL = "t2." + StringUtils.join(strFields, ",t2.");
}
String strSQL =
"select t1.pk_adminorg as key_pk_adminorg," + strFieldSQL
+ " from org_adminorg t1 left join org_adminorg t2 on t2.innercode like (t1.innercode||'%')"
+ " where t2.enablestate=? and t1.pk_adminorg in(" + new InSQLCreator().getInSQL(strPk_orgs) + ")";
SQLParameter parameter = new SQLParameter();
parameter.addParam(IPubEnumConst.ENABLESTATE_ENABLE);
return (Map<String, List<AdminOrgVO>>) getBaseDAO().executeQuery(strSQL, parameter, new BaseProcessor()
{
@Override
public Object processResultSet(ResultSet rs) throws SQLException
{
Map<String, List<AdminOrgVO>> mapResult = new HashMap<String, List<AdminOrgVO>>();
while (rs.next())
{
String key_pk_adminorg = rs.getString("key_pk_adminorg");
if (!mapResult.containsKey(key_pk_adminorg))
{
mapResult.put(key_pk_adminorg, new ArrayList<AdminOrgVO>());
}
AdminOrgVO adminOrgVO = (AdminOrgVO) ProcessorUtils.toBeanOfCurrentRow(rs, AdminOrgVO.class, null);
mapResult.get(key_pk_adminorg).add(adminOrgVO);
}
return mapResult;
}
});
}
}