NC65人力行政组织DAO 类

行政组织表: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;
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/u010741112/article/details/129982075