跳转到内容

逻辑函数(可编排服务)

简述

​ 逻辑函数也可以称之为可编排服务。可编排服务通常为一个最小的独立业务单位,主要作用是供逻辑流进行编排来灵活实现某个场景的业务逻辑。 在简单场景下也可以不交给逻辑流编排,而是直接调用来完成业务逻辑。 可编排服务有在线配置声明和实现两部分,与 Trantor 的许多其他资源一样,可在定制开发时替换掉制品项目中已提供的实现资源,改变现有的业务逻辑。 新增模型时系统会生成默认 CRUD 的可编排服务,如果不满足需求,可自己单独声明。

在线配置声明

进入 制品中心->配置->业务域->逻辑函数,新增逻辑函数:

image.png

其中:

字段类型规则
资源原标识string必填,20字以内的大写字母、小写字母或数字,必须大写字母开头编辑时不可修改
名称string必填,50个字以内的无限制字符
超时设置dictionary必填,枚举为:内部、外部。
实现策略dictionary必填,单一实现,动态路由实现,无路由多实现。
描述string非必填,200个字以内的无限制格式字符
入参模型link 模型必填,可选范围为当前应用版本下所有模型
入参类型dictionary必填,枚举为:模型、模型数组、模型分页。默认为:模型
入参名string必填,不限字数的非中文字符
出参模型link 模型必填,可选范围为当前应用版本下所有模型
出参类型dictionary非必填,不填出参为void。枚举为:模型、模型数组、模型分页。默认为:模型

用户可以在先配置编排服务后,通过部署到Maven仓库,并依赖到自己的工程里。

Trantor会按照配置生成一个 Java Interface,如下所示,接口使用 @Function 注解标明,方法名为 execute

@Function(name = "创建线索函数")
public interface CreateClueFunc {
ClueBO execute(ClueBO clue);
}

实现

可编排服务实现是一个 Java Class,需要使用 @FunctionImpl 注解标明,例如:

@FunctionImpl(name = "创建线索函数")
public class CreateClueFuncImpl implements CreateClueFunc {
@Override
public ClueBO execute(@Valid ClueBO clue) {
clue.setCreatedBy(TContext.getCurrentUser());
IntResult intResult = DS.create(clue);
clue.setId(intResult.getValue().longValue());
return clue;
}
}
/**
* 构建支付网关参数
*
* @author terminus
*/
@FunctionImpl(name = "Build pay gateway params")
public class BuildPayGatewayParamsFuncImpl implements BuildPayGatewayParamsFunc {
@Override
public PaymentRequestTO execute(PaymentRecordBO queryBO) {
PaymentRequestTO paramsTO = new PaymentRequestTO();
paramsTO.setChannel(queryBO.getPayChannel());
paramsTO.setMerchantSerialNo(queryBO.getMerchantSerialNo());
paramsTO.setTradeAmt(queryBO.getTradeAmt());
paramsTO.setExpiredTime(queryBO.getPaymentOrderBO().getPayEndTime());
paramsTO.setContent(Strings.EMPTY);
paramsTO.setPaymentRecordId(queryBO.getId());
paramsTO.setClientIp(Strings.EMPTY);
paramsTO.setSubject(String.valueOf(queryBO.getPaymentOrderBO().getId()));
paramsTO.setSellerNo(String.valueOf(queryBO.getSellerAccount()));
if (!Objects.isNull(queryBO.getPaymentOrderBO())) {
paramsTO.setBuyerNo(String.valueOf(queryBO.getPaymentOrderBO().getBuyerId()));
}
// 如果用户域存在openId,则可以不传authCode
paramsTO.setAuthCode(queryBO.getAuthCode());
// 银联无跳转支付
paramsTO.setAccNo(queryBO.getAccNo());
paramsTO.setToken(queryBO.getToken());
paramsTO.setSmsCode(queryBO.getSmsCode());
Map<String, String> extraParam = Maps.newHashMap();
extraParam.put("tradeId", queryBO.getPaymentOrderBO().getTradeId());
extraParam.put("buyerId", String.valueOf(queryBO.getPaymentOrderBO().getBuyerId()));
extraParam.put("currentStage", String.valueOf(queryBO.getPaymentOrderBO().getCurrentStage()));
paramsTO.setExtraKey(extraParam);
return paramsTO;
}
}