|
|
|
@ -60,27 +60,6 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void preOperate(RequestVo request) {
|
|
|
|
|
//主表与副表的列对应关系
|
|
|
|
|
List<Long> tableRelationIdList = new ArrayList<>();
|
|
|
|
|
for (LarkTableRelation larkTableRelation : request.getLarkTableRelations()) {
|
|
|
|
|
tableRelationIdList.add(larkTableRelation.getId());
|
|
|
|
|
}
|
|
|
|
|
//主表与副表的行对应关系
|
|
|
|
|
List<LarkTableRowRelation> larkTableRowRelations = iLarkTableRowRelationService.queryListByTableRelationIdList(tableRelationIdList);
|
|
|
|
|
Map<Long, Map<String, String>> tableColRelationMap = new HashMap<>();
|
|
|
|
|
for (LarkTableRowRelation larkTableRowRelation : larkTableRowRelations) {
|
|
|
|
|
if (TableDetailRelationTypeEnum.COL.getCode().equals(larkTableRowRelation.getType())) {
|
|
|
|
|
Map<String, String> 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.setTableColRelationMap(tableColRelationMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -90,62 +69,13 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract {
|
|
|
|
|
detailRequest.setSafeCode(Arrays.asList(1254043));
|
|
|
|
|
GetAppTableRecordResp recordDetail = larkTokenHelper.getTableRecordDetail(detailRequest);
|
|
|
|
|
request.setRespBody(recordDetail);
|
|
|
|
|
for (Map.Entry<String, Long> 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<String, Object> getBody(RequestVo request) {
|
|
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
|
|
GetAppTableRecordResp respBody = request.getRespBody();
|
|
|
|
|
int responseCode = respBody.getCode();
|
|
|
|
|
Map<String, String> 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<String, Object> parseMap(RequestVo request) {
|
|
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
|
|
LarkTableFieldRequest tableFieldRequest = new LarkTableFieldRequest(request.getAppId(), request.getAppSecret(), request.getEvent().getAppToken(), request.getEvent().getTableId());
|
|
|
|
|
Map<String, AppTableField> tableFieldDetail = larkTableFieldHelper.getTableFieldDetail(tableFieldRequest);
|
|
|
|
|
Map<String, String> colRelation = request.getTableColRelationMap().getOrDefault(request.getTableRelationId(), new HashMap<>());
|
|
|
|
|
Map<String, Object> midMap = request.getRespBody().getData().getRecord().getFields();
|
|
|
|
|
for (Map.Entry<String, Object> 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<JSONObject> objects = (List<JSONObject>) entry.getValue();
|
|
|
|
|
Map<String, Object> map = (Map) objects.get(0);
|
|
|
|
|
result.put(colRelation.get(key), map.get("text"));
|
|
|
|
|
} else {
|
|
|
|
|
result.put(colRelation.get(key), entry.getValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -167,7 +97,6 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract {
|
|
|
|
|
if(CollectionUtils.isNotEmpty(larkTableRowRelations)){
|
|
|
|
|
LarkTableRowRelation rowRelation = buildRelation(larkTableRowRelations.get(0),fields,recordId);
|
|
|
|
|
request.setEventOperateType(EventOperateType.UPDATE);
|
|
|
|
|
|
|
|
|
|
iLarkTableRowRelationService.updateLarkTableRowRelation(rowRelation);
|
|
|
|
|
}else {
|
|
|
|
|
LarkTableRowRelation rowRelation = buildRelation(null,fields,recordId);
|
|
|
|
@ -199,7 +128,7 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract {
|
|
|
|
|
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.setSubType(subType != null ? subType : TableDetailRelationTypeEnum.COL.getCode());
|
|
|
|
|
}
|
|
|
|
|
rowRelation.setFromId(getTextFromObject(tableValueMap,"主表列"));
|
|
|
|
|
rowRelation.setToId(getTextFromObject(tableValueMap,"副表列"));
|
|
|
|
@ -221,7 +150,11 @@ public class MultidimensionalTableMaintenanceRowOperate extends LarkAbstract {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getTextFromObject(Map<String, Object> tableValueMap,String paramName){
|
|
|
|
|
return "";
|
|
|
|
|
Object o = tableValueMap.get(paramName);
|
|
|
|
|
if (o == null){
|
|
|
|
|
throw new RuntimeException("同步关系中存在空字段");
|
|
|
|
|
}
|
|
|
|
|
return o.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|