From 29d3c47cc6c903c09b386649fabaebc81cbeca27 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期四, 05 六月 2025 10:43:39 +0800 Subject: [PATCH] 报错日志添加 --- ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 240 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 198 insertions(+), 42 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java index 0be079c..4db2f09 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java @@ -20,6 +20,7 @@ import com.ycl.platform.domain.vo.DynamicColumnVO; import com.ycl.platform.mapper.DynamicColumnMapper; import com.ycl.platform.mapper.ImageResourceSecurityDetailMapper; +import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.mapper.YwPointMapper; import com.ycl.platform.service.*; import com.ycl.system.Result; @@ -66,7 +67,6 @@ private final MongoTemplate mongoTemplate; private final ImageResourceSecurityDetailMapper securityDetailMapper; private final YwPointMapper pointMapper; - private final ICheckIndexVideoService checkIndexVideoService; private final ICheckIndexCarService checkIndexCarService; private final ICheckIndexFaceService checkIndexFaceService; private final DynamicColumnMapper dynamicColumnMapper; @@ -77,14 +77,35 @@ private static DecimalFormat DF = new DecimalFormat("#.####"); + + + public Map<String,List<DynamicColumnVO>> getDynamicByConditions(DataCenterQuery params,List<DynamicColumnVO> list){ + //鑾峰緱鍒板搴攊d锛屼笖鍖呭惈浼犲叆瀛楃涓� 鍔ㄦ�佸垪闆嗗悎 + List<DynamicColumnVO> likeFieldDynamicColumnVOList = list.stream() + .filter(dynamicColumnVO -> + dynamicColumnVO.getLabelId().equals(params.getDyId()) && + dynamicColumnVO.getColumnValue().contains(params.getDyValue()) + ).collect(Collectors.toList()); + //鑾峰緱婊¤冻鏉′欢鐨刬d闆嗗悎 + List<String> ids = likeFieldDynamicColumnVOList.stream().map(DynamicColumnVO::getRefStringId).toList(); + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = list.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + Set<String> removeSet = new HashSet<>(ids); + //绉婚櫎鎺変笉绗﹀悎鏉′欢鐨刱ey + groupByRefStringIdMap.keySet().retainAll(removeSet); + + return groupByRefStringIdMap; + } + @Override public void recordingAvailabilityExport(HttpServletResponse response,DataCenterQuery params) throws IOException { + List<String> likeFileds = Arrays.asList("deviceId", "deviceName"); Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null); //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠� if (params.getOption() != null) { query.addCriteria(Criteria.where("recordStatus").is(params.getOption())); } + MongoUtil.setNoPage(query, params, TIME_FIELD); List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class); //缈昏瘧琛屾斂鍖哄煙 resultList.forEach(item -> { @@ -92,8 +113,19 @@ AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode); if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName()); }); + //鑾峰緱鍔ㄦ�佸垪鏁版嵁 List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_VIDEO); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(RecordingAvailabilityHeaders.arealayername); @@ -115,21 +147,28 @@ headersList.addAll(dynamicsHeaders); headers.addAll(headersList); } - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + //鏌ヨ鍒版湁鍔ㄦ�佸垪鏌ヨ鏉′欢 + //鑾峰緱瀵瑰簲鍔ㄦ�佸垪涓璻ef鐨勫璞d 涓� 鏌ヨ缁撴灉id杩囨护 + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getId())) + .collect(Collectors.toList()); + } + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<List<Object>> data = new ArrayList<>(); for (RecordMetaDSumResult result : resultList){ List<Object> row = new ArrayList<>(); row.add(result.getArealayername()); row.add(result.getArealayerno()); - row.add(dateFormat2.format(result.getCreateTime())); + row.add(dateFormat.format(result.getCreateTime())); row.add(result.getDeviceId()); row.add(result.getMissDuration()); row.add(result.getPlatId()); row.add(result.getRecordDuration()); row.add(result.getRecordStatusText()); - row.add(dateFormat2.format(result.getCreateTime())); + row.add(dateFormat.format(result.getCreateTime())); //娣诲姞鍔ㄦ�佸垪鏁版嵁 for (String header : headersList){ boolean flag = false; @@ -201,8 +240,23 @@ item.setOffLineTimeStr(offLineTime); } }); + + + List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_FACE_POINT); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + + + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } + //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointOnlineHeaders.no); @@ -223,6 +277,13 @@ //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷� headersList.addAll(dynamicsHeaders); headers.addAll(headersList); + } + + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getNo())) + .collect(Collectors.toList()); } List<List<Object>> data = new ArrayList<>(); @@ -313,7 +374,16 @@ } }); List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_VIDEO_POINT); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointOnlineHeaders.no); @@ -334,6 +404,14 @@ //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷� headersList.addAll(dynamicsHeaders); headers.addAll(headersList); + } + + + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getNo())) + .collect(Collectors.toList()); } List<List<Object>> data = new ArrayList<>(); @@ -428,7 +506,16 @@ } }); List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_CAR_POINT); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointOnlineHeaders.no); @@ -449,6 +536,14 @@ //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷� headersList.addAll(dynamicsHeaders); headers.addAll(headersList); + } + + + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getNo())) + .collect(Collectors.toList()); } List<List<Object>> data = new ArrayList<>(); @@ -536,6 +631,8 @@ } + + /** * 瑙嗛锛氱偣浣嶅湪绾跨巼 @@ -1261,6 +1358,22 @@ } private final ISysConfigService configService; + + public double getSySMinTime(){ + //鑾峰彇绯荤粺鍙傛暟 + String dictLabel = configService.selectConfigByKey("recording_min_time"); + double recordingMinTime; + try { + recordingMinTime = Double.parseDouble(dictLabel) / 60; // 濡傛灉 dictLabel 鏄互灏忔椂涓哄崟浣嶏紝鍒欐棤闇�闄や互 60 + } catch (Exception e) { + log.error("閰嶇疆鐨勫垹闄ゆ椂闂磋寖鍥存牸寮忎笉姝g‘: {}", dictLabel, e); + return 12.0; // 榛樿 12 灏忔椂锛堜互灏忔椂涓哄崟浣嶏級 + } + + return recordingMinTime; + } + private final TMonitorMapper tMonitorMapper; + /** * 瑙嗛锛氬綍鍍忓彲鐢ㄧ巼 * @@ -1268,27 +1381,21 @@ * @return */ @Override - public Result videoAvailabilityRate(DataCenterQuery params) { - //鑾峰彇绯荤粺鍙傛暟 - String dictLabel = configService.selectConfigByKey("recording_min_time"); - - double recordingMinTime; - try { - recordingMinTime = Double.parseDouble(dictLabel) / 60; // 濡傛灉 dictLabel 鏄互灏忔椂涓哄崟浣嶏紝鍒欐棤闇�闄や互 60 - } catch (Exception e) { - log.error("閰嶇疆鐨勫垹闄ゆ椂闂磋寖鍥存牸寮忎笉姝g‘: {}", dictLabel, e); - recordingMinTime = 12.0; // 榛樿 12 灏忔椂锛堜互灏忔椂涓哄崟浣嶏級 - } + List<String> noString = tMonitorMapper.getIdListVideo(); List<String> likeFileds = Arrays.asList("deviceId", "deviceName"); Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null); + if (CollectionUtils.isNotEmpty(noString)) { // 闃叉绌洪泦鍚堝紓甯� + query.addCriteria(Criteria.where("no").in(noString)); + } //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠� if (params.getOption() != null) { query.addCriteria(Criteria.where("recordStatus").is(params.getOption())); } long total = mongoTemplate.count(query, RecordMetaDSumResult.class); MongoUtil.setPage(query, params, "createTime"); + List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class); //鏌ヨ鍔ㄦ�佸垪鏁版嵁 //鏌ヨ鍔ㄦ�佸垪鏁版嵁鏇村叿id鏌ヨ @@ -1304,12 +1411,15 @@ }); // 缁熻鏁伴噺 + MongoDatabase database = mongoTemplate.getDb(); MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum"); List<Integer> status = Arrays.asList(1, 0, -1); List<String> resultCount = status.stream().map(item -> { List<Document> dList = new ArrayList<>(2); + dList.add(new Document("recordStatus", new Document("$eq", item))); + dList.add(new Document("no", new Document("$in", noString))); setTag(params, dList); Document filter = new Document("$and", dList); // 鏋勫缓鑱氬悎绠¢亾 @@ -1333,12 +1443,14 @@ MongoDatabase databaes2 = mongoTemplate.getDb(); MongoCollection<Document> collection2 = databaes2.getCollection("uy_record_meta_d_sum"); - double finalRecordingMinTime = recordingMinTime; + double finalRecordingMinTime = getSySMinTime(); - List<Document> documentList = new ArrayList<>(3); + List<Document> documentList = new ArrayList<>(2); + documentList.add(new Document("no", new Document("$in", noString))); setTag(params, documentList); - Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); documentList.add(recording); + Document filter = new Document("$and", documentList); // 鏋勫缓鑱氬悎绠¢亾 List<Document> pipeline = Arrays.asList( @@ -1348,25 +1460,14 @@ new Document("$count", "uniqueDeviceIds") ); AggregateIterable<Document> result = collection2.aggregate(pipeline); + + Integer uniqueDeviceIdCount = 0; for (Document doc : result) { uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� } - log.error("鎵撳嵃锛歿}",uniqueDeviceIdCount); -// List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) -// .select(CheckIndexVideo::getVideoAvailable) -// .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province) -// .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept) -// .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) -// .list(); -// BigDecimal onlineRate = BigDecimal.ZERO; -// if (CollectionUtils.isNotEmpty(videoList)) { -// BigDecimal sum = videoList.stream().map(CheckIndexVideo::getVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add); -// BigDecimal count = BigDecimal.valueOf(videoList.size()); -// onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); -// } - //鍔犱竴涓�绘暟 + log.error("褰曞儚鍙敤鐜囨墦鍗帮細{}",uniqueDeviceIdCount); int totalCount = 0; for (String s : resultCount) { totalCount += Integer.parseInt(s); @@ -1376,8 +1477,8 @@ BigDecimal onlineRate = BigDecimal.ZERO; // 1锛氬畬鏁� 0锛氶棿姝� -1锛氬紓甯� | if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { - //resultCount.get(0) - onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(uniqueDeviceIdCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + //resultCount.get(0)鏄�绘暟 uniqueDeviceIdCount鏄洿鍏风郴缁熷弬鏁版煡璇㈠埌mongodb涓ぇ浜庣瓑浜� recordDuration瀛楁鐨勬�绘暟 + onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); } resultCount.add(this.remove0(onlineRate)); @@ -1437,6 +1538,35 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); + + //璁$畻閮ㄧ骇褰曞儚鍙敤鐜� + MongoDatabase database2 = mongoTemplate.getDb(); + MongoCollection<Document> collection2 = database2.getCollection("uy_record_meta_d_sum"); + double finalRecordingMinTime = getSySMinTime(); + + List<Document> documentList = new ArrayList<>(4); + documentList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE))); + setTag(params, documentList); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); + documentList.add(recording); + Document filter = new Document("$and", documentList); + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", filter), + // $group 鍘婚噸 + new Document("$group", new Document("_id", "$deviceId")), + new Document("$count", "uniqueDeviceIds") + ); + AggregateIterable<Document> result = collection2.aggregate(pipeline); + Integer uniqueDeviceIdCount = 0; + for (Document doc : result) { + uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); + break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� + } + log.error("閮ㄧ骇褰曞儚鍙敤鐜噞}:",uniqueDeviceIdCount); + + + // List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) // .select(CheckIndexVideo::getMinistryVideoAvailable) // .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province) @@ -1457,7 +1587,7 @@ resultCount.add(0, totalCount + ""); BigDecimal onlineRate = BigDecimal.ZERO; if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { - onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); } resultCount.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); @@ -1516,6 +1646,32 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); + //璁$畻閲嶇偣鐐逛綅褰曞儚鍙敤鐜� + MongoDatabase database2 = mongoTemplate.getDb(); + MongoCollection<Document> collection2 = database2.getCollection("uy_record_meta_d_sum"); + double finalRecordingMinTime = getSySMinTime(); + + List<Document> documentList = new ArrayList<>(4); + documentList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE))); + setTag(params, documentList); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); + documentList.add(recording); + Document filter = new Document("$and", documentList); + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", filter), + // $group 鍘婚噸 + new Document("$group", new Document("_id", "$deviceId")), + new Document("$count", "uniqueDeviceIds") + ); + AggregateIterable<Document> result = collection2.aggregate(pipeline); + Integer uniqueDeviceIdCount = 0; + for (Document doc : result) { + uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); + break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� + } + log.error("閲嶇偣鐐逛綅褰曞儚鍙敤鐜噞}:",uniqueDeviceIdCount); + // List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) // .select(CheckIndexVideo::getKeyVideoAvailable) // .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province) @@ -1536,7 +1692,7 @@ resultCount.add(0, totalCount + ""); BigDecimal onlineRate = BigDecimal.ZERO; if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { - onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); } resultCount.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); -- Gitblit v1.8.0