基础数据人员节点相关sql和个人银行账户节点人员编码参照代码

355 篇文章 103 订阅

1、人员节点sql

获取跨组织跨部门离退人员:

--把人员421从B组织的综合部门调出到A组织的离退休部门进行退休,用以下sql可以查询到在A组织中421这个人员
--未选择任何部门
select pk_psndoc, bd_psndoc.code, bd_psndoc.name, bd_psndoc.pk_org, org_orgs.code, org_orgs.name from bd_psndoc inner join org_orgs on bd_psndoc.pk_org = org_orgs.pk_org where not exists ( select pk_psndoc from bd_psnjob where bd_psnjob.pk_psndoc = bd_psndoc.pk_psndoc and pk_org = N'0001A110000000007LBY' ) and bd_psndoc.pk_org = N'0001A110000000007LBY' order by bd_psndoc.code, bd_psndoc.name

--选择离退休部门
select pk_psndoc, bd_psndoc.code, bd_psndoc.name, bd_psndoc.pk_org, org_orgs.code, org_orgs.name from bd_psndoc inner join org_orgs on bd_psndoc.pk_org = org_orgs.pk_org where not exists ( select pk_psndoc from bd_psnjob where bd_psnjob.pk_psndoc = bd_psndoc.pk_psndoc and pk_org = N'0001A110000000007LBY' and pk_dept in ( N'1001A110000000000NGN' )) and bd_psndoc.pk_org = N'0001A110000000007LBY' order by bd_psndoc.code, bd_psndoc.name

2、个人银行账户节点人员编码参照代码

个人银行账户节点卡片界面代码:

package nc.ui.bd.psnbankacc.view;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.bs.uif2.BusinessExceptionAdapter;
import nc.desktop.ui.WorkbenchEnvironment;
import nc.itf.bd.bankdoc.IBankdocQueryService;
import nc.itf.uap.IUAPQueryBS;
import nc.ui.bd.bankacc.iban.BankaccnumRefPane;
import nc.ui.bd.bankacc.iban.IbanUtil;
import nc.ui.bd.psnbankacc.model.PsnBankaccAppModel;
import nc.ui.bd.ref.AbstractRefModel;
import nc.ui.bd.ref.model.BankDocDefaultRefTreeModel;
import nc.ui.bd.ref.model.NetbankTemplateDefaultRefModel;
import nc.ui.bd.ref.model.PsndocDefaultRefModel;
import nc.ui.pub.beans.UIButton;
import nc.ui.pub.beans.UIRefPane;
import nc.ui.pub.beans.UITextField;
import nc.ui.pub.bill.BillCardPanel;
import nc.ui.pub.bill.BillData;
import nc.ui.pub.bill.BillEditEvent;
import nc.ui.pub.bill.BillEditListener;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.bill.BillModel;
import nc.ui.pub.bill.BillScrollPane;
import nc.ui.uif2.AppEvent;
import nc.ui.uif2.IFunNodeClosingListener;
import nc.ui.uif2.components.AutoShowUpEventSource;
import nc.ui.uif2.components.IAutoShowUpComponent;
import nc.ui.uif2.components.IAutoShowUpEventListener;
import nc.ui.uif2.components.IComponentWithActions;
import nc.ui.uif2.components.ITabbedPaneAwareComponent;
import nc.ui.uif2.components.ITabbedPaneAwareComponentListener;
import nc.ui.uif2.components.TabbedPaneAwareCompnonetDelegate;
import nc.ui.uif2.editor.BillForm;
import nc.ui.uif2.model.AbstractAppModel;
import nc.vo.bd.bankaccount.BankAccbasVO;
import nc.vo.bd.bankdoc.BankdocVO;
import nc.vo.bd.banktype.BanktypeCodeConst;
import nc.vo.bd.psnbankacc.PsnBankaccUnionVO;
import nc.vo.org.GroupVO;
import nc.vo.org.OrgQueryUtil;
import nc.vo.org.OrgVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.ValidationException;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.uap.rbac.FuncSubInfo;
import nc.vo.uif2.LoginContext;
import org.apache.commons.lang.StringUtils;

public class PsnBankaccEditor extends BillForm implements IAutoShowUpComponent, ITabbedPaneAwareComponent, BillEditListener, IComponentWithActions {
	private static final long serialVersionUID = 1L;
	private IAutoShowUpComponent autoShowUpComponent;
	private ITabbedPaneAwareComponent tabbedPaneAwareComponent;
	private IFunNodeClosingListener closingListener;
	private IBankdocQueryService bankDocQueryService;
	private IUAPQueryBS queryService;
	private List<Action> actions = null;

	private Map<String, String> map = new HashMap();

	private BankaccnumRefPane ibanRefPane = null;

	public PsnBankaccEditor() {
		this.autoShowUpComponent = new AutoShowUpEventSource(this);
		this.tabbedPaneAwareComponent = new TabbedPaneAwareCompnonetDelegate();
	}

	public void initUI() {
		super.initUI();
		resetAccnumComponent();
		this.billCardPanel.addEditListener(this);

		UIRefPane areacodeRef = (UIRefPane) this.billCardPanel.getHeadItem("a.areacode").getComponent();

		areacodeRef.setNotLeafSelectedEnabled(false);
		UIRefPane bankaccbasRef = (UIRefPane) this.billCardPanel.getHeadItem("pk_bankaccbas").getComponent();

		bankaccbasRef.getRefModel().setMutilLangNameRef(false);
		initOrgRef();
		getBillCardPanel().setBillData(getBillCardPanel().getBillData());
	}

	private void resetAccnumComponent() {
		UIRefPane ibanRef = getIbanRefPane();
		ibanRef.getUITextField().setTextType("TextAccountStr");
		ibanRef.getUIButton().setEnabled(false);
		getBillCardPanel().getHeadItem("a.accnum").setComponent(ibanRef);

		getBillCardPanel().getHeadItem("a.accnum").setEdit(false);
	}

	private void initOrgRef() {
		UIRefPane orgPane = (UIRefPane) getBillCardPanel().getHeadItem("pk_org").getComponent();

		orgPane.getRefModel().setUseDataPower(true);

		String[] pkorgs = OrgQueryUtil.filterPkorgsByOrgType("ADMINORGTYPE00000000", getModel().getContext().getFuncInfo().getFuncPermissionPkorgs());

		orgPane.getRefModel().setFilterPks(pkorgs);
	}

	protected void setDefaultValue() {
		String pk_org = getModel().getContext().getPk_org();
		String pk_group = WorkbenchEnvironment.getInstance().getGroupVO().getPrimaryKey();

		this.billCardPanel.setHeadItem("pk_org", pk_org);

		this.billCardPanel.setHeadItem("a.pk_org", pk_org);

		this.billCardPanel.setHeadItem("a.pk_group", pk_group);

		this.billCardPanel.setHeadItem("pk_group", pk_group);

		this.billCardPanel.setHeadItem("a.accopendate", WorkbenchEnvironment.getServerTime().getDate());

		if (!StringUtils.isBlank(getModel().getContext().getPk_org())) {
			setRequestFocus(false);
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					BillItem psndoc = PsnBankaccEditor.this.getBillCardPanel().getHeadItem("pk_psndoc");
					psndoc.setEnabled(true);
					psndoc.getComponent().requestFocus(true);
					PsnBankaccEditor.this.setRequestFocus(true);
				}
			});
		}
	}

	protected void onAdd() {
		super.onAdd();

		showMeUp();

		UIRefPane psndocRefPane = (UIRefPane) this.billCardPanel.getHeadItem("pk_psndoc").getComponent();

		if (((PsnBankaccAppModel) getModel()).isPsndoc()) {
			psndocRefPane.setRefNodeName("人员");
		} else {
			psndocRefPane.setRefNodeName("HR相关人员");
		}
		((PsndocDefaultRefModel) psndocRefPane.getRefModel()).setLeavePowerUI(true);
		((PsndocDefaultRefModel) psndocRefPane.getRefModel()).setLeavePower(true);
		setBankaccNumEdit(true);
		setRefitemsWhenAdd();

		setAccnumRefVisible();

		boolean isAutoAddLine = this.billCardPanel.getBodyPanel().isAutoAddLine();
		this.billCardPanel.setBodyAutoAddLine(false);
		this.billCardPanel.addLine();
		this.billCardPanel.setBodyAutoAddLine(isAutoAddLine);
	}

	protected void onNotEdit() {
		super.onNotEdit();

		resetPsnRefWherePart();
	}

	private void setRefitemsWhenAdd() {
		String pk_org = (String) getBillCardPanel().getHeadItem("pk_org").getValueObject();

		if (!StringUtils.isBlank(pk_org)) {
			setRefwhereByOrg(pk_org);
		}

		UIRefPane bankdocRef = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_bankdoc").getComponent();

		((BankDocDefaultRefTreeModel) bankdocRef.getRefModel()).setClassWherePart(BanktypeCodeConst.BANKTYPEREFWHEREPART);

		UIRefPane banktypeRef = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_banktype").getComponent();

		banktypeRef.setWhereString("(" + BanktypeCodeConst.BANKTYPEREFWHEREPART + ")");
	}

	private void setRefwhereByOrg(String pk_org) {
		UIRefPane psndocRef = (UIRefPane) this.billCardPanel.getHeadItem("pk_psndoc").getComponent();

		psndocRef.getRefModel().setPk_org(pk_org);
		if (psndocRef.getRefNodeName().equals("人员")) {
			// begin  2023-08-25  add  lsl
			((PsndocDefaultRefModel) psndocRef.getRefModel()).setWherePart("bd_psnjob.pk_org='" + pk_org + "'");//人员工作信息任职行政组织
//			((PsndocDefaultRefModel1) psndocRef.getRefModel()).setWherePart("hi_psnjob.pk_org='" + pk_org + "'");//人员工作记录任职行政组织
			// end  2023-08-25  add  lsl
			
			((PsndocDefaultRefModel) psndocRef.getRefModel()).setMatchPkWithWherePart(true);
		}
	}

	private void resetPsnRefWherePart() {
		UIRefPane psndocRef = (UIRefPane) this.billCardPanel.getHeadItem("pk_psndoc").getComponent();

		if (psndocRef.getRefNodeName().equals("人员")) {
			((PsndocDefaultRefModel) psndocRef.getRefModel()).setWherePart(null);
			((PsndocDefaultRefModel) psndocRef.getRefModel()).setMatchPkWithWherePart(false);
		}

		if (!((PsnBankaccAppModel) getModel()).isPsndoc()) {
			psndocRef.setRefNodeName("人员");
		}
	}

	protected void onEdit() {
		super.onEdit();
		showMeUp();
		setRefitemsWhenEdit();
		this.billCardPanel.getHeadItem("pk_org").setEnabled(false);
		setRefwhereByOrg(this.billCardPanel.getHeadItem("pk_org").getValue());
		if (1 != ((PsnBankaccUnionVO) getModel().getSelectedData()).getBankaccbasVO().getEnablestate().intValue()) {
			this.billCardPanel.getHeadItem("a.accnum").setEnabled(false);
			this.billCardPanel.getHeadItem("pk_psndoc").setEnabled(false);
		}
		setAccnumRefVisible();
		setBankaccNumEdit(false);
	}

	private void setRefitemsWhenEdit() {
		PsnBankaccUnionVO uninVO = (PsnBankaccUnionVO) getModel().getSelectedData();
		String pk_banktype = uninVO.getBankaccbasVO().getPk_banktype();
		if (pk_banktype != null) {
			UIRefPane netBankTemplet = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_netbankinftp").getComponent();

			netBankTemplet.setWhereString("pk_banktype='" + pk_banktype + "'");
		}

		UIRefPane bankdocRef = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_bankdoc").getComponent();

		((BankDocDefaultRefTreeModel) bankdocRef.getRefModel()).setClassWherePart(BanktypeCodeConst.BANKTYPEREFWHEREPART);

		UIRefPane banktypeRef = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_banktype").getComponent();

		banktypeRef.setWhereString("(" + BanktypeCodeConst.BANKTYPEREFWHEREPART + ")");
	}

	public void handleEvent(AppEvent event) {
		super.handleEvent(event);
		if (event.getType().equals("Show_Editor")) {
			showMeUp();
		}
	}

	private void setBankaccNumEdit(boolean isAdd) {
		if (isAdd) {
			this.billCardPanel.getHeadItem("a.accnum").setEdit(true);
		} else {
			int enablestate = ((Integer) this.billCardPanel.getHeadItem("a.enablestate").getValueObject()).intValue();

			if (1 != enablestate) {
				this.billCardPanel.getHeadItem("a.accnum").setEdit(false);
			} else {
				this.billCardPanel.getHeadItem("a.accnum").setEdit(true);
			}
		}
	}

	public void setAutoShowUpEventListener(IAutoShowUpEventListener l) {
		this.autoShowUpComponent.setAutoShowUpEventListener(l);
	}

	public void showMeUp() {
		PsnBankaccAppModel appModel = (PsnBankaccAppModel) getModel();
		appModel.setViewType("editor");
		this.autoShowUpComponent.showMeUp();
	}

	public void addTabbedPaneAwareComponentListener(ITabbedPaneAwareComponentListener l) {
		this.tabbedPaneAwareComponent.addTabbedPaneAwareComponentListener(l);
	}

	public boolean canBeHidden() {
		if (this.closingListener != null) {
			return this.closingListener.canBeClosed();
		}
		return this.tabbedPaneAwareComponent.canBeHidden();
	}

	public boolean isComponentVisible() {
		return this.tabbedPaneAwareComponent.isComponentVisible();
	}

	public void setComponentVisible(boolean visible) {
		this.tabbedPaneAwareComponent.setComponentVisible(visible);
	}

	public void afterEdit(BillEditEvent e) {
		if (e.getKey().equals("pk_org")) {
			String pk_org = (String) this.billCardPanel.getHeadItem("pk_org").getValueObject();

			if (!StringUtils.isBlank(pk_org)) {
				setRefwhereByOrg(pk_org);

				UIRefPane bankdocRef = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_bankdoc").getComponent();

				bankdocRef.setPk_org(pk_org);
				if (!StringUtils.isBlank((String) this.map.get(pk_org))) {
					this.billCardPanel.getBillModel().setValueAt(this.map.get(pk_org), 0, "pk_currtype_ID");

					this.billCardPanel.getBillModel().loadLoadRelationItemValue(0, "pk_currtype");
				} else {
					try {
						OrgVO vo = (OrgVO) getQueryBS().retrieveByPK(OrgVO.class, pk_org, new String[] { "pk_currtype" });

						if ((vo != null) && (vo.getPk_currtype() != null)) {
							this.billCardPanel.getBillModel().setValueAt(vo.getPk_currtype(), 0, "pk_currtype_ID");

							this.billCardPanel.getBillModel().loadLoadRelationItemValue(0, "pk_currtype");
						}
					} catch (BusinessException ex) {
						Logger.error(ex);
					}
				}

				String pk_psndoc = (String) this.billCardPanel.getHeadItem("pk_psndoc").getValueObject();

				String psndoc_name = this.billCardPanel.getHeadItem("pk_psndoc.name").getValue();

				if (!StringUtils.isBlank(pk_psndoc)) {
					this.billCardPanel.getHeadItem("pk_psndoc").setValue(null);
				}
				if (!StringUtils.isBlank(psndoc_name)) {
					this.billCardPanel.getHeadItem("pk_psndoc.name").setValue(null);
				}
			}

			if (getBillCardPanel().getBillData().isImporting()) {
				UIRefPane psndocRef = (UIRefPane) this.billCardPanel.getHeadItem("pk_psndoc").getComponent();

				PsndocDefaultRefModel psnRefModel = (PsndocDefaultRefModel) psndocRef.getRefModel();

				psnRefModel.setPk_org(pk_org);
				String classWhere = " org_dept.pk_org='" + pk_org + "'";
				psnRefModel.setClassWherePart(classWhere);
				psnRefModel.setMatchPkWithWherePart(true);
				// begin  2023-08-25  add  lsl
				((PsndocDefaultRefModel) psndocRef.getRefModel()).setWherePart("bd_psnjob.pk_org='" + pk_org + "'");//人员工作信息任职行政组织
//				((PsndocDefaultRefModel1) psndocRef.getRefModel()).setWherePart("hi_psnjob.pk_org='" + pk_org + "'");//人员工作记录任职行政组织
				// end  2023-08-25  add  lsl
			}

		} else if ("a.pk_bankdoc".equals(e.getKey())) {
			setAccnumRefVisible();
			Object bankdocObj = this.billCardPanel.getHeadItem("a.pk_bankdoc").getValueObject();

			UIRefPane bankdocRef = (UIRefPane) this.billCardPanel.getHeadItem("a.pk_bankdoc").getComponent();

			BillItem banktypeItem = this.billCardPanel.getHeadItem("a.pk_banktype");
			if (bankdocObj != null) {
				Object pk_banktype = bankdocRef.getRefValue("pk_banktype");
				banktypeItem.setValue(pk_banktype);
				banktypeItem.setEnabled(false);
				try {
					BankdocVO bankdocVO = getBankDocService().getBankdocVOByPk(bankdocObj.toString());

					if (bankdocVO != null) {
						this.billCardPanel.getHeadItem("a.areacode").setValue(bankdocVO.getAreacode());

						this.billCardPanel.getHeadItem("a.combinenum").setValue(bankdocVO.getCombinenum());

						this.billCardPanel.getHeadItem("a.orgnumber").setValue(bankdocVO.getOrgnumber());

						this.billCardPanel.getHeadItem("a.bankarea").setValue(bankdocVO.getBankarea());

						this.billCardPanel.getHeadItem("a.province").setValue(bankdocVO.getProvince());

						this.billCardPanel.getHeadItem("a.city").setValue(bankdocVO.getCity());

						this.billCardPanel.getHeadItem("a.customernumber").setValue(bankdocVO.getCustomernumber());

						this.billCardPanel.getHeadItem("a.issigned").setValue(bankdocVO.getIssigned());
					}
				} catch (BusinessException be) {
					Logger.error(be.getMessage(), be);
				}
			} else {
				banktypeItem.setValue(null);
				banktypeItem.setEnabled(true);

				this.billCardPanel.getHeadItem("a.areacode").setValue(null);
				this.billCardPanel.getHeadItem("a.combinenum").setValue(null);
				this.billCardPanel.getHeadItem("a.orgnumber").setValue(null);
				this.billCardPanel.getHeadItem("a.bankarea").setValue(null);
				this.billCardPanel.getHeadItem("a.province").setValue(null);
				this.billCardPanel.getHeadItem("a.city").setValue(null);
				this.billCardPanel.getHeadItem("a.customernumber").setValue(null);
				this.billCardPanel.getHeadItem("a.issigned").setValue(null);
			}

		} else if ("a.pk_banktype".equals(e.getKey())) {
			BillItem bankdocItem = getBillCardPanel().getHeadTailItem("a.pk_bankdoc");
			BillItem banknetItem = getBillCardPanel().getHeadTailItem("a.pk_netbankinftp");

			Object banktypeObj = this.billCardPanel.getHeadItem("a.pk_banktype").getValueObject();

			UIRefPane bankdocRef = (UIRefPane) bankdocItem.getComponent();
			UIRefPane netBankRef = (UIRefPane) banknetItem.getComponent();
			if (banktypeObj != null) {
				String pk_banktype = banktypeObj.toString();
				banknetItem.setValue(null);
				bankdocItem.setValue(null);
				((BankDocDefaultRefTreeModel) bankdocRef.getRefModel()).setClassWherePart(" bd_banktype.pk_banktype='" + pk_banktype + "'");

				((NetbankTemplateDefaultRefModel) netBankRef.getRefModel()).setWherePart("bd_netbankinftp.pk_banktype='" + pk_banktype + "'");

			} else {
				((BankDocDefaultRefTreeModel) bankdocRef.getRefModel()).setClassWherePart(null);

				((NetbankTemplateDefaultRefModel) netBankRef.getRefModel()).setWherePart(null);
			}
		}
	}

	public void bodyRowChange(BillEditEvent e) {
	}

	public IFunNodeClosingListener getClosingListener() {
		return this.closingListener;
	}

	public void setClosingListener(IFunNodeClosingListener closingListener) {
		this.closingListener = closingListener;
	}

	private IBankdocQueryService getBankDocService() {
		if (null == this.bankDocQueryService) {
			this.bankDocQueryService = ((IBankdocQueryService) NCLocator.getInstance().lookup(IBankdocQueryService.class));
		}
		return this.bankDocQueryService;
	}

	private IUAPQueryBS getQueryBS() {
		if (this.queryService == null)
			this.queryService = ((IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class));
		return this.queryService;
	}

	public List<Action> getActions() {
		return this.actions;
	}

	public void setActions(List<Action> actions) {
		this.actions = actions;
	}

	private BankaccnumRefPane getIbanRefPane() {
		if (this.ibanRefPane == null) {
			this.ibanRefPane = new BankaccnumRefPane(this, "a.pk_bankdoc");

			this.ibanRefPane.setFuncode(getModel().getContext().getFuncInfo().getFuncode());
		}

		return this.ibanRefPane;
	}

	private void setAccnumRefVisible() {
		IbanUtil.setAccnumRefVisible(this, "a.accnum", "a.pk_bankdoc");
	}

	protected void beforeGetValue() {
		super.beforeGetValue();
		try {
			this.billCardPanel.dataNotNullValidate();
		} catch (ValidationException e) {
			throw new BusinessExceptionAdapter(e);
		}
	}
}

字段 人员编码 参照代码
原版,即根据人员工作信息关联查询(bd_psnjob)

package nc.ui.bd.ref.model;

import java.util.Map;
import java.util.Vector;

import javax.swing.tree.DefaultMutableTreeNode;

import nc.bs.IconResources;
import nc.bs.sec.esapi.NCESAPI;
import nc.jdbc.framework.util.DBConsts;
import nc.ui.bd.ref.AbstractRefModel;
import nc.vo.bd.psn.PsnjobVO;
import nc.vo.bd.pub.IPubEnumConst;
import nc.vo.org.DeptVO;
import nc.vo.org.OrgVO;
import nc.vo.org.util.OrgTreeCellRendererIconPolicy;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.relation.AdminDeptVO;
import nc.vo.relation.BusiFuncVO;
import nc.vo.util.SqlWhereUtil;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

/**
 * 人员档案参照 <br>
 * <b>注:<b> 可显示公司参照过滤数据(请设置UIRefPane.setMultiCorpRef(true)),否则,需设置pk_org为具体某一公司
 * 如果是跨集团的话,需设置setIsMutiGroup(true),否则默认的集团是登陆集团
 * 
 * @author jiangjuna
 */
public class PsndocDefaultNCRefModel extends PsndocDefaultRefModel {
	private String busifuncode = null;

	private String[] orgFilterPks;

	private Map<String, AbstractRefModel> filterRefMap;

	public String[] getOrgFilterPks() {
		return this.orgFilterPks;
	}

	public void setOrgFilterPks(String[] orgFilterPks) {
		this.orgFilterPks = orgFilterPks;
	}

	public PsndocDefaultNCRefModel() {
		reset();
	}

	@Override
	public void reset() {
		super.reset();
		if (StringUtils.isNotBlank(getBusifuncode())) {
			setClassFieldCode(new String[] { OrgVO.CODE, OrgVO.NAME, OrgVO.PK_ORG, OrgVO.PK_FATHERORG, OrgVO.ISBUSINESSUNIT });
			setFatherField(DeptVO.PK_FATHERORG);
			setChildField(PsnjobVO.PK_DEPT);
			setClassTableName("(select " + OrgVO.CODE + " ," + OrgVO.NAME + "," + OrgVO.NAME2 + "," + OrgVO.NAME3 + "," + OrgVO.NAME4 + "," + OrgVO.NAME5 + "," + OrgVO.NAME6 + "," + OrgVO.PK_ORG + ",case when " + OrgVO.ORGTYPE3 + " = 'Y' and isnull(" + OrgVO.PK_FATHERORG + ", '~') = '~' then " + OrgVO.PK_OWNORG + " else " + OrgVO.PK_FATHERORG + " end as " + OrgVO.PK_FATHERORG + "," + OrgVO.ISBUSINESSUNIT + "," + OrgVO.ENABLESTATE + "," + OrgVO.PK_OWNORG + " , " + OrgVO.ORGTYPE3 + " from " + OrgVO.getDefaultTableName() + " where (" + OrgVO.ORGTYPE3 + " = 'Y' or " + OrgVO.ISBUSINESSUNIT + " = 'Y')) temp_dept");
			// setClassDataPower(false);
			setClassJoinField(OrgVO.PK_ORG);
		}
		this.setTreeIconPolicy(new OrgTreeCellRendererIconPolicy(IconResources.ICON_Bu) {
			public String getSpecialNodeIcon(Object curTreeNode) {
				if (curTreeNode instanceof DefaultMutableTreeNode && StringUtils.isNotBlank(getBusifuncode())) {
					DefaultMutableTreeNode n = (DefaultMutableTreeNode) curTreeNode;
					Object o = n.getUserObject();
					if (o instanceof Vector) {
						@SuppressWarnings("rawtypes")
						Vector v = ((Vector) o);
						String isbusinessunit = (String) v.get(getClassFieldIndex(OrgVO.ISBUSINESSUNIT));
						if (UFBoolean.valueOf(isbusinessunit).booleanValue()) {
							return IconResources.ICON_Bu;
						} else {
							return IconResources.ICON_Department;
						}
					}
				}
				return null;
			}
		});
		
		// 显示人员工作信息的任职部门   
		setFieldCode(new String[] { "bd_psndoc.code", "bd_psndoc.name", "bd_psnjob.pk_dept" });
		setFieldName(new String[] { nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065")/*人员编码*/, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066")/*人员姓名*/, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085")/*部门名称*/ });// "编码","姓名","部门"
		
		// 显示人员工作信息的任职部门   
		String deptFomula = "getMLCValue(" + DeptVO.getDefaultTableName() + ", " + DeptVO.NAME + ", " + DeptVO.PK_DEPT + ", " + "bd_psnjob.pk_dept" + ")";
		setFormulas(new String[][] { { "bd_psnjob.pk_dept", deptFomula } });
				
		setHiddenFieldCode(new String[] { "bd_psndoc.pk_psndoc", "bd_psnjob.pk_psnjob", "bd_psndoc.idtype", "bd_psndoc.id" });
		setDefaultFieldCount(3);

		// if (!ArrayUtils.isEmpty(orgFilterPks)) {
		// this.getFilterRefModel("业务单元").setFilterPks(orgFilterPks);/*
		// -=notranslate=- */
		// }
	}

	public void setFilterRefMap(Map<String, AbstractRefModel> filterRefMap) {
		this.filterRefMap = filterRefMap;
		if (!ArrayUtils.isEmpty(orgFilterPks) && this.getFilterRefModel("业务单元") != null) {
			this.getFilterRefModel("业务单元").setFilterPks(orgFilterPks);/*
																		 * -=notranslate= -
																		 */
		}
	}

	public AbstractRefModel getFilterRefModel(String refNodeName) {
		if (this.filterRefMap == null) {
			return null;
		}
		return this.filterRefMap.get(refNodeName);
	}

	public void setBusifuncode(String busifuncode) {
		this.busifuncode = busifuncode;
		reset();
	}

	public String getBusifuncode() {
		if (getKeyValueExtendMap() != null) {
			if (getKeyValueExtendMap().get(IBusiConst.BUSIFUNCODE) != null) {
				return getKeyValueExtendMap().get(IBusiConst.BUSIFUNCODE).toLowerCase();
			}
		}
		return busifuncode;
	}

	@Override
	public String getClassWherePart() {
		if (StringUtils.isNotBlank(getBusifuncode())) {
			SqlWhereUtil sw = new SqlWhereUtil();
			sw.and(OrgVO.ENABLESTATE + " = " + IPubEnumConst.ENABLESTATE_ENABLE);
			sw.and();
			sw.l();
			sw.s(OrgVO.PK_ORG + " in (select " + AdminDeptVO.PK_ADMINORG + " from " + AdminDeptVO.getDefaultTableName() + " where (enablestate = 2) and " + getBusifuncCondition() + ")");
			sw.or(" (" + OrgVO.PK_OWNORG + " in (select " + AdminDeptVO.PK_ADMINORG + " from " + AdminDeptVO.getDefaultTableName() + " where (enablestate = 2) and " + getBusifuncCondition() + " and isnull(" + AdminDeptVO.PK_DEPT + ", '" + DBConsts.NULL_WAVE + "') = '" + DBConsts.NULL_WAVE + "') and " + OrgVO.ORGTYPE3 + " = 'Y')");
			sw.or(OrgVO.PK_ORG + " in (select " + AdminDeptVO.PK_DEPT + " from " + AdminDeptVO.getDefaultTableName() + " where (enablestate = 2) and " + getBusifuncCondition() + " )");
			sw.or(OrgVO.PK_ORG + " = '" + getPk_org() + "'");
			sw.or(OrgVO.PK_OWNORG + " = '" + getPk_org() + "'");
			sw.r();
			return sw.getSQLWhere();
		} else {
			return super.getClassWherePart();
		}
	}

	protected String getEnvWherePart() {
		if (StringUtils.isNotBlank(getBusifuncode())) {
			SqlWhereUtil sw = new SqlWhereUtil();
			sw.and();
			sw.l();
			sw.and(PsnjobVO.getDefaultTableName() + "." + PsnjobVO.PK_ORG + " in (select " + AdminDeptVO.PK_ADMINORG + " from " + AdminDeptVO.getDefaultTableName() + " where  " + getBusifuncCondition() + " and isnull(" + AdminDeptVO.PK_DEPT + ", '" + DBConsts.NULL_WAVE + "') = '" + DBConsts.NULL_WAVE + "')");
			sw.or(PsnjobVO.getDefaultTableName() + "." + PsnjobVO.PK_DEPT + " in (select " + AdminDeptVO.PK_DEPT + " from " + AdminDeptVO.getDefaultTableName() + " where  " + getBusifuncCondition() + " )");
			sw.or(PsnjobVO.getDefaultTableName() + "." + PsnjobVO.PK_ORG + " = '" + NCESAPI.clientSqlEncode(getPk_org()) + "'");
			sw.r();
			return sw.getSQLWhere() + getIsLeaveCondition();
		} else {
			return super.getEnvWherePart();
		}
	}

	private String getBusifuncCondition() {
		// 使用all是因为构造安装盘使用的NC_HOME是19号之前的, IPubEnumConst中不包含all常量
		if (getBusifuncode().equals("all")) {
			return AdminDeptVO.PK_BUSIROLE + " in (select " + BusiFuncVO.PK_BUSICHILD + " from " + BusiFuncVO.getDefaultTableName() + " where " + BusiFuncVO.PK_ORG + " = '" + NCESAPI.clientSqlEncode(getPk_org()) + "')";
		} else {
			return AdminDeptVO.PK_BUSIROLE + " in (select " + BusiFuncVO.PK_BUSICHILD + " from " + BusiFuncVO.getDefaultTableName() + " where " + BusiFuncVO.PK_ORG + " = '" + NCESAPI.clientSqlEncode(getPk_org()) + "' and " + BusiFuncVO.ORG_FUNCTION + " like '%" + NCESAPI.clientSqlEncode(getBusifuncode()) + "%')";
		}
	}

}

package nc.ui.bd.ref.model;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.Vector;

import nc.itf.bd.pub.IBDResourceIDConstBasic;
import nc.itf.org.IOrgResourceCodeConstBasic;
import nc.ui.bd.ref.AbstractRefGridTreeBigDataModel;
import nc.ui.bd.ref.IRefConst;
import nc.ui.bd.ref.IRefDocEdit;
import nc.ui.bd.ref.IRefMaintenanceHandler;
import nc.ui.bd.ref.RefSearchFieldSetting;
import nc.ui.pub.beans.ValueChangedEvent;
import nc.vo.bd.psn.PsndocVO;
import nc.vo.bd.psn.PsnjobVO;
import nc.vo.bd.psn.util.GetBusiDateUtil;
import nc.vo.org.DeptVO;
import nc.vo.pub.lang.UFLiteralDate;
import nc.vo.util.SqlWhereUtil;

/**
 * 人员档案参照 <br>
 * <b>注:<b> 可显示公司参照过滤数据(请设置UIRefPane.setMultiCorpRef(true)),否则,需设置pk_org为具体某一公司
 * 如果是跨集团的话,需设置setIsMutiGroup(true),否则默认的集团是登陆集团
 * 
 * @author jiangjuna
 * 
 */
public class PsndocDefaultRefModel extends AbstractRefGridTreeBigDataModel {
	private boolean isMutiGroup = false;

	// 显示离职人员在界面上的开关,默认不开启
	private boolean leavePowerUI = false;

	/* 离职人员开关,默认为false,即不显示离职人员,true为显示离职人员 */
	private boolean leavePower = false;

	// 获取业务日期
	private UFLiteralDate nowDate = getNowDate();

	public PsndocDefaultRefModel() {
		reset();

	}

	@SuppressWarnings({ "unchecked", "static-access" })
	@Override
	public void reset() {
		setRefNodeName("人员");/* -=notranslate=- */
		if (isLeavePowerUI()) {
			setUiControlComponentClassName("nc.ui.bd.psn.psndoc.ref.busi.PsndocRefModelWithLeavedSelectedPanel");
		}
		setRootName(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085"));// 部门
		setClassFieldCode(new String[] { DeptVO.CODE, DeptVO.NAME, DeptVO.PK_DEPT, DeptVO.PK_FATHERORG });
		setFatherField(DeptVO.PK_FATHERORG);
		setChildField(PsnjobVO.PK_DEPT);
		setClassJoinField(PsnjobVO.PK_DEPT);
		setClassTableName(new DeptVO().getDefaultTableName());
		setClassDefaultFieldCount(2);
		setClassDataPower(true);
		setFieldCode(new String[] { "bd_psndoc.code", "bd_psndoc.name", "bd_psnjob.pk_dept" });
		setFieldName(new String[] { nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065"), nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066"), nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085") });// "编码", "姓名", "部门"
		setDefaultFieldCount(3);
		// 不增加隐藏的pk_dept字段,匹配时不能直接选中相应的树节点
		setHiddenFieldCode(new String[] { "bd_psndoc.pk_psndoc", "bd_psndoc.idtype", "bd_psndoc.id" });
		setTableName("bd_psndoc left join bd_psnjob on bd_psndoc.pk_psndoc = bd_psnjob.pk_psndoc");
		setPkFieldCode("bd_psndoc.pk_psndoc");
		setDocJoinField("bd_psnjob.pk_dept");
		setRefCodeField("bd_psndoc.code");
		setRefNameField("bd_psndoc.name");
//		setCommonDataBasDocTableName(new PsnjobVO().getTableName());
//		setCommonDataBasDocPkField("bd_psnjob.pk_psnjob");
		setCommonDataTableName(new PsndocVO().getTableName());

		String strFomula = "getmlcvalue(\"org_dept\",\"name\",\"pk_dept\",bd_psnjob.pk_dept)";
		setFormulas(new String[][] { { "bd_psnjob.pk_dept", strFomula } });

		if (!isMutiGroup())
			setFilterRefNodeName(new String[] { "业务单元" });/* -=notranslate=- */
		else
			setFilterRefNodeName(new String[] { "集团", "业务单元" /* -=notranslate=- */ });
		setResourceID(IBDResourceIDConstBasic.PSNDOC);
		setClassResouceID(IOrgResourceCodeConstBasic.DEPT);
		setAddEnableStateWherePart(true);
		// 过滤重复数据
		setStrPatch(IRefConst.DISTINCT);
		resetFieldName();
		Hashtable content = new Hashtable();
		content.put("0", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0098"));// 身份证
		content.put("1", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0099"));// 军官证
		content.put("2", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0100"));// 护照
		Hashtable convert = new Hashtable();
		convert.put("bd_psndoc.idtype", content);
		setDispConvertor(convert);
		setBlurQueryTableName("bd_psndoc");
		setRefMaintenanceHandler(new IRefMaintenanceHandler() {

			@Override
			public String[] getFucCodes() {
				return new String[] { "10140PSN" };
			}

			@Override
			public IRefDocEdit getRefDocEdit() {
				return null;
			}
		});
		// ------------------------------------------指定全文检索相关的设置信息-------------------------
		// 所有的搜索列及列描述
		Map<String, String> allFields = new HashMap<String, String>();
		allFields.put("name", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066")/* 姓名 */);
		allFields.put("code", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065")/* 编码 */);

		// 黙认的搜索列,按顺序进行搜索
		String[] defaultSearchFields = new String[] { "code", "name" };

		// 需要指定当前参照的nodeName
		String refNodeName = "人员"/* -=notranslate=- */;
		RefSearchFieldSetting setting = new RefSearchFieldSetting(refNodeName, allFields, defaultSearchFields);
		setSearchFieldSetting(setting);

		// -------------------------------------------------------------------------------------------
	}

	@Override
	protected Vector getConvertedData(boolean isDataFromCache, Vector v, boolean isDefConverted) {
		Vector rows = super.getConvertedData(isDataFromCache, v, isDefConverted);
		if (rows == null || rows.size() == 0) {
			return rows;
		}
		int pkIndex = getFieldIndex(getPkFieldCode());
		Set<String> existPkSet = new HashSet<String>();
		Vector<Vector> newRows = new Vector<Vector>();
		for (int i = 0; i < rows.size(); i++) {
			Vector row = (Vector) rows.get(i);
			if (!existPkSet.contains(row.get(pkIndex))) {
				existPkSet.add((String) row.get(pkIndex));
				newRows.add(row);
			}
		}
		return newRows;
	}

	@Override
	public void filterValueChanged(ValueChangedEvent changedValue) {
		String[] pk_orgs = (String[]) changedValue.getNewValue();
		if (pk_orgs != null && pk_orgs.length > 0 && pk_orgs[0] != null) {
			if (!pk_orgs[0].equals(getFilterRefModel("业务单元"/* -=notranslate=- */).getPkValue())) {
				getFilterRefModel("业务单元"/* -=notranslate=- */).setPk_group(pk_orgs[0]);
				getFilterRefModel("业务单元"/* -=notranslate=- */).reloadData();
				setPk_org(null);
			} else {
				setPk_org(pk_orgs[0]);
			}

		} else {
			if (getFilterRefModel("业务单元"/* -=notranslate=- */).getPkValue() != null) {
				getFilterRefModel("业务单元"/* -=notranslate=- */).setPk_group(null);
				setPk_org(null);
			} else {
				setPk_org(null);
			}
		}
	}

	@Override
	public String getClassWherePart() {
		SqlWhereUtil sw = new SqlWhereUtil(super.getClassWherePart());
		sw.and(DeptVO.PK_ORG + " = '" + getPk_org() + "' and " + DeptVO.ENABLESTATE + "=2");
		return sw.getSQLWhere();
	}

	protected String getEnvWherePart() {
		// 按工作信息的任职业务单元过滤显示的数据
		return "bd_psnjob.pk_org = '" + getPk_org() + "'" + getIsLeaveCondition();
	}

	protected String getIsLeaveCondition() {
		if (isLeavePowerUI()) {// 界面开关开启
			if (isLeavePower()) {
				// 显示离职人员,包括停用人员,不在这里设置,否则界面输入的值要被清空
//				setDisabledDataShow(true);
				return "";
			} else {
				// 显示在职的人员,是否停用由参照统一控制
				return " and bd_psnjob.indutydate <='" + nowDate + "' and (bd_psnjob.enddutydate >='" + nowDate + "' or bd_psnjob.enddutydate ='~'" + " or bd_psnjob.enddutydate is null)";
			}
		} else {// 界面开关不开启,显示在职的已启用人员
			return " and bd_psnjob.indutydate <='" + nowDate + "' and (bd_psnjob.enddutydate >='" + nowDate + "' or bd_psnjob.enddutydate ='~'" + " or bd_psnjob.enddutydate is null)";
		}
	}

	public boolean isMutiGroup() {
		return isMutiGroup;
	}

	public void setMutiGroup(boolean isMutiGroup) {
		this.isMutiGroup = isMutiGroup;
		if (isMutiGroup()) {
			setFilterRefNodeName(new String[] { "集团", "业务单元"/* -=notranslate=- */ });
		} else {
			setFilterRefNodeName(new String[] { "业务单元" });/* -=notranslate=- */
		}
	}

	public boolean isLeavePower() {
		return leavePower;
	}

	public void setLeavePower(boolean leavePower) {
		this.leavePower = leavePower;
	}

	public void setNowDate(UFLiteralDate nowDate) {
		this.nowDate = nowDate;
	}

	private UFLiteralDate getNowDate() {
		if (nowDate == null) {
			nowDate = new GetBusiDateUtil().getNowDate();
		}
		return nowDate;
	}

	public boolean isLeavePowerUI() {
		return leavePowerUI;
	}

	public void setLeavePowerUI(boolean leavePowerUI) {
		this.leavePowerUI = leavePowerUI;
		reset();
	}
}

根据 人员任职记录 关联查询(hi_psnjob)

package nc.ui.bd.ref.model;

import java.util.Map;
import java.util.Vector;

import javax.swing.tree.DefaultMutableTreeNode;

import nc.bs.IconResources;
import nc.bs.sec.esapi.NCESAPI;
import nc.jdbc.framework.util.DBConsts;
import nc.ui.bd.ref.AbstractRefModel;
import nc.vo.bd.psn.PsnjobVO;
import nc.vo.bd.pub.IPubEnumConst;
import nc.vo.org.DeptVO;
import nc.vo.org.OrgVO;
import nc.vo.org.util.OrgTreeCellRendererIconPolicy;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.relation.AdminDeptVO;
import nc.vo.relation.BusiFuncVO;
import nc.vo.util.SqlWhereUtil;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

/**
 * 人员档案参照 <br>
 * <b>注:<b> 可显示公司参照过滤数据(请设置UIRefPane.setMultiCorpRef(true)),否则,需设置pk_org为具体某一公司
 * 如果是跨集团的话,需设置setIsMutiGroup(true),否则默认的集团是登陆集团
 * 
 * @author jiangjuna
 */
public class PsndocDefaultNCRefModel1 extends PsndocDefaultRefModel1 {
	private String busifuncode = null;

	private String[] orgFilterPks;

	private Map<String, AbstractRefModel> filterRefMap;

	public String[] getOrgFilterPks() {
		return this.orgFilterPks;
	}

	public void setOrgFilterPks(String[] orgFilterPks) {
		this.orgFilterPks = orgFilterPks;
	}

	public PsndocDefaultNCRefModel1() {
		reset();
	}

	@Override
	public void reset() {
		super.reset();
		if (StringUtils.isNotBlank(getBusifuncode())) {
			setClassFieldCode(new String[] { OrgVO.CODE, OrgVO.NAME, OrgVO.PK_ORG, OrgVO.PK_FATHERORG, OrgVO.ISBUSINESSUNIT });
			setFatherField(DeptVO.PK_FATHERORG);
			setChildField(PsnjobVO.PK_DEPT);
			setClassTableName("(select " + OrgVO.CODE + " ," + OrgVO.NAME + "," + OrgVO.NAME2 + "," + OrgVO.NAME3 + "," + OrgVO.NAME4 + "," + OrgVO.NAME5 + "," + OrgVO.NAME6 + "," + OrgVO.PK_ORG + ",case when " + OrgVO.ORGTYPE3 + " = 'Y' and isnull(" + OrgVO.PK_FATHERORG + ", '~') = '~' then " + OrgVO.PK_OWNORG + " else " + OrgVO.PK_FATHERORG + " end as " + OrgVO.PK_FATHERORG + "," + OrgVO.ISBUSINESSUNIT + "," + OrgVO.ENABLESTATE + "," + OrgVO.PK_OWNORG + " , " + OrgVO.ORGTYPE3 + " from " + OrgVO.getDefaultTableName() + " where (" + OrgVO.ORGTYPE3 + " = 'Y' or " + OrgVO.ISBUSINESSUNIT + " = 'Y')) temp_dept");
			// setClassDataPower(false);
			setClassJoinField(OrgVO.PK_ORG);
		}
		this.setTreeIconPolicy(new OrgTreeCellRendererIconPolicy(IconResources.ICON_Bu) {
			public String getSpecialNodeIcon(Object curTreeNode) {
				if (curTreeNode instanceof DefaultMutableTreeNode && StringUtils.isNotBlank(getBusifuncode())) {
					DefaultMutableTreeNode n = (DefaultMutableTreeNode) curTreeNode;
					Object o = n.getUserObject();
					if (o instanceof Vector) {
						@SuppressWarnings("rawtypes")
						Vector v = ((Vector) o);
						String isbusinessunit = (String) v.get(getClassFieldIndex(OrgVO.ISBUSINESSUNIT));
						if (UFBoolean.valueOf(isbusinessunit).booleanValue()) {
							return IconResources.ICON_Bu;
						} else {
							return IconResources.ICON_Department;
						}
					}
				}
				return null;
			}
		});
		
		//begin   2023-08-29   add  lsl
		// 显示人员工作信息的任职部门   
//		setFieldCode(new String[] { "bd_psndoc.code", "bd_psndoc.name", "bd_psnjob.pk_dept" });
		// 显示人员任职记录的任职部门   
		setFieldCode(new String[] { "bd_psndoc.code", "bd_psndoc.name", "hi_psnjob.pk_dept" });
		
		setFieldName(new String[] { nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065")/*人员编码*/, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066")/*人员姓名*/, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085")/*部门名称*/ });// "编码","姓名","部门"
		
		// 显示人员工作信息的任职部门   
//		String deptFomula = "getMLCValue(" + DeptVO.getDefaultTableName() + ", " + DeptVO.NAME + ", " + DeptVO.PK_DEPT + ", " + "bd_psnjob.pk_dept" + ")";
//		setFormulas(new String[][] { { "bd_psnjob.pk_dept", deptFomula } });
		// 显示人员任职记录的任职部门  
		String deptFomula = "getMLCValue(" + DeptVO.getDefaultTableName() + ", " + DeptVO.NAME + ", " + DeptVO.PK_DEPT + ", " + "hi_psnjob.pk_dept" + ")";
		setFormulas(new String[][] { { "hi_psnjob.pk_dept", deptFomula } });
		//end   2023-08-29   add  lsl
		
		setHiddenFieldCode(new String[] { "bd_psndoc.pk_psndoc", "bd_psnjob.pk_psnjob", "bd_psndoc.idtype", "bd_psndoc.id" });
		setDefaultFieldCount(3);

		// if (!ArrayUtils.isEmpty(orgFilterPks)) {
		// this.getFilterRefModel("业务单元").setFilterPks(orgFilterPks);/*
		// -=notranslate=- */
		// }
	}

	public void setFilterRefMap(Map<String, AbstractRefModel> filterRefMap) {
		this.filterRefMap = filterRefMap;
		if (!ArrayUtils.isEmpty(orgFilterPks) && this.getFilterRefModel("业务单元") != null) {
			this.getFilterRefModel("业务单元").setFilterPks(orgFilterPks);/*
																		 * -=notranslate= -
																		 */
		}
	}

	public AbstractRefModel getFilterRefModel(String refNodeName) {
		if (this.filterRefMap == null) {
			return null;
		}
		return this.filterRefMap.get(refNodeName);
	}

	public void setBusifuncode(String busifuncode) {
		this.busifuncode = busifuncode;
		reset();
	}

	public String getBusifuncode() {
		if (getKeyValueExtendMap() != null) {
			if (getKeyValueExtendMap().get(IBusiConst.BUSIFUNCODE) != null) {
				return getKeyValueExtendMap().get(IBusiConst.BUSIFUNCODE).toLowerCase();
			}
		}
		return busifuncode;
	}

	@Override
	public String getClassWherePart() {
		if (StringUtils.isNotBlank(getBusifuncode())) {
			SqlWhereUtil sw = new SqlWhereUtil();
			sw.and(OrgVO.ENABLESTATE + " = " + IPubEnumConst.ENABLESTATE_ENABLE);
			sw.and();
			sw.l();
			sw.s(OrgVO.PK_ORG + " in (select " + AdminDeptVO.PK_ADMINORG + " from " + AdminDeptVO.getDefaultTableName() + " where (enablestate = 2) and " + getBusifuncCondition() + ")");
			sw.or(" (" + OrgVO.PK_OWNORG + " in (select " + AdminDeptVO.PK_ADMINORG + " from " + AdminDeptVO.getDefaultTableName() + " where (enablestate = 2) and " + getBusifuncCondition() + " and isnull(" + AdminDeptVO.PK_DEPT + ", '" + DBConsts.NULL_WAVE + "') = '" + DBConsts.NULL_WAVE + "') and " + OrgVO.ORGTYPE3 + " = 'Y')");
			sw.or(OrgVO.PK_ORG + " in (select " + AdminDeptVO.PK_DEPT + " from " + AdminDeptVO.getDefaultTableName() + " where (enablestate = 2) and " + getBusifuncCondition() + " )");
			sw.or(OrgVO.PK_ORG + " = '" + getPk_org() + "'");
			sw.or(OrgVO.PK_OWNORG + " = '" + getPk_org() + "'");
			sw.r();
			return sw.getSQLWhere();
		} else {
			return super.getClassWherePart();
		}
	}

	protected String getEnvWherePart() {
		if (StringUtils.isNotBlank(getBusifuncode())) {
			SqlWhereUtil sw = new SqlWhereUtil();
			sw.and();
			sw.l();
			sw.and(PsnjobVO.getDefaultTableName() + "." + PsnjobVO.PK_ORG + " in (select " + AdminDeptVO.PK_ADMINORG + " from " + AdminDeptVO.getDefaultTableName() + " where  " + getBusifuncCondition() + " and isnull(" + AdminDeptVO.PK_DEPT + ", '" + DBConsts.NULL_WAVE + "') = '" + DBConsts.NULL_WAVE + "')");
			sw.or(PsnjobVO.getDefaultTableName() + "." + PsnjobVO.PK_DEPT + " in (select " + AdminDeptVO.PK_DEPT + " from " + AdminDeptVO.getDefaultTableName() + " where  " + getBusifuncCondition() + " )");
			sw.or(PsnjobVO.getDefaultTableName() + "." + PsnjobVO.PK_ORG + " = '" + NCESAPI.clientSqlEncode(getPk_org()) + "'");
			sw.r();
			return sw.getSQLWhere() + getIsLeaveCondition();
		} else {
			return super.getEnvWherePart();
		}
	}

	private String getBusifuncCondition() {
		// 使用all是因为构造安装盘使用的NC_HOME是19号之前的, IPubEnumConst中不包含all常量
		if (getBusifuncode().equals("all")) {
			return AdminDeptVO.PK_BUSIROLE + " in (select " + BusiFuncVO.PK_BUSICHILD + " from " + BusiFuncVO.getDefaultTableName() + " where " + BusiFuncVO.PK_ORG + " = '" + NCESAPI.clientSqlEncode(getPk_org()) + "')";
		} else {
			return AdminDeptVO.PK_BUSIROLE + " in (select " + BusiFuncVO.PK_BUSICHILD + " from " + BusiFuncVO.getDefaultTableName() + " where " + BusiFuncVO.PK_ORG + " = '" + NCESAPI.clientSqlEncode(getPk_org()) + "' and " + BusiFuncVO.ORG_FUNCTION + " like '%" + NCESAPI.clientSqlEncode(getBusifuncode()) + "%')";
		}
	}

}

package nc.ui.bd.ref.model;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.Vector;

import nc.itf.bd.pub.IBDResourceIDConstBasic;
import nc.itf.org.IOrgResourceCodeConstBasic;
import nc.ui.bd.ref.AbstractRefGridTreeBigDataModel;
import nc.ui.bd.ref.IRefConst;
import nc.ui.bd.ref.IRefDocEdit;
import nc.ui.bd.ref.IRefMaintenanceHandler;
import nc.ui.bd.ref.RefSearchFieldSetting;
import nc.ui.pub.beans.ValueChangedEvent;
import nc.vo.bd.psn.PsndocVO;
import nc.vo.bd.psn.PsnjobVO;
import nc.vo.hi.psndoc.PsnJobVO;
import nc.vo.bd.psn.util.GetBusiDateUtil;
import nc.vo.org.DeptVO;
import nc.vo.pub.lang.UFLiteralDate;
import nc.vo.util.SqlWhereUtil;

/**
 * 人员档案参照 <br>
 * 
 * 关联人员任职记录即hi_psnjob查询,这样查询就可以到跨组织跨部门退休的人,比如B组织 综合部421这个人退休了,挂在A组织的离退休部门下。<br>
 * 如果是关联人员工作信息即表bd_psnjob,做了退休事件后,在人员银行账户新增的时候,所属业务单元(组织)选择是A,然后在人员编码这个字段参照中,部门选择为离退休时,查询不到421这个人,需要选B组织的综合部才可以查询到。<br>
 * 
 * <b>注:<b> 可显示公司参照过滤数据(请设置UIRefPane.setMultiCorpRef(true)),否则,需设置pk_org为具体某一公司
 * 如果是跨集团的话,需设置setIsMutiGroup(true),否则默认的集团是登陆集团
 * 
 * @author jiangjuna
 * 
 */
public class PsndocDefaultRefModel1 extends AbstractRefGridTreeBigDataModel {
	private boolean isMutiGroup = false;

	// 显示离职人员在界面上的开关,默认不开启
	private boolean leavePowerUI = false;

	/* 离职人员开关,默认为false,即不显示离职人员,true为显示离职人员 */
	private boolean leavePower = false;

	// 获取业务日期
	private UFLiteralDate nowDate = getNowDate();

	public PsndocDefaultRefModel1() {
		reset();

	}

	@SuppressWarnings({ "unchecked", "static-access" })
	@Override
	public void reset() {
		setRefNodeName("人员任职记录");/* -=notranslate=- */
		if (isLeavePowerUI()) {
			setUiControlComponentClassName("nc.ui.bd.psn.psndoc.ref.busi.PsndocRefModelWithLeavedSelectedPanel");
		}
		setRootName(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085"));// 部门
		setClassFieldCode(new String[] { DeptVO.CODE, DeptVO.NAME, DeptVO.PK_DEPT, DeptVO.PK_FATHERORG });
		setFatherField(DeptVO.PK_FATHERORG);
		//begin  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
//		setChildField(PsnjobVO.PK_DEPT);
//		setClassJoinField(PsnjobVO.PK_DEPT);

		setChildField(PsnJobVO.PK_DEPT);
		setClassJoinField(PsnJobVO.PK_DEPT);
		//end  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
		
		setClassTableName(new DeptVO().getDefaultTableName());
		setClassDefaultFieldCount(2);
		setClassDataPower(true);
		
		//begin  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
//		setFieldCode(new String[] { "bd_psndoc.code", "bd_psndoc.name", "bd_psnjob.pk_dept" });
//		setFieldName(new String[] { nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065"), nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066"), nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085") });// "编码", "姓名", "部门"
		
		setFieldCode(new String[] { "bd_psndoc.code", "bd_psndoc.name", "hi_psnjob.pk_dept" });
		setFieldName(new String[] { nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065"), nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066"), nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0085") });// "编码", "姓名", "部门"
		//end  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
		
		setDefaultFieldCount(3);
		// 不增加隐藏的pk_dept字段,匹配时不能直接选中相应的树节点
		setHiddenFieldCode(new String[] { "bd_psndoc.pk_psndoc", "bd_psndoc.idtype", "bd_psndoc.id" });
		setTableName("bd_psndoc left join bd_psnjob on bd_psndoc.pk_psndoc = bd_psnjob.pk_psndoc left join hi_psnjob on bd_psndoc.pk_psndoc = hi_psnjob.pk_psndoc");
		setPkFieldCode("bd_psndoc.pk_psndoc");
		//begin  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
//		setDocJoinField("bd_psnjob.pk_dept");
		setDocJoinField("hi_psnjob.pk_dept");
		//end  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
		
		setRefCodeField("bd_psndoc.code");
		setRefNameField("bd_psndoc.name");
//		setCommonDataBasDocTableName(new PsnjobVO().getTableName());
//		setCommonDataBasDocPkField("bd_psnjob.pk_psnjob");
		setCommonDataTableName(new PsndocVO().getTableName());
		
		//begin  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29
//		String strFomula = "getmlcvalue(org_dept, name,pk_dept, bd_psnjob.pk_dept)";
//		setFormulas(new String[][] { { "bd_psnjob.pk_dept", strFomula } });
		
		String strFomula = "getmlcvalue(org_dept, name, pk_dept, hi_psnjob.pk_dept)";
		setFormulas(new String[][] { { "hi_psnjob.pk_dept", strFomula } });
		//begin  把人员工作信息的部门换成人员任职记录的部门    add  lsl   2023-08-29

		if (!isMutiGroup())
			setFilterRefNodeName(new String[] { "业务单元" });/* -=notranslate=- */
		else
			setFilterRefNodeName(new String[] { "集团", "业务单元" /* -=notranslate=- */ });
		setResourceID(IBDResourceIDConstBasic.PSNDOC);
		setClassResouceID(IOrgResourceCodeConstBasic.DEPT);
		setAddEnableStateWherePart(true);
		// 过滤重复数据
		setStrPatch(IRefConst.DISTINCT);
		resetFieldName();
		Hashtable content = new Hashtable();
		content.put("0", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0098"));// 身份证
		content.put("1", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0099"));// 军官证
		content.put("2", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0100"));// 护照
		Hashtable convert = new Hashtable();
		convert.put("bd_psndoc.idtype", content);
		setDispConvertor(convert);
		setBlurQueryTableName("bd_psndoc");
		setRefMaintenanceHandler(new IRefMaintenanceHandler() {

			@Override
			public String[] getFucCodes() {
				return new String[] { "10140PSN" };
			}

			@Override
			public IRefDocEdit getRefDocEdit() {
				return null;
			}
		});
		// ------------------------------------------指定全文检索相关的设置信息-------------------------
		// 所有的搜索列及列描述
		Map<String, String> allFields = new HashMap<String, String>();
		allFields.put("name", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0066")/* 姓名 */);
		allFields.put("code", nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("10140psn", "010140psn0065")/* 编码 */);

		// 黙认的搜索列,按顺序进行搜索
		String[] defaultSearchFields = new String[] { "code", "name" };

		// 需要指定当前参照的nodeName
		String refNodeName = "人员"/* -=notranslate=- */;
		RefSearchFieldSetting setting = new RefSearchFieldSetting(refNodeName, allFields, defaultSearchFields);
		setSearchFieldSetting(setting);

		// -------------------------------------------------------------------------------------------
	}

	@Override
	protected Vector getConvertedData(boolean isDataFromCache, Vector v, boolean isDefConverted) {
		Vector rows = super.getConvertedData(isDataFromCache, v, isDefConverted);
		if (rows == null || rows.size() == 0) {
			return rows;
		}
		int pkIndex = getFieldIndex(getPkFieldCode());
		Set<String> existPkSet = new HashSet<String>();
		Vector<Vector> newRows = new Vector<Vector>();
		for (int i = 0; i < rows.size(); i++) {
			Vector row = (Vector) rows.get(i);
			if (!existPkSet.contains(row.get(pkIndex))) {
				existPkSet.add((String) row.get(pkIndex));
				newRows.add(row);
			}
		}
		return newRows;
	}

	@Override
	public void filterValueChanged(ValueChangedEvent changedValue) {
		String[] pk_orgs = (String[]) changedValue.getNewValue();
		if (pk_orgs != null && pk_orgs.length > 0 && pk_orgs[0] != null) {
			if (!pk_orgs[0].equals(getFilterRefModel("业务单元"/* -=notranslate=- */).getPkValue())) {
				getFilterRefModel("业务单元"/* -=notranslate=- */).setPk_group(pk_orgs[0]);
				getFilterRefModel("业务单元"/* -=notranslate=- */).reloadData();
				setPk_org(null);
			} else {
				setPk_org(pk_orgs[0]);
			}

		} else {
			if (getFilterRefModel("业务单元"/* -=notranslate=- */).getPkValue() != null) {
				getFilterRefModel("业务单元"/* -=notranslate=- */).setPk_group(null);
				setPk_org(null);
			} else {
				setPk_org(null);
			}
		}
	}

	@Override
	public String getClassWherePart() {
		SqlWhereUtil sw = new SqlWhereUtil(super.getClassWherePart());
		sw.and(DeptVO.PK_ORG + " = '" + getPk_org() + "' and " + DeptVO.ENABLESTATE + "=2");
		return sw.getSQLWhere();
	}

	protected String getEnvWherePart() {
		// begin  2023-08-24  add  lsl
		// 按工作信息的任职业务单元过滤显示的数据
//		return "bd_psnjob.pk_org = '" + getPk_org() + "'" + getIsLeaveCondition();
		// 按人员任职记录的任职组织单元过滤显示的数据
		return "hi_psnjob.pk_org = '" + getPk_org() + "'" + getIsLeaveCondition();
		// end  2023-08-24  add  lsl
	}

	protected String getIsLeaveCondition() {
		if (isLeavePowerUI()) {// 界面开关开启
			if (isLeavePower()) {
				// 显示离职人员,包括停用人员,不在这里设置,否则界面输入的值要被清空
//				setDisabledDataShow(true);
				return "";
			} else {
				// 显示在职的人员,是否停用由参照统一控制
				return " and bd_psnjob.indutydate <='" + nowDate + "' and (bd_psnjob.enddutydate >='" + nowDate + "' or bd_psnjob.enddutydate ='~'" + " or bd_psnjob.enddutydate is null)";
			}
		} else {// 界面开关不开启,显示在职的已启用人员
			return " and bd_psnjob.indutydate <='" + nowDate + "' and (bd_psnjob.enddutydate >='" + nowDate + "' or bd_psnjob.enddutydate ='~'" + " or bd_psnjob.enddutydate is null)";
		}
	}

	public boolean isMutiGroup() {
		return isMutiGroup;
	}

	public void setMutiGroup(boolean isMutiGroup) {
		this.isMutiGroup = isMutiGroup;
		if (isMutiGroup()) {
			setFilterRefNodeName(new String[] { "集团", "业务单元"/* -=notranslate=- */ });
		} else {
			setFilterRefNodeName(new String[] { "业务单元" });/* -=notranslate=- */
		}
	}

	public boolean isLeavePower() {
		return leavePower;
	}

	public void setLeavePower(boolean leavePower) {
		this.leavePower = leavePower;
	}

	public void setNowDate(UFLiteralDate nowDate) {
		this.nowDate = nowDate;
	}

	private UFLiteralDate getNowDate() {
		if (nowDate == null) {
			nowDate = new GetBusiDateUtil().getNowDate();
		}
		return nowDate;
	}

	public boolean isLeavePowerUI() {
		return leavePowerUI;
	}

	public void setLeavePowerUI(boolean leavePowerUI) {
		this.leavePowerUI = leavePowerUI;
		reset();
	}
}

 --必须在bd_refinfo表中注册参照类,在元数据操作界面中设置参照,注册参照类示例sql脚本如下:
insert into BD_REFINFO (CODE, DR, ISNEEDPARA, ISSPECIALREF, layer, metadatanamespace, METADATATYPENAME, MODULENAME, NAME, PARA1, PARA2, PARA3, PK_REFINFO, REFCLASS, REFSYSTEM, REFTYPE, RESERV1, RESERV2, RESERV3, RESID, RESIDPATH, TS, WHEREPART) values ('600069', 0, null, null, 0, 'uapbd', 'psndoc', 'uapbd', '人员任职', null, null, null, '0001Z0100000001TRAIN', 'nc.ui.bd.ref.model.PsndocDefaultNCRefModel1', null, 2, 'nc.ui.bd.psn.psndoc.ref.busi.PsndocDefaultRefModelDlg', null, null, 'UC000-0000129', 'common', '2023-08-29 22:57:13', null);
--NAME字段需全局唯一,不可重复
--PK_REFINFO字段需长度为20,且全局唯一
--REFTYPE字段是参照类型:0 列表参照 1 树型参照 2 树表参照
  • 关联人员任职记录即hi_psnjob查询,这样查询就可以到跨组织跨部门退休的人,比如B组织 综合部421这个人退休了,挂在A组织的离退休部门下。
  • 如果是关联人员工作信息即表bd_psnjob,做了退休事件后,在人员银行账户新增的时候,所属业务单元(组织)选择是A,然后在人员编码这个字段参照中,部门选择为离退休时,查询不到421这个人,需要选B组织的综合部才可以查询到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值