From a6deb7c53fc12b9212164eda78e636f5ab5f08da Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Tue, 23 Jan 2024 19:24:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=8C=83=E5=9B=B4=E5=86=85=E5=B9=B4=E6=9C=88=E6=97=A5?= =?UTF-8?q?=E5=B0=8F=E6=97=B6=E7=9A=84=E6=96=B9=E6=B3=95=20=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=A8=AA=E5=9D=90=E6=A0=87=E6=A0=B9=E6=8D=AE=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=8C=83=E5=9B=B4=E5=86=85=E7=9A=84=E5=B9=B4=E6=9C=88?= =?UTF-8?q?=E6=97=A5=E5=B0=8F=E6=97=B6=E5=A1=AB=E5=85=85=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=B9=B6=E5=9B=9E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jeecg/common/util/DateUtils.java | 47 ++++++ .../impl/GardsSampleDataWebServiceImpl.java | 157 +++++++++++------- 2 files changed, 142 insertions(+), 62 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java index 25bbb384..d8dba299 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java @@ -805,4 +805,51 @@ public class DateUtils extends PropertyEditorSupport { return days; } + /** + * 获取开始时间和结束时间之间的全部小时信息 + * @param beginDay + * @param endDay + * @return + */ + public static List getAllDayTime(String beginDay, String endDay){ + List dayTimes = new ArrayList<>(); + try { + //开始日期 + Calendar begin = Calendar.getInstance(); + begin.setTime(DateUtils.parseDate(beginDay, "yyyy-MM-dd")); + //将开始日期的24个小时放入集合中 + for (int i=0; i< 24; i++) { + String dayTime = beginDay; + if (i < 10) { + dayTime+=" 0"+i; + } else { + dayTime+=" "+i; + } + dayTime+=":00:00"; + dayTimes.add(dayTime); + } + //结束日期 + Calendar end = Calendar.getInstance(); + end.setTime(DateUtils.parseDate(endDay, "yyyy-MM-dd")); + //判断 如果结束日期的时间在开始日期的时间之后 + while(end.getTime().after(begin.getTime())){ + //开始日期需要+1天 + begin.add(Calendar.DAY_OF_MONTH, 1); + for (int i=0; i< 24; i++) { + String dayTime = DateUtils.formatDate(begin.getTime(),"yyyy-MM-dd"); + if (i < 10) { + dayTime+=" 0"+i; + } else { + dayTime+=" "+i; + } + dayTime+=":00:00"; + dayTimes.add(dayTime); + } + } + } catch (ParseException e) { + throw new RuntimeException(e); + } + return dayTimes; + } + } \ No newline at end of file diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java index be77cf20..42441e06 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java @@ -885,6 +885,8 @@ public class GardsSampleDataWebServiceImpl extends ServiceImpl allDayTime = DateUtils.getAllDayTime(DateUtils.formatDate(startDate, "yyyy-MM-dd"), DateUtils.formatDate(endDate, "yyyy-MM-dd")); + resultMap.put("AllDayTime", allDayTime); //判断查询的核素内容是否为空 List nuclideNameList = new LinkedList<>(); if (nuclideNames != null && nuclideNames.length > 0) { @@ -933,7 +935,7 @@ public class GardsSampleDataWebServiceImpl extends ServiceImpl> nuclideStatisticsMap = this.baseMapper.findNuclideStatistics(stationId, startTime, endTime, nuclideSql); //处理查询结果 - handleNuclideData(nuclideStatisticsMap, systemType, nuclideNameList, resultMap); + handleNuclideData(nuclideStatisticsMap, systemType, nuclideNameList, allDayTime, resultMap); //返回台站名称 String stationName = stationMap.get(stationId); resultMap.put("STATION_NAME", stationName); @@ -1159,75 +1161,106 @@ public class GardsSampleDataWebServiceImpl extends ServiceImpl> nuclideStatisticsMap, String systemType, List nuclideNameList, Map resultMap) { + private void handleNuclideData(List> nuclideStatisticsMap, String systemType, List nuclideNameList, List allDateTime, Map resultMap) { //存储横坐标采集开始时间 List collectStartList = new LinkedList<>(); //存储横坐标对应体积 List quantityList = new LinkedList<>(); //存储横坐标对应acq活时间 List acqLiveSecList = new LinkedList<>(); - //遍历查询结果数组 - for (Map nuclideStatistics: nuclideStatisticsMap) { - //获取采集开始时间 - Object collectStart = nuclideStatistics.get("COLLECT_START"); - //如果采集开始时间不为空 则存储 - if (Objects.nonNull(collectStart)) { - collectStartList.add(collectStart.toString()); - } else {//否则跳过本次循环 - continue; - } - //获取体积 - Object quantity = nuclideStatistics.get("QUANTITY"); - //判断体积数值是否有 如果有 正常存储 - if (Objects.nonNull(quantity)) { - quantityList.add(Double.valueOf(quantity.toString())); - } else {//如果没有存储0 - quantityList.add(0.0); - } - //获取acq活时间 - Object acquisitionLiveSec = nuclideStatistics.get("ACQUISITION_LIVE_SEC"); - //判断活时间是否为空 如果不为空 正常存储 - if (Objects.nonNull(acquisitionLiveSec)) { - acqLiveSecList.add(Double.valueOf(acquisitionLiveSec.toString())); - } else {//如果为空存储0 - acqLiveSecList.add(0.0); - } - //判断系统类型决定读取核素的信息 - if (systemType.equals("beta") || systemType.equals("gamma")) { - for (String nuclideName: nuclideNameList) { - List concList = (List) resultMap.get(nuclideName + "Conc"); - List mdcList = (List) resultMap.get(nuclideName + "MDC"); - //将核素名称转为全部大写 - String columnName = StringUtils.upperCase(nuclideName); - //读取查询出的浓度 - Object conc = nuclideStatistics.get(columnName); - //判断如果浓度不为空 正常存储 - if (Objects.nonNull(conc)) { - concList.add(Double.valueOf(conc.toString())); - } else {//如果为空 存储0 - concList.add(0.0); - } - //读取查询出的mdc结果 - Object mdc = nuclideStatistics.get(columnName + "MDC"); - //判断如果mdc结果不为空 正常存储 - if (Objects.nonNull(mdc)) { - mdcList.add(Double.valueOf(mdc.toString())); + //遍历日期时间 + for (int i=0; i< allDateTime.size(); i++) { + //根据下标获取日期时间 + String dayTime = allDateTime.get(i); + //遍历查询结果数组 + for (int j=0; j< nuclideStatisticsMap.size(); j++) { + //根据下标获取核素查询结果 + Map nuclideStatistics = nuclideStatisticsMap.get(j); + //获取采集开始时间 + Object collectStart = nuclideStatistics.get("COLLECT_START"); + //采集开始时间转为字符串 + String collectStartStr = collectStart.toString(); + //截取采集开始时间的年月日小时 + collectStartStr = collectStartStr.substring(0, 14) + ":00:00"; + //如果采集时间包含当前日期 则正常的读取数据并存入数组 + if (dayTime.equals(collectStartStr)) { + collectStartList.add(collectStart.toString()); + //获取体积 + Object quantity = nuclideStatistics.get("QUANTITY"); + //判断体积数值是否有 如果有 正常存储 + if (Objects.nonNull(quantity)) { + quantityList.add(Double.valueOf(quantity.toString())); } else { - mdcList.add(0.0); + quantityList.add(null); } - } - } else if (systemType.equals("Particulate")) { - for (String nuclideName: nuclideNameList) { - List concList = (List) resultMap.get(nuclideName + "Conc"); - //将核素名称转为全部大写 - String columnName = StringUtils.upperCase(nuclideName); - //读取查询出的浓度 - Object conc = nuclideStatistics.get(columnName); - //判断如果浓度不为空 正常存储 - if (Objects.nonNull(conc)) { - concList.add(Double.valueOf(conc.toString())); - } else {//如果为空 存储0 - concList.add(0.0); + //获取acq活时间 + Object acquisitionLiveSec = nuclideStatistics.get("ACQUISITION_LIVE_SEC"); + //判断活时间是否为空 如果不为空 正常存储 + if (Objects.nonNull(acquisitionLiveSec)) { + acqLiveSecList.add(Double.valueOf(acquisitionLiveSec.toString())); + } else { + acqLiveSecList.add(null); + } + //判断系统类型决定读取核素的信息 + if (systemType.equals("beta") || systemType.equals("gamma")) { + for (String nuclideName: nuclideNameList) { + List concList = (List) resultMap.get(nuclideName + "Conc"); + List mdcList = (List) resultMap.get(nuclideName + "MDC"); + //将核素名称转为全部大写 + String columnName = StringUtils.upperCase(nuclideName); + //读取查询出的浓度 + Object conc = nuclideStatistics.get(columnName); + //判断如果浓度不为空 正常存储 + if (Objects.nonNull(conc)) { + concList.add(Double.valueOf(conc.toString())); + } else { + concList.add(null); + } + //读取查询出的mdc结果 + Object mdc = nuclideStatistics.get(columnName + "MDC"); + //判断如果mdc结果不为空 正常存储 + if (Objects.nonNull(mdc)) { + mdcList.add(Double.valueOf(mdc.toString())); + } else { + mdcList.add(null); + } + } + } else if (systemType.equals("Particulate")) { + for (String nuclideName: nuclideNameList) { + List concList = (List) resultMap.get(nuclideName + "Conc"); + //将核素名称转为全部大写 + String columnName = StringUtils.upperCase(nuclideName); + //读取查询出的浓度 + Object conc = nuclideStatistics.get(columnName); + //判断如果浓度不为空 正常存储 + if (Objects.nonNull(conc)) { + concList.add(Double.valueOf(conc.toString())); + } else { + concList.add(null); + } + } + } + break; + } else { //如果采集时间不包含当前日期 各数组填补null + //如果全数组遍历后都没有 就填充空数据 + if (j == nuclideStatisticsMap.size()-1) { + collectStartList.add(dayTime); + quantityList.add(null); + acqLiveSecList.add(null); + //判断系统类型决定读取核素的信息 + if (systemType.equals("beta") || systemType.equals("gamma")) { + for (String nuclideName: nuclideNameList) { + List concList = (List) resultMap.get(nuclideName + "Conc"); + List mdcList = (List) resultMap.get(nuclideName + "MDC"); + concList.add(null); + mdcList.add(null); + } + } else if (systemType.equals("Particulate")) { + for (String nuclideName: nuclideNameList) { + List concList = (List) resultMap.get(nuclideName + "Conc"); + concList.add(null); + } + } } } }