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

其中:
| 字段 | 类型 | 规则 |
|---|---|---|
| 资源原标识 | 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; }}