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(); + } + +}