对接业务数据与钉钉表单数据
对接业务数据与钉钉表单数据转换
由于钉钉平台不支持通过接口获取表格字段详情,因此涉及表格的表单没法通过页面字段映射直接配置,需要通过逻辑函数的方式进行字段映射
首先需要申明一个非持久化钉钉字段模型:
@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@AnonymousAccesspublic 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;
@FunctionImplpublic 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; }
}