From 40f1f3deef782d67c5745b500bb749b10a008e63 Mon Sep 17 00:00:00 2001
From: YXY <932687738@qq.com>
Date: Sat, 27 May 2023 21:29:22 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81aop=E5=88=87=E9=9D=A2=E6=8B=A6?=
=?UTF-8?q?=E6=88=AA=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=E5=B9=B6=E5=8F=91?=
=?UTF-8?q?=E9=80=81=E6=9C=BA=E5=99=A8=E4=BA=BA=E6=B6=88=E6=81=AF=202?=
=?UTF-8?q?=E3=80=81=E6=A0=B9=E6=8D=AE=E9=A3=9E=E4=B9=A6=E8=A1=A8=E6=A0=BC?=
=?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=A3=9E=E4=B9=A6=E4=BB=BB=E5=8A=A1=203?=
=?UTF-8?q?=E3=80=81=E9=A3=9E=E4=B9=A6=E4=BB=BB=E5=8A=A1=E5=9B=9E=E8=B0=83?=
=?UTF-8?q?=EF=BC=88=E6=9C=AA=E5=AE=8C=E6=88=90=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/resources/application.yml | 3 +
.../ruoyi/common/enums/CallBackTypeEnum.java | 1 +
.../ruoyi/common/enums/EventOperateType.java | 5 +-
.../com/ruoyi/common/enums/EventTypeEnum.java | 3 +-
.../common/enums/TableRelationTypeEnum.java | 3 +-
ruoyi-flyingbook/pom.xml | 4 +
.../LarkHelper/LarkApprovalHelper.java | 5 +-
.../flyingbook/LarkHelper/LarkFileHelper.java | 5 +-
.../LarkHelper/LarkRobotHelper.java | 20 +++
.../LarkHelper/LarkTableFieldHelper.java | 6 +-
.../LarkHelper/LarkTableHelper.java | 50 +++----
.../flyingbook/LarkHelper/LarkTaskHelper.java | 75 ++++++++++
.../flyingbook/LarkHelper/LarkUserHelper.java | 7 +-
.../com/ruoyi/flyingbook/aop/ErrorLogAop.java | 64 ++++++++
.../flyingbook/controller/EdiController.java | 70 +++++----
.../ruoyi/flyingbook/domain/RequestVo.java | 5 +-
.../flyingbook/domain/lark/LarkException.java | 30 ++++
.../domain/lark/LarkTaskRequest.java | 74 ++++++++++
.../factory/LarkCallBackFactory.java | 6 +
.../factory/LarkOperateFactory.java | 9 +-
.../factory/LarkOperateTableFactory.java | 24 ++-
.../strategy/callback/LarkTaskCallback.java | 113 ++++++++++++++
.../strategy/operate/LarkAbstract.java | 2 +
.../operate/LarkTaskCallbackOperate.java | 87 +++++++++++
...ultidimensionalTableCreateTaskOperate.java | 138 ++++++++++++++++++
25 files changed, 734 insertions(+), 75 deletions(-)
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTaskHelper.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/aop/ErrorLogAop.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkException.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkTaskRequest.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/LarkTaskCallback.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkTaskCallbackOperate.java
create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableCreateTaskOperate.java
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 8da692e..92fa828 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -108,3 +108,6 @@ flowable:
async-executor-activate: false
attachment:
path: /data/attachment
+lark:
+ robot:
+ group: https://open.feishu.cn/open-apis/bot/v2/hook/cf432ef4-e526-4595-8330-2d2a361f7a29
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/CallBackTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/CallBackTypeEnum.java
index a2c00d3..008838b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/CallBackTypeEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/CallBackTypeEnum.java
@@ -10,6 +10,7 @@ public enum CallBackTypeEnum {
*
*/
TABLE_ROW_CHANGE("drive.file.bitable_record_changed_v1", "多维表格行记录变更"),
+ LARK_TASK("task.task.updated_v1", "飞书任务回调"),
APPROVAL_TASK("approval_task", "审批事件回调");
private final String code;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java
index dd056f5..d68b46d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateType.java
@@ -10,13 +10,16 @@ public enum EventOperateType {
*
*/
CALL_BACK("CALL_BACK", "反馈"),
+ LARK_TASK_CALL_BACK("LARK_TASK_CALL_BACK", "飞书任务回调"),
CREATE("CREATE", "创建"),
UPDATE("UPDATE", "更新"),
DELETE("DELETE", "删除"),
STOP("STOP", "终止"),
SYNC_MAIL("SYNC_MAIL", "同步邮件"),
SCHEDULE_REMINDER("SCHEDULE_REMINDER", "定时提醒"),
- SYNC_DATA_TO_TABLE("SYNC_DATA_TO_TABLE", "同步数据到多维表格");
+ SYNC_DATA_TO_TABLE("SYNC_DATA_TO_TABLE", "同步数据到多维表格"),
+ CREATE_TASK("CREATE_TASK", "创建任务"),
+ SYNC_CANDLE("SYNC_CANDLE", "同步日历");
private final String code;
private final String info;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventTypeEnum.java
index 5a760a1..de1fba7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventTypeEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventTypeEnum.java
@@ -10,7 +10,8 @@ public enum EventTypeEnum {
*
*/
ROW_CHANGE("ROW_CHANGE", "多维表格行记录变更"),
- APPROVAL_TASK("APPROVAL_TASK", "审批事件");
+ APPROVAL_TASK("APPROVAL_TASK", "审批事件"),
+ LARK_TASK("LARK_TASK", "飞书任务");
private final String code;
private final String info;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
index 7a0ae2f..3a3dc42 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableRelationTypeEnum.java
@@ -15,7 +15,8 @@ public enum TableRelationTypeEnum {
DOUBLE_DIRECTION("DOUBLE_DIRECTION", "双向传递"),
SYNC_EMAIL("SYNC_EMAIL", "同步邮箱"),
SCHEDULED_REMINDERS("SCHEDULED_REMINDERS", "定时提醒"),
- SYNC_EXTERNAL_DATA_TO_MULTI_TABLE("SYNC_EXTERNAL_DATA_TO_MULTI_TABLE", "同步外部数据到多维表格");
+ SYNC_EXTERNAL_DATA_TO_MULTI_TABLE("SYNC_EXTERNAL_DATA_TO_MULTI_TABLE", "同步外部数据到多维表格"),
+ CREATE_TASK_BY_TABLE("CREATE_TASK_BY_TABLE", "根据多维表格配置创建任务");
private String code;
private String info;
diff --git a/ruoyi-flyingbook/pom.xml b/ruoyi-flyingbook/pom.xml
index 27f1ad4..1d3646f 100644
--- a/ruoyi-flyingbook/pom.xml
+++ b/ruoyi-flyingbook/pom.xml
@@ -62,6 +62,10 @@
javax.mail
1.6.2
+
+ org.aspectj
+ aspectjweaver
+
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkApprovalHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkApprovalHelper.java
index 83b53b3..bf2aad4 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkApprovalHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkApprovalHelper.java
@@ -2,6 +2,7 @@ package com.ruoyi.flyingbook.LarkHelper;
import com.lark.oapi.service.approval.v4.model.*;
import com.ruoyi.flyingbook.domain.lark.LarkApprovalRequest;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -34,10 +35,10 @@ public class LarkApprovalHelper extends LarkHelper{
if (getInstanceResp.getCode() == 0){
return getInstanceResp.getData();
}else {
- throw new RuntimeException(getInstanceResp.getMsg());
+ throw new RuntimeException(new LarkException("LarkApprovalHelper.getApprovalInfoDetail",getInstanceResp.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkApprovalHelper.getApprovalInfoDetail",e.getMessage(),request).getErrorMessageBody());
}
}
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkFileHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkFileHelper.java
index 7ae2e4a..2b4237e 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkFileHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkFileHelper.java
@@ -5,6 +5,7 @@ import com.lark.oapi.service.drive.v1.model.UploadAllFileReq;
import com.lark.oapi.service.drive.v1.model.UploadAllFileReqBody;
import com.lark.oapi.service.drive.v1.model.UploadAllFileResp;
import com.lark.oapi.service.drive.v1.model.UploadAllFileRespBody;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
import com.ruoyi.flyingbook.domain.lark.LarkFileRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -52,10 +53,10 @@ public class LarkFileHelper extends LarkHelper {
if (uploadAllFileResp.getCode() == 0){
return uploadAllFileResp.getData();
}else {
- throw new RuntimeException(uploadAllFileResp.getMsg());
+ throw new RuntimeException(new LarkException("LarkFileHelper.uploadFile",uploadAllFileResp.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkFileHelper.uploadFile",e.getMessage(),request).getErrorMessageBody());
}
}
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java
index 926610b..147622e 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java
@@ -1,5 +1,8 @@
package com.ruoyi.flyingbook.LarkHelper;
+import com.alibaba.fastjson.JSONObject;
+import com.lark.oapi.core.response.RawResponse;
+import com.lark.oapi.core.token.AccessTokenType;
import com.lark.oapi.service.im.v1.enums.CreateMessageReceiveIdTypeEnum;
import com.lark.oapi.service.im.v1.model.CreateMessageReq;
import com.lark.oapi.service.im.v1.model.CreateMessageReqBody;
@@ -9,6 +12,9 @@ import com.ruoyi.flyingbook.domain.lark.LarkRobotRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* @author yuxiangyong
@@ -26,6 +32,20 @@ public class LarkRobotHelper extends LarkHelper{
int i = 0;
}
+ public void sendMessageByBot(String robotGroup,String message){
+ try {
+ LarkRobotRequest larkRobotRequest = new LarkRobotRequest(appId, secret);
+ JSONObject body = new JSONObject();
+ body.put("msg_type","text");
+ JSONObject bodyDetail = new JSONObject();
+ bodyDetail.put("text",message);
+ body.put("content",bodyDetail);
+ buildClient(larkRobotRequest).post(robotGroup, body, AccessTokenType.Tenant);
+ } catch (Exception e) {
+ log.error("LarkRobotHelper sendMessageByBot",e);
+ }
+ }
+
/**
* 获取行详情
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableFieldHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableFieldHelper.java
index 1cd7b14..371cfc1 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableFieldHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableFieldHelper.java
@@ -3,6 +3,7 @@ package com.ruoyi.flyingbook.LarkHelper;
import com.lark.oapi.core.request.RequestOptions;
import com.lark.oapi.core.response.RawResponse;
import com.lark.oapi.service.bitable.v1.model.*;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
import com.ruoyi.flyingbook.domain.lark.LarkTableFieldRequest;
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import lombok.extern.slf4j.Slf4j;
@@ -55,10 +56,11 @@ public class LarkTableFieldHelper extends LarkHelper {
}
return result;
}else {
- throw new RuntimeException(list.getMsg());
+
+ throw new RuntimeException(new LarkException("LarkTableFieldHelper.getTableFieldDetail",list.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableFieldHelper.getTableFieldDetail",e.getMessage(),request).getErrorMessageBody());
}
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableHelper.java
index eaf2996..86988ac 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTableHelper.java
@@ -2,6 +2,7 @@ package com.ruoyi.flyingbook.LarkHelper;
import com.alibaba.fastjson.JSONObject;
import com.lark.oapi.service.bitable.v1.model.*;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -27,8 +28,8 @@ public class LarkTableHelper extends LarkHelper{
public static void main(String[] args) throws Exception {
LarkTableHelper bk = new LarkTableHelper();
-// map.put("a", "aaa");
- LarkTableRequest add = new LarkTableRequest(appId, secret, appToken, tableId,map);
+// map.put("adwadawd", "aaa");
+// LarkTableRequest add = new LarkTableRequest(appId, secret, appToken, tableId,map);
// CreateAppTableRecordRespBody createAppTableRecordRespBody = bk.addTableRecord(add);
// String recordId = createAppTableRecordRespBody.getRecord().getRecordId();
// map.put("b", "EEE");
@@ -38,15 +39,17 @@ public class LarkTableHelper extends LarkHelper{
// ListAppTableRecordRespBody listAppTableRecordRespBody = bk.listTableRecord(add);
// LarkTableRequest delete = new LarkTableRequest(appId, secret, appToken,tableId, recordId);
// bk.deleteTableRecord(delete);
- AppTableCreateHeader[] fields = new AppTableCreateHeader[1];
- AppTableCreateHeader header1 = new AppTableCreateHeader();
- header1.setType(1);
- header1.setFieldName("多行文本");
- fields[0] = header1;
- LarkTableRequest createTableReq = new LarkTableRequest(appId,secret
- ,appToken,"aaa","aaa"
- ,fields);
- bk.createDataTable(createTableReq);
+// AppTableCreateHeader[] fields = new AppTableCreateHeader[1];
+// AppTableCreateHeader header1 = new AppTableCreateHeader();
+// header1.setType(1);
+// header1.setFieldName("多行文本");
+// fields[0] = header1;
+// LarkTableRequest createTableReq = new LarkTableRequest(appId,secret
+// ,appToken,"aaa","aaa"
+// ,fields);
+// bk.createDataTable(createTableReq);
+ LarkTableRequest queryRecordDetail = new LarkTableRequest(appId, secret, "IvzSbCo8waM8was4ihpcq04Vnwe", "tbl7SlD25eSWwgU4","recd44XT5A");
+ GetAppTableRecordResp tableRecordDetail = bk.getTableRecordDetail(queryRecordDetail);
int i = 0;
}
@@ -67,7 +70,7 @@ public class LarkTableHelper extends LarkHelper{
);
return createAppResp.getData();
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableHelper.createMultiTable",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -95,7 +98,7 @@ public class LarkTableHelper extends LarkHelper{
.build()
).getData();
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableHelper.createDataTable",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -115,7 +118,7 @@ public class LarkTableHelper extends LarkHelper{
.recordId(request.getRecord()).
build());
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableHelper.getTableRecordDetail",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -133,13 +136,10 @@ public class LarkTableHelper extends LarkHelper{
if (createAppTableRecordResp.getCode() == 0){
return createAppTableRecordResp.getData();
}else {
- throw new RuntimeException(createAppTableRecordResp.getMsg());
+ throw new RuntimeException(new LarkException("LarkTableHelper.addTableRecord",createAppTableRecordResp.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- Map resultMap = new HashMap<>();
- resultMap.put("errorCode",e.getMessage());
- resultMap.put("info", JSONObject.toJSONString(request));
- throw new RuntimeException(JSONObject.toJSONString(resultMap));
+ throw new RuntimeException(new LarkException("LarkTableHelper.addTableRecord",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -155,10 +155,10 @@ public class LarkTableHelper extends LarkHelper{
if (delete.getCode() == 0){
return delete.getData();
}else {
- throw new RuntimeException(delete.getMsg());
+ throw new RuntimeException(new LarkException("LarkTableHelper.deleteTableRecord",delete.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableHelper.deleteTableRecord",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -178,10 +178,10 @@ public class LarkTableHelper extends LarkHelper{
if (update.getCode() == 0){
return update.getData();
}else {
- throw new RuntimeException(update.getMsg());
+ throw new RuntimeException(new LarkException("LarkTableHelper.updateTableRecord",update.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableHelper.updateTableRecord",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -206,10 +206,10 @@ public class LarkTableHelper extends LarkHelper{
if (list.getCode() == 0){
return list.getData();
}else {
- throw new RuntimeException(list.getMsg());
+ throw new RuntimeException(new LarkException("LarkTableHelper.listTableRecord",list.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkTableHelper.listTableRecord",e.getMessage(),request).getErrorMessageBody());
}
}
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTaskHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTaskHelper.java
new file mode 100644
index 0000000..7dbd308
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTaskHelper.java
@@ -0,0 +1,75 @@
+package com.ruoyi.flyingbook.LarkHelper;
+
+import com.lark.oapi.service.task.v1.enums.CreateTaskUserIdTypeEnum;
+import com.lark.oapi.service.task.v1.model.*;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
+import com.ruoyi.flyingbook.domain.lark.LarkTaskRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @author yuxiangyong
+ * @create 2023-03-12 18:10
+ */
+@Slf4j
+@Component
+public class LarkTaskHelper extends LarkHelper {
+
+
+ public static void main(String[] args) throws Exception {
+ LarkTaskHelper taskHelper = new LarkTaskHelper();
+// LarkTaskRequest larkRobotRequest = new LarkTaskRequest(appId, secret);
+// Task task = new Task();
+// task.setSummary("测试一下");
+// task.setDescription("描述");
+// task.setOrigin(larkRobotRequest.getDefaultOrigin());
+// task.setCollaboratorIds(new String[]{"ou_cd09481727e91fce1f12b7b0ed1500d2","ou_da28bfeca28299a2eb314c6280a6905c"});
+// larkRobotRequest.setTask(task);
+// taskHelper.createTask(larkRobotRequest);
+ LarkTaskRequest larkTaskRequest = new LarkTaskRequest(appId, secret,"0148604b-9504-44d3-88fb-cde2e97fd0ee");
+ GetTaskRespBody taskInfo = taskHelper.getTaskInfo(larkTaskRequest);
+ int i = 0;
+ }
+
+ /**
+ * 创建任务
+ *
+ * @return
+ */
+ public CreateTaskRespBody createTask(LarkTaskRequest request) {
+ try {
+ CreateTaskResp createTaskResp = buildClient(request)
+ .task()
+ .task().create(
+ CreateTaskReq.newBuilder()
+ .userIdType(CreateTaskUserIdTypeEnum.OPEN_ID)
+ .task(request.getTask())
+ .build()
+ );
+ return createTaskResp.getData();
+ } catch (Exception e) {
+ throw new RuntimeException(new LarkException("LarkTaskHelper.createTask",e.getMessage(),request).getErrorMessageBody());
+ }
+ }
+
+ /**
+ * 获取任务明细
+ *
+ * @return
+ */
+ public GetTaskRespBody getTaskInfo(LarkTaskRequest request) {
+ try {
+ GetTaskResp getTaskResp = buildClient(request)
+ .task()
+ .task().get(
+ GetTaskReq.newBuilder()
+ .taskId(request.getLarkTaskId())
+ .build()
+ );
+ return getTaskResp.getData();
+ } catch (Exception e) {
+ throw new RuntimeException(new LarkException("LarkTaskHelper.createTask",e.getMessage(),request).getErrorMessageBody());
+ }
+ }
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkUserHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkUserHelper.java
index 1f2f13f..84d4eec 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkUserHelper.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkUserHelper.java
@@ -7,6 +7,7 @@ import com.lark.oapi.service.authen.v1.model.CreateAccessTokenRespBody;
import com.lark.oapi.service.contact.v3.enums.BatchGetIdUserUserIdTypeEnum;
import com.lark.oapi.service.contact.v3.model.*;
import com.ruoyi.flyingbook.domain.lark.LarkApprovalRequest;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
import com.ruoyi.flyingbook.domain.lark.LarkUserRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -39,10 +40,10 @@ public class LarkUserHelper extends LarkHelper{
if (getUserResp.getCode() == 0){
return getUserResp.getData();
}else {
- throw new RuntimeException(getUserResp.getMsg());
+ throw new RuntimeException(new LarkException("LarkUserHelper.getUserInfoDetail",getUserResp.getMsg(),request).getErrorMessageBody());
}
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkUserHelper.getUserInfoDetail",e.getMessage(),request).getErrorMessageBody());
}
}
@@ -66,7 +67,7 @@ public class LarkUserHelper extends LarkHelper{
)
.getData();
} catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ throw new RuntimeException(new LarkException("LarkUserHelper.getUserToken",e.getMessage(),request).getErrorMessageBody());
}
}
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/aop/ErrorLogAop.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/aop/ErrorLogAop.java
new file mode 100644
index 0000000..f4aeee9
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/aop/ErrorLogAop.java
@@ -0,0 +1,64 @@
+package com.ruoyi.flyingbook.aop;
+
+import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper;
+import com.ruoyi.flyingbook.domain.EventLog;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
+import com.ruoyi.flyingbook.domain.lark.LarkRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-05-24 21:36
+ */
+@Slf4j
+@Aspect
+@Component
+public class ErrorLogAop {
+
+ @Autowired
+ private LarkRobotHelper larkRobotHelper;
+
+ @Value("${lark.robot.group}")
+ private String ROBOT_GROUP;
+
+ /**
+ * 创建对象填充默认参数
+ */
+ @After("execution(* com.ruoyi.flyingbook.service.IEventLogService.insertEventLog(..)) && (args(dto))")
+ public void prePersist(EventLog dto) {
+ String errorMessage = dto.getErrorMessage();
+ if (StringUtils.isNotBlank(errorMessage)) {
+ LarkRequest larkRequest = new LarkRequest("a", "b");
+ LarkException larkException = new LarkException("",errorMessage, larkRequest);
+ String errorMessageBody = larkException.getErrorMessageBody();
+// larkRobotHelper.sendMessageByBot(ROBOT_GROUP, errorMessageBody);
+ }
+ }
+
+ /**
+ * 创建对象填充默认参数
+ */
+ @After("execution(* com.ruoyi.flyingbook.service.IEventLogService.insertBatchEventLog(..)) && (args(dto))")
+ public void prePersist(List dto) {
+ List errorList = dto.stream()
+ .filter(r -> {
+ return StringUtils.isNotBlank(r.getErrorMessage());
+ })
+ .map(EventLog::getErrorMessage)
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(errorList)) {
+// larkRobotHelper.sendMessageByBot(ROBOT_GROUP,String.join(",",errorList));
+ }
+ }
+
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java
index 23bbbe7..5f01e2d 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java
@@ -3,9 +3,12 @@ package com.ruoyi.flyingbook.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.utils.PdfUtils;
import com.ruoyi.flyingbook.LarkHelper.LarkFileHelper;
+import com.ruoyi.flyingbook.domain.Event;
+import com.ruoyi.flyingbook.domain.EventLog;
import com.ruoyi.flyingbook.domain.edi.EdiResponseVo;
import com.ruoyi.flyingbook.domain.edi.SyncToTableRequest;
import com.ruoyi.flyingbook.edi.EdiOperateService;
+import com.ruoyi.flyingbook.service.IEventLogService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.File;
import java.io.InputStream;
+import java.util.Arrays;
@Slf4j
@RestController
@@ -29,6 +33,8 @@ public class EdiController extends BaseController {
private LarkFileHelper larkFileHelper;
@Autowired
ResourceLoader resourceLoader;
+ @Autowired
+ private IEventLogService iEventLogService;
/**
* 同步数据到飞书表格
@@ -40,35 +46,41 @@ public class EdiController extends BaseController {
@RequestMapping("/createPdf")
public void exportPdfDemo(@RequestParam("param") String param) throws Exception {
- System.out.println(System.getProperty("user.dir"));
- ClassPathResource classPathResource = new ClassPathResource("photo/title.png");
- InputStream inputStream = null;
- try {
- inputStream = classPathResource.getInputStream();
- File inuModel = new File("/");
- FileUtils.copyToFile(inputStream, inuModel);
- System.out.println(inuModel.getName());
- } catch (Exception e) {
- log.error("", e);
- }finally {
- if (inputStream != null){
- inputStream.close();
- }
- }
- Resource resource = resourceLoader.getResource("classpath:photo/title.png");
- InputStream inputStream2 = null;
- try {
- inputStream2 = resource.getInputStream();
- File inuModel = new File("/");
- FileUtils.copyToFile(inputStream, inuModel);
- System.out.println(inuModel.getName());
- } catch (Exception e) {
- log.error("", e);
- }finally {
- if (inputStream2 != null){
- inputStream2.close();
- }
- }
+ EventLog log1 = new EventLog();
+ log1.setErrorMessage("asd");
+ iEventLogService.insertEventLog(log1);
+ EventLog log2 = new EventLog();
+ iEventLogService.insertBatchEventLog(Arrays.asList(log1,log2));
+
+// System.out.println(System.getProperty("user.dir"));
+// ClassPathResource classPathResource = new ClassPathResource("photo/title.png");
+// InputStream inputStream = null;
+// try {
+// inputStream = classPathResource.getInputStream();
+// File inuModel = new File("/");
+// FileUtils.copyToFile(inputStream, inuModel);
+// System.out.println(inuModel.getName());
+// } catch (Exception e) {
+// log.error("", e);
+// }finally {
+// if (inputStream != null){
+// inputStream.close();
+// }
+// }
+// Resource resource = resourceLoader.getResource("classpath:photo/title.png");
+// InputStream inputStream2 = null;
+// try {
+// inputStream2 = resource.getInputStream();
+// File inuModel = new File("/");
+// FileUtils.copyToFile(inputStream, inuModel);
+// System.out.println(inuModel.getName());
+// } catch (Exception e) {
+// log.error("", e);
+// }finally {
+// if (inputStream2 != null){
+// inputStream2.close();
+// }
+// }
// CourseFeedbackTemplateDto resultDTO = new CourseFeedbackTemplateDto();
// resultDTO.setProgram("program");
// resultDTO.setStudentName("student");
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java
index cedc8a0..7041c67 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java
@@ -30,7 +30,10 @@ public class RequestVo {
private String errorMessage;
private Boolean stop;
-
+ /**
+ * LarkTask 用参数
+ */
+ private String larkTaskId;
/**
* ApprovalCallback 用参数
*/
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkException.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkException.java
new file mode 100644
index 0000000..d86d410
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkException.java
@@ -0,0 +1,30 @@
+package com.ruoyi.flyingbook.domain.lark;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-05-25 21:31
+ */
+@Data
+@NoArgsConstructor
+public class LarkException {
+
+ private String origin;
+
+ private String errorMessage;
+
+ private Object request;
+
+ public LarkException(String origin,String errorMessage, Object request) {
+ this.origin = origin;
+ this.errorMessage = errorMessage;
+ this.request = request;
+ }
+
+ public String getErrorMessageBody(){
+ return this.toString();
+ }
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkTaskRequest.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkTaskRequest.java
new file mode 100644
index 0000000..7b54965
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkTaskRequest.java
@@ -0,0 +1,74 @@
+package com.ruoyi.flyingbook.domain.lark;
+
+import com.lark.oapi.service.task.v1.model.Origin;
+import com.lark.oapi.service.task.v1.model.Task;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-03-18 1:05
+ */
+@Data
+@NoArgsConstructor
+public class LarkTaskRequest extends LarkRequest{
+
+
+ private String larkTaskId;
+ /**
+ * 内容
+ */
+ private String content;
+ /**
+ * 类型
+ */
+ private String msgType;
+ /**
+ * 接收人id
+ */
+ private String[] receiveIdList;
+
+ private Task task;
+
+ public LarkTaskRequest(String appId, String appSecret) {
+ super(appId, appSecret);
+ }
+
+ public LarkTaskRequest(String appId, String appSecret,Task task) {
+ super(appId, appSecret);
+ this.task = task;
+ }
+
+ public LarkTaskRequest(String appId, String appSecret,String larkTaskId) {
+ super(appId, appSecret);
+ this.larkTaskId = larkTaskId;
+ }
+
+ public LarkTaskRequest(String appId, String appSecret,String summary,String desc,String[] receiveIdList) {
+ super(appId, appSecret);
+ Task task = new Task();
+ task.setSummary(summary);
+ task.setDescription(desc);
+ task.setOrigin(this.getDefaultOrigin());
+ task.setCollaboratorIds(receiveIdList);
+ this.task = task;
+ }
+
+ public Task buildBaseTask(String summary,String desc,String[] receiveIdList){
+ Task task = new Task();
+ task.setSummary(summary);
+ task.setDescription(desc);
+ task.setOrigin(this.getDefaultOrigin());
+ task.setCollaboratorIds(receiveIdList);
+ return task;
+ }
+
+ public Origin getDefaultOrigin(){
+ Origin origin = new Origin();
+ origin.setPlatformI18nName("RY_TIR");
+ return origin;
+ }
+
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkCallBackFactory.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkCallBackFactory.java
index 8af931e..b14ae88 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkCallBackFactory.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkCallBackFactory.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.enums.CallBackTypeEnum;
import com.ruoyi.flyingbook.domain.RequestVo;
import com.ruoyi.flyingbook.strategy.callback.ApprovalCallback;
+import com.ruoyi.flyingbook.strategy.callback.LarkTaskCallback;
import com.ruoyi.flyingbook.strategy.callback.MultidimensionalTableCallback;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +21,8 @@ public class LarkCallBackFactory {
private MultidimensionalTableCallback multidimensionalTableCallback;
@Autowired
private ApprovalCallback approvalCallback;
+ @Autowired
+ private LarkTaskCallback larkTaskCallback;
public void execute(RequestVo larkRequest) {
String message = larkRequest.getMessage();
@@ -44,6 +47,9 @@ public class LarkCallBackFactory {
case APPROVAL_TASK:
approvalCallback.execute(larkRequest);
break;
+ case LARK_TASK:
+ larkTaskCallback.execute(larkRequest);
+ break;
default:
break;
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateFactory.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateFactory.java
index fdc02f1..daa1887 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateFactory.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateFactory.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.enums.EventTypeEnum;
import com.ruoyi.flyingbook.domain.Event;
import com.ruoyi.flyingbook.domain.RequestVo;
import com.ruoyi.flyingbook.strategy.operate.ApprovalCallbackOperate;
+import com.ruoyi.flyingbook.strategy.operate.LarkTaskCallbackOperate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -18,21 +19,27 @@ public class LarkOperateFactory {
private LarkOperateTableFactory larkOperateTableFactory;
@Autowired
private ApprovalCallbackOperate approvalCallbackOperate;
+ @Autowired
+ private LarkTaskCallbackOperate larkTaskCallbackOperate;
public void execute(Event event) {
EventTypeEnum eventTypeEnum = EventTypeEnum.getByCode(event.getType());
if (eventTypeEnum == null) {
return;
}
+ RequestVo request = new RequestVo();
switch (eventTypeEnum) {
case ROW_CHANGE:
larkOperateTableFactory.execute(event);
break;
case APPROVAL_TASK:
- RequestVo request = new RequestVo();
request.setEvent(event);
approvalCallbackOperate.execute(request);
break;
+ case LARK_TASK:
+ request.setEvent(event);
+ larkTaskCallbackOperate.execute(request);
+ break;
default:
break;
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java
index 4b1ebc7..6654d04 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java
@@ -1,5 +1,6 @@
package com.ruoyi.flyingbook.factory;
+import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.constant.RedisConstants;
import com.ruoyi.common.enums.AppType;
import com.ruoyi.common.enums.EventOperateStatus;
@@ -10,10 +11,7 @@ import com.ruoyi.flyingbook.service.IEventLogService;
import com.ruoyi.flyingbook.service.IEventService;
import com.ruoyi.flyingbook.service.ILarkCompanyRelationService;
import com.ruoyi.flyingbook.service.ILarkTableRelationService;
-import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableDoubleOperate;
-import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableMaintenanceRowOperate;
-import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableOperate;
-import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableSingleOperate;
+import com.ruoyi.flyingbook.strategy.operate.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -41,6 +39,8 @@ public class LarkOperateTableFactory {
@Resource
private MultidimensionalTableMaintenanceRowOperate maintenanceRowOperate;
@Resource
+ private MultidimensionalTableCreateTaskOperate multidimensionalTableCreateTaskOperate;
+ @Resource
protected ILarkCompanyRelationService larkCompanyRelationService;
@Resource
protected IEventService eventService;
@@ -52,6 +52,9 @@ public class LarkOperateTableFactory {
public void execute(Event event) {
try {
RequestVo request = buildRequest(event);
+ if (CollectionUtils.isEmpty(request.getLarkTableRelations())){
+ return;
+ }
String cacheKey = String.format("%s_%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, event.getAppToken(), event.getTableId(), event.getRecordId());
redisTemplate.delete(cacheKey);
switch (request.getTableRelationType()) {
@@ -64,12 +67,15 @@ public class LarkOperateTableFactory {
case MAINTENANCE_ROW_RELATION:
maintenanceRowOperate.execute(request);
break;
+ case CREATE_TASK_BY_TABLE:
+ multidimensionalTableCreateTaskOperate.execute(request);
+ break;
default:
throw new RuntimeException("当前关联表类型不存在");
}
} catch (Exception e) {
eventService.updateStatus(event.getId(), EventOperateStatus.ERROR.getCode(), event.getNumbers() + 1);
- EventLog eventLog = new EventLog(event.getId(), "BUILD_REQUEST", e.getMessage());
+ EventLog eventLog = new EventLog(event.getId(), "BUILD_REQUEST", JSONObject.toJSONString(event),"", e.getMessage());
eventLogService.insertEventLog(eventLog);
}
@@ -111,8 +117,12 @@ public class LarkOperateTableFactory {
.map(LarkTableRelation::getRelationType)
.distinct()
.collect(Collectors.toList());
- if (CollectionUtils.isEmpty(tableRelationTypeList) || tableRelationTypeList.size() > 1) {
- String errorMessage = String.format("tableId:{}表关系未配置 或同一张表配置类型超过一种", event.getTableId());
+ if (CollectionUtils.isEmpty(tableRelationTypeList)) {
+ log.info(String.format("tableId:{%s}表关系未配置", event.getTableId()));
+ return null;
+ }
+ if (tableRelationTypeList.size() > 1) {
+ String errorMessage = String.format("tableId:{%s}表配置类型超过一种", event.getTableId());
log.error("LarkOperateTableFactory.check:{}", errorMessage);
throw new RuntimeException(errorMessage);
}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/LarkTaskCallback.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/LarkTaskCallback.java
new file mode 100644
index 0000000..c4ef7a1
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/LarkTaskCallback.java
@@ -0,0 +1,113 @@
+package com.ruoyi.flyingbook.strategy.callback;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.enums.EventOperateStatus;
+import com.ruoyi.common.enums.EventOperateType;
+import com.ruoyi.common.enums.EventTypeEnum;
+import com.ruoyi.common.enums.FlagStatus;
+import com.ruoyi.flyingbook.domain.Event;
+import com.ruoyi.flyingbook.domain.EventLog;
+import com.ruoyi.flyingbook.domain.RequestVo;
+import com.ruoyi.flyingbook.service.IEventLogService;
+import com.ruoyi.flyingbook.service.IEventService;
+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.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author yuxiangyong
+ * @create 2023-03-12 15:58
+ */
+@Slf4j
+@Service
+public class LarkTaskCallback extends CallbackAbstract {
+
+ @Autowired
+ private IEventService eventService;
+ @Autowired
+ private IEventLogService eventLogService;
+
+ @Override
+ protected Boolean check(RequestVo request) {
+ return Boolean.TRUE;
+ }
+
+ @Override
+ protected void preOperate(RequestVo request) {
+ String message = request.getMessage();
+ JSONObject jsonObject = JSONObject.parseObject(message);
+ JSONObject event = jsonObject.getJSONObject("event");
+ request.setLarkTaskId(event.getString("task_id"));
+ }
+
+ @Override
+ protected void businessProcessing(RequestVo request) {
+ Event event = queryEvent(request.getAppId(),request.getFromRecordId());
+ //如果已经存在处理中的就不需要操作数据库了
+ if (event != null && EventOperateStatus.PENDING.getCode().equals(event.getOperateStatus()) && event.getNumbers() < 3){
+ return;
+ }
+ event = this.buildDto(request,event);
+ if (event.getId() == null){
+ eventService.insertEvent(event);
+ }else {
+ eventService.updateStatus(event.getId(),EventOperateStatus.PENDING.getCode(),0L);
+ }
+ request.setEventId(event.getId());
+ }
+
+ @Override
+ protected void endHandle(RequestVo request) {
+ if (request.getEventId() == null){
+ return;
+ }
+ EventLog eventLog = StringUtils.isBlank(request.getErrorMessage()) ?
+ new EventLog(request.getEventId(),EventOperateType.LARK_TASK_CALL_BACK.getCode(),request.getMessage())
+ : new EventLog(request.getEventId(),EventOperateType.LARK_TASK_CALL_BACK.getCode(),request.getMessage(),request.getErrorCode(),request.getErrorMessage());
+ eventLogService.insertEventLog(eventLog);
+ }
+
+ @Override
+ protected String buildResult(RequestVo request) {
+ return "";
+ }
+
+
+ @Override
+ protected String getName() {
+ return this.getClass().getSimpleName();
+ }
+
+ private Event queryEvent(String appId,String recordId){
+
+ Event event = new Event();
+ event.setAppId(appId);
+ event.setRecordId(recordId);
+ List events = eventService.selectEventList(event);
+ if (CollectionUtils.isNotEmpty(events)){
+ return events.get(0);
+ }
+ return null;
+ }
+
+ private Event buildDto(RequestVo request, Event event){
+ event = event == null ? new Event() :event;
+ event.setFlag(FlagStatus.OK.getCode());
+ event.setRecordId(request.getLarkTaskId());
+ event.setNumbers(0L);
+ event.setOperateStatus(EventOperateStatus.PENDING.getCode());
+ event.setCreateBy("System");
+ event.setCreateTime(new Date());
+ event.setUpdateTime(new Date());
+ event.setUpdateBy("System");
+ event.setAppId(request.getAppId());
+ event.setType(EventTypeEnum.LARK_TASK.getCode());
+ return event;
+ }
+
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkAbstract.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkAbstract.java
index 0dee448..574fff6 100644
--- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkAbstract.java
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkAbstract.java
@@ -13,6 +13,8 @@ import java.util.Map;
*/
public abstract class LarkAbstract extends LarkOperateAbstract {
+ protected static final Integer SAGE_CODE = 1254043;
+
/**
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkTaskCallbackOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkTaskCallbackOperate.java
new file mode 100644
index 0000000..c8aaa95
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/LarkTaskCallbackOperate.java
@@ -0,0 +1,87 @@
+package com.ruoyi.flyingbook.strategy.operate;
+
+import com.ruoyi.common.enums.EventOperateStatus;
+import com.ruoyi.common.enums.EventOperateType;
+import com.ruoyi.flyingbook.LarkHelper.LarkTaskHelper;
+import com.ruoyi.flyingbook.domain.Event;
+import com.ruoyi.flyingbook.domain.EventLog;
+import com.ruoyi.flyingbook.domain.RequestVo;
+import com.ruoyi.flyingbook.service.IEventLogService;
+import com.ruoyi.flyingbook.service.IEventService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * 飞书任务操作类
+ *
+ * @author yuxiangyong
+ * @create 2023-03-13 20:47
+ */
+@Slf4j
+@Component("LarkTaskCallbackOperate")
+public class LarkTaskCallbackOperate extends LarkAbstract {
+
+ @Autowired
+ private IEventLogService eventLogService;
+ @Autowired
+ private LarkTaskHelper larkTaskHelper;
+ @Autowired
+ private IEventService eventService;
+
+
+ @Override
+ protected void preOperate(RequestVo request) {
+ Event event = request.getEvent();
+ if (event == null) {
+ throw new RuntimeException("当前事件为空");
+ }
+
+ }
+
+ @Override
+ protected void businessProcessing(RequestVo request) {
+ Event event = request.getEvent();
+ String larkTaskId = event.getRecordId();
+// larkTaskHelper.createTask()
+ }
+
+ @Override
+ protected Map getBody(RequestVo request) {
+ return null;
+ }
+
+
+
+ @Override
+ protected void endHandle(RequestVo request) {
+ Event event = request.getEvent();
+ EventLog eventLog = null;
+ if (StringUtils.isBlank(request.getErrorMessage())) {
+ eventService.updateStatus(event.getId(), EventOperateStatus.SUCCESS.getCode(), event.getNumbers());
+ eventLog = new EventLog(event.getId(), EventOperateType.SYNC_CANDLE.getCode(), request.getMessage());
+ } else {
+ eventService.updateStatus(event.getId(), EventOperateStatus.PENDING.getCode(), event.getNumbers() + 1);
+ eventLog = new EventLog(event.getId(), EventOperateType.SYNC_CANDLE.getCode(), request.getMessage(), request.getErrorCode(), request.getErrorMessage());
+ }
+ if (eventLog != null) {
+ eventLog.setOperateInfo(request.getOperateInfo());
+ eventLogService.insertEventLog(eventLog);
+ }
+ }
+
+ @Override
+ protected String buildResult(RequestVo request) {
+ return null;
+ }
+
+ @Override
+ protected String getName() {
+ return this.getClass().getSimpleName();
+ }
+
+}
diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableCreateTaskOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableCreateTaskOperate.java
new file mode 100644
index 0000000..1a6ac8b
--- /dev/null
+++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableCreateTaskOperate.java
@@ -0,0 +1,138 @@
+package com.ruoyi.flyingbook.strategy.operate;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.internal.LinkedTreeMap;
+import com.lark.oapi.core.response.RawResponse;
+import com.lark.oapi.service.bitable.v1.model.AppTableRecord;
+import com.lark.oapi.service.bitable.v1.model.GetAppTableRecordResp;
+import com.lark.oapi.service.bitable.v1.model.GetAppTableRecordRespBody;
+import com.lark.oapi.service.task.v1.model.Task;
+import com.ruoyi.common.enums.EventOperateStatus;
+import com.ruoyi.common.enums.EventOperateType;
+import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper;
+import com.ruoyi.flyingbook.LarkHelper.LarkTaskHelper;
+import com.ruoyi.flyingbook.domain.Event;
+import com.ruoyi.flyingbook.domain.EventLog;
+import com.ruoyi.flyingbook.domain.RequestVo;
+import com.ruoyi.flyingbook.domain.lark.LarkException;
+import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
+import com.ruoyi.flyingbook.domain.lark.LarkTaskRequest;
+import com.ruoyi.flyingbook.service.IEventLogService;
+import com.ruoyi.flyingbook.service.IEventService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * 多维表格操作类_批量创建任务
+ *
+ * @author yuxiangyong
+ * @create 2023-03-13 20:47
+ */
+@Slf4j
+@Component("MultidimensionalTableCreateTaskOperate")
+public class MultidimensionalTableCreateTaskOperate extends LarkAbstract {
+
+ @Autowired
+ protected LarkTableHelper larkTableHelper;
+ @Autowired
+ protected LarkTaskHelper larkTaskHelper;
+ @Autowired
+ protected IEventService eventService;
+ @Autowired
+ protected IEventLogService eventLogService;
+
+ @Override
+ protected void preOperate(RequestVo request) {
+ }
+
+ @Override
+ protected void businessProcessing(RequestVo request) {
+ Event event = request.getEvent();
+ LarkTableRequest detailRequest = new LarkTableRequest(request.getAppId(), request.getAppSecret(), event.getAppToken(), event.getTableId(), event.getRecordId());
+ detailRequest.setSafeCode(Arrays.asList(SAGE_CODE));
+ GetAppTableRecordResp recordDetail = larkTableHelper.getTableRecordDetail(detailRequest);
+ request.setRespBody(recordDetail);
+ send(request);
+ }
+
+
+ @Override
+ protected Map getBody(RequestVo request) {
+ Map result = new HashMap<>();
+ return result;
+ }
+
+ private void send(RequestVo request) {
+ Event event = request.getEvent();
+ GetAppTableRecordResp respBody = request.getRespBody();
+ if (respBody.getCode() != 0){
+ throw new RuntimeException(String.format("创建任务时,表${}中不存在record{}",event.getTableId(),event.getRecordId()));
+ }
+ AppTableRecord record = respBody.getData().getRecord();
+ Map fields = record.getFields();
+ Object syncTaskCountObj = fields.get("批量同步任务数量");
+ Object taskCreatorObj = fields.get("人员");
+ if(syncTaskCountObj == null || taskCreatorObj == null){
+ return;
+ }
+ Integer syncTaskCount = Integer.valueOf(syncTaskCountObj.toString());
+ ArrayList> taskCreator = (ArrayList>) taskCreatorObj;
+ int size = taskCreator.size();
+ String[] createrIdList = new String[size];
+ for (int i = 0; i < size; i++) {
+ String id = String.valueOf(taskCreator.get(i).get("id"));
+ createrIdList[i] = id;
+ }
+ LarkTaskRequest larkTaskRequest = new LarkTaskRequest(request.getAppId(),request.getAppSecret());
+ Task task = larkTaskRequest.buildBaseTask("", "", new String[0]);
+ task.setCollaboratorIds(createrIdList);
+ larkTaskRequest.setTask(task);
+ for (int i = 0;i < syncTaskCount;i++){
+ String createTaskTemplate = new StringBuilder("创建任务模板").append(i).toString();
+ task.setSummary(createTaskTemplate);
+ task.setDescription(createTaskTemplate);
+ larkTaskHelper.createTask(larkTaskRequest);
+ }
+ request.setOperateInfo(JSONObject.toJSONString(task));
+ request.setEventOperateType(EventOperateType.CREATE_TASK);
+ }
+
+
+ @Override
+ protected void endHandle(RequestVo request) {
+ Event event = request.getEvent();
+ EventLog eventLog = null;
+ if (StringUtils.isBlank(request.getErrorMessage())) {
+ eventService.updateStatus(event.getId(), EventOperateStatus.SUCCESS.getCode(), event.getNumbers());
+ eventLog = new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage());
+ } else {
+ eventService.updateStatus(event.getId(), EventOperateStatus.PENDING.getCode(), event.getNumbers() + 1);
+ if (request.getEventOperateType() != null) {
+ eventLog = new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage(), request.getErrorCode(), request.getErrorMessage());
+ }
+ }
+ if (eventLog != null) {
+ eventLog.setOperateInfo(request.getOperateInfo());
+ eventLogService.insertEventLog(eventLog);
+ }
+ }
+
+ @Override
+ protected String buildResult(RequestVo request) {
+ return null;
+ }
+
+ @Override
+ protected String getName() {
+ return this.getClass().getSimpleName();
+ }
+
+}