NC65树表结构多表关联构建-参照人员档案

该代码实现了一个基于NC65系统的人员档案树表结构,涉及多表关联查询,包括对虚拟部门和关键人员组的处理。类`PsndocGlobalRefTreeModel`用于构建HR人员的集团树,支持过滤功能,同时考虑了是否包含虚拟部门和关键人员组的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NC65树表结构多表关联构建-参照人员档案

人员参照代码:

package nc.ui.hi.ref;

import java.util.Hashtable;

import nc.hr.utils.ResHelper;
import nc.hr.utils.SQLHelper;
import nc.pub.tools.HiSQLHelper;
import nc.pub.tools.KeyPsnGroupSqlUtils;
import nc.ui.bd.ref.AbstractRefGridTreeModel;
import nc.ui.bd.ref.IRefConst;
import nc.ui.pub.beans.ValueChangedEvent;
import nc.vo.bd.pub.IPubEnumConst;
import nc.vo.hi.psndoc.KeyPsnGrpVO;
import nc.vo.hi.pub.HICommonValue;

public class PsndocGlobalRefTreeModel extends AbstractRefGridTreeModel
{
    String wherePart = " and hi_psnjob.pk_org in (select pk_adminorg from org_admin_enable) ";
    /**
     * 包含虚拟部门
     */
    private boolean includeDummyDept = true;
    
    /**
     * 包含关键人员组
     */
    private boolean includeKeyPsnGrp = true;
    
    public PsndocGlobalRefTreeModel()
    {
        reset();
    }
    
    public PsndocGlobalRefTreeModel(boolean includeDummyDept)
    {
        this.includeDummyDept = includeDummyDept;
        reset();
    }
    
    @Override
    public void filterValueChanged(ValueChangedEvent changedValue)
    {
        
        super.filterValueChanged(changedValue);
        String pk_group = "";
        Object newValue = changedValue.getNewValue();
        
        if (newValue == null)
        {
            return;
        }
        
        if (newValue.getClass().isArray())
        {
            pk_group = (String) ((Object[]) newValue)[0];
        }
        else
        {
            pk_group = (String) newValue;
        }
        setPk_group(pk_group);
        setClassWherePart(" pk_group ='" + getPk_group() + "' ");
    }
    
    @Override
    public void reset()
    {
    	setRefNodeName("HR人员(集团树)"); /*-=notranslate=-*/
        setRefTitle(ResHelper.getString("common", "UC000-0000129")/* @res "人员" */);
        setRootName(ResHelper.getString("6007psn", "06007psn0302")/* @res "组织部门" */);
        setClassFieldCode(new String[]{"code", "name", "pk_orgdept", "pk_children", "pk_father", "display_order", "pk_group"});
        setClassFatherField("pk_father");
        setClassChildField("pk_children");
        setClassJoinField("pk_orgdept");
        StringBuffer classTableName = new StringBuffer();
        classTableName
            .append(
                " ( select code, name,name2,name3,name4,name5,name6,"
                    + " org_adminorg.pk_adminorg pk_org, org_adminorg.pk_adminorg pk_orgdept,org_adminorg.pk_group pk_group, ")
            .append(" org_adminorg.pk_adminorg pk_children, org_adminorg.pk_fatherorg pk_father, 2 display_order ")
            .append(" from org_adminorg where enablestate=" + IPubEnumConst.ENABLESTATE_ENABLE)
            .append(" and exists (select 1 from org_admin_enable where org_admin_enable.pk_adminorg = org_adminorg.pk_adminorg) ")
            .append(" union ")
            .append(
                " select org_dept.code,org_dept.name,org_dept.name2,org_dept.name3,org_dept.name4,org_dept.name5,org_dept.name6,"
                    + " org_dept.pk_org pk_org,org_dept.pk_dept pk_orgdept, org_adminorg.pk_group, ")
            .append(
                " org_dept.pk_dept pk_children, case when " + SQLHelper.getNullSql("org_dept.pk_fatherorg")
                    + " then org_adminorg.pk_adminorg ").append(" else org_dept.pk_fatherorg end pk_father,1 display_order ")
            .append(" from org_dept , org_adminorg  where org_dept.HRCANCELED <> 'Y' and org_dept.pk_org = org_adminorg.pk_adminorg  ")
            .append(" and exists (select 1 from org_admin_enable where org_admin_enable.pk_adminorg = org_dept.pk_org)");
        if (!isIncludeDummyDept())
        {// 如果不包含虚拟部门
            classTableName.append(" and org_dept.depttype = 0 ");
        }
        if (isIncludeKeyPsnGrp())
        {
            // 如果不包含关键人员组则不显示关键人员组
            String keypsn = ResHelper.getString("6007psn", "06007psn0357")/* @res "关键人员组" */;
            classTableName
                .append(" union ")
                .append(
                    " select '','" + keypsn + "','" + keypsn + "','" + keypsn + "','" + keypsn + "','" + keypsn + "','" + keypsn
                        + "' ,pk_group, '" + HICommonValue.PK_KRYPSNGRP + "', ")
                .append(" pk_group, '" + HICommonValue.PK_KRYPSNGRP + "', '~', 3 from org_group where pk_group = '" + getPk_group() + "'  ")
                .append(" union ")
                .append(
                    " select group_code code ,group_name name,group_name2 name2,group_name3 name3,group_name4 name4,group_name5 name5,group_name6 name6,pk_org ,'"
                        + HICommonValue.PRE_KRYPSNGRP
                        + "'||pk_keypsn_group pk_orgdept,pk_group,pk_keypsn_group pk_children,'"
                        + HICommonValue.PK_KRYPSNGRP
                        + "' pk_father, 4 display_order  from hi_keypsn_group where enablestate = "
                        + IPubEnumConst.ENABLESTATE_ENABLE
                        + " and "
                        + KeyPsnGroupSqlUtils.getKeyPsnGroupPowerSql(KeyPsnGrpVO.getDefaultTableName()));
        }
        classTableName.append(" ) orgdept ");
        setClassTableName(classTableName.toString());
        setClassDefaultFieldCount(getClassDefaultFieldCount());
        setClassWherePart(" pk_group ='" + getPk_group() + "' ");
        setClassOrderPart("display_order,code");
        setFieldCode(new String[]{"bd_psndoc.code", HiSQLHelper.getLangNameColume("bd_psndoc.name"),
            HiSQLHelper.getLangNameColume("org_orgs.name"), HiSQLHelper.getLangNameColume("org_dept.name"),
            HiSQLHelper.getLangNameColume("om_post.postname")});
        setFieldName(new String[]{ResHelper.getString("common", "UC000-0000147")/* @res "人员编码" */,
            ResHelper.getString("common", "UC000-0001403")/*
                                                           * @res
                                                           * "姓名"
                                                           */,
            
            ResHelper.getString("6007psn", "06007psn0074")/* @res "组织" */, ResHelper.getString("common", "UC000-0004064")/*
                                                                                                                          * @
                                                                                                                          * res
                                                                                                                          * "部门"
                                                                                                                          */,
            ResHelper.getString("common", "UC000-0001653") /* @res "岗位" */});
        setHiddenFieldCode(new String[]{"hi_psnjob.pk_dept", "hi_psnjob.pk_psnjob", "bd_psndoc.pk_psndoc", "hi_psnjob.pk_org",
            "hi_psnjob.pk_post", "hi_psnjob.pk_job", "hi_psnjob.pk_psncl", "idtype", "id"});
        setTableName(" bd_psndoc inner join hi_psnorg on hi_psnorg.pk_psndoc = bd_psndoc.pk_psndoc  "/*
                                                                                                      * and
                                                                                                      * hi_psnorg
                                                                                                      * .
                                                                                                      * lastflag
                                                                                                      * = 'Y'
                                                                                                      */
            + " inner join (select max( orgrelaid) as orgrelaid,pk_psndoc from hi_psnorg where indocflag='Y' group by pk_psndoc  ) tmp "
            + " on hi_psnorg.pk_psndoc = tmp.pk_psndoc and hi_psnorg.orgrelaid = tmp.orgrelaid "
            + " inner join hi_psnjob on hi_psnorg.pk_psnorg = hi_psnjob.pk_psnorg and hi_psnjob.lastflag = 'Y' and hi_psnjob.ismainjob = 'Y' "
            + " left outer join org_orgs on org_orgs.pk_org = hi_psnjob.pk_org "
            + " left outer join org_dept on org_dept.pk_dept = hi_psnjob.pk_dept "
            + " left outer join om_post on om_post.pk_post = hi_psnjob.pk_post  ");
        setPkFieldCode("bd_psndoc.pk_psndoc");
        setDocJoinField("hi_psnjob.pk_org");
        // setRefCodeField("bd_psndoc.code");
        // setRefNameField("bd_psndoc.name");
        setExactOn(false);
        setWherePart(" hi_psnorg.indocflag = 'Y' ");
        setFilterRefNodeName(new String[]{"集团"});/* -=notranslate=- */
        setCacheEnabled(true);
        resetFieldName();
        Hashtable content = new Hashtable();
        content.put("0", ResHelper.getString("6001ref", "06001ref0004")/* @res "身份证" */);
        content.put("1", ResHelper.getString("6001ref", "06001ref0005")/* @res "军官证" */);
        content.put("2", ResHelper.getString("6001ref", "06001ref0006")/* @res "护照" */);
        content.put("3", ResHelper.getString("10140psn", "2psndoc-000026")/* @res "香港身份证" */);
        content.put("4", ResHelper.getString("10140psn", "2psndoc-000027")/* @res "回乡证" */);
        content.put("5", ResHelper.getString("10140psn", "2psndoc-000028")/* @res "台湾身份证 " */);
        content.put("6", ResHelper.getString("10140psn", "2psndoc-000029")/* @res "澳门身份证" */);
        content.put("7", ResHelper.getString("10140psn", "2psndoc-000030")/* @res "台胞证 " */);
        content.put("8", ResHelper.getString("10140psn", "2psndoc-000031")/* @res "外国人永久居留证" */);
        Hashtable convert = new Hashtable();
        convert.put("idtype", content);
        setDispConvertor(convert);
        setMutilLangNameRef(false);
    }
    
    @Override
    protected void addJoinCondition(StringBuffer sqlBuffer)
    {
        // 处理关联---但是不加入WherePart
        if (getClassJoinValue() != null && !getClassJoinValue().equals(IRefConst.QUERY))
        {
            if (HICommonValue.PK_KRYPSNGRP.equals(getClassJoinValue()))
            {
                // 选择关键人员组节点
                sqlBuffer.append(" and ( hi_psnjob.pk_psnjob in ('') ) ");
            }
            else if (getClassJoinValue().startsWith(HICommonValue.PRE_KRYPSNGRP))
            {
                // 选择了具体的组
                String pk_keypsngrp = getClassJoinValue().substring(5);
                sqlBuffer.append(" and ( hi_psnjob.pk_psnorg in ( select pk_psnorg from hi_psndoc_keypsn where pk_keypsn_grp = '"
                    + pk_keypsngrp + "' and ( endflag <> 'Y' ) ) )");
            }
            else
            {
                if (isExactOn())
                {
                    sqlBuffer.append(" and ( " + getDocJoinField() + " = '" + getClassJoinValue() + "' )");
                }
                else
                {
                    sqlBuffer.append(" and ( " + getDocJoinField() + " = '" + getClassJoinValue() + "' or hi_psnjob.pk_dept = '"
                        + getClassJoinValue() + "' )");
                }
            }
            
        }
        sqlBuffer.append(wherePart + " and hi_psnjob.pk_psnjob not in ( " + KeyPsnGroupSqlUtils.getKeyPsnPowerSql() + " )");
    }
    
    public void setIncludeDummyDept(boolean includeDummyDept)
    {
        this.includeDummyDept = includeDummyDept;
    }
    
    public boolean isIncludeDummyDept()
    {
        return includeDummyDept;
    }
    
    public void setIncludeKeyPsnGrp(boolean includeKeyPsnGrp)
    {
        this.includeKeyPsnGrp = includeKeyPsnGrp;
        reset();
    }
    
    public boolean isIncludeKeyPsnGrp()
    {
        return includeKeyPsnGrp;
    }
    
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值