飞书机器人
continuous-integration/drone/push Build is passing Details

于相涌/Lark
YXY 1 year ago
parent a91d0eef2a
commit 0f9b8f03f9

@ -11,7 +11,8 @@ public enum AppType {
*/
MULTIDIMENSIONAL_TABLE("MULTIDIMENSIONAL_TABLE", "多维表格"),
APPROVAL_TASK("APPROVAL_TASK", "审批回调"),
SYNC_EMAIL("SYNC_EMAIL", "同步邮箱");
SYNC_EMAIL("SYNC_EMAIL", "同步邮箱"),
SCHEDULED_REMINDERS("SCHEDULED_REMINDERS", "定时提醒");
private final String code;
private final String info;

@ -13,7 +13,8 @@ public enum TableRelationTypeEnum {
MAINTENANCE_ROW_RELATION("MAINTENANCE_ROW_RELATION", "维护表之间的字段关系"),
SINGLE_DIRECTION("SINGLE_DIRECTION", "单向传递"),
DOUBLE_DIRECTION("DOUBLE_DIRECTION", "双向传递"),
SYNC_EMAIL("SYNC_EMAIL", "同步邮箱"),;
SYNC_EMAIL("SYNC_EMAIL", "同步邮箱"),
SCHEDULED_REMINDERS("SCHEDULED_REMINDERS", "定时提醒"),;
private String code;
private String info;

@ -3,6 +3,7 @@ package com.ruoyi.flyingbook.LarkHelper;
import com.lark.oapi.service.bitable.v1.model.*;
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@ -17,8 +18,8 @@ import java.util.Map;
@Component
public class LarkTableHelper extends LarkHelper{
static String appToken = "Gyu1b8VAFaYiEysfEUjcCKomnVc";
static String tableId = "tblzQQw3OXt1WLUq";
static String appToken = "FFI1bKY9JaAbxusE0QfcfyxOnVc";
static String tableId = "tbl9Vv6NETuQlkT6";
static String record = "rec8umOjIh";
static Map<String, Object> map = new HashMap<>();
@ -32,6 +33,7 @@ public class LarkTableHelper extends LarkHelper{
// map.put("b", "EEE");
// LarkTableRequest update = new LarkTableRequest(appId, secret, appToken,tableId, record,map);
// bk.updateTableRecord(update);
add.setFilter("AND(Day(CurrentValue.[日期]) = 18,YEAR(CurrentValue.[日期]) = 2023,MONTH(CurrentValue.[日期]) = 4,HOUR(CurrentValue.[日期]) = 20,MINUTE(CurrentValue.[日期]) >= 0,MINUTE(CurrentValue.[日期]) <= 30)");
ListAppTableRecordRespBody listAppTableRecordRespBody = bk.listTableRecord(add);
// LarkTableRequest delete = new LarkTableRequest(appId, secret, appToken,tableId, recordId);
// bk.deleteTableRecord(delete);
@ -123,12 +125,21 @@ public class LarkTableHelper extends LarkHelper{
public ListAppTableRecordRespBody listTableRecord(LarkTableRequest request) {
try {
ListAppTableRecordReq.Builder builder = ListAppTableRecordReq.newBuilder().
appToken(request.getAppToken())
.tableId(request.getAppTable());
if (StringUtils.isNotBlank(request.getFilter())){
builder.filter(request.getFilter());
}
if (request.getPageSize() != null){
builder.pageSize(request.getPageSize());
}
if (StringUtils.isNotBlank(request.getPageToken())){
builder.pageToken(request.getPageToken());
}
ListAppTableRecordResp list = buildClient(request).bitable().appTableRecord()
.list(
ListAppTableRecordReq.newBuilder().
appToken(request.getAppToken())
.tableId(request.getAppTable())
.build()
builder.build()
);
if (list.getCode() == 0){
return list.getData();

@ -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);
}
}

@ -20,6 +20,10 @@ public class LarkRequest {
private String appId;
private String appSecret;
private Integer pageSize;
private String pageToken;
/**
* code
*/

@ -16,6 +16,7 @@ public class LarkTableRequest extends LarkRequest{
private String appToken;
private String appTable;
private String record;
private String filter;
private Map<String,Object> body;

@ -65,4 +65,6 @@ public interface LarkTableRelationMapper
public List<LarkCompanyTableInfo> queryListByIdListJoinLarkCompany(@Param("tableIds") List<Long> tableIds, @Param("flag") Long flag, @Param("relationType") String relationType);
public List<LarkCompanyTableInfo> queryListJoinLarkCompany(@Param("flag") Long flag, @Param("appType") String appType,@Param("relationType") String relationType);
}

@ -150,4 +150,21 @@
AND tr.flag = #{flag}
AND tr.relation_type = #{relationType};
</select>
<select id="queryListJoinLarkCompany" resultMap="LarkCompanyTableResult">
SELECT
cr.app_id,
cr.secret,
tr.id,
tr.from_app_token,
tr.from_table_id,
tr.to_app_token,
tr.to_table_id
FROM
lark_table_relation tr
LEFT JOIN lark_company_relation cr ON tr.lark_company_relation_id = cr.id
WHERE
tr.flag = #{flag}
AND cr.app_type = #{appType};
AND tr.relation_type = #{relationType};
</select>
</mapper>

@ -38,7 +38,11 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-flyingbook</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
</dependencies>
</project>

@ -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…
Cancel
Save