diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java index 96a4682..a2d0625 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/odoo/OdooAbstrackob.java @@ -108,10 +108,11 @@ public abstract class OdooAbstrackob { LarkCompanyRelation companyRelation = context.getCompanyRelation(); LarkTableRelation tableRelation = context.getTableRelation(); LarkTableRequest larkRequest = new LarkTableRequest(companyRelation.getAppId(), companyRelation.getSecret(), tableRelation.getToAppToken(), tableRelation.getToTableId()); + List retryPageList = new ArrayList<>(); //待创建关联关系 do { List waitCreateRelation = new ArrayList<>(); - dateList = getDate(context, pageMap, errorList,context.getWarehouseId()); + dateList = getDate(context, pageMap,context.getWarehouseId(),retryPageList); List midDateList = dateList.stream().map(r -> { return (JSONObject)JSONObject.toJSON(r); }).collect(Collectors.toList()); @@ -126,6 +127,29 @@ public abstract class OdooAbstrackob { } pageMap.put(PAGE_OFFSET_KEY,pageMap.get(PAGE_OFFSET_KEY) + PAGE_SIZE); } while (dateList == null || (CollectionUtils.isNotEmpty(dateList) && dateList.size() == PAGE_SIZE)); + if (CollectionUtils.isNotEmpty(retryPageList)){ + try { + for (Integer page : retryPageList) { + pageMap.put(PAGE_OFFSET_KEY,page + PAGE_SIZE); + List waitCreateRelation = new ArrayList<>(); + dateList = getDate(context, pageMap,context.getWarehouseId(),null); + List midDateList = dateList.stream().map(r -> { + return (JSONObject)JSONObject.toJSON(r); + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(midDateList)){ + Map relationMap = getLarkRelation(midDateList,context.getWarehouseId()); + for (JSONObject jsonObject : midDateList) { + sync(jsonObject, errorList, relationMap, larkRequest,waitCreateRelation,context.getWarehouseId()); + } + } + if (CollectionUtils.isNotEmpty(waitCreateRelation)){ + erpLarkRelationMapper.batchInsert(waitCreateRelation); + } + } + }catch (Exception e){ + errorList.add(String.format("%s 获取第【%s】页数据失败 %s", this.getClassName(), pageMap.get(PAGE_OFFSET_KEY), e.getMessage())); + } + } if (!CollectionUtils.isEmpty(errorList)) { String errorKey = String.join(",", errorList); throw new RuntimeException(String.format("存在同步失败的记录 %s", errorKey)); @@ -244,7 +268,7 @@ public abstract class OdooAbstrackob { return jsonArray; } - public List getDate(OdooContext odooContext, Map pageMap, List errorList,Integer warehouseId) { + public List getDate(OdooContext odooContext, Map pageMap,Integer warehouseId,List retryPageList) { try { XmlRpcClient models = odooContext.getModels(); Integer uid = getUserId(); @@ -264,7 +288,9 @@ public abstract class OdooAbstrackob { ))); } catch (Exception e) { log.error("{} 获取数据失败", this.getClassName(), e); - errorList.add(String.format("%s 获取第【%s】页数据失败 %s", this.getClassName(), pageMap.get(PAGE_OFFSET_KEY), e.getMessage())); + if (retryPageList != null) { + retryPageList.add(pageMap.get(PAGE_OFFSET_KEY)); + } } return null; }