用友NC合同编码自定义

需求:

合同编码逻辑:

地区简写+00+人员编码+两位数的流水

GZ+00+code+num(01)

分析:
两个地方会涉及到新增签订合同的地方【合同处理中心】和【合同签订】
新增时需要系统带出合同编码,编码规则:地区简写+00+人员编码+两位数的流水号
流水号是以个人签订合同次数作为流水,首次签订为01

代码逻辑:系统原有的ZD编码方式保留,新建逻辑类供调用

代码:

合同新增规则类QueryMakeBillCode.java:

package nc.ui.hrcm.utils;

import java.util.*;

import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.vo.pub.BusinessException;

public class QueryMakeBillCode {

    private IUAPQueryBS iUapQueryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class);
    String maxCode = null;

    public  String getMaxCode(String tablename, String zdCodeBefore,
            String pk_org) throws BusinessException {
        String sql = "";
        int length = 10;
        if(tablename.equalsIgnoreCase("hi_psndoc_ctrt"))
            sql = (new StringBuilder()).append("select contractnum maxcontractnum from ").append(tablename).append(" where contractnum like '").append(zdCodeBefore).append("%' and length(contractnum) = ").append(length).append(" order by contractnum desc").toString();
        else
            sql = (new StringBuilder()).append("select contcode maxcontractnum from ").append(tablename).append(" where contcode like '").append(zdCodeBefore).append("%' and length(contcode) = ").append(length).append(" order by contcode desc").toString();
        List listResult= (List) iUapQueryBS.executeQuery(sql.toString(), new MapListProcessor());
        if (listResult != null) {
            for(Iterator i$ = listResult.iterator(); i$.hasNext();)
            {
                HashMap map = (HashMap)i$.next();
                String contcode = (String)map.get("maxcontractnum");
                try
                {
                    return contcode;
                }
                catch(NumberFormatException e)
                {
                    Logger.error(e);
                }
          }
        }
        return null;
    }
    public String getNextCode(String codeStr,String maxCode)
      {
        if (maxCode == null) {
            maxCode = (codeStr + "01");
        } else {
            maxCode= (maxCode.substring(0, 8) + getNextFlowNumBuCur(maxCode.substring(8)));
        }
        return maxCode;
      }


    public String getCodeStr(String pk_org,String psncode) {
        String zdCodeBefore=""+psncode;
        if ("00016H10000000000BH1".equals(pk_org)) {
            zdCodeBefore="GZ00"+psncode;
        }else if (pk_org=="00016H10000000000BHZ") {
            zdCodeBefore="SZ00"+psncode;
        }else if (pk_org=="00016H10000000000BGG") {
            zdCodeBefore="BJ00"+psncode;
        }else if (pk_org=="00016H10000000000BGQ") {
            zdCodeBefore="DG00"+psncode;
        }else if (pk_org=="00016H10000000000BHK") {
            zdCodeBefore="SH00"+psncode;
        }else if (pk_org=="00016H10000000000BHN") {
            zdCodeBefore="SU00"+psncode;
    }
        return zdCodeBefore;
    }


    private String getNextFlowNumBuCur(String substring) {
         int cur = Integer.parseInt(substring);
            cur++;

            String str = "";
            if (cur < 10) {
              str = "0";
            } 
            return str + cur;
    }
}

合同编码调用显示类,即合同新增类:合同签订类PsnWizardStepListener

package nc.ui.hrcm.make.wizard.listener;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.hr.utils.BillCodeHelper;
import nc.hr.utils.HRCMTermUnitUtils;
import nc.hr.utils.PubEnv;
import nc.hr.utils.ResHelper;
import nc.itf.hr.frame.IHrBillCode;
import nc.itf.hrcm.IQueryMakeService;
import nc.itf.hrcm.ITempletBatchQueryService;
import nc.pub.billcode.vo.BillCodeContext;
import nc.pub.tools.HRCMUtils;
import nc.pub.tools.HiCacheUtils;
import nc.ui.bd.ref.AbstractRefModel;
import nc.ui.hrcm.make.CMTemplateContainer;
import nc.ui.hrcm.make.MakeAppModelService;
import nc.ui.hrcm.make.factory.CMMethodFactory;
import nc.ui.hrcm.make.factory.WizardFirstInterface;
import nc.ui.hrcm.make.model.MakeAppModelDataManager;
import nc.ui.hrcm.make.model.MakeBillManageModel;
import nc.ui.hrcm.make.view.MakeUtil;
import nc.ui.hrcm.make.view.ShereBillForm;
import nc.ui.hrcm.make.wizard.panel.CtrtBillForm;
import nc.ui.hrcm.processor.CardCheckProcessorImpl;
import nc.ui.hrcm.utils.DefauteCode;
import nc.ui.hrcm.utils.QueryMakeBillCode;
import nc.ui.pub.beans.UIRefPane;
import nc.ui.pub.beans.wizard.IWizardStepListener;
import nc.ui.pub.beans.wizard.WizardModel;
import nc.ui.pub.beans.wizard.WizardStep;
import nc.ui.pub.beans.wizard.WizardStepEvent;
import nc.ui.pub.bill.BillCardPanel;
import nc.ui.pub.bill.BillItem;
import nc.ui.uif2.model.AbstractAppModel;
import nc.vo.hi.psndoc.CtrtVO;
import nc.vo.hrcm.contopinion.ContopinionVO;
import nc.vo.hrcm.share.PsnSelListVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.IAttributeMeta;
import nc.vo.pub.IVOMeta;
import nc.vo.pub.SuperVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pub.lang.UFLiteralDate;
import nc.vo.uif2.LoginContext;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

public class PsnWizardStepListener
  implements IWizardStepListener
{
  private ITempletBatchQueryService templetBatchQueryService;

  public void stepActived(WizardStepEvent event)
  {
    WizardStep prestep = event.getPreStep();
    if (prestep == null) {
      return;
    }
    WizardStep step0 = event.getStep();
    WizardModel model = step0.getModel();


    WizardStep step1 = (WizardStep)model.getSteps().get(model.getCurStepIndex() + 1);
    CtrtBillForm form = (CtrtBillForm)step1.getComp();
    AbstractAppModel outMode = form.getMode();
    MakeBillManageModel makeMode = (MakeBillManageModel)outMode;

    makeMode.rollBackCode();
  }

  private SuperVO[] getValidateVOs(PsnSelListVO[] selPsnInf)
  {
    String[] psndocPks = new String[selPsnInf.length];
    for (int i = 0; i < selPsnInf.length; i++) {
      psndocPks[i] = selPsnInf[i].getPk_psndoc();
    }
    SuperVO[] vos = null;
    try
    {
      vos = ((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).getValidateVOsByPsndocPks(psndocPks);
    }
    catch (BusinessException e)
    {
      Logger.error(e);
    }
    return vos;
  }

  public void stepDisactived(WizardStepEvent event)
  {
    WizardStep step0 = event.getStep();
    WizardModel model = step0.getModel();


    WizardStep step1 = (WizardStep)model.getSteps().get(model.getCurStepIndex() + 1);

    PsnSelListVO[] selPsnInf = (PsnSelListVO[])step0.getAttr("psnSelectList");

    step1.putAttr("psnList", selPsnInf);

    SuperVO[] validateVOs = getValidateVOs(selPsnInf);
    step1.putAttr("validateVOs", validateVOs);
    CtrtBillForm form = (CtrtBillForm)step1.getComp();
    AbstractAppModel outMode = form.getMode();
    MakeBillManageModel makeMode = (MakeBillManageModel)outMode;

    ShereBillForm billForm = form.getBillForm();
    Object value = billForm.getValue();
    BillCardPanel cardPanel = billForm.getBillCardPanel();


    PsnSelListVO firstVO = selPsnInf[0];
    AbstractAppModel appModle = billForm.getModel();

    String modeName = "hi_psndoc_ctrt";
    if ((appModle instanceof MakeBillManageModel)) {
      modeName = ((MakeBillManageModel)appModle).getModeName();
    }
    LoginContext context = appModle.getContext();

    String pk_org = context.getPk_org();
    String pk_group = context.getPk_group();
    String nodecode = context.getNodeCode();

    UFDateTime date = PubEnv.getServerTime();
    UFLiteralDate literalDate = new UFLiteralDate(date.getDate().toStdString());
    Integer conttype = Integer.valueOf(HRCMUtils.getNodeCodeTermType(appModle.getContext().getNodeCode()));

    ContopinionVO[] contopinionVOs = (ContopinionVO[])step0.getAttr("contopinionVO");


    setContCode((SuperVO)value, selPsnInf, modeName, context, cardPanel, makeMode);

    PsnSelListVO pslvo = new PsnSelListVO();
    if (!ArrayUtils.isEmpty(selPsnInf))
    {
      StringBuffer code = new StringBuffer();
      StringBuffer name = new StringBuffer();
      StringBuffer conractnum = new StringBuffer();
      for (int i = 0; i < selPsnInf.length; i++)
      {
        if (i == 3)
        {
          code.append("...");
          name.append("...");
          conractnum.append("...");
          break;
        }
        code.append(",").append(selPsnInf[i].getPsncode());
        name.append(",").append(selPsnInf[i].getPsnname());
        conractnum.append(",").append(selPsnInf[i].getVcontractnum());
      }
      pslvo.setPsncode(code.toString().substring(1));
      pslvo.setPsnname(name.toString().substring(1));
      pslvo.setVcontractnum(conractnum.toString().substring(1));
    }
    if (("60110extend".equals(nodecode)) || ("60110change".equals(nodecode)) || ("60110release".equals(nodecode)) || ("60110finish".equals(nodecode)))
    {
      CMTemplateContainer template = (CMTemplateContainer)form.getBillForm().getTemplateContainer();

      HashMap<String, Class<?>> protocolNodeKeyToClassMap = template.getProtocolNodeKeyToClassMap();

      Class contClass = (Class)protocolNodeKeyToClassMap.get(form.getBillForm().getNodekey());
      MakeAppModelService service = (MakeAppModelService)((MakeBillManageModel)appModle).getService();
      IQueryMakeService queryService = service.getQueryService();

      SuperVO svo = null;
      try
      {
        svo = (SuperVO)queryService.queryByPk(firstVO.getPk_cont(), contClass);
        if ("60110extend".equals(nodecode))
        {
          if (selPsnInf.length == 1)
          {
            UFLiteralDate oldEnddate = (UFLiteralDate)svo.getAttributeValue("enddate");

            UFLiteralDate begindate = oldEnddate == null ? literalDate : ((UFLiteralDate)oldEnddate.clone()).getDateAfter(1);
            if (ArrayUtils.isEmpty(contopinionVOs))
            {
              svo.setAttributeValue("begindate", begindate.clone());

              String termtype = (String)svo.getAttributeValue("termtype");
              if (StringUtils.isNotBlank(termtype)) {
                if ("CM01".equals(termtype))
                {
                  svo.setAttributeValue("enddate", null);
                  svo.setAttributeValue("termmonth", null);
                }
                else if (("CM02".equals(termtype)) || ("CM03".equals(termtype)))
                {
                  svo.setAttributeValue("termmonth", null);
                  svo.setAttributeValue("enddate", null);
                }
                else
                {
                  svo.setAttributeValue("termmonth", svo.getAttributeValue("termmonth"));
                  svo.setAttributeValue("enddate", svo.getAttributeValue("enddate"));
                }
              }
            }
            else
            {
              svo.setAttributeValue("termtype", contopinionVOs[0].getTermtype());
              svo.setAttributeValue("termmonth", contopinionVOs[0].getItermmonth());
              svo.setAttributeValue("begindate", begindate.clone());
              svo.setAttributeValue("enddate", contopinionVOs[0].getSedenddate());
            }
            oldEnddate = null;
            begindate = null;
          }
          else if (selPsnInf.length > 1)
          {
            svo.setAttributeValue("begindate", null);
            MakeUtil.getHeadItem(cardPanel, "begindate").setEnabled(Boolean.FALSE.booleanValue());
            MakeUtil.getHeadItem(cardPanel, "begindate").setNull(false);
            if (!ArrayUtils.isEmpty(contopinionVOs))
            {
              svo.setAttributeValue("termtype", contopinionVOs[0].getTermtype());
              svo.setAttributeValue("termmonth", contopinionVOs[0].getItermmonth());
              svo.setAttributeValue("enddate", contopinionVOs[0].getSedenddate());
            }
          }
        }
        else
        {
          svo.setAttributeValue("begindate", svo.getAttributeValue("begindate"));
          svo.setAttributeValue("enddate", svo.getAttributeValue("enddate"));
        }
        UFLiteralDate begin = (UFLiteralDate)svo.getAttributeValue("begindate");
        UFLiteralDate end = (UFLiteralDate)svo.getAttributeValue("enddate");
        if ((begin != null) && (end != null)) {
          if (((UFLiteralDate)begin.clone()).after((UFLiteralDate)end.clone())) {
            svo.setAttributeValue("enddate", null);
          }
        }
        begin = null;
        end = null;

        SuperVO newVO = (SuperVO)contClass.newInstance();
        newVO.setAttributeValue("conttype", conttype);
        newVO.setAttributeValue("signdate", literalDate.clone());
        newVO.setAttributeValue("begindate", svo.getAttributeValue("begindate"));
        newVO.setAttributeValue("enddate", svo.getAttributeValue("enddate"));
        newVO.setAttributeValue("pk_psndoc", svo.getAttributeValue("pk_psndoc"));

        newVO.setAttributeValue("pk_psnorg", svo.getAttributeValue("pk_psnorg"));

        newVO.setAttributeValue("assgid", svo.getAttributeValue("assgid"));
        newVO.setAttributeValue("pk_psnjob", svo.getAttributeValue("pk_psnjob"));
        newVO.setAttributeValue("pk_group", svo.getAttributeValue("pk_group"));


        newVO.setAttributeValue("pk_conttext", svo.getAttributeValue("pk_conttext"));
        newVO.setAttributeValue("pk_majorcorp", svo.getAttributeValue("pk_majorcorp"));
        newVO.setAttributeValue("signaddr", svo.getAttributeValue("signaddr"));
        newVO.setAttributeValue("creator", svo.getAttributeValue("creator"));
        newVO.setAttributeValue("creationtime", svo.getAttributeValue("creationtime"));
        newVO.setAttributeValue("contid", svo.getAttributeValue("contid"));
        newVO.setAttributeValue("cont_unit", svo.getAttributeValue("cont_unit"));
        if (svo.getAttributeValue("termmonth") != null) {
          newVO.setAttributeValue("termmonth", svo.getAttributeValue("termmonth"));
        }
        if ("hi_psndoc_ctrt".equals(modeName))
        {
          newVO.setAttributeValue("contractnum", svo.getAttributeValue("contractnum"));
          newVO.setAttributeValue("termtype", svo.getAttributeValue("termtype"));
          newVO.setAttributeValue("continuetime", svo.getAttributeValue("continuetime"));
        }
        else
        {
          newVO.setAttributeValue("contcode", svo.getAttributeValue("contcode"));
        }
        setGlbdef(nodecode, svo, newVO);
        if ("60110release".equals(nodecode))
        {
          if ("hi_psndoc_ctrt".equals(modeName))
          {
            newVO.setAttributeValue("presenter", "1");
            String tablename = MakeUtil.getTablename(cardPanel);
            UIRefPane pane = (UIRefPane)cardPanel.getHeadItem(tablename + ".pk_unchreason").getComponent();
            pane.getRefModel().setPara1("1002Z71000000000PJRJ");
            pane.getRefModel().setCacheEnabled(false);
            pane.getRefModel().setRefNodeName(ResHelper.getString("6011make", "06011make0093"));
          }
          else
          {
            String tablename = MakeUtil.getTablename(cardPanel);
            UIRefPane pane = (UIRefPane)cardPanel.getHeadItem(tablename + ".pk_unchreason").getComponent();
            pane.getRefModel().setPara1("1002Z71000000000PJRM");
            pane.getRefModel().setRefTitle(ResHelper.getString("6011make", "06011make0094"));
          }
        }
        else if ("60110finish".equals(nodecode)) {
          if ("hi_psndoc_ctrt".equals(modeName))
          {
            String tablename = MakeUtil.getTablename(cardPanel);
            UIRefPane pane = (UIRefPane)cardPanel.getHeadItem(tablename + ".pk_unchreason").getComponent();
            pane.getRefModel().setPara1("1002Z71000000000PJRK");
            pane.getRefModel().setCacheEnabled(false);
            pane.getRefModel().setRefNodeName(ResHelper.getString("6011make", "06011make0002"));
          }
          else
          {
            String tablename = MakeUtil.getTablename(cardPanel);
            UIRefPane pane = (UIRefPane)cardPanel.getHeadItem(tablename + ".pk_unchreason").getComponent();
            pane.getRefModel().setPara1("1002Z71000000000PJRL");
            pane.getRefModel().setRefTitle(ResHelper.getString("6011make", "06011make0003"));
          }
        }
        WizardFirstInterface firstFace = CMMethodFactory.getWizardFirstInterface(nodecode, modeName);
        if (firstFace != null) {
          firstFace.setNewVOinfo(svo, newVO);
        }
        form.getBillForm().setValue(newVO);
        if (firstFace != null) {
          firstFace.setHeadItem((MakeBillManageModel)appModle, cardPanel, selPsnInf);
        }
      }
      catch (Exception e)
      {
        Logger.error(e);
      }
    }
    else
    {
      billForm.setValue(null);

      String vmodeltype = billForm.getModelDataManager().getInfosetPK();

      String pk_conmodel = null;

      CtrtVO ctrt = new CtrtVO();
      try
      {
        pk_conmodel = getTempletBatchQueryService().queryDefautPKContmodelVOByOrg(context, vmodeltype);
      }
      catch (Exception e)
      {
        Logger.error(e);
      }
      ctrt.setPk_conttext(pk_conmodel);
      if ("hi_psndoc_ctrt".equals(modeName))
      {
        ctrt.setPk_psnjob(firstVO.getPk_psnjob());
        MakeUtil.getHeadItem(cardPanel, "pk_psnjob").setEnabled(false);


        ctrt.setPk_psndoc(firstVO.getPk_psndoc());
        MakeUtil.getHeadItem(cardPanel, "pk_psndoc").setEnabled(false);

        ctrt.setIfprop(UFBoolean.TRUE);



        ctrt.setConttype(conttype);
        MakeUtil.getHeadItem(cardPanel, "conttype").setEnabled(false);

        ctrt.setBegindate((UFLiteralDate)literalDate.clone());


        ctrt.setProbegindate((UFLiteralDate)literalDate.clone());


        ctrt.setSigndate((UFLiteralDate)literalDate.clone());
        MakeUtil.getHeadItem(cardPanel, "signdate").setValue(literalDate.clone());

        ctrt.setRecordnum(Integer.valueOf(0));
        ctrt.setContinuetime(Integer.valueOf(1));
        ctrt.setPk_majorcorp(pk_org);






        ctrt.setTermtype("CM01");

        Integer contUnit = Integer.valueOf(MakeUtil.getHeadItem(cardPanel, "cont_unit").getDefaultValueObject() == null ? HRCMTermUnitUtils.TERMUNIT_MONTH : Integer.parseInt((String)MakeUtil.getHeadItem(cardPanel, "cont_unit").getDefaultValueObject()));

        ctrt.setCont_unit(contUnit);

        MakeUtil.getHeadItem(cardPanel, "termmonth").setLength(HRCMTermUnitUtils.getLengthByTermUnit(contUnit.intValue()).intValue());

        Integer propUnit = Integer.valueOf(MakeUtil.getHeadItem(cardPanel, "prop_unit").getDefaultValueObject() == null ? HRCMTermUnitUtils.TERMUNIT_MONTH : Integer.parseInt((String)MakeUtil.getHeadItem(cardPanel, "prop_unit").getDefaultValueObject()));

        ctrt.setProp_unit(propUnit);

        MakeUtil.getHeadItem(cardPanel, "promonth").setLength(HRCMTermUnitUtils.getLengthByTermUnit(propUnit.intValue()).intValue());
      }
      ctrt.setCreator(PubEnv.getPk_user());
      ctrt.setCreationtime(date);



      billForm.setValue(ctrt);
    }
    MakeUtil.getHeadItem(cardPanel, "pk_org").setValue(pk_org);
    MakeUtil.getHeadItem(cardPanel, "pk_org").setEnabled(UFBoolean.FALSE.booleanValue());
    MakeUtil.getHeadItem(cardPanel, "pk_group").setValue(pk_group);
    MakeUtil.getHeadItem(cardPanel, "pk_group").setEnabled(UFBoolean.FALSE.booleanValue());
    if (MakeUtil.getHeadItem(cardPanel, "code") != null) {
      MakeUtil.getHeadItem(cardPanel, "code").setValue(pslvo.getPsncode());
    }
    if (MakeUtil.getHeadItem(cardPanel, "name") != null) {
      MakeUtil.getHeadItem(cardPanel, "name").setValue(pslvo.getPsnname());
    }
    if (MakeUtil.getHeadItem(cardPanel, "contractnum") != null)
    {
      MakeUtil.getHeadItem(cardPanel, "contractnum").setValue(firstVO.getVcontractnum() + "...");

      PsnSelListVO pslvo1 = new PsnSelListVO();
      if (!ArrayUtils.isEmpty(selPsnInf))
      {
        StringBuffer conractnum = new StringBuffer();
        for (int i = 0; i < selPsnInf.length; i++)
        {
          if (i == 3)
          {
            conractnum.append("...");
            break;
          }
          if (!StringUtils.isEmpty(selPsnInf[i].getVcontractnum())) {
            conractnum.append(",").append(selPsnInf[i].getVcontractnum());
          }
        }
        if (conractnum.length() >= 1) {
          pslvo1.setVcontractnum(conractnum.toString().substring(1));
        }
      }
      MakeUtil.getHeadItem(cardPanel, "contractnum").setValue(pslvo1.getVcontractnum());
    }
    if (MakeUtil.getHeadItem(cardPanel, "contcode") != null) {
      MakeUtil.getHeadItem(cardPanel, "contcode").setValue(pslvo.getVcontractnum());
    }
    if (MakeUtil.getHeadItem(cardPanel, "job_org") != null) {
      MakeUtil.getHeadItem(cardPanel, "job_org").setValue(firstVO.getPk_org());
    }
    boolean isExtendPsn = ((MakeBillManageModel)appModle).isExtendPsn();
    Integer extendtype = (Integer)step0.getAttr("extendtype");
    if ((extendtype == null) && ("60110extend".equals(nodecode))) {
      extendtype = Integer.valueOf(0);
    } else if ((extendtype != null) && ("60110extend".equals(nodecode)) && (selPsnInf.length == 1)) {
      extendtype = Integer.valueOf(0);
    }
    //initTermItem(modeName, cardPanel, pk_org, nodecode, isExtendPsn, !ArrayUtils.isEmpty(contopinionVOs), contopinionVOs[0].getItermmonth() == null ? 0 : ArrayUtils.isEmpty(contopinionVOs) ? 0 : contopinionVOs[0].getItermmonth().intValue(), extendtype);
    initTermItem(modeName, cardPanel, pk_org, nodecode, isExtendPsn, !ArrayUtils.isEmpty(contopinionVOs), ArrayUtils.isEmpty(contopinionVOs) ? 0 : contopinionVOs[0].getItermmonth() != null ? contopinionVOs[0].getItermmonth().intValue() : 0, extendtype);

    billForm.setExtendtype(extendtype);
    if ("60110extend".equals(nodecode)) {
      if (selPsnInf.length > 1)
      {
        if (extendtype == null)
        {
          if ("hi_psndoc_ctrt".equals(modeName))
          {
            MakeUtil.getHeadItem(cardPanel, "enddate").setEnabled(Boolean.FALSE.booleanValue());
            MakeUtil.getHeadItem(cardPanel, "termmonth").setEnabled(Boolean.FALSE.booleanValue());
          }
        }
        else if (1 == extendtype.intValue())
        {
          MakeUtil.getHeadItem(cardPanel, "enddate").setEnabled(Boolean.FALSE.booleanValue());
          MakeUtil.getHeadItem(cardPanel, "enddate").setValue(null);
          MakeUtil.getHeadItem(cardPanel, "enddate").setNull(false);

          MakeUtil.getHeadItem(cardPanel, "termmonth").setValue(null);
        }
        else if (2 == extendtype.intValue())
        {
          MakeUtil.getHeadItem(cardPanel, "termmonth").setEnabled(Boolean.FALSE.booleanValue());
          MakeUtil.getHeadItem(cardPanel, "termmonth").setValue(null);
          MakeUtil.getHeadItem(cardPanel, "termmonth").setNull(false);

          MakeUtil.getHeadItem(cardPanel, "enddate").setValue(null);
        }
      }
      else
      {
        MakeUtil.getHeadItem(cardPanel, "enddate").setEnabled(Boolean.TRUE.booleanValue());
        MakeUtil.getHeadItem(cardPanel, "enddate").setValue(null);
        MakeUtil.getHeadItem(cardPanel, "enddate").setNull(true);
        MakeUtil.getHeadItem(cardPanel, "termmonth").setEnabled(Boolean.TRUE.booleanValue());
        MakeUtil.getHeadItem(cardPanel, "termmonth").setValue(null);
        MakeUtil.getHeadItem(cardPanel, "termmonth").setNull(true);
      }
    }
  }

  private void setGlbdef(String nodecode, SuperVO oldVO, SuperVO newVO)
  {
    IAttributeMeta[] attributes = oldVO.getMetaData().getAttributes();
    for (IAttributeMeta attribute : attributes) {
      if (!attribute.isStatic()) {
        newVO.setAttributeValue(attribute.getName(), oldVO.getAttributeValue(attribute.getName()));
      }
    }
  }

  private void initTermItem(String modeName, BillCardPanel cardPanel, String pk_org, String nodecode, boolean isExtendPsn, boolean isFromContOpinion, int itemmonth, Integer extendtype)
  {
    BillItem item = MakeUtil.getHeadItem(cardPanel, "pk_post_dept");
    if (item != null)
    {
      BillItem orgitem = MakeUtil.getHeadItem(cardPanel, "pk_post_org");
      UIRefPane pane = (UIRefPane)item.getComponent();
      if ((pane != null) && (pane.getRefModel() != null)) {
        pane.getRefModel().setPk_org(orgitem.getValue());
      }
    }
    item = MakeUtil.getHeadItem(cardPanel, "pk_post");
    if (item != null)
    {
      BillItem org_orgitem = MakeUtil.getHeadItem(cardPanel, "pk_post_org");
      BillItem orgitem = MakeUtil.getHeadItem(cardPanel, "pk_post_dept");
      UIRefPane pane = (UIRefPane)item.getComponent();
      if ((pane != null) && (pane.getRefModel() != null))
      {
        pane.getRefModel().setPk_org(org_orgitem.getValue());
        pane.getRefModel().addWherePart(" and pk_dept = '" + orgitem.getValue() + "'");
      }
    }
    if (!"hi_psndoc_ctrt".equals(modeName)) {
      return;
    }
    if ("60110change".equals(nodecode))
    {
      MakeUtil.getHeadItem(cardPanel, "termmonth").setLength(3);

      CardCheckProcessorImpl processor = new CardCheckProcessorImpl();
      processor.setExtendPsn(isExtendPsn);
      if (processor.getBillItem(cardPanel, "ifprop") != null)
      {
        boolean flag = processor.getBillItem(cardPanel, "ifprop").isShowFlag();
        processor.setPropItem(cardPanel, flag);
      }
    }
    if ((!"60110sign".equals(nodecode)) && (!"60110extend".equals(nodecode))) {
      return;
    }
    CardCheckProcessorImpl processor = new CardCheckProcessorImpl();
    processor.setPk_org(pk_org);
    processor.setExtendPsn(isExtendPsn);
    processor.setExtendtype(extendtype);
    processor.refreshTermTypeStat(cardPanel, !"60110sign".equals(nodecode), isFromContOpinion, Integer.valueOf(itemmonth));
  }

  private void setContCodeEnabled(BillCardPanel cardPanel, String modeName, boolean enable)
  {
    String tablename = cardPanel.getHeadItems()[0].getTableCode();
    if ("hi_psndoc_ctrt".equals(tablename))
    {
      MakeUtil.getHeadItem(cardPanel, "contractnum").setEnabled(enable);
      MakeUtil.getHeadItem(cardPanel, "contractnum").setNull(enable);
    }
    else
    {
      MakeUtil.getHeadItem(cardPanel, "contcode").setEnabled(enable);
      MakeUtil.getHeadItem(cardPanel, "contcode").setNull(enable);
    }
  }

  private void setContCode(SuperVO vo, PsnSelListVO[] psnSelVOs, String modeName, LoginContext context, BillCardPanel cardPanel, MakeBillManageModel makeMode)
  {
    try
    {
      int selLength = psnSelVOs.length;
      if (("60110sign".equals(context.getNodeCode())) || ("60110extend".equals(context.getNodeCode())))
      {
        if ("60110extend".equals(context.getNodeCode()))
        {
          UFBoolean editable = (UFBoolean)makeMode.getContPara().get("HRCM0001");
          if (!editable.booleanValue())
          {
            setContCodeEnabled(cardPanel, modeName, false);
            return;
          }
        }
        BillCodeContext billCodeContext = BillCodeHelper.getBillCodeContext(HRCMUtils.getBillCodeForTableName(modeName), context.getPk_group(), context.getPk_org());

        String[] billCodeArr = new String[selLength];
        DefauteCode defautCode = null;
        if ((billCodeContext == null) && (selLength == 1))
        {
            QueryMakeBillCode queryBC=new QueryMakeBillCode();
            String codeStr=queryBC.getCodeStr(psnSelVOs[0].getPk_org(), psnSelVOs[0].getPsncode());
            String maxCode = queryBC.getMaxCode(vo.getTableName(),codeStr,psnSelVOs[0].getPk_org());
            String code = queryBC.getNextCode(codeStr,maxCode);            
            psnSelVOs[0].setVcontractnum(code);
            setContCodeEnabled(cardPanel, modeName, true);
        }
        else if (billCodeContext != null)
        {
          boolean isEditable = billCodeContext.isEditable();
          IHrBillCode ibillcode = (IHrBillCode)NCLocator.getInstance().lookup(IHrBillCode.class);
          billCodeArr = ibillcode.getBillCode(HRCMUtils.getBillCodeForTableName(modeName), context.getPk_group(), context.getPk_org(), selLength);

          makeMode.setAutoGeneratedCodes(billCodeArr);
          for (int i = 0; i < psnSelVOs.length; i++) {
            psnSelVOs[i].setVcontractnum(billCodeArr[i]);
          }
          if (selLength > 1) {
            setContCodeEnabled(cardPanel, modeName, false);
          } else {
            setContCodeEnabled(cardPanel, modeName, isEditable);
          }
        }
        else
        {
          MakeAppModelService service = (MakeAppModelService)makeMode.getService();

          String tablename = vo.getTableName();
          String maxZdCode = service.getQueryService().getMaxZDCode(tablename, DefauteCode.getDayStr());          

          defautCode = new DefauteCode(maxZdCode);
          for (int i = 0; i < psnSelVOs.length; i++)
          {
            //查询已有的当前日期最大编码流水号,改为查询当前人员的最大流水号
            //查数据库
            QueryMakeBillCode queryBC=new QueryMakeBillCode();
            String codeStr=queryBC.getCodeStr(psnSelVOs[i].getPk_org(), psnSelVOs[i].getPsncode());
            String maxCode = queryBC.getMaxCode(tablename,codeStr,psnSelVOs[i].getPk_org());  
            //String code = defautCode.getNextCode();
            String code = queryBC.getNextCode(codeStr,maxCode);

            psnSelVOs[i].setVcontractnum(code);
          }
          setContCodeEnabled(cardPanel, modeName, false);
        }
      }
      else if ("60110extend".equals(context.getNodeCode()))
      {
        UFBoolean editable = (UFBoolean)makeMode.getContPara().get("HRCM0001");
        if (!editable.booleanValue())
        {
          setContCodeEnabled(cardPanel, modeName, false);
          return;
        }
      }
      else
      {
        setContCodeEnabled(cardPanel, modeName, false);
      }
      if ("60110extend".equals(context.getNodeCode()))
      {
        UFBoolean editable = (UFBoolean)makeMode.getContPara().get("HRCM0001");
        if ((editable.booleanValue()) && (selLength == 1))
        {
          BillCodeContext billCodeContext = HiCacheUtils.getBillCodeContext("contract", context.getPk_group(), context.getPk_org());
          boolean editableRule = billCodeContext == null ? true : billCodeContext.isEditable();
          cardPanel.getHeadItem("hi_psndoc_ctrt.contractnum").setEdit(editableRule);
        }
      }
    }
    catch (Exception e)
    {
      Logger.error(e.getMessage());
    }
  }

  private ITempletBatchQueryService getTempletBatchQueryService()
    throws BusinessException
  {
    if (this.templetBatchQueryService == null) {
      this.templetBatchQueryService = ((ITempletBatchQueryService)NCLocator.getInstance().lookup(ITempletBatchQueryService.class));
    }
    return this.templetBatchQueryService;
  }
}

合同编码调用显示类,合同处理中心,新增合同类:CtrtOperateDlg.java

package nc.ui.hrcm.center.view;

import java.awt.Component;
import java.awt.Container;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
import javax.swing.JComponent;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.bs.uif2.BusinessExceptionAdapter;
import nc.desktop.ui.WorkbenchEnvironment;
import nc.funcnode.ui.FuncletInitData;
import nc.funcnode.ui.FuncletWindowLauncher;
import nc.funcnode.ui.IFunclet;
import nc.funcnode.ui.IFuncletWindow;
import nc.hr.utils.BillCodeHelper;
import nc.hr.utils.HRCMTermUnitUtils;
import nc.hr.utils.PubEnv;
import nc.hr.utils.ResHelper;
import nc.itf.hr.frame.IHrBillCode;
import nc.itf.hrcm.IMakeService;
import nc.itf.hrcm.IQueryMakeService;
import nc.itf.hrcm.ITempletBatchQueryService;
import nc.itf.uap.busibean.SysinitAccessor;
import nc.pub.billcode.vo.BillCodeContext;
import nc.pub.tools.HRCMUtils;
import nc.pub.tools.HiCacheUtils;
import nc.ui.bd.ref.AbstractRefModel;
import nc.ui.hr.frame.dialog.HrDialog;
import nc.ui.hr.frame.util.BillPanelUtils;
import nc.ui.hrcm.agreement.action.AddAgreementAction;
import nc.ui.hrcm.agreement.model.AgreementAppModel;
import nc.ui.hrcm.agreement.model.AgreementModelService;
import nc.ui.hrcm.agreement.wizard.action.AgreementRefAction;
import nc.ui.hrcm.agreement.wizard.listener.FinishWizardDialogListener;
import nc.ui.hrcm.agreement.wizard.panel.AgreementPsnSelectPanel;
import nc.ui.hrcm.make.CMTemplateContainer;
import nc.ui.hrcm.make.factory.CMMethodFactory;
import nc.ui.hrcm.make.factory.CenterWizardInitDataInterface;
import nc.ui.hrcm.make.factory.WizardFirstInterface;
import nc.ui.hrcm.make.model.MakeBillManageModel;
import nc.ui.hrcm.make.view.ExtendAgreementDialog;
import nc.ui.hrcm.make.view.MakeUtil;
import nc.ui.hrcm.make.view.ViewAgreementDialog;
import nc.ui.hrcm.processor.CardCheckProcessorImpl;
import nc.ui.hrcm.processor.CheckException;
import nc.ui.hrcm.processor.CheckProcessorFactory;
import nc.ui.hrcm.processor.ICheckProcessor;
import nc.ui.hrcm.templet.model.ContModelRef;
import nc.ui.hrcm.utils.DataTransferObject;
import nc.ui.hrcm.utils.DefauteCode;
import nc.ui.hrcm.utils.QueryMakeBillCode;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pub.beans.UICheckBox;
import nc.ui.pub.beans.UIRefPane;
import nc.ui.pub.beans.wizard.WizardDialog;
import nc.ui.pub.beans.wizard.WizardModel;
import nc.ui.pub.beans.wizard.WizardStep;
import nc.ui.pub.bill.BillCardBeforeEditListener;
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.BillItemEvent;
import nc.ui.pub.bill.BillListData;
import nc.ui.pub.bill.BillListPanel;
import nc.ui.pub.bill.BillModel;
import nc.ui.sm.power.FuncRegisterCacheAccessor;
import nc.ui.uif2.ShowStatusBarMsgUtil;
import nc.ui.uif2.ToftPanelAdaptor;
import nc.vo.hr.infoset.InfoSetVO;
import nc.vo.hrcm.hrcm_center.AggPsnjobVO;
import nc.vo.hrcm.hrcm_center.CtrtVO;
import nc.vo.hrcm.share.PsnSelListVO;
import nc.vo.hrcm.templet.ContmodelVO;
import nc.vo.logging.Debug;
import nc.vo.pub.BusinessException;
import nc.vo.pub.BusinessRuntimeException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pub.IAttributeMeta;
import nc.vo.pub.IVOMeta;
import nc.vo.pub.SuperVO;
import nc.vo.pub.ValidationException;
import nc.vo.pub.bill.BillTabVO;
import nc.vo.pub.bill.BillTempletBodyVO;
import nc.vo.pub.bill.BillTempletHeadVO;
import nc.vo.pub.bill.BillTempletVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pub.lang.UFLiteralDate;
import nc.vo.sm.funcreg.FuncRegisterVO;
import nc.vo.uif2.LoginContext;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

public class CtrtOperateDlg
  extends HrDialog
  implements BillEditListener, BillCardBeforeEditListener
{
  private static final long serialVersionUID = 1L;
  private BillCardPanel billCardPanel;
  private final MakeBillManageModel model;
  private AggPsnjobVO[] aggVOs;
  private String nodeCode;
  private String pk_org;
  private PsnSelListVO[] psnList = null;
  private int extendtype;
  private final List<Integer> daysList = new ArrayList();
  private boolean isOpenBusiFunc = false;
  private CtrtVO[] ctrtVOs;
  public static final String TAB_CODE_TREE_CONFIG = "tab_code_tree_config";
  public static final String TAB_CODE_TREE_CONFIG_AFTER = "tab_code_tree_config_after";
  public static final String TAB_CODE_HEAD_MAIN = "main";
  private CMTemplateContainer templateContainer;
  private String[] autoGeneratedCodes;

  public CtrtOperateDlg(Container parent, MakeBillManageModel model)
  {
    super(parent, false);
    this.model = model;
  }

  public CtrtOperateDlg(Container parent, MakeBillManageModel model, CMTemplateContainer templateContainer)
  {
    super(parent, false);
    this.model = model;
    this.templateContainer = templateContainer;
  }

  protected JComponent createCenterPanel()
  {
    this.billCardPanel = new BillCardPanel();
    this.templateContainer.setContext(this.model.getContext());

    BillData billData = null;
    if (("60110extend".equals(this.nodeCode)) || ("60110change".equals(this.nodeCode)))
    {
      billData = getBillData(this.templateContainer, this.nodeCode);
    }
    else
    {
      BillTempletVO vo = this.templateContainer.getTemplate("hi_psndoc_ctrt");
      billData = new BillData(getBillTempletVOWithMake(vo));
    }
    this.billCardPanel.setBillData(billData);
    this.billCardPanel.getHeadItems();
    this.billCardPanel.getHeadItem("hi_psndoc_ctrt.contractnum").setEnabled(false);
    return this.billCardPanel;
  }

  public void closeOK()
  {
    notNullValidate();


    validateDate();


    CtrtVO[] vos = (CtrtVO[])getValue();
    if (("60110extend".equals(this.nodeCode)) && (this.psnList.length > 1)) {
      validateTermmonth();
    }
    List<String> pk_contList = new ArrayList();
    for (PsnSelListVO at : this.psnList)
    {
      String pk_psndoc = at.getPk_psndoc();
      pk_contList.add(at.getPk_cont());
      for (CtrtVO ctrtVO : vos)
      {
        String pk_psndoc_b = ctrtVO.getPk_psndoc();
        if (pk_psndoc.equals(pk_psndoc_b)) {
          at.setVcontractnum(ctrtVO.getContractnum());
        }
      }
    }
    IMakeService makeService = (IMakeService)NCLocator.getInstance().lookup(IMakeService.class);
    if ("60110change".equals(this.nodeCode))
    {
      String[] editableItem = getEditItemName(this.billCardPanel);
      List<Object> list = new ArrayList();
      try
      {
        list = makeService.ctrtChangeValidation(pk_contList, editableItem, vos);
      }
      catch (BusinessException e)
      {
        Logger.error(e.getMessage());
      }
      String names = (String)list.get(0);
      if (StringUtils.isNotBlank(names))
      {
        String message = MessageFormat.format(ResHelper.getString("6011make", "06011make0191"), new Object[] { names });




        List<SuperVO> superVO = (List)list.get(1);
        if ((superVO == null) || (superVO.size() == 0))
        {
          message = message + ResHelper.getString("6011make", "06011make0192");




          MessageDialog.showErrorDlg(null, null, message);
          return;
        }
        if (superVO.size() < vos.length)
        {
          message = message + ResHelper.getString("6011make", "06011make0193");
          if (MessageDialog.showYesNoDlg(null, ResHelper.getString("6011make", "06011make0228"), message) == 8) {
            return;
          }
          vos = (CtrtVO[])superVO.toArray(new CtrtVO[superVO.size()]);
        }
      }
    }
    String info = null;
    try
    {
      info = makeService.saveValidate(vos, this.nodeCode, this.model.getContext());
    }
    catch (BusinessException e)
    {
      Logger.error(e.getMessage());
    }
    if (info != null)
    {
      if (info.startsWith("1"))
      {
        info = info.substring(1);
        MessageDialog.showErrorDlg(null, null, info);
        return;
      }
      if (MessageDialog.showYesNoDlg(null, ResHelper.getString("6011make", "06011make0228"), info) == 8) {
        return;
      }
    }
    if ("60110sign".equals(this.nodeCode)) {
      try
      {
        String[] pks = new String[vos.length];
        for (int i = 0; i < vos.length; i++) {
          pks[i] = ((String)vos[i].getAttributeValue("pk_psnjob"));
        }
        String clerkcode = ((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).getPsnjobPKSetByOrgPK(this.pk_org, pks);
        if (clerkcode != null)
        {
          String message = ResHelper.getString("6011make", "06011make0075", new String[] { clerkcode });



          MessageDialog.showWarningDlg(this, null, message);
          return;
        }
      }
      catch (BusinessException e)
      {
        Logger.error(e.getMessage());
      }
    }
    if (("60110release".equals(this.nodeCode)) || ("60110finish".equals(this.nodeCode)))
    {
      String title = "60110release".equals(this.nodeCode) ? ResHelper.getString("6011make", "06011make0055") : ResHelper.getString("common", "UC001-0000032");

      String name = ResHelper.getString("6011make", "06011make0085");
      if (8 == MessageDialog.showYesNoDlg(this, ResHelper.getString("6011make", "06011make0227", new String[] { title }), MessageFormat.format(ResHelper.getString("6011make", "06011make0092"), new Object[] { name, title }))) {
        return;
      }
    }
    try
    {
      vos = (CtrtVO[])makeService.batchInsert(vos);
      try
      {
        effective(vos);
      }
      catch (InstantiationException e)
      {
        Logger.error(e.getMessage());
      }
      catch (IllegalAccessException e)
      {
        Logger.error(e.getMessage());
      }
    }
    catch (BusinessException e)
    {
      Logger.error(e.getMessage());
      String msg = e.getMessage();
      ShowStatusBarMsgUtil.showStatusBarMsg(msg, this.model.getContext());
      MessageDialog.showErrorDlg(this, null, msg);
      return;
    }
    super.closeOK();
  }

  public void closeCancel()
  {
    super.closeCancel();
    if (!ArrayUtils.isEmpty(this.autoGeneratedCodes))
    {
      IHrBillCode hrBillCode = (IHrBillCode)NCLocator.getInstance().lookup(IHrBillCode.class);
      try
      {
        hrBillCode.rollbackPreBillCodes(HRCMUtils.getBillCodeForTableName("hi_psndoc_ctrt"), this.model.getContext().getPk_group(), this.model.getContext().getPk_org(), this.autoGeneratedCodes);

        this.autoGeneratedCodes = null;
      }
      catch (BusinessException e)
      {
        Debug.error(e.getMessage(), e);
        throw new BusinessRuntimeException(e.getMessage(), e);
      }
    }
  }

  private void effective(CtrtVO[] vos)
    throws BusinessException, InstantiationException, IllegalAccessException
  {
    boolean permission = this.model.isEffectBtnPermission();
    if (permission)
    {
      String[] psnpks = new String[vos.length];
      String[] jobpks = new String[vos.length];
      for (int j = 0; j < vos.length; j++)
      {
        psnpks[j] = ((String)vos[j].getAttributeValue("pk_psndoc"));
        jobpks[j] = ((String)vos[j].getAttributeValue("pk_psnjob"));
      }
      for (CtrtVO evo : vos)
      {
        SuperVO svo = evo;
        svo.setStatus(1);
        svo.setAttributeValue("isrefer", UFBoolean.TRUE);
        svo.setAttributeValue("lastflag", UFBoolean.TRUE);
      }
      if ("60110sign".equals(this.nodeCode))
      {
        ExtendAgreementDialog dialog = new ExtendAgreementDialog(this);
        if (dialog.showYesNoDlg(this, ResHelper.getString("6011make", "06011make0226"), ResHelper.getString("6011make", "06011make0020")) == 4)
        {
          ((IMakeService)NCLocator.getInstance().lookup(IMakeService.class)).effective(true, vos);
          for (CtrtVO evo : vos)
          {
            SuperVO svo = evo;
            svo.setStatus(3);
          }
        }
        else
        {
          this.isOpenBusiFunc = true;
          setCtrtVOs(vos);
        }
        boolean isSelected = dialog.getCheckBox().isSelected();
        if (isSelected)
        {
          boolean isOpenBusiFunc = getSignDlg(this.model.getContext(), jobpks);
          if (!isOpenBusiFunc)
          {
            DataTransferObject dto = new DataTransferObject();
            dto.setPk_org(this.model.getContext().getPk_org());


            FuncletInitData data = new FuncletInitData();
            data.setInitData(dto);

            IFuncletWindow window = WorkbenchEnvironment.getInstance().findOpenedFuncletWindow("60110agsign");
            if (window != null)
            {
              IFunclet funclet = window.getCurrFunclet();
              Component com = funclet.getControl();
              ToftPanelAdaptor toft = (ToftPanelAdaptor)com;
              toft.initData(data);
              window.showWindow();
              return;
            }
            FuncRegisterVO funcRegisterVO = FuncRegisterCacheAccessor.getInstance().getFuncRegisterVOByFunCode("60110agsign");

            ToftPanelAdaptor adaptor = (ToftPanelAdaptor)this.model.getContext().getEntranceUI();
            FuncletWindowLauncher.openFuncNodeInTabbedPane(adaptor, funcRegisterVO, data, null, false);
          }
        }
      }
      else if (MessageDialog.showYesNoDlg(this.billCardPanel, ResHelper.getString("6011make", "06011make0226"), ResHelper.getString("6011make", "06011make0020")) == 4)
      {
        ((IMakeService)NCLocator.getInstance().lookup(IMakeService.class)).effective(true, vos);
        if (("60110release".equals(this.nodeCode)) || ("60110finish".equals(this.nodeCode)))
        {
          List<String> nameList = ((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).queryPsnByEffectPortocol(psnpks);
          if (!nameList.isEmpty())
          {
            PsnSelListVO[] agreementVOs = ((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).queryEffectAgreement(psnpks);

            StringBuffer message = new StringBuffer();
            message.append(ResHelper.getString("60110center", "06011center0062"));
            for (int i = 0; i < nameList.size(); i++) {
              if (i == nameList.size() - 1) {
                message.append((String)nameList.get(i)).append(",");
              } else {
                message.append((String)nameList.get(i)).append(ResHelper.getString("60110center", "06011center0031"));
              }
            }
            message.append(ResHelper.getString("60110center", "06011center0063"));
            if (MessageDialog.showYesNoDlg(this, ResHelper.getString("60110center", "06011center0073"), message.toString()) == 4)
            {
              ViewAgreementDialog aggreementDialog = new ViewAgreementDialog(this, ResHelper.getString("60110center", "06011center0064"));



              aggreementDialog.getAgreementListPanel().getBillListData().setHeaderValueVO(agreementVOs);
              BillPanelUtils.dealWithRefShowNameByPk(aggreementDialog.getAgreementListPanel(), -1);
              Boolean isSelectedAll = Boolean.valueOf(true);
              BillModel billModel = aggreementDialog.getAgreementListPanel().getHeadBillModel();
              if (isSelectedAll.booleanValue()) {
                for (int i = 0; i < agreementVOs.length; i++) {
                  billModel.setRowState(i, 4);
                }
              }
              if (1 != aggreementDialog.showModal()) {
                return;
              }
              PsnSelListVO[] psnVOList = (PsnSelListVO[])billModel.getBodySelectedVOs(PsnSelListVO.class.getName());
              if ((psnVOList == null) || (psnVOList.length == 0))
              {
                MessageDialog.showHintDlg(this, null, ResHelper.getString("60110center", "06011center0065"));



                return;
              }
              Vector<PsnSelListVO> vSelPsnInf = new Vector();
              for (int i = 0; i < billModel.getRowCount(); i++) {
                if (billModel.getRowState(i) == 4)
                {
                  String pk_psnjob = billModel.getValueAt(i, "vcontractnum").toString();
                  for (PsnSelListVO psnSelListVO : psnVOList)
                  {
                    String pk_psnjob1 = psnSelListVO.getVcontractnum();
                    if (pk_psnjob.equals(pk_psnjob1))
                    {
                      vSelPsnInf.add(psnSelListVO);
                      break;
                    }
                  }
                }
              }
              ((IMakeService)NCLocator.getInstance().lookup(IMakeService.class)).finishOrReleaseAgreement(vSelPsnInf);
            }
          }
        }
        for (CtrtVO evo : vos)
        {
          SuperVO svo = evo;
          svo.setStatus(3);
        }
      }
      else
      {
        this.isOpenBusiFunc = true;
        setCtrtVOs(vos);
      }
    }
    else
    {
      this.isOpenBusiFunc = true;
      setCtrtVOs(vos);
    }
  }

  private boolean getSignDlg(LoginContext context, String[] jobpks)
    throws InstantiationException, IllegalAccessException, BusinessException
  {
    AgreementAppModel agreementModel = new AgreementAppModel();
    LoginContext loginContext = new LoginContext();
    loginContext.setNodeCode("60110agsign");
    loginContext.setEntranceUI(context.getEntranceUI());
    loginContext.setPk_org(context.getPk_org());
    loginContext.setPk_group(context.getPk_group());
    loginContext.setPk_loginUser(context.getPk_loginUser());
    agreementModel.setContext(loginContext);
    agreementModel.setAgreementType("postcont");
    agreementModel.setService(new AgreementModelService());

    AddAgreementAction action = new AddAgreementAction();
    action.setFromCtrtSign(true);
    action.setModel(agreementModel);
    WizardDialog dlg = action.getWizardDialog();
    PsnSelListVO[] psn = new AgreementRefAction(action.getWizardDialog(), agreementModel).queryPsnjobInfo(jobpks, null);
    BillListPanel list = ((AgreementPsnSelectPanel)((WizardStep)dlg.getModel().getSteps().get(0)).getComp()).getPsnListPanel();
    list.setHeaderValueVO(psn);
    BillPanelUtils.dealWithRefShowNameByPk(list, -1);
    ((WizardStep)dlg.getModel().getSteps().get(0)).putAttr("psnList", psn);
    for (int i = 0; i < psn.length; i++) {
      list.getHeadBillModel().setRowState(i, 4);
    }
    dlg.setWizardDialogListener(new FinishWizardDialogListener());
    dlg.showModal();

    boolean isOpenBusiFunc = agreementModel.isEffect();
    return isOpenBusiFunc;
  }

  private void notNullValidate()
  {
    BillData data = this.billCardPanel.getBillData();
    try
    {
      if (data != null) {
        data.dataNotNullValidate();
      }
    }
    catch (ValidationException e)
    {
      String msg = e.getMessage();
      ShowStatusBarMsgUtil.showStatusBarMsg(msg, this.model.getContext());
      MessageDialog.showErrorDlg(this, null, msg);
      throw new BusinessExceptionAdapter(e);
    }
  }

  private void validateDate()
  {
    CtrtVO ctrtVO = (CtrtVO)this.billCardPanel.getBillData().getChangeBillObjectByMetaData();
    try
    {
      UFLiteralDate begindate = (UFLiteralDate)ctrtVO.getAttributeValue("begindate");
      UFLiteralDate enddate = (UFLiteralDate)ctrtVO.getAttributeValue("enddate");
      if ((enddate != null) && (enddate.toString().length() > 10)) {
        throw new ValidationException(ResHelper.getString("6011make", "06011make0235"));
      }
      if ((begindate != null) && (enddate != null) && (!enddate.after(begindate))) {
        throw new ValidationException(ResHelper.getString("6011make", "06011make0029"));
      }
      UFLiteralDate probegindate = (UFLiteralDate)ctrtVO.getAttributeValue("probegindate");
      if ((begindate != null) && (probegindate != null) && (probegindate.before(begindate))) {
        throw new ValidationException(ResHelper.getString("6011make", "06011make0194"));
      }
      UFLiteralDate probenddate = (UFLiteralDate)ctrtVO.getAttributeValue("probenddate");
      if ((probegindate != null) && (probenddate != null) && (!probenddate.after(probegindate))) {
        throw new ValidationException(ResHelper.getString("6011make", "06011make0030"));
      }
    }
    catch (ValidationException e)
    {
      String msg = e.getMessage();
      ShowStatusBarMsgUtil.showStatusBarMsg(msg, this.model.getContext());
      MessageDialog.showErrorDlg(this, null, msg);
      throw new BusinessExceptionAdapter(e);
    }
  }

  private BillTempletVO getBillTempletVOWithMake(BillTempletVO clonedTemVO)
  {
    List<BillTempletBodyVO> arrListBodyVO = new ArrayList();
    List<BillTempletBodyVO> templetVOs = getHeadBillTempletVO();
    if (templetVOs != null) {
      arrListBodyVO.addAll(templetVOs);
    }
    templetVOs = getBodyBillTempletVOofMake(clonedTemVO);
    if (templetVOs != null) {
      arrListBodyVO.addAll(templetVOs);
    }
    clonedTemVO.setChildrenVO((CircularlyAccessibleValueObject[])arrListBodyVO.toArray(new BillTempletBodyVO[0]));
    return clonedTemVO;
  }

  protected List<BillTempletBodyVO> getBodyBillTempletVOofMake(BillTempletVO clonedTemVO)
  {
    String tablename = clonedTemVO.getHeadVO().getPkBillTypeCode();
    BillTempletBodyVO[] cloneBodyVOs = clonedTemVO.getBodyVO();

    int showOrder = 0;
    List<BillTempletBodyVO> bodyVOs = new ArrayList();

    BillTempletBodyVO templetBodyVO = new BillTempletBodyVO();


    templetBodyVO.setCardflag(Boolean.valueOf(true));
    templetBodyVO.setEditflag(Boolean.valueOf(false));
    templetBodyVO.setItemtype(Integer.valueOf(0));
    templetBodyVO.setNullflag(Boolean.valueOf(false));
    templetBodyVO.setPos(Integer.valueOf(0));
    templetBodyVO.setList(false);
    templetBodyVO.setListflag(Boolean.valueOf(false));
    templetBodyVO.setListshowflag(Boolean.FALSE);
    templetBodyVO.setWidth(Integer.valueOf(1));
    templetBodyVO.setShowflag(Boolean.valueOf(false));
    templetBodyVO.setItemkey("111");
    templetBodyVO.setDatatype(Integer.valueOf(0));
    templetBodyVO.setDefaultshowname(ResHelper.getString("6011make", "06011make0074"));
    templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
    bodyVOs.add(templetBodyVO);
    for (BillTempletBodyVO bodyVO : cloneBodyVOs) {
      if (!filterAuditItem(tablename, bodyVO))
      {
        templetBodyVO = (BillTempletBodyVO)bodyVO.clone();
        bodyVOs.add(templetBodyVO);
      }
    }
    for (BillTempletBodyVO bodyVO : cloneBodyVOs) {
      if (filterAuditItem(tablename, bodyVO))
      {
        templetBodyVO = bodyVO;
        templetBodyVO.setTable_name(ResHelper.getString("common", "UC001-0000095"));
        templetBodyVO.setPos(Integer.valueOf(2));
        bodyVOs.add(templetBodyVO);
      }
    }
    return bodyVOs;
  }

  private boolean filterAuditItem(String tablename, BillTempletBodyVO bodyVO)
  {
    return (MakeUtil.equalsKey(bodyVO, tablename, "creator")) || (MakeUtil.equalsKey(bodyVO, tablename, "creationtime")) || (MakeUtil.equalsKey(bodyVO, tablename, "modifier")) || (MakeUtil.equalsKey(bodyVO, tablename, "modifiedtime"));
  }

  private BillData getBillData(CMTemplateContainer templateContainer, String nodecode)
  {
    String tabname = "60110extend".equals(nodecode) ? ResHelper.getString("6011make", "06011make0070") : ResHelper.getString("6011make", "06011make0071");

    BillTempletVO vo = templateContainer.getTemplate("hi_psndoc_ctrt");
    BillTempletVO cloneVO = (BillTempletVO)vo.clone();
    BillData billData = new BillData(getBillTempletVO(cloneVO));
    BillTabVO billTabVO = new BillTabVO();

    billTabVO.setPos(Integer.valueOf(0));
    billTabVO.setTabcode("tab_code_tree_config");
    billTabVO.setTabindex(Integer.valueOf(1));
    billTabVO.setTabname(MessageFormat.format(ResHelper.getString("6011make", "06011make0072"), new Object[] { tabname }));


    billTabVO.setBasetab("main");
    billTabVO.setMixindex(Integer.valueOf(1));
    billData.addBodyTabVO(billTabVO);

    BillTabVO afterBillTabVO = new BillTabVO();
    afterBillTabVO.setPos(Integer.valueOf(0));
    afterBillTabVO.setTabcode("tab_code_tree_config_after");
    afterBillTabVO.setTabindex(Integer.valueOf(2));
    afterBillTabVO.setTabname(MessageFormat.format(ResHelper.getString("6011make", "06011make0073"), new Object[] { tabname }));


    afterBillTabVO.setBasetab("main");
    afterBillTabVO.setMixindex(Integer.valueOf(1));
    billData.addBodyTabVO(afterBillTabVO);

    return billData;
  }

  private BillTempletVO getBillTempletVO(BillTempletVO clonedTemVO)
  {
    List<BillTempletBodyVO> arrListBodyVO = new ArrayList();
    List<BillTempletBodyVO> templetVOs = getHeadBillTempletVO();
    if (templetVOs != null) {
      arrListBodyVO.addAll(templetVOs);
    }
    templetVOs = getBodyBillTempletVO(clonedTemVO);
    if (templetVOs != null) {
      arrListBodyVO.addAll(templetVOs);
    }
    clonedTemVO.setChildrenVO((CircularlyAccessibleValueObject[])arrListBodyVO.toArray(new BillTempletBodyVO[0]));
    return clonedTemVO;
  }

  protected List<BillTempletBodyVO> getHeadBillTempletVO()
  {
    return null;
  }

  protected List<BillTempletBodyVO> getBodyBillTempletVO(BillTempletVO clonedTemVO)
  {
    String tablename = clonedTemVO.getHeadVO().getPkBillTypeCode();

    BillTempletBodyVO[] cloneBodyVOs = clonedTemVO.getBodyVO();
    HashMap<String, BillTempletBodyVO> map = MakeUtil.billTempletBodyVOArrsToHashMap(cloneBodyVOs);

    String contcodeKey = "hi_psndoc_ctrt".equals(tablename) ? "contractnum" : "contcode";


    int showOrder = 0;
    List<BillTempletBodyVO> bodyVOs = new ArrayList();

    BillTempletBodyVO templetBodyVO = new BillTempletBodyVO();


    templetBodyVO.setCardflag(Boolean.valueOf(true));
    templetBodyVO.setEditflag(Boolean.valueOf(false));
    templetBodyVO.setItemtype(Integer.valueOf(0));
    templetBodyVO.setNullflag(Boolean.valueOf(false));
    templetBodyVO.setPos(Integer.valueOf(0));
    templetBodyVO.setList(false);
    templetBodyVO.setListflag(Boolean.valueOf(false));
    templetBodyVO.setListshowflag(Boolean.FALSE);
    templetBodyVO.setWidth(Integer.valueOf(1));
    templetBodyVO.setShowflag(Boolean.valueOf(false));
    templetBodyVO.setItemkey("111");
    templetBodyVO.setDatatype(Integer.valueOf(0));
    templetBodyVO.setDefaultshowname(ResHelper.getString("6011make", "06011make0074"));
    templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
    bodyVOs.add(templetBodyVO);
    for (BillTempletBodyVO bodyVO : cloneBodyVOs) {
      if (!filterName(tablename, contcodeKey, bodyVO)) {
        if (!bodyVO.getShowflag().booleanValue())
        {
          templetBodyVO = (BillTempletBodyVO)bodyVO.clone();
          templetBodyVO.setCardflag(Boolean.valueOf(true));
          templetBodyVO.setEditflag(Boolean.valueOf(false));
          templetBodyVO.setItemtype(Integer.valueOf(0));
          templetBodyVO.setPos(Integer.valueOf(0));
          templetBodyVO.setList(false);
          templetBodyVO.setListflag(Boolean.valueOf(false));
          templetBodyVO.setListshowflag(Boolean.FALSE);
          templetBodyVO.setWidth(Integer.valueOf(1));
          templetBodyVO.setShowflag(Boolean.valueOf(false));
          templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
          bodyVOs.add(templetBodyVO);
        }
      }
    }
    templetBodyVO = (BillTempletBodyVO)map.get(tablename + "." + contcodeKey);
    if (templetBodyVO != null)
    {
      templetBodyVO.setShowflag(Boolean.valueOf(true));
      templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
      templetBodyVO.setTable_code(null);
      bodyVOs.add(templetBodyVO);
    }
    templetBodyVO = (BillTempletBodyVO)map.get(tablename + "." + "name");
    if (templetBodyVO != null)
    {
      templetBodyVO.setShowflag(Boolean.valueOf(true));
      templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
      templetBodyVO.setTable_code(null);
      bodyVOs.add(templetBodyVO);
    }
    templetBodyVO = (BillTempletBodyVO)map.get(tablename + "." + "signdate");
    if (templetBodyVO != null)
    {
      templetBodyVO.setShowflag(Boolean.valueOf(true));
      templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
      templetBodyVO.setTable_code(null);
      bodyVOs.add(templetBodyVO);
    }
    for (BillTempletBodyVO bodyVO : cloneBodyVOs) {
      if (!filterName(tablename, contcodeKey, bodyVO)) {
        if (bodyVO.getShowflag().booleanValue())
        {
          templetBodyVO = (BillTempletBodyVO)bodyVO.clone();
          templetBodyVO.setTable_code("tab_code_tree_config_after");
          templetBodyVO.setShowflag(Boolean.valueOf(true));
          templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
          bodyVOs.add(templetBodyVO);
        }
      }
    }
    for (BillTempletBodyVO bodyVO : cloneBodyVOs) {
      if (!filterName(tablename, contcodeKey, bodyVO)) {
        if (bodyVO.getShowflag().booleanValue())
        {
          templetBodyVO = bodyVO;
          templetBodyVO.setTable_code("tab_code_tree_config");
          templetBodyVO.setItemkey(templetBodyVO.getItemkey() + "_old");
          templetBodyVO.setEditflag(Boolean.valueOf(false));
          templetBodyVO.setNullflag(Boolean.valueOf(false));
          templetBodyVO.setShowflag(Boolean.valueOf(true));
          templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
          bodyVOs.add(templetBodyVO);
        }
      }
    }
    for (BillTempletBodyVO bodyVO : cloneBodyVOs) {
      if (filterAuditItem(tablename, bodyVO))
      {
        templetBodyVO = bodyVO;
        templetBodyVO.setTable_name(ResHelper.getString("common", "UC001-0000095"));
        templetBodyVO.setShoworder(Integer.valueOf(showOrder++));
        templetBodyVO.setShowflag(Boolean.valueOf(true));
        templetBodyVO.setPos(Integer.valueOf(2));
        bodyVOs.add(templetBodyVO);
      }
    }
    return bodyVOs;
  }

  private boolean filterName(String tablename, String contcodeKey, BillTempletBodyVO bodyVO)
  {
    return (MakeUtil.equalsKey(bodyVO, tablename, contcodeKey)) || (MakeUtil.equalsKey(bodyVO, tablename, "name")) || (MakeUtil.equalsKey(bodyVO, tablename, "signdate")) || (MakeUtil.equalsKey(bodyVO, tablename, "creator")) || (MakeUtil.equalsKey(bodyVO, tablename, "creationtime")) || (MakeUtil.equalsKey(bodyVO, tablename, "modifier")) || (MakeUtil.equalsKey(bodyVO, tablename, "modifiedtime"));
  }

  public Object getValue()
  {
    CtrtVO ctrtVO = (CtrtVO)this.billCardPanel.getBillData().getChangeBillObjectByMetaData();
    Vector<CtrtVO> vec = new Vector();
    if (this.psnList.length == 1) {
      this.psnList[0].setVcontractnum(ctrtVO.getContractnum());
    }
    for (PsnSelListVO vo : this.psnList)
    {
      CtrtVO newVo = (CtrtVO)ctrtVO.clone();
      String contractnum = vo.getVcontractnum() == null ? ctrtVO.getContractnum() : vo.getVcontractnum();
      newVo.setContractnum(contractnum);
      newVo.setPk_psndoc(vo.getPk_psndoc());
      newVo.setPk_psnjob(vo.getPk_psnjob());
      newVo.setPk_psnorg(vo.getPk_psnorg());
      newVo.setAssgid(vo.getAssgid());
      newVo.setPk_org(this.pk_org);
      newVo.setContinuetime(vo.getContinuetime());
      newVo.setRecordnum(Integer.valueOf(0));
      newVo.setContid(vo.getContid());
      if (("60110finish".equals(this.nodeCode)) || ("60110release".equals(this.nodeCode)))
      {
        newVo.setBegindate(vo.getCont_begindate());
        newVo.setEnddate(vo.getCont_enddate());
        newVo.setTermmonth(vo.getTermmonth());
        newVo.setTermtype(vo.getTermtype());
      }
      boolean isBatchExtend = ("60110extend".equals(this.nodeCode)) && (this.psnList.length > 1);
      if (isBatchExtend)
      {
        Integer termmonth = Integer.valueOf(0);
        UFLiteralDate begindate = null;
        UFLiteralDate enddate = null;
        UFLiteralDate oldEnddate = vo.getCont_enddate();
        int termUnit = getUnit("cont_unit");
        if (this.extendtype == 1)
        {
          termmonth = (Integer)ctrtVO.getAttributeValue("termmonth");
          begindate = oldEnddate.getDateAfter(1);
          if ((begindate != null) && (termmonth != null)) {
            enddate = HRCMTermUnitUtils.getDateAfterMonth(begindate, termmonth.intValue(), Integer.valueOf(termUnit));
          }
        }
        else if (this.extendtype == 2)
        {
          begindate = oldEnddate.getDateAfter(1);
          enddate = (UFLiteralDate)ctrtVO.getAttributeValue("enddate");
          if ((begindate != null) && (enddate != null))
          {
            int days = UFLiteralDate.getDaysBetween(begindate, enddate);
            this.daysList.add(Integer.valueOf(days));
            try
            {
              termmonth = HRCMTermUnitUtils.getTermFromDays(termUnit, days);
            }
            catch (Exception e)
            {
              Logger.error(e.getMessage());
            }
          }
          else
          {
            termmonth = null;
          }
        }
        newVo.setAttributeValue("begindate", begindate);
        newVo.setAttributeValue("enddate", enddate);
        newVo.setAttributeValue("termmonth", termmonth);

        begindate = null;
        enddate = null;
        oldEnddate = null;
      }
      newVo.setStatus(2);

      vec.add(newVo);
    }
    Object[] obj = null;
    obj = vec.toArray();

    CtrtVO[] vos = new CtrtVO[obj.length];
    for (int i = 0; i < vos.length; i++) {
      vos[i] = ((CtrtVO)obj[i]);
    }
    return vos;
  }

  public void setValue(Object objVO)
  {
    CtrtVO vo = (CtrtVO)objVO;


    BillItem[] bilItems = this.billCardPanel.getHeadItems();


    List<Object> list = new ArrayList();
    SuperVO oldVO = null;
    if (("60110change".equals(this.nodeCode)) || ("60110extend".equals(this.nodeCode)))
    {
      CircularlyAccessibleValueObject[] superVOs = (CircularlyAccessibleValueObject[])this.aggVOs[0].getTableVO("hi_psndoc_ctrt");
      for (int i = 0; i < superVOs.length; i++)
      {
        SuperVO superVO_old = (SuperVO)superVOs[i];
        UFBoolean lastFlag = (UFBoolean)superVO_old.getAttributeValue("lastflag");
        if (lastFlag.booleanValue()) {
          oldVO = superVO_old;
        }
      }
      try
      {
        list = (List)((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).queryEffect(vo);
      }
      catch (BusinessException e)
      {
        Logger.error(e.getMessage());
      }
      oldVO = (SuperVO)list.get(0);
    }
    for (BillItem billItem : bilItems)
    {
      String key = billItem.getKey();
      String attribute = key.substring(key.lastIndexOf(".") + 1);
      if (billItem.getKey().endsWith("_old"))
      {
        if (billItem.getKey().endsWith("job_org_old"))
        {
          String orgPK = (String)this.aggVOs[0].getParentVO().getAttributeValue("pk_org");


          billItem.setValue(orgPK);
        }
        else
        {
          Object value = MakeUtil.getAttributeValueFilterTablename(oldVO, billItem.getKey().substring(0, billItem.getKey().length() - 4));
          billItem.setValue(value);
        }
      }
      else if (("pk_dept".equalsIgnoreCase(attribute)) || ("deptname".equalsIgnoreCase(attribute)))
      {
        this.billCardPanel.getHeadItem(key).setValue(this.psnList[0].getPk_deptdoc());
      }
      else
      {
        if ((billItem.getKey().endsWith("hi_psndoc_ctrt.contractnum")) && ("60110extend".equals(this.nodeCode)))
        {
          UFBoolean para = UFBoolean.FALSE;
          try
          {
            para = SysinitAccessor.getInstance().getParaBoolean(this.model.getContext().getPk_group(), "HRCM0001");
          }
          catch (BusinessException e)
          {
            Logger.error(e.getMessage(), e);
          }
          if ((para.booleanValue()) && (this.psnList != null) && (this.psnList.length == 1)) {
            this.billCardPanel.getHeadItem("hi_psndoc_ctrt.contractnum").setEdit(true);
          }
        }
        this.billCardPanel.getHeadItem(key).setValue(vo.getAttributeValue(attribute));
      }
    }
    BillItem[] tailItems = this.billCardPanel.getTailItems();
    for (BillItem billItem : tailItems)
    {
      String key = billItem.getKey();
      String attribute = key.substring(key.lastIndexOf(".") + 1);

      this.billCardPanel.getTailItem(key).setValue(vo.getAttributeValue(attribute));
    }
    initTermItem(this.billCardPanel, this.pk_org, this.nodeCode, false, false, 0, Integer.valueOf(getExtendtype()));
    if ("60110extend".equals(this.nodeCode)) {
      if (this.psnList.length > 1)
      {
        if (1 == this.extendtype)
        {
          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setEnabled(Boolean.FALSE.booleanValue());
          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setValue(null);
          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setNull(false);

          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setValue(null);
        }
        else if (2 == this.extendtype)
        {
          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setEnabled(Boolean.FALSE.booleanValue());
          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setValue(null);
          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setNull(false);

          this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setValue(null);
        }
      }
      else
      {
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setEnabled(Boolean.TRUE.booleanValue());
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setValue(null);
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.enddate").setNull(true);
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setEnabled(Boolean.TRUE.booleanValue());
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setValue(null);
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setNull(true);
      }
    }
  }

  public BillCardPanel getCenterPanel()
  {
    return (BillCardPanel)super.getCenterPanel();
  }

  public void initUI()
  {
    super.initUI();

    this.billCardPanel.addEditListener(this);
    this.billCardPanel.setBillBeforeEditListenerHeadTail(this);

    this.billCardPanel.getHeadItem("hi_psndoc_ctrt.termmonth").setLength(3);
    setTitle(getTitle());
    setSize(900, 700);

    CtrtVO vo = getCtrtVO();
    if ("60110sign".equals(this.nodeCode)) {
      setValue(vo);
    }
  }

  public void setContCode(PsnSelListVO[] psnSelVOs, String modeName, LoginContext context, BillCardPanel cardPanel, MakeBillManageModel makeMode)
  {
    try
    {
      int selLength = psnSelVOs.length;
      if (("60110sign".equals(context.getNodeCode())) || ("60110extend".equals(context.getNodeCode())))
      {
        if ("60110extend".equals(context.getNodeCode()))
        {
          UFBoolean editable = (UFBoolean)makeMode.getContPara().get("HRCM0001");
          if (!editable.booleanValue())
          {
            setContCodeEnabled(cardPanel, modeName, false);
            return;
          }
        }
        BillCodeContext billCodeContext = BillCodeHelper.getBillCodeContext(HRCMUtils.getBillCodeForTableName(modeName), context.getPk_group(), context.getPk_org());

        String[] billCodeArr = new String[selLength];
        DefauteCode defautCode = null;
        if ((billCodeContext == null) && (selLength == 1))
        {
            //add by waite
            QueryMakeBillCode queryBC=new QueryMakeBillCode();
            String codeStr=queryBC.getCodeStr(psnSelVOs[0].getPk_org(), psnSelVOs[0].getPsncode());
            String maxCode = queryBC.getMaxCode("hi_psndoc_ctrt",codeStr,psnSelVOs[0].getPk_org());
            String code = queryBC.getNextCode(codeStr,maxCode);            
            psnSelVOs[0].setVcontractnum(code);
            setContCodeEnabled(cardPanel, modeName, true);
        }
        else if (billCodeContext != null)
        {
          boolean isEditable = billCodeContext.isEditable();
          IHrBillCode ibillcode = (IHrBillCode)NCLocator.getInstance().lookup(IHrBillCode.class);
          billCodeArr = ibillcode.getBillCode(HRCMUtils.getBillCodeForTableName(modeName), context.getPk_group(), context.getPk_org(), selLength);

          setAutoGeneratedCodes(billCodeArr);
          for (int i = 0; i < psnSelVOs.length; i++) {
            psnSelVOs[i].setVcontractnum(billCodeArr[i]);
          }
          if (selLength > 1) {
            setContCodeEnabled(cardPanel, modeName, false);
          } else {
            setContCodeEnabled(cardPanel, modeName, isEditable);
          }
        }
        else
        {
          String tablename = "hi_psndoc_ctrt";
          String maxZdCode = ((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).getMaxZDCode(tablename, DefauteCode.getDayStr());
          defautCode = new DefauteCode(maxZdCode);
          for (int i = 0; i < psnSelVOs.length; i++)
          {
            //update by waite
            //String code = defautCode.getNextCode();
            //查询已有的当前日期最大编码流水号,改为查询当前人员的最大流水号
            //查数据库
            QueryMakeBillCode queryBC=new QueryMakeBillCode();
            String codeStr=queryBC.getCodeStr(psnSelVOs[i].getPk_org(), psnSelVOs[i].getPsncode());
            String maxCode = queryBC.getMaxCode(tablename, codeStr,psnSelVOs[i].getPk_org()); 
            String code = queryBC.getNextCode(codeStr,maxCode);
            psnSelVOs[i].setVcontractnum(code);
          }
          setContCodeEnabled(cardPanel, modeName, false);
        }
      }
      else if ("60110extend".equals(context.getNodeCode()))
      {
        UFBoolean editable = (UFBoolean)makeMode.getContPara().get("HRCM0001");
        if (!editable.booleanValue())
        {
          setContCodeEnabled(cardPanel, modeName, false);
          return;
        }
      }
      else
      {
        setContCodeEnabled(cardPanel, modeName, false);
      }
      if ("60110extend".equals(context.getNodeCode()))
      {
        UFBoolean editable = (UFBoolean)makeMode.getContPara().get("HRCM0001");
        if ((editable.booleanValue()) && (selLength == 1))
        {
          BillCodeContext billCodeContext = HiCacheUtils.getBillCodeContext("contract", context.getPk_group(), context.getPk_org());
          boolean editableRule = billCodeContext == null ? true : billCodeContext.isEditable();
          cardPanel.getHeadItem("hi_psndoc_ctrt.contractnum").setEdit(editableRule);
        }
      }
    }
    catch (Exception e)
    {
      Logger.error(e.getMessage());
    }
  }

  private static void setContCodeEnabled(BillCardPanel cardPanel, String modeName, boolean enable)
  {
    String tablename = cardPanel.getHeadItems()[0].getTableCode();
    if ("hi_psndoc_ctrt".equals(tablename))
    {
      MakeUtil.getHeadItem(cardPanel, "contractnum").setEnabled(enable);
      MakeUtil.getHeadItem(cardPanel, "contractnum").setNull(enable);
    }
    else
    {
      MakeUtil.getHeadItem(cardPanel, "contcode").setEnabled(enable);
      MakeUtil.getHeadItem(cardPanel, "contcode").setNull(enable);
    }
  }

  private CtrtVO getCtrtVO()
  {
    this.psnList = getPsnSellist();

    Integer conttype = Integer.valueOf(HRCMUtils.getNodeCodeTermType(this.nodeCode));
    UFDateTime date = PubEnv.getServerTime();
    UFLiteralDate literalDate = new UFLiteralDate(date.getDate().toStdString());

    PsnSelListVO psnVO = this.psnList[0];
    CtrtVO ctrtVO = new CtrtVO();



    setContCode(this.psnList, "hi_psndoc_ctrt", this.model.getContext(), this.billCardPanel, this.model);
    if ("60110sign".equals(this.nodeCode)) {
      setSignData(conttype, literalDate, psnVO, ctrtVO, date);
    } else {
      ctrtVO = setOtherBusiData(conttype, literalDate, psnVO, date);
    }
    return ctrtVO;
  }

  private CtrtVO setOtherBusiData(Integer conttype, UFLiteralDate literalDate, PsnSelListVO psnVO, UFDateTime date)
  {
    SuperVO svo = null;
    for (int i = 0; i < this.aggVOs[0].getTableVO("hi_psndoc_ctrt").length; i++)
    {
      UFBoolean isLast = (UFBoolean)((SuperVO)this.aggVOs[0].getTableVO("hi_psndoc_ctrt")[i]).getAttributeValue("lastflag");
      if (isLast.booleanValue()) {
        svo = (SuperVO)this.aggVOs[0].getTableVO("hi_psndoc_ctrt")[i];
      }
    }
    if ("60110extend".equals(this.nodeCode))
    {
      if (this.psnList.length == 1)
      {
        UFLiteralDate oldEnddate = (UFLiteralDate)svo.getAttributeValue("enddate");

        UFLiteralDate begindate = oldEnddate == null ? literalDate : ((UFLiteralDate)oldEnddate.clone()).getDateAfter(1);

        svo.setAttributeValue("begindate", begindate.clone());

        String termtype = (String)svo.getAttributeValue("termtype");
        if (StringUtils.isNotBlank(termtype)) {
          if ("CM01".equals(termtype))
          {
            svo.setAttributeValue("enddate", null);
            svo.setAttributeValue("termmonth", null);
          }
          else if (("CM02".equals(termtype)) || ("CM03".equals(termtype)))
          {
            svo.setAttributeValue("termmonth", null);
            svo.setAttributeValue("enddate", null);
          }
          else
          {
            svo.setAttributeValue("termmonth", svo.getAttributeValue("termmonth"));
            svo.setAttributeValue("enddate", svo.getAttributeValue("enddate"));
          }
        }
      }
      else
      {
        svo.setAttributeValue("begindate", null);
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.begindate").setEnabled(Boolean.FALSE.booleanValue());
        this.billCardPanel.getHeadItem("hi_psndoc_ctrt.begindate").setNull(false);
      }
    }
    else
    {
      svo.setAttributeValue("begindate", svo.getAttributeValue("begindate"));
      svo.setAttributeValue("enddate", svo.getAttributeValue("enddate"));
    }
    UFLiteralDate begin = (UFLiteralDate)svo.getAttributeValue("begindate");
    UFLiteralDate end = (UFLiteralDate)svo.getAttributeValue("enddate");
    if ((begin != null) && (end != null)) {
      if (((UFLiteralDate)begin.clone()).after((UFLiteralDate)end.clone())) {
        svo.setAttributeValue("enddate", null);
      }
    }
    begin = null;
    end = null;

    SuperVO newVO = new CtrtVO();
    newVO.setAttributeValue("conttype", conttype);
    newVO.setAttributeValue("signdate", literalDate.clone());
    newVO.setAttributeValue("begindate", svo.getAttributeValue("begindate"));
    newVO.setAttributeValue("enddate", svo.getAttributeValue("enddate"));
    newVO.setAttributeValue("pk_psndoc", svo.getAttributeValue("pk_psndoc"));

    newVO.setAttributeValue("pk_psnorg", svo.getAttributeValue("pk_psnorg"));

    newVO.setAttributeValue("assgid", svo.getAttributeValue("assgid"));
    newVO.setAttributeValue("pk_psnjob", svo.getAttributeValue("pk_psnjob"));
    newVO.setAttributeValue("pk_group", svo.getAttributeValue("pk_group"));
    newVO.setAttributeValue("pk_org", this.pk_org);

    newVO.setAttributeValue("pk_conttext", svo.getAttributeValue("pk_conttext"));
    newVO.setAttributeValue("pk_majorcorp", svo.getAttributeValue("pk_majorcorp"));
    newVO.setAttributeValue("signaddr", svo.getAttributeValue("signaddr"));
    newVO.setAttributeValue("creator", PubEnv.getPk_user());
    newVO.setAttributeValue("creationtime", date);
    if (svo.getAttributeValue("termmonth") != null) {
      newVO.setAttributeValue("termmonth", svo.getAttributeValue("termmonth"));
    }
    newVO.setAttributeValue("contractnum", svo.getAttributeValue("contractnum"));
    newVO.setAttributeValue("termtype", svo.getAttributeValue("termtype"));
    newVO.setAttributeValue("cont_unit", svo.getAttributeValue("cont_unit"));
    newVO.setAttributeValue("continuetime", svo.getAttributeValue("continuetime"));


    setGlbdef(this.nodeCode, svo, newVO);
    if ("60110release".equals(this.nodeCode))
    {
      newVO.setAttributeValue("presenter", "1");
      UIRefPane pane = (UIRefPane)this.billCardPanel.getHeadItem(CtrtVO.getDefaultTableName() + ".pk_unchreason").getComponent();
      pane.getRefModel().setPara1("1002Z71000000000PJRJ");
      pane.getRefModel().setCacheEnabled(false);
      pane.getRefModel().setRefNodeName(ResHelper.getString("6011make", "06011make0093"));
    }
    else if ("60110finish".equals(this.nodeCode))
    {
      UIRefPane pane = (UIRefPane)this.billCardPanel.getHeadItem(CtrtVO.getDefaultTableName() + ".pk_unchreason").getComponent();
      pane.getRefModel().setPara1("1002Z71000000000PJRK");
      pane.getRefModel().setCacheEnabled(false);
      pane.getRefModel().setRefNodeName(ResHelper.getString("6011make", "06011make0002"));
    }
    CtrtVO ctrtVO = (CtrtVO)newVO;
    boolean isBatch = this.psnList.length > 1;
    ctrtVO.setAttributeValue("name", isBatch ? psnVO.getPsnname() + "..." : psnVO.getPsnname());
    ctrtVO.setAttributeValue("code", isBatch ? psnVO.getPsncode() + "..." : psnVO.getPsncode());
    ctrtVO.setContractnum(isBatch ? psnVO.getVcontractnum() + "..." : psnVO.getVcontractnum());
    ctrtVO.setAttributeValue("job_org", psnVO.getPk_org());


    WizardFirstInterface firstFace = CMMethodFactory.getWizardFirstInterface(this.nodeCode, CtrtVO.getDefaultTableName());
    if (firstFace != null) {
      firstFace.setNewVOinfo(svo, newVO);
    }
    setValue(newVO);
    if (firstFace != null) {
      firstFace.setHeadItem(this.model, this.billCardPanel, this.psnList);
    }
    return ctrtVO;
  }

  private void setSignData(Integer conttype, UFLiteralDate literalDate, PsnSelListVO psnVO, CtrtVO ctrtVO, UFDateTime date)
  {
    String vmodeltype = getInfosetPK();

    String pk_conmodel = null;
    try
    {
      ContmodelVO modelVO = ((ITempletBatchQueryService)NCLocator.getInstance().lookup(ITempletBatchQueryService.class)).queryDefautContmodelVOByOrg(this.model.getContext(), vmodeltype);
      if (modelVO != null) {
        pk_conmodel = modelVO.getPk_conmodel();
      }
    }
    catch (Exception e)
    {
      Logger.error(e);
    }
    ctrtVO.setPk_conttext(pk_conmodel);
    ctrtVO.setPk_psndoc(psnVO.getPk_psndoc());
    ctrtVO.setPk_psnjob(psnVO.getPk_psnjob());
    ctrtVO.setIfprop(UFBoolean.TRUE);
    ctrtVO.setConttype(conttype);
    ctrtVO.setBegindate(literalDate);
    ctrtVO.setProbegindate(literalDate);
    ctrtVO.setSigndate(literalDate);
    ctrtVO.setRecordnum(Integer.valueOf(0));
    ctrtVO.setContinuetime(Integer.valueOf(1));
    ctrtVO.setTermtype("CM01");
    ctrtVO.setCont_unit(Integer.valueOf(getUnit("cont_unit")));
    ctrtVO.setProp_unit(Integer.valueOf(getUnit("prop_unit")));
    ctrtVO.setCreator(PubEnv.getPk_user());
    ctrtVO.setCreationtime(date);
    ctrtVO.setPk_org(this.pk_org);
    ctrtVO.setPk_group(this.model.getContext().getPk_group());
    ctrtVO.setPk_majorcorp(this.pk_org);

    boolean isBatch = this.psnList.length > 1;
    ctrtVO.setAttributeValue("name", isBatch ? psnVO.getPsnname() + "..." : psnVO.getPsnname());
    ctrtVO.setAttributeValue("code", isBatch ? psnVO.getPsncode() + "..." : psnVO.getPsncode());
    ctrtVO.setContractnum(isBatch ? psnVO.getVcontractnum() + "..." : psnVO.getVcontractnum());
    ctrtVO.setAttributeValue("job_org", psnVO.getPk_org());
  }

  private int getUnit(String code)
  {
    return this.billCardPanel.getHeadItem(CtrtVO.getDefaultTableName() + "." + code).getDefaultValueObject() == null ? HRCMTermUnitUtils.TERMUNIT_MONTH : Integer.parseInt((String)this.billCardPanel.getHeadItem(CtrtVO.getDefaultTableName() + "." + code).getDefaultValueObject());
  }

  private PsnSelListVO[] getPsnSellist()
  {
    CenterWizardInitDataInterface initDataInterface = CMMethodFactory.getCenterWizardInitDataInterface(this.nodeCode, "hi_psndoc_ctrt");
    try
    {
      this.psnList = initDataInterface.getPsnSelListVOs(this.aggVOs, this.pk_org);
    }
    catch (BusinessException e)
    {
      Logger.error(e.getMessage());
    }
    return this.psnList;
  }

  public String getInfosetPK()
  {
    try
    {
      if (this.model.getTableToInfosetPkMap().isEmpty())
      {
        StringBuffer where = new StringBuffer("pk_infoset_sort in (select pk_infoset_sort from hr_infoset_sort where sort_code = 'hrcm_cont') ");

        where.append("order by showorder ");

        InfoSetVO[] infosetVOs = ((IQueryMakeService)NCLocator.getInstance().lookup(IQueryMakeService.class)).queryInfoSet(this.model.getContext(), where.toString());
        if ((infosetVOs != null) && (infosetVOs.length > 0) && (infosetVOs[0] != null)) {
          for (InfoSetVO infosetVO : infosetVOs) {
            this.model.getTableToInfosetPkMap().put(infosetVO.getTable_code(), infosetVO.getPk_infoset());
          }
        }
      }
      return (String)this.model.getTableToInfosetPkMap().get(this.model.getModeName());
    }
    catch (BusinessException ex)
    {
      throw new BusinessRuntimeException(ex.getMessage(), ex);
    }
  }

  private void setGlbdef(String nodecode, SuperVO oldVO, SuperVO newVO)
  {
    IAttributeMeta[] attributes = oldVO.getMetaData().getAttributes();
    for (IAttributeMeta attribute : attributes) {
      if (!attribute.isStatic()) {
        newVO.setAttributeValue(attribute.getName(), oldVO.getAttributeValue(attribute.getName()));
      }
    }
  }

  private void initTermItem(BillCardPanel cardPanel, String pk_org, String nodecode, boolean isExtendPsn, boolean isFromContOpinion, int itemmonth, Integer extendtype)
  {
    if ("60110change".equals(nodecode))
    {
      CardCheckProcessorImpl processor = new CardCheckProcessorImpl();
      processor.setExtendPsn(isExtendPsn);
      if (processor.getBillItem(cardPanel, "ifprop") != null)
      {
        processor.getBillItem(cardPanel, "ifprop").setEdit(true);
        boolean flag = processor.getBillItem(cardPanel, "ifprop").isShowFlag();
        processor.setPropItem(cardPanel, flag);
      }
    }
    if ((!"60110sign".equals(nodecode)) && (!"60110extend".equals(nodecode))) {
      return;
    }
    CardCheckProcessorImpl processor = new CardCheckProcessorImpl();
    processor.setPk_org(pk_org);
    processor.setExtendPsn(isExtendPsn);
    processor.setExtendtype(extendtype);
    processor.refreshTermTypeStat(cardPanel, !"60110sign".equals(nodecode), isFromContOpinion, Integer.valueOf(itemmonth));
  }

  public String getTitle()
  {
    String title = "";
    if ("60110sign" == this.nodeCode) {
      title = ResHelper.getString("6011make", "06011make0129");
    } else if ("60110change" == this.nodeCode) {
      title = ResHelper.getString("6011make", "06011make0131");
    } else if ("60110extend" == this.nodeCode) {
      title = ResHelper.getString("6011make", "06011make0133");
    } else if ("60110finish" == this.nodeCode) {
      title = ResHelper.getString("6011make", "06011make0137");
    } else if ("60110release" == this.nodeCode) {
      title = ResHelper.getString("6011make", "06011make0135");
    }
    return title;
  }

  private void validateTermmonth()
  {
    try
    {
      for (Integer days : this.daysList)
      {
        if (days.intValue() < 0) {
          throw new ValidationException(ResHelper.getString("6011make", "06011make0091"));
        }
        if (days.intValue() == 0) {
          throw new ValidationException(ResHelper.getString("6011make", "06011make0155"));
        }
      }
    }
    catch (ValidationException e)
    {
      String msg = e.getMessage();
      ShowStatusBarMsgUtil.showStatusBarMsg(msg, this.model.getContext());
      MessageDialog.showErrorDlg(this, null, msg);
      throw new BusinessExceptionAdapter(e);
    }
    finally
    {
      this.daysList.clear();
    }
  }

  public AggPsnjobVO[] getAggVOs()
  {
    return this.aggVOs;
  }

  public void setAggVOs(AggPsnjobVO[] aggVOs)
  {
    this.aggVOs = aggVOs;
  }

  public String getNodeCode()
  {
    return this.nodeCode;
  }

  public void setNodeCode(String nodeCode)
  {
    this.nodeCode = nodeCode;
  }

  public String getPk_org()
  {
    return this.pk_org;
  }

  public void setPk_org(String pk_org)
  {
    this.pk_org = pk_org;
  }

  public void afterEdit(BillEditEvent e)
  {
    try
    {
      CheckProcessorFactory.createCenterCheckProcessor(e, this.pk_org, false).handleProcessor(this.billCardPanel);
    }
    catch (CheckException e1)
    {
      MessageDialog.showWarningDlg(this, null, e1.getMessage());
      Logger.error(e1);
    }
  }

  public void bodyRowChange(BillEditEvent e) {}

  public boolean isOpenBusiFunc()
  {
    return this.isOpenBusiFunc;
  }

  public void setOpenBusiFunc(boolean isOpenBusiFunc)
  {
    this.isOpenBusiFunc = isOpenBusiFunc;
  }

  public CtrtVO[] getCtrtVOs()
  {
    return this.ctrtVOs;
  }

  public void setCtrtVOs(CtrtVO[] ctrtVOs)
  {
    this.ctrtVOs = ctrtVOs;
  }

  public int getExtendtype()
  {
    return this.extendtype;
  }

  public void setExtendtype(int extendtype)
  {
    this.extendtype = extendtype;
  }

  public boolean beforeEdit(BillItemEvent e)
  {
    BillItem item = e.getItem();
    if ((item.getComponent() instanceof UIRefPane))
    {
      UIRefPane refPane = (UIRefPane)item.getComponent();
      if ((refPane != null) && (refPane.getRefModel() != null)) {
        refPane.setPk_org(this.model.getContext().getPk_org());
      }
    }
    String itemCode = item.getKey();
    if (itemCode.contains("pk_conttext"))
    {
      UIRefPane pane = (UIRefPane)item.getComponent();
      if ((pane != null) && (pane.getRefModel() != null))
      {
        ContModelRef refModel = (ContModelRef)pane.getRefModel();
        refModel.setPk_org(this.model.getContext().getPk_org());
        String orgSql = " hrcm_contmodel.pk_org in ('GLOBLE00000000000000', '" + this.model.getContext().getPk_group() + "', '" + this.model.getContext().getPk_org() + "')";

        pane.getRefModel().addWherePart(" and vmodeltype = '" + getInfosetPK() + "' and " + orgSql);
      }
    }
    return true;
  }

  private String[] getEditItemName(BillCardPanel cardPanel)
  {
    BillItem[] items = cardPanel.getHeadItems();
    List<String> list = new ArrayList();
    for (BillItem billItem : items) {
      if (billItem.isEdit()) {
        list.add(billItem.getKey().substring("hi_psndoc_ctrt.".length()));
      }
    }
    return (String[])list.toArray(new String[list.size()]);
  }

  public String[] getAutoGeneratedCodes()
  {
    return this.autoGeneratedCodes;
  }

  public void setAutoGeneratedCodes(String[] autoGeneratedCodes)
  {
    this.autoGeneratedCodes = autoGeneratedCodes;
  }
}
发布了66 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/hwq293/article/details/80022250