From 8402cf2c02f0b5f9fb2945a978241b43c5752fa8 Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 15 Mar 2023 22:49:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=90=8C=E6=AD=A5(=E5=BE=85=E6=B5=8B=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/enums/EventOperateStatus.java | 3 +- .../enums/TableDetailRelationTypeEnum.java | 29 +++ .../LarkHelper/LarkTokenHelper.java | 97 +++----- .../consumer/LarkApplicationRunner.java | 17 +- .../com/ruoyi/flyingbook/domain/Event.java | 77 +++--- .../com/ruoyi/flyingbook/domain/EventLog.java | 53 +++-- .../domain/LarkCompanyRelation.java | 2 +- .../ruoyi/flyingbook/domain/LarkRequest.java | 17 +- .../flyingbook/domain/LarkTableRelation.java | 62 ++--- .../domain/LarkTableRowRelation.java | 89 ++++--- .../ruoyi/flyingbook/mapper/EventMapper.java | 7 +- .../mapper/LarkTableRowRelationMapper.java | 3 + .../flyingbook/service/IEventService.java | 2 + .../service/ILarkTableRelationService.java | 1 + .../service/ILarkTableRowRelationService.java | 2 + .../service/impl/EventServiceImpl.java | 5 + .../impl/LarkTableRowRelationServiceImpl.java | 10 + .../strategy/LarkOperateAbstract.java | 20 +- .../strategy/callback/ApprovalCallback.java | 47 ++-- .../operate/MultidimensionalTableOperate.java | 221 ++++++++++-------- .../main/resources/mapper/EventLogMapper.xml | 9 +- .../src/main/resources/mapper/EventMapper.xml | 13 +- .../mapper/LarkCompanyRelationMapper.xml | 2 +- .../mapper/LarkTableRelationMapper.xml | 29 +-- .../mapper/LarkTableRowRelationMapper.xml | 118 ++++++---- sql/lark.sql | 38 ++- 26 files changed, 536 insertions(+), 437 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/TableDetailRelationTypeEnum.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateStatus.java index 3c2e52d..dcfa3e1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateStatus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EventOperateStatus.java @@ -11,8 +11,7 @@ public enum EventOperateStatus { * */ PENDING("PENDING", "未处理"), - SUCCESS("SUCCESS", "成功"), - FAIL("FAIL", "失败"); + SUCCESS("SUCCESS", "处理完成"); private final String code; private final String info; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableDetailRelationTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableDetailRelationTypeEnum.java new file mode 100644 index 0000000..6c1e032 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableDetailRelationTypeEnum.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.enums; + +/** + * @author ruoyi + */ +public enum TableDetailRelationTypeEnum { + + /** + * + */ + ROW("ROW", "行"), + COL("COL", "列"); + + private final String code; + private final String info; + + TableDetailRelationTypeEnum(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTokenHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTokenHelper.java index c461be8..017b4b0 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTokenHelper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkTokenHelper.java @@ -25,9 +25,27 @@ public class LarkTokenHelper { .readTimeout(10, TimeUnit.SECONDS) .build(); - - public String getToken(String appId, String srcret) { + private JSONObject execute(Request request){ Response execute = null; + try { + execute = client.newCall(request).execute(); + } catch (IOException e) { + String errorMessage = String.format("飞书接口调用失败:{}",e.getMessage()); + throw new RuntimeException(errorMessage); + } + if (execute == null || execute.body() == null){ + throw new RuntimeException("飞书返回结果为空"); + } + JSONObject jsonObject = JSONObject.parseObject(execute.body().toString()); + if ("0".equals(jsonObject.getString("code"))){ + return jsonObject; + }else { + String errorMessage = String.format("%s##%s", jsonObject.getString("code"), jsonObject.getString("msg")); + throw new RuntimeException(errorMessage); + } + } + + public String getToken(String appId, String srcret,String tokenType) { Map map = new HashMap<>(); map.put("app_id", appId); map.put("app_secret", srcret); @@ -35,17 +53,8 @@ public class LarkTokenHelper { .method("POST", RequestBody.create(JSONObject.toJSONString(map), MediaType.get("application/json"))) .url("https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal") .build(); - try { - execute = client.newCall(request).execute(); - if (ObjectUtil.isNotNull(execute) && execute.isSuccessful()) { - return execute.body().string(); - }else if (ObjectUtil.isNotNull(execute) && !execute.isSuccessful()){ - System.out.println(execute.body()); - } - } catch (IOException e) { - log.error("http post 请求失败--{}", e); - } - return null; + + return execute(request).getString(tokenType); } /** @@ -53,70 +62,36 @@ public class LarkTokenHelper { * @param token * @return */ - public String getLark(String url,Map body, String token) { + public JSONObject getLark(String url,Map body, String token) { Response execute = null; Request request = new Request.Builder() .url(url) .addHeader("Authorization",String.format("Bearer %s",token)) .build(); - try { - execute = client.newCall(request).execute(); - log.info(JSONObject.toJSONString(execute.body().string())); - if (ObjectUtil.isNotNull(execute) && execute.isSuccessful()) { - return execute.body().string(); - }else if (ObjectUtil.isNotNull(execute) && !execute.isSuccessful()){ - System.out.println(execute.body()); - } - } catch (IOException e) { - log.error("http get 请求失败--{}", e); - } - return null; + return execute(request); } - public String postLark(String url,Map body, String token) { - Response execute = null; + public JSONObject postLark(String url,Map body, String token) { Request request = new Request.Builder() .method("POST", RequestBody .create(JSONObject.toJSONString(body), MediaType.get("application/json"))) .url(url) .addHeader("Authorization",String.format("Bearer %s",token)) .build(); - try { - execute = client.newCall(request).execute(); - if (ObjectUtil.isNotNull(execute) && execute.isSuccessful()) { - return execute.body().string(); - }else if (ObjectUtil.isNotNull(execute) && !execute.isSuccessful()){ - System.out.println(execute.body()); - } - } catch (IOException e) { - log.error("http post 请求失败--{}", e); - } - return null; + return execute(request); } - public String putLark(String url,Map body, String token) { - Response execute = null; + public JSONObject putLark(String url,Map body, String token) { Request request = new Request.Builder() .put(RequestBody .create(JSONObject.toJSONString(body), MediaType.get("application/json"))) .url(url) .addHeader("Authorization",String.format("Bearer %s",token)) .build(); - try { - execute = client.newCall(request).execute(); - if (ObjectUtil.isNotNull(execute) && execute.isSuccessful()) { - return execute.body().string(); - }else if (ObjectUtil.isNotNull(execute) && !execute.isSuccessful()){ - System.out.println(execute.body()); - } - } catch (IOException e) { - log.error("http post 请求失败--{}", e); - } - return null; + return execute(request); } - public String deleteLark(String url,Map body, String token) { - Response execute = null; + public JSONObject deleteLark(String url,Map body, String token) { Request.Builder builder = new Request.Builder() .url(url) .addHeader("Authorization", String.format("Bearer %s", token)); @@ -126,22 +101,12 @@ public class LarkTokenHelper { builder.delete(RequestBody .create(JSONObject.toJSONString(body), MediaType.get("application/json"))); } - try { - execute = client.newCall(builder.build()).execute(); - if (ObjectUtil.isNotNull(execute) && execute.isSuccessful()) { - return execute.body().string(); - }else if (ObjectUtil.isNotNull(execute) && !execute.isSuccessful()){ - System.out.println(execute.body()); - } - } catch (IOException e) { - log.error("http post 请求失败--{}", e); - } - return null; + return execute(builder.build()); } public static void main(String[] args) { LarkTokenHelper helper = new LarkTokenHelper(); - String token = helper.getToken( "cli_a482a8572cbc9013", "lZNXbCLlOslWbwBIVc4qvgxOdnfA8Mos"); + String token = helper.getToken( "cli_a482a8572cbc9013", "lZNXbCLlOslWbwBIVc4qvgxOdnfA8Mos","tenant_access_token"); System.out.println(token); JSONObject jsonObject = JSONObject.parseObject(token); Map map = new HashMap<>(); diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/consumer/LarkApplicationRunner.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/consumer/LarkApplicationRunner.java index 5b06b53..dca9540 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/consumer/LarkApplicationRunner.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/consumer/LarkApplicationRunner.java @@ -35,7 +35,6 @@ import java.util.concurrent.TimeUnit; public class LarkApplicationRunner implements ApplicationRunner { - /** * 核心线程数 */ @@ -73,8 +72,10 @@ public class LarkApplicationRunner implements ApplicationRunner { // threadPool.execute(() -> { // // while (true) { -// List statusList = Arrays.asList(EventOperateStatus.PENDING.getCode(),EventOperateStatus.FAIL.getCode()); -// List eventList = eventMapper.queryListOperate(statusList); + Event query = new Event(); + query.setOperateStatus(EventOperateStatus.PENDING.getCode()); + List statusList = Arrays.asList(EventOperateStatus.PENDING.getCode()); + List eventList = eventMapper.selectEventList(query); // if (CollectionUtils.isEmpty(eventList)) { // try { // // 没有订单,休息一下 @@ -84,11 +85,11 @@ public class LarkApplicationRunner implements ApplicationRunner { // } // } else { // try { -// for (Event event : eventList) { -// LarkRequest request = new LarkRequest(); -// request.setEvent(event); -// multidimensionalTableOperate.execute(request); -// } + for (Event event : eventList) { + LarkRequest request = new LarkRequest(); + request.setEvent(event); + multidimensionalTableOperate.execute(request); + } // } catch (Exception e) { // e.printStackTrace(); // } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/Event.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/Event.java index eb9db22..5ed6cee 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/Event.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/Event.java @@ -5,11 +5,12 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; + /** * 【请填写功能名称】对象 event - * + * * @author ruoyi - * @date 2023-03-14 + * @date 2023-03-15 */ public class Event extends BaseEntity { @@ -30,91 +31,78 @@ public class Event extends BaseEntity @Excel(name = "id") private String recordId; - /** $column.columnComment */ - @Excel(name = "id") - private String message; - /** $column.columnComment */ @Excel(name = "id") private Long numbers; - /** (pendingsuccessfail) */ - @Excel(name = "(pendingsuccessfail)") + /** () */ + @Excel(name = "()") private String operateStatus; /** (01) */ @Excel(name = "(01)") private Long flag; - public void setId(Long id) + public void setId(Long id) { this.id = id; } - public Long getId() + public Long getId() { return id; } - public void setAppToken(String appToken) + public void setAppToken(String appToken) { this.appToken = appToken; } - public String getAppToken() + public String getAppToken() { return appToken; } - public void setTableId(String tableId) + public void setTableId(String tableId) { this.tableId = tableId; } - public String getTableId() + public String getTableId() { return tableId; } - public void setRecordId(String recordId) + public void setRecordId(String recordId) { this.recordId = recordId; } - public String getRecordId() + public String getRecordId() { return recordId; } - public void setMessage(String message) - { - this.message = message; - } - - public String getMessage() - { - return message; - } - public void setNumbers(Long numbers) + public void setNumbers(Long numbers) { this.numbers = numbers; } - public Long getNumbers() + public Long getNumbers() { return numbers; } - public void setOperateStatus(String operateStatus) + public void setOperateStatus(String operateStatus) { this.operateStatus = operateStatus; } - public String getOperateStatus() + public String getOperateStatus() { return operateStatus; } - public void setFlag(Long flag) + public void setFlag(Long flag) { this.flag = flag; } - public Long getFlag() + public Long getFlag() { return flag; } @@ -122,19 +110,18 @@ public class Event extends BaseEntity @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("appToken", getAppToken()) - .append("tableId", getTableId()) - .append("recordId", getRecordId()) - .append("message", getMessage()) - .append("numbers", getNumbers()) - .append("operateStatus", getOperateStatus()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("flag", getFlag()) - .append("remark", getRemark()) - .toString(); + .append("id", getId()) + .append("appToken", getAppToken()) + .append("tableId", getTableId()) + .append("recordId", getRecordId()) + .append("numbers", getNumbers()) + .append("operateStatus", getOperateStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("flag", getFlag()) + .append("remark", getRemark()) + .toString(); } } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/EventLog.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/EventLog.java index d19cf2d..b10e103 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/EventLog.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/EventLog.java @@ -9,9 +9,9 @@ import java.util.Date; /** * 【请填写功能名称】对象 event_log - * + * * @author ruoyi - * @date 2023-03-14 + * @date 2023-03-15 */ public class EventLog extends BaseEntity { @@ -20,11 +20,22 @@ public class EventLog extends BaseEntity public EventLog() { } - public EventLog(Long eventId, String operateType) { + public EventLog(Long eventId, String operateType, String operateInfo) { this.eventId = eventId; this.operateType = operateType; - this.setCreateBy("SYSTEM"); + this.operateInfo = operateInfo; this.setCreateTime(new Date()); + this.setCreateBy("System"); + } + + public EventLog(Long eventId, String operateType, String operateInfo, String errorCode, String errorMessage) { + this.eventId = eventId; + this.operateType = operateType; + this.operateInfo = operateInfo; + this.errorCode = errorCode; + this.errorMessage = errorMessage; + this.setCreateTime(new Date()); + this.setCreateBy("System"); } /** $column.columnComment */ @@ -38,6 +49,10 @@ public class EventLog extends BaseEntity @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private String operateType; + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String operateInfo; + /** $column.columnComment */ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private String errorCode; @@ -46,48 +61,57 @@ public class EventLog extends BaseEntity @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private String errorMessage; - public void setId(Long id) + public void setId(Long id) { this.id = id; } - public Long getId() + public Long getId() { return id; } - public void setEventId(Long eventId) + public void setEventId(Long eventId) { this.eventId = eventId; } - public Long getEventId() + public Long getEventId() { return eventId; } - public void setOperateType(String operateType) + public void setOperateType(String operateType) { this.operateType = operateType; } - public String getOperateType() + public String getOperateType() { return operateType; } - public void setErrorCode(String errorCode) + public void setOperateInfo(String operateInfo) + { + this.operateInfo = operateInfo; + } + + public String getOperateInfo() + { + return operateInfo; + } + public void setErrorCode(String errorCode) { this.errorCode = errorCode; } - public String getErrorCode() + public String getErrorCode() { return errorCode; } - public void setErrorMessage(String errorMessage) + public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } - public String getErrorMessage() + public String getErrorMessage() { return errorMessage; } @@ -98,6 +122,7 @@ public class EventLog extends BaseEntity .append("id", getId()) .append("eventId", getEventId()) .append("operateType", getOperateType()) + .append("operateInfo", getOperateInfo()) .append("errorCode", getErrorCode()) .append("errorMessage", getErrorMessage()) .append("remark", getRemark()) diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyRelation.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyRelation.java index b6a77ed..41acdf9 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyRelation.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyRelation.java @@ -9,7 +9,7 @@ import com.ruoyi.common.core.domain.BaseEntity; * 【请填写功能名称】对象 lark_company_relation * * @author ruoyi - * @date 2023-03-14 + * @date 2023-03-15 */ public class LarkCompanyRelation extends BaseEntity { diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkRequest.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkRequest.java index d0bd215..c149827 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkRequest.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkRequest.java @@ -1,5 +1,7 @@ package com.ruoyi.flyingbook.domain; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.enums.EventOperateType; import lombok.Data; import java.util.List; @@ -16,7 +18,9 @@ public class LarkRequest { * 通用信息,不可修改不可删除 */ private String token; - private String appToken; + private String fromAppToken; + private String toAppToken; + private String errorCode; private String errorMessage; @@ -29,7 +33,9 @@ public class LarkRequest { /** * MultidimensionalTableOperate 用参数 */ + private JSONObject record; private Long companyRelationId; + private Long tableRelationId; private String fromTableId; private String toTableId; private String fromRecordId; @@ -37,6 +43,11 @@ public class LarkRequest { private String operateType; private String callBackMessage; private Event event; - private Map> tableRelationMap; - private Map> tableRowRelationMap; + private EventOperateType eventOperateType; + /** + * 表关系 + */ + private Map tableRelationMap; + private Map> tableRowRelationMap; + private Map> tableColRelationMap; } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRelation.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRelation.java index 6bb00eb..3147dc8 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRelation.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRelation.java @@ -9,7 +9,7 @@ import com.ruoyi.common.core.domain.BaseEntity; * 【请填写功能名称】对象 lark_table_relation * * @author ruoyi - * @date 2023-03-14 + * @date 2023-03-15 */ public class LarkTableRelation extends BaseEntity { @@ -24,23 +24,19 @@ public class LarkTableRelation extends BaseEntity /** $column.columnComment */ @Excel(name = "id") - private String fromTableId; - - /** toColName */ - @Excel(name = "toColName") - private String fromColName; + private String fromAppToken; /** $column.columnComment */ - @Excel(name = "toColName") - private String toTableId; + @Excel(name = "id") + private String fromTableId; - /** url */ - @Excel(name = "url") - private String toColName; + /** $column.columnComment */ + @Excel(name = "id") + private String toAppToken; /** $column.columnComment */ - @Excel(name = "url") - private Long colType; + @Excel(name = "id") + private String toTableId; /** 01 */ @Excel(name = "01") @@ -64,6 +60,15 @@ public class LarkTableRelation extends BaseEntity { return larkCompanyRelationId; } + public void setFromAppToken(String fromAppToken) + { + this.fromAppToken = fromAppToken; + } + + public String getFromAppToken() + { + return fromAppToken; + } public void setFromTableId(String fromTableId) { this.fromTableId = fromTableId; @@ -73,14 +78,14 @@ public class LarkTableRelation extends BaseEntity { return fromTableId; } - public void setFromColName(String fromColName) + public void setToAppToken(String toAppToken) { - this.fromColName = fromColName; + this.toAppToken = toAppToken; } - public String getFromColName() + public String getToAppToken() { - return fromColName; + return toAppToken; } public void setToTableId(String toTableId) { @@ -91,24 +96,6 @@ public class LarkTableRelation extends BaseEntity { return toTableId; } - public void setToColName(String toColName) - { - this.toColName = toColName; - } - - public String getToColName() - { - return toColName; - } - public void setColType(Long colType) - { - this.colType = colType; - } - - public Long getColType() - { - return colType; - } public void setFlag(Long flag) { this.flag = flag; @@ -124,11 +111,10 @@ public class LarkTableRelation extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("id", getId()) .append("larkCompanyRelationId", getLarkCompanyRelationId()) + .append("fromAppToken", getFromAppToken()) .append("fromTableId", getFromTableId()) - .append("fromColName", getFromColName()) + .append("toAppToken", getToAppToken()) .append("toTableId", getToTableId()) - .append("toColName", getToColName()) - .append("colType", getColType()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRowRelation.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRowRelation.java index bbe573a..62fac0c 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRowRelation.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRowRelation.java @@ -6,8 +6,6 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; -import java.util.Date; - /** * 【请填写功能名称】对象 lark_table_row_relation * @@ -18,18 +16,17 @@ public class LarkTableRowRelation extends BaseEntity { private static final long serialVersionUID = 1L; + public LarkTableRowRelation() { } - public LarkTableRowRelation(Long larkCompanyRelationId, String fromTableId, String fromRow, String toTableId, String toRow) { - this.larkCompanyRelationId = larkCompanyRelationId; - this.fromTableId = fromTableId; - this.fromRow = fromRow; - this.toTableId = toTableId; - this.toRow = toRow; + public LarkTableRowRelation(Long tableRelationId, String fromId, String toId, String type, String subType) { + this.tableRelationId = tableRelationId; + this.fromId = fromId; + this.toId = toId; + this.type = type; + this.subType = subType; this.flag = FlagStatus.OK.getCode(); - this.setCreateBy("System"); - this.setCreateTime(new Date()); } /** $column.columnComment */ @@ -37,23 +34,23 @@ public class LarkTableRowRelation extends BaseEntity /** id */ @Excel(name = "id") - private Long larkCompanyRelationId; + private Long tableRelationId; /** $column.columnComment */ @Excel(name = "id") - private String fromTableId; - - /** toColName */ - @Excel(name = "toColName") - private String fromRow; + private String fromId; /** $column.columnComment */ - @Excel(name = "toColName") - private String toTableId; + @Excel(name = "id") + private String toId; + + /** */ + @Excel(name = " ") + private String type; - /** url */ - @Excel(name = "url") - private String toRow; + /** $column.columnComment */ + @Excel(name = " ") + private String subType; /** 01 */ @Excel(name = "01") @@ -68,50 +65,50 @@ public class LarkTableRowRelation extends BaseEntity { return id; } - public void setLarkCompanyRelationId(Long larkCompanyRelationId) + public void setTableRelationId(Long tableRelationId) { - this.larkCompanyRelationId = larkCompanyRelationId; + this.tableRelationId = tableRelationId; } - public Long getLarkCompanyRelationId() + public Long getTableRelationId() { - return larkCompanyRelationId; + return tableRelationId; } - public void setFromTableId(String fromTableId) + public void setFromId(String fromId) { - this.fromTableId = fromTableId; + this.fromId = fromId; } - public String getFromTableId() + public String getFromId() { - return fromTableId; + return fromId; } - public void setFromRow(String fromRow) + public void setToId(String toId) { - this.fromRow = fromRow; + this.toId = toId; } - public String getFromRow() + public String getToId() { - return fromRow; + return toId; } - public void setToTableId(String toTableId) + public void setType(String type) { - this.toTableId = toTableId; + this.type = type; } - public String getToTableId() + public String getType() { - return toTableId; + return type; } - public void setToRow(String toRow) + public void setSubType(String subType) { - this.toRow = toRow; + this.subType = subType; } - public String getToRow() + public String getSubType() { - return toRow; + return subType; } public void setFlag(Long flag) { @@ -127,11 +124,11 @@ public class LarkTableRowRelation extends BaseEntity public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("id", getId()) - .append("larkCompanyRelationId", getLarkCompanyRelationId()) - .append("fromTableId", getFromTableId()) - .append("fromRow", getFromRow()) - .append("toTableId", getToTableId()) - .append("toRow", getToRow()) + .append("tableRelationId", getTableRelationId()) + .append("fromId", getFromId()) + .append("toId", getToId()) + .append("type", getType()) + .append("subType", getSubType()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventMapper.java index 4cd1e18..3498149 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventMapper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventMapper.java @@ -62,8 +62,7 @@ public interface EventMapper */ public int deleteEventByIds(Long[] ids); - /** - * 查询需要推送的列表信息 - */ - public List queryListOperate(@Param("statusList") List statusList); + + public int updateStatus(@Param("id") Long id,@Param("status") String status); + } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java index b3dbdc3..bbb2ebd 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.flyingbook.mapper; import com.ruoyi.flyingbook.domain.LarkTableRowRelation; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -60,4 +61,6 @@ public interface LarkTableRowRelationMapper * @return 结果 */ public int deleteLarkTableRowRelationByIds(Long[] ids); + + public List queryListByTableRelationIdList(@Param("tableRelationIdList") List tableRelationIdList); } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/IEventService.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/IEventService.java index 57afc98..ea97d2d 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/IEventService.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/IEventService.java @@ -60,4 +60,6 @@ public interface IEventService * @return 结果 */ public int deleteEventById(Long id); + + public int updateStatus(Long id,String status); } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRelationService.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRelationService.java index abcf626..23e28b6 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRelationService.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRelationService.java @@ -61,4 +61,5 @@ public interface ILarkTableRelationService */ public int deleteLarkTableRelationById(Long id); + } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRowRelationService.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRowRelationService.java index 7f8bdae..c091c57 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRowRelationService.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRowRelationService.java @@ -60,4 +60,6 @@ public interface ILarkTableRowRelationService * @return 结果 */ public int deleteLarkTableRowRelationById(Long id); + + public List queryListByTableRelationIdList(List tableRelationIdList); } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/EventServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/EventServiceImpl.java index 98bd8b1..256a6a8 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/EventServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/EventServiceImpl.java @@ -95,4 +95,9 @@ public class EventServiceImpl implements IEventService { return eventMapper.deleteEventById(id); } + + @Override + public int updateStatus(Long id, String status) { + return 0; + } } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRowRelationServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRowRelationServiceImpl.java index 224d5a3..e512141 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRowRelationServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRowRelationServiceImpl.java @@ -4,9 +4,11 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.flyingbook.domain.LarkTableRowRelation; import com.ruoyi.flyingbook.mapper.LarkTableRowRelationMapper; import com.ruoyi.flyingbook.service.ILarkTableRowRelationService; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -94,4 +96,12 @@ public class LarkTableRowRelationServiceImpl implements ILarkTableRowRelationSer { return larkTableRowRelationMapper.deleteLarkTableRowRelationById(id); } + + @Override + public List queryListByTableRelationIdList(List tableRelationIdList) { + if (CollectionUtils.isEmpty(tableRelationIdList)){ + return new ArrayList<>(); + } + return larkTableRowRelationMapper.queryListByTableRelationIdList(tableRelationIdList); + } } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/LarkOperateAbstract.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/LarkOperateAbstract.java index 309af69..9bd706c 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/LarkOperateAbstract.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/LarkOperateAbstract.java @@ -1,5 +1,7 @@ package com.ruoyi.flyingbook.strategy; +import com.ruoyi.common.enums.EventOperateType; +import com.ruoyi.flyingbook.domain.EventLog; import com.ruoyi.flyingbook.domain.LarkRequest; import lombok.extern.slf4j.Slf4j; @@ -21,10 +23,20 @@ public abstract class LarkOperateAbstract{ preOperate(request); //真正的业务处理逻辑 businessProcessing(request); - //业务处理完成后的系列操作,例如日志 - endHandle(request); + }catch (Exception e){ log.error("{} execute error: {}",getName(),e); + String message = e.getMessage(); + if (message.contains("##")){ + String[] split = message.split("##"); + request.setErrorCode(split[0]); + request.setErrorMessage(split[1]); + }else { + request.setErrorMessage(message); + } + }finally { + //业务处理完成后的系列操作,例如日志 + endHandle(request); } //构建返回对象并返回 return buildResult(request); @@ -52,9 +64,7 @@ public abstract class LarkOperateAbstract{ /** * 业务处理完成后的附加操作 */ - protected void endHandle(LarkRequest request){ - - } + protected void endHandle(LarkRequest request){}; /** * 具体的返回内容 diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/ApprovalCallback.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/ApprovalCallback.java index 6fa2327..1fbb567 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/ApprovalCallback.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/callback/ApprovalCallback.java @@ -53,7 +53,7 @@ public class ApprovalCallback extends CallbackAbstract { if (event == null) { return; } - request.setAppToken(event.getString("file_token")); + request.setFromAppToken(event.getString("file_token")); request.setFromTableId(event.getString("table_id")); JSONArray actionList = event.getJSONArray("action_list"); if (CollectionUtils.isEmpty(actionList)) { @@ -66,17 +66,24 @@ public class ApprovalCallback extends CallbackAbstract { @Override protected void businessProcessing(LarkRequest request) { - String cacheKey = String.format("%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getFromTableId(), request.getFromRecordId()); - Long eventId = (Long)redisTemplate.opsForValue().get(cacheKey); - if (eventId == null){ - eventId = queryEvent(request.getFromTableId(), request.getFromRecordId()); + String cacheKey = String.format("%s_%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getFromAppToken(),request.getFromTableId(), request.getFromRecordId()); + String eventStr = (String)redisTemplate.opsForValue().get(cacheKey); + Event event = null; + if (StringUtils.isBlank(eventStr)){ + event = queryEvent(request.getFromAppToken(),request.getFromTableId(), request.getFromRecordId()); + }else { + event = JSONObject.parseObject(eventStr,Event.class); + } + //如果已经存在处理中的就不需要操作数据库了 + if (event != null && EventOperateStatus.PENDING.getCode().equals(event.getOperateStatus())){ + return; } - Event event = this.buildDto(request,eventId); - if (eventId == null){ + this.buildDto(request,event); + if (event.getId() == null){ eventService.insertEvent(event); - redisTemplate.opsForValue().set(cacheKey,event.getId()); + redisTemplate.opsForValue().set(cacheKey,JSONObject.toJSONString(event)); }else { - eventService.updateEvent(event); + eventService.updateStatus(event.getId(),EventOperateStatus.PENDING.getCode()); } request.setEventId(event.getId()); } @@ -86,7 +93,12 @@ public class ApprovalCallback extends CallbackAbstract { if (request.getEventId() == null){ return; } - EventLog eventLog = new EventLog(request.getEventId(),EventOperateType.CALL_BACK.getCode()); + if (StringUtils.isNotBlank(request.getErrorMessage())){ + + } + EventLog eventLog = StringUtils.isBlank(request.getErrorMessage()) ? + new EventLog(request.getEventId(),EventOperateType.CALL_BACK.getCode(),request.getMessage()) + : new EventLog(request.getEventId(),EventOperateType.CALL_BACK.getCode(),request.getMessage(),request.getErrorCode(),request.getErrorMessage()); eventLogService.insertEventLog(eventLog); } @@ -101,28 +113,27 @@ public class ApprovalCallback extends CallbackAbstract { return this.getClass().getSimpleName(); } - private Long queryEvent(String tableId,String recordId){ + private Event queryEvent(String appToken,String tableId,String recordId){ Event event = new Event(); + event.setAppToken(appToken); event.setTableId(tableId); event.setRecordId(recordId); List events = eventService.selectEventList(event); if (CollectionUtils.isNotEmpty(events)){ - return events.get(0).getId(); + return events.get(0); } return null; } - private Event buildDto(LarkRequest request,Long eventId){ - Event event = new Event(); - event.setId(eventId); + private Event buildDto(LarkRequest request,Event event){ + event = event == null ? new Event() :event; event.setFlag(FlagStatus.OK.getCode()); - event.setAppToken(request.getAppToken()); - event.setMessage(request.getMessage()); + event.setAppToken(request.getFromAppToken()); event.setTableId(request.getFromTableId()); event.setRecordId(request.getFromRecordId()); event.setNumbers(0L); - event.setOperateStatus(EventOperateStatus.SUCCESS.getCode()); + event.setOperateStatus(EventOperateStatus.PENDING.getCode()); event.setCreateBy("System"); event.setCreateTime(new Date()); event.setUpdateTime(new Date()); diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableOperate.java index 800f64c..c397075 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableOperate.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableOperate.java @@ -1,18 +1,16 @@ package com.ruoyi.flyingbook.strategy.operate; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.CompanyNameConstants; import com.ruoyi.common.constant.RedisConstants; import com.ruoyi.common.enums.AppType; +import com.ruoyi.common.enums.EventOperateStatus; import com.ruoyi.common.enums.FlagStatus; +import com.ruoyi.common.enums.TableDetailRelationTypeEnum; import com.ruoyi.flyingbook.LarkHelper.LarkTokenHelper; -import com.ruoyi.flyingbook.LarkHelper.MultidimensionalTableParamHelper; import com.ruoyi.flyingbook.domain.*; -import com.ruoyi.flyingbook.service.IEventService; -import com.ruoyi.flyingbook.service.ILarkCompanyRelationService; -import com.ruoyi.flyingbook.service.ILarkTableRelationService; -import com.ruoyi.flyingbook.service.ILarkTableRowRelationService; +import com.ruoyi.flyingbook.service.*; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** @@ -32,6 +29,7 @@ import java.util.stream.Collectors; * @author yuxiangyong * @create 2023-03-13 20:47 */ +@Slf4j @Component("MultidimensionalTableOperate") public class MultidimensionalTableOperate extends LarkAbstract { @@ -47,6 +45,10 @@ public class MultidimensionalTableOperate extends LarkAbstract { protected ILarkTableRelationService iLarkTableRelationService; @Autowired protected ILarkTableRowRelationService iLarkTableRowRelationService; + @Autowired + private IEventService eventService; + @Autowired + private IEventLogService eventLogService; /** * 获取明细行 */ @@ -62,80 +64,104 @@ public class MultidimensionalTableOperate extends LarkAbstract { private static final String DELETE_OPERATE = "DELETE_OPERATE"; private String deleteLine = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id"; - @Override - protected void preOperate(LarkRequest request) { - Event event = request.getEvent(); - if (event == null) { - return; - } - LarkCompanyRelation relation = larkCompanyRelationService.getByCompanyName(CompanyNameConstants.COMPANY_NAME, AppType.APPROVAL.getCode()); - if (relation == null) { - return; - } - request.setCompanyRelationId(relation.getId()); + + private void fillTableRelation(LarkRequest request) { LarkTableRelation tableRelation = new LarkTableRelation(); - tableRelation.setLarkCompanyRelationId(relation.getId()); + tableRelation.setLarkCompanyRelationId(request.getCompanyRelationId()); tableRelation.setFromTableId(request.getEvent().getTableId()); tableRelation.setFlag(FlagStatus.OK.getCode()); List larkTableRelations = iLarkTableRelationService.selectLarkTableRelationList(tableRelation); if (CollectionUtils.isEmpty(larkTableRelations)) { - return; + String errorMessage = String.format("tableId:{}表关系未配置", request.getEvent().getTableId()); + log.error("iLarkTableRelationService.selectLarkTableRelationList:{}", errorMessage); + throw new RuntimeException(errorMessage); } //主表与副表的列对应关系 - Map> map = larkTableRelations.stream().collect(Collectors.groupingBy(LarkTableRelation::getToTableId)); - request.setTableRelationMap(map); + List tableRelationIdList = new ArrayList<>(); + Map tableRelationMap = new HashMap<>(); + for (LarkTableRelation larkTableRelation : larkTableRelations) { + String to = String.format("%s_%s", larkTableRelation.getToAppToken(), larkTableRelation.getToTableId()); + tableRelationMap.put(to, larkTableRelation.getId()); + tableRelationIdList.add(larkTableRelation.getId()); + } + request.setTableRelationMap(tableRelationMap); //主表与副表的行对应关系 - LarkTableRowRelation larkTableRowRelation = new LarkTableRowRelation(); - larkTableRowRelation.setLarkCompanyRelationId(relation.getId()); - larkTableRowRelation.setFromTableId(request.getEvent().getTableId()); - larkTableRowRelation.setFlag(FlagStatus.OK.getCode()); - List larkTableRowRelations = iLarkTableRowRelationService.selectLarkTableRowRelationList(larkTableRowRelation); - Map> rowMap = larkTableRowRelations.stream().collect(Collectors.groupingBy(LarkTableRowRelation::getToTableId)); - request.setTableRowRelationMap(rowMap); - String token = larkTokenHelper.getToken(relation.getAppId(), relation.getSecret()); - if (StringUtils.isBlank(token)) { - return; + List larkTableRowRelations = iLarkTableRowRelationService.queryListByTableRelationIdList(tableRelationIdList); + Map> tableRowRelationMap = new HashMap<>(); + Map> tableColRelationMap = new HashMap<>(); + for (LarkTableRowRelation larkTableRowRelation : larkTableRowRelations) { + Map map = new HashMap<>(); + map.put(larkTableRowRelation.getFromId(), larkTableRowRelation.getToId()); + if (TableDetailRelationTypeEnum.ROW.getCode().equals(larkTableRowRelation.getType())) { + tableRowRelationMap.put(larkTableRowRelation.getTableRelationId(), map); + } else if (TableDetailRelationTypeEnum.COL.getCode().equals(larkTableRowRelation.getType())) { + tableColRelationMap.put(larkTableRowRelation.getTableRelationId(), map); + } } - request.setToken(token); - if (StringUtils.isNotBlank(event.getMessage())) { - return; + if (tableColRelationMap.isEmpty()) { + String errorMessage = String.format("tableId:{} 列关系未配置", request.getEvent().getTableId()); + log.error("iLarkTableRowRelationService.queryListByTableRelationIdList:{}", errorMessage); + throw new RuntimeException(errorMessage); } - event.setMessage(request.getCallBackMessage()); + request.setTableRowRelationMap(tableRowRelationMap); + request.setTableColRelationMap(tableColRelationMap); } @Override - protected void businessProcessing(LarkRequest request) { - if (StringUtils.isBlank(request.getToken()) || request.getEvent() == null || StringUtils.isBlank(request.getEvent().getMessage())) { - return; + protected void preOperate(LarkRequest request) { + Event event = request.getEvent(); + if (event == null) { + throw new RuntimeException("当前事件为空"); + } + LarkCompanyRelation relation = larkCompanyRelationService.getByCompanyName(CompanyNameConstants.COMPANY_NAME, AppType.APPROVAL.getCode()); + if (relation == null) { + String errorMessage = String.format("获取app值为空 companyName:{} appType:{}", CompanyNameConstants.COMPANY_NAME, AppType.APPROVAL.getCode()); + log.error("larkCompanyRelationService.getByCompanyName:{}", errorMessage); + throw new RuntimeException(errorMessage); } - for (Map.Entry> entry : request.getTableRelationMap().entrySet()) { + //用于后续追加row时候做关联关系 + request.setCompanyRelationId(relation.getId()); + //关联关系表填充 + this.fillTableRelation(request); + String token = larkTokenHelper.getToken(relation.getAppId(), relation.getSecret(),"tenant_access_token"); + request.setToken(token); + } + + @Override + protected void businessProcessing(LarkRequest request) { + request.setOperateType(DETAIL); + JSONObject message = larkTokenHelper.getLark(getUrl(request), null, request.getToken()); + request.setRecord(message); + for (Map.Entry entry : request.getTableRelationMap().entrySet()) { request.setToTableId(entry.getKey()); + request.setTableRelationId(entry.getValue()); Map body = getBody(request); - String url = getUrl(request); - send(request.getOperateType(),url, body,request); + if (StringUtils.isBlank(url)) { + return; + } + send(request.getOperateType(), url, body, request); } } @Override protected String getUrl(LarkRequest request) { Event event = request.getEvent(); - Map rowRelation = request.getTableRowRelationMap().getOrDefault(request.getToTableId(),new ArrayList<>()).stream().collect(Collectors.toMap(LarkTableRowRelation::getFromRow, LarkTableRowRelation::getToRow, (k1, k2) -> k1)); - + Map rowRelation = request.getTableRowRelationMap().get(request.getTableRelationId()); + String cacheKey = String.format("%s_%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, event.getAppToken(), event.getTableId(), event.getRecordId()); + redisTemplate.delete(cacheKey); if (UPDATE_OPERATE.equals(request.getOperateType())) { - if (rowRelation.containsKey(request.getFromRecordId())) { - return updateLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getToTableId()).replace(":record_id", rowRelation.get(request.getFromRecordId())); + if (rowRelation.containsKey(event.getRecordId())) { + return updateLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getToTableId()).replace(":record_id", rowRelation.get(event.getRecordId())); } } else if (CREATE_OPERATE.equals(request.getOperateType())) { return addLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getToTableId()); } else if (DELETE_OPERATE.equals(request.getOperateType())) { - if (rowRelation.containsKey(request.getFromRecordId())) { - String cacheKey = String.format("%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getFromTableId(), request.getFromRecordId()); - redisTemplate.delete(cacheKey); - return deleteLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getToTableId()).replace(":record_id", rowRelation.get(request.getFromRecordId())); + if (rowRelation.containsKey(event.getRecordId())) { + return deleteLine.replace(":app_token", event.getAppToken()).replace(":table_id", event.getTableId()).replace(":record_id", rowRelation.get(event.getRecordId())); } } else if (DETAIL.equals(request.getOperateType())) { - return getDetail.replace(":app_token", event.getAppToken()).replace(":table_id", request.getFromTableId()).replace(":record_id", request.getFromRecordId()); + return getDetail.replace(":app_token", event.getAppToken()).replace(":table_id", event.getTableId()).replace(":record_id", event.getRecordId()); } return null; } @@ -143,79 +169,68 @@ public class MultidimensionalTableOperate extends LarkAbstract { @Override protected Map getBody(LarkRequest request) { Map result = new HashMap<>(); - if (StringUtils.isBlank(request.getMessage())) { - return result; - } - String message = request.getMessage(); - JSONObject jsonObject = JSONObject.parseObject(message); - JSONObject event = jsonObject.getJSONObject("event"); - if (event == null) { - return result; - } - request.setFromTableId(event.getString("table_id")); - JSONArray actionList = event.getJSONArray("action_list"); - if (CollectionUtils.isEmpty(actionList)) { - return result; - } - JSONObject action = actionList.getJSONObject(0); - request.setFromRecordId(action.getString("record_id")); - if (action.containsKey("before_value") && action.containsKey("after_value")) { - request.setOperateType(UPDATE_OPERATE); - result = parseMap(request); - } else if (action.containsKey("after_value")) { - request.setOperateType(CREATE_OPERATE); - result = parseMap(request); - } else { + JSONObject record = request.getRecord(); + String responseCode = record.getString("code"); + Map rowMap = request.getTableRowRelationMap().get(request.getTableRelationId()); + if ("1254043".equals(responseCode)) { request.setOperateType(DELETE_OPERATE); + } else if ("0".equals(responseCode)) { + result = parseMap(request); + if (rowMap.containsKey(request.getEvent().getRecordId())) { + request.setOperateType(UPDATE_OPERATE); + } else { + request.setOperateType(CREATE_OPERATE); + } } - return result; } private Map parseMap(LarkRequest request) { Map result = new HashMap<>(); - request.setOperateType(DETAIL); - String message = larkTokenHelper.getLark(getUrl(request), null, request.getToken()); - if (StringUtils.isBlank(message)) { - return result; - } - Map colRelation = request.getTableRelationMap().getOrDefault(request.getToTableId(),new ArrayList<>()).stream().collect(Collectors.toMap(LarkTableRelation::getFromColName, LarkTableRelation::getToColName, (k1, k2) -> k1)); - JSONObject jsonObject = JSONObject.parseObject(message); - String fields = jsonObject.getJSONObject("data").getJSONObject("record").getString("fields"); - Map midMap = JSONObject.parseObject(fields, Map.class); + JSONObject record = request.getRecord(); + Map colRelation = request.getTableColRelationMap().get(request.getToTableId()); + String fields = record.getJSONObject("data").getJSONObject("record").getString("fields"); + Map midMap = JSONObject.parseObject(fields, Map.class); for (Map.Entry entry : midMap.entrySet()) { String key = String.valueOf(entry); - if (!colRelation.containsKey(key)){ + if (!colRelation.containsKey(key)) { continue; } - result.put(key,String.valueOf(entry.getValue())); + result.put(colRelation.get(key), entry.getValue()); } + Map> map = new HashMap<>(); + map.put("fields",result); return result; } - protected JSONObject send(String type,String url, Map body,LarkRequest request) { + protected void send(String type, String url, Map body, LarkRequest request) { String token = request.getToken(); - if (CREATE_OPERATE.equals(type)){ - String result = larkTokenHelper.postLark(url, body, token); - if (StringUtils.isNotBlank(result)){ - JSONObject jsonObject = JSONObject.parseObject(result); - JSONObject data = jsonObject.getJSONObject("data"); - if (data != null){ - JSONObject record = data.getJSONObject("record"); - if (record != null && StringUtils.isNotBlank(record.getString("record_id"))){ - String recordId = record.getString("record_id"); - LarkTableRowRelation rowRelation = new LarkTableRowRelation(request.getCompanyRelationId(),request.getFromTableId(),request.getFromRecordId(),request.getToTableId(),recordId); - - iLarkTableRowRelationService.insertLarkTableRowRelation(rowRelation); - } + if (CREATE_OPERATE.equals(type)) { + JSONObject result = larkTokenHelper.postLark(url, body, token); + JSONObject data = result.getJSONObject("data"); + if (data != null) { + JSONObject record = data.getJSONObject("record"); + if (record != null && StringUtils.isNotBlank(record.getString("record_id"))) { + String recordId = record.getString("record_id"); + LarkTableRowRelation rowRelation = new LarkTableRowRelation(request.getCompanyRelationId(), request.getEvent().getRecordId(), recordId, TableDetailRelationTypeEnum.ROW.getCode(), TableDetailRelationTypeEnum.ROW.getCode()); + iLarkTableRowRelationService.insertLarkTableRowRelation(rowRelation); } } - }else if (UPDATE_OPERATE.equals(type)){ + } else if (UPDATE_OPERATE.equals(type)) { larkTokenHelper.putLark(url, body, token); - }else if (DELETE_OPERATE.equals(type)){ + } else if (DELETE_OPERATE.equals(type)) { larkTokenHelper.deleteLark(url, body, token); } - return null; + } + + @Override + protected void endHandle(LarkRequest request) { + Event event = request.getEvent(); + eventService.updateStatus(event.getId(), EventOperateStatus.SUCCESS.getCode()); + EventLog eventLog = StringUtils.isBlank(request.getErrorMessage()) ? + new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage()) + : new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage(), request.getErrorCode(), request.getErrorMessage()); + eventLogService.insertEventLog(eventLog); } @Override diff --git a/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml index 21eea7c..ec36349 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml @@ -2,12 +2,13 @@ - + + @@ -18,7 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, event_id, operate_type, error_code, error_message, remark, create_by, create_time, update_by, update_time from event_log + select id, event_id, operate_type, operate_info, error_code, error_message, remark, create_by, create_time, update_by, update_time from event_log @@ -30,7 +29,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and app_token = #{appToken} and table_id = #{tableId} and record_id = #{recordId} - and message = #{message} and numbers = #{numbers} and operate_status = #{operateStatus} and flag = #{flag} @@ -48,7 +46,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" app_token, table_id, record_id, - message, numbers, operate_status, create_by, @@ -62,7 +59,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{appToken}, #{tableId}, #{recordId}, - #{message}, #{numbers}, #{operateStatus}, #{createBy}, @@ -80,7 +76,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" app_token = #{appToken}, table_id = #{tableId}, record_id = #{recordId}, - message = #{message}, numbers = #{numbers}, operate_status = #{operateStatus}, create_by = #{createBy}, @@ -103,4 +98,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + + update event set operate_status = #{status} where id = #{id} + \ No newline at end of file diff --git a/ruoyi-flyingbook/src/main/resources/mapper/LarkCompanyRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/LarkCompanyRelationMapper.xml index 07557ea..cf35671 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/LarkCompanyRelationMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkCompanyRelationMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml index c5d1353..2833f24 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml @@ -2,16 +2,15 @@ - + + - + - - @@ -21,18 +20,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, lark_company_relation_id, from_table_id, from_col_name, to_table_id, to_col_name, col_type, create_by, create_time, update_by, update_time, flag, remark from lark_table_relation + select id, lark_company_relation_id, from_app_token, from_table_id, to_app_token, to_table_id, create_by, create_time, update_by, update_time, flag, remark from lark_table_relation @@ -46,11 +44,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into lark_table_relation lark_company_relation_id, + from_app_token, from_table_id, - from_col_name, + to_app_token, to_table_id, - to_col_name, - col_type, create_by, create_time, update_by, @@ -60,11 +57,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{larkCompanyRelationId}, + #{fromAppToken}, #{fromTableId}, - #{fromColName}, + #{toAppToken}, #{toTableId}, - #{toColName}, - #{colType}, #{createBy}, #{createTime}, #{updateBy}, @@ -78,11 +74,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update lark_table_relation lark_company_relation_id = #{larkCompanyRelationId}, + from_app_token = #{fromAppToken}, from_table_id = #{fromTableId}, - from_col_name = #{fromColName}, + to_app_token = #{toAppToken}, to_table_id = #{toTableId}, - to_col_name = #{toColName}, - col_type = #{colType}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, diff --git a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml index b888b23..e14809c 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml @@ -1,83 +1,97 @@ - - + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + - - - - - - - - - - - - + + + + + + + + + + + + - select id, lark_company_relation_id, from_table_id, from_row, to_table_id, to_row, create_by, create_time, update_by, update_time, flag, remark from lark_table_row_relation + select id, + table_relation_id, + from_id, + to_id, + type, + sub_type, + create_by, + create_time, + update_by, + update_time, + flag, + remark + from lark_table_row_relation - - - and lark_company_relation_id = #{larkCompanyRelationId} - and from_table_id = #{fromTableId} - and from_row = #{fromRow} - and to_table_id = #{toTableId} - and to_row = #{toRow} - and flag = #{flag} + + and table_relation_id = #{tableRelationId} + and from_id = #{fromId} + and to_id = #{toId} + and type = #{type} + and sub_type = #{subType} + and flag = #{flag} - + - - + + insert into lark_table_row_relation - lark_company_relation_id, - from_table_id, - from_row, - to_table_id, - to_row, + table_relation_id, + from_id, + to_id, + type, + sub_type, create_by, create_time, update_by, update_time, flag, remark, - + - #{larkCompanyRelationId}, - #{fromTableId}, - #{fromRow}, - #{toTableId}, - #{toRow}, + #{tableRelationId}, + #{fromId}, + #{toId}, + #{type}, + #{subType}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{flag}, #{remark}, - + update lark_table_row_relation - lark_company_relation_id = #{larkCompanyRelationId}, - from_table_id = #{fromTableId}, - from_row = #{fromRow}, - to_table_id = #{toTableId}, - to_row = #{toRow}, + table_relation_id = #{tableRelationId}, + from_id = #{fromId}, + to_id = #{toId}, + type = #{type}, + sub_type = #{subType}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, @@ -89,13 +103,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from lark_table_row_relation where id = #{id} + delete + from lark_table_row_relation + where id = #{id} - delete from lark_table_row_relation where id in + delete from lark_table_row_relation where id in #{id} + + \ No newline at end of file diff --git a/sql/lark.sql b/sql/lark.sql index e081921..59a2582 100644 --- a/sql/lark.sql +++ b/sql/lark.sql @@ -5,14 +5,13 @@ CREATE TABLE `event` `app_token` varchar(255) DEFAULT NULL COMMENT '文件id', `table_id` varchar(255) DEFAULT NULL COMMENT '表格id', `record_id` varchar(255) DEFAULT NULL COMMENT '行id', - `message` text COMMENT '回调信息', - `numbers` int DEFAULT 0 COMMENT '重推次数', - `operate_status` varchar(255) DEFAULT NULL COMMENT '状态标记(pending处理中、success成功、fail失败)', + `numbers` int DEFAULT '0' COMMENT '重推次数', + `operate_status` varchar(255) DEFAULT NULL COMMENT '状态标记(未处理,处理完成)', `create_by` varchar(255) NOT NULL, `create_time` datetime NOT NULL, `update_by` varchar(255) DEFAULT NULL, `update_time` datetime DEFAULT NULL, - `flag` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记(0未删除,1删除)', + `flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0未删除,1删除)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB; @@ -23,6 +22,7 @@ CREATE TABLE `event_log` `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', `event_id` bigint DEFAULT NULL, `operate_type` varchar(255) DEFAULT NULL COMMENT '操作类型', + `operate_info` text COMMENT '操作日志', `error_code` varchar(255) DEFAULT NULL COMMENT '错误编码', `error_message` varchar(255) DEFAULT NULL COMMENT '错误信息', `remark` varchar(255) DEFAULT NULL COMMENT '备注', @@ -46,7 +46,7 @@ CREATE TABLE `lark_company_relation` `create_time` datetime NOT NULL, `update_by` varchar(255) DEFAULT NULL, `update_time` datetime DEFAULT NULL, - `flag` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记(0未删除、1已删除)', + `flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0未删除、1已删除)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB; @@ -56,16 +56,34 @@ CREATE TABLE `lark_table_relation` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', `lark_company_relation_id` bigint DEFAULT NULL COMMENT '公司与飞书关联表id', + `from_app_token` varchar(255) DEFAULT NULL, `from_table_id` varchar(255) DEFAULT NULL COMMENT '来源表', - `from_col_name` varchar(255) DEFAULT NULL COMMENT '来源表的列名,要与toColName对应', + `to_app_token` varchar(255) DEFAULT NULL, `to_table_id` varchar(255) DEFAULT NULL COMMENT '对应更新表', - `to_col_name` varchar(255) DEFAULT NULL COMMENT 'url地址', - `col_type` int DEFAULT NULL COMMENT '列的类型', `create_by` varchar(255) NOT NULL, `create_time` datetime NOT NULL, `update_by` varchar(255) DEFAULT NULL, `update_time` datetime DEFAULT NULL, - `flag` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记(0未删除、1已删除)', + `flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0未删除、1已删除)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) -) ENGINE=InnoDB; \ No newline at end of file +) ENGINE=InnoDB; + + +DROP TABLE IF EXISTS `lark_table_row_relation`; +CREATE TABLE `lark_table_row_relation` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', + `table_relation_id` bigint DEFAULT NULL COMMENT '公司与飞书关联表id', + `from_id` varchar(255) DEFAULT NULL COMMENT '来源表', + `to_id` varchar(255) DEFAULT NULL COMMENT '对应更新表', + `type` varchar(20) DEFAULT NULL COMMENT '行,或者 列', + `sub_type` varchar(20) DEFAULT NULL COMMENT '列或行的明细属性', + `create_by` varchar(255) NOT NULL, + `create_time` datetime NOT NULL, + `update_by` varchar(255) DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0未删除、1已删除)', + `remark` varchar(255) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) +) ENGINE=InnoDB;