From 1abe35e35cd2afbc3deb2c09fb81aa6c38eb6abe Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Wed, 29 Mar 2023 20:28:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9A=E7=BB=B4=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E5=8F=8C=E5=90=91=E5=90=8C=E6=AD=A5=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E7=AE=A1=E7=90=86=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/TableDetailRelationTypeEnum.java | 9 + .../ruoyi/flyingbook/domain/RequestVo.java | 2 +- .../factory/LarkOperateTableFactory.java | 6 +- .../MultidimensionalTableDoubleOperate.java | 3 +- ...dimensionalTableMaintenanceRowOperate.java | 60 +++-- .../operate/MultidimensionalTableOperate.java | 232 ++++++++++++++++++ .../MultidimensionalTableSingleOperate.java | 175 +------------ 7 files changed, 292 insertions(+), 195 deletions(-) create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableOperate.java 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 index 6c1e032..04ef31a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableDetailRelationTypeEnum.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TableDetailRelationTypeEnum.java @@ -26,4 +26,13 @@ public enum TableDetailRelationTypeEnum { public String getInfo() { return info; } + + public static String getByCode(String code){ + for (TableDetailRelationTypeEnum value : TableDetailRelationTypeEnum.values()) { + if (value.getCode().equals(code)){ + return value.getCode(); + } + } + return null; + } } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java index b565e13..13fb8e9 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/RequestVo.java @@ -42,7 +42,7 @@ public class RequestVo { private String approveName; /** - * MultidimensionalTableSingleOperate 用参数 + * MultidimensionalTableOperate 用参数 */ private GetAppTableRecordResp respBody; private JSONObject record; diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java index 3fcb540..604afaa 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/factory/LarkOperateTableFactory.java @@ -12,6 +12,7 @@ import com.ruoyi.flyingbook.service.ILarkCompanyRelationService; import com.ruoyi.flyingbook.service.ILarkTableRelationService; import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableDoubleOperate; import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableMaintenanceRowOperate; +import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableOperate; import com.ruoyi.flyingbook.strategy.operate.MultidimensionalTableSingleOperate; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -33,9 +34,9 @@ import java.util.stream.Collectors; public class LarkOperateTableFactory { @Resource protected ILarkTableRelationService iLarkTableRelationService; - @Resource + @Autowired private MultidimensionalTableSingleOperate singleOperate; - @Resource + @Autowired private MultidimensionalTableDoubleOperate doubleOperate; @Resource private MultidimensionalTableMaintenanceRowOperate maintenanceRowOperate; @@ -79,6 +80,7 @@ public class LarkOperateTableFactory { if (event == null) { throw new RuntimeException("当前事件为空"); } + request.setEvent(event); LarkCompanyRelation relation = larkCompanyRelationService.getByAppIdAndType(event.getAppId(), AppType.MULTIDIMENSIONAL_TABLE.getCode()); if (relation == null) { String errorMessage = String.format("获取app值为空 appId:{} appType:{}", event.getAppId(), AppType.MULTIDIMENSIONAL_TABLE.getCode()); diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableDoubleOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableDoubleOperate.java index cc7c767..962a1a8 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableDoubleOperate.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableDoubleOperate.java @@ -4,7 +4,6 @@ import com.ruoyi.common.enums.TableDetailRelationTypeEnum; import com.ruoyi.flyingbook.LarkHelper.LarkTableFieldHelper; import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper; import com.ruoyi.flyingbook.domain.*; -import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; import com.ruoyi.flyingbook.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +20,7 @@ import java.util.*; */ @Slf4j @Component("MultidimensionalTableDoubleOperate") -public class MultidimensionalTableDoubleOperate extends MultidimensionalTableSingleOperate { +public class MultidimensionalTableDoubleOperate extends MultidimensionalTableOperate { @Autowired protected LarkTableHelper larkTokenHelper; diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableMaintenanceRowOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableMaintenanceRowOperate.java index 36b36c6..2686c7f 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableMaintenanceRowOperate.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableMaintenanceRowOperate.java @@ -165,17 +165,13 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract { query.setTableRowId(recordId); List larkTableRowRelations = iLarkTableRowRelationService.selectLarkTableRowRelationList(query); if(CollectionUtils.isNotEmpty(larkTableRowRelations)){ - LarkTableRowRelation rowRelation = buildRelation(larkTableRowRelations.get(0),fields); + LarkTableRowRelation rowRelation = buildRelation(larkTableRowRelations.get(0),fields,recordId); request.setEventOperateType(EventOperateType.UPDATE); - rowRelation.setUpdateBy("System"); - rowRelation.setUpdateTime(new Date()); - rowRelation.setFlag(FlagStatus.OK.getCode()); + iLarkTableRowRelationService.updateLarkTableRowRelation(rowRelation); }else { - LarkTableRowRelation rowRelation = buildRelation(null,fields); - rowRelation.setCreateTime(new Date()); - rowRelation.setCreateBy("System"); - rowRelation.setFlag(FlagStatus.OK.getCode()); + LarkTableRowRelation rowRelation = buildRelation(null,fields,recordId); + request.setEventOperateType(EventOperateType.CREATE); iLarkTableRowRelationService.insertLarkTableRowRelation(rowRelation); } @@ -185,25 +181,49 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract { request.setOperateInfo(rowRelation.toString()); } - private LarkTableRowRelation buildRelation(LarkTableRowRelation rowRelation,Map tableValueMap){ + private LarkTableRowRelation buildRelation(LarkTableRowRelation rowRelation,Map tableValueMap,String recordId){ if (rowRelation == null){ rowRelation = new LarkTableRowRelation(); } - Class aClass = rowRelation.getClass(); - for (Field field : aClass.getDeclaredFields()) { - try { - field.setAccessible(Boolean.TRUE); - Object o = tableValueMap.get(field.getName()); - if (o != null){ - field.set(rowRelation, o); - } - } catch (IllegalAccessException e) { - e.printStackTrace(); - } + rowRelation.setFlag(FlagStatus.OK.getCode()); + if (rowRelation.getId() != null){ + rowRelation.setUpdateBy("System"); + rowRelation.setUpdateTime(new Date()); + }else { + rowRelation.setCreateTime(new Date()); + rowRelation.setCreateBy("System"); + rowRelation.setTableRowId(recordId); + rowRelation.setTableRelationId(getTableRelationId(tableValueMap)); + String type = getTextFromObject(tableValueMap, "类型"); + type = TableDetailRelationTypeEnum.getByCode(type); + rowRelation.setType(type != null ? type : TableDetailRelationTypeEnum.COL.getCode()); + String subType = getTextFromObject(tableValueMap, "二级类型"); + subType = TableDetailRelationTypeEnum.getByCode(subType); + rowRelation.setType(subType != null ? subType : TableDetailRelationTypeEnum.COL.getCode()); } + rowRelation.setFromId(getTextFromObject(tableValueMap,"主表列")); + rowRelation.setToId(getTextFromObject(tableValueMap,"副表列")); + rowRelation.setRemark(getTextFromObject(tableValueMap,"备注")); return rowRelation; } + private Long getTableRelationId(Map tableValueMap){ + LarkTableRelation query = new LarkTableRelation(); + String fromTableId = getTextFromObject(tableValueMap,"主表"); + String toTableId = getTextFromObject(tableValueMap,"副表"); + query.setFromTableId(fromTableId); + query.setToTableId(toTableId); + List larkTableRelations = iLarkTableRelationService.selectLarkTableRelationList(query); + if (CollectionUtils.isEmpty(larkTableRelations)){ + throw new RuntimeException("无对应的主副表对应关系"); + } + return larkTableRelations.get(0).getId(); + } + + private String getTextFromObject(Map tableValueMap,String paramName){ + return ""; + } + @Override protected void endHandle(RequestVo request) { Event event = request.getEvent(); 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 new file mode 100644 index 0000000..dbb2c6e --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableOperate.java @@ -0,0 +1,232 @@ +package com.ruoyi.flyingbook.strategy.operate; + +import com.alibaba.fastjson.JSONObject; +import com.lark.oapi.service.bitable.v1.model.AppTableField; +import com.lark.oapi.service.bitable.v1.model.CreateAppTableRecordRespBody; +import com.lark.oapi.service.bitable.v1.model.GetAppTableRecordResp; +import com.ruoyi.common.constant.RedisConstants; +import com.ruoyi.common.enums.*; +import com.ruoyi.flyingbook.LarkHelper.LarkTableFieldHelper; +import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper; +import com.ruoyi.flyingbook.domain.*; +import com.ruoyi.flyingbook.domain.lark.LarkTableFieldRequest; +import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; +import com.ruoyi.flyingbook.service.*; +import lombok.extern.slf4j.Slf4j; +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.*; + + +/** + * 多维表格操作类_表单同步 + * + * @author yuxiangyong + * @create 2023-03-13 20:47 + */ +@Slf4j +public class MultidimensionalTableOperate extends LarkAbstract { + + @Autowired + protected LarkTableHelper larkTokenHelper; + @Autowired + protected LarkTableFieldHelper larkTableFieldHelper; + @Autowired + protected ILarkCompanyRelationService larkCompanyRelationService; + @Autowired + protected IEventService iEventService; + @Autowired + protected RedisTemplate redisTemplate; + @Autowired + protected ILarkTableRelationService iLarkTableRelationService; + @Autowired + protected ILarkTableRowRelationService iLarkTableRowRelationService; + @Autowired + protected IEventService eventService; + @Autowired + protected IEventLogService eventLogService; + /** + * 新增明细行 + */ + protected static final String CREATE_OPERATE = "CREATE_OPERATE"; + /** + * 修改明细行 + */ + protected static final String UPDATE_OPERATE = "UPDATE_OPERATE"; + /** + * 删除明细行 + */ + protected static final String DELETE_OPERATE = "DELETE_OPERATE"; + + + protected void fillTableRelation(RequestVo request) { + //主表与副表的列对应关系 + List tableRelationIdList = new ArrayList<>(); + Map tableRelationMap = new HashMap<>(); + for (LarkTableRelation larkTableRelation : request.getLarkTableRelations()) { + String to = String.format("%s_%s", larkTableRelation.getToAppToken(), larkTableRelation.getToTableId()); + tableRelationMap.put(to, larkTableRelation.getId()); + tableRelationIdList.add(larkTableRelation.getId()); + } + request.setTableRelationMap(tableRelationMap); + //主表与副表的行对应关系 + List larkTableRowRelations = iLarkTableRowRelationService.queryListByTableRelationIdList(tableRelationIdList); + Map> tableRowRelationMap = new HashMap<>(); + Map> tableColRelationMap = new HashMap<>(); + for (LarkTableRowRelation larkTableRowRelation : larkTableRowRelations) { + if (TableDetailRelationTypeEnum.ROW.getCode().equals(larkTableRowRelation.getType())) { + Map map = tableRowRelationMap.getOrDefault(larkTableRowRelation.getTableRelationId(),new HashMap<>()); + map.put(larkTableRowRelation.getFromId(), larkTableRowRelation.getToId()); + tableRowRelationMap.put(larkTableRowRelation.getTableRelationId(), map); + } else if (TableDetailRelationTypeEnum.COL.getCode().equals(larkTableRowRelation.getType())) { + Map map = tableColRelationMap.getOrDefault(larkTableRowRelation.getTableRelationId(),new HashMap<>()); + map.put(larkTableRowRelation.getFromId(), larkTableRowRelation.getToId()); + tableColRelationMap.put(larkTableRowRelation.getTableRelationId(), map); + } + } + if (tableColRelationMap.isEmpty()) { + String errorMessage = String.format("tableId:{} 列关系未配置", request.getEvent().getTableId()); + log.error("iLarkTableRowRelationService.queryListByTableRelationIdList:{}", errorMessage); + throw new RuntimeException(errorMessage); + } + request.setTableRowRelationMap(tableRowRelationMap); + request.setTableColRelationMap(tableColRelationMap); + } + + @Override + protected void preOperate(RequestVo request) { + //关联关系表填充 + this.fillTableRelation(request); + } + + @Override + protected void businessProcessing(RequestVo request) { + Event event = request.getEvent(); + String cacheKey = String.format("%s_%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, event.getAppToken(), event.getTableId(), event.getRecordId()); + redisTemplate.delete(cacheKey); + LarkTableRequest detailRequest = new LarkTableRequest(request.getAppId(), request.getAppSecret(), event.getAppToken(), event.getTableId(), event.getRecordId()); + detailRequest.setSafeCode(Arrays.asList(1254043)); + GetAppTableRecordResp recordDetail = larkTokenHelper.getTableRecordDetail(detailRequest); + request.setRespBody(recordDetail); + for (Map.Entry entry : request.getTableRelationMap().entrySet()) { + String[] arr = entry.getKey().split("_"); + request.setToAppToken(arr[0]); + request.setToTableId(arr[1]); + request.setTableRelationId(entry.getValue()); + send(request); + } + } + + + @Override + protected Map getBody(RequestVo request) { + Map result = new HashMap<>(); + GetAppTableRecordResp respBody = request.getRespBody(); + int responseCode = respBody.getCode(); + Map rowMap = request.getTableRowRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>()); + if (1254043 == responseCode) { + request.setOperateType(DELETE_OPERATE); + } else if (0 == responseCode) { + result = parseMap(request); + if (rowMap.containsKey(request.getEvent().getRecordId())) { + request.setOperateType(UPDATE_OPERATE); + } else { + request.setOperateType(CREATE_OPERATE); + } + } + if (result.isEmpty() && DELETE_OPERATE != request.getOperateType()){ + throw new RuntimeException("post 的body为空,请检查映射参数"); + } + return result; + } + + /** + * 对两个表的列进行映射 + */ + private Map parseMap(RequestVo request) { + Map result = new HashMap<>(); + LarkTableFieldRequest tableFieldRequest = new LarkTableFieldRequest(request.getAppId(),request.getAppSecret(),request.getEvent().getAppToken(),request.getEvent().getTableId()); + Map tableFieldDetail = larkTableFieldHelper.getTableFieldDetail(tableFieldRequest); + Map colRelation = request.getTableColRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>()); + Map midMap = request.getRespBody().getData().getRecord().getFields(); + for (Map.Entry entry : midMap.entrySet()) { + String key = String.valueOf(entry.getKey()); + if (!colRelation.containsKey(key)) { + continue; + } + AppTableField appTableField = tableFieldDetail.get(key); + if (appTableField != null && TableFieldTypeEnum.FORMULA.getCode().equals(appTableField.getType())){ + List objects = (List) entry.getValue(); + Map map = (Map)objects.get(0); + result.put(colRelation.get(key), map.get("text")); + }else { + result.put(colRelation.get(key), entry.getValue()); + } + + } + return result; + } + + private void send(RequestVo request) { + + Map body = getBody(request); + String type = request.getOperateType(); + Event event = request.getEvent(); + + request.setOperateInfo(String.valueOf(body)); + Map rowRelationMap = request.getTableRowRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>()); + if (CREATE_OPERATE.equals(type)) { + LarkTableRequest add = new LarkTableRequest(request.getAppId(), request.getAppSecret(), request.getToAppToken(), request.getToTableId(), body); + CreateAppTableRecordRespBody addResp = larkTokenHelper.addTableRecord(add); + if (addResp != null) { + String recordId = addResp.getRecord().getRecordId(); + LarkTableRowRelation rowRelation = new LarkTableRowRelation(request.getCompanyRelationId(), event.getRecordId(), recordId, TableDetailRelationTypeEnum.ROW.getCode(), TableDetailRelationTypeEnum.ROW.getCode()); + iLarkTableRowRelationService.insertLarkTableRowRelation(rowRelation); + } + request.setEventOperateType(EventOperateType.CREATE); + } else if (UPDATE_OPERATE.equals(type)) { + request.setEventOperateType(EventOperateType.UPDATE); + + LarkTableRequest update = new LarkTableRequest(request.getAppId(), request.getAppSecret(), request.getToAppToken(), request.getToTableId(),rowRelationMap.get(request.getEvent().getRecordId()), body); + larkTokenHelper.updateTableRecord(update); + } else if (DELETE_OPERATE.equals(type)) { + request.setEventOperateType(EventOperateType.DELETE); + LarkTableRequest delete = new LarkTableRequest(request.getAppId(), request.getAppSecret(), request.getToAppToken(), request.getToTableId(),rowRelationMap.get(request.getEvent().getRecordId())); + larkTokenHelper.deleteTableRecord(delete); + + } + } + + @Override + protected void endHandle(RequestVo request) { + Event event = request.getEvent(); + EventLog eventLog = null; + if (StringUtils.isBlank(request.getErrorMessage())) { + eventService.updateStatus(event.getId(), EventOperateStatus.SUCCESS.getCode(), event.getNumbers()); + eventLog = new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage()); + } else { + eventService.updateStatus(event.getId(), EventOperateStatus.PENDING.getCode(), event.getNumbers() + 1); + if (request.getEventOperateType() != null) { + eventLog = new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage(), request.getErrorCode(), request.getErrorMessage()); + } + } + if (eventLog != null) { + eventLog.setOperateInfo(request.getOperateType()); + eventLogService.insertEventLog(eventLog); + } + } + + @Override + protected String buildResult(RequestVo request) { + return null; + } + + @Override + protected String getName() { + return this.getClass().getSimpleName(); + } + +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableSingleOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableSingleOperate.java index 06b64cd..10f88b1 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableSingleOperate.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/operate/MultidimensionalTableSingleOperate.java @@ -1,22 +1,11 @@ package com.ruoyi.flyingbook.strategy.operate; -import com.alibaba.fastjson.JSONObject; -import com.lark.oapi.service.bitable.v1.model.AppTableField; -import com.lark.oapi.service.bitable.v1.model.CreateAppTableRecordRespBody; -import com.lark.oapi.service.bitable.v1.model.GetAppTableRecordResp; -import com.ruoyi.common.constant.RedisConstants; -import com.ruoyi.common.enums.*; -import com.ruoyi.flyingbook.LarkHelper.LarkTableFieldHelper; -import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper; +import com.ruoyi.common.enums.TableDetailRelationTypeEnum; import com.ruoyi.flyingbook.domain.*; -import com.ruoyi.flyingbook.domain.lark.LarkTableFieldRequest; -import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; import com.ruoyi.flyingbook.service.*; import lombok.extern.slf4j.Slf4j; -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 org.springframework.stereotype.Service; import java.util.*; @@ -28,41 +17,14 @@ import java.util.*; * @create 2023-03-13 20:47 */ @Slf4j -@Component("MultidimensionalTableOperate") -public class MultidimensionalTableSingleOperate extends LarkAbstract { +@Service("MultidimensionalTableSingleOperate") +public class MultidimensionalTableSingleOperate extends MultidimensionalTableOperate { - @Autowired - protected LarkTableHelper larkTokenHelper; - @Autowired - protected LarkTableFieldHelper larkTableFieldHelper; - @Autowired - protected ILarkCompanyRelationService larkCompanyRelationService; - @Autowired - protected IEventService iEventService; - @Autowired - protected RedisTemplate redisTemplate; - @Autowired - protected ILarkTableRelationService iLarkTableRelationService; @Autowired protected ILarkTableRowRelationService iLarkTableRowRelationService; - @Autowired - protected IEventService eventService; - @Autowired - protected IEventLogService eventLogService; - /** - * 新增明细行 - */ - protected static final String CREATE_OPERATE = "CREATE_OPERATE"; - /** - * 修改明细行 - */ - protected static final String UPDATE_OPERATE = "UPDATE_OPERATE"; - /** - * 删除明细行 - */ - protected static final String DELETE_OPERATE = "DELETE_OPERATE"; + @Override protected void fillTableRelation(RequestVo request) { //主表与副表的列对应关系 List tableRelationIdList = new ArrayList<>(); @@ -97,133 +59,6 @@ public class MultidimensionalTableSingleOperate extends LarkAbstract { request.setTableColRelationMap(tableColRelationMap); } - @Override - protected void preOperate(RequestVo request) { - //关联关系表填充 - this.fillTableRelation(request); - } - - @Override - protected void businessProcessing(RequestVo request) { - Event event = request.getEvent(); - String cacheKey = String.format("%s_%s_%s_%s", RedisConstants.MULTIPLE_TABLE_RECORD, event.getAppToken(), event.getTableId(), event.getRecordId()); - redisTemplate.delete(cacheKey); - LarkTableRequest detailRequest = new LarkTableRequest(request.getAppId(), request.getAppSecret(), event.getAppToken(), event.getTableId(), event.getRecordId()); - detailRequest.setSafeCode(Arrays.asList(1254043)); - GetAppTableRecordResp recordDetail = larkTokenHelper.getTableRecordDetail(detailRequest); - request.setRespBody(recordDetail); - for (Map.Entry entry : request.getTableRelationMap().entrySet()) { - String[] arr = entry.getKey().split("_"); - request.setToAppToken(arr[0]); - request.setToTableId(arr[1]); - request.setTableRelationId(entry.getValue()); - send(request); - } - } - - - @Override - protected Map getBody(RequestVo request) { - Map result = new HashMap<>(); - GetAppTableRecordResp respBody = request.getRespBody(); - int responseCode = respBody.getCode(); - Map rowMap = request.getTableRowRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>()); - if (1254043 == responseCode) { - request.setOperateType(DELETE_OPERATE); - } else if (0 == responseCode) { - result = parseMap(request); - if (rowMap.containsKey(request.getEvent().getRecordId())) { - request.setOperateType(UPDATE_OPERATE); - } else { - request.setOperateType(CREATE_OPERATE); - } - } - if (result.isEmpty() && DELETE_OPERATE != request.getOperateType()){ - throw new RuntimeException("post 的body为空,请检查映射参数"); - } - return result; - } - - /** - * 对两个表的列进行映射 - */ - private Map parseMap(RequestVo request) { - Map result = new HashMap<>(); - LarkTableFieldRequest tableFieldRequest = new LarkTableFieldRequest(request.getAppId(),request.getAppSecret(),request.getEvent().getAppToken(),request.getEvent().getTableId()); - Map tableFieldDetail = larkTableFieldHelper.getTableFieldDetail(tableFieldRequest); - Map colRelation = request.getTableColRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>()); - Map midMap = request.getRespBody().getData().getRecord().getFields(); - for (Map.Entry entry : midMap.entrySet()) { - String key = String.valueOf(entry.getKey()); - if (!colRelation.containsKey(key)) { - continue; - } - AppTableField appTableField = tableFieldDetail.get(key); - if (appTableField != null && TableFieldTypeEnum.FORMULA.getCode().equals(appTableField.getType())){ - List objects = (List) entry.getValue(); - Map map = (Map)objects.get(0); - result.put(colRelation.get(key), map.get("text")); - }else { - result.put(colRelation.get(key), entry.getValue()); - } - - } - return result; - } - - private void send(RequestVo request) { - - Map body = getBody(request); - String type = request.getOperateType(); - Event event = request.getEvent(); - - request.setOperateInfo(String.valueOf(body)); - Map rowRelationMap = request.getTableRowRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>()); - if (CREATE_OPERATE.equals(type)) { - LarkTableRequest add = new LarkTableRequest(request.getAppId(), request.getAppSecret(), request.getToAppToken(), request.getToTableId(), body); - CreateAppTableRecordRespBody addResp = larkTokenHelper.addTableRecord(add); - if (addResp != null) { - String recordId = addResp.getRecord().getRecordId(); - LarkTableRowRelation rowRelation = new LarkTableRowRelation(request.getCompanyRelationId(), event.getRecordId(), recordId, TableDetailRelationTypeEnum.ROW.getCode(), TableDetailRelationTypeEnum.ROW.getCode()); - iLarkTableRowRelationService.insertLarkTableRowRelation(rowRelation); - } - request.setEventOperateType(EventOperateType.CREATE); - } else if (UPDATE_OPERATE.equals(type)) { - request.setEventOperateType(EventOperateType.UPDATE); - - LarkTableRequest update = new LarkTableRequest(request.getAppId(), request.getAppSecret(), request.getToAppToken(), request.getToTableId(),rowRelationMap.get(request.getEvent().getRecordId()), body); - larkTokenHelper.updateTableRecord(update); - } else if (DELETE_OPERATE.equals(type)) { - request.setEventOperateType(EventOperateType.DELETE); - LarkTableRequest delete = new LarkTableRequest(request.getAppId(), request.getAppSecret(), request.getToAppToken(), request.getToTableId(),rowRelationMap.get(request.getEvent().getRecordId())); - larkTokenHelper.deleteTableRecord(delete); - - } - } - - @Override - protected void endHandle(RequestVo request) { - Event event = request.getEvent(); - EventLog eventLog = null; - if (StringUtils.isBlank(request.getErrorMessage())) { - eventService.updateStatus(event.getId(), EventOperateStatus.SUCCESS.getCode(), event.getNumbers()); - eventLog = new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage()); - } else { - eventService.updateStatus(event.getId(), EventOperateStatus.PENDING.getCode(), event.getNumbers() + 1); - if (request.getEventOperateType() != null) { - eventLog = new EventLog(event.getId(), request.getEventOperateType().getCode(), request.getMessage(), request.getErrorCode(), request.getErrorMessage()); - } - } - if (eventLog != null) { - eventLog.setOperateInfo(request.getOperateType()); - eventLogService.insertEventLog(eventLog); - } - } - - @Override - protected String buildResult(RequestVo request) { - return null; - } @Override protected String getName() {