V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
muchenlou
V2EX  ›  程序员

有偿求助 Mulesoft 的语法

  •  
  •   muchenlou · 108 天前 · 915 次点击
    这是一个创建于 108 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    ```
    第 1 条附言  ·  108 天前
    主要不是翻译成中文,是需要翻译成 Java 的语法。
    背景是将 mulesoft 迁移到 Springboot 项目里面
    目前代码就是卡在这里进行不下去了。没办法理解成 Java 代码。
    https://cdn.jsdelivr.net/gh/muchenlou/[email protected]/img/image-20221018113051567.png
    第 2 条附言  ·  108 天前
    结贴,已完成
    6 条回复    2022-10-18 15:21:26 +08:00
    muchenlou
        1
    muchenlou  
    OP
       108 天前
    VX : muchenlou
    JasonEWNL
        2
    JasonEWNL  
       108 天前   ❤️ 1
    语义上是「订单列表里,材料类型为艺术的订单个数不为零」,后一句类似「订单确保有上传的图片」,前面几条比较容易就是简单的比较。

    要说不容易理解,可能主要在于 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
        3
    muchenlou  
    OP
       108 天前
    @JasonEWNL 谢谢大佬,可能我是没描述清楚,我主要是想翻译成 Java 的写法,可以给我提供代码那种。

    https://cdn.jsdelivr.net/gh/muchenlou/[email protected]/img/image-20221018113051567.png
    muchenlou
        4
    muchenlou  
    OP
       108 天前
    @JasonEWNL 之前 mulesoft 官网的 DataWeave map 相关的和 MEL 的说明,我基本都看查完了,就是没有找出对应的说明。
    JasonEWNL
        5
    JasonEWNL  
       108 天前
    虽然缺少样例数据不过后俩基本思路如下,必要时可构造相应类型。(缩进用下划线表示以便查看。)


    ```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
        6
    muchenlou  
    OP
       108 天前
    @JasonEWNL 嗯嗯,差不多,我是这个样子,我翻译过来就是$ 是当前对象的缩写,$.a 相当于当前对象的成员属性,然后 [? ] 应该是判断里面的布尔值,如果是的话,再进行后面的运算了,如果不是的话,就不继续往后了。
    ![image-20221018151842791]( https://cdn.jsdelivr.net/gh/muchenlou/[email protected]/img/image-20221018151842791.png)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   352 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 20:27 · PVG 04:27 · LAX 12:27 · JFK 15:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.