Skip to content

指令执行前与执行后扩展开发

服务地址

本示例,使用 KQCO 服务 的地址是:192.168.1.13 端口是:8003 后面会使用此参数

指令执行前与执行后方法为默认触发,无需配置。

指令执行前方法配置为 指令:INIT ,例如 SendCommit:INIT

指令执行后方法配置为 指令:DESTROY ,例如 FlowSend:DESTROY

新建 springboot 项目

pom.xml 中引入 jar 包: co-service-sdk-api-6.x.x.jar下载

xml
<dependency>
    <groupId>com.kanq.co</groupId>
    <artifactId>co-service-sdk-api</artifactId>
    <version>6.x.x</version>
</dependency>
<dependency>
    <groupId>com.kanq.co</groupId>
    <artifactId>co-service-sdk-api</artifactId>
    <version>6.x.x</version>
</dependency>

启动类 SpringBootApplication 类配置:

java
//启动类扫描SDK配置项设置--此处必须固定此路径
@ComponentScan({"com.kqgeo.co.ext.*"})
 //忽略数据源配置的话可配置此注解
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}
//启动类扫描SDK配置项设置--此处必须固定此路径
@ComponentScan({"com.kqgeo.co.ext.*"})
 //忽略数据源配置的话可配置此注解
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

注意

springboot2.* @ComponentScan({"com.kqgeo.co.ext.*"})
springboot3.* @ComponentScan({"com.kqgeo.co.ext.*","com.kanq.co.core"})

yml 配置(完整配置详见):

yaml
server:
  port: 8888 #端口
coservice: #C++服务相关配置
  '0':
    model: hotStandby
    server:
      - addr: 192.168.1.13 #二开程序的C++配置要与java运行服务使用的C++地址端口保持一致
        port: 8003
cofile:
  affix: E:\\affix\\ #文件存储路径
server:
  port: 8888 #端口
coservice: #C++服务相关配置
  '0':
    model: hotStandby
    server:
      - addr: 192.168.1.13 #二开程序的C++配置要与java运行服务使用的C++地址端口保持一致
        port: 8003
cofile:
  affix: E:\\affix\\ #文件存储路径

coservice

coservice 配置要与平台配置保持一致

扩展接口实现

  • 创建 java 类 com.kqgeo.co.ext.flow

  • 增加 public KqcoParm sendCommitInit(@RequestBody ObjectNode parameter); 流程发送前置处理方法

  • 增加指令注册注解 @Description(describe = "流程发送前置处理方法", instructions = "SendCommit:INIT",requestType = "post", requestUrl = "/co/flow/sendCommit-init")

  • 增加 public KqcoParm flowSendDestroy(@RequestBody ObjectNode parameter); 流程发送查询接收人后置处理

  • 增加指令注册注解 @Description(describe = "流程发送查询接收人后置处理", instructions = "FlowSend:DESTROY",requestType = "post", requestUrl = "/co/flow/flowSend-destroy")

注意

  • com.kqgeo.co.ext 包名需要与配置文件中的 packageName 保持一致

  • 注解说明: - describe 接口描述 - requestType 请求方式 - requestUrl 请求路径,请求路径要求前面 / 不可忽略 - instructions 指令名称

java
package com.kqgeo.co.ext.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.kqgeo.co.ext.config.Exclude;
import com.kqgeo.co.ext.sdk.KqcoApi;
import com.kqgeo.co.ext.sdk.KqcoParm;
import com.kqgeo.co.ext.sdk.ParmImpl;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("co/ext")
public class FlowDemo {

  @RequestMapping(value = "/sendCommit-init", method = RequestMethod.POST)
  @Description(describe = "流程发送前置处理方法", instructions = "SendCommit:INIT", requestType = "post", requestUrl = "/co/ext/sendCommit-init")
  public KqcoParm sendCommitInit(@RequestBody ObjectNode parameter) {
    String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
    KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
    kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
		ParmImpl kqcoParm = (ParmImpl)kqcoApi.getKqcoParm();
    // 参数检查
    if (kqcoParm.setRequest(parameter) != 0)
      return kqcoParm;
    //获取流程发送信息
    JsonNode argsJson = parameter.get("args");
    //把审批意见改成改成不同意
    String result = argsJson.toString().replace("测试同意", "测试不同意");
    JSONArray arr = new JSONArray();
    arr.add(result);
    //赋值返回
    kqcoParm.setParameter(result);
    return kqcoParm;
  }
}

package com.kqgeo.co.ext.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.kqgeo.co.ext.config.Exclude;
import com.kqgeo.co.ext.sdk.KqcoApi;
import com.kqgeo.co.ext.sdk.KqcoParm;
import com.kqgeo.co.ext.sdk.ParmImpl;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("co/ext")
public class FlowDemo {

  @RequestMapping(value = "/sendCommit-init", method = RequestMethod.POST)
  @Description(describe = "流程发送前置处理方法", instructions = "SendCommit:INIT", requestType = "post", requestUrl = "/co/ext/sendCommit-init")
  public KqcoParm sendCommitInit(@RequestBody ObjectNode parameter) {
    String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
    KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
    kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
		ParmImpl kqcoParm = (ParmImpl)kqcoApi.getKqcoParm();
    // 参数检查
    if (kqcoParm.setRequest(parameter) != 0)
      return kqcoParm;
    //获取流程发送信息
    JsonNode argsJson = parameter.get("args");
    //把审批意见改成改成不同意
    String result = argsJson.toString().replace("测试同意", "测试不同意");
    JSONArray arr = new JSONArray();
    arr.add(result);
    //赋值返回
    kqcoParm.setParameter(result);
    return kqcoParm;
  }
}

注意

初始化处理方法 *:INIT 返回值使用 KqcoParm

ParmImpl kqcoParm = (ParmImpl)KqcoApi.getKqcoParm()

java

package com.kqgeo.co.ext.controller;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.kqgeo.co.ext.config.Exclude;
import com.kqgeo.co.ext.sdk.KqcoApi;
import com.kqgeo.co.ext.sdk.ParmImpl;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("co/ext")
public class FlowDemo {

  @RequestMapping(value = "/flowSend-destroy", method = RequestMethod.POST)
  @Description(describe = "流程发送查询接收人后置处理", instructions = "FlowSend:DESTROY", requestType = "post", requestUrl = "/co/ext/flowSend-destroy")
  public String flowSendDestroy(@RequestBody ObjectNode parameter) {
    String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
    KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
    kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
		ParmImpl kqcoParm = (ParmImpl)kqcoApi.getKqcoParm();
    // 参数检查
    if (kqcoParm.setRequest(parameter) != 0)
      return "";
    //获取接收人信息
    JsonNode jsonNode = argsJson.get(5).get("PARAMETER");
    //修改Admin的名字为测试名称张晓明
    String result = jsonNode.toString().replace("Admin", "张晓明");
    return result;
  }
}


package com.kqgeo.co.ext.controller;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.kqgeo.co.ext.config.Exclude;
import com.kqgeo.co.ext.sdk.KqcoApi;
import com.kqgeo.co.ext.sdk.ParmImpl;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("co/ext")
public class FlowDemo {

  @RequestMapping(value = "/flowSend-destroy", method = RequestMethod.POST)
  @Description(describe = "流程发送查询接收人后置处理", instructions = "FlowSend:DESTROY", requestType = "post", requestUrl = "/co/ext/flowSend-destroy")
  public String flowSendDestroy(@RequestBody ObjectNode parameter) {
    String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
    KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
    kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
		ParmImpl kqcoParm = (ParmImpl)kqcoApi.getKqcoParm();
    // 参数检查
    if (kqcoParm.setRequest(parameter) != 0)
      return "";
    //获取接收人信息
    JsonNode jsonNode = argsJson.get(5).get("PARAMETER");
    //修改Admin的名字为测试名称张晓明
    String result = jsonNode.toString().replace("Admin", "张晓明");
    return result;
  }
}

注意

结束时处理方法 *:DESTROY 返回值无需使用 PARAMETER

启动服务

扩展开发注册成功如下:

1641458885925

测试初始化 init 处理方法

设置流程提交初始化处理方法前结果:

521521

设置流程提交初始化处理方法后结果: 5215210

测试后置 destroy 处理方法

设置获取流程接收人后置处理方法前结果:

5215211

设置获取流程接收人后置处理方法后结果: 5215212

DEMO 代码下载

本示例代码在 com.kqgeo.co.ext.FlowDemo 类中的 sendCommitInit 方法和 flowSendDestroy 方法

Powerd by Vitepress.