飞书机器人
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
a91d0eef2a
commit
0f9b8f03f9
@ -0,0 +1,30 @@
|
||||
package com.ruoyi.flyingbook.LarkHelper.script;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author yuxiangyong
|
||||
* @create 2023-04-18 21:31
|
||||
*/
|
||||
public class LarkTableFilterScriptHelper {
|
||||
|
||||
public static String buildTimeRange(String paramCode, LocalDateTime fromTime) {
|
||||
String range = fromTime.getMinute() >= 30 ? ">=" : "<";
|
||||
return String.format("AND(YEAR(CurrentValue.[%s]) = %s," +
|
||||
"MONTH(CurrentValue.[%s]) = %s," +
|
||||
"DAY(CurrentValue.[%s]) = %s," +
|
||||
"HOUR(CurrentValue.[%s]) = %s," +
|
||||
"MINUTE(CurrentValue.[%s]) %s 30)",
|
||||
paramCode,
|
||||
fromTime.getYear(),
|
||||
paramCode,
|
||||
fromTime.getMonth().getValue(),
|
||||
paramCode,
|
||||
fromTime.getDayOfMonth(),
|
||||
paramCode,
|
||||
fromTime.getHour(),
|
||||
paramCode,
|
||||
range);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package com.ruoyi.quartz.helper;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import okhttp3.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @author yuxiangyong
|
||||
* @create 2023-04-18 22:25
|
||||
*/
|
||||
@Slf4j
|
||||
public class OkHttpHelper {
|
||||
|
||||
private static OkHttpClient client = new OkHttpClient().newBuilder()
|
||||
.callTimeout(10, TimeUnit.SECONDS)
|
||||
.connectTimeout(10, TimeUnit.SECONDS)
|
||||
.readTimeout(10, TimeUnit.SECONDS)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
|
||||
public static void post(String url, String body) {
|
||||
Request request = new Request.Builder()
|
||||
.method("POST", RequestBody.create(MediaType.get("application/json"),body.getBytes(StandardCharsets.UTF_8)))
|
||||
.url(url)
|
||||
.build();
|
||||
try {
|
||||
client.newCall(request).execute();
|
||||
} catch (Exception e) {
|
||||
log.error("http get 请求失败--{}", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
post("https://open.feishu.cn/open-apis/bot/v2/hook/77f1c976-2418-4e03-bc96-7f14c2c2898e",
|
||||
"{\n" +
|
||||
"\t\"msg_type\": \"text\",\n" +
|
||||
"\t\"content\": {\n" +
|
||||
"\t\t\"text\": \"<at user_id = \\\"ou_cd09481727e91fce1f12b7b0ed1500d2\\\">YXY</at> text content\"\n" +
|
||||
"\t}\n" +
|
||||
"}");
|
||||
}
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
package com.ruoyi.quartz.task;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.lark.oapi.service.bitable.v1.model.ListAppTableRecordRespBody;
|
||||
import com.ruoyi.common.enums.AppType;
|
||||
import com.ruoyi.common.enums.FlagStatus;
|
||||
import com.ruoyi.common.enums.TableRelationTypeEnum;
|
||||
import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper;
|
||||
import com.ruoyi.flyingbook.LarkHelper.script.LarkTableFilterScriptHelper;
|
||||
import com.ruoyi.flyingbook.domain.LarkCompanyTableInfo;
|
||||
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
|
||||
import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper;
|
||||
import com.ruoyi.quartz.helper.OkHttpHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 定时任务调度测试
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("scheduledRemindersTask")
|
||||
public class ScheduledRemindersTask {
|
||||
|
||||
@Autowired
|
||||
private LarkTableRelationMapper larkTableRelationMapper;
|
||||
|
||||
@Autowired
|
||||
private LarkTableHelper larkTableHelper;
|
||||
|
||||
/**查询分页大小*/
|
||||
private static final Integer PAGE_SIZE = 20;
|
||||
/**查询分页大小*/
|
||||
private static final String RANGE_KEY = "日期";
|
||||
|
||||
|
||||
public void scheduledReminders() {
|
||||
log.info("scheduledRemindersTask start");
|
||||
List<LarkCompanyTableInfo> larkList = this.getLarkList();
|
||||
if (CollectionUtils.isEmpty(larkList)){
|
||||
return;
|
||||
}
|
||||
String script = LarkTableFilterScriptHelper.buildTimeRange(RANGE_KEY,LocalDateTime.now());
|
||||
for (LarkCompanyTableInfo larkCompanyTableInfo : larkList) {
|
||||
try {
|
||||
this.sendMessage(script,larkCompanyTableInfo);
|
||||
}catch (Exception e){
|
||||
//todo yxy 记录日志
|
||||
}
|
||||
|
||||
}
|
||||
log.info("scheduledRemindersTask end");
|
||||
}
|
||||
|
||||
private void sendMessage(String script,LarkCompanyTableInfo larkCompanyTableInfo){
|
||||
String pageToken = null;
|
||||
LarkTableRequest request = this.buildRequest(larkCompanyTableInfo, script);
|
||||
do {
|
||||
ListAppTableRecordRespBody respBody = larkTableHelper.listTableRecord(request);
|
||||
pageToken = respBody.getPageToken();
|
||||
Arrays.stream(respBody.getItems()).forEach(r -> {
|
||||
Map<String, Object> fields = r.getFields();
|
||||
JSONObject msg = new JSONObject();
|
||||
|
||||
OkHttpHelper.post(larkCompanyTableInfo.getToAppToken(),msg.toString());
|
||||
});
|
||||
}while (StringUtils.isNotBlank(pageToken));
|
||||
}
|
||||
|
||||
private List<LarkCompanyTableInfo> getLarkList() {
|
||||
List<LarkCompanyTableInfo> larkCompanyTableInfos = larkTableRelationMapper.queryListJoinLarkCompany(FlagStatus.OK.getCode(), AppType.SCHEDULED_REMINDERS.getCode(), TableRelationTypeEnum.SYNC_EMAIL.getCode());
|
||||
return larkCompanyTableInfos.stream()
|
||||
.filter(r -> {
|
||||
return r.getId() != null
|
||||
&& StringUtils.isNotBlank(r.getAppId())
|
||||
&& StringUtils.isNotBlank(r.getAppSecret())
|
||||
&& StringUtils.isNotBlank(r.getFromAppToken())
|
||||
&& StringUtils.isNotBlank(r.getFromTableId())
|
||||
&& StringUtils.isNotBlank(r.getToAppToken());
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private LarkTableRequest buildRequest(LarkCompanyTableInfo larkCompanyTableInfo,String script){
|
||||
LarkTableRequest request = new LarkTableRequest(larkCompanyTableInfo.getAppId(),larkCompanyTableInfo.getAppSecret(),larkCompanyTableInfo.getFromAppToken(), larkCompanyTableInfo.getFromTableId());
|
||||
request.setFilter(script);
|
||||
request.setPageSize(PAGE_SIZE);
|
||||
return request;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue