有偿求助 Mulesoft 的语法

2022-10-18 10:27:53 +08:00
 muchenlou
50 块钱翻译一条 Mulesoft 的语法

```json
upper(vars.orderData.source_app) == "DH"
and (vars.orderData.store_id as Number)!= 9291
and upper(vars.orderData.order_lineitem_status_code) == "AUDITED"
and vars.orderData.custom_attributes.order_flow == "S"
and isEmpty(vars.orderData.order_lineitem_components[?($.material_type_id == vars.materialType[?( upper($.order_type) == "ART")].id[0])].*custom_attributes) == false
and (vars.orderData.order_lineitem_components[?($.material_type_id == vars.materialType[?( upper($.order_type) == "ART")].id[0])].*custom_attributes.art_type contains 'image_upload')
```

主要是这条
```json
isEmpty(vars.orderData.order_lineitem_components[?($.material_type_id == vars.materialType[?( upper($.order_type) == "ART")].id[0])].*custom_attributes) == false
```
1255 次点击
所在节点    程序员
6 条回复
muchenlou
2022-10-18 10:32:56 +08:00
VX : muchenlou
JasonEWNL
2022-10-18 11:26:00 +08:00
语义上是「订单列表里,材料类型为艺术的订单个数不为零」,后一句类似「订单确保有上传的图片」,前面几条比较容易就是简单的比较。

要说不容易理解,可能主要在于 DataWeave 的 lambda ( https://docs.mulesoft.com/dataweave/2.4/dataweave-functions-lambdas#use-anonymous-parameters-in-a-lambda )和 selector ( https://docs.mulesoft.com/dataweave/2.4/dataweave-selectors#multi_value_selector ),可以看下文档。
muchenlou
2022-10-18 11:31:34 +08:00
@JasonEWNL 谢谢大佬,可能我是没描述清楚,我主要是想翻译成 Java 的写法,可以给我提供代码那种。

https://cdn.jsdelivr.net/gh/muchenlou/imgBeds@main/img/image-20221018113051567.png
muchenlou
2022-10-18 11:36:29 +08:00
@JasonEWNL 之前 mulesoft 官网的 DataWeave map 相关的和 MEL 的说明,我基本都看查完了,就是没有找出对应的说明。
JasonEWNL
2022-10-18 14:06:06 +08:00
虽然缺少样例数据不过后俩基本思路如下,必要时可构造相应类型。(缩进用下划线表示以便查看。)


```java
List<OrderAttribute> orderAttributeList = orderData.get("order_lineitem_components")
____.filter(
________order -> order.get("material_type_id").toString()
____________.equals(materialType.get("ART").get("id").toString())
____)
____.map(order -> order.get("custom_attributes"));
boolean isEmpty = orderAttributeList.isEmpty();

List<String> artTypeList = orderAttributeList
____.map(orderAttribute -> orderAttribute.get("art_type").toString());
boolean containsImage = artTypeList.contains("image_upload");
```
muchenlou
2022-10-18 15:21:26 +08:00
@JasonEWNL 嗯嗯,差不多,我是这个样子,我翻译过来就是$ 是当前对象的缩写,$.a 相当于当前对象的成员属性,然后 [? ] 应该是判断里面的布尔值,如果是的话,再进行后面的运算了,如果不是的话,就不继续往后了。
![image-20221018151842791]( https://cdn.jsdelivr.net/gh/muchenlou/imgBeds@main/img/image-20221018151842791.png)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX