From 1f93887d0e1e327cf7a1dc644cb59b5f8cca1e88 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Mon, 10 Oct 2022 13:57:42 +0800
Subject: [PATCH] 上传浑南区图表功能

---
 screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java | 1049 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 screen-api/src/main/java/com/moral/api/service/ExcelService.java            |   21 
 screen-api/src/main/java/com/moral/api/controller/ExcelController.java      |   47 ++
 screen-api/src/main/java/com/moral/api/service/HnExcelService.java          |   33 +
 screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java         |   20 +
 screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java   |    9 
 6 files changed, 1,168 insertions(+), 11 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/controller/ExcelController.java b/screen-api/src/main/java/com/moral/api/controller/ExcelController.java
index 1425868..3aa71db 100644
--- a/screen-api/src/main/java/com/moral/api/controller/ExcelController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/ExcelController.java
@@ -11,6 +11,7 @@
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import java.io.IOException;
+import java.text.ParseException;
 import java.util.List;
 import java.util.Map;
 
@@ -18,7 +19,9 @@
 
 import com.moral.api.pojo.bo.ExcelBO;
 import com.moral.api.pojo.vo.excel.ExcelVo;
+import com.moral.api.pojo.vo.excel.SyExcelVo;
 import com.moral.api.service.ExcelService;
+import com.moral.api.service.HnExcelService;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
 import com.moral.util.WebUtils;
@@ -31,8 +34,12 @@
     @Autowired
     private ExcelService excelService;
 
+
+    @Autowired
+    private HnExcelService hnExcelService;
+
     /**
-     * ������
+     * ���������������
      * @param request
      * @return
      * @throws IOException
@@ -50,7 +57,7 @@
 
 
     /**
-     * ������
+     * ���������������
      * @param id
      * @return
      */
@@ -86,4 +93,40 @@
         return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),excelBOS);
     }
 
+
+    /**
+     * ���������������������
+     * @param request
+     * @return
+     * @throws IOException
+     */
+    @PostMapping("syExcelImport")
+    public ResultMessage syExcelImport(HttpServletRequest request) throws IOException, ParseException {
+        Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
+        if (!params.containsKey("time") || !params.containsKey("code") || params.containsKey("data")){
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("files");
+        ExcelBO excelImport = hnExcelService.getExcelImport(files, params);
+        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),excelImport);
+    }
+
+    /**
+     * ���������������
+     * @param id
+     * @return
+     */
+    @GetMapping("/syExcelExport")
+    public ResultMessage syExcelExport(Integer id){
+        if (id==null){
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+
+        SyExcelVo syExcelVo = hnExcelService.SyExport(id);
+        if (syExcelVo==null){
+            return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(), ResponseCodeEnum.TARGET_IS_NULL.getMsg());
+        }
+        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),syExcelVo);
+    }
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java
new file mode 100644
index 0000000..219c9d1
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java
@@ -0,0 +1,20 @@
+package com.moral.api.pojo.vo.excel;
+
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+@Data
+public class SyExcelVo {
+
+    private  String code1;
+    private  String code2;
+    private  String code3;
+    private  String code4;
+    private  String code5;
+    private  String code6;
+
+    private Map<String, ArrayList<String>> list;
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/ExcelService.java b/screen-api/src/main/java/com/moral/api/service/ExcelService.java
index 0b1e330..5cbdc40 100644
--- a/screen-api/src/main/java/com/moral/api/service/ExcelService.java
+++ b/screen-api/src/main/java/com/moral/api/service/ExcelService.java
@@ -4,6 +4,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.text.ParseException;
 import java.util.List;
 import java.util.Map;
 
@@ -12,14 +13,28 @@
 import com.moral.api.pojo.vo.excel.ExcelVo;
 
 
-public interface ExcelService {
 
+public interface ExcelService {
+    /**
+     * ���������������
+     * @param files
+     * @param params
+     * @return
+     * @throws IOException
+     */
     public ExcelBO importTemplate(List<MultipartFile> files, Map<String, Object> params) throws IOException;
 
-
+    /**
+     * ���������������
+     * @param id
+     * @return
+     */
     public ExcelVo export(Integer id);
 
-
+    //������
     public  List<ExcelBO> excelSelect(String startTime,String code,String endTime);
 
+
+
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/HnExcelService.java b/screen-api/src/main/java/com/moral/api/service/HnExcelService.java
new file mode 100644
index 0000000..31b8088
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/HnExcelService.java
@@ -0,0 +1,33 @@
+package com.moral.api.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+import com.moral.api.pojo.bo.ExcelBO;
+import com.moral.api.pojo.vo.excel.SyExcelVo;
+
+public interface HnExcelService {
+
+
+    /**
+     * ���������������
+     * @param files
+     * @param params
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    ExcelBO getExcelImport(List<MultipartFile> files, Map<String, Object> params) throws IOException, ParseException;
+
+
+    /**
+     * ���������������
+     * @param id
+     * @return
+     */
+    SyExcelVo SyExport(Integer id);
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java
index a551074..79b6f06 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java
@@ -36,8 +36,7 @@
 import com.moral.api.pojo.vo.excel.ExcelVo;
 import com.moral.api.service.ExcelService;
 import com.moral.api.utils.ExcelUtils;
-import com.moral.pojo.AQI;
-import com.moral.util.AQIUtils;
+
 import com.moral.util.DateUtils;
 
 
@@ -48,7 +47,7 @@
     private ExcelMapper excelMapper;
 
     /**
-     * ������
+     * ���������������
      * @param files
      * @param params
      * @return
@@ -131,14 +130,12 @@
     }
 
     /**
-     * ������
+     * ���������������
      * @param id
      * @return
      */
     @Override
     public ExcelVo export(Integer id) {
-
-
         HashMap<String, Object> map1 = new HashMap<>();
         ArrayList<Map<String,Object>> list1 = new ArrayList<>();
         ArrayList<Map<String,Object>> list2 = new ArrayList<>();
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java
new file mode 100644
index 0000000..b7490fe
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java
@@ -0,0 +1,1049 @@
+package com.moral.api.service.impl;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.TbExcel;
+import com.moral.api.mapper.ExcelMapper;
+import com.moral.api.pojo.bo.ExcelBO;
+import com.moral.api.pojo.vo.excel.SyExcelVo;
+import com.moral.api.service.HnExcelService;
+import com.moral.api.utils.ExcelUtils;
+import com.moral.pojo.AQI;
+import com.moral.util.AQIUtils;
+import com.moral.util.AmendUtils;
+import com.moral.util.DateUtils;
+
+
+@Service
+public class HnExcelServiceImpl implements HnExcelService {
+
+    @Autowired
+    private ExcelMapper excelMapper;
+
+    /**
+     * ���������������
+     * @param files
+     * @param params
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    @Override
+    public ExcelBO getExcelImport(List<MultipartFile> files, Map<String, Object> params) throws IOException, ParseException {
+        String time = (String) params.get("time");
+        String code = (String) params.get("code");
+        String time1 = (String) params.get("date");
+        Date date = DateUtils.getDate(time, "yyyy-MM-dd");
+        Date date1 = DateUtils.getDate(time1, "yyyy-MM-dd");
+        ExcelBO excelBO = new ExcelBO();
+        QueryWrapper<TbExcel> wrapper = new QueryWrapper<>();
+        wrapper.eq("time",date).eq("code",code);
+        TbExcel excel = excelMapper.selectOne(wrapper);
+        if (excel==null){
+            TbExcel excel1 = new TbExcel();
+            HashMap<String, Map<String, List<Integer>>> map = new HashMap<>();
+            MultipartFile file1 = files.get(0);
+            Map<String, List<Integer>> map1 = getMap1(file1, 0,time);
+            map.put("������������",map1);
+            Map<String, List<Integer>> map2 = getMap1(file1, 1,time);
+            map.put("���������",map2);
+            Map<String, List<Integer>> map3 = getTo(file1,time);
+            map.put("���������",map3);
+            String s = JSON.toJSONString(map);
+            excel1.setValue(s);
+            excel1.setTime(date);
+            excel1.setCode(code);
+            excel1.setDate(date1);
+            excelMapper.insert(excel1);
+            excelBO.setId(excel1.getId());
+            excelBO.setTime(excel1.getTime());
+            excelBO.setDate(excel1.getDate());
+        }else {
+            HashMap<String, Map<String, List<Integer>>> map = new HashMap<>();
+            MultipartFile file1 = files.get(0);
+            Map<String, List<Integer>> map1 = getMap1(file1, 0,time);
+            map.put("������������",map1);
+            Map<String, List<Integer>> map2 = getMap1(file1, 1,time);
+            map.put("���������",map2);
+            Map<String, List<Integer>> map3 = getTo(file1,time);
+            map.put("���������",map3);
+            String s = JSON.toJSONString(map);
+            excel.setValue(s);
+            excelMapper.updateById(excel);
+            excelBO.setId(excel.getId());
+            excelBO.setTime(excel.getTime());
+            excelBO.setDate(excel.getDate());
+
+        }
+        return excelBO;
+
+    }
+
+    /**
+     * ���������������
+     * @param id
+     * @return
+     */
+    @Override
+    public SyExcelVo SyExport(Integer id) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        HashMap<String, ArrayList<String>> rsMap = new HashMap<>();
+        SyExcelVo syExcelVo = new SyExcelVo();
+        TbExcel excel = excelMapper.selectById(id);
+        String value = excel.getValue();
+        Date time = excel.getTime();
+        String format = sdf.format(time);
+        String substring = format.substring(5, 7);
+        int data= Integer.parseInt(substring);
+
+        Map<String, Map<String, List<Integer>>> map = JSON.parseObject(value, Map.class);
+        Set<String> strings = map.keySet();
+        for (String string : strings) {
+            if (string.equals("������������")){
+                Map<String, List<Integer>> stringListMap = map.get(string);
+                Set<String> strings1 = stringListMap.keySet();
+                for (String s : strings1) {
+                    if (s.equals("count")){
+                        ArrayList<String> list1 = getList(stringListMap, s);
+                        rsMap.put("hnd1",list1);
+                    }
+                    if (s.equals("PM2_5")){
+                        ArrayList<String> list1 = getArrayList(stringListMap, s);
+                        rsMap.put("hnd2",list1);
+
+                    }
+                }
+            }
+            if (string.equals("���������")){
+                Map<String, List<Integer>> stringListMap = map.get(string);
+                Set<String> strings1 = stringListMap.keySet();
+                for (String s : strings1) {
+                    if (s.equals("count")){
+                        ArrayList<String> list1 = getList(stringListMap, s);
+                        rsMap.put("xxj1",list1);
+                    }
+                    if (s.equals("PM2_5")){
+                        ArrayList<String> list1 = getArrayList(stringListMap, s);
+                        rsMap.put("xxj2",list1);
+                    }
+                }
+            }
+            if (string.equals("���������")){
+                Map<String, List<Integer>> stringListMap = map.get(string);
+                Set<String> strings1 = stringListMap.keySet();
+                for (String s : strings1) {
+                    if (s.equals("count")){
+                        ArrayList<String> list1 = new ArrayList<>();
+                        List<Integer> list = stringListMap.get(s);
+                        Integer sum =0;
+                        if (data>=1 && data<=3){
+                            sum = list.get(0) + list.get(1) + list.get(2);
+                        }else if (data>=4 &&data<=6){
+                            sum = list.get(3) + list.get(4) + list.get(5);
+                        }else if (data>=7 &&data<=9){
+                            sum = list.get(6) + list.get(7) + list.get(8);
+                        }else {
+                            sum = list.get(9) + list.get(10) + list.get(11);
+                        }
+                        syExcelVo.setCode5(sum.toString());
+                        for (int i = 0; i < list.size()-1; i++) {
+                            if (list.get(i)==0){
+                                list1.add("");
+                                continue;
+                            }
+                            list1.add(list.get(i).toString());
+                        }
+                        Integer integer = list.get(12);
+                        syExcelVo.setCode1(integer.toString());
+                        Integer integer1 = list.get(13);
+                        int i = integer - integer1;
+                        String code ="";
+                        if (i<=0){
+                            code = "������"+i+"���";
+                        }else {
+                            code = "������"+i+"���";
+                        }
+                        list1.add(code);
+                        syExcelVo.setCode2(code);
+                        list1.add(0,"������������");
+                        rsMap.put("hnq1",list1);
+                    }
+                    if (s.equals("PM2_5")){
+                        ArrayList<String> list1 = new ArrayList<>();
+                        List<Integer> list = stringListMap.get(s);
+                        Integer sum =0;
+                        if (data>=1 && data<=3){
+                            sum = list.get(0) + list.get(1) + list.get(2);
+                        }else if (data>=4 &&data<=6){
+                            sum = list.get(3) + list.get(4) + list.get(5);
+                        }else if (data>=7 &&data<=9){
+                            sum = list.get(6) + list.get(7) + list.get(8);
+                        }else {
+                            sum = list.get(9) + list.get(10) + list.get(11);
+                        }
+
+                        Integer round = Math.round(sum / 3);
+                        syExcelVo.setCode6(round.toString());
+                        for (int i = 0; i < list.size()-1; i++) {
+                            if (list.get(i)==0){
+                                list1.add("");
+                                continue;
+                            }
+                            list1.add(list.get(i).toString());
+                        }
+                        Integer integer = list.get(12);
+                        syExcelVo.setCode3(integer.toString());
+                        Integer integer1 = list.get(13);
+                        double i  = integer - integer1;
+
+                        double i1 = AmendUtils.sciCal((i / integer1)*100,1);
+                        String code  = "";
+                        if (i1<=0){
+                            code = "������"+i1+"%";
+                        }else {
+                            code = "������"+i1+"%";
+                        }
+
+                        list1.add(code);
+                        syExcelVo.setCode4(code);
+                        list1.add(0,"PM2.5������������/������");
+                        rsMap.put("hnq2",list1);
+                    }
+                }
+            }
+        }
+
+        ArrayList<String> list1 = new ArrayList<>();
+        ArrayList<String> list2 = new ArrayList<>();
+        for (int i = 0; i < 15; i++) {
+            if (i==0){
+                list1.add("������������");
+                continue;
+            }
+            list1.add("");
+        }
+        list2.addAll(list1);
+        list2.remove(0);
+        list2.add(0,"PM2.5������������/������");
+        rsMap.put("sy1",list1);
+        rsMap.put("sy2",list2);
+        syExcelVo.setList(rsMap);
+        return syExcelVo;
+    }
+
+
+    //������pm2.5������
+    private ArrayList<String> getArrayList(Map<String, List<Integer>> stringListMap, String s) {
+        ArrayList<String> list1 = new ArrayList<>();
+        List<Integer> list = stringListMap.get(s);
+        for (int i = 0; i < list.size()-1; i++) {
+            if (list.get(i)==0){
+                list1.add("");
+                continue;
+            }
+            list1.add(list.get(i).toString());
+        }
+        Integer integer = list.get(12);
+        Integer integer1 = list.get(13);
+        double i1 = 0.0;
+        if (integer1!=0){
+            double i  = integer - integer1;
+            i1 = AmendUtils.sciCal((i / integer1)*100,1);
+        }
+        String code  = "";
+        if (i1<=0){
+            code = "������"+i1+"%";
+        }else {
+            code = "������"+i1+"%";
+        }
+        list1.add(code);
+        list1.add(0,"PM2.5������������/������");
+        return list1;
+    }
+
+    //������������������
+    private ArrayList<String> getList(Map<String, List<Integer>> stringListMap, String s) {
+        ArrayList<String> list1 = new ArrayList<>();
+        List<Integer> list = stringListMap.get(s);
+        for (int i = 0; i < list.size()-1; i++) {
+            if (list.get(i)==0){
+                list1.add("");
+                continue;
+            }
+            list1.add(list.get(i).toString());
+        }
+        Integer integer = list.get(12);
+        Integer integer1 = list.get(13);
+        int i = integer - integer1;
+        String code = "";
+        if (i<=0){
+            code = "������"+i+"���";
+        }else {
+            code = "������"+i+"���";
+        }
+        list1.add(code);
+        list1.add(0,"������������");
+        return list1;
+    }
+    //������������
+    private Map<String, List<Integer>> getMap1(MultipartFile file, int code,String time) throws IOException, ParseException {
+        XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
+        HashMap<String, Object> rsMap1 = new HashMap<>();
+        HashMap<String, Object> rsMap2 = new HashMap<>();
+        HashMap<String, Object> rsMap3 = new HashMap<>();
+        XSSFSheet sheetAt = workbook.getSheetAt(code);
+        //������������������
+        int lastRowNum = sheetAt.getLastRowNum();
+        for (int i = 2; i <= lastRowNum; i++) {
+            XSSFRow row = sheetAt.getRow(i);
+            if (row == null) {
+                continue;
+            }
+            short lastCellNum = row.getLastCellNum();
+            if (lastCellNum < 8) {
+                continue;
+            }
+            Object[] objects = new Object[lastCellNum];
+            for (int j = 0; j < lastCellNum; j++) {
+                Cell cell = row.getCell(j);
+                if (cell != null) {
+                    Object value = ExcelUtils.getValue(cell);
+                    objects[j] = value;
+                }
+
+            }
+            HashMap<String, Object> map = new HashMap<>();
+            HashMap<String, Object> map1 = new HashMap<>();
+            HashMap<String, Object> map2 = new HashMap<>();
+            if (objects.length == 9) {
+                map.put("time", objects[0]);
+                map.put("PM10", objects[1]);
+                map.put("a34004", objects[2]);
+                map.put("SO2", objects[3]);
+                map.put("NO2", objects[4]);
+                map.put("CO", objects[5]);
+                map.put("O3_8H", objects[6]);
+                map.put("AQI", objects[7]);
+                rsMap1.put(objects[0].toString(), map);
+            }
+            if (objects.length == 18) {
+                map.put("time", objects[0]);
+                map.put("PM10", objects[1]);
+                map.put("a34004", objects[2]);
+                map.put("SO2", objects[3]);
+                map.put("NO2", objects[4]);
+                map.put("CO", objects[5]);
+                map.put("O3_8H", objects[6]);
+                map.put("AQI", objects[7]);
+                rsMap1.put(objects[0].toString(), map);
+
+                if (!objects[11].toString().contains("H")
+                        && !objects[12].toString().contains("H")
+                        && !objects[13].toString().contains("H")
+                        && !objects[14].toString().contains("H")
+                        && !objects[15].toString().contains("H")
+                        && !objects[16].toString().contains("H"))
+                {
+                    map1.put("time", objects[10]);
+                    map1.put("PM10", objects[11]);
+                    map1.put("a34004", objects[12]);
+                    map1.put("SO2", objects[13]);
+                    map1.put("NO2", objects[14]);
+                    map1.put("CO", objects[15]);
+                    map1.put("O3_8H", objects[16]);
+                    map1.put("AQI", objects[17]);
+                    rsMap2.put(objects[10].toString(), map1);
+                }
+
+            }
+
+            if (objects.length == 27) {
+                map.put("time", objects[0]);
+                map.put("PM10", objects[1]);
+                map.put("a34004", objects[2]);
+                map.put("SO2", objects[3]);
+                map.put("NO2", objects[4]);
+                map.put("CO", objects[5]);
+                map.put("O3_8H", objects[6]);
+                map.put("AQI", objects[7]);
+                rsMap1.put(objects[0].toString(), map);
+                if (   !objects[11].toString().contains("H")
+                        && !objects[12].toString().contains("H")
+                        && !objects[13].toString().contains("H")
+                        && !objects[14].toString().contains("H")
+                        && !objects[15].toString().contains("H")
+                        && !objects[16].toString().contains("H")
+                ) {
+
+                    map1.put("time", objects[10]);
+                    map1.put("PM10", objects[11]);
+                    map1.put("a34004", objects[12]);
+                    map1.put("SO2", objects[13]);
+                    map1.put("NO2", objects[14]);
+                    map1.put("CO", objects[15]);
+                    map1.put("O3_8H", objects[16]);
+                    map1.put("AQI", objects[17]);
+                    rsMap2.put(objects[10].toString(), map1);
+                }
+                if ( !objects[20].toString().contains("H")
+                        && !objects[21].toString().contains("H")
+                        && !objects[22].toString().contains("H")
+                        && !objects[23].toString().contains("H")
+                        && !objects[24].toString().contains("H")
+                        && !objects[25].toString().contains("H")
+                ) {
+                    map2.put("time", objects[19]);
+                    map2.put("PM10", objects[20]);
+                    map2.put("a34004", objects[21]);
+                    map2.put("SO2", objects[22]);
+                    map2.put("NO2", objects[23]);
+                    map2.put("CO", objects[24]);
+                    map2.put("O3_8H", objects[25]);
+                    map2.put("AQI", objects[26]);
+                    rsMap3.put(objects[19].toString(), map2);
+                }
+            }
+
+        }
+        //���������������pm2.5���������������
+        Map<String, List<Integer>> map = getMap(rsMap3);
+        //������������PM2.5���������������
+        Map<String, Integer> map2 = getResult(rsMap2, time);
+        List<Integer> list = map.get("count");
+        list.add(map2.get("count"));
+        List<Integer> list1 = map.get("PM2_5");
+        list1.add(map2.get("PM2_5"));
+        return map;
+    }
+
+    /**
+     * ������PM2.5 ���������������
+     *
+     * @param rsMap3
+     */
+    private Map<String, List<Integer>> getMap(HashMap<String, Object> rsMap3) {
+        HashMap<String, List<Integer>> listMap = new HashMap<>();
+        Set<String> strings = rsMap3.keySet();
+        ArrayList<Double> list1 = new ArrayList<>();
+        ArrayList<Double> list2 = new ArrayList<>();
+        ArrayList<Double> list3 = new ArrayList<>();
+        ArrayList<Double> list4 = new ArrayList<>();
+        ArrayList<Double> list5 = new ArrayList<>();
+        ArrayList<Double> list6 = new ArrayList<>();
+        ArrayList<Double> list7 = new ArrayList<>();
+        ArrayList<Double> list8 = new ArrayList<>();
+        ArrayList<Double> list9 = new ArrayList<>();
+        ArrayList<Double> list10 = new ArrayList<>();
+        ArrayList<Double> list11 = new ArrayList<>();
+        ArrayList<Double> list12 = new ArrayList<>();
+        ArrayList<Double> resList = new ArrayList<>();
+        ArrayList<Integer> list = new ArrayList<>();
+        ArrayList<Integer> listPM = new ArrayList<>();
+        int count1 = 0;
+        int count2 = 0;
+        int count3 = 0;
+        int count4 = 0;
+        int count5 = 0;
+        int count6 = 0;
+        int count7 = 0;
+        int count8 = 0;
+        int count9 = 0;
+        int count10 = 0;
+        int count11 = 0;
+        int count12 = 0;
+        for (String string : strings) {
+            String substring = string.substring(5, 7);
+
+            if (substring.equals("01")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list1.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count1++;
+                }
+            }
+            if (substring.equals("02")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list2.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count2++;
+                }
+            }
+            if (substring.equals("03")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list3.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count3++;
+                }
+            }
+            if (substring.equals("04")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+
+                String aqi = map.get("AQI").toString();
+
+                String pm2_5 = map.get("a34004").toString();
+                list4.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count4++;
+                }
+            }
+            if (substring.equals("05")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list5.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count5++;
+                }
+            }
+            if (substring.equals("06")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list6.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count6++;
+                }
+            }
+            if (substring.equals("07")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list7.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count7++;
+                }
+            }
+            if (substring.equals("08")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list8.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count8++;
+                }
+            }
+            if (substring.equals("09")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list9.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count9++;
+                }
+            }
+            if (substring.equals("10")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list10.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count10++;
+                }
+            }
+            if (substring.equals("11")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list11.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count11++;
+                }
+            }
+            if (substring.equals("12")) {
+                Object o = rsMap3.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list12.add(Double.parseDouble(pm2_5));
+                resList.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count12++;
+                }
+            }
+
+        }
+        list.add(count1);
+        list.add(count2);
+        list.add(count3);
+        list.add(count4);
+        list.add(count5);
+        list.add(count6);
+        list.add(count7);
+        list.add(count8);
+        list.add(count9);
+        list.add(count10);
+        list.add(count11);
+        list.add(count12);
+
+        Integer sum = list.stream().reduce(Integer::sum).orElse(0);
+        list.add(sum);
+        listMap.put("count", list);
+
+        Integer collect1 = 0;
+        if (list1.size() > 0) {
+            collect1 = Math.toIntExact(Math.round(list1.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect2 = 0;
+        if (list2.size() > 0) {
+            collect2 = Math.toIntExact(Math.round(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect3 = 0;
+        if (list3.size() > 0) {
+            collect3 = Math.toIntExact(Math.round(list3.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect4 = 0;
+        if (list4.size() > 0) {
+            collect4 = Math.toIntExact(Math.round(list4.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect5 = 0;
+        if (list5.size() > 0) {
+            collect5 = Math.toIntExact(Math.round(list5.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect6 = 0;
+        if (list6.size() > 0) {
+            collect6 = Math.toIntExact(Math.round(list6.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect7 = 0;
+        if (list7.size() > 0) {
+            collect7 = Math.toIntExact(Math.round(list7.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect8 = 0;
+        if (list8.size() > 0) {
+            collect8 = Math.toIntExact(Math.round(list8.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect9 = 0;
+        if (list9.size() > 0) {
+            collect9 = Math.toIntExact(Math.round(list9.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect10 = 0;
+        if (list10.size() > 0) {
+            collect10 = Math.toIntExact(Math.round(list10.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect11 = 0;
+        if (list11.size() > 0) {
+            collect11 = Math.toIntExact(Math.round(list11.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        Integer collect12 = 0;
+        if (list12.size() > 0) {
+            collect12 = Math.toIntExact(Math.round(list12.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        }
+        //���������pm2.5������
+        int resPM25 = Math.toIntExact(Math.round(resList.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        listPM.add(collect1);
+        listPM.add(collect2);
+        listPM.add(collect3);
+        listPM.add(collect4);
+        listPM.add(collect5);
+        listPM.add(collect6);
+        listPM.add(collect7);
+        listPM.add(collect8);
+        listPM.add(collect9);
+        listPM.add(collect10);
+        listPM.add(collect11);
+        listPM.add(collect12);
+        listPM.add(resPM25);
+        listMap.put("PM2_5", listPM);
+        return listMap;
+    }
+
+    /**
+     * ������������PM2.5���������������
+     *
+     * @param rsMap2
+     */
+    private Map<String, Integer> getResult(HashMap<String, Object> rsMap2, String time) throws ParseException {
+        HashMap<String, Integer> rsMap = new HashMap<>();
+        ArrayList<Double> list = new ArrayList<>();
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar instance = Calendar.getInstance();
+        instance.setTime(sdf1.parse(time));
+        instance.add(Calendar.YEAR, -1);
+        Date date = instance.getTime();
+        //���������
+        long time1 = date.getTime();
+        int count = 0;
+        Set<String> strings = rsMap2.keySet();
+        for (String string : strings) {
+            Date parse = sdf1.parse(string);
+            long time2 = parse.getTime();
+            if (time2 <= time1) {
+                Object o = rsMap2.get(string);
+                String s = JSON.toJSONString(o);
+                Map map = JSON.parseObject(s, Map.class);
+                String aqi = map.get("AQI").toString();
+                String pm2_5 = map.get("a34004").toString();
+                list.add(Double.parseDouble(pm2_5));
+                if (Double.parseDouble(aqi) < 100) {
+                    count++;
+                }
+            }
+        }
+        //���������pm2.5������
+        int PM2_5 = Math.toIntExact(Math.round(list.stream().collect(Collectors.averagingDouble(Double::doubleValue))));
+        rsMap.put("count", count);
+        rsMap.put("PM2_5", PM2_5);
+
+        return rsMap;
+    }
+
+    /**
+     * ������ ������������������
+     * @param file
+     * @throws IOException
+     */
+    private Map<String, List<Integer>> getTo(MultipartFile file,String time) throws IOException, ParseException {
+        XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
+        HashMap<String, Object> rsMap1 = new HashMap<>();
+        HashMap<String, Object> rsMap2 = new HashMap<>();
+        HashMap<String, Object> rsMap3 = new HashMap<>();
+        HashMap<String, Object> rsMap4 = new HashMap<>();
+        //������������������
+        HashMap<String, Object> hnMap1 = new HashMap<>();
+        //������������������
+        HashMap<String, Object> hnMap2 = new HashMap<>();
+
+        XSSFSheet sheetAt = workbook.getSheetAt(0);
+
+        //������������������
+        //������������
+        int lastRowNum = sheetAt.getLastRowNum();
+        for (int i = 2; i <= lastRowNum; i++) {
+            XSSFRow row = sheetAt.getRow(i);
+            if (row == null) {
+                continue;
+            }
+            short lastCellNum = row.getLastCellNum();
+            if (lastCellNum < 8) {
+                continue;
+            }
+            Object[] objects = new Object[lastCellNum];
+            for (int j = 0; j < lastCellNum; j++) {
+                Cell cell = row.getCell(j);
+                if (cell != null) {
+                    Object value = ExcelUtils.getValue(cell);
+                    objects[j] = value;
+                }
+
+            }
+            HashMap<String, Object> map1 = new HashMap<>();
+            HashMap<String, Object> map2 = new HashMap<>();
+            if (objects.length == 18) {
+                if (   !objects[11].toString().contains("H")
+                        && !objects[12].toString().contains("H")
+                        && !objects[13].toString().contains("H")
+                        && !objects[14].toString().contains("H")
+                        && !objects[15].toString().contains("H")
+                        && !objects[16].toString().contains("H")
+                ) {
+//                    map1.put("time", objects[10]);
+                    //PM10
+                    map1.put("a34002", objects[11]);
+                    //PM2_5
+                    map1.put("a34004", objects[12]);
+                    //SO2
+                    map1.put("a21026", objects[13]);
+                    //NO2
+                    map1.put("a21004", objects[14]);
+                    //CO
+                    map1.put("a21005", objects[15]);
+                    //O3_8H
+                    map1.put("a05024", objects[16]);
+
+                    rsMap1.put(objects[10].toString(), map1);
+                }
+
+            }
+
+            if (objects.length == 27) {
+                if (     !objects[11].toString().contains("H")
+                        && !objects[12].toString().contains("H")
+                        && !objects[13].toString().contains("H")
+                        && !objects[14].toString().contains("H")
+                        && !objects[15].toString().contains("H")
+                        && !objects[16].toString().contains("H")
+
+                ) {
+                    map1.put("a34002", objects[11]);
+                    map1.put("a34004", objects[12]);
+                    map1.put("a21026", objects[13]);
+                    map1.put("a21004", objects[14]);
+                    map1.put("a21005", objects[15]);
+                    map1.put("a05024", objects[16]);
+
+                    rsMap1.put(objects[10].toString(), map1);
+                }
+                if (
+                        !objects[20].toString().contains("H")
+                                && !objects[21].toString().contains("H")
+                                && !objects[22].toString().contains("H")
+                                && !objects[23].toString().contains("H")
+                                && !objects[24].toString().contains("H")
+                                && !objects[25].toString().contains("H"))
+                {
+                    map2.put("a34002", objects[20]);
+                    map2.put("a34004", objects[21]);
+                    map2.put("a21026", objects[22]);
+                    map2.put("a21004", objects[23]);
+                    map2.put("a21005", objects[24]);
+                    map2.put("a05024", objects[25]);
+
+                    rsMap2.put(objects[19].toString(), map2);
+                }
+            }
+
+        }
+
+        //���������
+        XSSFSheet sheetAt1 = workbook.getSheetAt(1);
+
+        int lastRowNum1 = sheetAt1.getLastRowNum();
+        for (int i = 2; i < lastRowNum1; i++) {
+            XSSFRow row = sheetAt1.getRow(i);
+            if (row == null) {
+                continue;
+            }
+            short lastCellNum = row.getLastCellNum();
+            if (lastCellNum < 8) {
+                continue;
+            }
+            Object[] objects = new Object[lastCellNum];
+            for (int j = 0; j < lastCellNum; j++) {
+                Cell cell = row.getCell(j);
+                if (cell != null) {
+                    Object value = ExcelUtils.getValue(cell);
+                    objects[j] = value;
+                }
+
+            }
+            HashMap<String, Object> map1 = new HashMap<>();
+            HashMap<String, Object> map2 = new HashMap<>();
+            if (objects.length == 18) {
+                if ( !objects[11].toString().contains("H")
+                        && !objects[12].toString().contains("H")
+                        && !objects[13].toString().contains("H")
+                        && !objects[14].toString().contains("H")
+                        && !objects[15].toString().contains("H")
+                        && !objects[16].toString().contains("H")
+                ) {
+//                    map1.put("time", objects[10]);
+                    map1.put("a34002", objects[11]);
+                    map1.put("a34004", objects[12]);
+                    map1.put("a21026", objects[13]);
+                    map1.put("a21004", objects[14]);
+                    map1.put("a21005", objects[15]);
+                    map1.put("a05024", objects[16]);
+
+                    rsMap3.put(objects[10].toString(), map1);
+                }
+
+            }
+
+            if (objects.length == 27) {
+                if ( !objects[11].toString().contains("H")
+                        && !objects[12].toString().contains("H")
+                        && !objects[13].toString().contains("H")
+                        && !objects[14].toString().contains("H")
+                        && !objects[15].toString().contains("H")
+                        && !objects[16].toString().contains("H"))
+                {
+                    map1.put("a34002", objects[11]);
+                    map1.put("a34004", objects[12]);
+                    map1.put("a21026", objects[13]);
+                    map1.put("a21004", objects[14]);
+                    map1.put("a21005", objects[15]);
+                    map1.put("a05024", objects[16]);
+
+                    rsMap3.put(objects[10].toString(), map1);
+                }
+                if ( !objects[20].toString().contains("H")
+                        && !objects[21].toString().contains("H")
+                        && !objects[22].toString().contains("H")
+                        && !objects[23].toString().contains("H")
+                        && !objects[24].toString().contains("H")
+                        && !objects[25].toString().contains("H")
+                ) {
+//                    map2.put("time", objects[19]);
+                    map2.put("a34002", objects[20]);
+                    map2.put("a34004", objects[21]);
+                    map2.put("a21026", objects[22]);
+                    map2.put("a21004", objects[23]);
+                    map2.put("a21005", objects[24]);
+                    map2.put("a05024", objects[25]);
+                    rsMap4.put(objects[19].toString(), map2);
+                }
+            }
+
+        }
+        Set<String> strings = rsMap1.keySet();
+        for (String string : strings) {
+            Object o = rsMap1.get(string);
+            String s = JSON.toJSONString(o);
+            Map map = JSON.parseObject(s, Map.class);
+            if (!rsMap3.containsKey(string)){
+                hnMap1.put(string,map);
+                continue;
+            }
+            Object o1 = rsMap3.get(string);
+            String s1 = JSON.toJSONString(o1);
+            Map map1 = JSON.parseObject(s1, Map.class);
+            Set sets = map1.keySet();
+            HashMap<Object, Object> hs = new HashMap<>();
+            for (Object set : sets) {
+                if (set.toString().equals("a21005")){
+                    String s3 = map1.get(set).toString();
+                    String s2 = map.get(set).toString();
+                    hs.put(set,new BigDecimal((Double.parseDouble(s3)+Double.parseDouble(s2))/2).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
+                    continue;
+                }
+                String s3 = map1.get(set).toString();
+                String s2 = map.get(set).toString();
+                hs.put(set,Math.round((Double.parseDouble(s3)+Double.parseDouble(s2))/2));
+            }
+            hnMap1.put(string,hs);
+        }
+
+        Set<String> strings2 = rsMap3.keySet();
+        for (String s : strings2) {
+            Object o = rsMap3.get(s);
+            String s1 = JSON.toJSONString(o);
+            Map map = JSON.parseObject(s1, Map.class);
+            if (!hnMap1.containsKey(s)){
+                hnMap1.put(s,map);
+            }
+        }
+
+        Set<String> strings1 = rsMap2.keySet();
+        for (String s : strings1) {
+            Object o = rsMap2.get(s);
+            String s1 = JSON.toJSONString(o);
+            Map map = JSON.parseObject(s1, Map.class);
+            if (!rsMap4.containsKey(s)){
+                hnMap2.put(s,map);
+                continue;
+            }
+            Object o1 = rsMap4.get(s);
+            String s2 = JSON.toJSONString(o1);
+            Map map1 = JSON.parseObject(s2, Map.class);
+            Set sets = map1.keySet();
+            HashMap<Object, Object> hs = new HashMap<>();
+            for (Object set : sets) {
+                if (set.toString().equals("a21005")){
+                    String s3 = map1.get(set).toString();
+                    String s4 = map.get(set).toString();
+                    hs.put(set,new BigDecimal((Double.parseDouble(s3)+Double.parseDouble(s4))/2).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
+                    continue;
+                }
+                String s3 = map1.get(set).toString();
+                String s4 = map.get(set).toString();
+                hs.put(set,Math.round((Double.parseDouble(s3)+Double.parseDouble(s4))/2));
+
+            }
+            hnMap2.put(s,hs);
+        }
+
+        Set<String> strings3 = rsMap4.keySet();
+        for (String s : strings3) {
+            Object o = rsMap4.get(s);
+            String s1 = JSON.toJSONString(o);
+            Map map = JSON.parseObject(s1, Map.class);
+            if (!rsMap2.containsKey(s1)){
+                hnMap2.put(s,map);
+            }
+        }
+        //���������������aqi
+        getHnMap(hnMap2);
+        //���������������aqi
+        getHnMap(hnMap1);
+        //
+        Map<String, List<Integer>> map = getMap(hnMap2);
+
+
+        Map<String, Integer> map2 = getResult(hnMap1, time);
+
+        List<Integer> list = map.get("count");
+        list.add(map2.get("count"));
+        List<Integer> list1 = map.get("PM2_5");
+        list1.add(map2.get("PM2_5"));
+
+        return map;
+
+    }
+    //������aqi
+    private void getHnMap(HashMap<String, Object> hnMap2) {
+        Set<String> strings4 = hnMap2.keySet();
+        for (String s : strings4) {
+            Object o = hnMap2.get(s);
+            String s1 = JSON.toJSONString(o);
+            Map rs = JSON.parseObject(s1, Map.class);
+            AQI aqi = AQIUtils.dailyAQI(rs);
+            JSONObject jsonObject = JSON.parseObject(s1);
+            jsonObject.put("AQI",aqi.getAQIValue());
+            String s2 = JSON.toJSONString(jsonObject);
+            Map map = JSON.parseObject(s2, Map.class);
+            hnMap2.put(s,map);
+        }
+    }
+
+}

--
Gitblit v1.8.0