erp定时任务去除try/catch

This commit is contained in:
liss
2025-10-17 18:00:42 +08:00
parent 7e4f7998a3
commit 5604fd596a
16 changed files with 619 additions and 691 deletions

View File

@@ -110,45 +110,39 @@ public class ErpAssetServiceImpl implements ErpAssetService {
@Transactional @Transactional
@XxlJob("getErpAssetTask") @XxlJob("getErpAssetTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.资产卡片;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.资产卡片; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr;
String key = "erpMap" + funcnr; if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
// 构建req参数
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String companyKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(companyKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray==null) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_ASSET_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
// 构建req参数
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String companyKey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(companyKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_ASSET_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -202,7 +196,7 @@ public class ErpAssetServiceImpl implements ErpAssetService {
Map<String, Long> deleteNumbers = new HashMap<>(); Map<String, Long> deleteNumbers = new HashMap<>();
for (String number : numbers.keySet()) { for (String number : numbers.keySet()) {
if (!dataArrayNumbers.contains(number)) { if (!dataArrayNumbers.contains(number)) {
deleteNumbers.put(number,numbers.get(number)); deleteNumbers.put(number, numbers.get(number));
} }
} }
return new ProcessingResult(toUpdate, toInsert, deleteNumbers, key); return new ProcessingResult(toUpdate, toInsert, deleteNumbers, key);
@@ -222,8 +216,8 @@ public class ErpAssetServiceImpl implements ErpAssetService {
.in(ErpAssetDO::getMainAssetNumber, result.toInsert.stream().map(ErpAssetDO::getMainAssetNumber).collect(Collectors.toList())) .in(ErpAssetDO::getMainAssetNumber, result.toInsert.stream().map(ErpAssetDO::getMainAssetNumber).collect(Collectors.toList()))
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(asset -> asset.getCompanyNumber() + "-" + asset.getMainAssetNumber(), ErpAssetDO::getId)); .collect(Collectors.toMap(asset -> asset.getCompanyNumber() + "-" + asset.getMainAssetNumber(), ErpAssetDO::getId,(existing, replacement) -> replacement));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpAssetMapper.updateBatch(result.toUpdate); erpAssetMapper.updateBatch(result.toUpdate);
@@ -242,10 +236,10 @@ public class ErpAssetServiceImpl implements ErpAssetService {
private static class ProcessingResult { private static class ProcessingResult {
private final List<ErpAssetDO> toUpdate; private final List<ErpAssetDO> toUpdate;
private final List<ErpAssetDO> toInsert; private final List<ErpAssetDO> toInsert;
private final Map<String,Long> deleteNumbers; private final Map<String, Long> deleteNumbers;
private final String key; private final String key;
public ProcessingResult(List<ErpAssetDO> toUpdate, List<ErpAssetDO> toInsert, Map<String,Long> deleteNumbers, String key) { public ProcessingResult(List<ErpAssetDO> toUpdate, List<ErpAssetDO> toInsert, Map<String, Long> deleteNumbers, String key) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.toInsert = toInsert; this.toInsert = toInsert;
this.deleteNumbers = deleteNumbers; this.deleteNumbers = deleteNumbers;

View File

@@ -117,44 +117,38 @@ public class ErpBomServiceImpl implements ErpBomService {
@Transactional @Transactional
@XxlJob("getErpBomTask") @XxlJob("getErpBomTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.BOM清单;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.BOM清单; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr;
String key = "erpMap" + funcnr; if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_REDIS_NOT_EXISTS);
}
for (String factoryNumber : redisCache.keySet()) {
req.put("WERKS", factoryNumber);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_BOM_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_REDIS_NOT_EXISTS);
}
for (String factoryNumber : redisCache.keySet()) {
req.put("WERKS", factoryNumber);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_BOM_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -168,7 +162,7 @@ public class ErpBomServiceImpl implements ErpBomService {
List<ErpBomDetailDO> erpBomDetailDOList = new ArrayList<>(); List<ErpBomDetailDO> erpBomDetailDOList = new ArrayList<>();
Map<String, Long> addnumbers = new HashMap<>(); Map<String, Long> addnumbers = new HashMap<>();
List<String> dataArrayNumbers = new ArrayList<>(); List<String> dataArrayNumbers = new ArrayList<>();
for (int i = 0; i < dataArray.size(); i++) { for (int i = 0; i < dataArray.size(); i++) {
JSONObject dataJson = dataArray.getJSONObject(i); JSONObject dataJson = dataArray.getJSONObject(i);
if (dataJson != null) { if (dataJson != null) {
@@ -179,10 +173,10 @@ public class ErpBomServiceImpl implements ErpBomService {
bomDO.setMaterialDescription(dataJson.getString("MAKTX")); bomDO.setMaterialDescription(dataJson.getString("MAKTX"));
bomDO.setQuantity(dataJson.getBigDecimal("BMENG")); bomDO.setQuantity(dataJson.getBigDecimal("BMENG"));
bomDO.setUnit(dataJson.getString("BMEIN")); bomDO.setUnit(dataJson.getString("BMEIN"));
String number = bomDO.getFactoryNumber() + "-" + bomDO.getUpMaterial() + "-" + bomDO.getUseItem(); String number = bomDO.getFactoryNumber() + "-" + bomDO.getUpMaterial() + "-" + bomDO.getUseItem();
dataArrayNumbers.add(number); dataArrayNumbers.add(number);
if (numbers.containsKey(number)) { if (numbers.containsKey(number)) {
// 更新 // 更新
bomDO.setId(numbers.get(number)); bomDO.setId(numbers.get(number));
@@ -231,17 +225,17 @@ public class ErpBomServiceImpl implements ErpBomService {
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpBomMapper.updateBatch(result.toUpdate); erpBomMapper.updateBatch(result.toUpdate);
} }
// 保存或更新BOM详情 // 保存或更新BOM详情
if (!result.erpBomDetailDOList.isEmpty()) { if (!result.erpBomDetailDOList.isEmpty()) {
bomDetailService.saveOrUpdateErpBomDetail(result.erpBomDetailDOList); bomDetailService.saveOrUpdateErpBomDetail(result.erpBomDetailDOList);
} }
// 更新Redis缓存 // 更新Redis缓存
if (!result.addnumbers.isEmpty()) { if (!result.addnumbers.isEmpty()) {
myRedisConfig.addRedisCacheMap(result.key, result.addnumbers); myRedisConfig.addRedisCacheMap(result.key, result.addnumbers);
} }
if (!result.deleteNumbers.isEmpty()) { if (!result.deleteNumbers.isEmpty()) {
myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers);
} }
@@ -257,8 +251,8 @@ public class ErpBomServiceImpl implements ErpBomService {
private final List<String> deleteNumbers; private final List<String> deleteNumbers;
private final List<ErpBomDetailDO> erpBomDetailDOList; private final List<ErpBomDetailDO> erpBomDetailDOList;
public ProcessingResult(List<ErpBomDO> toUpdate, String key, Map<String, Long> addnumbers, public ProcessingResult(List<ErpBomDO> toUpdate, String key, Map<String, Long> addnumbers,
List<String> deleteNumbers, List<ErpBomDetailDO> erpBomDetailDOList) { List<String> deleteNumbers, List<ErpBomDetailDO> erpBomDetailDOList) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.key = key; this.key = key;
this.addnumbers = addnumbers; this.addnumbers = addnumbers;

View File

@@ -121,32 +121,25 @@ public class ErpCompanyServiceImpl implements ErpCompanyService {
@Transactional @Transactional
@XxlJob("getCompanyTask") @XxlJob("getCompanyTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.公司代码;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.公司代码; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, null);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (CollUtil.isEmpty(dataArray)) {
throw exception(ERP_COMPANY_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArray, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
// log.error("调用ERP RFC接口失败: {}", e);
throw e;
// throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, null);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (CollUtil.isEmpty(dataArray)) {
throw exception(ERP_COMPANY_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArray, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
@Override @Override
@@ -284,10 +277,10 @@ public class ErpCompanyServiceImpl implements ErpCompanyService {
HttpEntity<String> requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); HttpEntity<String> requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers);
// 发送POST请求 // 发送POST请求
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
try{ try {
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class); ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
return url + requestEntity + response; return url + requestEntity + response;
}catch (Exception e){ } catch (Exception e) {
return url + requestEntity; return url + requestEntity;
} }
} }

View File

@@ -183,53 +183,47 @@ public class ErpContractServiceImpl implements ErpContractService {
@Transactional @Transactional
@XxlJob("getErpContractTask") @XxlJob("getErpContractTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.合同信息;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.合同信息; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr();
Map<String, Object> req = new HashMap<>(); Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray(); JSONArray dataArrayALL = new JSONArray();
String commanyKey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr(); String commanyKey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(commanyKey); Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(commanyKey);
if (CollUtil.isEmpty(redisCache)) { if (CollUtil.isEmpty(redisCache)) {
return; return;
} }
String cstmKey = "erpMap" + OftenEnum.FuncnrEnum.客商信息.getFuncnr(); String cstmKey = "erpMap" + OftenEnum.FuncnrEnum.客商信息.getFuncnr();
Map<String, Long> redisCachecstmKey = myRedisConfig.getRedisCacheMap(cstmKey); Map<String, Long> redisCachecstmKey = myRedisConfig.getRedisCacheMap(cstmKey);
if (CollUtil.isEmpty(redisCachecstmKey)) { if (CollUtil.isEmpty(redisCachecstmKey)) {
return; return;
} }
// 1. 调用ERP接口获取数据 // 1. 调用ERP接口获取数据
for (String INEDR : new String[]{"1", "2"}) { for (String INEDR : new String[]{"1", "2"}) {
req.put("INEDR", INEDR); req.put("INEDR", INEDR);
for (String number : redisCache.keySet()) { for (String number : redisCache.keySet()) {
req.put("BUKRS", number); req.put("BUKRS", number);
for (String partner : redisCachecstmKey.keySet()) { for (String partner : redisCachecstmKey.keySet()) {
req.put("PARTNER", partner); req.put("PARTNER", partner);
// 1. 调用ERP接口获取数据 // 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, null); HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, null);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray!= null) { if (dataArray != null) {
dataArrayALL.addAll(dataArray); dataArrayALL.addAll(dataArray);
}
} }
} }
} }
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_CONTRACT_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_CONTRACT_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
@Override @Override

View File

@@ -76,12 +76,12 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
} }
@Override @Override
public void deleteErpCostcenterListByIds(List<Long> ids) { public void deleteErpCostcenterListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateErpCostcenterExists(ids); validateErpCostcenterExists(ids);
// 删除 // 删除
erpCostcenterMapper.deleteByIds(ids); erpCostcenterMapper.deleteByIds(ids);
} }
private void validateErpCostcenterExists(List<Long> ids) { private void validateErpCostcenterExists(List<Long> ids) {
List<ErpCostcenterDO> list = erpCostcenterMapper.selectByIds(ids); List<ErpCostcenterDO> list = erpCostcenterMapper.selectByIds(ids);
@@ -110,46 +110,40 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
@Transactional @Transactional
@XxlJob("getErpCostcenterTask") @XxlJob("getErpCostcenterTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.成本中心;
OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.成本中心; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnr;
String key = "erpMap" + funcnr; if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap( key).isEmpty()){ initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String commanyKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(commanyKey);
if (CollUtil.isEmpty(redisCache)) {
return;
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_COSTCENTER_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL,funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String commanyKey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(commanyKey);
if (CollUtil.isEmpty(redisCache)) {
return;
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_COSTCENTER_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -178,7 +172,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
DO.setEndDate(LocalDateTime.parse(dataJson.getString("DATBI") + "T00:00:00")); DO.setEndDate(LocalDateTime.parse(dataJson.getString("DATBI") + "T00:00:00"));
} }
DO.setScopeName(dataJson.getString("FKBTX")); DO.setScopeName(dataJson.getString("FKBTX"));
if (numbers.get(number)!=null) { if (numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -196,7 +190,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
deleteNumbers.add(number); deleteNumbers.add(number);
} }
} }
return new ProcessingResult(toUpdate, toInsert,deleteNumbers,key); return new ProcessingResult(toUpdate, toInsert, deleteNumbers, key);
} }
/** /**
@@ -216,7 +210,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(ErpCostcenterDO::getNumber, ErpCostcenterDO::getId)); .collect(Collectors.toMap(ErpCostcenterDO::getNumber, ErpCostcenterDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpCostcenterMapper.updateBatch(result.toUpdate); erpCostcenterMapper.updateBatch(result.toUpdate);
@@ -224,7 +218,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
if (!result.deleteNumbers.isEmpty()) { if (!result.deleteNumbers.isEmpty()) {
// 使用 in 条件批量删除,提高删除效率 // 使用 in 条件批量删除,提高删除效率
erpCostcenterMapper.delete(new LambdaQueryWrapperX<ErpCostcenterDO>().in(ErpCostcenterDO::getNumber, result.deleteNumbers)); erpCostcenterMapper.delete(new LambdaQueryWrapperX<ErpCostcenterDO>().in(ErpCostcenterDO::getNumber, result.deleteNumbers));
myRedisConfig.deleteRedisCacheMap(result.key,result.deleteNumbers); myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers);
} }
} }
@@ -237,13 +231,14 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService {
private final List<String> deleteNumbers; private final List<String> deleteNumbers;
private final String key; private final String key;
public ProcessingResult(List<ErpCostcenterDO> toUpdate, List<ErpCostcenterDO> toInsert,List<String> deleteNumbers,String key) { public ProcessingResult(List<ErpCostcenterDO> toUpdate, List<ErpCostcenterDO> toInsert, List<String> deleteNumbers, String key) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.toInsert = toInsert; this.toInsert = toInsert;
this.deleteNumbers = deleteNumbers; this.deleteNumbers = deleteNumbers;
this.key = key; this.key = key;
} }
} }
private void initializeMap(String key) { private void initializeMap(String key) {
Map<String, Long> existingNumbers = erpCostcenterMapper.selectList(new LambdaQueryWrapperX<ErpCostcenterDO>()) Map<String, Long> existingNumbers = erpCostcenterMapper.selectList(new LambdaQueryWrapperX<ErpCostcenterDO>())
.stream() .stream()

View File

@@ -110,50 +110,44 @@ public class ErpCustomerServiceImpl implements ErpCustomerService {
@Transactional @Transactional
@XxlJob("getErpCustomerTask") @XxlJob("getErpCustomerTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.客商信息;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.客商信息; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); String key = "erpMap" + funcnrEnum.getFuncnr();
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
initializeMap(key); initializeMap(key);
}
// 构建req参数
Map<String, Object> req = new HashMap<>();
List<Map<String, String>> datumList = new ArrayList<>();
Map<String, String> datumEntry = new HashMap<>();
// 构建datum参数数组
datumEntry.put("sign", "I");
datumEntry.put("option", "EQ");
datumEntry.put("low", LocalDate.now().toString());
datumList.add(datumEntry);
req.put(funcnrEnum.getDatekey(), datumList);
// 1. 调用ERP接口获取数据
JSONArray dataArrayALL = new JSONArray();
for (OftenEnum.ModeTypeEnum type : OftenEnum.ModeTypeEnum.values()) {
req.put("mode", type.modetype);
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get(funcnrEnum.getDatakey());
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()){
throw exception(ERP_CUSTOMER_NOT_EXISTS);
}
// 2. 处理数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
// 构建req参数
Map<String, Object> req = new HashMap<>();
List<Map<String, String>> datumList = new ArrayList<>();
Map<String, String> datumEntry = new HashMap<>();
// 构建datum参数数组
datumEntry.put("sign", "I");
datumEntry.put("option", "EQ");
datumEntry.put("low", LocalDate.now().toString());
datumList.add(datumEntry);
req.put(funcnrEnum.getDatekey(), datumList);
// 1. 调用ERP接口获取数据
JSONArray dataArrayALL = new JSONArray();
for (OftenEnum.ModeTypeEnum type : OftenEnum.ModeTypeEnum.values()) {
req.put("mode", type.modetype);
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get(funcnrEnum.getDatakey());
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_CUSTOMER_NOT_EXISTS);
}
// 2. 处理数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -169,25 +163,30 @@ public class ErpCustomerServiceImpl implements ErpCustomerService {
for (int i = 0; i < dataArray.size(); i++) { for (int i = 0; i < dataArray.size(); i++) {
JSONObject dataJson = dataArray.getJSONObject(i); JSONObject dataJson = dataArray.getJSONObject(i);
if (dataJson != null) { if (dataJson != null) {
String number = dataJson.getString(funcnrEnum.getDatakey()).trim(); String number = dataJson.getString(funcnrEnum.getDatakey());
if (number != null) {
number = number.trim();
}
ErpCustomerDO DO = new ErpCustomerDO(); ErpCustomerDO DO = new ErpCustomerDO();
DO.setName(dataJson.getString("NAME_ORG1")); DO.setName(dataJson.getString("NAME_ORG1"));
DO.setNumber(number); DO.setNumber(number);
DO.setAccountGroup(dataJson.getString("BU_GROUP")); DO.setAccountGroup(dataJson.getString("BU_GROUP"));
DO.setDescription(dataJson.getString("BU_SORT1")); DO.setDescription(dataJson.getString("BU_SORT1"));
DO.setCenterNumber(dataJson.getString("BU_SORT2")); DO.setCenterNumber(dataJson.getString("BU_SORT2"));
if (!dataJson.getString("CRDAT").equals("0000-00-00")) { String crdat = dataJson.getString("CRDAT");
DO.setCreateDate(LocalDateTime.parse(dataJson.getString("CRDAT") + "T00:00:00")); if (crdat != null && !crdat.equals("0000-00-00")) {
DO.setCreateDate(LocalDateTime.parse(crdat + "T00:00:00"));
} }
if (!dataJson.getString("CHDAT").equals("0000-00-00")) { String chdat = dataJson.getString("CHDAT");
DO.setRepairDate(LocalDateTime.parse(dataJson.getString("CHDAT") + "T00:00:00")); if (chdat != null && !chdat.equals("0000-00-00")) {
DO.setRepairDate(LocalDateTime.parse(chdat + "T00:00:00"));
} }
DO.setIsGiveback(dataJson.getString("XDELE")); DO.setIsGiveback(dataJson.getString("XDELE"));
DO.setIsProvisional(dataJson.getString("XBLCK")); DO.setIsProvisional(dataJson.getString("XBLCK"));
// DO.setType(type.modetype); // DO.setType(type.modetype);
// 使用 Map 优化查找效率,避免每次遍历 comnumbers 列表 // 使用 Map 优化查找效率,避免每次遍历 comnumbers 列表
if (numbers.get(number)!=null) { if (number != null && numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -218,7 +217,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService {
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(ErpCustomerDO::getNumber, ErpCustomerDO::getId)); .collect(Collectors.toMap(ErpCustomerDO::getNumber, ErpCustomerDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpCustomerMapper.updateBatch(result.toUpdate); erpCustomerMapper.updateBatch(result.toUpdate);

View File

@@ -55,7 +55,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
// 插入 // 插入
ErpFactoryDO erpFactory = BeanUtils.toBean(createReqVO, ErpFactoryDO.class); ErpFactoryDO erpFactory = BeanUtils.toBean(createReqVO, ErpFactoryDO.class);
// 工厂编码自动生成,格式 GC-0001,依次新增 // 工厂编码自动生成,格式 GC-0001,依次新增
if (erpFactory.getNumber() == null){ if (erpFactory.getNumber() == null) {
String maxCode = erpFactoryMapper.selectMaxCode(); String maxCode = erpFactoryMapper.selectMaxCode();
if (maxCode == null) { if (maxCode == null) {
erpFactory.setNumber("GC-0001"); erpFactory.setNumber("GC-0001");
@@ -80,7 +80,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
validateErpFactoryExists(updateReqVO.getId()); validateErpFactoryExists(updateReqVO.getId());
// 更新 // 更新
ErpFactoryDO updateObj = BeanUtils.toBean(updateReqVO, ErpFactoryDO.class); ErpFactoryDO updateObj = BeanUtils.toBean(updateReqVO, ErpFactoryDO.class);
if (updateObj.getType().equals("ERP")||updateObj.getIsEnable().equals("1")){ if (updateObj.getType().equals("ERP") || updateObj.getIsEnable().equals("1")) {
throw exception(ERP_FACTORY_NOT_ALLOW_UPDATE); throw exception(ERP_FACTORY_NOT_ALLOW_UPDATE);
} }
erpFactoryMapper.updateById(updateObj); erpFactoryMapper.updateById(updateObj);
@@ -95,12 +95,12 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
} }
@Override @Override
public void deleteErpFactoryListByIds(List<Long> ids) { public void deleteErpFactoryListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateErpFactoryExists(ids); validateErpFactoryExists(ids);
// 删除 // 删除
erpFactoryMapper.deleteByIds(ids); erpFactoryMapper.deleteByIds(ids);
} }
private void validateErpFactoryExists(List<Long> ids) { private void validateErpFactoryExists(List<Long> ids) {
List<ErpFactoryDO> list = erpFactoryMapper.selectByIds(ids); List<ErpFactoryDO> list = erpFactoryMapper.selectByIds(ids);
@@ -164,53 +164,47 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
@Transactional @Transactional
@XxlJob("getErpFactoryTask") @XxlJob("getErpFactoryTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.工厂信息;
OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.工厂信息; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
// 1. 调用ERP接口获取数据
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String companykey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(companykey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
for (String companyNumber : redisCache.keySet()) {
req.put("BUKRS", companyNumber);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("BUKRS", companyNumber);
}
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL,funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
// 1. 调用ERP接口获取数据
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String companykey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(companykey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
for (String companyNumber : redisCache.keySet()) {
req.put("BUKRS", companyNumber);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("BUKRS", companyNumber);
}
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -232,7 +226,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
DO.setNumber(number); DO.setNumber(number);
DO.setErpCompanyNumber(dataJson.getString("BUKRS")); DO.setErpCompanyNumber(dataJson.getString("BUKRS"));
DO.setType("ERP"); DO.setType("ERP");
if (numbers.get(number)!=null) { if (numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -251,7 +245,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
deleteNumbers.add(number); deleteNumbers.add(number);
} }
} }
return new ProcessingResult(toUpdate, toInsert,key,deleteNumbers); return new ProcessingResult(toUpdate, toInsert, key, deleteNumbers);
} }
/** /**
@@ -271,7 +265,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(ErpFactoryDO::getNumber, ErpFactoryDO::getId)); .collect(Collectors.toMap(ErpFactoryDO::getNumber, ErpFactoryDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpFactoryMapper.updateBatch(result.toUpdate); erpFactoryMapper.updateBatch(result.toUpdate);
@@ -292,7 +286,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService {
private final String key; private final String key;
private final List<String> deleteNumbers; private final List<String> deleteNumbers;
public ProcessingResult(List<ErpFactoryDO> toUpdate, List<ErpFactoryDO> toInsert,String key,List<String> deleteNumbers) { public ProcessingResult(List<ErpFactoryDO> toUpdate, List<ErpFactoryDO> toInsert, String key, List<String> deleteNumbers) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.toInsert = toInsert; this.toInsert = toInsert;
this.key = key; this.key = key;

View File

@@ -108,47 +108,41 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService {
@Transactional @Transactional
@XxlJob("getErpInternalOrderTask") @XxlJob("getErpInternalOrderTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.内部订单;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.内部订单; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String companyCode = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(companyCode);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_INTERNAL_ORDER_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String companyCode = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(companyCode);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (CollUtil.isEmpty(dataArrayALL)) {
throw exception(ERP_INTERNAL_ORDER_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -171,7 +165,7 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService {
DO.setType(dataJson.getString("AUART")); DO.setType(dataJson.getString("AUART"));
DO.setIsOff(dataJson.getString("PHAS3")); DO.setIsOff(dataJson.getString("PHAS3"));
DO.setIsFinish(dataJson.getString("PHAS2")); DO.setIsFinish(dataJson.getString("PHAS2"));
if (numbers.get(number)!=null) { if (numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -210,7 +204,7 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService {
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(ErpInternalOrderDO::getNumber, ErpInternalOrderDO::getId)); .collect(Collectors.toMap(ErpInternalOrderDO::getNumber, ErpInternalOrderDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpInternalOrderMapper.updateBatch(result.toUpdate); erpInternalOrderMapper.updateBatch(result.toUpdate);

View File

@@ -164,7 +164,7 @@ public class ErpMaterialServiceImpl implements ErpMaterialService {
MaterialOtherDTO dto = new MaterialOtherDTO(); MaterialOtherDTO dto = new MaterialOtherDTO();
dto.setMaterialNumber(respVO.getDownCenterNumber()); dto.setMaterialNumber(respVO.getDownCenterNumber());
List<MaterialOtherDTO> dtos = baseApi.getMaterialOtherNoPage(dto); List<MaterialOtherDTO> dtos = baseApi.getMaterialOtherNoPage(dto);
if (dtos != null){ if (dtos != null) {
respVO.setMaterialOtherDTOS(dtos); respVO.setMaterialOtherDTOS(dtos);
} }
} }
@@ -178,43 +178,37 @@ public class ErpMaterialServiceImpl implements ErpMaterialService {
@Transactional @Transactional
@XxlJob("getErpMaterialTask") @XxlJob("getErpMaterialTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.物料数据;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.物料数据; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erp" + funcnrEnum.getFuncnr();
String key = "erp" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCache(key) == null) {
if (myRedisConfig.getRedisCache(key) == null) { initialize(key);
initialize(key);
}
// 构建req参数
Map<String, Object> req = new HashMap<>();
List<Map<String, String>> datumList = new ArrayList<>();
Map<String, String> datumEntry = new HashMap<>();
datumEntry.put("sign", "I");
datumEntry.put("option", "EQ");
// datumEntry.put("low", "2021-05-20");
datumEntry.put("low", LocalDate.now().toString());
datumList.add(datumEntry);
req.put(funcnrEnum.getDatekey(), datumList);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (CollUtil.isEmpty(dataArray)) {
throw exception(ERP_MATERIAL_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArray, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
// 构建req参数
Map<String, Object> req = new HashMap<>();
List<Map<String, String>> datumList = new ArrayList<>();
Map<String, String> datumEntry = new HashMap<>();
datumEntry.put("sign", "I");
datumEntry.put("option", "EQ");
// datumEntry.put("low", "2021-05-20");
datumEntry.put("low", LocalDate.now().toString());
datumList.add(datumEntry);
req.put(funcnrEnum.getDatekey(), datumList);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (CollUtil.isEmpty(dataArray)) {
throw exception(ERP_MATERIAL_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArray, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**

View File

@@ -66,12 +66,12 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService {
} }
@Override @Override
public void deleteErpProcessDetailListByIds(List<Long> ids) { public void deleteErpProcessDetailListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateErpProcessDetailExists(ids); validateErpProcessDetailExists(ids);
// 删除 // 删除
erpProcessDetailMapper.deleteByIds(ids); erpProcessDetailMapper.deleteByIds(ids);
} }
private void validateErpProcessDetailExists(List<Long> ids) { private void validateErpProcessDetailExists(List<Long> ids) {
List<ErpProcessDetailDO> list = erpProcessDetailMapper.selectByIds(ids); List<ErpProcessDetailDO> list = erpProcessDetailMapper.selectByIds(ids);
@@ -115,10 +115,10 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService {
List<String> dataArrayNumbers = new ArrayList<>(); List<String> dataArrayNumbers = new ArrayList<>();
Map<String, Long> existingNumbers = myRedisConfig.getRedisCacheMap(key); Map<String, Long> existingNumbers = myRedisConfig.getRedisCacheMap(key);
for (ErpProcessDetailDO updateReqVO : updateReqVOS) { for (ErpProcessDetailDO updateReqVO : updateReqVOS) {
if (updateReqVO.getProcessingName() == null|| updateReqVO.getProcessingName().isEmpty()){ if (updateReqVO.getProcessingName() == null || updateReqVO.getProcessingName().isEmpty()) {
continue; continue;
} }
String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber(); String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber()+"-" + updateReqVO.getWorkCenterNumber();
if (existingNumbers.containsKey(mapKey)) { if (existingNumbers.containsKey(mapKey)) {
updateReqVO.setId(existingNumbers.get(mapKey)); updateReqVO.setId(existingNumbers.get(mapKey));
} }
@@ -149,10 +149,12 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService {
new LambdaQueryWrapperX<ErpProcessDetailDO>() new LambdaQueryWrapperX<ErpProcessDetailDO>()
.in(ErpProcessDetailDO::getProcessId, result.toInsert.stream().map(ErpProcessDetailDO::getProcessId).distinct().collect(Collectors.toList())) .in(ErpProcessDetailDO::getProcessId, result.toInsert.stream().map(ErpProcessDetailDO::getProcessId).distinct().collect(Collectors.toList()))
.in(ErpProcessDetailDO::getProcessingNumber, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingNumber).distinct().collect(Collectors.toList())) .in(ErpProcessDetailDO::getProcessingNumber, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingNumber).distinct().collect(Collectors.toList()))
// .in(ErpProcessDetailDO::getProcessingName, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingName).distinct().collect(Collectors.toList())) .in(ErpProcessDetailDO::getWorkCenterNumber, result.toInsert.stream().map(ErpProcessDetailDO::getWorkCenterNumber).distinct().collect(Collectors.toList()))
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber(), ErpProcessDetailDO::getId)); .collect(Collectors.toMap(
asset -> asset.getProcessId() + "-" + asset.getProcessingNumber() + "-" + asset.getWorkCenterNumber(),
ErpProcessDetailDO::getId, (existing, replacement) -> replacement));
myRedisConfig.addRedisCacheMap(result.key, numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
@@ -186,7 +188,7 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService {
List<ErpProcessDetailDO> assets = erpProcessDetailMapper.selectList(new LambdaQueryWrapperX<ErpProcessDetailDO>()); List<ErpProcessDetailDO> assets = erpProcessDetailMapper.selectList(new LambdaQueryWrapperX<ErpProcessDetailDO>());
Map<String, Long> existingNumbers = new HashMap<>(); Map<String, Long> existingNumbers = new HashMap<>();
for (ErpProcessDetailDO asset : assets) { for (ErpProcessDetailDO asset : assets) {
String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber(); String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber()+ "-" + asset.getWorkCenterNumber();
existingNumbers.put(mapKey, asset.getId()); existingNumbers.put(mapKey, asset.getId());
} }
myRedisConfig.addRedisCacheMap(key, existingNumbers); myRedisConfig.addRedisCacheMap(key, existingNumbers);

View File

@@ -114,45 +114,39 @@ public class ErpProcessServiceImpl implements ErpProcessService {
@Transactional @Transactional
@XxlJob("getErpProcessTask") @XxlJob("getErpProcessTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.工艺路线;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.工艺路线; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr;
String key = "erpMap" + funcnr; if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String factoryNumber : redisCache.keySet()) {
req.put("WERKS", factoryNumber);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()){
throw exception(ERP_PROCESS_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String factoryNumber : redisCache.keySet()) {
req.put("WERKS", factoryNumber);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_PROCESS_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -171,16 +165,25 @@ public class ErpProcessServiceImpl implements ErpProcessService {
JSONObject dataJson = dataArray.getJSONObject(i); JSONObject dataJson = dataArray.getJSONObject(i);
if (dataJson != null) { if (dataJson != null) {
ErpProcessDO DO = new ErpProcessDO(); ErpProcessDO DO = new ErpProcessDO();
DO.setFactoryNumber(dataJson.getString("WERKS")); DO.setFactoryNumber(dataJson.getString("WERKS").trim());
DO.setMaterialNumber(dataJson.getString("MATNR")); DO.setMaterialNumber(dataJson.getString("MATNR").trim());
DO.setMaterialName(dataJson.getString("MAKTX")); DO.setMaterialName(dataJson.getString("MAKTX").trim());
DO.setBlineGroup(dataJson.getString("PLNAL")); DO.setBlineGroup(dataJson.getString("PLNAL").trim());
DO.setGroupCount(dataJson.getLong("PLNNR")); Long groupCount = null;
DO.setBlineDescription(dataJson.getString("KTEXT")); String plnnrStr = dataJson.getString("PLNNR");
DO.setUom(dataJson.getString("PLNME")); if (plnnrStr != null && !plnnrStr.trim().isEmpty()) {
DO.setUseDescription(dataJson.getString("VERWE")); try {
DO.setStatus(dataJson.getString("STATU")); groupCount = Long.valueOf(plnnrStr.trim());
String number = DO.getFactoryNumber() + "-" + DO.getMaterialNumber() + "-" + DO.getBlineGroup(); } catch (NumberFormatException e) {
log.error("转换PLNNR为Long类型失败: " + plnnrStr, e);
}
}
DO.setGroupCount(groupCount);
DO.setBlineDescription(dataJson.getString("KTEXT").trim());
DO.setUom(dataJson.getString("PLNME").trim());
DO.setUseDescription(dataJson.getString("VERWE").trim());
DO.setStatus(dataJson.getString("STATU").trim());
String number = DO.getFactoryNumber() + "-" + DO.getMaterialNumber() + "-" + DO.getBlineGroup().trim()+"-" + DO.getGroupCount();
dataArrayNumbers.add(number); dataArrayNumbers.add(number);
if (numbers.get(number) != null) { if (numbers.get(number) != null) {
// 更新 // 更新
@@ -271,7 +274,7 @@ public class ErpProcessServiceImpl implements ErpProcessService {
List<ErpProcessDO> bomList = erpProcessMapper.selectList(new LambdaQueryWrapperX<ErpProcessDO>()); List<ErpProcessDO> bomList = erpProcessMapper.selectList(new LambdaQueryWrapperX<ErpProcessDO>());
Map<String, Long> existingNumbers = new HashMap<>(); Map<String, Long> existingNumbers = new HashMap<>();
for (ErpProcessDO bom : bomList) { for (ErpProcessDO bom : bomList) {
String mapKey = bom.getFactoryNumber() + "-" + bom.getMaterialNumber() + "-" + bom.getBlineGroup(); String mapKey = bom.getFactoryNumber() + "-" + bom.getMaterialNumber() + "-" + bom.getBlineGroup()+"-" + bom.getGroupCount();
existingNumbers.put(mapKey, bom.getId()); existingNumbers.put(mapKey, bom.getId());
} }
myRedisConfig.addRedisCacheMap(key, existingNumbers); myRedisConfig.addRedisCacheMap(key, existingNumbers);

View File

@@ -183,49 +183,43 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService
@Transactional @Transactional
@XxlJob("getErpProductiveOrderTask") @XxlJob("getErpProductiveOrderTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr();
Map<String, Object> req = new HashMap<>(); Map<String, Object> req = new HashMap<>();
List<Map<String, String>> datumList = new ArrayList<>(); List<Map<String, String>> datumList = new ArrayList<>();
Map<String, String> datumEntry = new HashMap<>(); Map<String, String> datumEntry = new HashMap<>();
// 构建datum参数数组 // 构建datum参数数组
datumEntry.put("sign", "I"); datumEntry.put("sign", "I");
datumEntry.put("option", "EQ"); datumEntry.put("option", "EQ");
datumEntry.put("low", LocalDate.now().toString()); datumEntry.put("low", LocalDate.now().toString());
datumList.add(datumEntry); datumList.add(datumEntry);
req.put(funcnrEnum.getDatekey(), datumList); req.put(funcnrEnum.getDatekey(), datumList);
JSONArray dataArrayALL = new JSONArray(); JSONArray dataArrayALL = new JSONArray();
List<String> redisCache = myRedisConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); List<String> redisCache = myRedisConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr());
if (CollUtil.isEmpty(redisCache)) { if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS); throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache) {
req.put("WERKS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()){
throw exception(ERP_PRODUCTIVE_ORDER_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
// 1. 调用ERP接口获取数据
for (String number : redisCache) {
req.put("WERKS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_PRODUCTIVE_ORDER_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**

View File

@@ -74,12 +74,12 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ
} }
@Override @Override
public void deleteErpProductiveVersionListByIds(List<Long> ids) { public void deleteErpProductiveVersionListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateErpProductiveVersionExists(ids); validateErpProductiveVersionExists(ids);
// 删除 // 删除
erpProductiveVersionMapper.deleteByIds(ids); erpProductiveVersionMapper.deleteByIds(ids);
} }
private void validateErpProductiveVersionExists(List<Long> ids) { private void validateErpProductiveVersionExists(List<Long> ids) {
List<ErpProductiveVersionDO> list = erpProductiveVersionMapper.selectByIds(ids); List<ErpProductiveVersionDO> list = erpProductiveVersionMapper.selectByIds(ids);
@@ -108,47 +108,41 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ
@Transactional @Transactional
@XxlJob("getErpProductiveVersionTask") @XxlJob("getErpProductiveVersionTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产版本;
OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.生产版本; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey ="erpMap"+ OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("WERKS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()){
throw exception(ERP_PRODUCTIVE_VERSION_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL,funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("WERKS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_PRODUCTIVE_VERSION_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -165,15 +159,17 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ
JSONObject dataJson = dataArray.getJSONObject(i); JSONObject dataJson = dataArray.getJSONObject(i);
if (dataJson != null) { if (dataJson != null) {
ErpProductiveVersionDO DO = new ErpProductiveVersionDO(); ErpProductiveVersionDO DO = new ErpProductiveVersionDO();
DO.setFactoryNumber(dataJson.getString("MATNR").trim()); DO.setFactoryNumber(dataJson.getString("MATNR") != null ? dataJson.getString("MATNR").trim() : null);
DO.setMaterialNumber(dataJson.getString("WERKS").trim()); DO.setMaterialNumber(dataJson.getString("WERKS") != null ? dataJson.getString("WERKS").trim() : null);
DO.setProductiveVersionNumber(dataJson.getString("VERID").trim()); DO.setProductiveVersionNumber(dataJson.getString("VERID") != null ? dataJson.getString("VERID").trim() : null);
DO.setProductiveVersionName(dataJson.getString("TEXT1")); DO.setProductiveVersionName(dataJson.getString("TEXT1"));
DO.setBomNumber(dataJson.getString("STLAL")); DO.setBomNumber(dataJson.getString("STLAL"));
DO.setBlineGroup(dataJson.getString("PLNNR")); DO.setBlineGroup(dataJson.getString("PLNNR"));
DO.setGroupCount(Long.valueOf(dataJson.getString("ALNAL").trim())); String alnalValue = dataJson.getString("ALNAL");
String number = dataJson.getString("MATNR").trim()+"-"+dataJson.getString("WERKS").trim()+"-"+dataJson.getString("VERID").trim(); // 修复:增加对空字符串的判断
if (numbers.get(number)!=null) { DO.setGroupCount(alnalValue != null && !alnalValue.trim().isEmpty() ? Long.valueOf(alnalValue.trim()) : null);
String number = dataJson.getString("MATNR").trim() + "-" + dataJson.getString("WERKS").trim() + "-" + dataJson.getString("VERID").trim();
if (numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -188,11 +184,11 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ
Map<String, Long> deleteNumbers = new HashMap<>(); Map<String, Long> deleteNumbers = new HashMap<>();
for (String number : numbers.keySet()) { for (String number : numbers.keySet()) {
if (!dataArrayNumbers.contains(number)) { if (!dataArrayNumbers.contains(number)) {
deleteNumbers.put(number,numbers.get(number)); deleteNumbers.put(number, numbers.get(number));
} }
} }
return new ProcessingResult(toUpdate, toInsert,key,deleteNumbers); return new ProcessingResult(toUpdate, toInsert, key, deleteNumbers);
} }
/** /**
@@ -210,13 +206,13 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ
.in(ErpProductiveVersionDO::getProductiveVersionNumber, result.toInsert.stream().map(ErpProductiveVersionDO::getProductiveVersionNumber).collect(Collectors.toList())) .in(ErpProductiveVersionDO::getProductiveVersionNumber, result.toInsert.stream().map(ErpProductiveVersionDO::getProductiveVersionNumber).collect(Collectors.toList()))
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(asset -> asset.getFactoryNumber() + "-" + asset.getMaterialNumber()+ "-" + asset.getProductiveVersionNumber(), ErpProductiveVersionDO::getId)); .collect(Collectors.toMap(asset -> asset.getFactoryNumber() + "-" + asset.getMaterialNumber() + "-" + asset.getProductiveVersionNumber(), ErpProductiveVersionDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpProductiveVersionMapper.updateBatch(result.toUpdate); erpProductiveVersionMapper.updateBatch(result.toUpdate);
} }
if (!result.deleteNumbers.isEmpty()){ if (!result.deleteNumbers.isEmpty()) {
// 使用流式处理和批处理优化删除逻辑 // 使用流式处理和批处理优化删除逻辑
List<Long> idsToDelete = new ArrayList<>(result.deleteNumbers.values()); List<Long> idsToDelete = new ArrayList<>(result.deleteNumbers.values());
erpProductiveVersionMapper.deleteByIds(idsToDelete); erpProductiveVersionMapper.deleteByIds(idsToDelete);
@@ -233,7 +229,7 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ
private final String key; private final String key;
private final Map<String, Long> deleteNumbers; private final Map<String, Long> deleteNumbers;
public ProcessingResult(List<ErpProductiveVersionDO> toUpdate, List<ErpProductiveVersionDO> toInsert,String key,Map<String, Long> deleteNumbers) { public ProcessingResult(List<ErpProductiveVersionDO> toUpdate, List<ErpProductiveVersionDO> toInsert, String key, Map<String, Long> deleteNumbers) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.toInsert = toInsert; this.toInsert = toInsert;
this.key = key; this.key = key;

View File

@@ -74,12 +74,12 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati
} }
@Override @Override
public void deleteErpPurchaseOrganizationListByIds(List<Long> ids) { public void deleteErpPurchaseOrganizationListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateErpPurchaseOrganizationExists(ids); validateErpPurchaseOrganizationExists(ids);
// 删除 // 删除
erpPurchaseOrganizationMapper.deleteByIds(ids); erpPurchaseOrganizationMapper.deleteByIds(ids);
} }
private void validateErpPurchaseOrganizationExists(List<Long> ids) { private void validateErpPurchaseOrganizationExists(List<Long> ids) {
List<ErpPurchaseOrganizationDO> list = erpPurchaseOrganizationMapper.selectByIds(ids); List<ErpPurchaseOrganizationDO> list = erpPurchaseOrganizationMapper.selectByIds(ids);
@@ -108,55 +108,49 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati
@Transactional @Transactional
@XxlJob("getErpPurchaseOrganizationTask") @XxlJob("getErpPurchaseOrganizationTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.采购组织;
OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.采购组织; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
// String factKey ="erpMap"+ OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
String factKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("BUKRS", number);
}
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()){
throw exception(ERP_PURCHASE_ORGANIZATION_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL,funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
// String factKey ="erpMap"+ OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("BUKRS", number);
}
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_PURCHASE_ORGANIZATION_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -177,7 +171,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati
DO.setName(dataJson.getString("EKOTX")); DO.setName(dataJson.getString("EKOTX"));
DO.setNumber(number); DO.setNumber(number);
DO.setCompanyNumber(dataJson.getString("BUKRS")); DO.setCompanyNumber(dataJson.getString("BUKRS"));
if (numbers.get(number)!=null) { if (numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -196,7 +190,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati
} }
} }
return new ProcessingResult(toUpdate, toInsert,key,deleteNumbers); return new ProcessingResult(toUpdate, toInsert, key, deleteNumbers);
} }
/** /**
@@ -216,12 +210,12 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(ErpPurchaseOrganizationDO::getNumber, ErpPurchaseOrganizationDO::getId)); .collect(Collectors.toMap(ErpPurchaseOrganizationDO::getNumber, ErpPurchaseOrganizationDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpPurchaseOrganizationMapper.updateBatch(result.toUpdate); erpPurchaseOrganizationMapper.updateBatch(result.toUpdate);
} }
if (!result.deleteNumbers.isEmpty()){ if (!result.deleteNumbers.isEmpty()) {
// 使用 in 条件批量删除,提高删除效率 // 使用 in 条件批量删除,提高删除效率
erpPurchaseOrganizationMapper.delete(new LambdaQueryWrapperX<ErpPurchaseOrganizationDO>().in(ErpPurchaseOrganizationDO::getNumber, result.deleteNumbers)); erpPurchaseOrganizationMapper.delete(new LambdaQueryWrapperX<ErpPurchaseOrganizationDO>().in(ErpPurchaseOrganizationDO::getNumber, result.deleteNumbers));
myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers);
@@ -237,7 +231,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati
private final String key; private final String key;
private final List<String> deleteNumbers; private final List<String> deleteNumbers;
public ProcessingResult(List<ErpPurchaseOrganizationDO> toUpdate, List<ErpPurchaseOrganizationDO> toInsert,String key,List<String> deleteNumbers) { public ProcessingResult(List<ErpPurchaseOrganizationDO> toUpdate, List<ErpPurchaseOrganizationDO> toInsert, String key, List<String> deleteNumbers) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.toInsert = toInsert; this.toInsert = toInsert;
this.key = key; this.key = key;

View File

@@ -74,12 +74,12 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
} }
@Override @Override
public void deleteErpSalesOrganizationListByIds(List<Long> ids) { public void deleteErpSalesOrganizationListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateErpSalesOrganizationExists(ids); validateErpSalesOrganizationExists(ids);
// 删除 // 删除
erpSalesOrganizationMapper.deleteByIds(ids); erpSalesOrganizationMapper.deleteByIds(ids);
} }
private void validateErpSalesOrganizationExists(List<Long> ids) { private void validateErpSalesOrganizationExists(List<Long> ids) {
List<ErpSalesOrganizationDO> list = erpSalesOrganizationMapper.selectByIds(ids); List<ErpSalesOrganizationDO> list = erpSalesOrganizationMapper.selectByIds(ids);
@@ -108,54 +108,48 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
@Transactional @Transactional
@XxlJob("getErpSalesOrganizationTask") @XxlJob("getErpSalesOrganizationTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.销售组织;
OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.销售组织; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String,Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("BUKRS", number);
}
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()){
throw exception(ERP_SALES_ORGANIZATION_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL,funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_COMPANY_REDIS_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("BUKRS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("BUKRS", number);
}
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_SALES_ORGANIZATION_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**
@@ -176,7 +170,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
DO.setName(dataJson.getString("VTEXT")); DO.setName(dataJson.getString("VTEXT"));
DO.setNumber(number); DO.setNumber(number);
DO.setCompanyNumber(dataJson.getString("BUKRS")); DO.setCompanyNumber(dataJson.getString("BUKRS"));
if (numbers.get(number)!=null) { if (numbers.get(number) != null) {
// 更新 // 更新
DO.setId(numbers.get(number)); DO.setId(numbers.get(number));
toUpdate.add(DO); toUpdate.add(DO);
@@ -184,7 +178,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
// 新增 // 新增
toInsert.add(DO); toInsert.add(DO);
} }
dataArrayNumbers.add( number); dataArrayNumbers.add(number);
} }
} }
// 过滤出numbers中有但dataArray中KOSTL没有的记录即为需要删除的数据 // 过滤出numbers中有但dataArray中KOSTL没有的记录即为需要删除的数据
@@ -194,7 +188,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
deleteNumbers.add(number); deleteNumbers.add(number);
} }
} }
return new ProcessingResult(toUpdate, toInsert,key,deleteNumbers); return new ProcessingResult(toUpdate, toInsert, key, deleteNumbers);
} }
/** /**
@@ -214,7 +208,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
); );
Map<String, Long> numberIdMap = insertedRecords.stream() Map<String, Long> numberIdMap = insertedRecords.stream()
.collect(Collectors.toMap(ErpSalesOrganizationDO::getNumber, ErpSalesOrganizationDO::getId)); .collect(Collectors.toMap(ErpSalesOrganizationDO::getNumber, ErpSalesOrganizationDO::getId));
myRedisConfig.addRedisCacheMap(result.key,numberIdMap); myRedisConfig.addRedisCacheMap(result.key, numberIdMap);
} }
if (!result.toUpdate.isEmpty()) { if (!result.toUpdate.isEmpty()) {
erpSalesOrganizationMapper.updateBatch(result.toUpdate); erpSalesOrganizationMapper.updateBatch(result.toUpdate);
@@ -235,7 +229,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ
private final String key; private final String key;
private final List<String> deleteNumbers; private final List<String> deleteNumbers;
public ProcessingResult(List<ErpSalesOrganizationDO> toUpdate, List<ErpSalesOrganizationDO> toInsert,String key,List<String> deleteNumbers) { public ProcessingResult(List<ErpSalesOrganizationDO> toUpdate, List<ErpSalesOrganizationDO> toInsert, String key, List<String> deleteNumbers) {
this.toUpdate = toUpdate; this.toUpdate = toUpdate;
this.toInsert = toInsert; this.toInsert = toInsert;
this.key = key; this.key = key;

View File

@@ -169,54 +169,48 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService {
@Transactional @Transactional
@XxlJob("getErpWarehouseTask") @XxlJob("getErpWarehouseTask")
public void callErpRfcInterface() { public void callErpRfcInterface() {
try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.库位信息;
OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.库位信息; String funcnr = funcnrEnum.getFuncnr();
String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失
//防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr();
String key = "erpMap" + funcnrEnum.getFuncnr(); if (myRedisConfig.getRedisCacheMap(key).isEmpty()) {
if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key);
initializeMap(key);
}
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("WERKS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("WERKS", number);
}
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_WAREHOUSE_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} catch (Exception e) {
log.error("调用ERP RFC接口失败: {}", e);
throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e);
} }
Map<String, Object> req = new HashMap<>();
JSONArray dataArrayALL = new JSONArray();
String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr();
Map<String, Long> redisCache = myRedisConfig.getRedisCacheMap(factKey);
if (CollUtil.isEmpty(redisCache)) {
throw exception(ERP_FACTORY_NOT_EXISTS);
}
// 1. 调用ERP接口获取数据
for (String number : redisCache.keySet()) {
req.put("WERKS", number);
// 1. 调用ERP接口获取数据
HashMap<String, Object> dataFromERP = erpConfig.fetchDataFromERP(funcnr, req);
JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP");
if (dataArray == null || dataArray.isEmpty()) {
continue;
}
// 往每个子项中添加BUKRS字段
for (int j = 0; j < dataArray.size(); j++) {
JSONObject item = dataArray.getJSONObject(j);
if (item != null) {
item.put("WERKS", number);
}
}
dataArrayALL.addAll(dataArray);
}
if (dataArrayALL.isEmpty()) {
throw exception(ERP_WAREHOUSE_NOT_EXISTS);
}
// 2. 处理公司数据,区分新增和更新
ProcessingResult result = processData(dataArrayALL, funcnrEnum);
// 3. 批量保存数据
saveData(result);
} }
/** /**