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 a2d0625..b69931a 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 @@ -100,66 +100,49 @@ public abstract class OdooAbstrackob { private void batchSync(OdooContext context) { //分页对象 Map pageMap = getPageMap(); - //查询结果 - List dateList = new ArrayList<>(); - //错误信息 - List errorList = new ArrayList<>(); //构建飞书请求对象 LarkCompanyRelation companyRelation = context.getCompanyRelation(); LarkTableRelation tableRelation = context.getTableRelation(); LarkTableRequest larkRequest = new LarkTableRequest(companyRelation.getAppId(), companyRelation.getSecret(), tableRelation.getToAppToken(), tableRelation.getToTableId()); + List errorList = new ArrayList<>(); + batchCreate(context, pageMap, larkRequest, errorList); + if (!CollectionUtils.isEmpty(errorList)) { + String errorKey = String.join(",", errorList); + throw new RuntimeException(String.format("存在同步失败的记录 %s", errorKey)); + } + + } + + private void batchCreate(OdooContext context, Map pageMap, LarkTableRequest larkRequest, List errorList) { + //查询结果 + List dateList = new ArrayList<>(); List retryPageList = new ArrayList<>(); - //待创建关联关系 + List waitCreateRelation = new ArrayList<>(); do { - List waitCreateRelation = new ArrayList<>(); - dateList = getDate(context, pageMap,context.getWarehouseId(),retryPageList); + dateList = getDate(context, pageMap, context.getWarehouseId(), retryPageList); List midDateList = dateList.stream().map(r -> { - return (JSONObject)JSONObject.toJSON(r); + return (JSONObject) JSONObject.toJSON(r); }).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(midDateList)){ - Map relationMap = getLarkRelation(midDateList,context.getWarehouseId()); + if (CollectionUtils.isNotEmpty(midDateList)) { + Map relationMap = getLarkRelation(midDateList, context.getWarehouseId()); for (JSONObject jsonObject : midDateList) { - sync(jsonObject, errorList, relationMap, larkRequest,waitCreateRelation,context.getWarehouseId()); + sync(jsonObject, errorList, relationMap, larkRequest, waitCreateRelation, context.getWarehouseId()); } } - if (CollectionUtils.isNotEmpty(waitCreateRelation)){ + if (CollectionUtils.isNotEmpty(waitCreateRelation)) { erpLarkRelationMapper.batchInsert(waitCreateRelation); } - pageMap.put(PAGE_OFFSET_KEY,pageMap.get(PAGE_OFFSET_KEY) + PAGE_SIZE); + 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 (retryPageList.size() > 0) { + pageMap.put(PAGE_OFFSET_KEY, retryPageList.get(0) + PAGE_SIZE); + batchCreate(context, pageMap, larkRequest, errorList); } - if (!CollectionUtils.isEmpty(errorList)) { - String errorKey = String.join(",", errorList); - throw new RuntimeException(String.format("存在同步失败的记录 %s", errorKey)); - } - } private void sync(JSONObject jsonObject, List errorList , Map relationMap, LarkTableRequest larkRequest - , List waitCreateRelation,Integer warehouseId) { + , List waitCreateRelation, Integer warehouseId) { String uniqueKey = null; try { Map larkBodyMap = this.buildLarkBodyMap(jsonObject); @@ -174,16 +157,16 @@ public abstract class OdooAbstrackob { } } else { CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(larkRequest); - waitCreateRelation.add(buildErpLarkRelation(uniqueKey,respBody.getRecord().getRecordId(),warehouseId)); + waitCreateRelation.add(buildErpLarkRelation(uniqueKey, respBody.getRecord().getRecordId(), warehouseId)); } } catch (Exception e) { - log.error("{} addOrUpdate exception {}", this.getClassName(),uniqueKey, e); - errorList.add(String.format("【%s,%s】",uniqueKey,e.getMessage())); + log.error("{} addOrUpdate exception {}", this.getClassName(), uniqueKey, e); + errorList.add(String.format("【%s,%s】", uniqueKey, e.getMessage())); } } //构建飞书行与cjt唯一键的对应关系对象 - private ErpLarkRelation buildErpLarkRelation(String key, String larkKey,Integer warehouseId) { + private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, Integer warehouseId) { ErpLarkRelation erpLarkRelation = new ErpLarkRelation(); erpLarkRelation.setKey(key); erpLarkRelation.setLarkKey(larkKey); @@ -201,7 +184,7 @@ public abstract class OdooAbstrackob { return jsonObject.toJSONString(); } - private Map getLarkRelation(List dateList,Integer warehouseId) { + private Map getLarkRelation(List dateList, Integer warehouseId) { List uniqueKeyList = dateList.stream().map(r -> { return buildUniqueKey(r); }).distinct().collect(Collectors.toList()); @@ -253,22 +236,22 @@ public abstract class OdooAbstrackob { //获取待同步飞书表格信息 protected abstract TableRelationTypeEnum syncLarkType(Integer warehouseId); - protected JSONArray parseJsonArray(String value, int count){ + protected JSONArray parseJsonArray(String value, int count) { JSONArray jsonArray = new JSONArray(); try { jsonArray = JSONArray.parseArray(value); - for (int i= jsonArray.size();i getDate(OdooContext odooContext, Map pageMap,Integer warehouseId,List retryPageList) { + public List getDate(OdooContext odooContext, Map pageMap, Integer warehouseId, List retryPageList) { try { XmlRpcClient models = odooContext.getModels(); Integer uid = getUserId(); @@ -280,7 +263,7 @@ public abstract class OdooAbstrackob { pageMap//分页 ))); - return asList((Object[])models.execute(GET_DATA_P_METHOD_NAME, asList( + return asList((Object[]) models.execute(GET_DATA_P_METHOD_NAME, asList( GET_DATA_DB, uid, GET_DATA_PASSWORD, modelName, "read", asList(ids), @@ -288,9 +271,7 @@ public abstract class OdooAbstrackob { ))); } catch (Exception e) { log.error("{} 获取数据失败", this.getClassName(), e); - if (retryPageList != null) { - retryPageList.add(pageMap.get(PAGE_OFFSET_KEY)); - } + retryPageList.add(pageMap.get(PAGE_OFFSET_KEY)); } return null; }