From 36203a854c6d1958549ebf65ba234561ab5271b5 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Mon, 26 Sep 2022 10:58:17 +0800 Subject: [PATCH] 添加空气质量报告功能 --- screen-api/src/main/java/com/moral/api/utils/ExcelUtils.java | 38 + screen-api/src/main/java/com/moral/api/mapper/ExcelMapper.java | 10 screen-api/pom.xml | 16 screen-api/src/main/java/com/moral/api/service/ExcelService.java | 25 + screen-api/src/main/java/com/moral/api/controller/ExcelController.java | 89 ++++ screen-api/src/main/java/com/moral/api/pojo/vo/excel/ExcelVo.java | 68 +++ screen-api/src/main/java/com/moral/api/pojo/bo/ExcelBO.java | 20 screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java | 950 +++++++++++++++++++++++++++++++++++++++++++++ screen-api/src/main/java/com/moral/api/entity/TbExcel.java | 25 + 9 files changed, 1,241 insertions(+), 0 deletions(-) diff --git a/screen-api/pom.xml b/screen-api/pom.xml index 7470fd8..21b3486 100644 --- a/screen-api/pom.xml +++ b/screen-api/pom.xml @@ -21,6 +21,22 @@ <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> + <!-- easyexcel--> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi</artifactId> + <version>4.0.1</version> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-ooxml</artifactId> + <version>4.0.1</version> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-ooxml-schemas</artifactId> + <version>4.0.1</version> + </dependency> </dependencies> <build> 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 new file mode 100644 index 0000000..1425868 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/controller/ExcelController.java @@ -0,0 +1,89 @@ +package com.moral.api.controller; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import com.moral.api.pojo.bo.ExcelBO; +import com.moral.api.pojo.vo.excel.ExcelVo; +import com.moral.api.service.ExcelService; +import com.moral.constant.ResponseCodeEnum; +import com.moral.constant.ResultMessage; +import com.moral.util.WebUtils; + +@Slf4j +@RestController +@RequestMapping("/excel") +public class ExcelController { + + @Autowired + private ExcelService excelService; + + /** + * ������ + * @param request + * @return + * @throws IOException + */ + @PostMapping("excelImport") + public ResultMessage excelImport(HttpServletRequest request) throws IOException { + 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 excelBO = excelService.importTemplate(files, params); + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),excelBO); + } + + + /** + * ������ + * @param id + * @return + */ + @GetMapping("/excelExport") + public ResultMessage excelExport(Integer id){ + if (id==null){ + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + ExcelVo export = excelService.export(id); + if (export==null){ + return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(), ResponseCodeEnum.TARGET_IS_NULL.getMsg()); + } + + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),export); + } + + /** + * ������ + * @param startTime + * @param code + * @param endTime + * @return + */ + @GetMapping("/selectExcel") + public ResultMessage selectExcel(String startTime,String code, String endTime){ + if (startTime == null || code==null || endTime==null){ + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + List<ExcelBO> excelBOS = excelService.excelSelect(startTime, code, endTime); + if (excelBOS==null){ + return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(), ResponseCodeEnum.TARGET_IS_NULL.getMsg()); + } + return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),excelBOS); + } + +} diff --git a/screen-api/src/main/java/com/moral/api/entity/TbExcel.java b/screen-api/src/main/java/com/moral/api/entity/TbExcel.java new file mode 100644 index 0000000..27f3ec2 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/entity/TbExcel.java @@ -0,0 +1,25 @@ +package com.moral.api.entity; + + +import lombok.Data; + +import java.util.Date; + +import javax.persistence.Table; + + +@Data +@Table(name = "tb_excel") +public class TbExcel { + private Integer id; + + private String value; + + private Date time; + + private String code; + + + private Date date; + +} diff --git a/screen-api/src/main/java/com/moral/api/mapper/ExcelMapper.java b/screen-api/src/main/java/com/moral/api/mapper/ExcelMapper.java new file mode 100644 index 0000000..b50a94a --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/mapper/ExcelMapper.java @@ -0,0 +1,10 @@ +package com.moral.api.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.moral.api.entity.TbExcel; + + +public interface ExcelMapper extends BaseMapper<TbExcel> { + + +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/bo/ExcelBO.java b/screen-api/src/main/java/com/moral/api/pojo/bo/ExcelBO.java new file mode 100644 index 0000000..5f11771 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/bo/ExcelBO.java @@ -0,0 +1,20 @@ +package com.moral.api.pojo.bo; + +import lombok.Data; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +@Data +public class ExcelBO { + + private Integer id; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + private Date time; + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + private Date date; + + +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/excel/ExcelVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/excel/ExcelVo.java new file mode 100644 index 0000000..ca4b536 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/excel/ExcelVo.java @@ -0,0 +1,68 @@ +package com.moral.api.pojo.vo.excel; + + +import lombok.Data; + +import java.util.List; +import java.util.Map; + + +@Data +public class ExcelVo { + //������������ + private String quality; + //��������������� + private String su; + //������������ + private Integer count; + + private String PM10; + private String PM25; + private String SO2; + private String NO2; + private String CO; + private String O3_8H; + private String PM25m; + private String PM25ms; + private String O3m; + private String O3ms; + private String AQIm; + private String AQIms; + private String PM25y; + private String PM25ys; + private String O3y; + private String O3ys; + private String AQIy; + private String AQIys; + + private String name1; + private String name2; + private String name3; + private String name4; + private String name5; + private String name6; + + private List<Map<String,Object>> list1; + + private List<Map<String,Object>> list2; + + private List<Map<String,Object>> list3; + + private List<Map<String,Object>> list4; + + private List<Map<String,Object>> list5; + + + private String time; + + private String time1; + + + private String code1; + + private String diff1; + + private String code2; + + private String diff2; +} 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 new file mode 100644 index 0000000..0b1e330 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/ExcelService.java @@ -0,0 +1,25 @@ +package com.moral.api.service; + + +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import com.moral.api.pojo.bo.ExcelBO; + +import com.moral.api.pojo.vo.excel.ExcelVo; + + +public interface ExcelService { + + public ExcelBO importTemplate(List<MultipartFile> files, Map<String, Object> params) throws IOException; + + + 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/impl/ExcelServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java new file mode 100644 index 0000000..99491f1 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java @@ -0,0 +1,950 @@ +package com.moral.api.service.impl; + + +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +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.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +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.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; + + +@Service +public class ExcelServiceImpl implements ExcelService { + + @Autowired + private ExcelMapper excelMapper; + + /** + * ������ + * @param files + * @param params + * @return + * @throws IOException + */ + @Override + public ExcelBO importTemplate(List<MultipartFile> files, Map<String, Object> params) throws IOException { + 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, Object> map = new HashMap<>(); + MultipartFile file1 = files.get(0); + Map<String, Object> map1 = getMap1(file1); + map.put("c1",map1); + MultipartFile file2 = files.get(1); + Map<String, Object> map2 = getMap2(file2); + map.put("c2",map2); + MultipartFile file3 = files.get(2); + Map<String, Object> map3 = getMap3(file3); + map.put("c3",map3); + MultipartFile file4 = files.get(3); + Map<String, Object> map4 = getMap4(file4); + map.put("c4",map4); + MultipartFile file5 = files.get(4); + Map<String, Object> map5 = getMap5(file5); + map.put("c5",map5); + MultipartFile file6 = files.get(5); + Map<String, Object> map6 = getMap6(file6); + map.put("c6",map6); + 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, Object> map = new HashMap<>(); + MultipartFile file1 = files.get(0); + Map<String, Object> map1 = getMap1(file1); + map.put("c1",map1); + MultipartFile file2 = files.get(1); + Map<String, Object> map2 = getMap2(file2); + map.put("c2",map2); + MultipartFile file3 = files.get(2); + Map<String, Object> map3 = getMap3(file3); + map.put("c3",map3); + MultipartFile file4 = files.get(3); + Map<String, Object> map4 = getMap4(file4); + map.put("c4",map4); + MultipartFile file5 = files.get(4); + Map<String, Object> map5 = getMap5(file5); + map.put("c5",map5); + MultipartFile file6 = files.get(5); + Map<String, Object> map6 = getMap6(file6); + map.put("c6",map6); + 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 ExcelVo export(Integer id) { + + + HashMap<String, Object> map1 = new HashMap<>(); + ArrayList<Map<String,Object>> list1 = new ArrayList<>(); + ArrayList<Map<String,Object>> list2 = new ArrayList<>(); + ArrayList<Map<String,Object>> list3 = new ArrayList<>(); + ArrayList<Map<String,Object>> list4 = new ArrayList<>(); + ArrayList<Map<String,Object>> list5= new ArrayList<>(); + ExcelVo excelVo = new ExcelVo(); + //������������ + TbExcel excel = excelMapper.selectById(id); + String value = excel.getValue(); + + JSONObject jsonObject = JSON.parseObject(value); + Map map4 = JSON.parseObject(value, Map.class); + Set sets = map4.keySet(); + for (Object set : sets) { + if (set.equals("c1")){ + Object o = map4.get(set); + String s = JSON.toJSONString(o); + Map map5 = JSON.parseObject(s, Map.class); + Set set1s = map5.keySet(); + for (Object set1 : set1s) { + Object o1 = map5.get(set1); + String s1 = JSON.toJSONString(o1); + Map map6 = JSON.parseObject(s1, Map.class); + list1.add(map6); + } + } + if (set.equals("c2")){ + Object o = map4.get(set); + String s = JSON.toJSONString(o); + Map map5 = JSON.parseObject(s, Map.class); + Set set1s = map5.keySet(); + for (Object set1 : set1s) { + Object o1 = map5.get(set1); + String s1 = JSON.toJSONString(o1); + Map map6 = JSON.parseObject(s1, Map.class); + list2.add(map6); + } + } + if (set.equals("c3")){ + Object o = map4.get(set); + String s = JSON.toJSONString(o); + Map map5 = JSON.parseObject(s, Map.class); + Set set1s = map5.keySet(); + for (Object set1 : set1s) { + Object o1 = map5.get(set1); + String s1 = JSON.toJSONString(o1); + Map map6 = JSON.parseObject(s1, Map.class); + map6.put("place",set1); + list3.add(map6); + } + } + if (set.equals("c4")){ + Object o = map4.get(set); + String s = JSON.toJSONString(o); + Map map5 = JSON.parseObject(s, Map.class); + Set set1s = map5.keySet(); + for (Object set1 : set1s) { + Object o1 = map5.get(set1); + String s1 = JSON.toJSONString(o1); + Map map6 = JSON.parseObject(s1, Map.class); + String o2 = String.valueOf(map6.get("PM2_5m")); + + String place = String.valueOf(map6.get("place")); + String o3m = String.valueOf(map6.get("O3m")); + String aqIm = String.valueOf(map6.get("AQIm")) ; + String o2s =String.valueOf(map6.get("PM2_5y")); + String O3ms = String.valueOf(map6.get("O3y")) ; + String aqIms = String.valueOf(map6.get("AQIy")); + String result = o2+"���"+o3m+"���"+aqIm+"���"+o2s+"���"+O3ms+"���"+aqIms; + map1.put(place,result); + list4.add(map6); + } + } + if (set.equals("c5")){ + Object o = map4.get(set); + String s = JSON.toJSONString(o); + Map map5 = JSON.parseObject(s, Map.class); + Set set1s = map5.keySet(); + for (Object set1 : set1s) { + Object o1 = map5.get(set1); + String s1 = JSON.toJSONString(o1); + Map map6 = JSON.parseObject(s1, Map.class); + list5.add(map6); + } + } + } + + //��������������� + String c4 = jsonObject.getString("c4"); + JSONObject jsonObject3 = JSON.parseObject(c4); + String gxq = jsonObject3.getString("���������"); + JSONObject jsonObject4 = JSON.parseObject(gxq); + + String PM25m = jsonObject4.getString("PM2_5m"); + String PM25ms = jsonObject4.getString("PM2_5ms"); + String code1 = getString(PM25ms); + String O3m = jsonObject4.getString("O3m"); + String O3ms = jsonObject4.getString("O3ms"); + String code2 = getString(O3ms); + String AQIm = jsonObject4.getString("AQIm"); + String AQIms = jsonObject4.getString("AQIms"); + String code3 = getString(AQIms); + String PM25y = jsonObject4.getString("PM2_5y"); + String PM25ys = jsonObject4.getString("PM2_5ys"); + String code4 = getString(PM25ys); + String O3y = jsonObject4.getString("O3y"); + String O3ys = jsonObject4.getString("O3ys"); + String code5 = getString(O3ys); + String AQIy = jsonObject4.getString("AQIy"); + String AQIys = jsonObject4.getString("AQIys"); + String code6 = getString(AQIys); + + StringBuilder sb1 = new StringBuilder(); + StringBuilder sb2 = new StringBuilder(); + StringBuilder sb3 = new StringBuilder(); + StringBuilder sb4 = new StringBuilder(); + StringBuilder sb5 = new StringBuilder(); + StringBuilder sb6 = new StringBuilder(); + Set<String> trims = map1.keySet(); + for (String trim : trims) { + String o = (String) map1.get(trim); + String[] split = o.split("���"); + if (Double.parseDouble(split[0])>Double.parseDouble(PM25m)){ + sb1.append(trim.substring(3)+"���"); + } + if (Double.parseDouble(split[1])>Double.parseDouble(O3m)){ + sb2.append(trim.substring(3)+"���"); + } + if (Double.parseDouble(split[2])<Double.parseDouble(AQIm)){ + sb3.append(trim.substring(3)+"���"); + } + if (Double.parseDouble(split[3])>Double.parseDouble(PM25y)){ + sb4.append(trim.substring(3)+"���"); + } + if (Double.parseDouble(split[4])>Double.parseDouble(O3y)){ + sb5.append(trim.substring(3)+"���"); + } + if (Double.parseDouble(split[5])<Double.parseDouble(AQIy)){ + sb6.append(trim.substring(3)+"���"); + } + } + String builder1 = getBuilder(sb1); + String builder2 = getBuilder(sb2); + String builder3 = getBuilder(sb3); + String builder4 = getBuilder(sb4); + String builder5 = getBuilder(sb5); + String builder6 = getBuilder(sb6); + excelVo.setName1(builder1); + excelVo.setName2(builder2); + excelVo.setName3(builder3); + excelVo.setName4(builder4); + excelVo.setName5(builder5); + excelVo.setName6(builder6); + + //��������������� + String c5 = jsonObject.getString("c5"); + JSONObject jsonObject5 = JSON.parseObject(c5); + String cxq = jsonObject5.getString("������"); + JSONObject jsonObject6 = JSON.parseObject(cxq); + String cxp = jsonObject6.getString("PM2_5y"); + double CX = 0.0; + if (!cxp.equals("--")){ + CX = Double.parseDouble(cxp); + } + double aDouble = 0.0; + if (!PM25y.equals("--")){ + aDouble = Double.parseDouble(PM25y); + } + double v = aDouble - CX; + if (v>=0){ + excelVo.setDiff1("������"); + excelVo.setCode1(String.valueOf(new BigDecimal(v).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue())); + }else { + excelVo.setDiff1("������"); + excelVo.setCode1(String.valueOf(new BigDecimal(Math.abs(v)).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue())); + } + String xcq = jsonObject5.getString("���������"); + JSONObject jsonObject7 = JSON.parseObject(xcq); + String xcp = jsonObject7.getString("PM2_5y"); + double XCP = 0.0; + if (!xcp.equals("--")){ + XCP = Double.parseDouble(xcp); + } + double v1 = aDouble - XCP; + if (v1>=0){ + excelVo.setDiff2("������"); + excelVo.setCode2(String.valueOf(new BigDecimal(v1).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue())); + }else { + excelVo.setDiff2("������"); + excelVo.setCode2(String.valueOf(new BigDecimal(Math.abs(v1)).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue())); + + } + + + + //��������������� + String c1 = jsonObject.getString("c1"); + JSONObject jsonObject1 = JSON.parseObject(c1); + //��������� + String cx = jsonObject1.getString("���������"); + JSONObject jsonObject2 = JSON.parseObject(cx); + String reTime = jsonObject2.getString("������"); + Date reDate = DateUtils.getDate(reTime, "yyyy-MM-dd"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy���MM���dd���"); + String format = simpleDateFormat.format(reDate); + String substring = format.substring(5); + String CO = jsonObject2.getString("CO"); + String NO2 = jsonObject2.getString("NO2"); + String SO2 = jsonObject2.getString("SO2"); + String PM10 = jsonObject2.getString("PM10"); + String PM25 = jsonObject2.getString("PM2_5"); + String s1 = jsonObject2.getString("SU"); + String O8 = jsonObject2.getString("O3_8H"); + String s3 = jsonObject2.getString("������������������"); + String s4 = jsonObject2.getString("������������������"); + int count = 0; + if (Double.parseDouble(PM10)<150){ + count++; + } + if (Double.parseDouble(PM25)<75){ + count++; + } + if (Double.parseDouble(SO2)<150){ + count++; + } + if (Double.parseDouble(NO2)<80){ + count++; + } + if (Double.parseDouble(CO)<4){ + count++; + } + if (Double.parseDouble(O8)<160){ + count++; + } + + + +// String res = substring+"������������������������"+s3+s4+"������������������������"+s1+"������������6������������" + +// count+"������������PM10���"+PM10+"ug/m��������������150��g/m��);PM2.5���"+PM25+"��g/m��(���������75��g/m��);" + +// "SO2���"+SO2+"��g/m��(���������150��g/m��);NO2���"+NO2+"��g/m��(���������80��g/m��);CO���"+CO+"mg/m��" + +// "(���������4mg/m��);O3-8H���"+O8+"��g/m��(���������160��g/m��������"; +// String month ="���������������9���1���-13������PM2.5���������"+PM25m+"������/������������������"+code1+"%���" + +// "������8���������������������90���������������������"+O3m+"������/������������������"+code2+"%���" + +// "���������������������������������"+AQIm+"%���������"+code3+"%���"; +// String years= "���������������01���1���-"+substring+"������������PM2.5���������"+PM25y+"������/������������������"+code4+"%���" + +// "������8���������������������90���������������������"+O3y+"������/������������������"+code5+"%���" + +// "���������������������������������"+AQIy+"%���������"+code6+"%���"; + + excelVo.setQuality(s3+s4); + excelVo.setSu(s1); + excelVo.setCount(count); + excelVo.setPM10(PM10); + excelVo.setPM25(PM25); + excelVo.setSO2(SO2); + excelVo.setNO2(NO2); + excelVo.setCO(CO); + excelVo.setO3_8H(O8); + excelVo.setPM25m(PM25m); + excelVo.setPM25ms(code1); + excelVo.setO3m(O3m); + excelVo.setO3ms(code2); + excelVo.setAQIm(AQIm); + excelVo.setAQIms(code3); + excelVo.setPM25y(PM25y); + excelVo.setPM25ys(code4); + excelVo.setO3y(O3y); + excelVo.setO3ys(code5); + excelVo.setAQIy(AQIy); + excelVo.setAQIys(code6); + excelVo.setTime1(format); + excelVo.setTime(substring); + + excelVo.setList1(list1); + excelVo.setList2(list2); + excelVo.setList3(list3); + excelVo.setList4(list4); + excelVo.setList5(list5); + + return excelVo; + } + + /** + * ������ + * @param startTime + * @param code + * @return + */ + @Override + public List<ExcelBO> excelSelect(String startTime, String code,String endTime) { + ArrayList<ExcelBO> excelBOS = new ArrayList<>(); + QueryWrapper<TbExcel> wrapper = new QueryWrapper<>(); + wrapper.between("time",startTime,endTime); + wrapper.eq("code",code); + List<TbExcel> tbExcels = excelMapper.selectList(wrapper); + if (tbExcels==null){ + return null; + } + for (TbExcel tbExcel : tbExcels) { + ExcelBO excelBO = new ExcelBO(); + BeanUtils.copyProperties(tbExcel,excelBO); + excelBOS.add(excelBO); + } + + return excelBOS; + } + + + private String getBuilder(StringBuilder sb) { + if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '���') { + sb.deleteCharAt(sb.length() -1 ); + }else { + sb.append("���"); + } + String s = sb.toString(); + return s; + } + + private String getString(String value) { + String code =null; + double aDouble = 0.0; + if (!value.equals("--")){ + aDouble = Double.parseDouble(value); + } + + if (aDouble>=0){ + code = "������"+ value; + }else { + String s = value.substring(1); + code = "������"+ s; + } + return code; + } + + + private Map<String, Object> getMap4(MultipartFile file) throws IOException { + XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + HashMap<String, Object> rsMap = new HashMap<>(); + XSSFSheet sheetAt = workbook.getSheetAt(0); + //������������������ + int lastRowNum = sheetAt.getLastRowNum(); + for (int i = 5; i <= lastRowNum; i++) { + XSSFRow row = sheetAt.getRow(i); + if (row == null) { + continue; + } + short lastCellNum = row.getLastCellNum(); + if (lastCellNum < 10) { + continue; + } + Object[] objects = new Object[lastCellNum]; + for (int j = 0; j < lastCellNum; j++) { + Cell cell = row.getCell(j); + + Object value = ExcelUtils.getValue(cell); + objects[j] = value; + } + HashMap<String, Object> map = new HashMap<>(); + map.put("place", objects[0]); + map.put("PM2_5d", objects[1]); + map.put("PM2_5m", objects[2]); + map.put("PM2_5y", objects[3]); + map.put("PM2_5r", objects[4]); + map.put("PM2_5ms", objects[5]); + map.put("PM2_5ys", objects[6]); + map.put("PM2_5rs", objects[7]); + map.put("AQId", objects[8]); + map.put("AQIm", objects[9]); + map.put("AQIy", objects[10]); + map.put("AQIr", objects[11]); + map.put("AQIms", objects[12]); + map.put("AQIys", objects[13]); + map.put("AQIrs", objects[14]); + map.put("O3d", objects[15]); + map.put("O3m", objects[16]); + map.put("O3y", objects[17]); + map.put("O3r", objects[18]); + map.put("O3ms", objects[19]); + map.put("O3ys", objects[20]); + map.put("O3rs", objects[21]); + rsMap.put(objects[0].toString(), map); + } + return rsMap; + } + private Map<String, Object> getMap1(MultipartFile file) throws IOException { + XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + HashMap<String, Object> rsMap = new HashMap<>(); + XSSFSheet sheetAt = workbook.getSheetAt(0); + //������������������ + int lastRowNum = sheetAt.getLastRowNum(); + for (int i = 3; i <= lastRowNum; i++) { + XSSFRow row = sheetAt.getRow(i); + if (row == null) { + continue; + } + short lastCellNum = row.getLastCellNum(); + if (lastCellNum < 10) { + continue; + } + Object[] objects = new Object[lastCellNum]; + for (int j = 0; j < lastCellNum; j++) { + Cell cell = row.getCell(j); + Object value = ExcelUtils.getValue(cell); + objects[j] = value; + } + HashMap<String, Object> map = new HashMap<>(); + map.put("place", objects[0]); + map.put("������", objects[1]); + map.put("SO2", objects[2]); + map.put("SO2���������", objects[3]); + map.put("NO2", objects[4]); + map.put("NO2���������", objects[5]); + map.put("PM10", objects[6]); + map.put("PM10���������", objects[7]); + map.put("CO", objects[8]); + map.put("CO���������", objects[9]); + map.put("O3_1h", objects[10]); + map.put("O3������������������", objects[11]); + map.put("O3_8H", objects[12]); + map.put("O3������������������", objects[13]); + map.put("PM2_5", objects[14]); + map.put("PM2_5���������", objects[15]); + map.put("AQI", objects[16]); + map.put("SU", objects[17]); + map.put("������������������", objects[18]); + map.put("������������������", objects[19]); + + rsMap.put(objects[0].toString(), map); + } + return rsMap; + } + + + private Map<String, Object> getMap2(MultipartFile file) throws IOException { + XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + HashMap<String, Object> rsMap = new HashMap<>(); + XSSFSheet sheetAt = workbook.getSheetAt(0); + //������������������ + int lastRowNum = sheetAt.getLastRowNum(); + for (int i = 3; i <= lastRowNum; i++) { + XSSFRow row = sheetAt.getRow(i); + if (row == null) { + continue; + } + short lastCellNum = row.getLastCellNum(); + if (lastCellNum < 10) { + continue; + } + Object[] objects = new Object[lastCellNum]; + for (int j = 0; j < lastCellNum; j++) { + Cell cell = row.getCell(j); + Object value = ExcelUtils.getValue(cell); + objects[j] = value; + } + HashMap<String, Object> map = new HashMap<>(); + map.put("place", objects[0]); + map.put("������", objects[1]); + map.put("SO2", objects[2]); + map.put("SO2���������", objects[3]); + map.put("NO2", objects[4]); + map.put("NO2���������", objects[5]); + map.put("PM10", objects[6]); + map.put("PM10���������", objects[7]); + map.put("CO", objects[8]); + map.put("CO���������", objects[9]); + map.put("O3_1h", objects[10]); + map.put("O3������������������", objects[11]); + map.put("O3_8H", objects[12]); + map.put("O3������������������", objects[13]); + map.put("PM2_5", objects[14]); + map.put("PM2_5���������", objects[15]); + map.put("AQI", objects[16]); + map.put("SU", objects[17]); + map.put("������������������", objects[18]); + map.put("������������������", objects[19]); + + rsMap.put(objects[0].toString(), map); + } + return rsMap; + } + + private Map<String, Object> getMap3(MultipartFile file) throws IOException { + + XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + HashMap<String, List<Double>> rsMap = new HashMap<>(); + HashMap<String, Map<String, List<Double>>> maps = new HashMap<>(); + HashMap<String, List<Double>> map1 = new HashMap<>(); + HashMap<String, List<Double>> map2 = new HashMap<>(); + + + + XSSFSheet sheetAt = workbook.getSheetAt(0); + //������������������ + int lastRowNum = sheetAt.getLastRowNum(); + for (int i = 3; i <= lastRowNum; i++) { + XSSFRow row = sheetAt.getRow(i); + if (row == null) { + continue; + } + short lastCellNum = row.getLastCellNum(); + if (lastCellNum < 10) { + continue; + } + Object[] objects = new Object[lastCellNum]; + for (int j = 0; j < lastCellNum; j++) { + Cell cell = row.getCell(j); + Object value = ExcelUtils.getValue(cell); + objects[j] = value; + } + + + //CO + double CO=0.0; + if (!(objects[8].toString()).equals("--")){ + CO = Double.parseDouble(objects[8].toString()); + } + + //o3 + double O3=0.0; + if (!(objects[12].toString()).equals("--")){ + O3 = Double.parseDouble(objects[12].toString()); + } + + + + + + if (map1.get(objects[0].toString())==null){ + ArrayList<Double> doubles1 = new ArrayList<>(); + ArrayList<Double> doubles2 = new ArrayList<>(); + doubles1.add(CO); + doubles2.add(O3); + map1.put(objects[0].toString(),doubles1); + map2.put(objects[0].toString(),doubles2); + }else { + List<Double> doubles = map1.get(objects[0].toString()); + doubles.add(CO); + List<Double> lists = map2.get(objects[0].toString()); + lists.add(O3); + } + + if (maps.get(objects[0].toString())==null){ + ArrayList<Double> list1 = new ArrayList<>(); + ArrayList<Double> list2 = new ArrayList<>(); + ArrayList<Double> list4 = new ArrayList<>(); + ArrayList<Double> list3 = new ArrayList<>(); + HashMap<String, List<Double>> ListHashMap = new HashMap<>(); + if (!(objects[2].toString()).equals("--")){ + double SO21 = Double.parseDouble(objects[2].toString()); + list1.add(SO21); + } + if (!(objects[4].toString()).equals("--")){ + double NO21 = Double.parseDouble(objects[4].toString()); + list2.add(NO21); + } + if (!(objects[6].toString()).equals("--")){ + double PM101 = Double.parseDouble(objects[6].toString()); + list3.add(PM101); + } + if (!(objects[14].toString()).equals("--")){ + double PM2_51 = Double.parseDouble(objects[14].toString()); + list4.add(PM2_51); + } + + ListHashMap.put("SO2",list1); + ListHashMap.put("NO2",list2); + ListHashMap.put("PM10",list3); + ListHashMap.put("PM2_5",list4); + maps.put(objects[0].toString(),ListHashMap); + + }else { + Map<String, List<Double>> stringListMap = maps.get(objects[0].toString()); + List<Double> SO2List = stringListMap.get("SO2"); + if (!(objects[2].toString()).equals("--")){ + double SO21 = Double.parseDouble(objects[2].toString()); + SO2List.add(SO21); + } + + List<Double> NO2List = stringListMap.get("NO2"); + if (!(objects[4].toString()).equals("--")){ + double NO21 = Double.parseDouble(objects[4].toString()); + NO2List.add(NO21); + } + + List<Double> PM10List = stringListMap.get("PM10"); + if (!(objects[6].toString()).equals("--")){ + double PM101 = Double.parseDouble(objects[6].toString()); + PM10List.add(PM101); + } + + List<Double> PM2_5List = stringListMap.get("PM2_5"); + if (!(objects[14].toString()).equals("--")){ + double PM2_51 = Double.parseDouble(objects[14].toString()); + PM2_5List.add(PM2_51); + } + + } + } + Set<String> strings2 = maps.keySet(); + for (String s : strings2) { + Map<String, List<Double>> stringListMap = maps.get(s); + ArrayList<Double> list = new ArrayList<>(); + Double so2 = getYz(stringListMap, "SO2"); + Double no2 = getYz(stringListMap, "NO2"); + Double pm10 = getYz(stringListMap, "PM10"); + Double pm2_5 = getYz(stringListMap, "PM2_5"); + list.add(so2); + list.add(no2); + list.add(pm10); + list.add(pm2_5); + rsMap.put(s,list); + } + + HashMap<String, List<Double>> ListHashMap = new HashMap<>(); + Set<String> strings = rsMap.keySet(); + for (String string : strings) { + List<Double> list = getList(rsMap, map1, map2, string); + ListHashMap.put(string,list); + } + //������aqi������������������ + HashMap<String, Object> resultMap = new HashMap<>(); + Set<String> strings1 = ListHashMap.keySet(); + for (String s : strings1) { + HashMap<String, Object> map = new HashMap<>(); + List<Double> doubles = ListHashMap.get(s); + map.put("a21005",doubles.get(0)); + map.put("a21026",doubles.get(1)); + map.put("a21004",doubles.get(2)); + map.put("a34002",doubles.get(3)); + map.put("a34004",doubles.get(4)); + map.put("a05024",doubles.get(5)); + AQI aqi = AQIUtils.dailyAQI(map); + Integer aqiValue = aqi.getAQIValue(); + map.put("AQI",aqiValue); + List<String> primaryPollutantNames = aqi.getPrimaryPollutantNames(); + String primaryPollutant = "__"; + if (!ObjectUtils.isEmpty(primaryPollutantNames)) { + primaryPollutant = primaryPollutantNames.stream().map(String::valueOf).collect(Collectors.joining(",")); + } + map.put("SU", primaryPollutant); + resultMap.put(s,map); + } + return resultMap; + } + + /** + * ��������������� + * @param stringListMap + */ + private Double getYz(Map<String, List<Double>> stringListMap,String code) { + List<Double> doubles = stringListMap.get(code); + double v = new BigDecimal(doubles.stream().collect(Collectors.averagingDouble(Double::doubleValue))).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); + return v; + } + + /** + * ��������������������� + * @param rsMap + * @param map1 + * @param map2 + * @param code + * @return + */ + private List<Double> getList(HashMap<String, List<Double>> rsMap, HashMap<String, List<Double>> map1, HashMap<String, List<Double>> map2,String code) { + ArrayList<Double> list = new ArrayList<>(); + List<Double> doubles1 = map1.get(code); + double percentiles1 = getPercentiles(doubles1, 0.95); + double co = getDouble(percentiles1); + list.add(co); + List<Double> doubles2 = map2.get(code); + double percentiles2 = getPercentiles(doubles2, 0.90); + List<Double> doubles3 = rsMap.get(code); + for (int i = 0; i < doubles3.size(); i++) { + double anInt = getInt(doubles3.get(i)); + list.add(anInt); + } + double anInt = getInt(percentiles2); + list.add(anInt); + return list; + } + + private Map<String, Object> getMap5(MultipartFile file) throws IOException { + XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + HashMap<String, Object> rsMap = new HashMap<>(); + XSSFSheet sheetAt = workbook.getSheetAt(0); + //������������������ + int lastRowNum = sheetAt.getLastRowNum(); + for (int i = 5; i <= lastRowNum; i++) { + XSSFRow row = sheetAt.getRow(i); + if (row == null) { + continue; + } + short lastCellNum = row.getLastCellNum(); + if (lastCellNum < 10) { + continue; + } + Object[] objects = new Object[lastCellNum]; + for (int j = 0; j < lastCellNum; j++) { + Cell cell = row.getCell(j); + Object value = ExcelUtils.getValue(cell); + objects[j] = value; + } + HashMap<String, Object> map = new HashMap<>(); + map.put("place", objects[0]); + map.put("PM2_5d", objects[1]); + map.put("PM2_5m", objects[2]); + map.put("PM2_5y", objects[3]); + map.put("PM2_5r", objects[4]); + map.put("PM2_5ms", objects[5]); + map.put("PM2_5ys", objects[6]); + map.put("PM2_5rs", objects[7]); + map.put("AQId", objects[8]); + map.put("AQIm", objects[9]); + map.put("AQIy", objects[10]); + map.put("AQIr", objects[11]); + map.put("AQIms", objects[12]); + map.put("AQIys", objects[13]); + map.put("AQIrs", objects[14]); + map.put("O3d", objects[15]); + map.put("O3m", objects[16]); + map.put("O3y", objects[17]); + map.put("O3r", objects[18]); + map.put("O3ms", objects[19]); + map.put("O3ys", objects[20]); + map.put("O3rs", objects[21]); + rsMap.put(objects[0].toString(), map); + } + return rsMap; + } + + + private Map<String, Object> getMap6(MultipartFile file) throws IOException { +// XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + HSSFWorkbook workbook= new HSSFWorkbook(file.getInputStream()); + HashMap<String, Object> rsMap = new HashMap<>(); +// XSSFSheet sheetAt = workbook.getSheetAt(0); + HSSFSheet sheetAt = workbook.getSheetAt(0); + //������������������ + int lastRowNum = sheetAt.getLastRowNum(); + for (int i = 1; i <= lastRowNum; i++) { +// XSSFRow row = sheetAt.getRow(i); + HSSFRow row = sheetAt.getRow(i); + if (row == null) { + continue; + } + short lastCellNum = row.getLastCellNum(); + + Object[] objects = new Object[lastCellNum]; + for (int j = 0; j < lastCellNum; j++) { + Cell cell = row.getCell(j); + Object value = ExcelUtils.getValue(cell); + objects[j] = value; + } + HashMap<String, Object> map = new HashMap<>(); + map.put("������������", objects[0]); + map.put("������������", objects[1]); + map.put("������", objects[2]); + map.put("������", objects[3]); + map.put("���������", objects[4]); + map.put("������������", objects[5]); + + rsMap.put(objects[0].toString()+i, map); + } + return rsMap; + } + + /** + * excel������������ + * @param list + * @param percentile + * @return + */ + private static double getPercentiles(List<Double> list, double percentile) { + Collections.sort(list); + double x = (list.size()-1) * percentile; + int i = (int) x; + double j = x - i; + return (1 - j) * list.get(i) + j * list.get(i+1); + } + + + private static double getDouble(Double code1){ + double floor1 = Math.floor(code1 * 10); + //������������������������������ + double result = new BigDecimal(code1).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + + + if (code1*100-floor1*10==5 && (result*10) % 2 !=0){ + result= result-0.1; + }else { + result = result-0; + } + + return result; + } + + + + private static double getInt(Double code){ + //��������������� + double floor = Math.floor(code); + //������������ + double round = Math.round(code); + + + if (code*10-(floor*10)==5 && round % 2 !=0){ + round=round-1; + }else { + round=round-0; + } + return round; + } +} \ No newline at end of file diff --git a/screen-api/src/main/java/com/moral/api/utils/ExcelUtils.java b/screen-api/src/main/java/com/moral/api/utils/ExcelUtils.java new file mode 100644 index 0000000..d20dd4b --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/utils/ExcelUtils.java @@ -0,0 +1,38 @@ +package com.moral.api.utils; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.DateUtil; + +public class ExcelUtils { + + public static Object getValue(Cell cell) { + Object value = null; + if (cell == null) { + return null; + } + switch (cell.getCellType()){ + case STRING: + // ��������������� + value = cell.getStringCellValue(); + break; + case NUMERIC: + if (DateUtil.isCellDateFormatted(cell)){ + value = cell.getDateCellValue(); + }else { + // double������ + value = cell.getNumericCellValue(); + } + break; + case BOOLEAN: + // boolean������ + value = cell.getBooleanCellValue(); + break; + case FORMULA: + value = cell.getCellFormula(); + break; + default: + break; + } + return value; + } +} \ No newline at end of file -- Gitblit v1.8.0