| | |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.format.DateTimeParseException; |
| | | import java.util.ArrayList; |
| | | import java.util.HashSet; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * 电站发电量统计服务实现。 |
| | |
| | | return false; |
| | | } |
| | | |
| | | Set<String> existingKeys = getExistingEarnKeys(); |
| | | Set<String> pendingKeys = new HashSet<>(); |
| | | List<TStationEarn> earnList = new ArrayList<>(stationEarnList.size()); |
| | | for (Object item : stationEarnList) { |
| | | JSONObject jsonObject = JSONObject.parseObject(item.toString()); |
| | | TStationEarn stationEarn = buildStationEarn(jsonObject); |
| | | if (stationEarn == null) { |
| | | continue; |
| | | } |
| | | String earnKey = buildEarnKey(stationEarn); |
| | | if (existingKeys.contains(earnKey) || !pendingKeys.add(earnKey)) { |
| | | continue; |
| | | } |
| | | earnList.add(stationEarn); |
| | | } |
| | | List<TStationEarn> earnList = buildStationEarnSyncList(stationEarnList, getExistingEarnByKey()); |
| | | |
| | | if(CollectionUtils.isNotEmpty(earnList)) { |
| | | List<List<TStationEarn>> earnAllList = Lists.partition(earnList, 500); |
| | | earnAllList.forEach(this::saveBatch); |
| | | earnAllList.forEach(this::saveOrUpdateBatch); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | private TStationEarn buildStationEarn(JSONObject jsonObject) { |
| | | static List<TStationEarn> buildStationEarnSyncList(JSONArray stationEarnList, |
| | | Map<String, TStationEarn> existingByKey) { |
| | | Map<String, TStationEarn> recordsByKey = new LinkedHashMap<>(); |
| | | for (Object item : stationEarnList) { |
| | | TStationEarn stationEarn = buildStationEarn(JSONObject.parseObject(item.toString())); |
| | | if (stationEarn == null) { |
| | | continue; |
| | | } |
| | | TStationEarn existing = existingByKey.get(buildEarnKey(stationEarn)); |
| | | if (existing != null) { |
| | | stationEarn.setId(existing.getId()); |
| | | } |
| | | recordsByKey.put(buildEarnKey(stationEarn), stationEarn); |
| | | } |
| | | return new ArrayList<>(recordsByKey.values()); |
| | | } |
| | | |
| | | private static TStationEarn buildStationEarn(JSONObject jsonObject) { |
| | | String stationId = jsonObject.getString("stationId"); |
| | | LocalDate saveTime = parseSaveTime(jsonObject.getString("saveTime")); |
| | | if (StringUtils.isBlank(stationId) || saveTime == null) { |
| | |
| | | return stationEarn; |
| | | } |
| | | |
| | | private Set<String> getExistingEarnKeys() { |
| | | List<TStationEarn> existingList = lambdaQuery().select(TStationEarn::getStationId, TStationEarn::getSaveTime).list(); |
| | | Set<String> existingKeys = new HashSet<>(); |
| | | private Map<String, TStationEarn> getExistingEarnByKey() { |
| | | List<TStationEarn> existingList = lambdaQuery() |
| | | .select(TStationEarn::getId, TStationEarn::getPlatformId, TStationEarn::getStationId, TStationEarn::getSaveTime) |
| | | .list(); |
| | | Map<String, TStationEarn> existingByKey = new LinkedHashMap<>(); |
| | | for (TStationEarn stationEarn : existingList) { |
| | | if (StringUtils.isNotBlank(stationEarn.getStationId()) && stationEarn.getSaveTime() != null) { |
| | | existingKeys.add(buildEarnKey(stationEarn)); |
| | | existingByKey.put(buildEarnKey(stationEarn), stationEarn); |
| | | } |
| | | } |
| | | return existingKeys; |
| | | return existingByKey; |
| | | } |
| | | |
| | | private String buildEarnKey(TStationEarn stationEarn) { |
| | | return stationEarn.getStationId() + "|" + stationEarn.getSaveTime(); |
| | | private static String buildEarnKey(TStationEarn stationEarn) { |
| | | return stationEarn.getPlatformId() + "|" + stationEarn.getStationId() + "|" + stationEarn.getSaveTime(); |
| | | } |
| | | |
| | | private void validate(TStationEarn stationEarn) { |
| | |
| | | return value == null ? BigDecimal.ZERO : value; |
| | | } |
| | | |
| | | private BigDecimal parseBigDecimal(String value) { |
| | | private static BigDecimal parseBigDecimal(String value) { |
| | | if (StringUtils.isBlank(value)) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private LocalDate parseSaveTime(String value) { |
| | | private static LocalDate parseSaveTime(String value) { |
| | | if (StringUtils.isBlank(value)) { |
| | | return null; |
| | | } |