用友NC合同编码自定义

本文介绍如何在用友NC系统中实现合同编码自定义,详细解析编码规则(地区简写+00+人员编码+流水号)并提供关键代码示例,涉及合同处理中心和合同签订过程中的编码生成逻辑。
摘要由CSDN通过智能技术生成

需求:

合同编码逻辑:

地区简写+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_unchreas
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值