同步job修改唯一键信息
continuous-integration/drone/push Build is passing Details

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

@ -37,6 +37,7 @@ import java.util.stream.Collectors;
/**
*
*
* @author yuxiangyong
* @create 2023-10-11 19:54
*/
@ -95,7 +96,7 @@ public abstract class CJTOperateCallBackAbstract {
}
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");
@ -129,6 +130,7 @@ public abstract class CJTOperateCallBackAbstract {
/**
*
*
* @param req
*/
protected abstract void syncRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody);
@ -198,9 +200,6 @@ public abstract class CJTOperateCallBackAbstract {
}
protected void addRecord(CJTEdiCallbackRequestVo req, JSONObject header) {
//多维表格id
String toTableId = req.getLarkToTableId();
@ -247,27 +246,18 @@ 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);
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);
@ -278,10 +268,10 @@ public abstract class CJTOperateCallBackAbstract {
errorList.add(e.getMessage());
}
}
}
if (CollectionUtils.isEmpty(errorList)) {
req.setRetry(Boolean.FALSE);
}
if (!org.springframework.util.CollectionUtils.isEmpty(waitCreateRelationList)) {
erpLarkRelationMapper.batchInsert(waitCreateRelationList);
}
@ -290,16 +280,19 @@ public abstract class CJTOperateCallBackAbstract {
}
}
protected abstract String getDetailName();
/**
* key
*
* @return
*/
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);
@ -333,12 +326,18 @@ public abstract class CJTOperateCallBackAbstract {
/**
*
*
* @param req
*/
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<ErpLarkRelation> relationList = getExistRecords(req);
List<Long> waitDeleteIdList = new ArrayList<>();
for (ErpLarkRelation record : relationList) {
String appTable = record.getLarkTable();
@ -360,6 +359,7 @@ public abstract class CJTOperateCallBackAbstract {
}
}
protected List<ErpLarkRelation> getExistRecords(CJTEdiCallbackRequestVo req) {
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
ErpLarkRelation erpLarkRelation = new ErpLarkRelation();
@ -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);
}
@ -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("_");

@ -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) {
@ -432,7 +434,7 @@ public abstract class SyncAccountsJobAbstract {
return new HashMap<>();
}
//todo yxy 这里记得加上表id
return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt)
return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt,addRecordRequest.getAppTable())
.stream().collect(Collectors.toMap(ErpLarkRelation::getKey, ErpLarkRelation::getLarkKey, (k1, k2) -> k1));
}
@ -489,10 +491,14 @@ public abstract class SyncAccountsJobAbstract {
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;
}

Loading…
Cancel
Save