多维表格信息同步(待测试)

于相涌/mail
YXY 2 years ago committed by bob
parent 62c6d2b3f7
commit 8402cf2c02

@ -11,8 +11,7 @@ public enum EventOperateStatus {
*
*/
PENDING("PENDING", "未处理"),
SUCCESS("SUCCESS", "成功"),
FAIL("FAIL", "失败");
SUCCESS("SUCCESS", "处理完成");
private final String code;
private final String info;

@ -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;
}
}

@ -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<String, String> 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<String, String> body, String token) {
public JSONObject getLark(String url,Map<String, String> 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<Object, Object> body, String token) {
Response execute = null;
public JSONObject postLark(String url,Map<Object, Object> 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<Object, Object> body, String token) {
Response execute = null;
public JSONObject putLark(String url,Map<Object, Object> 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<Object, Object> body, String token) {
Response execute = null;
public JSONObject deleteLark(String url,Map<Object, Object> 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<Object,Object> map = new HashMap<>();

@ -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<String> statusList = Arrays.asList(EventOperateStatus.PENDING.getCode(),EventOperateStatus.FAIL.getCode());
// List<Event> eventList = eventMapper.queryListOperate(statusList);
Event query = new Event();
query.setOperateStatus(EventOperateStatus.PENDING.getCode());
List<String> statusList = Arrays.asList(EventOperateStatus.PENDING.getCode());
List<Event> 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();
// }

@ -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,16 +31,12 @@ 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) */
@ -82,15 +79,6 @@ public class Event extends BaseEntity
{
return recordId;
}
public void setMessage(String message)
{
this.message = message;
}
public String getMessage()
{
return message;
}
public void setNumbers(Long numbers)
{
this.numbers = numbers;
@ -126,7 +114,6 @@ public class Event extends BaseEntity
.append("appToken", getAppToken())
.append("tableId", getTableId())
.append("recordId", getRecordId())
.append("message", getMessage())
.append("numbers", getNumbers())
.append("operateStatus", getOperateStatus())
.append("createBy", getCreateBy())

@ -11,7 +11,7 @@ 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;
@ -73,6 +88,15 @@ public class EventLog extends BaseEntity
{
return operateType;
}
public void setOperateInfo(String operateInfo)
{
this.operateInfo = operateInfo;
}
public String getOperateInfo()
{
return operateInfo;
}
public void setErrorCode(String errorCode)
{
this.errorCode = errorCode;
@ -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())

@ -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
{

@ -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<String, List<LarkTableRelation>> tableRelationMap;
private Map<String, List<LarkTableRowRelation>> tableRowRelationMap;
private EventOperateType eventOperateType;
/**
*
*/
private Map<String/**toToken+toTable*/, Long/**id*/> tableRelationMap;
private Map<Long/**tableRelationId*/,Map<String/**fromRow*/,String/**toRow*/>> tableRowRelationMap;
private Map<Long/**tableRelationId*/,Map<String/**fromCol*/,String/**toCol*/>> tableColRelationMap;
}

@ -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())

@ -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())

@ -62,8 +62,7 @@ public interface EventMapper
*/
public int deleteEventByIds(Long[] ids);
/**
*
*/
public List<Event> queryListOperate(@Param("statusList") List<String> statusList);
public int updateStatus(@Param("id") Long id,@Param("status") String status);
}

@ -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<LarkTableRowRelation> queryListByTableRelationIdList(@Param("tableRelationIdList") List<Long> tableRelationIdList);
}

@ -60,4 +60,6 @@ public interface IEventService
* @return
*/
public int deleteEventById(Long id);
public int updateStatus(Long id,String status);
}

@ -61,4 +61,5 @@ public interface ILarkTableRelationService
*/
public int deleteLarkTableRelationById(Long id);
}

@ -60,4 +60,6 @@ public interface ILarkTableRowRelationService
* @return
*/
public int deleteLarkTableRowRelationById(Long id);
public List<LarkTableRowRelation> queryListByTableRelationIdList(List<Long> tableRelationIdList);
}

@ -95,4 +95,9 @@ public class EventServiceImpl implements IEventService
{
return eventMapper.deleteEventById(id);
}
@Override
public int updateStatus(Long id, String status) {
return 0;
}
}

@ -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<LarkTableRowRelation> queryListByTableRelationIdList(List<Long> tableRelationIdList) {
if (CollectionUtils.isEmpty(tableRelationIdList)){
return new ArrayList<>();
}
return larkTableRowRelationMapper.queryListByTableRelationIdList(tableRelationIdList);
}
}

@ -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){};
/**
*

@ -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<Event> 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());

@ -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,57 +64,82 @@ 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<LarkTableRelation> 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<String, List<LarkTableRelation>> map = larkTableRelations.stream().collect(Collectors.groupingBy(LarkTableRelation::getToTableId));
request.setTableRelationMap(map);
List<Long> tableRelationIdList = new ArrayList<>();
Map<String, Long> 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<LarkTableRowRelation> larkTableRowRelations = iLarkTableRowRelationService.selectLarkTableRowRelationList(larkTableRowRelation);
Map<String, List<LarkTableRowRelation>> 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<LarkTableRowRelation> larkTableRowRelations = iLarkTableRowRelationService.queryListByTableRelationIdList(tableRelationIdList);
Map<Long, Map<String, String>> tableRowRelationMap = new HashMap<>();
Map<Long, Map<String, String>> tableColRelationMap = new HashMap<>();
for (LarkTableRowRelation larkTableRowRelation : larkTableRowRelations) {
Map<String, String> 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;
}
event.setMessage(request.getCallBackMessage());
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 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);
}
//用于后续追加row时候做关联关系
request.setCompanyRelationId(relation.getId());
//关联关系表填充
this.fillTableRelation(request);
String token = larkTokenHelper.getToken(relation.getAppId(), relation.getSecret(),"tenant_access_token");
request.setToken(token);
}
for (Map.Entry<String, List<LarkTableRelation>> entry : request.getTableRelationMap().entrySet()) {
@Override
protected void businessProcessing(LarkRequest request) {
request.setOperateType(DETAIL);
JSONObject message = larkTokenHelper.getLark(getUrl(request), null, request.getToken());
request.setRecord(message);
for (Map.Entry<String, Long> entry : request.getTableRelationMap().entrySet()) {
request.setToTableId(entry.getKey());
request.setTableRelationId(entry.getValue());
Map<Object, Object> body = getBody(request);
String url = getUrl(request);
if (StringUtils.isBlank(url)) {
return;
}
send(request.getOperateType(), url, body, request);
}
}
@ -120,22 +147,21 @@ public class MultidimensionalTableOperate extends LarkAbstract {
@Override
protected String getUrl(LarkRequest request) {
Event event = request.getEvent();
Map<String, String> rowRelation = request.getTableRowRelationMap().getOrDefault(request.getToTableId(),new ArrayList<>()).stream().collect(Collectors.toMap(LarkTableRowRelation::getFromRow, LarkTableRowRelation::getToRow, (k1, k2) -> k1));
Map<String, String> 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<Object, Object> getBody(LarkRequest request) {
Map<Object, Object> 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);
JSONObject record = request.getRecord();
String responseCode = record.getString("code");
Map<String, String> 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(DELETE_OPERATE);
request.setOperateType(CREATE_OPERATE);
}
}
return result;
}
private Map<Object, Object> parseMap(LarkRequest request) {
Map<Object, Object> result = new HashMap<>();
request.setOperateType(DETAIL);
String message = larkTokenHelper.getLark(getUrl(request), null, request.getToken());
if (StringUtils.isBlank(message)) {
return result;
}
Map<String, String> 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");
JSONObject record = request.getRecord();
Map<String, String> colRelation = request.getTableColRelationMap().get(request.getToTableId());
String fields = record.getJSONObject("data").getJSONObject("record").getString("fields");
Map<Object, Object> midMap = JSONObject.parseObject(fields, Map.class);
for (Map.Entry<Object, Object> entry : midMap.entrySet()) {
String key = String.valueOf(entry);
if (!colRelation.containsKey(key)) {
continue;
}
result.put(key,String.valueOf(entry.getValue()));
result.put(colRelation.get(key), entry.getValue());
}
Map<Object, Map<Object, Object>> map = new HashMap<>();
map.put("fields",result);
return result;
}
protected JSONObject send(String type,String url, Map<Object, Object> body,LarkRequest request) {
protected void send(String type, String url, Map<Object, Object> 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");
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.getFromTableId(),request.getFromRecordId(),request.getToTableId(),recordId);
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)) {
larkTokenHelper.putLark(url, body, token);
} 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

@ -2,12 +2,13 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.EventLogMapper">
<mapper namespace="com.ruoyi.flyingbook.mapper.EventLogMapper">
<resultMap type="com.ruoyi.flyingbook.domain.EventLog" id="EventLogResult">
<result property="id" column="id" />
<result property="eventId" column="event_id" />
<result property="operateType" column="operate_type" />
<result property="operateInfo" column="operate_info" />
<result property="errorCode" column="error_code" />
<result property="errorMessage" column="error_message" />
<result property="remark" column="remark" />
@ -18,7 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectEventLogVo">
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
</sql>
<select id="selectEventLogList" parameterType="com.ruoyi.flyingbook.domain.EventLog" resultMap="EventLogResult">
@ -26,6 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
<if test="eventId != null "> and event_id = #{eventId}</if>
<if test="operateType != null and operateType != ''"> and operate_type = #{operateType}</if>
<if test="operateInfo != null and operateInfo != ''"> and operate_info = #{operateInfo}</if>
<if test="errorCode != null and errorCode != ''"> and error_code = #{errorCode}</if>
<if test="errorMessage != null and errorMessage != ''"> and error_message = #{errorMessage}</if>
</where>
@ -41,6 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="eventId != null">event_id,</if>
<if test="operateType != null">operate_type,</if>
<if test="operateInfo != null">operate_info,</if>
<if test="errorCode != null">error_code,</if>
<if test="errorMessage != null">error_message,</if>
<if test="remark != null">remark,</if>
@ -52,6 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="eventId != null">#{eventId},</if>
<if test="operateType != null">#{operateType},</if>
<if test="operateInfo != null">#{operateInfo},</if>
<if test="errorCode != null">#{errorCode},</if>
<if test="errorMessage != null">#{errorMessage},</if>
<if test="remark != null">#{remark},</if>
@ -67,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="SET" suffixOverrides=",">
<if test="eventId != null">event_id = #{eventId},</if>
<if test="operateType != null">operate_type = #{operateType},</if>
<if test="operateInfo != null">operate_info = #{operateInfo},</if>
<if test="errorCode != null">error_code = #{errorCode},</if>
<if test="errorMessage != null">error_message = #{errorMessage},</if>
<if test="remark != null">remark = #{remark},</if>

@ -2,14 +2,13 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.EventMapper">
<mapper namespace="com.ruoyi.flyingbook.mapper.EventMapper">
<resultMap type="com.ruoyi.flyingbook.domain.Event" id="EventResult">
<result property="id" column="id" />
<result property="appToken" column="app_token" />
<result property="tableId" column="table_id" />
<result property="recordId" column="record_id" />
<result property="message" column="message" />
<result property="numbers" column="numbers" />
<result property="operateStatus" column="operate_status" />
<result property="createBy" column="create_by" />
@ -21,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectEventVo">
select id, app_token, table_id, record_id, message, numbers, operate_status, create_by, create_time, update_by, update_time, flag, remark from event
select id, app_token, table_id, record_id, numbers, operate_status, create_by, create_time, update_by, update_time, flag, remark from event
</sql>
<select id="selectEventList" parameterType="com.ruoyi.flyingbook.domain.Event" resultMap="EventResult">
@ -30,7 +29,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="appToken != null and appToken != ''"> and app_token = #{appToken}</if>
<if test="tableId != null and tableId != ''"> and table_id = #{tableId}</if>
<if test="recordId != null and recordId != ''"> and record_id = #{recordId}</if>
<if test="message != null and message != ''"> and message = #{message}</if>
<if test="numbers != null "> and numbers = #{numbers}</if>
<if test="operateStatus != null and operateStatus != ''"> and operate_status = #{operateStatus}</if>
<if test="flag != null "> and flag = #{flag}</if>
@ -48,7 +46,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="appToken != null">app_token,</if>
<if test="tableId != null">table_id,</if>
<if test="recordId != null">record_id,</if>
<if test="message != null">message,</if>
<if test="numbers != null">numbers,</if>
<if test="operateStatus != null">operate_status,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
@ -62,7 +59,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="appToken != null">#{appToken},</if>
<if test="tableId != null">#{tableId},</if>
<if test="recordId != null">#{recordId},</if>
<if test="message != null">#{message},</if>
<if test="numbers != null">#{numbers},</if>
<if test="operateStatus != null">#{operateStatus},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
@ -80,7 +76,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="appToken != null">app_token = #{appToken},</if>
<if test="tableId != null">table_id = #{tableId},</if>
<if test="recordId != null">record_id = #{recordId},</if>
<if test="message != null">message = #{message},</if>
<if test="numbers != null">numbers = #{numbers},</if>
<if test="operateStatus != null">operate_status = #{operateStatus},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
@ -103,4 +98,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<update id="updateStatus" parameterType="com.ruoyi.flyingbook.domain.Event">
update event set operate_status = #{status} where id = #{id}
</update>
</mapper>

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.LarkCompanyRelationMapper">
<mapper namespace="com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper">
<resultMap type="com.ruoyi.flyingbook.domain.LarkCompanyRelation" id="LarkCompanyRelationResult">
<result property="id" column="id" />

@ -2,16 +2,15 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.LarkTableRelationMapper">
<mapper namespace="com.ruoyi.flyingbook.mapper.LarkTableRelationMapper">
<resultMap type="com.ruoyi.flyingbook.domain.LarkTableRelation" id="LarkTableRelationResult">
<result property="id" column="id" />
<result property="larkCompanyRelationId" column="lark_company_relation_id" />
<result property="fromAppToken" column="from_app_token" />
<result property="fromTableId" column="from_table_id" />
<result property="fromColName" column="from_col_name" />
<result property="toAppToken" column="to_app_token" />
<result property="toTableId" column="to_table_id" />
<result property="toColName" column="to_col_name" />
<result property="colType" column="col_type" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
@ -21,18 +20,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectLarkTableRelationVo">
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
</sql>
<select id="selectLarkTableRelationList" parameterType="com.ruoyi.flyingbook.domain.LarkTableRelation" resultMap="LarkTableRelationResult">
<include refid="selectLarkTableRelationVo"/>
<where>
<if test="larkCompanyRelationId != null "> and lark_company_relation_id = #{larkCompanyRelationId}</if>
<if test="fromAppToken != null and fromAppToken != ''"> and from_app_token = #{fromAppToken}</if>
<if test="fromTableId != null and fromTableId != ''"> and from_table_id = #{fromTableId}</if>
<if test="fromColName != null and fromColName != ''"> and from_col_name like concat('%', #{fromColName}, '%')</if>
<if test="toAppToken != null and toAppToken != ''"> and to_app_token = #{toAppToken}</if>
<if test="toTableId != null and toTableId != ''"> and to_table_id = #{toTableId}</if>
<if test="toColName != null and toColName != ''"> and to_col_name like concat('%', #{toColName}, '%')</if>
<if test="colType != null "> and col_type = #{colType}</if>
<if test="flag != null "> and flag = #{flag}</if>
</where>
</select>
@ -46,11 +44,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into lark_table_relation
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="larkCompanyRelationId != null">lark_company_relation_id,</if>
<if test="fromAppToken != null">from_app_token,</if>
<if test="fromTableId != null">from_table_id,</if>
<if test="fromColName != null">from_col_name,</if>
<if test="toAppToken != null">to_app_token,</if>
<if test="toTableId != null">to_table_id,</if>
<if test="toColName != null">to_col_name,</if>
<if test="colType != null">col_type,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
@ -60,11 +57,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="larkCompanyRelationId != null">#{larkCompanyRelationId},</if>
<if test="fromAppToken != null">#{fromAppToken},</if>
<if test="fromTableId != null">#{fromTableId},</if>
<if test="fromColName != null">#{fromColName},</if>
<if test="toAppToken != null">#{toAppToken},</if>
<if test="toTableId != null">#{toTableId},</if>
<if test="toColName != null">#{toColName},</if>
<if test="colType != null">#{colType},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
@ -78,11 +74,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update lark_table_relation
<trim prefix="SET" suffixOverrides=",">
<if test="larkCompanyRelationId != null">lark_company_relation_id = #{larkCompanyRelationId},</if>
<if test="fromAppToken != null">from_app_token = #{fromAppToken},</if>
<if test="fromTableId != null">from_table_id = #{fromTableId},</if>
<if test="fromColName != null">from_col_name = #{fromColName},</if>
<if test="toAppToken != null">to_app_token = #{toAppToken},</if>
<if test="toTableId != null">to_table_id = #{toTableId},</if>
<if test="toColName != null">to_col_name = #{toColName},</if>
<if test="colType != null">col_type = #{colType},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>

@ -2,15 +2,15 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.LarkTableRowRelationMapper">
<mapper namespace="com.ruoyi.flyingbook.mapper.LarkTableRowRelationMapper">
<resultMap type="com.ruoyi.flyingbook.domain.LarkTableRowRelation" id="LarkTableRowRelationResult">
<result property="id" column="id"/>
<result property="larkCompanyRelationId" column="lark_company_relation_id" />
<result property="fromTableId" column="from_table_id" />
<result property="fromRow" column="from_row" />
<result property="toTableId" column="to_table_id" />
<result property="toRow" column="to_row" />
<result property="tableRelationId" column="table_relation_id"/>
<result property="fromId" column="from_id"/>
<result property="toId" column="to_id"/>
<result property="type" column="type"/>
<result property="subType" column="sub_type"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
@ -20,17 +20,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectLarkTableRowRelationVo">
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
</sql>
<select id="selectLarkTableRowRelationList" parameterType="com.ruoyi.flyingbook.domain.LarkTableRowRelation" resultMap="LarkTableRowRelationResult">
<select id="selectLarkTableRowRelationList" parameterType="com.ruoyi.flyingbook.domain.LarkTableRowRelation"
resultMap="LarkTableRowRelationResult">
<include refid="selectLarkTableRowRelationVo"/>
<where>
<if test="larkCompanyRelationId != null "> and lark_company_relation_id = #{larkCompanyRelationId}</if>
<if test="fromTableId != null and fromTableId != ''"> and from_table_id = #{fromTableId}</if>
<if test="fromRow != null and fromRow != ''"> and from_row = #{fromRow}</if>
<if test="toTableId != null and toTableId != ''"> and to_table_id = #{toTableId}</if>
<if test="toRow != null and toRow != ''"> and to_row = #{toRow}</if>
<if test="tableRelationId != null ">and table_relation_id = #{tableRelationId}</if>
<if test="fromId != null and fromId != ''">and from_id = #{fromId}</if>
<if test="toId != null and toId != ''">and to_id = #{toId}</if>
<if test="type != null and type != ''">and type = #{type}</if>
<if test="subType != null and subType != ''">and sub_type = #{subType}</if>
<if test="flag != null ">and flag = #{flag}</if>
</where>
</select>
@ -40,14 +53,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<insert id="insertLarkTableRowRelation" parameterType="com.ruoyi.flyingbook.domain.LarkTableRowRelation" useGeneratedKeys="true" keyProperty="id">
<insert id="insertLarkTableRowRelation" parameterType="com.ruoyi.flyingbook.domain.LarkTableRowRelation"
useGeneratedKeys="true" keyProperty="id">
insert into lark_table_row_relation
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="larkCompanyRelationId != null">lark_company_relation_id,</if>
<if test="fromTableId != null">from_table_id,</if>
<if test="fromRow != null">from_row,</if>
<if test="toTableId != null">to_table_id,</if>
<if test="toRow != null">to_row,</if>
<if test="tableRelationId != null">table_relation_id,</if>
<if test="fromId != null">from_id,</if>
<if test="toId != null">to_id,</if>
<if test="type != null">type,</if>
<if test="subType != null">sub_type,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
@ -56,11 +70,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="larkCompanyRelationId != null">#{larkCompanyRelationId},</if>
<if test="fromTableId != null">#{fromTableId},</if>
<if test="fromRow != null">#{fromRow},</if>
<if test="toTableId != null">#{toTableId},</if>
<if test="toRow != null">#{toRow},</if>
<if test="tableRelationId != null">#{tableRelationId},</if>
<if test="fromId != null">#{fromId},</if>
<if test="toId != null">#{toId},</if>
<if test="type != null">#{type},</if>
<if test="subType != null">#{subType},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
@ -73,11 +87,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updateLarkTableRowRelation" parameterType="com.ruoyi.flyingbook.domain.LarkTableRowRelation">
update lark_table_row_relation
<trim prefix="SET" suffixOverrides=",">
<if test="larkCompanyRelationId != null">lark_company_relation_id = #{larkCompanyRelationId},</if>
<if test="fromTableId != null">from_table_id = #{fromTableId},</if>
<if test="fromRow != null">from_row = #{fromRow},</if>
<if test="toTableId != null">to_table_id = #{toTableId},</if>
<if test="toRow != null">to_row = #{toRow},</if>
<if test="tableRelationId != null">table_relation_id = #{tableRelationId},</if>
<if test="fromId != null">from_id = #{fromId},</if>
<if test="toId != null">to_id = #{toId},</if>
<if test="type != null">type = #{type},</if>
<if test="subType != null">sub_type = #{subType},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
@ -89,7 +103,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<delete id="deleteLarkTableRowRelationById" parameterType="Long">
delete from lark_table_row_relation where id = #{id}
delete
from lark_table_row_relation
where id = #{id}
</delete>
<delete id="deleteLarkTableRowRelationByIds" parameterType="String">
@ -98,4 +114,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="queryListByTableRelationIdList" parameterType="Long" resultMap="LarkTableRowRelationResult">
<include refid="selectLarkTableRowRelationVo"/>
where table_relation_id in
<foreach collection="tableRelationIdList" item="tableRelationId" separator="," open="(" close=")">
#{tableRelationId}
</foreach>
</select>
</mapper>

@ -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;
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;
Loading…
Cancel
Save