|
|
@ -3,6 +3,7 @@ package com.ruoyi.quartz.task.CJT;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
import com.lark.oapi.service.bitable.v1.model.AppTableRecord;
|
|
|
|
import com.lark.oapi.service.bitable.v1.model.AppTableRecord;
|
|
|
|
import com.lark.oapi.service.bitable.v1.model.BatchCreateAppTableRecordRespBody;
|
|
|
|
import com.lark.oapi.service.bitable.v1.model.BatchCreateAppTableRecordRespBody;
|
|
|
|
|
|
|
|
import com.lark.oapi.service.bitable.v1.model.ListAppTableRecordRespBody;
|
|
|
|
import com.ruoyi.common.constant.RedisConstants;
|
|
|
|
import com.ruoyi.common.constant.RedisConstants;
|
|
|
|
import com.ruoyi.common.core.redis.RedisCache;
|
|
|
|
import com.ruoyi.common.core.redis.RedisCache;
|
|
|
|
import com.ruoyi.common.enums.AppType;
|
|
|
|
import com.ruoyi.common.enums.AppType;
|
|
|
@ -94,10 +95,11 @@ public class SyncReportJob {
|
|
|
|
initLarkInfo(context);
|
|
|
|
initLarkInfo(context);
|
|
|
|
//重置ticket
|
|
|
|
//重置ticket
|
|
|
|
resetTicket(context);
|
|
|
|
resetTicket(context);
|
|
|
|
preSync(context);
|
|
|
|
// preSync(context);
|
|
|
|
|
|
|
|
cleanTableDate(context);
|
|
|
|
//执行分页同步
|
|
|
|
//执行分页同步
|
|
|
|
sync(context);
|
|
|
|
sync(context);
|
|
|
|
finish(context);
|
|
|
|
// finish(context);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("{} 执行失败", getClassName(), e);
|
|
|
|
log.error("{} 执行失败", getClassName(), e);
|
|
|
|
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(e));
|
|
|
|
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(e));
|
|
|
@ -212,18 +214,18 @@ public class SyncReportJob {
|
|
|
|
|
|
|
|
|
|
|
|
private void preSync(CJTJobContext context) {
|
|
|
|
private void preSync(CJTJobContext context) {
|
|
|
|
CjtAccountEnum cjtAccountEnum = CjtAccountEnum.getByCode(context.getCjt());
|
|
|
|
CjtAccountEnum cjtAccountEnum = CjtAccountEnum.getByCode(context.getCjt());
|
|
|
|
if (cjtAccountEnum == null){
|
|
|
|
if (cjtAccountEnum == null) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Long maxId = erpLarkTempRelationMapper.selectMaxId(getReportName(), FlagStatus.OK.getCode(),cjtAccountEnum.getAppKey());
|
|
|
|
Long maxId = erpLarkTempRelationMapper.selectMaxId(getReportName(), FlagStatus.OK.getCode(), cjtAccountEnum.getAppKey());
|
|
|
|
context.setErpLarkTempRelationMaxId(maxId);
|
|
|
|
context.setErpLarkTempRelationMaxId(maxId);
|
|
|
|
erpLarkTempRelationMapper.updateByMethod(getReportName(), FlagStatus.DELETED.getCode(),maxId,cjtAccountEnum.getAppKey());
|
|
|
|
erpLarkTempRelationMapper.updateByMethod(getReportName(), FlagStatus.DELETED.getCode(), maxId, cjtAccountEnum.getAppKey());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void finish(CJTJobContext context) {
|
|
|
|
private void finish(CJTJobContext context) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
CjtAccountEnum cjtAccountEnum = CjtAccountEnum.getByCode(context.getCjt());
|
|
|
|
CjtAccountEnum cjtAccountEnum = CjtAccountEnum.getByCode(context.getCjt());
|
|
|
|
if (cjtAccountEnum == null){
|
|
|
|
if (cjtAccountEnum == null) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LarkCompanyRelation companyRelation = context.getCompanyRelation();
|
|
|
|
LarkCompanyRelation companyRelation = context.getCompanyRelation();
|
|
|
@ -250,17 +252,43 @@ public class SyncReportJob {
|
|
|
|
request.setRecords(larkKeyList.toArray(new String[0]));
|
|
|
|
request.setRecords(larkKeyList.toArray(new String[0]));
|
|
|
|
larkTableHelper.deleteTableRecordBatch(request);
|
|
|
|
larkTableHelper.deleteTableRecordBatch(request);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
erpLarkTempRelationMapper.deleteByMethod(getReportName(), FlagStatus.DELETED.getCode(),context.getErpLarkTempRelationMaxId(),cjtAccountEnum.getAppKey());
|
|
|
|
erpLarkTempRelationMapper.deleteByMethod(getReportName(), FlagStatus.DELETED.getCode(), context.getErpLarkTempRelationMaxId(), cjtAccountEnum.getAppKey());
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.info("Sync report job finish error", e);
|
|
|
|
log.info("Sync report job finish error", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void cleanTableDate(CJTJobContext context) {
|
|
|
|
|
|
|
|
CjtAccountEnum cjtAccountEnum = CjtAccountEnum.getByCode(context.getCjt());
|
|
|
|
|
|
|
|
if (cjtAccountEnum == null) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
LarkCompanyRelation companyRelation = context.getCompanyRelation();
|
|
|
|
|
|
|
|
LarkTableRelation tableRelation = context.getTableRelation();
|
|
|
|
|
|
|
|
LarkTableRequest request = new LarkTableRequest(companyRelation.getAppId(), companyRelation.getSecret(), tableRelation.getToAppToken(), tableRelation.getToTableId());
|
|
|
|
|
|
|
|
request.setPageSize(500);
|
|
|
|
|
|
|
|
AppTableRecord[] items = null;
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
List<String> larkKeyList = new ArrayList<>();
|
|
|
|
|
|
|
|
ListAppTableRecordRespBody respBody = larkTableHelper.listTableRecord(request);
|
|
|
|
|
|
|
|
items = respBody.getItems();
|
|
|
|
|
|
|
|
for (AppTableRecord item : items) {
|
|
|
|
|
|
|
|
larkKeyList.add(item.getRecordId());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
request.setRecords(larkKeyList.toArray(new String[0]));
|
|
|
|
|
|
|
|
larkTableHelper.deleteTableRecordBatch(request);
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
log.info("Sync report job finish error", e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} while (items != null && items.length > 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private Boolean executeDetail(CJTJobContext context, CJTRequest cjtRequest, LarkTableRequest addRecordRequest) {
|
|
|
|
private Boolean executeDetail(CJTJobContext context, CJTRequest cjtRequest, LarkTableRequest addRecordRequest) {
|
|
|
|
cjtRequest.setOpenToken(generateToken(context));
|
|
|
|
cjtRequest.setOpenToken(generateToken(context));
|
|
|
|
//请求接口并序列化数据
|
|
|
|
//请求接口并序列化数据
|
|
|
|
CJTResponseReportBodyDetail bodyDetail = request(cjtRequest);
|
|
|
|
CJTResponseReportBodyDetail bodyDetail = request(cjtRequest);
|
|
|
|
if (bodyDetail == null){
|
|
|
|
if (bodyDetail == null) {
|
|
|
|
return Boolean.FALSE;
|
|
|
|
return Boolean.FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//实际返回数据
|
|
|
|
//实际返回数据
|
|
|
@ -293,7 +321,6 @@ public class SyncReportJob {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
//错误唯一键
|
|
|
|
//错误唯一键
|
|
|
|
List<AppTableRecord> list = new ArrayList<>();
|
|
|
|
List<AppTableRecord> list = new ArrayList<>();
|
|
|
|
List<ErpLarkTempRelation> waitCreateList = new ArrayList<>();
|
|
|
|
|
|
|
|
for (CJTResponseReportBodyDetailRow row : rows) {
|
|
|
|
for (CJTResponseReportBodyDetailRow row : rows) {
|
|
|
|
Map<String, Object> body = buildLarkBody(row);
|
|
|
|
Map<String, Object> body = buildLarkBody(row);
|
|
|
|
addRecordRequest.setBody(body);
|
|
|
|
addRecordRequest.setBody(body);
|
|
|
@ -301,16 +328,10 @@ public class SyncReportJob {
|
|
|
|
appTableRecord.setFields(body);
|
|
|
|
appTableRecord.setFields(body);
|
|
|
|
list.add(appTableRecord);
|
|
|
|
list.add(appTableRecord);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (CollectionUtils.isNotEmpty(list)){
|
|
|
|
if (CollectionUtils.isNotEmpty(list)) {
|
|
|
|
addRecordRequest.setAppTableRecords(list.toArray(new AppTableRecord[0]));
|
|
|
|
addRecordRequest.setAppTableRecords(list.toArray(new AppTableRecord[0]));
|
|
|
|
//在飞书创建一行,并根据创建返回的行id在本地保留一条映射纪律
|
|
|
|
//在飞书创建一行,并根据创建返回的行id在本地保留一条映射纪律
|
|
|
|
BatchCreateAppTableRecordRespBody resp = larkTableHelper.addTableRecordBatch(addRecordRequest);
|
|
|
|
larkTableHelper.addTableRecordBatch(addRecordRequest);
|
|
|
|
for (AppTableRecord record : resp.getRecords()) {
|
|
|
|
|
|
|
|
buildTempList(waitCreateList,record.getRecordId(),cjt);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(waitCreateList)){
|
|
|
|
|
|
|
|
erpLarkTempRelationMapper.batchInsert(waitCreateList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("{} addOrUpdate exception", this.getClassName(), e);
|
|
|
|
log.error("{} addOrUpdate exception", this.getClassName(), e);
|
|
|
@ -318,9 +339,9 @@ public class SyncReportJob {
|
|
|
|
return errorKey;
|
|
|
|
return errorKey;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void buildTempList(List<ErpLarkTempRelation> waitCreateList,String recordId, String cjt){
|
|
|
|
private void buildTempList(List<ErpLarkTempRelation> waitCreateList, String recordId, String cjt) {
|
|
|
|
CjtAccountEnum byCode = CjtAccountEnum.getByCode(cjt);
|
|
|
|
CjtAccountEnum byCode = CjtAccountEnum.getByCode(cjt);
|
|
|
|
if (byCode == null){
|
|
|
|
if (byCode == null) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ErpLarkTempRelation erpLarkTempRelation = new ErpLarkTempRelation();
|
|
|
|
ErpLarkTempRelation erpLarkTempRelation = new ErpLarkTempRelation();
|
|
|
|