跳转到内容

对接业务数据与钉钉表单数据

对接业务数据与钉钉表单数据转换

由于钉钉平台不支持通过接口获取表格字段详情,因此涉及表格的表单没法通过页面字段映射直接配置,需要通过逻辑函数的方式进行字段映射

首先需要申明一个非持久化钉钉字段模型:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TransientModel(name = "DingDingFieldTO")
@EqualsAndHashCode(callSuper = true)
public class DingDingFieldTO extends BaseModel<Long> {
@Field(name = "字段名")
private String name;
@Field(name = "字段值")
private String value;
}

然后需要根据钉钉侧配置的表单模板将业务单据映射成对应字段,业务单据转钉钉表单逻辑函数接口:

逻辑函数接口需要添加 @AnonymousAccess 注解,保证可匿名访问

import io.terminus.gaia.sop.demo.model.dingding.DingDingFieldTO;
import io.terminus.gaia.sop.demo.model.trade.TradeOrderBO;
import io.terminus.trantorframework.api.annotation.AnonymousAccess;
import io.terminus.trantorframework.api.annotation.Function;
import java.util.List;
@Function
@AnonymousAccess
public interface ConvertTradeOrderToDingDingDataFunc {
List<DingDingFieldTO> execute(TradeOrderBO tradeOrderBO);
}

函数实现:

package io.terminus.gaia.sop.demo.func.trade;
import com.alibaba.fastjson.JSON;
import com.google.common.base.MoreObjects;
import io.terminus.gaia.sop.demo.model.dingding.DingDingFieldTO;
import io.terminus.gaia.sop.demo.model.trade.TradeOrderBO;
import io.terminus.gaia.sop.demo.model.trade.TradeOrderLineBO;
import io.terminus.trantorframework.api.annotation.FunctionImpl;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
@FunctionImpl
public class ConvertTradeOrderToDingDingDataFuncImpl implements ConvertTradeOrderToDingDingDataFunc {
@Override
public List<DingDingFieldTO> execute(TradeOrderBO tradeOrderBO) {
List<DingDingFieldTO> dingDingFieldTOS = new ArrayList<>();
DingDingFieldTO id = new DingDingFieldTO();
id.setName("订单号");
id.setValue(tradeOrderBO.getId().toString());
DingDingFieldTO item = new DingDingFieldTO();
item.setName("商品");
item.setValue(tradeOrderBO.getProjectName());
DingDingFieldTO price = new DingDingFieldTO();
price.setName("价格");
price.setValue(MoreObjects.firstNonNull(tradeOrderBO.getPrice(), "").toString());
DingDingFieldTO status = new DingDingFieldTO();
status.setName("状态");
status.setValue(MoreObjects.firstNonNull(tradeOrderBO.getStatus(), "").toString());
if (!CollectionUtils.isEmpty(tradeOrderBO.getTradeOrderLineList())) {
DingDingFieldTO orderLineList = new DingDingFieldTO();
orderLineList.setName("订单行列表");
List<List<DingDingFieldTO>> tradeOrderLineList = new ArrayList<>();
for (TradeOrderLineBO tradeOrderLineBO : tradeOrderBO.getTradeOrderLineList()) {
List<DingDingFieldTO> tradeOrderLine = new ArrayList<>();
DingDingFieldTO itemName = new DingDingFieldTO();
itemName.setName("商品名");
itemName.setValue(tradeOrderLineBO.getItemName());
DingDingFieldTO itemPrice = new DingDingFieldTO();
itemPrice.setName("商品价格");
itemPrice.setValue(MoreObjects.firstNonNull(tradeOrderLineBO.getItemPrice(), "").toString());
DingDingFieldTO num = new DingDingFieldTO();
num.setName("数量");
num.setValue(MoreObjects.firstNonNull(tradeOrderLineBO.getItemNum(), "").toString());
tradeOrderLine.add(itemName);
tradeOrderLine.add(itemPrice);
tradeOrderLine.add(num);
tradeOrderLineList.add(tradeOrderLine);
}
orderLineList.setValue(JSON.toJSONString(tradeOrderLineList));
dingDingFieldTOS.add(orderLineList);
}
dingDingFieldTOS.add(id);
dingDingFieldTOS.add(item);
dingDingFieldTOS.add(price);
dingDingFieldTOS.add(status);
return dingDingFieldTOS;
}
}