From fed3b370006037a1b86e85fe88e0268976c03aea Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 15 Mar 2023 00:40:22 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5(=E5=BE=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/constant/RedisConstants.java | 8 +- .../java/com/ruoyi/common/enums/AppType.java | 29 ++++ .../LarkHelper/LarkTokenHelper.java | 60 +++++++- .../MultidimensionalTableParamHelper.java | 77 +++++++++++ .../consumer/LarkApplicationRunner.java | 50 +++---- .../com/ruoyi/flyingbook/domain/Event.java | 98 +++++++++---- .../com/ruoyi/flyingbook/domain/EventLog.java | 86 +++--------- .../domain/LarkCompanyRelation.java | 16 ++- .../ruoyi/flyingbook/domain/LarkRequest.java | 11 +- .../flyingbook/domain/LarkTableRelation.java | 44 ++++-- .../mapper/LarkTableRelationMapper.java | 2 + .../service/ILarkCompanyRelationService.java | 2 +- .../service/ILarkTableRelationService.java | 1 + .../impl/LarkCompanyRelationServiceImpl.java | 6 +- .../impl/LarkTableRelationServiceImpl.java | 3 + .../strategy/callback/ApprovalCallback.java | 79 ++++++++--- .../strategy/operate/LarkAbstract.java | 4 +- .../operate/MultidimensionalTableOperate.java | 130 ++++++++++++++++-- .../main/resources/mapper/EventLogMapper.xml | 102 +++++--------- .../src/main/resources/mapper/EventMapper.xml | 110 +++++++-------- .../mapper/LarkCompanyRelationMapper.xml | 85 +++++------- .../mapper/LarkTableRelationMapper.xml | 93 ++++++------- .../system/domain/LarkCallbackRequest.java | 11 -- sql/lark.sql | 104 +++++++------- 24 files changed, 763 insertions(+), 448 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/MultidimensionalTableParamHelper.java delete mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/LarkCallbackRequest.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java index f5d3e58..993bfff 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java @@ -7,7 +7,7 @@ package com.ruoyi.common.constant; public class RedisConstants { public static void main(String[] args) { - System.out.println("Multidimensional tabular feedback".replaceAll(" ","").toUpperCase()); + System.out.println("multiple tabular feedback".replaceAll(" ","").toUpperCase()); } /** @@ -15,4 +15,10 @@ public class RedisConstants { */ public static final String MULTIDIMENSIONALTABULARFEEDBACK = "MULTIDIMENSIONALTABULARFEEDBACK"; + + /** + * 多维表格更新记录 + */ + public static final String MULTIPLE_TABLE_RECORD = "MULTIPLE_TABLE_RECORD"; + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java new file mode 100644 index 0000000..c20761e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AppType.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.enums; + +/** + * 用户状态 + * + * @author ruoyi + */ +public enum AppType { + /** + * + */ + APPROVAL("APPROVAL", "多维表格"); + + private final String code; + private final String info; + + AppType(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 f4205a5..c461be8 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 @@ -39,6 +39,8 @@ public class LarkTokenHelper { 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); @@ -62,6 +64,8 @@ public class LarkTokenHelper { 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); @@ -75,12 +79,59 @@ public class LarkTokenHelper { .method("POST", RequestBody .create(JSONObject.toJSONString(body), MediaType.get("application/json"))) .url(url) -// .addHeader("Authorization",String.format("Bearer %s",token)) + .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; + } + + public String putLark(String url,Map body, String token) { + Response execute = null; + 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; + } + + public String deleteLark(String url,Map body, String token) { + Response execute = null; + Request.Builder builder = new Request.Builder() + .url(url) + .addHeader("Authorization", String.format("Bearer %s", token)); + if (body == null || body.isEmpty()){ + builder.delete(); + }else { + 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); @@ -93,6 +144,11 @@ public class LarkTokenHelper { String token = helper.getToken( "cli_a482a8572cbc9013", "lZNXbCLlOslWbwBIVc4qvgxOdnfA8Mos"); System.out.println(token); JSONObject jsonObject = JSONObject.parseObject(token); - helper.getLark("https://open.feishu.cn/open-apis/approval/v4/instances/81D31358-93AF-92D6-7425-01A5D67C4E71",null,jsonObject.getString("tenant_access_token")); + Map map = new HashMap<>(); + JSONObject b = new JSONObject(); + map.put("fields",b); + b.put("多行文本","345"); + helper.putLark("https://open.feishu.cn/open-apis/bitable/v1/apps/Gyu1b8VAFaYiEysfEUjcCKomnVc/tables/tbloMVR0ACW2uO33/records/rece1nuKGU",map,jsonObject.getString("tenant_access_token")); + } } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/MultidimensionalTableParamHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/MultidimensionalTableParamHelper.java new file mode 100644 index 0000000..881b903 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/MultidimensionalTableParamHelper.java @@ -0,0 +1,77 @@ +package com.ruoyi.flyingbook.LarkHelper; + +/** + * @author yuxiangyong + * @create 2023-03-14 21:24 + */ +public class MultidimensionalTableParamHelper { + + public static Object analyseParam(String param,Integer type){ + Object result = null; + switch (type){ + case 1: + //多行文本 + break; + case 2: + //数字 + break; + case 3: + //单选 + break; + case 4: + //多选 + break; + case 5: + //日期 + break; + case 7: + //复选框 + break; + case 11: + //人员 + break; + case 13: + //电话号码 + break; + case 15: + //超链接 + break; + case 17: + //附件 + break; + case 18: + //单向关联 + break; + case 19: + //查找引用 + break; + case 20: + //公式 + break; + case 21: + //双向关联 + break; + case 22: + //地理位置 + break; + case 1001: + //创建时间 + break; + case 1002: + //最后更新时间 + break; + case 1003: + //创建人 + break; + case 1004: + //修改人 + break; + case 1005: + //自动编号 + break; + + } + return result; + } + +} 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 53be82d..5b06b53 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 @@ -70,31 +70,31 @@ public class LarkApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { //这里用线程池,后续如果出现量大的情况下可以调整 - threadPool.execute(() -> { - - while (true) { - List statusList = Arrays.asList(EventOperateStatus.PENDING.getCode(),EventOperateStatus.FAIL.getCode()); - List eventList = eventMapper.queryListOperate(statusList); - if (CollectionUtils.isEmpty(eventList)) { - try { - // 没有订单,休息一下 - Thread.sleep(WAIT_TIME); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } else { - try { - for (Event event : eventList) { - LarkRequest request = new LarkRequest(); - request.setEvent(event); - multidimensionalTableOperate.execute(request); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - }); +// threadPool.execute(() -> { +// +// while (true) { +// List statusList = Arrays.asList(EventOperateStatus.PENDING.getCode(),EventOperateStatus.FAIL.getCode()); +// List eventList = eventMapper.queryListOperate(statusList); +// if (CollectionUtils.isEmpty(eventList)) { +// try { +// // 没有订单,休息一下 +// Thread.sleep(WAIT_TIME); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } else { +// try { +// 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 64899e8..eb9db22 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 @@ -9,7 +9,7 @@ import com.ruoyi.common.core.domain.BaseEntity; * 【请填写功能名称】对象 event * * @author ruoyi - * @date 2023-03-12 + * @date 2023-03-14 */ public class Event extends BaseEntity { @@ -17,25 +17,36 @@ public class Event extends BaseEntity /** $column.columnComment */ private Long id; - private Integer numbers; - private String eventCode; + + /** id */ + @Excel(name = "id") + private String appToken; + + /** id */ + @Excel(name = "id") + private String tableId; + + /** id */ + @Excel(name = "id") + private String recordId; + /** $column.columnComment */ - @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + @Excel(name = "id") private String message; - /** pendingsuccessfaild */ - @Excel(name = "pendingsuccessfaild") - private String flag; + /** $column.columnComment */ + @Excel(name = "id") + private Long numbers; - public Integer getNumbers() { - return numbers; - } + /** (pendingsuccessfail) */ + @Excel(name = "(pendingsuccessfail)") + private String operateStatus; - public void setNumbers(Integer numbers) { - this.numbers = numbers; - } + /** (01) */ + @Excel(name = "(01)") + private Long flag; - public void setId(Long id) + public void setId(Long id) { this.id = id; } @@ -44,6 +55,33 @@ public class Event extends BaseEntity { return id; } + public void setAppToken(String appToken) + { + this.appToken = appToken; + } + + public String getAppToken() + { + return appToken; + } + public void setTableId(String tableId) + { + this.tableId = tableId; + } + + public String getTableId() + { + return tableId; + } + public void setRecordId(String recordId) + { + this.recordId = recordId; + } + + public String getRecordId() + { + return recordId; + } public void setMessage(String message) { this.message = message; @@ -53,30 +91,44 @@ public class Event extends BaseEntity { return message; } - public void setFlag(String flag) + public void setNumbers(Long numbers) { - this.flag = flag; + this.numbers = numbers; } - public String getFlag() + public Long getNumbers() { - return flag; + return numbers; + } + public void setOperateStatus(String operateStatus) + { + this.operateStatus = operateStatus; } - public String getEventCode() { - return eventCode; + public String getOperateStatus() + { + return operateStatus; + } + public void setFlag(Long flag) + { + this.flag = flag; } - public void setEventCode(String eventCode) { - this.eventCode = eventCode; + public Long getFlag() + { + return flag; } @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", getMessage()) + .append("numbers", getNumbers()) + .append("operateStatus", getOperateStatus()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) 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 a84d57b..d19cf2d 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 @@ -5,51 +5,47 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import java.util.Date; + /** * 【请填写功能名称】对象 event_log * * @author ruoyi - * @date 2023-03-12 + * @date 2023-03-14 */ public class EventLog extends BaseEntity { private static final long serialVersionUID = 1L; - /** $column.columnComment */ - private Long id; + public EventLog() { + } - /** id */ - @Excel(name = "id") - private String tableId; + public EventLog(Long eventId, String operateType) { + this.eventId = eventId; + this.operateType = operateType; + this.setCreateBy("SYSTEM"); + this.setCreateTime(new Date()); + } - /** id */ - @Excel(name = "id") - private String recordId; + /** $column.columnComment */ + private Long id; - /** id */ - @Excel(name = "id") + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private Long eventId; /** $column.columnComment */ - @Excel(name = "id") + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private String operateType; /** $column.columnComment */ - @Excel(name = "id") - private String operateStatus; - - /** $column.columnComment */ - @Excel(name = "id") + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private String errorCode; /** $column.columnComment */ - @Excel(name = "id") + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private String errorMessage; - /** 01 */ - @Excel(name = "01") - private Long flag; - public void setId(Long id) { this.id = id; @@ -59,30 +55,12 @@ public class EventLog extends BaseEntity { return id; } - public void setTableId(String tableId) - { - this.tableId = tableId; - } - - public String getTableId() - { - return tableId; - } - public void setRecordId(String recordId) - { - this.recordId = recordId; - } - - public String getRecordId() - { - return recordId; - } - public void setEventId(Long eventId) + public void setEventId(Long eventId) { this.eventId = eventId; } - public Long getEventId() + public Long getEventId() { return eventId; } @@ -95,15 +73,6 @@ public class EventLog extends BaseEntity { return operateType; } - public void setOperateStatus(String operateStatus) - { - this.operateStatus = operateStatus; - } - - public String getOperateStatus() - { - return operateStatus; - } public void setErrorCode(String errorCode) { this.errorCode = errorCode; @@ -122,33 +91,20 @@ public class EventLog extends BaseEntity { return errorMessage; } - public void setFlag(Long flag) - { - this.flag = flag; - } - - public Long getFlag() - { - return flag; - } @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("id", getId()) - .append("tableId", getTableId()) - .append("recordId", getRecordId()) .append("eventId", getEventId()) .append("operateType", getOperateType()) - .append("operateStatus", getOperateStatus()) .append("errorCode", getErrorCode()) .append("errorMessage", getErrorMessage()) + .append("remark", getRemark()) .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/LarkCompanyRelation.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkCompanyRelation.java index d9e03b6..b6a77ed 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-12 + * @date 2023-03-14 */ public class LarkCompanyRelation extends BaseEntity { @@ -34,6 +34,10 @@ public class LarkCompanyRelation extends BaseEntity @Excel(name = "+appId") private String secret; + /** app */ + @Excel(name = "app") + private String appType; + /** 01 */ @Excel(name = "01") private Long flag; @@ -83,6 +87,15 @@ public class LarkCompanyRelation extends BaseEntity { return secret; } + public void setAppType(String appType) + { + this.appType = appType; + } + + public String getAppType() + { + return appType; + } public void setFlag(Long flag) { this.flag = flag; @@ -101,6 +114,7 @@ public class LarkCompanyRelation extends BaseEntity .append("companyName", getCompanyName()) .append("appId", getAppId()) .append("secret", getSecret()) + .append("appType", getAppType()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) 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 23a29eb..ba7fb3e 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 @@ -2,6 +2,9 @@ package com.ruoyi.flyingbook.domain; import lombok.Data; +import java.util.List; +import java.util.Map; + /** * @author yuxiangyong * @create 2023-03-12 16:00 @@ -13,8 +16,7 @@ public class LarkRequest { * 通用信息,不可修改不可删除 */ private String token; - private String appId; - private String url; + private String appToken; private String errorMessage; /** @@ -26,5 +28,10 @@ public class LarkRequest { /** * MultidimensionalTableOperate 用参数 */ + private String tableId; + private String recordId; + private String operateType; + private String callBackMessage; private Event event; + private Map> tableRelationMap; } 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 5f1f7bc..6bb00eb 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-12 + * @date 2023-03-14 */ public class LarkTableRelation extends BaseEntity { @@ -26,13 +26,21 @@ public class LarkTableRelation extends BaseEntity @Excel(name = "id") private String fromTableId; + /** toColName */ + @Excel(name = "toColName") + private String fromColName; + /** $column.columnComment */ - @Excel(name = "id") + @Excel(name = "toColName") private String toTableId; /** url */ @Excel(name = "url") - private Long url; + private String toColName; + + /** $column.columnComment */ + @Excel(name = "url") + private Long colType; /** 01 */ @Excel(name = "01") @@ -65,6 +73,15 @@ public class LarkTableRelation extends BaseEntity { return fromTableId; } + public void setFromColName(String fromColName) + { + this.fromColName = fromColName; + } + + public String getFromColName() + { + return fromColName; + } public void setToTableId(String toTableId) { this.toTableId = toTableId; @@ -74,14 +91,23 @@ public class LarkTableRelation extends BaseEntity { return toTableId; } - public void setUrl(Long url) + public void setToColName(String toColName) + { + this.toColName = toColName; + } + + public String getToColName() + { + return toColName; + } + public void setColType(Long colType) { - this.url = url; + this.colType = colType; } - public Long getUrl() + public Long getColType() { - return url; + return colType; } public void setFlag(Long flag) { @@ -99,8 +125,10 @@ public class LarkTableRelation extends BaseEntity .append("id", getId()) .append("larkCompanyRelationId", getLarkCompanyRelationId()) .append("fromTableId", getFromTableId()) + .append("fromColName", getFromColName()) .append("toTableId", getToTableId()) - .append("url", getUrl()) + .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/mapper/LarkTableRelationMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java index 9efe617..227fb05 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRelationMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.flyingbook.mapper; import com.ruoyi.flyingbook.domain.LarkTableRelation; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -60,4 +61,5 @@ public interface LarkTableRelationMapper * @return 结果 */ public int deleteLarkTableRelationByIds(Long[] ids); + } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkCompanyRelationService.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkCompanyRelationService.java index a324994..c26a4ed 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkCompanyRelationService.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkCompanyRelationService.java @@ -61,5 +61,5 @@ public interface ILarkCompanyRelationService */ public int deleteLarkCompanyRelationById(Long id); - public LarkCompanyRelation getByCompanyName(String companyName); + public LarkCompanyRelation getByCompanyName(String companyName,String appType); } 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 22e6bdd..abcf626 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 @@ -60,4 +60,5 @@ public interface ILarkTableRelationService * @return 结果 */ public int deleteLarkTableRelationById(Long id); + } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java index ffac965..c8ad2f8 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java @@ -104,12 +104,14 @@ public class LarkCompanyRelationServiceImpl implements ILarkCompanyRelationServi * @return 【请填写功能名称】 */ @Override - public LarkCompanyRelation getByCompanyName(String companyName) + public LarkCompanyRelation getByCompanyName(String companyName,String appType) { - if (StringUtils.isEmpty(companyName)){ + if (StringUtils.isEmpty(companyName) || StringUtils.isEmpty(appType)){ return null; } LarkCompanyRelation relation = new LarkCompanyRelation(); + relation.setCompanyName(companyName); + relation.setAppType(appType); List larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(relation); return CollectionUtils.isEmpty(larkCompanyRelations) ? null : larkCompanyRelations.get(0); } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRelationServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRelationServiceImpl.java index 4e5b2cc..36ad050 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRelationServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRelationServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.flyingbook.service.impl; +import java.util.ArrayList; import java.util.List; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.flyingbook.domain.LarkTableRelation; import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper; import com.ruoyi.flyingbook.service.ILarkTableRelationService; @@ -94,4 +96,5 @@ public class LarkTableRelationServiceImpl implements ILarkTableRelationService { return larkTableRelationMapper.deleteLarkTableRelationById(id); } + } 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 d416731..9eec109 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 @@ -1,5 +1,7 @@ package com.ruoyi.flyingbook.strategy.callback; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.ruoyi.flyingbook.domain.Event; import com.ruoyi.flyingbook.domain.EventLog; import com.ruoyi.flyingbook.service.IEventLogService; @@ -9,12 +11,16 @@ import com.ruoyi.common.constant.RedisConstants; import com.ruoyi.common.enums.EventOperateStatus; import com.ruoyi.common.enums.EventOperateType; import com.ruoyi.common.enums.FlagStatus; +import com.sun.corba.se.impl.orbutil.RepIdDelegator; 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.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.List; /** * @author yuxiangyong @@ -33,22 +39,46 @@ public class ApprovalCallback extends CallbackAbstract { @Override protected Boolean check(LarkRequest request) { - String message = ""; return Boolean.TRUE; } @Override protected void preOperate(LarkRequest request) { - + if (StringUtils.isBlank(request.getMessage())) { + return; + } + String message = request.getMessage(); + JSONObject jsonObject = JSONObject.parseObject(message); + JSONObject event = jsonObject.getJSONObject("event"); + if (event == null) { + return; + } + request.setAppToken(event.getString("file_token")); + request.setTableId(event.getString("table_id")); + JSONArray actionList = event.getJSONArray("action_list"); + if (CollectionUtils.isEmpty(actionList)) { + return; + } + JSONObject action = actionList.getJSONObject(0); + String recordId = action.getString("record_id"); + request.setRecordId(recordId); } @Override protected void businessProcessing(LarkRequest request) { - String message = request.getMessage(); - Event event = this.buildDto(message); - int i = eventService.insertEvent(event); + String cacheKey = String.format("%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getTableId(), request.getRecordId()); + Long eventId = (Long)redisTemplate.opsForValue().get(cacheKey); + if (eventId == null){ + eventId = queryEvent(request.getTableId(), request.getRecordId()); + } + Event event = this.buildDto(request,eventId); + if (eventId == null){ + eventService.insertEvent(event); + redisTemplate.opsForValue().set(cacheKey,event.getId()); + }else { + eventService.updateEvent(event); + } request.setEventId(event.getId()); - } @Override @@ -56,17 +86,8 @@ public class ApprovalCallback extends CallbackAbstract { if (request.getEventId() == null){ return; } - redisTemplate.opsForList().rightPush(RedisConstants.MULTIDIMENSIONALTABULARFEEDBACK,request.getEventId()); - EventLog eventLog = new EventLog(); - eventLog.setCreateBy("Syetem"); - eventLog.setCreateTime(new Date()); - eventLog.setFlag(FlagStatus.OK.getCode()); - eventLog.setOperateStatus(EventOperateStatus.PENDING.getCode()); - eventLog.setOperateType(EventOperateType.CALL_BACK.getCode()); - eventLog.setEventId(request.getEventId()); + EventLog eventLog = new EventLog(request.getEventId(),EventOperateType.CALL_BACK.getCode()); eventLogService.insertEventLog(eventLog); - Object o = redisTemplate.opsForList().leftPop(RedisConstants.MULTIDIMENSIONALTABULARFEEDBACK); - System.out.println(String.valueOf(o)); } @Override @@ -80,14 +101,32 @@ public class ApprovalCallback extends CallbackAbstract { return this.getClass().getSimpleName(); } + private Long queryEvent(String tableId,String recordId){ + + Event event = new Event(); + event.setTableId(tableId); + event.setRecordId(recordId); + List events = eventService.selectEventList(event); + if (CollectionUtils.isNotEmpty(events)){ + return events.get(0).getId(); + } + return null; + } - private Event buildDto(String message){ + private Event buildDto(LarkRequest request,Long eventId){ Event event = new Event(); - event.setFlag(EventOperateStatus.PENDING.getCode()); - event.setMessage(message); - event.setEventCode("test"); + event.setId(eventId); + event.setFlag(FlagStatus.OK.getCode()); + event.setAppToken(request.getAppToken()); + event.setMessage(request.getMessage()); + event.setTableId(request.getTableId()); + event.setRecordId(request.getRecordId()); + event.setNumbers(0L); + event.setOperateStatus(EventOperateStatus.SUCCESS.getCode()); event.setCreateBy("System"); event.setCreateTime(new Date()); + event.setUpdateTime(new Date()); + event.setUpdateBy("System"); 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 f03a8b6..9089abf 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 @@ -21,12 +21,12 @@ public abstract class LarkAbstract extends LarkOperateAbstract { /** * 获取body体 */ - protected abstract Map getBody(String message); + protected abstract Map getBody(LarkRequest request); /** * 文本解析 */ - protected abstract JSONObject send(String url,Map body,String token); + protected abstract JSONObject send(String type,String url,Map body,String token); 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 24a49a8..5f536de 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,22 +1,35 @@ 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.flyingbook.LarkHelper.LarkTokenHelper; +import com.ruoyi.flyingbook.LarkHelper.MultidimensionalTableParamHelper; import com.ruoyi.flyingbook.domain.Event; import com.ruoyi.flyingbook.domain.LarkCompanyRelation; import com.ruoyi.flyingbook.domain.LarkRequest; +import com.ruoyi.flyingbook.domain.LarkTableRelation; import com.ruoyi.flyingbook.service.IEventService; import com.ruoyi.flyingbook.service.ILarkCompanyRelationService; +import com.ruoyi.flyingbook.service.ILarkTableRelationService; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 多维表格操作类 + * * @author yuxiangyong * @create 2023-03-13 20:47 */ @@ -29,8 +42,24 @@ public class MultidimensionalTableOperate extends LarkAbstract { protected ILarkCompanyRelationService larkCompanyRelationService; @Autowired protected IEventService iEventService; - - private String getDetailUrl = "https://open.feishu.cn/open-apis/approval/v4/instances/:instance_id"; + @Autowired + private RedisTemplate redisTemplate; + @Autowired + protected ILarkTableRelationService iLarkTableRelationService; + /** + * 获取明细行 + */ + private static final String DETAIL = "DETAIL"; + private String getDetail = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id"; + //新增明细行 + private static final String CREATE_OPERATE = "CREATE_OPERATE"; + private String addLine = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records"; + //修改明细行 + private static final String UPDATE_OPERATE = "UPDATE_OPERATE"; + private String updateLine = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_update"; + //删除明细行 + 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/batch_delete"; @Override protected void preOperate(LarkRequest request) { @@ -38,10 +67,19 @@ public class MultidimensionalTableOperate extends LarkAbstract { if (event == null) { return; } - LarkCompanyRelation relation = larkCompanyRelationService.getByCompanyName(CompanyNameConstants.COMPANY_NAME); + LarkCompanyRelation relation = larkCompanyRelationService.getByCompanyName(CompanyNameConstants.COMPANY_NAME, AppType.APPROVAL.getCode()); if (relation == null) { return; } + LarkTableRelation tableRelation = new LarkTableRelation(); + tableRelation.setLarkCompanyRelationId(relation.getId()); + List larkTableRelations = iLarkTableRelationService.selectLarkTableRelationList(tableRelation); + if (CollectionUtils.isEmpty(larkTableRelations)) { + return; + } + //主表与副表的对应关系 + Map> map = larkTableRelations.stream().collect(Collectors.groupingBy(LarkTableRelation::getToTableId)); + request.setTableRelationMap(map); String token = larkTokenHelper.getToken(relation.getAppId(), relation.getSecret()); if (StringUtils.isBlank(token)) { return; @@ -50,9 +88,7 @@ public class MultidimensionalTableOperate extends LarkAbstract { if (StringUtils.isNotBlank(event.getMessage())) { return; } - getDetailUrl.replace(":instance_id", "aaa"); - String message = larkTokenHelper.postLark(getDetailUrl, null, token); - event.setMessage(message); + event.setMessage(request.getCallBackMessage()); } @Override @@ -60,22 +96,94 @@ public class MultidimensionalTableOperate extends LarkAbstract { if (StringUtils.isBlank(request.getToken()) || request.getEvent() == null || StringUtils.isBlank(request.getEvent().getMessage())) { return; } - send(getUrl(request), getBody(request.getMessage()), request.getToken()); + for (Map.Entry> entry : request.getTableRelationMap().entrySet()) { + request.setTableId(entry.getKey()); + Map body = getBody(request); + + String url = getUrl(request); + send(request.getOperateType(),url, body, request.getToken()); + } } @Override protected String getUrl(LarkRequest request) { + Event event = request.getEvent(); + if (UPDATE_OPERATE.equals(request.getOperateType())) { + return updateLine.replace(":app_token", event.getAppToken()).replace(":table_id", event.getTableId()); + } else if (CREATE_OPERATE.equals(request.getOperateType())) { + return addLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getTableId()); + } else if (DELETE_OPERATE.equals(request.getOperateType())) { + String cacheKey = String.format("%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getTableId(), request.getRecordId()); + redisTemplate.delete(cacheKey); + return deleteLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getTableId()); + } else if (DETAIL.equals(request.getOperateType())) { + return getDetail.replace(":app_token", event.getAppToken()).replace(":table_id", request.getTableId()).replace(":record_id", request.getRecordId()); + } return null; } @Override - protected Map getBody(String message) { - return null; + 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.setTableId(event.getString("table_id")); + JSONArray actionList = event.getJSONArray("action_list"); + if (CollectionUtils.isEmpty(actionList)) { + return result; + } + JSONObject action = actionList.getJSONObject(0); + request.setRecordId(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 { + request.setOperateType(DELETE_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.getTableId(),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); + for (Map.Entry entry : midMap.entrySet()) { + String key = String.valueOf(entry); + if (!colRelation.containsKey(key)){ + continue; + } + result.put(key,String.valueOf(entry.getValue())); + } + return result; } @Override - protected JSONObject send(String url, Map body, String token) { - larkTokenHelper.postLark(url,body,token); + protected JSONObject send(String type,String url, Map body, String token) { + if (CREATE_OPERATE.equals(type)){ + larkTokenHelper.postLark(url, body, token); + }else if (UPDATE_OPERATE.equals(type)){ + larkTokenHelper.putLark(url, body, token); + }else if (DELETE_OPERATE.equals(type)){ + larkTokenHelper.deleteLark(url, body, token); + } return null; } diff --git a/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml index cbf0bcc..21eea7c 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml @@ -1,125 +1,89 @@ - - - - - - - - - - - - - - - - - +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + - select id, - table_id, - record_id, - event_id, - operate_type, - operate_status, - error_code, - error_message, - create_by, - create_time, - update_by, - update_time, - flag, - remark - from event_log + select id, event_id, operate_type, error_code, error_message, remark, create_by, create_time, update_by, update_time from event_log - - - and table_id = #{tableId} - and record_id = #{recordId} - and event_id = #{eventId} - and operate_type = #{operateType} - and operate_status = #{operateStatus} - and error_code = #{errorCode} - and error_message = #{errorMessage} - and flag = #{flag} + + and event_id = #{eventId} + and operate_type = #{operateType} + and error_code = #{errorCode} + and error_message = #{errorMessage} - + - - + + insert into event_log - table_id, - record_id, event_id, operate_type, - operate_status, error_code, error_message, + remark, create_by, create_time, update_by, update_time, - flag, - remark, - + - #{tableId}, - #{recordId}, #{eventId}, #{operateType}, - #{operateStatus}, #{errorCode}, #{errorMessage}, + #{remark}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, - #{flag}, - #{remark}, - + - + update event_log - table_id = #{tableId}, - record_id = #{recordId}, event_id = #{eventId}, operate_type = #{operateType}, - operate_status = #{operateStatus}, error_code = #{errorCode}, error_message = #{errorMessage}, + remark = #{remark}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, update_time = #{updateTime}, - flag = #{flag}, - remark = #{remark}, where id = #{id} - delete - from event_log - where id = #{id} + delete from event_log where id = #{id} - delete from event_log where id in + delete from event_log where id in #{id} diff --git a/ruoyi-flyingbook/src/main/resources/mapper/EventMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/EventMapper.xml index 0a792d3..229e635 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/EventMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/EventMapper.xml @@ -1,110 +1,106 @@ - - - - - - - - - - - - - +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + + + - select id, - event_code, - message, - numbers, - create_by, - create_time, - update_by, - update_time, - flag, - remark - from event + select id, app_token, table_id, record_id, message, numbers, operate_status, create_by, create_time, update_by, update_time, flag, remark from event - - - and message = #{message} - and flag = #{flag} + + 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} - + - - + + insert into event - event_code, + app_token, + table_id, + record_id, message, numbers, + operate_status, create_by, create_time, update_by, update_time, - flag, + flag, remark, - + - #{event_code}, + #{appToken}, + #{tableId}, + #{recordId}, #{message}, #{numbers}, + #{operateStatus}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, - #{flag}, + #{flag}, #{remark}, - + - + update event - message = #{event_code}, - message = #{message}, - message = #{numbers}, + app_token = #{appToken}, + table_id = #{tableId}, + record_id = #{recordId}, + message = #{message}, + numbers = #{numbers}, + operate_status = #{operateStatus}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, update_time = #{updateTime}, - flag = #{flag}, + flag = #{flag}, remark = #{remark}, where id = #{id} - delete - from event - where id = #{id} + delete from event where id = #{id} - delete from event where id in + delete from event where id in #{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 256c298..07557ea 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/LarkCompanyRelationMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkCompanyRelationMapper.xml @@ -1,92 +1,83 @@ - - - - - - - - - - - - - - +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + + - select id, - company_id, - company_name, - app_id, - secret, - create_by, - create_time, - update_by, - update_time, - flag, - remark - from lark_company_relation + select id, company_id, company_name, app_id, secret, app_type, create_by, create_time, update_by, update_time, flag, remark from lark_company_relation - - - and company_id = #{companyId} - and company_name like concat('%', #{companyName}, - '%') - - and app_id = #{appId} - and secret = #{secret} - and flag = #{flag} + + and company_id = #{companyId} + and company_name like concat('%', #{companyName}, '%') + and app_id = #{appId} + and secret = #{secret} + and app_type = #{appType} + and flag = #{flag} - + - - + + insert into lark_company_relation company_id, company_name, app_id, secret, + app_type, create_by, create_time, update_by, update_time, flag, remark, - + #{companyId}, #{companyName}, #{appId}, #{secret}, + #{appType}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{flag}, #{remark}, - + - + update lark_company_relation company_id = #{companyId}, company_name = #{companyName}, app_id = #{appId}, secret = #{secret}, + app_type = #{appType}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, @@ -98,13 +89,11 @@ - delete - from lark_company_relation - where id = #{id} + delete from lark_company_relation where id = #{id} - delete from lark_company_relation where id in + delete from lark_company_relation where id in #{id} diff --git a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml index 553eaf5..c5d1353 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRelationMapper.xml @@ -1,89 +1,88 @@ - - - - - - - - - - - - - - +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, - to_table_id, - url, - create_by, - create_time, - update_by, - update_time, - flag, - remark - from lark_table_relation + 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 - - - and lark_company_relation_id = #{larkCompanyRelationId} - and from_table_id = #{fromTableId} - and to_table_id = #{toTableId} - and url = #{url} - and flag = #{flag} + + and lark_company_relation_id = #{larkCompanyRelationId} + and from_table_id = #{fromTableId} + and from_col_name like concat('%', #{fromColName}, '%') + and to_table_id = #{toTableId} + and to_col_name like concat('%', #{toColName}, '%') + and col_type = #{colType} + and flag = #{flag} - + - - + + insert into lark_table_relation lark_company_relation_id, from_table_id, + from_col_name, to_table_id, - url, + to_col_name, + col_type, create_by, create_time, update_by, update_time, flag, remark, - + #{larkCompanyRelationId}, #{fromTableId}, + #{fromColName}, #{toTableId}, - #{url}, + #{toColName}, + #{colType}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{flag}, #{remark}, - + - + update lark_table_relation lark_company_relation_id = #{larkCompanyRelationId}, from_table_id = #{fromTableId}, + from_col_name = #{fromColName}, to_table_id = #{toTableId}, - url = #{url}, + to_col_name = #{toColName}, + col_type = #{colType}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, @@ -95,13 +94,11 @@ - delete - from lark_table_relation - where id = #{id} + delete from lark_table_relation where id = #{id} - delete from lark_table_relation where id in + delete from lark_table_relation where id in #{id} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/LarkCallbackRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/LarkCallbackRequest.java deleted file mode 100644 index 5a11647..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/LarkCallbackRequest.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.ruoyi.system.domain; - -import com.ruoyi.common.base.LarkRequest; - -/** - * @author yuxiangyong - * @create 2023-03-12 16:00 - */ -public class LarkCallbackRequest extends LarkRequest { - -} diff --git a/sql/lark.sql b/sql/lark.sql index 82f0906..e081921 100644 --- a/sql/lark.sql +++ b/sql/lark.sql @@ -1,4 +1,39 @@ --- 飞书-公司关联表 +DROP TABLE IF EXISTS `event`; +CREATE TABLE `event` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', + `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失败)', + `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; + +DROP TABLE IF EXISTS `event_log`; +CREATE TABLE `event_log` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', + `event_id` bigint DEFAULT NULL, + `operate_type` varchar(255) DEFAULT NULL COMMENT '操作类型', + `error_code` varchar(255) DEFAULT NULL COMMENT '错误编码', + `error_message` varchar(255) DEFAULT NULL COMMENT '错误信息', + `remark` 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, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +DROP TABLE IF EXISTS `lark_company_relation`; CREATE TABLE `lark_company_relation` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', @@ -6,66 +41,31 @@ CREATE TABLE `lark_company_relation` `company_name` varchar(255) DEFAULT NULL COMMENT '公司名称', `app_id` varchar(255) NOT NULL COMMENT '飞书的appId', `secret` varchar(255) NOT NULL COMMENT '公司+appId对应的唯一密钥', + `app_type` varchar(255) DEFAULT NULL COMMENT 'app应用类型', `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; --- AppId-table关联表 + +DROP TABLE IF EXISTS `lark_table_relation`; CREATE TABLE `lark_table_relation` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一主键', - `lark_company_relation_id` BIGINT DEFAULT NULL COMMENT '公司与飞书关联表id', - `from_table_id` VARCHAR(255) DEFAULT NULL COMMENT '来源表', - `to_table_id` VARCHAR(255) DEFAULT NULL COMMENT '对应更新表', - `url` BIGINT DEFAULT NULL COMMENT 'url地址', - `create_by` VARCHAR(255) NOT NULL, + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一主键', + `lark_company_relation_id` bigint DEFAULT NULL COMMENT '公司与飞书关联表id', + `from_table_id` varchar(255) DEFAULT NULL COMMENT '来源表', + `from_col_name` varchar(255) DEFAULT NULL COMMENT '来源表的列名,要与toColName对应', + `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_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; - --- 事务操作日志 -CREATE TABLE `event_log` -( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一主键', - `table_id` VARCHAR(255) DEFAULT NULL COMMENT '多维表格id', - `record_id` VARCHAR(255) DEFAULT NULL COMMENT '实际行id', - `event_id` BIGINT DEFAULT NULL COMMENT '实际事务id', - `operate_type` VARCHAR(255) DEFAULT NULL COMMENT '操作类型', - `operate_status` VARCHAR(255) DEFAULT NULL COMMENT '操作编码', - `error_code` VARCHAR(255) DEFAULT NULL COMMENT '错误编码', - `error_message` 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已删除)', - `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`) -) ENGINE = INNODB; - --- 事务详情 -CREATE TABLE `event` -( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '唯一主键', - `message` text 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` VARCHAR(20) NOT NULL COMMENT '状态标记(pending处理中、success成功、faild失败)', - `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注', + `flag` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记(0未删除、1已删除)', + `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) -) ENGINE = INNODB; - - - - - +) ENGINE=InnoDB; \ No newline at end of file From cdcdf90a1eb22eb6099549d7b4e4d9a3329cfc39 Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 15 Mar 2023 01:39:01 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5(=E5=BE=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/flyingbook/domain/LarkRequest.java | 9 +- .../domain/LarkTableRowRelation.java | 143 ++++++++++++++++++ .../mapper/LarkTableRowRelationMapper.java | 63 ++++++++ .../service/ILarkTableRowRelationService.java | 63 ++++++++ .../impl/LarkCompanyRelationServiceImpl.java | 2 + .../impl/LarkTableRowRelationServiceImpl.java | 97 ++++++++++++ .../strategy/callback/ApprovalCallback.java | 12 +- .../strategy/operate/LarkAbstract.java | 4 - .../operate/MultidimensionalTableOperate.java | 73 ++++++--- .../mapper/LarkTableRowRelationMapper.xml | 101 +++++++++++++ 10 files changed, 534 insertions(+), 33 deletions(-) create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRowRelation.java create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRowRelationService.java create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRowRelationServiceImpl.java create mode 100644 ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml 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 ba7fb3e..d0bd215 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 @@ -19,6 +19,7 @@ public class LarkRequest { private String appToken; private String errorMessage; + /** * ApprovalCallback 用参数 */ @@ -28,10 +29,14 @@ public class LarkRequest { /** * MultidimensionalTableOperate 用参数 */ - private String tableId; - private String recordId; + private Long companyRelationId; + private String fromTableId; + private String toTableId; + private String fromRecordId; + private String toRecordId; private String operateType; private String callBackMessage; private Event event; private Map> tableRelationMap; + private Map> tableRowRelationMap; } 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 new file mode 100644 index 0000000..bbe573a --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LarkTableRowRelation.java @@ -0,0 +1,143 @@ +package com.ruoyi.flyingbook.domain; + +import com.ruoyi.common.enums.FlagStatus; +import org.apache.commons.lang3.builder.ToStringBuilder; +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 + * + * @author ruoyi + * @date 2023-03-15 + */ +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; + this.flag = FlagStatus.OK.getCode(); + this.setCreateBy("System"); + this.setCreateTime(new Date()); + } + + /** $column.columnComment */ + private Long id; + + /** id */ + @Excel(name = "id") + private Long larkCompanyRelationId; + + /** $column.columnComment */ + @Excel(name = "id") + private String fromTableId; + + /** toColName */ + @Excel(name = "toColName") + private String fromRow; + + /** $column.columnComment */ + @Excel(name = "toColName") + private String toTableId; + + /** url */ + @Excel(name = "url") + private String toRow; + + /** 01 */ + @Excel(name = "01") + private Long flag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setLarkCompanyRelationId(Long larkCompanyRelationId) + { + this.larkCompanyRelationId = larkCompanyRelationId; + } + + public Long getLarkCompanyRelationId() + { + return larkCompanyRelationId; + } + public void setFromTableId(String fromTableId) + { + this.fromTableId = fromTableId; + } + + public String getFromTableId() + { + return fromTableId; + } + public void setFromRow(String fromRow) + { + this.fromRow = fromRow; + } + + public String getFromRow() + { + return fromRow; + } + public void setToTableId(String toTableId) + { + this.toTableId = toTableId; + } + + public String getToTableId() + { + return toTableId; + } + public void setToRow(String toRow) + { + this.toRow = toRow; + } + + public String getToRow() + { + return toRow; + } + public void setFlag(Long flag) + { + this.flag = flag; + } + + public Long getFlag() + { + return flag; + } + + @Override + 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("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/mapper/LarkTableRowRelationMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java new file mode 100644 index 0000000..b3dbdc3 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/LarkTableRowRelationMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.flyingbook.mapper; + + +import com.ruoyi.flyingbook.domain.LarkTableRowRelation; + +import java.util.List; + +/** + * 【请填写功能名称】Mapper接口 + * + * @author ruoyi + * @date 2023-03-15 + */ +public interface LarkTableRowRelationMapper +{ + /** + * 查询【请填写功能名称】 + * + * @param id 【请填写功能名称】ID + * @return 【请填写功能名称】 + */ + public LarkTableRowRelation selectLarkTableRowRelationById(Long id); + + /** + * 查询【请填写功能名称】列表 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectLarkTableRowRelationList(LarkTableRowRelation larkTableRowRelation); + + /** + * 新增【请填写功能名称】 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 结果 + */ + public int insertLarkTableRowRelation(LarkTableRowRelation larkTableRowRelation); + + /** + * 修改【请填写功能名称】 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 结果 + */ + public int updateLarkTableRowRelation(LarkTableRowRelation larkTableRowRelation); + + /** + * 删除【请填写功能名称】 + * + * @param id 【请填写功能名称】ID + * @return 结果 + */ + public int deleteLarkTableRowRelationById(Long id); + + /** + * 批量删除【请填写功能名称】 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLarkTableRowRelationByIds(Long[] ids); +} 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 new file mode 100644 index 0000000..7f8bdae --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/ILarkTableRowRelationService.java @@ -0,0 +1,63 @@ +package com.ruoyi.flyingbook.service; + + +import com.ruoyi.flyingbook.domain.LarkTableRowRelation; + +import java.util.List; + +/** + * 【请填写功能名称】Service接口 + * + * @author ruoyi + * @date 2023-03-15 + */ +public interface ILarkTableRowRelationService +{ + /** + * 查询【请填写功能名称】 + * + * @param id 【请填写功能名称】ID + * @return 【请填写功能名称】 + */ + public LarkTableRowRelation selectLarkTableRowRelationById(Long id); + + /** + * 查询【请填写功能名称】列表 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectLarkTableRowRelationList(LarkTableRowRelation larkTableRowRelation); + + /** + * 新增【请填写功能名称】 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 结果 + */ + public int insertLarkTableRowRelation(LarkTableRowRelation larkTableRowRelation); + + /** + * 修改【请填写功能名称】 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 结果 + */ + public int updateLarkTableRowRelation(LarkTableRowRelation larkTableRowRelation); + + /** + * 批量删除【请填写功能名称】 + * + * @param ids 需要删除的【请填写功能名称】ID + * @return 结果 + */ + public int deleteLarkTableRowRelationByIds(Long[] ids); + + /** + * 删除【请填写功能名称】信息 + * + * @param id 【请填写功能名称】ID + * @return 结果 + */ + public int deleteLarkTableRowRelationById(Long id); +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java index c8ad2f8..e93a261 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkCompanyRelationServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.flyingbook.service.impl; import java.util.List; +import com.ruoyi.common.enums.FlagStatus; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.flyingbook.domain.LarkCompanyRelation; import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper; @@ -112,6 +113,7 @@ public class LarkCompanyRelationServiceImpl implements ILarkCompanyRelationServi LarkCompanyRelation relation = new LarkCompanyRelation(); relation.setCompanyName(companyName); relation.setAppType(appType); + relation.setFlag(FlagStatus.OK.getCode()); List larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(relation); return CollectionUtils.isEmpty(larkCompanyRelations) ? null : larkCompanyRelations.get(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 new file mode 100644 index 0000000..224d5a3 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/LarkTableRowRelationServiceImpl.java @@ -0,0 +1,97 @@ +package com.ruoyi.flyingbook.service.impl; + +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 【请填写功能名称】Service业务层处理 + * + * @author ruoyi + * @date 2023-03-15 + */ +@Service +public class LarkTableRowRelationServiceImpl implements ILarkTableRowRelationService +{ + @Autowired + private LarkTableRowRelationMapper larkTableRowRelationMapper; + + /** + * 查询【请填写功能名称】 + * + * @param id 【请填写功能名称】ID + * @return 【请填写功能名称】 + */ + @Override + public LarkTableRowRelation selectLarkTableRowRelationById(Long id) + { + return larkTableRowRelationMapper.selectLarkTableRowRelationById(id); + } + + /** + * 查询【请填写功能名称】列表 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 【请填写功能名称】 + */ + @Override + public List selectLarkTableRowRelationList(LarkTableRowRelation larkTableRowRelation) + { + return larkTableRowRelationMapper.selectLarkTableRowRelationList(larkTableRowRelation); + } + + /** + * 新增【请填写功能名称】 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 结果 + */ + @Override + public int insertLarkTableRowRelation(LarkTableRowRelation larkTableRowRelation) + { + larkTableRowRelation.setCreateTime(DateUtils.getNowDate()); + return larkTableRowRelationMapper.insertLarkTableRowRelation(larkTableRowRelation); + } + + /** + * 修改【请填写功能名称】 + * + * @param larkTableRowRelation 【请填写功能名称】 + * @return 结果 + */ + @Override + public int updateLarkTableRowRelation(LarkTableRowRelation larkTableRowRelation) + { + larkTableRowRelation.setUpdateTime(DateUtils.getNowDate()); + return larkTableRowRelationMapper.updateLarkTableRowRelation(larkTableRowRelation); + } + + /** + * 批量删除【请填写功能名称】 + * + * @param ids 需要删除的【请填写功能名称】ID + * @return 结果 + */ + @Override + public int deleteLarkTableRowRelationByIds(Long[] ids) + { + return larkTableRowRelationMapper.deleteLarkTableRowRelationByIds(ids); + } + + /** + * 删除【请填写功能名称】信息 + * + * @param id 【请填写功能名称】ID + * @return 结果 + */ + @Override + public int deleteLarkTableRowRelationById(Long id) + { + return larkTableRowRelationMapper.deleteLarkTableRowRelationById(id); + } +} 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 9eec109..6fa2327 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 @@ -54,22 +54,22 @@ public class ApprovalCallback extends CallbackAbstract { return; } request.setAppToken(event.getString("file_token")); - request.setTableId(event.getString("table_id")); + request.setFromTableId(event.getString("table_id")); JSONArray actionList = event.getJSONArray("action_list"); if (CollectionUtils.isEmpty(actionList)) { return; } JSONObject action = actionList.getJSONObject(0); String recordId = action.getString("record_id"); - request.setRecordId(recordId); + request.setFromRecordId(recordId); } @Override protected void businessProcessing(LarkRequest request) { - String cacheKey = String.format("%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getTableId(), request.getRecordId()); + 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.getTableId(), request.getRecordId()); + eventId = queryEvent(request.getFromTableId(), request.getFromRecordId()); } Event event = this.buildDto(request,eventId); if (eventId == null){ @@ -119,8 +119,8 @@ public class ApprovalCallback extends CallbackAbstract { event.setFlag(FlagStatus.OK.getCode()); event.setAppToken(request.getAppToken()); event.setMessage(request.getMessage()); - event.setTableId(request.getTableId()); - event.setRecordId(request.getRecordId()); + event.setTableId(request.getFromTableId()); + event.setRecordId(request.getFromRecordId()); event.setNumbers(0L); event.setOperateStatus(EventOperateStatus.SUCCESS.getCode()); event.setCreateBy("System"); 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 9089abf..8a6f8f8 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 @@ -23,10 +23,6 @@ public abstract class LarkAbstract extends LarkOperateAbstract { */ protected abstract Map getBody(LarkRequest request); - /** - * 文本解析 - */ - protected abstract JSONObject send(String type,String url,Map body,String token); 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 5f536de..800f64c 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 @@ -5,15 +5,14 @@ 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.FlagStatus; import com.ruoyi.flyingbook.LarkHelper.LarkTokenHelper; import com.ruoyi.flyingbook.LarkHelper.MultidimensionalTableParamHelper; -import com.ruoyi.flyingbook.domain.Event; -import com.ruoyi.flyingbook.domain.LarkCompanyRelation; -import com.ruoyi.flyingbook.domain.LarkRequest; -import com.ruoyi.flyingbook.domain.LarkTableRelation; +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 org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -46,6 +45,8 @@ public class MultidimensionalTableOperate extends LarkAbstract { private RedisTemplate redisTemplate; @Autowired protected ILarkTableRelationService iLarkTableRelationService; + @Autowired + protected ILarkTableRowRelationService iLarkTableRowRelationService; /** * 获取明细行 */ @@ -56,10 +57,10 @@ public class MultidimensionalTableOperate extends LarkAbstract { private String addLine = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records"; //修改明细行 private static final String UPDATE_OPERATE = "UPDATE_OPERATE"; - private String updateLine = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_update"; + private String updateLine = "https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id"; //删除明细行 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/batch_delete"; + 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) { @@ -71,15 +72,26 @@ public class MultidimensionalTableOperate extends LarkAbstract { if (relation == null) { return; } + request.setCompanyRelationId(relation.getId()); LarkTableRelation tableRelation = new LarkTableRelation(); tableRelation.setLarkCompanyRelationId(relation.getId()); + tableRelation.setFromTableId(request.getEvent().getTableId()); + tableRelation.setFlag(FlagStatus.OK.getCode()); List larkTableRelations = iLarkTableRelationService.selectLarkTableRelationList(tableRelation); if (CollectionUtils.isEmpty(larkTableRelations)) { return; } - //主表与副表的对应关系 + //主表与副表的列对应关系 Map> map = larkTableRelations.stream().collect(Collectors.groupingBy(LarkTableRelation::getToTableId)); request.setTableRelationMap(map); + //主表与副表的行对应关系 + 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; @@ -97,27 +109,33 @@ public class MultidimensionalTableOperate extends LarkAbstract { return; } for (Map.Entry> entry : request.getTableRelationMap().entrySet()) { - request.setTableId(entry.getKey()); + request.setToTableId(entry.getKey()); Map body = getBody(request); String url = getUrl(request); - send(request.getOperateType(),url, body, request.getToken()); + 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)); + if (UPDATE_OPERATE.equals(request.getOperateType())) { - return updateLine.replace(":app_token", event.getAppToken()).replace(":table_id", event.getTableId()); + if (rowRelation.containsKey(request.getFromRecordId())) { + return updateLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getToTableId()).replace(":record_id", rowRelation.get(request.getFromRecordId())); + } } else if (CREATE_OPERATE.equals(request.getOperateType())) { - return addLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getTableId()); + return addLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getToTableId()); } else if (DELETE_OPERATE.equals(request.getOperateType())) { - String cacheKey = String.format("%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, request.getTableId(), request.getRecordId()); - redisTemplate.delete(cacheKey); - return deleteLine.replace(":app_token", event.getAppToken()).replace(":table_id", request.getTableId()); + 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())); + } } else if (DETAIL.equals(request.getOperateType())) { - return getDetail.replace(":app_token", event.getAppToken()).replace(":table_id", request.getTableId()).replace(":record_id", request.getRecordId()); + return getDetail.replace(":app_token", event.getAppToken()).replace(":table_id", request.getFromTableId()).replace(":record_id", request.getFromRecordId()); } return null; } @@ -134,13 +152,13 @@ public class MultidimensionalTableOperate extends LarkAbstract { if (event == null) { return result; } - request.setTableId(event.getString("table_id")); + request.setFromTableId(event.getString("table_id")); JSONArray actionList = event.getJSONArray("action_list"); if (CollectionUtils.isEmpty(actionList)) { return result; } JSONObject action = actionList.getJSONObject(0); - request.setRecordId(action.getString("record_id")); + request.setFromRecordId(action.getString("record_id")); if (action.containsKey("before_value") && action.containsKey("after_value")) { request.setOperateType(UPDATE_OPERATE); result = parseMap(request); @@ -161,7 +179,7 @@ public class MultidimensionalTableOperate extends LarkAbstract { if (StringUtils.isBlank(message)) { return result; } - Map colRelation = request.getTableRelationMap().getOrDefault(request.getTableId(),new ArrayList<>()).stream().collect(Collectors.toMap(LarkTableRelation::getFromColName, LarkTableRelation::getToColName, (k1, k2) -> k1)); + 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); @@ -175,10 +193,23 @@ public class MultidimensionalTableOperate extends LarkAbstract { return result; } - @Override - protected JSONObject send(String type,String url, Map body, String token) { + protected JSONObject send(String type,String url, Map body,LarkRequest request) { + String token = request.getToken(); if (CREATE_OPERATE.equals(type)){ - larkTokenHelper.postLark(url, body, token); + 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); + } + } + } }else if (UPDATE_OPERATE.equals(type)){ larkTokenHelper.putLark(url, body, token); }else if (DELETE_OPERATE.equals(type)){ diff --git a/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml new file mode 100644 index 0000000..b888b23 --- /dev/null +++ b/ruoyi-flyingbook/src/main/resources/mapper/LarkTableRowRelationMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + insert into lark_table_row_relation + + lark_company_relation_id, + from_table_id, + from_row, + to_table_id, + to_row, + create_by, + create_time, + update_by, + update_time, + flag, + remark, + + + #{larkCompanyRelationId}, + #{fromTableId}, + #{fromRow}, + #{toTableId}, + #{toRow}, + #{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}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + flag = #{flag}, + remark = #{remark}, + + where id = #{id} + + + + delete from lark_table_row_relation where id = #{id} + + + + delete from lark_table_row_relation where id in + + #{id} + + + \ No newline at end of file From 773a6ad578b35c15b723748247f9e217bb6d18de Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 15 Mar 2023 22:49:56 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5(=E5=BE=85=E6=B5=8B?= =?UTF-8?q?=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; From 9b4b3e415a6dd7953b0cc1042167834907e3ff4c Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 15 Mar 2023 23:12:00 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5(=E5=BE=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumer/LarkApplicationRunner.java | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) 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 dca9540..6263b02 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 @@ -55,7 +55,7 @@ public class LarkApplicationRunner implements ApplicationRunner { /** * 线程睡眠时间 */ - private static final Integer WAIT_TIME = 5000; + private static final Integer WAIT_TIME = 10000; @Autowired private EventMapper eventMapper; @@ -69,33 +69,32 @@ public class LarkApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { //这里用线程池,后续如果出现量大的情况下可以调整 -// threadPool.execute(() -> { -// -// while (true) { - 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 { -// // 没有订单,休息一下 -// Thread.sleep(WAIT_TIME); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } else { -// try { - for (Event event : eventList) { - LarkRequest request = new LarkRequest(); - request.setEvent(event); - multidimensionalTableOperate.execute(request); - } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// } -// }); + threadPool.execute(() -> { + + while (true) { + Event query = new Event(); + query.setOperateStatus(EventOperateStatus.PENDING.getCode()); + List eventList = eventMapper.selectEventList(query); + if (CollectionUtils.isEmpty(eventList)) { + try { + // 没有订单,休息一下 + Thread.sleep(WAIT_TIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + try { + for (Event event : eventList) { + LarkRequest request = new LarkRequest(); + request.setEvent(event); + multidimensionalTableOperate.execute(request); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }); } } From 0e36df7cdb778584206caa3d2cfc41c08c191b16 Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 15 Mar 2023 23:12:28 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5(=E5=BE=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/flyingbook/controller/EventController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EventController.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EventController.java index 021e186..6edba8c 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EventController.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EventController.java @@ -37,9 +37,9 @@ public class EventController extends BaseController { result = jsonObject.getString("challenge"); log.info("/event/test1/approval request:{} challenge:{}", jsonObject.toJSONString(), result); } - LarkRequest larkRequest = new LarkRequest(); - larkRequest.setMessage(result); - approvalCallback.execute(larkRequest); +// LarkRequest larkRequest = new LarkRequest(); +// larkRequest.setMessage(result); +// approvalCallback.execute(larkRequest); return result; } }