同步job修改唯一键等信息

畅捷通同步方案更新
YXY 11 months ago
parent 8c397edad7
commit 6c4fd44463

@ -65,7 +65,7 @@ public interface ErpLarkRelationMapper
public List<ErpLarkRelation> queryListByKeyList(@Param("keyList") List<String> keyList,@Param("method") String method);
public List<ErpLarkRelation> queryListByKeyListAndRemark(@Param("keyList") List<String> keyList,@Param("method") String method,@Param("remark") String remark);
public List<ErpLarkRelation> queryListByKeyListAndRemark(@Param("keyList") List<String> keyList,@Param("method") String method,@Param("remark") String remark,@Param("tableId") String tableId);
public List<String> queryWaitDeleteRecordList(@Param("currentDay") String currentDay,@Param("method") String method,@Param("remark") String remark);
public void deleteRecordList(@Param("currentDay") String currentDay,@Param("method") String method,@Param("remark") String remark);
/**

@ -54,7 +54,7 @@
<select id="queryListByKeyListAndRemark" resultMap="ErpLarkRelationResult">
select `key`, `method`,lark_key
from erp_lark_relation
where `method` = #{method} and remark = #{remark} and `key` in
where `method` = #{method} and lark_table = #{tableId} and remark = #{remark} and `key` in
<foreach collection="keyList" open="(" separator="," close=")" item="item">
#{item}
</foreach>

@ -66,6 +66,7 @@ public class ManufactureOrderSyncJob extends SyncAccountsJobAbstract {
@Override
protected List<String> getQueryFields() {
return Arrays.asList(
"ManufactureOrder.ID",
"ManufactureOrder.VoucherDate",
"ManufactureOrder.ManufactureOrderDetails.SourceVoucherCode",
"ManufactureOrder.Code",

@ -63,6 +63,7 @@ public class PurchaseArrivalOpenSyncJob extends SyncAccountsJobAbstract{
@Override
protected List<String> getQueryFields() {
return Arrays.asList(
"PurchaseArrival.ID",
"PurchaseArrival.PurchaseOrderCode",
"PurchaseArrival.Details.Inventory.Code",
"PurchaseArrival.Details.Inventory.Name",

@ -53,6 +53,7 @@ public class PurchaseOrderSyncJob extends SyncAccountsJobAbstract{
@Override
protected List<String> getQueryFields() {
return Arrays.asList(
"PurchaseOrder.ID",
"PurchaseOrder.VoucherDate",
"PurchaseOrder.Code",
"PurchaseOrder.Partner.Name",

@ -69,6 +69,7 @@ public class SaleDeliverySyncJob extends SyncAccountsJobAbstract {
@Override
protected List<String> getQueryFields() {
return Arrays.asList(
"SaleDelivery.ID",
"SaleDelivery.Code",
"SaleDelivery.Customer.Name",
"SaleDelivery.BusinessType.Name",

@ -60,6 +60,7 @@ public class SaleDispatchSyncJob extends SyncAccountsJobAbstract{
@Override
protected List<String> getQueryFields() {
return Arrays.asList(
"RDRecord.Id",
"RDRecord.RDRecordDetails.SourceVoucherCode",
"RDRecord.VoucherDate",
"RDRecord.Code",

@ -67,6 +67,7 @@ public class SaleOrderSyncJob extends SyncAccountsJobAbstract{
@Override
protected List<String> getQueryFields() {
return Arrays.asList(
"SaleOrder.ID",
"SaleOrder.voucherdate",
"SaleOrder.code",
"SaleOrder.createdtime",

@ -366,7 +366,6 @@ public abstract class SyncAccountsJobAbstract {
List<List<String>> rows = new ArrayList<>();
do {
try {
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
//初始化数据
if (cjtRequestBody == null) {
cjtRequestBody = new CJTRequestBody(page, PAGE_SIZE, getQueryFields(), getQueryCondition(context));
@ -390,7 +389,6 @@ public abstract class SyncAccountsJobAbstract {
throw new RuntimeException(String.format("存在同步失败的记录 %s", errorKey));
}
}
dataSourceTransactionManager.commit(transactionStatus);
} catch (Exception e) {
log.error("{} exception", this.getClassName(), e);
errorMessage = buildErrorBody(cjtRequest, e.getMessage());
@ -415,7 +413,7 @@ public abstract class SyncAccountsJobAbstract {
midList.add(row.get(i));
}
}
String uniqueKey = String.join("_", midList).toUpperCase() + "_" + addRecordRequest.getAppTable();
String uniqueKey = String.join("_", midList).toUpperCase();
result.add(uniqueKey);
}
}
@ -433,6 +431,7 @@ public abstract class SyncAccountsJobAbstract {
if (CollectionUtils.isEmpty(uniqueKeyList)) {
return new HashMap<>();
}
//todo yxy 这里记得加上表id
return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt)
.stream().collect(Collectors.toMap(ErpLarkRelation::getKey, ErpLarkRelation::getLarkKey, (k1, k2) -> k1));
}
@ -474,6 +473,7 @@ public abstract class SyncAccountsJobAbstract {
createTimeKey = "createdtime";
}
String createTime = null;
String voucherId = null;
for (List<String> row : rows) {
String uniqueKey = null;
try {
@ -482,9 +482,13 @@ public abstract class SyncAccountsJobAbstract {
for (int i = 0; i < row.size(); i++) {
String rowKey = keyList.get(i);
String value = row.get(i);
if (createTimeKey.equals(rowKey.toLowerCase())){
String lowerCaseRowKey = rowKey.toLowerCase();
if (createTimeKey.equals(lowerCaseRowKey)){
createTime = value;
}
if ("id".equals(lowerCaseRowKey)){
voucherId = value;
}
if (uniqueFields.contains(rowKey)) {
uniqueKeyList.add(value);
}
@ -495,7 +499,7 @@ public abstract class SyncAccountsJobAbstract {
String larkLabel = cjtSyncTypeRelation.getLarkFileName();
body.put(larkLabel, this.changeValueType(value, cjtSyncTypeRelation));
}
uniqueKey = String.join("_", uniqueKeyList).toUpperCase() + "_" + addRecordRequest.getAppTable();
uniqueKey = String.join("_", uniqueKeyList).toUpperCase();
Boolean existFlag = redisCache.setCacheObjectIfAbsent("CJT_JOB_CACHE:"+uniqueKey, "1", 2L, TimeUnit.HOURS);
if (repeatMap.containsKey(uniqueKey) || !existFlag) {
continue;
@ -507,7 +511,7 @@ public abstract class SyncAccountsJobAbstract {
//在飞书创建一行并根据创建返回的行id在本地保留一条映射纪律
CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(addRecordRequest);
larkKey = respBody.getRecord().getRecordId();
relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjt, asynchronous,createTime));
relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjt, asynchronous,createTime,voucherId,addRecordRequest.getAppTable()));
} else {
if (!AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.equals(syncLarkAppType())) {
//根据本地保留映射确认飞书的更新行更新后防止影响后续更新需要将行id进行置空
@ -542,9 +546,11 @@ public abstract class SyncAccountsJobAbstract {
}
//构建飞书行与cjt唯一键的对应关系对象
private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt, Boolean asynchronous,String createTime) {
private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt, Boolean asynchronous,String createTime,String voucherID,String tableId) {
ErpLarkRelation erpLarkRelation = new ErpLarkRelation();
erpLarkRelation.setKey(key);
erpLarkRelation.setCjtId(voucherID);
erpLarkRelation.setLarkTable(tableId);
erpLarkRelation.setLarkKey(larkKey);
erpLarkRelation.setMethod(getRequestUrl());
erpLarkRelation.setFlag(FlagStatus.OK.getCode());

Loading…
Cancel
Save