# apass-opensdk-hugong
## 简介
apass-opensdk-hugong 是一个基于apass-opensdk的封装，提供了一些常用的功能
- 什么人可以使用这个SDK
- 从事飞书低代码平台（APASS）开发人员.

## 安装

```
在飞书低代码平台（云函数）依赖管理-右侧-搜索： apass-opensdk-hugong

最近有同学私聊我说Apass无法安装1.0.0以上的包，解决思路： 先安装1.0.0版本，然后打开yarn.lock文件
====== 找到这一行 =====
apass-opensdk-hugong@1.0.0:
  version "1.0.0"
  resolved "https://registry.npmmirror.com/apass-opensdk-hugong/-/apass-opensdk-hugong-1.0.0.tgz#ef2d0a19e793358784cb764de4b885fd86befd66"
  integrity sha512-Q8Gpo9v8a/2G43y/Lh2POyDEOcealFuUlGdqGSA9wyfjET4+LWs/PnzK9EB1YZCjQotW7cGO/9a0MiQ6Sgw1LA==
====== 找到这一行 =====

将版本改为最新的版本号后，然后保存，重写部署即可使用NPM源最新的版本
修改后的yarn.lock文件如下， 一共三处地方：
apass-opensdk-hugong@1.0.3:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/apass-opensdk-hugong/-/apass-opensdk-hugong-1.0.3.tgz#ef2d0a19e793358784cb764de4b885fd86befd66"
  integrity sha512-Q8Gpo9v8a/2G43y/Lh2POyDEOcealFuUlGdqGSA9wyfjET4+LWs/PnzK9EB1YZCjQotW7cGO/9a0MiQ6Sgw1LA==
```

## 如何使用
```
const Hugong = require('apass-opensdk-hugong');
初始化
const hg = new Hugong(logger)
```
## 常用
```
显示运行时间
hg.newTime()
hg.printTime()

线程睡眠(毫秒)
await hg.sleep(2000)

支持将数组分割成指定长度分段数组 
第一种用法，一次性返还分割后的数组
const list = hg.utils.splitArray([], 50) 输出  [ [50],[50] ]

第二种用法，每次输出50条 处理完成后继续下次执行
await hg.utils.splitArray([], 10, async (items)=>{
    // do something
})

```
## 文件上传/下载

```
1）从网络下载文件后上传到飞书租户空间，返回上传后的文件信息
await hg.utils.file.downloadFileToUpload(url)
2）如果有鉴权, 可以传递header参数
await hg.utils.file.downloadFileToUpload(url,{ Authorization: `...`})
3）保存数据到本地环境中，比如接口返回的数据需要保存到本地环境中方便查看
saveDataToEnv(data，path) 

1）从飞书租户空间下载文件到本地环境中
file_info={ id, mime_type, name, ...}
file_path=存储地址可选,不填写则默认当前时间戳
await hg.utils.file.downloadFileToTmp(fileInfo,file_path)

2）解析csv文件,file_path必须是本地环境的文件路径 /tep/aaa.csv 可以使用上面的方法downloadFileToTmp下载文件到本地环境中
await hg.utils.file.csvRead(file_path,callback)
示例1 读取完成后返回数组
const list = await hg.utils.file.csvRead(file_path)
示例2 读取完成后回调
await hg.utils.file.csvRead(file_path,async (row)=>{
    // do something
})
```

## 小工具/多语言

```
对象数据新增多语言对象

生成多语言对象
hg.toMultilingual([{ lang: 'en-US', value: 'Regular' },{ lang: 'zh-CN', value: '正式' }]) 常用于开放平台返回的多语言数据转换
hg.toMultilingual(zh,en)

安全的取值
hg.toSafeValue(obj={},key,defValue)

```

## 飞书人事

搜索员工信息

```
设置appid和appsecret
await hg.setAppId('cli_000000000','0000000000000')

/**
* 搜索员工信息
* @param {*} params 
* @param {*} data 
* @param {*} callback callback(items) 结果回调（根据总数可能多次调用）- 可选
* @returns 如果callback为传递则一次性返回所有的数据
*/
await hg.employee.search(params,data,callback)

// 示例[具体参数请参考开放平台定义](https://open.feishu.cn/document/server-docs/corehr-v1/employee/search)
await hg.employee.search({ page_size:100,user_id_type:'user_id',},{ /* 要查询的字段 */}, async (items)=>{
    // do something 假设服务端有300条数据，每次返回100条，会调用3次, 如果希望一次性返回所有数据，callback传null即可
})
const list = await hg.employee.search(params,data) //这将一次性返回所有数据
```
## 开放平台分页获取所有数据

所有的分页接口都可以使用

```
设置appid和appsecret
await hg.setAppId('cli_000000000','0000000000000')

/**
* GET类型接口分页返回开放平台数据
* @param {*} url 
* @param {*} params 
* @param {*} callback callback(items) 结果回调（根据总数可能多次调用）- 可选
* @returns callback为null，则一次性返回所有的数据
*/
hg.paginatedSearchGet(url,params,callback)

/**
* POST接口分页返回开放平台数据
* @param {*} url 
* @param {*} params 
* @param {*} data 
* @param {*} callback callback(items) 结果回调（根据总数可能多次调用）- 可选
* @returns callback为null，则一次性返回所有的数据
*/
await hg.paginatedSearch(url,params,data,callback)

示例1
const list = await hg.paginatedSearchGet(url, params, data)
示例2
await hg.paginatedSearchGet(url, params, async (items)=>{
    // do something  假设服务端有300条数据，每次返回100条，会调用3次, 如果希望一次性返回所有数据，callback传null即可
})
```



## 交流学习

从事飞书低代码平台（APASS）开发人员3年，欢迎交流学习
VX：IAMRuiyu 
