# 其他模块文档 (Python版本)

## 实现状态说明

- ✅ **已实现**: 功能已完全实现并可正常使用
- ⚠️ **部分实现**: 基础框架已实现，但需要与外部系统集成
- ❌ **待实现**: 尚未实现，需要开发

## 访问方式

在脚本中通过 `VWED.other` 访问所有其他模块功能。

## 创建唯一的 ID 编号

* 方法说明

  创建唯一的 ID 编号。

```python
def create_uuid() -> str
```

* 输入参数

  无。
* 输出参数
* 表示一个唯一 ID 编号的字符串。
* 异常

  本方法会抛出异常。

## 发送邮件 ⚠️

* 方法说明

  向目标收件方发送简单邮件。

```python
def send_mail(param: str) -> None
```

* 输入参数
* param，str 类型，表示邮件的详情，反序列化后的示例如下：

  ```python
  {
      "to": "yy@yy.com",                     # 接收方，必填
      "subject": "Daily Meeting",            # 主题，必填
      "text": "xxx",                         # 内容，必填
      "cc": "xxx@xxx.com,yyy@yyy.com",       # 抄送，选填
      "bcc": "zzz@zzz.com"                   # 秘密抄送，选填
  }
  ```
* 输出参数

  无。
* 异常

  本方法会抛出异常。

## 发送用户消息 ⚠️

* 方法说明

  发送用户消息，不仅可以弹窗提醒，还可以在RDS的消息管理界面进行查看。

```python
def send_user_message(level: str, message_title: str, message_body: str) -> None
```

* 输入参数
* level，str 类型，表示消息提醒的等级，有ERROR，WARN，INFO三种等级。
* message_title，str 类型，表示用户消息的标题。
* message_body，str 类型，表示用户消息的内容。
* 输出参数

  无。
* 异常

  本方法不会抛出异常。

## JSON字符串转化为XML字符串

* 方法说明

  将json字符串转化为xml字符串

```python
def json_to_xml(param: str) -> str
```

* 输入参数
* param，str 类型，表示传入的json字符串
* 输出参数
* xml字符串
* 异常

  本方法不会抛出异常。

## MD5字符串加密

* 方法说明

  将字符串进行加密后返回

```python
def md5_encode(param: str) -> str
```

* 输入参数
* param，str 类型，表示传入的字符串
* 输出参数
* 32位小写字符串
* 异常

  本方法会抛出异常。

## Base64字符串重编码

* 方法说明

  将字符串进行重编码后返回

```python
def base64_encode(param: str) -> str
```

* 输入参数
* param，str 类型，表示传入的字符串
* 输出参数
* UrlBase64 重编码后的字符串
* 异常

  本方法会抛出异常。

## 转换成分页对象

* 方法说明

  根据给定的参数和数据，转换成分页对象并进行返回。

```python
def trans_to_page_obj(total_count: int, current_page: int, page_size: int, total_page: int, page_list: str) -> str
```

* 输入参数
* total_count, int 类型，表示分页数据的总条数
* current_page, int 类型，表示当前是第几页
* page_size, int 类型，表示每页显示的数量
* total_page, int 类型，表示总页数
* page_list, str 类型，表示当前页的数据
* 输出参数
* 转换后的分页对象字符串
* 异常

  本方法不会抛出异常。
* 请求示例

```python
def trans_to_page_obj():
    # 1. 提供分页相关参数和源数据
    
    # 当前是第几页，最小值就是1！
    current_page = 2
    # 每页的数据条数
    page_size = 20
    # 获取相关的数据，以实际情况为准进行修改
    data = jj.find_sites_by_condition("{}", "ASC")
    # 打印查询到的数据
    jj.script_log("INFO", "trans_to_page_obj", data)
    # 转换成对象，方便截取当页的数据
    data_obj = json.loads(data)
    # 截取指定页的数据
    page_list_obj = data_obj[(current_page-1)*page_size : current_page*page_size]
    # 将截取的数据转成字符串
    page_list_str = json.dumps(page_list_obj)
    
    # 2. 调用脚本方法，转换成分页对象
    
    # 将数据转换成分页对象
    res = jj.trans_to_page_obj(len(data_obj), current_page, page_size, 
                              math.ceil(len(data_obj)/page_size), page_list_str)
    # 打印转换后的结果
    jj.script_log("INFO", "res=", res)
    
    # 3. 拿着分页对象进行返回或其他操作
    # TODO
```

## 获取天风任务参数 ⚠️

* 方法说明

  在脚本中直接获取到天风任务参数。

```python
async def get_script_value(key: str) -> str
```

* 输入参数
* key，变量表达式。
* 输出参数

  天风任务中参数key的值的字符串。
* 异常
  本方法不会抛出异常。该方法如果获取一个不存在的值时将会返回NULL。
* 请求示例

```python
def test():
    # 获取任务变量status
    jj.script_log("debug", "b1,agvid:", jj.get_script_value("task.variables.status"))
    # 获取b4块选出的库位
    jj.script_log("debug", "b1,agvid:", jj.get_script_value("blocks.b4.site_id"))
    # 获取输入参数agvId
    jj.script_log("debug", "b1,agvid:", jj.get_script_value("task_inputs.agv_id"))
```

## 批量放行 ⚠️

* 方法说明

  批量放行机器人，与等待放行块结合使用。

```python
def release_wait_pass(agv_ids: List[str]) -> bool
```

* 输入参数
* agv_ids，str 列表类型，需放行的机器人Id。
* 输出参数
* True，放行成功。
* False，放行失败
* 异常
  本方法不会抛出异常。
* 请求示例

```python
def release_wait_pass():
    agv_ids = []  # 注意参数是列表
    agv_ids.append("AMB-150J")  # 放行一个就只用append一个
    agv_ids.append("sim_01")
    jj.release_wait_pass(agv_ids)
```
