Compare commits

...

2 Commits

Author SHA1 Message Date
YXY c129c09624 同步job修改唯一键信息
continuous-integration/drone/push Build is passing Details
11 months ago
YXY 6c4fd44463 同步job修改唯一键等信息
11 months ago

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

@ -37,6 +37,7 @@ import java.util.stream.Collectors;
/**
*
*
* @author yuxiangyong
* @create 2023-10-11 19:54
*/
@ -63,11 +64,11 @@ public abstract class CJTOperateCallBackAbstract {
*/
protected static final String REQUEST_ROOT_PATH = "https://openapi.chanjet.com";
public void execute(CJTEdiCallbackRequestVo req){
public void execute(CJTEdiCallbackRequestVo req) {
String operateCallBackFlag = buildCacheUniqueKey(RedisConstants.CJT_CALLBACK_OPERATE, req.getAppId() + req.getMsgType() + req.getVoucherId());
try {
Boolean operateFlag = redisCache.setCacheObjectIfAbsent(operateCallBackFlag, operateCallBackFlag, 10L, TimeUnit.MINUTES);
if (!operateFlag){
if (!operateFlag) {
return;
}
preHandle(req);
@ -75,27 +76,27 @@ public abstract class CJTOperateCallBackAbstract {
// resetTicket(req);
sync(req);
endHandle(req);
}catch (Exception e){
log.error("{} execute error",this.getClass().getSimpleName(),e);
if (req.getRetry() && req.getRetryCount() < 3){
} catch (Exception e) {
log.error("{} execute error", this.getClass().getSimpleName(), e);
if (req.getRetry() && req.getRetryCount() < 3) {
req.addRetryCount();
execute(req);
}else {
errorHandle(req,e);
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req,e));
} else {
errorHandle(req, e);
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req, e));
}
}finally {
} finally {
redisCache.deleteObject(operateCallBackFlag);
}
}
private void preHandle(CJTEdiCallbackRequestVo req){
if (req.getRetryCount() > 0){
private void preHandle(CJTEdiCallbackRequestVo req) {
if (req.getRetryCount() > 0) {
return;
}
Date date = new Date();
ErpLarkTempRelation erpLarkTempRelation = new ErpLarkTempRelation();
erpLarkTempRelation.setKey(req.getBody().getString("voucherID"));
erpLarkTempRelation.setKey(req.getVoucherId());
erpLarkTempRelation.setMethod(req.getMsgType());
erpLarkTempRelation.setLarkKey(req.getAppId());
erpLarkTempRelation.setCreateBy("System");
@ -106,32 +107,33 @@ public abstract class CJTOperateCallBackAbstract {
req.setTempId(erpLarkTempRelation.getId());
}
private void endHandle(CJTEdiCallbackRequestVo req){
if (req.getTempId() != null){
erpLarkTempRelationMapper.updateForCjt(FlagStatus.DELETED.getCode(), req.getTempId(),"");
private void endHandle(CJTEdiCallbackRequestVo req) {
if (req.getTempId() != null) {
erpLarkTempRelationMapper.updateForCjt(FlagStatus.DELETED.getCode(), req.getTempId(), "");
}
}
private void errorHandle(CJTEdiCallbackRequestVo req,Exception e){
if (req.getTempId() != null){
erpLarkTempRelationMapper.updateForCjt(FlagStatus.OK.getCode(), req.getTempId(),e.getMessage());
private void errorHandle(CJTEdiCallbackRequestVo req, Exception e) {
if (req.getTempId() != null) {
erpLarkTempRelationMapper.updateForCjt(FlagStatus.OK.getCode(), req.getTempId(), e.getMessage());
}
}
private void sync(CJTEdiCallbackRequestVo req){
private void sync(CJTEdiCallbackRequestVo req) {
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
LarkCJTRequestBody cjtRequestBody = new LarkCJTRequestBody(req.getVoucherId());
LarkCJTRequest cjtRequest = new LarkCJTRequest(getRequestUrl(), cjtAccountEnum.getAppKey(), cjtAccountEnum.getAppSecret(), generateToken(req),cjtRequestBody);
LarkCJTRequest cjtRequest = new LarkCJTRequest(getRequestUrl(), cjtAccountEnum.getAppKey(), cjtAccountEnum.getAppSecret(), generateToken(req), cjtRequestBody);
LarkOkHttpHelper.post(cjtRequest);
JSONObject jsonObject = requestCjt(cjtRequest);
syncRecord(req,jsonObject);
syncRecord(req, jsonObject);
}
/**
*
*
* @param req
*/
protected abstract void syncRecord(CJTEdiCallbackRequestVo req,JSONObject returnBody);
protected abstract void syncRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody);
/**
*
@ -143,52 +145,52 @@ public abstract class CJTOperateCallBackAbstract {
*/
protected abstract String getMethodUrl();
private void initContext(CJTEdiCallbackRequestVo req){
private void initContext(CJTEdiCallbackRequestVo req) {
LarkCompanyRelation companyRelation = req.getCompanyRelation();
String larkCompanyCode = req.getMsgTypeEnum().getLarkCompanyCode();
if (companyRelation == null){
if (companyRelation == null) {
LarkCompanyRelation queryCompany = new LarkCompanyRelation();
queryCompany.setAppType(larkCompanyCode);
queryCompany.setFlag(FlagStatus.OK.getCode());
queryCompany.setRemark(req.getAppId());
List<LarkCompanyRelation> larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(queryCompany);
if (CollectionUtils.isEmpty(larkCompanyRelations)){
throw new RuntimeException(String.format("%s 无larkCompany配置信息 appId:%s appType:%s",req.getMsgType(),req.getAppId(),larkCompanyCode));
if (CollectionUtils.isEmpty(larkCompanyRelations)) {
throw new RuntimeException(String.format("%s 无larkCompany配置信息 appId:%s appType:%s", req.getMsgType(), req.getAppId(), larkCompanyCode));
}
companyRelation = larkCompanyRelations.get(0);
req.setCompanyRelation(companyRelation);
}
LarkTableRelation tableRelation = req.getTableRelation();
if (tableRelation == null){
if (tableRelation == null) {
LarkTableRelation queryTable = new LarkTableRelation();
queryTable.setLarkCompanyRelationId(companyRelation.getId());
queryTable.setFlag(FlagStatus.OK.getCode());
List<LarkTableRelation> larkTableRelations = larkTableRelationMapper.selectLarkTableRelationList(queryTable);
if (CollectionUtils.isEmpty(larkTableRelations)){
throw new RuntimeException(String.format("%s 无larkTableRelation配置信息 appId:%s appType:%s larkCompanyId:%s",req.getMsgType(),req.getAppId(),larkCompanyCode,companyRelation.getId()));
if (CollectionUtils.isEmpty(larkTableRelations)) {
throw new RuntimeException(String.format("%s 无larkTableRelation配置信息 appId:%s appType:%s larkCompanyId:%s", req.getMsgType(), req.getAppId(), larkCompanyCode, companyRelation.getId()));
}
tableRelation = larkTableRelations.get(0);
req.setTableRelation(tableRelation);
}
}
private String buildRobotErrorCountMessage(CJTEdiCallbackRequestVo req,Exception e){
private String buildRobotErrorCountMessage(CJTEdiCallbackRequestVo req, Exception e) {
JSONObject body = new JSONObject();
body.put("cjtId",req.getAppId());
body.put("msgType",req.getMsgType());
body.put("cjtId", req.getAppId());
body.put("msgType", req.getMsgType());
LarkCompanyRelation companyRelation = req.getCompanyRelation();
if (companyRelation != null){
body.put("companyRelationId",companyRelation.getId());
if (companyRelation != null) {
body.put("companyRelationId", companyRelation.getId());
}
LarkTableRelation tableRelation = req.getTableRelation();
if (tableRelation != null){
body.put("tableRelationId",tableRelation.getId());
if (tableRelation != null) {
body.put("tableRelationId", tableRelation.getId());
}
body.put("errorInfo",e.getMessage());
body.put("errorInfo", e.getMessage());
return body.toJSONString();
}
protected LarkTableRequest buildLarkTableRequest(CJTEdiCallbackRequestVo req){
protected LarkTableRequest buildLarkTableRequest(CJTEdiCallbackRequestVo req) {
LarkTableRequest request = new LarkTableRequest();
request.setAppId(req.getLarkAppId());
request.setAppSecret(req.getLarkAppSecret());
@ -198,9 +200,6 @@ public abstract class CJTOperateCallBackAbstract {
}
protected void addRecord(CJTEdiCallbackRequestVo req, JSONObject header) {
//多维表格id
String toTableId = req.getLarkToTableId();
@ -214,24 +213,24 @@ public abstract class CJTOperateCallBackAbstract {
for (int i = 0; i < details.size(); i++) {
try {
JSONObject detail = details.getJSONObject(i);
String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum);
Map<String, Object> larkBody = buildLarkBody(header, detail,cjtAccountEnum);
String uniqueKey = buildUniqueKey(toTableId, header, detail, cjtAccountEnum);
Map<String, Object> larkBody = buildLarkBody(header, detail, cjtAccountEnum);
request.setBody(larkBody);
CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request);
String larkKey = respBody.getRecord().getRecordId();
relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(),toTableId,req.getVoucherId()));
}catch (Exception e){
relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(), toTableId, req.getVoucherId()));
} catch (Exception e) {
errorList.add(e.getMessage());
}
}
if (CollectionUtils.isEmpty(errorList)){
if (CollectionUtils.isEmpty(errorList)) {
req.setRetry(Boolean.FALSE);
}
if (!org.springframework.util.CollectionUtils.isEmpty(relationList)) {
erpLarkRelationMapper.batchInsert(relationList);
}
if (CollectionUtils.isNotEmpty(errorList)){
throw new RuntimeException(String.join(",",errorList));
if (CollectionUtils.isNotEmpty(errorList)) {
throw new RuntimeException(String.join(",", errorList));
}
@ -247,65 +246,59 @@ public abstract class CJTOperateCallBackAbstract {
LarkTableRequest request = this.buildLarkTableRequest(req);
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
//获取已经存在的明细
Map<String, ErpLarkRelation> existMap = getExistRecords(req).stream().collect(Collectors.toMap(ErpLarkRelation::getKey, Function.identity(), (K1, k2) -> K1));
if (existMap != null && existMap.size() > 0){
List<ErpLarkRelation> collect = existMap.values().stream().collect(Collectors.toList());
toTableId = collect.get(0).getLarkTable();
List<ErpLarkRelation> existRecords = getExistRecords(req);
if (CollectionUtils.isNotEmpty(existRecords)) {
toTableId = existRecords.get(0).getLarkTable();
}
//因为可能存在修改的情况,所以这里全部删除重新创建
operateDelete(req, existRecords);
List<String> errorList = new ArrayList<>();
for (int i = 0; i < details.size(); i++) {
JSONObject detail = details.getJSONObject(i);
String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum);
Map<String, Object> larkBody = buildLarkBody(header, detail,cjtAccountEnum);
String uniqueKey = buildUniqueKey(toTableId, header, detail, cjtAccountEnum);
Map<String, Object> larkBody = buildLarkBody(header, detail, cjtAccountEnum);
request.setBody(larkBody);
if (existMap.containsKey(uniqueKey)){
try {
ErpLarkRelation erpLarkRelation = existMap.get(uniqueKey);
request.setRecord(erpLarkRelation.getLarkKey());
request.setAppTable(erpLarkRelation.getLarkTable());
larkTableHelper.updateTableRecord(request);
}catch (Exception e){
errorList.add(e.getMessage());
}
}else {
try {
request.setRecord(null);
request.setAppTable(toTableId);
CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request);
String larkKey = respBody.getRecord().getRecordId();
waitCreateRelationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(),toTableId,req.getVoucherId()));
}catch (Exception e){
waitCreateRelationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(), toTableId, req.getVoucherId()));
} catch (Exception e) {
errorList.add(e.getMessage());
}
}
}
if (CollectionUtils.isEmpty(errorList)){
if (CollectionUtils.isEmpty(errorList)) {
req.setRetry(Boolean.FALSE);
}
if (!org.springframework.util.CollectionUtils.isEmpty(waitCreateRelationList)) {
erpLarkRelationMapper.batchInsert(waitCreateRelationList);
}
if (CollectionUtils.isNotEmpty(errorList)){
throw new RuntimeException(String.join(",",errorList));
if (CollectionUtils.isNotEmpty(errorList)) {
throw new RuntimeException(String.join(",", errorList));
}
}
protected abstract String getDetailName();
/**
* key
*
* @return
*/
protected abstract String buildUniqueKey(String toTableId, JSONObject header, JSONObject detail,CjtAccountEnum cjtAccountEnum);
protected abstract String buildUniqueKey(String toTableId, JSONObject header, JSONObject detail, CjtAccountEnum cjtAccountEnum);
/**
* body
*
* @return
*/
protected abstract Map<String, Object> buildLarkBody(JSONObject header, JSONObject detail,CjtAccountEnum cjtAccountEnum);
protected abstract Map<String, Object> buildLarkBody(JSONObject header, JSONObject detail, CjtAccountEnum cjtAccountEnum);
//构建飞书行与cjt唯一键的对应关系对象
private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt,String tableId,String cjtId) {
private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt, String tableId, String cjtId) {
ErpLarkRelation erpLarkRelation = new ErpLarkRelation();
erpLarkRelation.setKey(key);
erpLarkRelation.setCjtId(cjtId);
@ -320,7 +313,7 @@ public abstract class CJTOperateCallBackAbstract {
return erpLarkRelation;
}
protected Object getSpecialKey(JSONObject detail,String key){
protected Object getSpecialKey(JSONObject detail, String key) {
JSONArray dynamicPropertyKeys = detail.getJSONArray("DynamicPropertyKeys");
for (int i = 0; i < dynamicPropertyKeys.size(); i++) {
if (key.equals(dynamicPropertyKeys.get(i))) {
@ -333,18 +326,24 @@ public abstract class CJTOperateCallBackAbstract {
/**
*
*
* @param req
*/
protected void deleteRecord(CJTEdiCallbackRequestVo req){
LarkTableRequest request = new LarkTableRequest(req.getLarkAppId(), req.getLarkAppSecret(), req.getLarkToAppToken(),null);
Map<String,List<String>> waitDeleteLarkMap = new HashMap<>();
protected void deleteRecord(CJTEdiCallbackRequestVo req) {
List<ErpLarkRelation> relationList = getExistRecords(req);
operateDelete(req, relationList);
}
private void operateDelete(CJTEdiCallbackRequestVo req, List<ErpLarkRelation> relationList) {
LarkTableRequest request = new LarkTableRequest(req.getLarkAppId(), req.getLarkAppSecret(), req.getLarkToAppToken(), null);
Map<String, List<String>> waitDeleteLarkMap = new HashMap<>();
List<Long> waitDeleteIdList = new ArrayList<>();
for (ErpLarkRelation record : relationList) {
String appTable = record.getLarkTable();
List<String> waitDeleteLarkList = waitDeleteLarkMap.getOrDefault(appTable, new ArrayList<>());
waitDeleteLarkList.add(record.getLarkKey());
waitDeleteLarkMap.put(appTable,waitDeleteLarkList);
waitDeleteLarkMap.put(appTable, waitDeleteLarkList);
waitDeleteIdList.add(record.getId());
}
if (!waitDeleteLarkMap.isEmpty()) {
@ -360,7 +359,8 @@ public abstract class CJTOperateCallBackAbstract {
}
}
protected List<ErpLarkRelation> getExistRecords(CJTEdiCallbackRequestVo req){
protected List<ErpLarkRelation> getExistRecords(CJTEdiCallbackRequestVo req) {
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
ErpLarkRelation erpLarkRelation = new ErpLarkRelation();
erpLarkRelation.setRemark(cjtAccountEnum.getCode());
@ -392,7 +392,6 @@ public abstract class CJTOperateCallBackAbstract {
// String ticket = (String) redisCache.getCacheObject(ticketCacheKey);
// req.setTicket(ticket);
// }
private String buildCacheUniqueKey(String key, String appKey) {
return String.format("%s:%s", key, appKey);
}
@ -404,10 +403,10 @@ public abstract class CJTOperateCallBackAbstract {
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
String tokenCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, cjtAccountEnum.getAppKey());
String openToken = (String) redisCache.getCacheObject(tokenCacheKey);
if (!StringUtils.isEmpty(openToken)){
if (!StringUtils.isEmpty(openToken)) {
req.setOpenToken(openToken);
return openToken;
}else {
} else {
throw new RuntimeException("token不存在");
}
}
@ -424,6 +423,7 @@ public abstract class CJTOperateCallBackAbstract {
}
return responseBody.getData();
}
protected String buildErrorBody(LarkCJTRequest req, String errorMessage) {
JSONObject errorInfo = new JSONObject();
errorInfo.put("url", req.getUrl());

@ -43,8 +43,8 @@ public class ManufactureOrderSyncCallOperate extends CJTOperateCallBackAbstract
StringBuilder sb = new StringBuilder();
if (cjtAccountEnum.getCode().equals(CjtAccountEnum.TWO.getCode())){
sb.append(detail.get("Quantity")).append("_");
sb.append(getSpecialKey(detail, "pubuserdefnvc3")).append("_");
sb.append(getSpecialKey(detail, "pubuserdefnvc3")).append("_");
sb.append(getSpecialKey(detail, "pubuserdefnvc2")).append("_");
sb.append(getSpecialKey(detail, "priuserdefnvc1")).append("_");
}else {
sb.append(detail.get("SourceVoucherCode")).append("_");
sb.append(header.get("Code")).append("_");

@ -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",

@ -15,6 +15,7 @@ import com.ruoyi.flyingbook.domain.LarkCompanyRelation;
import com.ruoyi.flyingbook.domain.LarkTableRelation;
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import com.ruoyi.flyingbook.mapper.ErpLarkRelationMainMapper;
import com.ruoyi.flyingbook.mapper.ErpLarkRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper;
import com.ruoyi.quartz.domain.*;
@ -48,7 +49,7 @@ public abstract class SyncAccountsJobAbstract {
@Autowired
private RedisCache redisCache;
@Autowired
protected ErpLarkRelationMainMapper erpLarkRelationMapper;
protected ErpLarkRelationMapper erpLarkRelationMapper;
@Autowired
private LarkCompanyRelationMapper larkCompanyRelationMapper;
@Autowired
@ -92,25 +93,26 @@ public abstract class SyncAccountsJobAbstract {
private static final String REQUEST_GENERATE_TOKEN_PATH = REQUEST_ROOT_PATH + "/v1/common/auth/selfBuiltApp/generateToken";
private Boolean asynchronousCheck(LocalDateTime now, String cjt) {
int hour = now.getHour();
if ((hour == 1 && CjtAccountEnum.ONE.getCode().equals(cjt))
|| (hour == 3 && CjtAccountEnum.TWO.getCode().equals(cjt))) {
//目前只给畅捷通账号二加工单开补偿
// if ((AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode())
// && CjtAccountEnum.TWO.getCode().equals(cjt)) || (AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode())
// && CjtAccountEnum.ONE.getCode().equals(cjt))) {
String asynchronous = getAsynchronousKey(cjt);
Object cacheObject = redisCache.getCacheObject(asynchronous);
if (cacheObject != null) {
return Boolean.FALSE;
}
redisCache.setCacheObject(asynchronous, asynchronous, 2, TimeUnit.HOURS);
return Boolean.TRUE;
// } else {
// return false;
// }
}
return false;
// int hour = now.getHour();
// if ((hour == 1 && CjtAccountEnum.ONE.getCode().equals(cjt))
// || (hour == 3 && CjtAccountEnum.TWO.getCode().equals(cjt))) {
// //目前只给畅捷通账号二加工单开补偿
//// if ((AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode())
//// && CjtAccountEnum.TWO.getCode().equals(cjt)) || (AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode())
//// && CjtAccountEnum.ONE.getCode().equals(cjt))) {
// String asynchronous = getAsynchronousKey(cjt);
// Object cacheObject = redisCache.getCacheObject(asynchronous);
// if (cacheObject != null) {
// return Boolean.FALSE;
// }
// redisCache.setCacheObject(asynchronous, asynchronous, 2, TimeUnit.HOURS);
// return Boolean.TRUE;
//// } else {
//// return false;
//// }
// }
// return false;
}
private String getAsynchronousKey(String cjt) {
@ -366,7 +368,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 +391,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 +415,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,7 +433,8 @@ public abstract class SyncAccountsJobAbstract {
if (CollectionUtils.isEmpty(uniqueKeyList)) {
return new HashMap<>();
}
return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt)
//todo yxy 这里记得加上表id
return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt,addRecordRequest.getAppTable())
.stream().collect(Collectors.toMap(ErpLarkRelation::getKey, ErpLarkRelation::getLarkKey, (k1, k2) -> k1));
}
@ -474,6 +475,7 @@ public abstract class SyncAccountsJobAbstract {
createTimeKey = "createdtime";
}
String createTime = null;
String voucherId = null;
for (List<String> row : rows) {
String uniqueKey = null;
try {
@ -482,20 +484,28 @@ 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;
}
CJTSyncTypeRelation cjtSyncTypeRelation = queryFieldsMap.get(rowKey);
if (uniqueFields.contains(rowKey)) {
if (cjtSyncTypeRelation != null && TableFieldTypeEnum.NUMBER.equals(cjtSyncTypeRelation.getType())){
uniqueKeyList.add(Double.valueOf(value) + "0");
}else {
uniqueKeyList.add(value);
}
CJTSyncTypeRelation cjtSyncTypeRelation = queryFieldsMap.get(rowKey);
}
if (cjtSyncTypeRelation == null) {
continue;
}
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 +517,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 +552,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