Merge remote-tracking branch 'origin/dev' into wb
11 files added
28 files modified
| | |
| | | // 全局配置 |
| | | GlobalConfig gc = new GlobalConfig(); |
| | | //String projectPath = System.getProperty("user.dir"); |
| | | String projectPath="C:\\Users\\cdl\\Desktop\\comProject\\newProject\\moral\\screen-api"; |
| | | String projectPath="D:\\gitproject\\newmoral\\screen-api"; |
| | | gc.setOutputDir(projectPath + "/src/main/java"); |
| | | gc.setAuthor("moral"); |
| | | gc.setOpen(false); |
| | |
| | | |
| | | // 数据源配置 |
| | | DataSourceConfig dsc = new DataSourceConfig(); |
| | | dsc.setUrl("jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"); |
| | | dsc.setUrl("jdbc:mysql://121.199.44.85:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"); |
| | | //dsc.setUrl("jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"); |
| | | dsc.setDriverName("com.mysql.cj.jdbc.Driver"); |
| | | dsc.setUsername("root"); |
| | |
| | | <!-- 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> |
| | |
| | | <artifactId>easypoi-spring-boot-starter</artifactId> |
| | | <version>4.0.0</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.afterturn</groupId> |
| | | <artifactId>easypoi-base</artifactId> |
| | | <version>4.1.0</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.google.guava</groupId> |
| | | <artifactId>guava</artifactId> |
| | | <version>19.0</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.jfree</groupId> |
| | | <artifactId>jcommon</artifactId> |
| | | <version>1.0.24</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.jfree</groupId> |
| | | <artifactId>jfreechart</artifactId> |
| | | <version>1.5.0</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | |
| | | package com.moral.api.config.websocket; |
| | | |
| | | import com.moral.api.websocket.CruiserWebSocketServer; |
| | | import com.moral.api.websocket.SingleDeviceServer; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | |
| | | |
| | | @Autowired |
| | | public void setMessageService(RedisTemplate redisTemplate){ |
| | | SingleDeviceServer.redisTemplate = redisTemplate; |
| | | // SingleDeviceServer.redisTemplate = redisTemplate; |
| | | CruiserWebSocketServer.redisTemplate = redisTemplate; |
| | | } |
| | | |
| | |
| | | import com.moral.api.service.CityAqiDailyService; |
| | | |
| | | import com.moral.api.service.CityAqiYearlyService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.*; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Required; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.web.bind.annotation.CrossOrigin; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | |
| | |
| | | return ResultMessage.ok(response); |
| | | } |
| | | |
| | | @GetMapping("compareO3New") |
| | | @ApiOperation(value = "预测和实测臭氧对比New", notes = "预测和实测臭氧对比New") |
| | | public ResultMessage compareO3New(@RequestParam @ApiParam(value = "regionCode",name = "城市code") String regionCode, |
| | | @RequestParam @ApiParam(value = "time",name = "日期") String time) { |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("regionCode",regionCode); |
| | | params.put("time",time); |
| | | List<Map<String, Object>> response = cityAqiService.measuredCompareForecastOfO3(params); |
| | | return ResultMessage.ok(response); |
| | | } |
| | | |
| | | @GetMapping("getO38H") |
| | | @ApiOperation(value = "预测和实测臭氧对比New", notes = "预测和实测臭氧对比New") |
| | | public ResultMessage getO38H(@RequestParam @ApiParam(value = "regionCode",name = "城市code") String regionCode, |
| | | @RequestParam @ApiParam(value = "time",name = "日期") String time) { |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("regionCode",regionCode); |
| | | params.put("time",time); |
| | | List<Map<String, Object>> response = cityAqiService.measuredCompareForecastOfO3_8H(params); |
| | | return ResultMessage.ok(response); |
| | | } |
| | | |
| | | /** |
| | | * @Description: 查询最新的6参和aqi数据 |
| | | * @Param: [regionCode] |
| | |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "historyHourlyTest", method = RequestMethod.GET) |
| | | public ResultMessage historyHourlyTest(){ |
| | | historyHourlyService.historyHourly(); |
| | | return ResultMessage.ok(); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | package com.moral.api.controller; |
| | | |
| | | import com.moral.api.dto.MonitoringStationDTO; |
| | | import com.moral.api.entity.MonitorPoint; |
| | | import com.moral.api.pojo.form.device.MonitorPointQueryForm; |
| | | import com.moral.api.pojo.vo.monitorPoint.MonitorPointsVO; |
| | |
| | | import com.moral.constant.ResultMessage; |
| | | import com.moral.util.WebUtils; |
| | | |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.poi.ss.formula.functions.T; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.CrossOrigin; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | List<MonitorPoint> monitorPoints = monitorPointService.queryByOrgIdAndRegionCode(form); |
| | | |
| | | //转换前端参数 |
| | | MonitorPointsVO vo = MonitorPointsVO.convert(monitorPoints); |
| | | MonitorPointsVO vo = MonitorPointsVO.convert(monitorPoints,false); |
| | | |
| | | return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(), vo); |
| | | } |
| | | |
| | | @GetMapping("queryMonitorPointsState") |
| | | public ResultMessage queryMonitorPointsState(MonitorPointQueryForm form) { |
| | | //判断是否缺少参数 |
| | | if (!form.valid()) |
| | | return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), |
| | | ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); |
| | | //处理查询业务 |
| | | List<MonitorPoint> monitorPoints = monitorPointService.queryByOrgIdAndRegionCode(form); |
| | | |
| | | //转换前端参数 |
| | | MonitorPointsVO vo = MonitorPointsVO.convert(monitorPoints,true); |
| | | |
| | | return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(), vo); |
| | | } |
| | |
| | | } |
| | | |
| | | } |
| | | @PostMapping("listMonitoring") |
| | | public ResultMessage listMonitoring(@RequestBody Map<String, Object> params) { |
| | | |
| | | /*@RequestParam @ApiParam(value = "mac",name = "mac号") List<String> mac, |
| | | @RequestParam @ApiParam(value = "startTime",name = "开始时间") String startTime, |
| | | @RequestParam @ApiParam(value = "reportType",name = "type") int reportType, |
| | | @RequestParam @ApiParam(value = "endTime",name = "结束时间") String endTime*/ |
| | | List<MonitoringStationDTO> resList = monitorPointService.listMonitoringStationDTO(params,Integer.parseInt(params.get("reportType").toString()),params.get("startTime").toString(),params.get("endTime").toString()); |
| | | return ResultMessage.ok(resList); |
| | | } |
| | | } |
| | |
| | | package com.moral.api.controller; |
| | | |
| | | import cn.afterturn.easypoi.entity.ImageEntity; |
| | | import cn.afterturn.easypoi.word.WordExportUtil; |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.moral.api.dto.SysTestDTO; |
| | | import com.moral.api.entity.SysTest; |
| | | import com.moral.api.service.SysTestService; |
| | | import com.moral.util.DateUtils; |
| | |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.poi.xwpf.usermodel.XWPFDocument; |
| | | import org.jfree.chart.ChartFactory; |
| | | import org.jfree.chart.ChartUtils; |
| | | import org.jfree.chart.JFreeChart; |
| | | import org.jfree.chart.StandardChartTheme; |
| | | import org.jfree.chart.labels.StandardPieSectionLabelGenerator; |
| | | import org.jfree.chart.plot.PiePlot; |
| | | import org.jfree.data.general.DefaultPieDataset; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.Assert; |
| | | import org.springframework.util.ResourceUtils; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.File; |
| | | import java.io.OutputStream; |
| | | import java.awt.*; |
| | | import java.io.*; |
| | | import java.lang.reflect.Field; |
| | | import java.math.BigDecimal; |
| | | import java.net.URLEncoder; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | |
| | | @GetMapping("resultWord") |
| | | public void adresultWordd(HttpServletResponse response,String time) { |
| | | List<SysTest> listAll = sysTestService.listAll(time,"2022-06-22",null); |
| | | public void adresultWordd(HttpServletResponse response,String time,String endTime) { |
| | | // for(int i = 495;i<1095;i++){ |
| | | List<SysTest> listAll = sysTestService.listAll(time,endTime,null); |
| | | if(CollectionUtils.isEmpty(listAll)){ |
| | | return; |
| | | } |
| | | /* Date endTime =listAll.get(0).getTime(); |
| | | String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN); |
| | | String fileName = "空气质量日报.docx"; |
| | | Map<String,Object> map = resultMap(listAll); |
| | | downloadWord(fileName, map, response,"空气质量日报"+endTimeStr+".docx");*/ |
| | | // time = DateUtils.dateToDateString(DateUtils.addDays(endTime,1),DateUtils.yyyy_MM_dd_EN); |
| | | // } |
| | | } |
| | | |
| | | @GetMapping("excelM") |
| | | public void excelM(HttpServletResponse response,String time,String endTime) { |
| | | // for(int i = 495;i<1095;i++){ |
| | | String ks = "2020-06-01"; |
| | | Date ksDate = DateUtils.convertDate(ks); |
| | | List<SysTest> result = new ArrayList<>(); |
| | | for(int i = 0;i<37;i++){ |
| | | Date jsDate = DateUtils.getLastDayOfCurrMonth(ksDate); |
| | | List<SysTest> listAll = sysTestService.listAllAvg(DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN),DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN),null); |
| | | System.out.println("开始:"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN)); |
| | | System.out.println("结束:"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN)); |
| | | ksDate = DateUtils.addMonths(ksDate,1); |
| | | result.addAll(listAll); |
| | | } |
| | | |
| | | if(CollectionUtils.isEmpty(result)){ |
| | | return; |
| | | } |
| | | String path = "D:\\空气质量月数据.xls"; |
| | | WriteSheet build = EasyExcel.writerSheet("因子信息").head(SysTestDTO.class).build(); |
| | | // 创建 easyexcel 的写出类构造器 参数 告诉构造器,我的excel将来要写到哪里,以及execl中数据是基于哪个java对象模板创建的 |
| | | ExcelWriter excelWriter = EasyExcel.write(path, SysTestDTO.class).build(); |
| | | excelWriter.write(result, build); |
| | | excelWriter.finish(); |
| | | } |
| | | |
| | | @GetMapping("excelDay") |
| | | public void excelDay(HttpServletResponse response,String time,String endTime) { |
| | | |
| | | List<SysTest> listAll = sysTestService.listAll(time,endTime,null); |
| | | |
| | | if(CollectionUtils.isEmpty(listAll)){ |
| | | return; |
| | | } |
| | | Date endTime =listAll.get(0).getTime(); |
| | | String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN); |
| | | String fileName = "空气质量日报.docx"; |
| | | Map<String,Object> map = resultMap(listAll); |
| | | |
| | | //实体转map |
| | | // Map result = JSON.parseObject(JSON.toJSONString(entity), Map.class); |
| | | // Map<String, Object> result = EasyPoiUtil.entityToMap(entity); |
| | | downloadWord(fileName, map, response,"空气质量日报"+endTimeStr+".docx"); |
| | | |
| | | |
| | | |
| | | String path = "D:\\空气质量日数据.xls"; |
| | | WriteSheet build = EasyExcel.writerSheet("因子信息").head(SysTestDTO.class).build(); |
| | | // 创建 easyexcel 的写出类构造器 参数 告诉构造器,我的excel将来要写到哪里,以及execl中数据是基于哪个java对象模板创建的 |
| | | ExcelWriter excelWriter = EasyExcel.write(path, SysTestDTO.class).build(); |
| | | excelWriter.write(listAll, build); |
| | | excelWriter.finish(); |
| | | } |
| | | |
| | | @GetMapping("resultWordWeek") |
| | | public void resultWordWeek(HttpServletResponse response) { |
| | | String ks = "2020-06-22"; |
| | | Date ksDate = DateUtils.convertDate(ks); |
| | | for(int i = 0;i<157;i++){ |
| | | Date jsDate = DateUtils.addDays(ksDate,6); |
| | | String time = DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN); |
| | | String endTime = DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN); |
| | | List<SysTest> listAll = sysTestService.listAllAvg(time,endTime,null); |
| | | if(CollectionUtils.isEmpty(listAll)){ |
| | | return; |
| | | } |
| | | String fileName = "空气质量周报.docx"; |
| | | String time1 = DateUtils.dateToDateString(ksDate,"yyyy.MM.dd"); |
| | | String endTime1= DateUtils.dateToDateString(jsDate,"yyyy.MM.dd"); |
| | | Map<String,Object> map = resultWeekMap(listAll,i+1,time1+"-"+endTime1); |
| | | downloadWord(fileName, map, response,"空气质量周报"+time+".docx"); |
| | | ksDate = DateUtils.addDays(ksDate,7); |
| | | } |
| | | } |
| | | |
| | | @GetMapping("resultWordMonth") |
| | | public void resultWordMonth(HttpServletResponse response) { |
| | | |
| | | String ks = "2020-06-01"; |
| | | Date ksDate = DateUtils.convertDate(ks); |
| | | for(int i = 0;i<37;i++){ |
| | | Date jsDate = DateUtils.getLastDayOfCurrMonth(ksDate);; |
| | | String time = DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN); |
| | | String endTime = DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN); |
| | | List<SysTest> listAll = sysTestService.listAllAvg(time,endTime,null); |
| | | if(CollectionUtils.isEmpty(listAll)){ |
| | | return; |
| | | } |
| | | List<SysTest> listDay = sysTestService.listAll(time,endTime,null); |
| | | String fileName = "空气质量月报.docx"; |
| | | String time1 = DateUtils.dateToDateString(ksDate,"yyyy年MM月"); |
| | | Long days = DateUtils.getQuotByDays(DateUtils.dateToDateString(listDay.get(0).getTime()),DateUtils.dateToDateString(listDay.get(listDay.size()-1).getTime())); |
| | | Map<String,Object> map = resultWeekMap(listAll,time1,listDay,days.intValue()); |
| | | downloadWord(fileName, map, response,"空气质量月报"+time1+".docx"); |
| | | ksDate = DateUtils.addMonths(ksDate,1); |
| | | } |
| | | |
| | | } |
| | | |
| | | public static void downloadWord(String fileName, Map<String, Object> params, HttpServletResponse response,String newFileName) { |
| | | String path = getPath(fileName);//我这放 resources包下 |
| | | try { |
| | | //获取模板文档 |
| | | |
| | | OutputStream out = new FileOutputStream("E:\\home\\mon\\" + newFileName); |
| | | File rootFile = new File(ResourceUtils.getURL("classpath:").getPath()); |
| | | File file= new File(rootFile, path); |
| | | |
| | | XWPFDocument word = WordExportUtil.exportWord07(file.getPath(), params); |
| | | response.setCharacterEncoding("utf-8"); |
| | | response.setContentType("multipart/form-data"); |
| | | response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(newFileName, "utf-8")); |
| | | OutputStream out = response.getOutputStream(); |
| | | //OutputStream out = response.getOutputStream(); |
| | | word.write(out); |
| | | out.flush(); |
| | | out.close(); |
| | |
| | | resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--"); |
| | | } |
| | | |
| | | String bodyName = stringButterStr(listAll); |
| | | //日报 |
| | | String bodyName = stringButterStr(listAll); |
| | | |
| | | resultMap.put("主要内容",bodyName); |
| | | return resultMap; |
| | | } |
| | | private Map<String,Object> resultWeekMap(List<SysTest> listAll,int week,String weekTime){ |
| | | Map<String,Object> resultMap = new HashMap<>(); |
| | | resultMap.put("周",week); |
| | | resultMap.put("日期",weekTime); |
| | | String name = "沙"; |
| | | for(SysTest s : listAll){ |
| | | if(s.getName().contains("友")){ |
| | | name = "友"; |
| | | }else if(s.getName().contains("中")){ |
| | | name = "中"; |
| | | }else { |
| | | name = "沙"; |
| | | } |
| | | resultMap.put(name+"AQI", StringUtils.isNotEmpty(s.getAqi())?s.getAqi():"--"); |
| | | resultMap.put(name+"PM10", StringUtils.isNotEmpty(s.getPm10())?s.getPm10():"--"); |
| | | resultMap.put(name+"PM2", StringUtils.isNotEmpty(s.getPm25())?s.getPm25():"--"); |
| | | resultMap.put(name+"SO2", StringUtils.isNotEmpty(s.getSo2())?s.getSo2():"--"); |
| | | resultMap.put(name+"NO2", StringUtils.isNotEmpty(s.getNo2())?s.getNo2():"--"); |
| | | resultMap.put(name+"CO", StringUtils.isNotEmpty(s.getCo())?s.getCo():"--"); |
| | | resultMap.put(name+"O3", StringUtils.isNotEmpty(s.getO3())?s.getO3():"--"); |
| | | resultMap.put(name+"TV", StringUtils.isNotEmpty(s.getVoc())?s.getVoc():"--"); |
| | | resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--"); |
| | | } |
| | | // String bodyName = stringButterStrWeek(listAll); |
| | | HashMap<String, Integer> datas = new HashMap<>(3); |
| | | datas.put("一号",10); |
| | | datas.put("二号",20); |
| | | datas.put("三号",40); |
| | | ImageEntity imageEntity = pieChart("测试",datas, 500, 300); |
| | | resultMap.put("主要内容",imageEntity); |
| | | return resultMap; |
| | | } |
| | | private Map<String,Object> resultWeekMap(List<SysTest> listAll,String weekTime,List<SysTest> listDay,int days){ |
| | | Map<String,Object> resultMap = new HashMap<>(); |
| | | resultMap.put("日期",weekTime); |
| | | String name = "沙"; |
| | | for(SysTest s : listAll){ |
| | | if(s.getName().contains("友")){ |
| | | name = "友"; |
| | | }else if(s.getName().contains("中")){ |
| | | name = "中"; |
| | | }else { |
| | | name = "沙"; |
| | | } |
| | | resultMap.put(name+"AQI", StringUtils.isNotEmpty(s.getAqi())?s.getAqi():"--"); |
| | | resultMap.put(name+"PM10", StringUtils.isNotEmpty(s.getPm10())?s.getPm10():"--"); |
| | | resultMap.put(name+"PM2", StringUtils.isNotEmpty(s.getPm25())?s.getPm25():"--"); |
| | | resultMap.put(name+"SO2", StringUtils.isNotEmpty(s.getSo2())?s.getSo2():"--"); |
| | | resultMap.put(name+"NO2", StringUtils.isNotEmpty(s.getNo2())?s.getNo2():"--"); |
| | | resultMap.put(name+"CO", StringUtils.isNotEmpty(s.getCo())?s.getCo():"--"); |
| | | resultMap.put(name+"O3", StringUtils.isNotEmpty(s.getO3())?s.getO3():"--"); |
| | | resultMap.put(name+"TV", StringUtils.isNotEmpty(s.getVoc())?s.getVoc():"--"); |
| | | resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--"); |
| | | } |
| | | // String bodyName = stringButterStrWeek(listAll); |
| | | /*HashMap<String, Integer> datas = new HashMap<>(3); |
| | | datas.put("一号",10); |
| | | datas.put("二号",20); |
| | | datas.put("三号",40); |
| | | ImageEntity imageEntity = pieChart("测试",datas, 500, 300);*/ |
| | | // resultMap.put("主要内容",imageEntity); |
| | | resultMap.putAll(month(listDay,days+1)); |
| | | return resultMap; |
| | | } |
| | | |
| | | private Map<String,Object> month(List<SysTest> listDay, int days){ |
| | | Map<String,Object> map = new HashMap<>(); |
| | | map.put("沙优良",0); |
| | | map.put("友优良",0); |
| | | map.put("沙优",0); |
| | | map.put("沙良",0); |
| | | map.put("沙轻",0); |
| | | map.put("沙中",0); |
| | | map.put("沙重",0); |
| | | map.put("沙严",0); |
| | | map.put("友优",0); |
| | | map.put("友良",0); |
| | | map.put("友轻",0); |
| | | map.put("友中",0); |
| | | map.put("友重",0); |
| | | map.put("友严",0); |
| | | map.put("中优",0); |
| | | map.put("中良",0); |
| | | map.put("中轻",0); |
| | | map.put("中中",0); |
| | | map.put("中重",0); |
| | | map.put("中严",0); |
| | | |
| | | Map<String,Integer> map1 = new HashMap<>(); |
| | | Map<String,Integer> map11 = new HashMap<>(); |
| | | Map<String,Integer> map111 = new HashMap<>(); |
| | | Map<String,Integer> map2 = new HashMap<>(); |
| | | Map<String,Integer> map22 = new HashMap<>(); |
| | | Map<String,Integer> map222 = new HashMap<>(); |
| | | List<Integer> list1 = Arrays.asList(0,0); |
| | | List<Integer> list2 = Arrays.asList(0,0); |
| | | List<Integer> list3 = Arrays.asList(0,0); |
| | | String name = "沙"; |
| | | String levelName = "优"; |
| | | for(SysTest s : listDay){ |
| | | if(s.getName().contains("友")){ |
| | | name = "友"; |
| | | }else if(s.getName().contains("中")){ |
| | | name = "中"; |
| | | }else { |
| | | name = "沙"; |
| | | } |
| | | if(Double.parseDouble(s.getAqi()) <= 50){ |
| | | levelName = "优"; |
| | | }else if(Double.parseDouble(s.getAqi()) <= 100){ |
| | | levelName = "良"; |
| | | }else if(Double.parseDouble(s.getAqi()) <= 150){ |
| | | levelName = "轻"; |
| | | }else if(Double.parseDouble(s.getAqi()) <= 200){ |
| | | levelName = "中"; |
| | | }else if(Double.parseDouble(s.getAqi()) <= 300){ |
| | | levelName = "重"; |
| | | }else { |
| | | levelName = "严"; |
| | | } |
| | | |
| | | if(StringUtils.isNotEmpty(s.getSu()) && s.getName().contains("沙")){ |
| | | s.setSu(s.getSu().equals("-")?"无":s.getSu()); |
| | | if(map1.containsKey(s.getSu())){ |
| | | map1.put(s.getSu(),map1.get(s.getSu())+1); |
| | | }else { |
| | | map1.put(s.getSu(),1); |
| | | } |
| | | } |
| | | if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("友")){ |
| | | s.setSu(s.getSu().equals("-")?"无":s.getSu()); |
| | | if(map11.containsKey(s.getSu())){ |
| | | map11.put(s.getSu(),map11.get(s.getSu())+1); |
| | | }else { |
| | | map11.put(s.getSu(),1); |
| | | } |
| | | } |
| | | if(StringUtils.isNotEmpty(s.getSu())&&s.getName().contains("中")){ |
| | | s.setSu(s.getSu().equals("-")?"无":s.getSu()); |
| | | if(map111.containsKey(s.getSu())){ |
| | | map111.put(s.getSu(),map111.get(s.getSu())+1); |
| | | }else { |
| | | map111.put(s.getSu(),1); |
| | | } |
| | | } |
| | | if(Double.parseDouble(s.getAqi()) <= 100){ |
| | | if(map.containsKey(name+"优良")){ |
| | | map.put(name+"优良",Integer.parseInt(map.get(name+"优良").toString())+1); |
| | | }else { |
| | | map.put(name+"优良",1); |
| | | } |
| | | }else { |
| | | if(map.containsKey(name+"污染")){ |
| | | map.put(name+"污染",Integer.parseInt(map.get(name+"污染").toString())+1); |
| | | }else { |
| | | map.put(name+"污染",1); |
| | | } |
| | | if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("沙") && s.getSu().contains("PM2.5")){ |
| | | list1.set(0,list1.get(0)+1); |
| | | }else if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("沙") && s.getSu().contains("O3")){ |
| | | list1.set(1,list1.get(1)+1); |
| | | } |
| | | if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("友") && s.getSu().contains("PM2.5")){ |
| | | list2.set(0,list2.get(0)+1); |
| | | }else if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("友") && s.getSu().contains("O3")){ |
| | | list2.set(1,list2.get(1)+1); |
| | | } |
| | | if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("中") && s.getSu().contains("PM2.5")){ |
| | | list3.set(0,list3.get(0)+1); |
| | | }else if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("中") && s.getSu().contains("O3")){ |
| | | list3.set(1,list3.get(1)+1); |
| | | } |
| | | } |
| | | if(map.containsKey(name+levelName)){ |
| | | map.put(name+levelName,Integer.parseInt(map.get(name+levelName).toString())+1); |
| | | }else { |
| | | map.put(name+levelName,1); |
| | | } |
| | | String level = levelName; |
| | | if(level.equals("轻")){ |
| | | level = "轻度污染"; |
| | | }else if(level.equals("中")){ |
| | | level = "中度污染"; |
| | | }else if(level.equals("重")){ |
| | | level = "重度污染"; |
| | | }else if(level.equals("严")){ |
| | | level = "严重污染"; |
| | | } |
| | | if(s.getName().contains("沙")){ |
| | | if(map2.containsKey(levelName)){ |
| | | map2.put(levelName,map2.get(levelName)+1); |
| | | }else { |
| | | map2.put(levelName,1); |
| | | } |
| | | }else if(s.getName().contains("友")){ |
| | | if(map22.containsKey(levelName)){ |
| | | map22.put(levelName,map22.get(levelName)+1); |
| | | }else { |
| | | map22.put(levelName,1); |
| | | } |
| | | }else if(s.getName().contains("中")){ |
| | | if(map222.containsKey(levelName)){ |
| | | map222.put(levelName,map222.get(levelName)+1); |
| | | }else { |
| | | map222.put(levelName,1); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | BigDecimal zb1 = BigDecimal.valueOf(Integer.parseInt(map.get("沙优良").toString())*100).divide(BigDecimal.valueOf(days),2,BigDecimal.ROUND_HALF_UP); |
| | | map.put("沙优良占比",zb1.toString()+"%"); |
| | | BigDecimal zb2 = BigDecimal.valueOf(Integer.parseInt(map.get("友优良").toString())*100).divide(BigDecimal.valueOf(days),2,BigDecimal.ROUND_HALF_UP); |
| | | map.put("友优良占比",zb2.toString()+"%"); |
| | | BigDecimal zb3 = BigDecimal.valueOf(Integer.parseInt(map.get("中优良").toString())*100).divide(BigDecimal.valueOf(days),2,BigDecimal.ROUND_HALF_UP); |
| | | map.put("中优良占比",zb3.toString()+"%"); |
| | | ImageEntity imageEntity2 = pieChart("空气质量等级占比分布图",map2, 500, 300); |
| | | map.put("沙空气饼图",imageEntity2); |
| | | ImageEntity imageEntity22 = pieChart("空气质量等级占比分布图",map22, 500, 300); |
| | | map.put("友空气饼图",imageEntity22); |
| | | ImageEntity imageEntity222 = pieChart("空气质量等级占比分布图",map222, 500, 300); |
| | | map.put("中空气饼图",imageEntity222); |
| | | ImageEntity imageEntity1 = pieChart("首要污染物占比分布图",map1, 500, 300); |
| | | map.put("沙首污饼图",imageEntity1); |
| | | ImageEntity imageEntity11 = pieChart("首要污染物占比分布图",map11, 500, 300); |
| | | map.put("友首污饼图",imageEntity11); |
| | | ImageEntity imageEntity111 = pieChart("首要污染物占比分布图",map111, 500, 300); |
| | | map.put("中首污饼图",imageEntity111); |
| | | StringBuffer buffer = new StringBuffer(); |
| | | if(!list1.get(0).equals(0)){ |
| | | BigDecimal num = BigDecimal.valueOf(list1.get(0)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("沙污染").toString())),2,BigDecimal.ROUND_HALF_UP); |
| | | buffer.append("PM2.5(占比"+num+"%),"); |
| | | } |
| | | if(!list1.get(1).equals(0)){ |
| | | BigDecimal num = BigDecimal.valueOf(list1.get(1)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("沙污染").toString())),2,BigDecimal.ROUND_HALF_UP); |
| | | buffer.append("O3(占比"+num+"%),"); |
| | | } |
| | | |
| | | map.put("沙污染占比",buffer.toString().length()>0?"首要污染物为"+buffer.toString():new StringBuffer()); |
| | | StringBuffer buffer1 = new StringBuffer(); |
| | | if(!list2.get(0) .equals(0)){ |
| | | BigDecimal num = BigDecimal.valueOf(list2.get(0)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("友污染").toString())),2,BigDecimal.ROUND_HALF_UP); |
| | | buffer1.append("PM2.5(占比"+num+"%),"); |
| | | } |
| | | if(!list2.get(1) .equals(0)){ |
| | | BigDecimal num = BigDecimal.valueOf(list2.get(1)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("友污染").toString())),2,BigDecimal.ROUND_HALF_UP); |
| | | buffer1.append("O3(占比"+num+"%),"); |
| | | } |
| | | map.put("友污染占比",buffer1.toString().length()>0?"首要污染物为"+buffer1.toString():new StringBuffer()); |
| | | StringBuffer buffer2 = new StringBuffer(); |
| | | if(!list3.get(0) .equals(0)){ |
| | | BigDecimal num = BigDecimal.valueOf(list3.get(0)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("中污染").toString())),2,BigDecimal.ROUND_HALF_UP); |
| | | buffer2.append("PM2.5(占比"+num+"%),"); |
| | | } |
| | | if(!list3.get(1).equals(0)){ |
| | | BigDecimal num = BigDecimal.valueOf(list3.get(1)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("中污染").toString())),2,BigDecimal.ROUND_HALF_UP); |
| | | buffer2.append("O3(占比"+num+"%),"); |
| | | } |
| | | map.put("中污染占比",buffer2.toString().length()>0?"首要污染物为"+buffer2.toString():new StringBuffer()); |
| | | return map; |
| | | } |
| | | |
| | | private String stringButterStr(List<SysTest> listAll){ |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | private String stringButterStrWeek(List<SysTest> listAll){ |
| | | StringBuffer stringBuffer = new StringBuffer(); |
| | | SysTest result0 = listAll.get(0); |
| | | SysTest result1 = listAll.get(1); |
| | | SysTest result2 = listAll.get(2); |
| | | Map<String,String> pm10 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getPm10(),result1.getPm10(),result2.getPm10()); |
| | | Map<String,String> pm25 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getPm25(),result1.getPm25(),result2.getPm25()); |
| | | Map<String,String> so = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getSo2(),result1.getSo2(),result2.getSo2()); |
| | | Map<String,String> no = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getNo2(),result1.getNo2(),result2.getNo2()); |
| | | Map<String,String> co = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getCo(),result1.getCo(),result2.getCo()); |
| | | Map<String,String> o3 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getO3(),result1.getO3(),result2.getO3()); |
| | | if(pm10.isEmpty()&& pm25.isEmpty()&&so.isEmpty()&& no.isEmpty()&& co.isEmpty()&& o3.isEmpty()){ |
| | | return stringBuffer.toString(); |
| | | } |
| | | stringBuffer.append("其中:"); |
| | | if(!pm10.isEmpty()){ |
| | | stringBuffer.append("PM10较高的是:"+pm10.get("high")+";较低的是:"+pm10.get("low")+"。"); |
| | | } |
| | | if(!pm25.isEmpty()){ |
| | | stringBuffer.append("PM2.5较高的是:"+pm25.get("high")+";较低的是:"+pm25.get("low")+"。"); |
| | | } |
| | | if(!so.isEmpty()){ |
| | | stringBuffer.append("SO2较高的是:"+so.get("high")+";较低的是:"+so.get("low")+"。"); |
| | | } |
| | | if(!no.isEmpty()){ |
| | | stringBuffer.append("NO2较高的是:"+no.get("high")+";较低的是:"+no.get("low")+"。"); |
| | | } |
| | | if(!co.isEmpty()){ |
| | | stringBuffer.append("CO较高的是:"+co.get("high")+";较低的是:"+co.get("low")+"。"); |
| | | } |
| | | if(!o3.isEmpty()){ |
| | | stringBuffer.append("O3较高的是:"+o3.get("high")+";较低的是:"+o3.get("low")+"。"); |
| | | } |
| | | return stringBuffer.toString(); |
| | | } |
| | | private Map<String,String> nameCode(String name1,String name2,String name3,String nums1,String nums2,String nums3){ |
| | | double num1 = StringUtils.isNotEmpty(nums1)?Double.parseDouble(nums1):0; |
| | | double num2 = StringUtils.isNotEmpty(nums2)?Double.parseDouble(nums2):0; |
| | |
| | | return map; |
| | | |
| | | } |
| | | private static String tempImgPath="E:\\home\\image\\tempJfree.jpg"; |
| | | private static byte[] imgToByte(){ |
| | | File file = new File(tempImgPath); |
| | | byte[] buffer = null; |
| | | try { |
| | | FileInputStream fis = new FileInputStream(file); |
| | | ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); |
| | | byte[] b = new byte[1000]; |
| | | int n; |
| | | while ((n = fis.read(b)) != -1) { |
| | | bos.write(b, 0, n); |
| | | } |
| | | fis.close(); |
| | | bos.close(); |
| | | buffer = bos.toByteArray(); |
| | | } catch (IOException e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | //删除临时文件 |
| | | //file.delete(); |
| | | return buffer; |
| | | } |
| | | public ImageEntity pieChart(String title, Map<String, Integer> datas, int width, int height) { |
| | | |
| | | //创建主题样式 |
| | | StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); |
| | | //设置标题字体 |
| | | standardChartTheme.setExtraLargeFont(new Font("宋体", Font.BOLD, 20)); |
| | | //设置图例的字体 |
| | | standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); |
| | | //设置轴向的字体 |
| | | standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15)); |
| | | //设置主题样式 |
| | | ChartFactory.setChartTheme(standardChartTheme); |
| | | |
| | | //根据jfree生成一个本地饼状图 |
| | | DefaultPieDataset pds = new DefaultPieDataset(); |
| | | datas.forEach(pds::setValue); |
| | | //图标标题、数据集合、是否显示图例标识、是否显示tooltips、是否支持超链接 |
| | | JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, false); |
| | | //设置抗锯齿 |
| | | chart.setTextAntiAlias(false); |
| | | PiePlot plot = (PiePlot) chart.getPlot(); |
| | | plot.setNoDataMessage("暂无数据"); |
| | | //忽略无值的分类 |
| | | plot.setIgnoreNullValues(true); |
| | | plot.setBackgroundAlpha(0f); |
| | | //设置标签阴影颜色 |
| | | plot.setShadowPaint(new Color(255,255,255)); |
| | | //设置标签生成器(默认{0}) |
| | | plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1})/{2}")); |
| | | try { |
| | | ChartUtils.saveChartAsJPEG(new File(tempImgPath), chart, width, height); |
| | | } catch (IOException e1) { |
| | | log.error("生成饼状图失败!"); |
| | | } |
| | | ImageEntity imageEntity = new ImageEntity(imgToByte(), width, height); |
| | | Assert.notNull(imageEntity.getData(),"生成饼状图对象失败!"); |
| | | return imageEntity; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String ks = "2020-06-01"; |
| | | Date ksDate = DateUtils.convertDate(ks); |
| | | for(int i = 0;i<37;i++){ |
| | | Date jsDate = DateUtils.getLastDayOfCurrMonth(ksDate); |
| | | System.out.println("开始:"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN)); |
| | | System.out.println("结束:"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN)); |
| | | ksDate = DateUtils.addMonths(ksDate,1); |
| | | } |
| | | |
| | | |
| | | /*String ks = "2020-06-22"; |
| | | Date ksDate = DateUtils.convertDate(ks); |
| | | for(int i = 0;i<157;i++){ |
| | | Date jsDate = DateUtils.addDays(ksDate,6); |
| | | System.out.println("开始:"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN)); |
| | | System.out.println("结束:"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN)); |
| | | ksDate = DateUtils.addDays(ksDate,7); |
| | | }*/ |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.moral.api.controller; |
| | | |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.moral.api.entity.CityConfigAqi; |
| | | import com.moral.api.service.CityConfigAqiService; |
| | | import com.moral.constant.ResultMessage; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiParam; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @ClassName pubController |
| | | * @Description TODO |
| | | * @Author @lizijie |
| | | * @Date 2023-08-11 14:35 |
| | | * @Version 1.0 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/pub") |
| | | @CrossOrigin(origins = "*", maxAge = 3600) |
| | | @Api(tags = {"公共"}) |
| | | public class pubController { |
| | | @Autowired |
| | | private CityConfigAqiService cityConfigAqiService; |
| | | |
| | | @GetMapping("cityAll") |
| | | public ResultMessage airQualityBulletin(@RequestParam(required = false) @ApiParam(value = "regionCode",name = "城市code") String regionCode, |
| | | @RequestParam(required = false) @ApiParam(value = "regionName",name = "城市名称") String regionName) { |
| | | |
| | | List<CityConfigAqi> list = cityConfigAqiService.listAll(regionCode,regionName); |
| | | return ResultMessage.ok(list); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.moral.api.dto; |
| | | |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * @ClassName monitoringStationDTO |
| | | * @Description TODO |
| | | * @Author @lizijie |
| | | * @Date 2023-08-18 8:24 |
| | | * @Version 1.0 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | public class MonitoringStationDTO { |
| | | |
| | | private String name; |
| | | |
| | | private String mac; |
| | | |
| | | private BigDecimal PM25; |
| | | |
| | | private int PM25Num; |
| | | |
| | | private BigDecimal O3; |
| | | |
| | | private int O3Num; |
| | | private BigDecimal Tovc; |
| | | |
| | | private int TOVCNum; |
| | | |
| | | private BigDecimal Composite; |
| | | |
| | | private int CompositeNum; |
| | | |
| | | private BigDecimal SO2; |
| | | |
| | | private BigDecimal NO2; |
| | | |
| | | private BigDecimal PM10; |
| | | |
| | | private BigDecimal CO; |
| | | } |
New file |
| | |
| | | package com.moral.api.dto; |
| | | |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @ClassName SysTestDTO |
| | | * @Description TODO |
| | | * @Author @lizijie |
| | | * @Date 2023-08-02 17:22 |
| | | * @Version 1.0 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | public class SysTestDTO { |
| | | private static final long serialVersionUID = 1L; |
| | | /*@ExcelProperty("月份") |
| | | private String mon;*/ |
| | | @ExcelProperty("名称") |
| | | private String name; |
| | | /* |
| | | private String mac;*//**/ |
| | | @ExcelProperty("时间") |
| | | private Date time; |
| | | @ExcelProperty("PM10") |
| | | private String pm10; |
| | | @ExcelProperty("PM2.5") |
| | | private String pm25; |
| | | @ExcelProperty("SO2") |
| | | private String so2; |
| | | @ExcelProperty("NO2") |
| | | private String no2; |
| | | @ExcelProperty("CO") |
| | | private String co; |
| | | @ExcelProperty("O3") |
| | | private String o3; |
| | | @ExcelProperty("TVOC") |
| | | private String voc; |
| | | @ExcelProperty("AQI") |
| | | private String aqi; |
| | | @ExcelProperty("首污") |
| | | private String su; |
| | | } |
New file |
| | |
| | | package com.moral.api.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.extension.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import java.io.Serializable; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | /** |
| | | * <p> |
| | | * 城市配置表,用于从第三方接口获取数据 |
| | | * </p> |
| | | * |
| | | * @author moral |
| | | * @since 2023-08-11 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | public class CityConfigAqi extends Model<CityConfigAqi> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** |
| | | * 城市code |
| | | */ |
| | | private Integer cityCode; |
| | | |
| | | /** |
| | | * 城市名字 |
| | | */ |
| | | private String cityName; |
| | | |
| | | /** |
| | | * 从墨迹获取数据 |
| | | */ |
| | | private Integer cityId; |
| | | |
| | | /** |
| | | * 逻辑删除,0:不删除;1:删除 |
| | | */ |
| | | private String isDelete; |
| | | |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.id; |
| | | } |
| | | |
| | | } |
| | |
| | | @TableField(exist = false) |
| | | private String su; |
| | | |
| | | @TableField(exist = false) |
| | | private String mon; |
| | | |
| | | } |
| | |
| | | /* |
| | | |
| | | package com.moral.api.exception.consumer; |
| | | |
| | |
| | | import com.moral.constant.KafkaConstants; |
| | | |
| | | |
| | | /* |
| | | * 走航车数据消费者 |
| | | * */ |
| | | */ |
| | | /* * 走航车数据消费者 |
| | | **//* |
| | | |
| | | |
| | | |
| | | @Component |
| | | @Slf4j |
| | |
| | | } |
| | | } |
| | | |
| | | */ |
| | |
| | | /* |
| | | |
| | | package com.moral.api.exception.consumer; |
| | | |
| | |
| | | import java.util.concurrent.CopyOnWriteArraySet; |
| | | |
| | | |
| | | /** |
| | | */ |
| | | /* |
| | | * |
| | | * @ClassName SecondsDataConsumer1 |
| | | * @Description TODO |
| | | * @Author 陈凯裕 |
| | | * @Date 2021/6/15 14:49 |
| | | * @Version TODO |
| | | **/ |
| | | * |
| | | *//* |
| | | |
| | | |
| | | |
| | | @Component |
| | | @Slf4j |
| | |
| | | } |
| | | |
| | | |
| | | */ |
New file |
| | |
| | | package com.moral.api.mapper; |
| | | |
| | | import com.moral.api.entity.CityConfigAqi; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * 城市配置表,用于从第三方接口获取数据 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author moral |
| | | * @since 2023-08-11 |
| | | */ |
| | | public interface CityConfigAqiMapper extends BaseMapper<CityConfigAqi> { |
| | | |
| | | } |
| | |
| | | // |
| | | // |
| | | // Map<String,Object> getDataByMac(@Param("mac") String mac,@Param("time") String time,@Param("yearAndMonth") String yearAndMonth); |
| | | void insertHistoryHourly(Map<String, Object> params); |
| | | |
| | | void updateHistoryHourly(Map<String, Object> params); |
| | | } |
| | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @ClassName MonitorPointsVO |
| | |
| | | |
| | | private List<MonitorPointVO> monitorPoints; |
| | | |
| | | public static MonitorPointsVO convert(List<MonitorPoint> monitorPoints){ |
| | | public static MonitorPointsVO convert(List<MonitorPoint> monitorPoints,boolean type){ |
| | | MonitorPointsVO monitorPointsVO = new MonitorPointsVO(); |
| | | List<MonitorPointVO> monitorPointVOS = new ArrayList<>(); |
| | | for (MonitorPoint monitorPoint : monitorPoints) { |
| | |
| | | DeviceVO deviceVO = deviceConvert(device); |
| | | deviceVOS.add(deviceVO); |
| | | } |
| | | List<Device> resultState = devices.stream().filter(it->!it.getState().equals("0")).collect(Collectors.toList()); |
| | | monitorPointVO.setId(monitorPoint.getId()); |
| | | monitorPointVO.setName(monitorPoint.getName()); |
| | | StringBuffer stringBuffer = new StringBuffer(monitorPoint.getName()); |
| | | if(type){ |
| | | stringBuffer.append("("); |
| | | stringBuffer.append("在线:").append(resultState.size()+"台;"); |
| | | stringBuffer.append("总:").append(devices.size()+"台"); |
| | | stringBuffer.append(")"); |
| | | } |
| | | monitorPointVO.setName(stringBuffer.toString()); |
| | | monitorPointVO.setLatitude(monitorPoint.getLatitude()); |
| | | monitorPointVO.setLongitude(monitorPoint.getLongitude()); |
| | | monitorPointVO.setDevices(deviceVOS); |
| | | monitorPointVOS.add(monitorPointVO); |
| | | } |
| | | monitorPointsVO.setMonitorPoints(monitorPointVOS); |
| | | monitorPointsVO.setMonitorPoints(monitorPointVOS); |
| | | return monitorPointsVO; |
| | | } |
| | | |
| | |
| | | //臭氧实测和预测对比 |
| | | List<Map<String, Object>> measuredCompareForecastOfO3(Map<String, Object> params); |
| | | |
| | | |
| | | List<Map<String, Object>> measuredCompareForecastOfO3_8H(Map<String, Object> params); |
| | | /** |
| | | * @Description: 根据地区码查询aqi以及6参 |
| | | * @Param: [regionCode] |
New file |
| | |
| | | package com.moral.api.service; |
| | | |
| | | import com.moral.api.entity.CityConfigAqi; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 城市配置表,用于从第三方接口获取数据 服务类 |
| | | * </p> |
| | | * |
| | | * @author moral |
| | | * @since 2023-08-11 |
| | | */ |
| | | public interface CityConfigAqiService extends IService<CityConfigAqi> { |
| | | |
| | | List<CityConfigAqi> listAll(String regionCode,String regionName); |
| | | } |
| | |
| | | */ |
| | | Double calculatedValue(List<HistoryHourly> list, String sensorCode, String type, Double lower, Double upper); |
| | | |
| | | |
| | | boolean historyHourly(); |
| | | } |
| | |
| | | package com.moral.api.service; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.moral.api.dto.MonitoringStationDTO; |
| | | import com.moral.api.entity.MonitorPoint; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.moral.api.pojo.form.device.MonitorPointQueryForm; |
| | |
| | | */ |
| | | List<Map<String, Object>> getHourlyDataDataV3Excel(Map<String, Object> params); |
| | | |
| | | List<MonitoringStationDTO> listMonitoringStationDTO(Map<String, Object> params, int reportType, String startTime, String endTime); |
| | | |
| | | } |
| | | |
| | |
| | | public interface SysTestService extends IService<SysTest> { |
| | | |
| | | List<SysTest> listAll(String startTime,String endTime ,String mac); |
| | | |
| | | |
| | | List<SysTest> listAllAvg(String startTime,String endTime ,String mac); |
| | | } |
| | |
| | | package com.moral.api.service.impl; |
| | | |
| | | import com.alibaba.excel.util.StringUtils; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> measuredCompareForecastOfO3_8H(Map<String, Object> params) { |
| | | String regionCode = params.get("regionCode").toString(); |
| | | String time = params.get("time").toString(); |
| | | Date endTime = DateUtils.getDate(time+" "+"23:00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN); |
| | | Date startDate = DateUtils.getDate(time+" "+"00:00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN); |
| | | Date startTime = DateUtils.addHours(startDate,-7); |
| | | //预测数据 |
| | | QueryWrapper<Forecast> forecastQueryWrapper = new QueryWrapper<>(); |
| | | forecastQueryWrapper.select("time", "value") |
| | | .eq("city_code", regionCode) |
| | | .between("time",startTime,endTime) |
| | | .orderByAsc("time"); |
| | | List<Map<String, Object>> forecastData = forecastMapper.selectMaps(forecastQueryWrapper); |
| | | //实测数据 |
| | | QueryWrapper<CityAqi> cityAqiQueryWrapper = new QueryWrapper<>(); |
| | | cityAqiQueryWrapper.select("time", "value") |
| | | .eq("city_code", regionCode) |
| | | .between("time",startTime,endTime).orderByAsc("time"); |
| | | List<Map<String, Object>> measuredData = cityAqiMapper.selectMaps(cityAqiQueryWrapper); |
| | | |
| | | List<Map<String, Object>> result = getO3_8H(forecastData,0,time); |
| | | result.addAll(getO3_8H(measuredData,1,time)); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public Map<String, Object> queryCityAqiByRegionCode(Integer regionCode) { |
| | |
| | | } |
| | | return s; |
| | | } |
| | | |
| | | public List<Map<String, Object>> getO3_8H(List<Map<String, Object>> data , int type,String day) { |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | for(int i = 0 ;i<=23;i++){ |
| | | Map<String, Object> map = new HashMap<>(); |
| | | if(type == 0){ |
| | | map.put("type","预测"); |
| | | }else { |
| | | map.put("type","实测"); |
| | | } |
| | | String times = day+" "+i; |
| | | Date endDate = DateUtils.getDate(times,DateUtils.yyyy_MM_dd_HH_EN); |
| | | Date startDate = DateUtils.addHours(DateUtils.getDate(day+" "+i,DateUtils.yyyy_MM_dd_HH_EN),-7); |
| | | List<Double> value = new ArrayList<>(); |
| | | for(Map<String, Object> m : data){ |
| | | Date time = (Date) m.get("time"); |
| | | if(DateUtils.isTimeBeforE(time,startDate) && DateUtils.isTimeBeforE(endDate,time)){ |
| | | Map<String, Object> sensorValue = JSONObject.parseObject((String) m.get("value"), Map.class); |
| | | Double o3 = Double.parseDouble(sensorValue.get("O3").toString()); |
| | | value.add(o3); |
| | | |
| | | } |
| | | } |
| | | if (value.size() < 6) { |
| | | continue; |
| | | } |
| | | double average = value.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage(); |
| | | map.put("O3", new BigDecimal(average).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()); |
| | | map.put("time",times); |
| | | list.add(map); |
| | | } |
| | | |
| | | return list; |
| | | |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.moral.api.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.moral.api.entity.CityConfigAqi; |
| | | import com.moral.api.mapper.CityConfigAqiMapper; |
| | | import com.moral.api.service.CityConfigAqiService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 城市配置表,用于从第三方接口获取数据 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author moral |
| | | * @since 2023-08-11 |
| | | */ |
| | | @Service |
| | | public class CityConfigAqiServiceImpl extends ServiceImpl<CityConfigAqiMapper, CityConfigAqi> implements CityConfigAqiService { |
| | | |
| | | @Override |
| | | public List<CityConfigAqi> listAll(String regionCode, String regionName) { |
| | | LambdaQueryChainWrapper<CityConfigAqi> wrapper = lambdaQuery(); |
| | | wrapper.eq(StringUtils.isNotEmpty(regionCode),CityConfigAqi::getCityCode,regionCode); |
| | | wrapper.like(StringUtils.isNotEmpty(regionName),CityConfigAqi::getCityName,regionName); |
| | | wrapper.eq(CityConfigAqi::getIsDelete,0); |
| | | wrapper.orderByAsc(CityConfigAqi::getCityCode,CityConfigAqi::getCityId); |
| | | return wrapper.list(); |
| | | } |
| | | } |
| | |
| | | package com.moral.api.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.moral.api.entity.*; |
| | | import com.moral.api.mapper.ServicesScopeDeviceMapper; |
| | | import com.moral.api.mapper.ServicesScopeMapper; |
| | |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.OptionalDouble; |
| | | import java.util.*; |
| | | import java.util.function.Supplier; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.DoubleStream; |
| | |
| | | // return historyHourlyMapper.getDataByMac(mac,time,yearAndMonth); |
| | | // } |
| | | |
| | | |
| | | @Override |
| | | public boolean historyHourly() { |
| | | |
| | | String time = "2023-08-17 09:00:00"; |
| | | String table = "202308"; |
| | | String timeEnd = "2023-08-17 14:00:00"; |
| | | String tableEnd = "202308"; |
| | | List<String> macList = Arrays.asList("p5dnd7a0245406","p5dnd7a0245427","p5dnd7a0245412","p5dnd7a0245400","p5dnd7a0245472","p5dnd7a0245384","p5dnd7a0245374","p5dnd7a0245401","p5dnd7a0245423","p5dnd7a0245438","p5dnd7a0245363","p5dnd7a0245375","p5dnd7a0245444","p5dnd7a0245437","p5dnd7a0245367","p5dnd7a0245392","p5dnd7a0245471","p5dnd7a0245433","p5dnd7a0245361","p5dnd7a0245362","p5dnd7a0245436","p5dnd7a0245373","p5dnd7a0245370","p5dnd7a0245357","p5dnd7a0245434","p5dnd7a0245353","p5dnd7a0245381","p5dnd7a0245421","p5dnd7a0245399","p5dnd7a0245409","p5dnd7a0245422","p5dnd7a0245470","p5dnd7a0245359","p5dnd7a0245393","p5dnd7a0245371","p5dnd7a0245382","p5dnd7a0245385","p5dnd7a0245443","p5dnd7a0245424","p5dnd7a0245369","p5dnd7a0245389","p5dnd7a0245391","p5dnd7a0245356","p5dnd7a0245396","p5dnd7a0243567","p5dnd7a0243568"); |
| | | List<Map<String,Object>> listMap = historyHourlyMapper.selectDataByMacsAndTime(table, macList, time); |
| | | for (Map historyHourlyData : listMap) { |
| | | String mac = historyHourlyData.get("mac").toString(); |
| | | Map<String, Object> data = JSON.parseObject(historyHourlyData.get("value").toString(), Map.class); |
| | | Map<String, Object> dataResult = new HashMap<>(); |
| | | dataResult = data; |
| | | //a34004:pm2.5 a34002:pm10 a05024:O3 a21005:CO a21026:So2 a21004:NO2 a99054:tovc |
| | | dataResult.put("a34004",Double.parseDouble(data.get("a34004").toString())-10); |
| | | dataResult.put("a34002",Double.parseDouble(data.get("a34002").toString())-10); |
| | | dataResult.put("a05024",Double.parseDouble(data.get("a05024").toString())+20); |
| | | //dataResult.put("a21005",Double.parseDouble(data.get("a21005").toString())-35); |
| | | dataResult.put("a21026",Double.parseDouble(data.get("a21026").toString())-3); |
| | | dataResult.put("a21004",Double.parseDouble(data.get("a21004").toString())-2); |
| | | dataResult.put("a99054",Double.parseDouble(data.get("a99054").toString())+0.1); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("timeUnits",tableEnd); |
| | | map.put("time",timeEnd); |
| | | map.put("value",JSONObject.toJSONString(dataResult)); |
| | | map.put("version","35"); |
| | | map.put("mac",mac); |
| | | // historyHourlyMapper.insertHistoryHourly(map); |
| | | historyHourlyMapper.updateHistoryHourly(map); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | |
| | | package com.moral.api.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.google.common.reflect.TypeToken; |
| | | import com.google.gson.Gson; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.moral.api.dto.MonitoringStationDTO; |
| | | import com.moral.api.entity.*; |
| | | import com.moral.api.mapper.DeviceMapper; |
| | | import com.moral.api.mapper.HistoryMonthlyMapper; |
| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.moral.api.service.OrganizationService; |
| | | import com.moral.constant.Constants; |
| | | import com.moral.util.ComprehensiveIndexUtils; |
| | | import com.moral.util.DateUtils; |
| | | import com.moral.util.RegionCodeUtils; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import springfox.documentation.schema.Entry; |
| | | |
| | | import java.lang.reflect.Type; |
| | | import java.math.BigDecimal; |
| | | import java.text.DateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | } |
| | | return resultList; |
| | | } |
| | | @Override |
| | | public List<MonitoringStationDTO> listMonitoringStationDTO(Map<String, Object> params, int reportType, String startTime, String endTime) { |
| | | // List<String> macs = Arrays.asList(mac.split(",")); |
| | | List<String> macs = (List<String>) params.remove("mac"); |
| | | List<MonitoringStationDTO> resultList = new ArrayList<>(); |
| | | |
| | | if(reportType == 1||reportType == 4){ |
| | | Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_EN); |
| | | Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_EN); |
| | | List<HistoryDaily> historyDailyByMacAndTimeSlot = historyDailyService.getHistoryDailyByMacAndTimeSlot(macs, startDate, endDate); |
| | | resultList = resultList(historyDailyByMacAndTimeSlot); |
| | | }else if(reportType == 2){ |
| | | Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_EN); |
| | | Date endDate = DateUtils.addDays(startDate,6); |
| | | List<HistoryDaily> historyDailyByMacAndTimeSlot = historyDailyService.getHistoryDailyByMacAndTimeSlot(macs, startDate, endDate); |
| | | resultList = resultList(historyDailyByMacAndTimeSlot); |
| | | }else if(reportType == 3){ |
| | | Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_EN); |
| | | Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_EN); |
| | | QueryWrapper<HistoryMonthly> HistoryMonthlyWrapper = new QueryWrapper<>(); |
| | | HistoryMonthlyWrapper.in("mac",macs); |
| | | HistoryMonthlyWrapper.between("time",startDate,endDate); |
| | | List<HistoryMonthly> historyMonthlyList = historyMonthlyMapper.selectList(HistoryMonthlyWrapper); |
| | | List<HistoryDaily> historyDailies = new ArrayList<>(); |
| | | for(HistoryMonthly h : historyMonthlyList) { |
| | | HistoryDaily historyDaily = new HistoryDaily(); |
| | | historyDaily.setMac(h.getMac()); |
| | | historyDaily.setTime(h.getTime()); |
| | | historyDaily.setValue(h.getValue()); |
| | | historyDailies.add(historyDaily); |
| | | } |
| | | resultList = resultList(historyDailies); |
| | | } |
| | | return resultList; |
| | | } |
| | | |
| | | |
| | | private Map<String,Map<String,Object>> resultMap(List<HistoryDaily> list ,List<HistoryMonthly> historyMonthlyList){ |
| | | private List<MonitoringStationDTO> resultList(List<HistoryDaily> historyDailyByMacAndTimeSlot){ |
| | | List<MonitoringStationDTO> list = new ArrayList<>(); |
| | | if(CollectionUtils.isEmpty(historyDailyByMacAndTimeSlot)){ |
| | | return list; |
| | | } |
| | | Map<String,Map<String,ArrayList<Double>>> resultMap = new HashMap<>(); |
| | | int zz = 0; |
| | | for(HistoryDaily h : historyDailyByMacAndTimeSlot) { |
| | | JSONObject jsonObject = JSONObject.parseObject(h.getValue()); |
| | | Map<String, Object> map = jsonObject.getInnerMap(); |
| | | Map<String,ArrayList<Double>> maps = Objects.nonNull(resultMap.get(h.getMac()))?resultMap.get(h.getMac()):new HashMap<>(); |
| | | if(Objects.nonNull(map.get("a34004"))){ |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("PM2_5"))?maps.get("PM2_5"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a34004").toString())); |
| | | maps.put("PM2_5",numResult); |
| | | } |
| | | if(Objects.nonNull(map.get("a05024"))){ |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("O3"))?maps.get("O3"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a05024").toString())); |
| | | maps.put("O3",numResult); |
| | | } |
| | | if(Objects.nonNull(map.get("a34002"))){ |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("PM10"))?maps.get("PM10"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a34002").toString())); |
| | | maps.put("PM10",numResult); |
| | | } |
| | | if(Objects.nonNull(map.get("a21026"))){ |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("SO2"))?maps.get("SO2"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a21026").toString())); |
| | | maps.put("SO2",numResult); |
| | | } |
| | | if(Objects.nonNull(map.get("a21004"))){ |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("NO2"))?maps.get("NO2"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a21004").toString())); |
| | | maps.put("NO2",numResult); |
| | | } |
| | | if(Objects.nonNull(map.get("a21005"))){ |
| | | System.out.println(">>>"+map.toString()); |
| | | System.out.println(">>>"+map.get("a21005").toString()); |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("CO"))?maps.get("CO"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a21005").toString())); |
| | | maps.put("CO",numResult); |
| | | } |
| | | if(Objects.nonNull(map.get("a99054"))){ |
| | | ArrayList<Double> numResult = Objects.nonNull(maps.get("TVOC"))?maps.get("TVOC"):new ArrayList<>(); |
| | | numResult.add(Double.parseDouble(map.get("a99054").toString())); |
| | | maps.put("TVOC",numResult); |
| | | } |
| | | resultMap.put(h.getMac(),maps); |
| | | zz++; |
| | | } |
| | | for(Map.Entry entry : resultMap.entrySet()){ |
| | | String mapKey = (String) entry.getKey(); |
| | | Map<String,ArrayList<Double>> mapValue = (Map<String,ArrayList<Double>>)entry.getValue(); |
| | | Map<String, Object> data = new HashMap<>(); |
| | | if(mapValue.containsKey("PM2_5")){ |
| | | Double ListAvg = mapValue.get("PM2_5").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("PM2_5",rsAvg); |
| | | }else { |
| | | data.put("PM2_5",0); |
| | | } |
| | | if(mapValue.containsKey("PM10")){ |
| | | Double ListAvg = mapValue.get("PM10").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("PM10",rsAvg); |
| | | }else { |
| | | data.put("PM10",0); |
| | | } |
| | | if(mapValue.containsKey("SO2")){ |
| | | Double ListAvg = mapValue.get("SO2").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("SO2",rsAvg); |
| | | }else { |
| | | data.put("SO2",0); |
| | | } |
| | | if(mapValue.containsKey("NO2")){ |
| | | Double ListAvg = mapValue.get("NO2").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("NO2",rsAvg); |
| | | }else { |
| | | data.put("NO2",0); |
| | | } |
| | | if(mapValue.containsKey("CO")){ |
| | | Double ListAvg = percentile(mapValue.get("CO"),95d); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("CO",rsAvg); |
| | | }else { |
| | | data.put("CO",0); |
| | | } |
| | | if(mapValue.containsKey("O3")){ |
| | | Double ListAvg = percentile(mapValue.get("O3"),90d); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("O3",rsAvg); |
| | | }else { |
| | | data.put("O3",0); |
| | | } |
| | | if(mapValue.containsKey("TVOC")){ |
| | | Double ListAvg = mapValue.get("TVOC").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | data.put("TVOC",rsAvg); |
| | | }else { |
| | | data.put("TVOC",0); |
| | | } |
| | | Double resultNum = ComprehensiveIndexUtils.dailyData(data); |
| | | MonitoringStationDTO monitoringStationDTO = new MonitoringStationDTO(); |
| | | monitoringStationDTO.setPM25(BigDecimal.valueOf(Double.parseDouble(data.get("PM2_5").toString()))); |
| | | monitoringStationDTO.setO3(BigDecimal.valueOf(Double.parseDouble(data.get("O3").toString()))); |
| | | monitoringStationDTO.setTovc(BigDecimal.valueOf(Double.parseDouble(data.get("TVOC").toString()))); |
| | | monitoringStationDTO.setComposite(BigDecimal.valueOf(resultNum)); |
| | | monitoringStationDTO.setMac(mapKey); |
| | | list.add(monitoringStationDTO); |
| | | } |
| | | List<MonitoringStationDTO> compositeList = fun3(list,1); |
| | | List<MonitoringStationDTO> pM25List = fun3(list,2); |
| | | List<MonitoringStationDTO> o3List = fun3(list,3); |
| | | List<MonitoringStationDTO> tovcList = fun3(list,4); |
| | | List<MonitoringStationDTO> resultList = new ArrayList<>(); |
| | | LambdaQueryChainWrapper<Device> wrapper = deviceService.lambdaQuery(); |
| | | wrapper.eq(Device::getIsDelete,0); |
| | | Map<String,String> deviceMap = new HashMap<>(); |
| | | wrapper.list().forEach(it->deviceMap.put(it.getMac(),it.getName())); |
| | | int num = 1; |
| | | for (MonitoringStationDTO m :compositeList ){ |
| | | MonitoringStationDTO monit = new MonitoringStationDTO(); |
| | | String mac = m.getMac(); |
| | | monit.setMac(mac); |
| | | monit.setName(deviceMap.get(mac)); |
| | | monit.setComposite(m.getComposite()); |
| | | monit.setCompositeNum(m.getCompositeNum()); |
| | | List<String> listPM25 = pM25List.stream().map(MonitoringStationDTO::getMac).collect(Collectors.toList()); |
| | | List<String> listO3 = o3List.stream().map(MonitoringStationDTO::getMac).collect(Collectors.toList()); |
| | | List<String> listTovc = tovcList.stream().map(MonitoringStationDTO::getMac).collect(Collectors.toList()); |
| | | monit.setO3(o3List.get(listO3.indexOf(mac)).getO3()); |
| | | monit.setO3Num(o3List.get(listO3.indexOf(mac)).getO3Num()); |
| | | monit.setPM25(pM25List.get(listPM25.indexOf(mac)).getPM25()); |
| | | monit.setPM25Num(pM25List.get(listPM25.indexOf(mac)).getPM25Num()); |
| | | monit.setTovc(tovcList.get(listTovc.indexOf(mac)).getTovc()); |
| | | monit.setTOVCNum(tovcList.get(listTovc.indexOf(mac)).getTOVCNum()); |
| | | //num++; |
| | | resultList.add(monit); |
| | | } |
| | | return resultList; |
| | | } |
| | | |
| | | public List<MonitoringStationDTO> fun3(List<MonitoringStationDTO> monList,int type) { |
| | | List<MonitoringStationDTO> resultList = new ArrayList<>(); |
| | | List<MonitoringStationDTO> compositeList = new ArrayList<>(); |
| | | Map<BigDecimal,List<MonitoringStationDTO>> map1 = new HashMap<>(); |
| | | if(type == 1){ |
| | | compositeList = monList.stream().sorted(Comparator.comparing(MonitoringStationDTO::getComposite)).collect(Collectors.toList()); |
| | | map1 = compositeList.stream().collect(Collectors.groupingBy(MonitoringStationDTO::getComposite,LinkedHashMap::new,Collectors.toList())); |
| | | }else if(type == 2){ |
| | | compositeList = monList.stream().sorted(Comparator.comparing(MonitoringStationDTO::getPM25)).collect(Collectors.toList()); |
| | | map1 = compositeList.stream().collect(Collectors.groupingBy(MonitoringStationDTO::getPM25,LinkedHashMap::new,Collectors.toList())); |
| | | }else if(type == 3){ |
| | | compositeList = monList.stream().sorted(Comparator.comparing(MonitoringStationDTO::getO3)).collect(Collectors.toList()); |
| | | map1 = compositeList.stream().collect(Collectors.groupingBy(MonitoringStationDTO::getO3,LinkedHashMap::new,Collectors.toList())); |
| | | }else if(type == 4){ |
| | | compositeList = monList.stream().sorted(Comparator.comparing(MonitoringStationDTO::getTovc)).collect(Collectors.toList()); |
| | | map1 = compositeList.stream().collect(Collectors.groupingBy(MonitoringStationDTO::getTovc,LinkedHashMap::new,Collectors.toList())); |
| | | } |
| | | int index = 1; |
| | | for (Map.Entry entry : map1.entrySet()) { |
| | | List<MonitoringStationDTO> mapValue = (List<MonitoringStationDTO>)entry.getValue(); |
| | | for(MonitoringStationDTO m : mapValue){ |
| | | MonitoringStationDTO stationDTO = new MonitoringStationDTO(); |
| | | stationDTO.setMac(m.getMac()); |
| | | if(type == 1){ |
| | | stationDTO.setComposite(m.getComposite()); |
| | | stationDTO.setCompositeNum(index); |
| | | }else if(type == 2){ |
| | | stationDTO.setPM25(m.getPM25()); |
| | | stationDTO.setPM25Num(index); |
| | | }else if(type == 3){ |
| | | stationDTO.setO3(m.getO3()); |
| | | stationDTO.setO3Num(index); |
| | | }else if(type == 4){ |
| | | stationDTO.setTovc(m.getTovc()); |
| | | stationDTO.setTOVCNum(index); |
| | | } |
| | | resultList.add(stationDTO); |
| | | } |
| | | index = index +mapValue.size(); |
| | | } |
| | | return resultList; |
| | | } |
| | | |
| | | private Map<String,Map<String,Object>> resultMap(List<HistoryDaily> list , List<HistoryMonthly> historyMonthlyList){ |
| | | Map<String,Map<String,Object>> map = new HashMap<>(); |
| | | for(HistoryDaily h : list){ |
| | | String dateStr = DateUtils.dateToDateString( h.getTime(), "yyyy-MM-dd")+"_"+h.getMac(); |
| | |
| | | return map; |
| | | } |
| | | private Double percentile(List<Double> date,double num){ |
| | | if(CollectionUtils.isNotEmpty(date)&&date.size() == 1){ |
| | | return date.get(0); |
| | | } |
| | | Collections.sort(date); |
| | | double position = (num / 100) * (date.size() - 1); |
| | | int index = (int) position; |
| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.moral.api.utils.AqiUtils; |
| | | import com.moral.util.DateUtils; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | @Override |
| | | public List<SysTest> listAll(String startTime,String endTime, String mac) { |
| | | QueryWrapper<SysTest> queryWrapper = new QueryWrapper<>(); |
| | | // queryWrapper.between(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime),"time",startTime,endTime); |
| | | queryWrapper.eq(!StringUtils.isEmpty(startTime),"time", DateUtils.convertDate(startTime)); |
| | | if(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime)){ |
| | | queryWrapper.between(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime),"time",DateUtils.convertDate(startTime),DateUtils.convertDate(endTime)); |
| | | }else if(!StringUtils.isEmpty(startTime)){ |
| | | queryWrapper.eq(!StringUtils.isEmpty(startTime),"time", DateUtils.convertDate(startTime)); |
| | | } |
| | | queryWrapper.eq(!StringUtils.isEmpty(mac),"mac",mac); |
| | | queryWrapper.orderByAsc("time","mac"); |
| | | List<SysTest> listAll = this.baseMapper.selectList(queryWrapper); |
| | |
| | | } |
| | | return listAll; |
| | | } |
| | | |
| | | @Override |
| | | public List<SysTest> listAllAvg(String startTime, String endTime, String mac) { |
| | | Date time = DateUtils.convertDate(startTime); |
| | | QueryWrapper<SysTest> queryWrapper = new QueryWrapper<>(); |
| | | if(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime)){ |
| | | queryWrapper.between(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime),"time",DateUtils.convertDate(startTime),DateUtils.convertDate(endTime)); |
| | | }else if(!StringUtils.isEmpty(startTime)){ |
| | | queryWrapper.eq(!StringUtils.isEmpty(startTime),"time", DateUtils.convertDate(startTime)); |
| | | } |
| | | queryWrapper.eq(!StringUtils.isEmpty(mac),"mac",mac); |
| | | queryWrapper.orderByAsc("time","mac"); |
| | | List<SysTest> listAll = this.baseMapper.selectList(queryWrapper); |
| | | return resultList(listAll,time); |
| | | } |
| | | |
| | | private List<SysTest> resultList(List<SysTest> listAll,Date time){ |
| | | List<SysTest> list = new ArrayList<>(); |
| | | if(CollectionUtils.isEmpty(listAll)) { |
| | | return list; |
| | | } |
| | | String mon = DateUtils.dateToDateString(time,DateUtils.yyyy_MM_EN); |
| | | List<String> nameList = new ArrayList<>(); |
| | | Map<String, ArrayList<Double>> map = new HashMap<>(); |
| | | for(SysTest s : listAll) { |
| | | if(nameList.size()<4 && !nameList.contains(s.getName())){ |
| | | nameList.add(s.getName()); |
| | | SysTest sysTest = new SysTest(); |
| | | sysTest.setName(s.getName()); |
| | | sysTest.setMon(mon); |
| | | list.add(sysTest); |
| | | } |
| | | String pm10 = s.getName()+"_pm10"; |
| | | ArrayList<Double> pm10D = Objects.nonNull(map.get(pm10))?map.get(pm10):new ArrayList<>(); |
| | | pm10D.add(Double.parseDouble(s.getPm10())); |
| | | map.put(pm10,pm10D); |
| | | |
| | | String pm25 = s.getName()+"_pm25"; |
| | | ArrayList<Double> pm25D = Objects.nonNull(map.get(pm25))?map.get(pm25):new ArrayList<>(); |
| | | pm25D.add(Double.parseDouble(s.getPm25())); |
| | | map.put(pm25,pm25D); |
| | | |
| | | String o2 = s.getName()+"_o2"; |
| | | ArrayList<Double> o2D = Objects.nonNull(map.get(o2))?map.get(o2):new ArrayList<>(); |
| | | o2D.add(Double.parseDouble(s.getSo2())); |
| | | map.put(o2,o2D); |
| | | |
| | | String no = s.getName()+"_no"; |
| | | ArrayList<Double> noD = Objects.nonNull(map.get(no))?map.get(no):new ArrayList<>(); |
| | | noD.add(Double.parseDouble(s.getNo2())); |
| | | map.put(no,noD); |
| | | |
| | | String co = s.getName()+"_co"; |
| | | ArrayList<Double> coD = Objects.nonNull(map.get(co))?map.get(co):new ArrayList<>(); |
| | | coD.add(Double.parseDouble(s.getCo())); |
| | | map.put(co,coD); |
| | | |
| | | String o3 = s.getName()+"_o3"; |
| | | ArrayList<Double> o3D = Objects.nonNull(map.get(o3))?map.get(o3):new ArrayList<>(); |
| | | o3D.add(Double.parseDouble(s.getO3())); |
| | | map.put(o3,o3D); |
| | | |
| | | String tv = s.getName()+"_tv"; |
| | | ArrayList<Double> tvD = Objects.nonNull(map.get(tv))?map.get(tv):new ArrayList<>(); |
| | | tvD.add(Double.parseDouble(s.getVoc())); |
| | | map.put(tv,tvD); |
| | | } |
| | | for(SysTest s : list){ |
| | | String name = s.getName(); |
| | | if(map.containsKey(name+"_pm10")){ |
| | | Double ListAvg = map.get(name+"_pm10").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | s.setPm10(String.valueOf(rsAvg)); |
| | | } |
| | | if(map.containsKey(name+"_pm25")){ |
| | | Double ListAvg = map.get(name+"_pm25").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | s.setPm25(String.valueOf(rsAvg)); |
| | | } |
| | | if(map.containsKey(name+"_o2")){ |
| | | Double ListAvg = map.get(name+"_o2").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | s.setSo2(String.valueOf(rsAvg)); |
| | | } |
| | | if(map.containsKey(name+"_no")){ |
| | | Double ListAvg = map.get(name+"_no").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | s.setNo2(String.valueOf(rsAvg)); |
| | | } |
| | | if(map.containsKey(name+"_tv")){ |
| | | Double ListAvg = map.get(name+"_tv").stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | s.setVoc(String.valueOf(rsAvg)); |
| | | } |
| | | if(map.containsKey(name+"_co")){ |
| | | double rsAvg = percentile(map.get(name+"_co"),95d); |
| | | s.setCo(String.valueOf(rsAvg)); |
| | | } |
| | | |
| | | if(map.containsKey(name+"_o3")){ |
| | | double rsAvg = percentile(map.get(name+"_o3"),90d); |
| | | s.setO3(String.valueOf(rsAvg)); |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | private Double percentile(List<Double> date,double num){ |
| | | Collections.sort(date); |
| | | double position = (num / 100) * (date.size() - 1); |
| | | int index = (int) position; |
| | | // 获取小数部分的位置索引 |
| | | double fraction = position - index; |
| | | |
| | | // 获取百分位值 |
| | | double percentileValue = date.get(index) + fraction * (date.get(index + 1) - date.get(index)); |
| | | return new BigDecimal(percentileValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | } |
| | | } |
| | |
| | | /* |
| | | package com.moral.api.websocket; |
| | | |
| | | import com.moral.api.entity.Device; |
| | |
| | | import java.util.Map; |
| | | import java.util.concurrent.CopyOnWriteArraySet; |
| | | |
| | | */ |
| | | /** |
| | | * @ClassName SingleDeviceServer |
| | | * @Description TODO |
| | | * @Author 陈凯裕 |
| | | * @Date 2021/6/15 13:56 |
| | | * @Version TODO |
| | | **/ |
| | | **//* |
| | | |
| | | @ServerEndpoint("/singleDevice/{mac}") |
| | | @Component |
| | | @Data |
| | |
| | | } |
| | | |
| | | } |
| | | */ |
| | |
| | | server: |
| | | port: 8081 |
| | | tomcat: |
| | | uri-encoding: UTF-8 |
| | | #最小线程数 |
| | | min-spare-threads: 500 |
| | | #最大线程数 |
| | | max-threads: 2500 |
| | | #最大链接数 |
| | | max-connections: 6500 |
| | | #最大等待队列长度 |
| | | accept-count: 1000 |
| | | spring: |
| | | profiles: |
| | | active: dev |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.moral.api.mapper.CityConfigAqiMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.moral.api.entity.CityConfigAqi"> |
| | | <id column="id" property="id" /> |
| | | <result column="city_code" property="cityCode" /> |
| | | <result column="city_name" property="cityName" /> |
| | | <result column="city_id" property="cityId" /> |
| | | <result column="is_delete" property="isDelete" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
| | |
| | | where mac = #{mac} |
| | | and time =#{time} |
| | | </select> |
| | | |
| | | <insert id="insertHistoryHourly"> |
| | | INSERT INTO history_hourly_${timeUnits} |
| | | VALUES (#{mac}, #{time}, #{value}, #{version}) |
| | | </insert> |
| | | |
| | | |
| | | <insert id="updateHistoryHourly"> |
| | | UPDATE history_hourly_${timeUnits} SET `value` = #{value} |
| | | where mac = #{mac} and time = #{time} and version = #{version} |
| | | </insert> |
| | | </mapper> |
| | |
| | | } |
| | | } |
| | | |
| | | public static boolean isTimeBeforE(Date nows, Date date) { |
| | | long hous = nows.getTime() - date.getTime(); |
| | | if (hous >= 0) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | /** |
| | | * 将小时数换算成返回以毫秒为单位的时间 |
| | | * |
| | |
| | | return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN)); |
| | | } |
| | | |
| | | public static Date getLastDayOfCurrMonth(Date time) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(time); |
| | | cal.add(Calendar.MONTH, 1); |
| | | cal.set(Calendar.DAY_OF_MONTH, 0); |
| | | return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN)); |
| | | } |
| | | |
| | | /** |
| | | * 根据日期追加的天数,得到一个新日期 |
| | | * |
| | |
| | | <version>1.0-SNAPSHOT</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-lang3</artifactId> |
| | | <version>3.9</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.apache.httpcomponents</groupId> |
| | | <artifactId>httpclient</artifactId> |
| | | <version>4.5.13</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | |
| | | package com.moral.api.controller; |
| | | |
| | | import com.moral.api.service.HistoryAqiService; |
| | | import com.moral.api.service.HistoryDailyService; |
| | | import com.moral.api.service.HistoryFiveMinutelyService; |
| | | import com.moral.api.service.HistoryHourlyService; |
| | | import com.moral.api.service.*; |
| | | import com.moral.api.util.HttpUtils; |
| | | import com.moral.constant.ResultMessage; |
| | | import com.moral.util.DateUtils; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @ClassName UserController |
| | |
| | | private HistoryDailyService historyDailyService; |
| | | @Autowired |
| | | private HistoryFiveMinutelyService historyFiveMinutelyService; |
| | | |
| | | @Autowired |
| | | private CityWeatherService cityWeatherService; |
| | | @Autowired |
| | | private ForecastService forecastService; |
| | | |
| | | @Autowired |
| | | private HistoryAqiService historyAqiService; |
| | |
| | | return new ResultMessage(); |
| | | } |
| | | |
| | | @GetMapping("forecastO3") |
| | | @ApiOperation(value = "O3预测接口调试", notes = "O3") |
| | | public ResultMessage forecastO3() { |
| | | forecastService.forecastO3(); |
| | | return new ResultMessage(); |
| | | } |
| | | @GetMapping("insertCityWeather") |
| | | @ApiOperation(value = "获取天气小时数据", notes = "获取天气小时数据") |
| | | public ResultMessage insertCityWeather() { |
| | | cityWeatherService.insertCityWeather(); |
| | | return new ResultMessage(); |
| | | } |
| | | |
| | | |
| | | public static void main(String[] args) { |
| | | String s = "2023-9-01"; |
| | | Date d = DateUtils.getDate(s,"yyyy-MM-dd"); |
| | | System.out.println(DateUtils.dateToDateFullString(d)); |
| | | //System.out.println( DateUtils.dateToDateFullString(DateUtils.getDateOfDay(d, -1), "yyyy-MM-dd")); |
| | | String host = "https://pair.market.alicloudapi.com"; |
| | | String path = "/api/v1/pair/station_list"; |
| | | String method = "GET"; |
| | | String appcode = "31b6ea8f804a4472be3b633cfee44849"; |
| | | Map<String, String> headers = new HashMap<String, String>(); |
| | | //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 |
| | | headers.put("Authorization", "APPCODE " + appcode); |
| | | Map<String, String> querys = new HashMap<String, String>(); |
| | | querys.put("province", "辽宁省"); |
| | | |
| | | |
| | | |
| | | try { |
| | | /** |
| | | * 重要提示如下: |
| | | * HttpUtils请从 |
| | | * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java |
| | | * 下载 |
| | | * |
| | | * 相应的依赖请参照 |
| | | * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml |
| | | */ |
| | | HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys); |
| | | System.out.println(response.toString()); |
| | | //获取response的body |
| | | System.out.println(EntityUtils.toString(response.getEntity())); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.ObjectUtils; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.OptionalDouble; |
| | | import java.util.*; |
| | | import java.util.function.Supplier; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.DoubleStream; |
| | |
| | | Integer cityCode = Integer.parseInt(obj.toString()); |
| | | |
| | | //预测 |
| | | List<CityWeatherForecast> cityWeatherForecasts = cityForecast.get(cityCode); |
| | | List<CityWeatherForecast> cityWeatherForecasts = Objects.isNull(cityForecast.get(cityCode))?new ArrayList<>():cityForecast.get(cityCode); |
| | | |
| | | //获取城市历史气象数据 |
| | | List<CityWeather> cityWeathers = cityHistoryWeather.get(cityCode); |
| | |
| | | } |
| | | } |
| | | } |
| | | forecastMapper.insertForecast(forecastList); |
| | | if(forecastList.size()>0){ |
| | | forecastMapper.insertForecast(forecastList); |
| | | } |
| | | |
| | | } |
| | | |
| | | private Double calculateAvg(List<Map<String, Object>> list, String param) { |
New file |
| | |
| | | package com.moral.api.util; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.NameValuePair; |
| | | import org.apache.http.client.HttpClient; |
| | | import org.apache.http.client.entity.UrlEncodedFormEntity; |
| | | import org.apache.http.client.methods.HttpDelete; |
| | | import org.apache.http.client.methods.HttpGet; |
| | | import org.apache.http.client.methods.HttpPost; |
| | | import org.apache.http.client.methods.HttpPut; |
| | | import org.apache.http.conn.ClientConnectionManager; |
| | | import org.apache.http.conn.scheme.Scheme; |
| | | import org.apache.http.conn.scheme.SchemeRegistry; |
| | | import org.apache.http.conn.ssl.SSLSocketFactory; |
| | | import org.apache.http.entity.ByteArrayEntity; |
| | | import org.apache.http.entity.StringEntity; |
| | | import org.apache.http.impl.client.DefaultHttpClient; |
| | | import org.apache.http.message.BasicNameValuePair; |
| | | |
| | | import javax.net.ssl.SSLContext; |
| | | import javax.net.ssl.TrustManager; |
| | | import javax.net.ssl.X509TrustManager; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLEncoder; |
| | | import java.security.KeyManagementException; |
| | | import java.security.NoSuchAlgorithmException; |
| | | import java.security.cert.X509Certificate; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @ClassName HttpUtils |
| | | * @Description TODO |
| | | * @Author @lizijie |
| | | * @Date 2023-08-14 13:33 |
| | | * @Version 1.0 |
| | | */ |
| | | public class HttpUtils { |
| | | /** |
| | | * get |
| | | * |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doGet(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpGet request = new HttpGet(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | /** |
| | | * post form |
| | | * |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @param bodys |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doPost(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys, |
| | | Map<String, String> bodys) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpPost request = new HttpPost(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | if (bodys != null) { |
| | | List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); |
| | | |
| | | for (String key : bodys.keySet()) { |
| | | nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); |
| | | } |
| | | UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); |
| | | formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); |
| | | request.setEntity(formEntity); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | /** |
| | | * Post String |
| | | * |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @param body |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doPost(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys, |
| | | String body) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpPost request = new HttpPost(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | if (StringUtils.isNotBlank(body)) { |
| | | request.setEntity(new StringEntity(body, "utf-8")); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | /** |
| | | * Post stream |
| | | * |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @param body |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doPost(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys, |
| | | byte[] body) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpPost request = new HttpPost(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | if (body != null) { |
| | | request.setEntity(new ByteArrayEntity(body)); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | /** |
| | | * Put String |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @param body |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doPut(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys, |
| | | String body) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpPut request = new HttpPut(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | if (StringUtils.isNotBlank(body)) { |
| | | request.setEntity(new StringEntity(body, "utf-8")); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | /** |
| | | * Put stream |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @param body |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doPut(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys, |
| | | byte[] body) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpPut request = new HttpPut(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | if (body != null) { |
| | | request.setEntity(new ByteArrayEntity(body)); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | /** |
| | | * Delete |
| | | * |
| | | * @param host |
| | | * @param path |
| | | * @param method |
| | | * @param headers |
| | | * @param querys |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static HttpResponse doDelete(String host, String path, String method, |
| | | Map<String, String> headers, |
| | | Map<String, String> querys) |
| | | throws Exception { |
| | | HttpClient httpClient = wrapClient(host); |
| | | |
| | | HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); |
| | | for (Map.Entry<String, String> e : headers.entrySet()) { |
| | | request.addHeader(e.getKey(), e.getValue()); |
| | | } |
| | | |
| | | return httpClient.execute(request); |
| | | } |
| | | |
| | | private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException { |
| | | StringBuilder sbUrl = new StringBuilder(); |
| | | sbUrl.append(host); |
| | | if (!StringUtils.isBlank(path)) { |
| | | sbUrl.append(path); |
| | | } |
| | | if (null != querys) { |
| | | StringBuilder sbQuery = new StringBuilder(); |
| | | for (Map.Entry<String, String> query : querys.entrySet()) { |
| | | if (0 < sbQuery.length()) { |
| | | sbQuery.append("&"); |
| | | } |
| | | if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { |
| | | sbQuery.append(query.getValue()); |
| | | } |
| | | if (!StringUtils.isBlank(query.getKey())) { |
| | | sbQuery.append(query.getKey()); |
| | | if (!StringUtils.isBlank(query.getValue())) { |
| | | sbQuery.append("="); |
| | | sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); |
| | | } |
| | | } |
| | | } |
| | | if (0 < sbQuery.length()) { |
| | | sbUrl.append("?").append(sbQuery); |
| | | } |
| | | } |
| | | |
| | | return sbUrl.toString(); |
| | | } |
| | | |
| | | private static HttpClient wrapClient(String host) { |
| | | HttpClient httpClient = new DefaultHttpClient(); |
| | | if (host.startsWith("https://")) { |
| | | sslClient(httpClient); |
| | | } |
| | | |
| | | return httpClient; |
| | | } |
| | | |
| | | private static void sslClient(HttpClient httpClient) { |
| | | try { |
| | | SSLContext ctx = SSLContext.getInstance("TLS"); |
| | | X509TrustManager tm = new X509TrustManager() { |
| | | public X509Certificate[] getAcceptedIssuers() { |
| | | return null; |
| | | } |
| | | public void checkClientTrusted(X509Certificate[] xcs, String str) { |
| | | |
| | | } |
| | | public void checkServerTrusted(X509Certificate[] xcs, String str) { |
| | | |
| | | } |
| | | }; |
| | | ctx.init(null, new TrustManager[] { tm }, null); |
| | | SSLSocketFactory ssf = new SSLSocketFactory(ctx); |
| | | ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); |
| | | ClientConnectionManager ccm = httpClient.getConnectionManager(); |
| | | SchemeRegistry registry = ccm.getSchemeRegistry(); |
| | | registry.register(new Scheme("https", 443, ssf)); |
| | | } catch (KeyManagementException ex) { |
| | | throw new RuntimeException(ex); |
| | | } catch (NoSuchAlgorithmException ex) { |
| | | throw new RuntimeException(ex); |
| | | } |
| | | } |
| | | } |
| | |
| | | Object vocsValue = ObjectUtils.isEmpty(deviceData.get(Constants.SENSOR_CODE_VOCS)) ? 0F : deviceData.get(Constants.SENSOR_CODE_VOCS); |
| | | env.put("vocs", vocsValue); |
| | | } |
| | | if (formula.contains("cel")) { |
| | | if (formula.contains("ce1")) { |
| | | //env.put("cel", Float.parseFloat((String) measuredValue)); |
| | | env.put("ce1", new BigDecimal(String.valueOf(measuredValue)).floatValue()); |
| | | }else if(formula.contains("cel")){ |
| | | env.put("cel", new BigDecimal(String.valueOf(measuredValue)).floatValue()); |
| | | } |
| | | |
| | | //校准 |
| | | measuredValue = expression.execute(env); |
| | | //温度处理 |