如何在后台创建寻源变更单,并自动提交和审核

栏目:云星瀚知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

如何在后台创建寻源变更单,并自动提交和审核

1. 如何在后台创建寻源变更单,并自动提交和审核

1.1    业务场景简介

寻源变更一般通过业务操作—>发起变更,或者 通过菜单“寻源变更”,新增变更单进行变更处理。但有时候需要后台创建变更单,并自动提交和审核,例如:在“结果公告”节点,如果发布的是流标公告,则自动生成一张项目终止/流标变更单,并自动提交和审核。

 

1、发布“流标公告”,并提交、审核:

 

2、自动创建“项目终止/流标变更单”,并自动提交和审核:

1.2    简要实现方案

步骤

开发内容

备注

1

后台创建变更单的入口插件,并注册

代码开发

2

后台创建变更单的表头插件,并注册

应用配置

3

后台创建变更单的组件插件,并注册

代码开发

 

1.3    详细开发步骤及示例代码

下面以发布“发布流标公告、项目终止/流标变更” 为例。

1.3.1  新增后台创建变更单的入口插件,并注册


插件最主要部分的是初始化变更单所需的数据,代码如下:

package kd.scm.src.opplugin.audithandle;

 

import java.util.HashMap;

import java.util.Map;

 

import   kd.bos.dataentity.entity.DynamicObject;

import   kd.bos.dataentity.resource.ResManager;

import kd.bos.orm.query.QCP;

import kd.bos.orm.query.QFilter;

import   kd.bos.servicehelper.BusinessDataServiceHelper;

import kd.bos.servicehelper.QueryServiceHelper;

import   kd.scm.common.constant.BillAssistConstant;

import   kd.scm.pds.common.constant.PdsMetadataConstant;

import   kd.scm.pds.common.constant.SrcCommonConstant;

import   kd.scm.pds.common.constant.SrcMetadataConstant;

import kd.scm.pds.common.extplugin.ExtPluginContext;

import   kd.scm.pds.common.extplugin.IExtPluginHandler;

import   kd.scm.pds.common.util.PdsCommonUtils;

import   kd.scm.src.common.util.SrcBidChangeUtil;

 

/**

 * 发布流标公告后--自动进行项目流标处理

 *

 *   @author rd_fumin_huang

 *

 */

public class SrcAutoEndchangeHandler   implements IExtPluginHandler {

       private   static final long serialVersionUID = 1L;

 

       @Override

       public   void process(ExtPluginContext args) {

              //   是否需要变更

              if   (!isNeedChange(args)) {

                     return;

              }

              //   创建变更上下文

              ExtPluginContext   context = createChangeContext(args);

 

              //   获取已存在的未审核变更单

              DynamicObject   changeObj = SrcBidChangeUtil.getBidChangeBill(context);

              if   (null == changeObj) {

                     //   创建变更单

                     changeObj   = SrcBidChangeUtil.createBidChangeBill(context);

              }

              //   执行 提交

              PdsCommonUtils.doOperation(changeObj,   BillAssistConstant.OP_SUBMIT);

              //   执行 审核

              PdsCommonUtils.doOperation(changeObj,   BillAssistConstant.OP_AUDIT);

       }

 

       /**

        * 创建变更上下文

        *

        * @param context

        * @return

        */

       public   ExtPluginContext createChangeContext(ExtPluginContext args) {

              ExtPluginContext   context = new ExtPluginContext();

              //   传入 寻源项目对象、id

              context.setProjectObj(args.getBillObj());

              context.setProjectId(args.getProjectId());

 

              // 初始化 valueMap(重要,二开需要修改)

              initValueMap(context);

 

              //   返回

              return   context;

       }

 

       /**

        * 初始化 valueMap(重要,二开需要修改)

        *

        * @param args

        * @param context

        */

       public   void initValueMap(ExtPluginContext context) {

              Map<String,   Object> valueMap = new HashMap<>(8);

              //   传入 完整的其他参数

              //   1 变更来源:1-寻源申请 2-项目立项 3-寻源项目

              valueMap.put(SrcCommonConstant.CHANGESOURCE,   SrcCommonConstant.CHANGESOURCE_PROJECT);

              //   2 寻源项目id

              valueMap.put(SrcCommonConstant.PROJECT,   context.getProjectId());

              //   3 变更类型id:项目终止/废标模板id (重要)

              long   templateId = PdsCommonUtils.getBasedataIdByNumber(PdsMetadataConstant.PDS_TPLCONFIG,   "SYS042");  //通过变更类型编码获取变更类型id

              valueMap.put(SrcCommonConstant.TEMPLATE,   templateId);

              //   获取 变更类型对象

              DynamicObject   changeType = BusinessDataServiceHelper.loadSingle(templateId,   PdsMetadataConstant.PDS_TPLCONFIG);

              //   用源单对象 暂存 变更类型对象

              context.setSourceObj(changeType);

 

              //   4 变更原因

              valueMap.put(SrcCommonConstant.REMARK,   ResManager.loadKDString("发布流标公告后自动终止项目。",   "SrcAutoEndchangeHandler_0", "scm-src-opplugin"));

              //   5 业务类型:同主单据

              valueMap.put(SrcCommonConstant.BIZTYPE,   context.getProjectObj().getLong(SrcCommonConstant.BIZTYPE + '.' +   SrcCommonConstant.ID));

              //   6 采购组织:同主单据

              valueMap.put(SrcCommonConstant.ORG,   context.getProjectObj().getLong(SrcCommonConstant.ORG + '.' +   SrcCommonConstant.ID));

              //   7 变更发起当前节点id

              valueMap.put(SrcCommonConstant.CURRENTNODE,   PdsCommonUtils.getNodeIdByEntityName(context.getProjectObj().getDataEntityType().getName()));

 

              //   暂存到 context--ParamMap2

              context.getParamMap2().put(SrcMetadataConstant.SRC_BIDCHANGE,   valueMap);

       }

 

       /**

        * 是否需要发起变更

        *

        * @param context

        * @return

        */

       public   boolean isNeedChange(ExtPluginContext args) {

              //   来源单据id = 寻源项目id

              QFilter   qfilter = new QFilter(SrcCommonConstant.SRCBILLID, QCP.equals,   args.getProjectId());

              //   变更类型 = D-流标公告

              qfilter.and(SrcCommonConstant.BIZTYPE,   QCP.equals, "D");

              //   父单据为 结果公告

              qfilter.and(SrcCommonConstant.PENTITYKEY,   QCP.equals, args.getBillObj().getDataEntityType().getName());

              //   查询结果公告组件

              if   (QueryServiceHelper.exists(SrcMetadataConstant.SRC_DECISIONNOTICE,   qfilter.toArray())) {

                     return   true;

              }

              return   false;

       }

}

 

 

1.3.2  新增后台创建变更单的表头插件,并注册

 

该插件采用标准插件即可,一般不需要修改或注册:

/**

 * 后台创建寻源变更单(表头、变更条件、变更逻辑、组件)

 *

 * @author rd_fumin_huang

 *

 */

public   class SrcCreateBidChangeBill implements IExtPluginHandler {

       private static final long   serialVersionUID = 1L;

 

       @Override

       public void process(ExtPluginContext   context) {

              // 创建变更单表头

              SrcBidChangeUtil.createBidChangeHead(context);

 

              // 创建变更单分录(变更条件、变更逻辑)

              SrcBidChangeUtil.createBidChangeEntry(context);

 

              // 创建模板分录

              SrcBidChangeUtil.createBidChangeTplEntry(context);

 

              // 保存

              PdsCommonUtils.saveDynamicObjects(context.getBillObj());

 

              // 批量创建组件

              SrcBidChangeUtil.createBidChangeComps(context);

       }

}

 

1.3.3  后台创建变更单的组件插件,并注册

插件编码:前缀(createChgComp)_变更组件元数据标识,如:createChgComp_src_projectend

 

不同的变更类型,其组件不一样,实现方式也不一样,一般都需要二开处理。

package   kd.scm.src.common.change;

 

import   kd.bos.dataentity.entity.DynamicObject;

import   kd.scm.pds.common.constant.SrcCommonConstant;

import   kd.scm.pds.common.extplugin.ExtPluginContext;

import   kd.scm.pds.common.extplugin.IExtPluginHandler;

import   kd.scm.pds.common.util.PdsCommonUtils;

import   kd.scm.src.common.util.SrcBidChangeUtil;

 

/**

 * 后台创建 项目终止/废标 组件

 *

 * @author rd_fumin_huang

 *

 */

public   class SrcCreateProjectEndComp implements IExtPluginHandler {

       private static final long   serialVersionUID = 1L;

 

       @Override

       public void process(ExtPluginContext   context) {

              // 初始化 valueMap

              initValueMap(context);

 

              // 创建组件对象

              DynamicObject compObj =   SrcBidChangeUtil.createBidChangeComp(context);

 

              // 设置组件值

              setCompValue(context, compObj);

 

              // 保存

              PdsCommonUtils.saveDynamicObjects(compObj);

       }

 

       /**

        * 初始化 valueMap

        *

        * @param context

        */

       public void   initValueMap(ExtPluginContext context) {

              // 其他二开字段,可以暂存到Map

              // Map<String, Object>   valueMap = new HashMap<>(16);

              //   valueMap.put(SrcCommonConstant.PROJECT, context.getProjectId());

              // context.getParamMap2().put(context.getEntityId(),   valueMap);

       }

 

       /**

        * 设置组件值

        *

        * @param context

        * @param compObj

        */

       public void   setCompValue(ExtPluginContext context, DynamicObject compObj) {

              // 寻源项目id

              compObj.set(SrcCommonConstant.PROJECT,   context.getProjectId());

              // D--进行终止/流标处理

              compObj.set(SrcCommonConstant.BIZTYPE,   "D");

       }

}

 

 

1.4    参考开发工作量(人/天)

步骤

开发内容

估计开发人天

1

后台创建变更单的入口插件,并注册

 

0.5~2.0

 

2

后台创建变更单的表头插件,并注册

3

后台创建变更单的组件插件,并注册

合计:约0.52.0开发人天。

 


如何在后台创建寻源变更单,并自动提交和审核

1. 如何在后台创建寻源变更单,并自动提交和审核1.1 业务场景简介寻源变更一般通过业务操作—>发起变更,或者 通过菜单“寻源变更”...
点击下载文档
上一篇:代理评标下一篇:寻源立项
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息