From ee2d9a4049baa9ecc3f43d0576fd3745688171be Mon Sep 17 00:00:00 2001 From: cjl <276999030@qq.com> Date: Wed, 02 Aug 2023 13:40:15 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/cjl' into qa --- screen-api/src/main/resources/mapper/SysTestMapper.xml | 19 ++ screen-api/pom.xml | 6 screen-api/src/main/java/com/moral/api/service/SysTestService.java | 19 ++ screen-api/src/main/java/com/moral/api/mapper/SysTestMapper.java | 16 + screen-manage/src/main/resources/mapper/DeviceMapper.xml | 1 screen-manage/src/main/java/com/moral/api/entity/Device.java | 6 screen-api/src/main/java/com/moral/api/controller/SysTestController.java | 345 ++++++++++++++++++++++++++++++++++++++ screen-api/src/main/java/com/moral/api/entity/SysTest.java | 52 +++++ screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java | 50 +++++ screen-api/src/main/resources/application-qa.yml | 2 screen-api/src/main/resources/word/空气质量日报.docx | 0 11 files changed, 513 insertions(+), 3 deletions(-) diff --git a/screen-api/pom.xml b/screen-api/pom.xml index 1d30c2f..70f3c4b 100644 --- a/screen-api/pom.xml +++ b/screen-api/pom.xml @@ -47,7 +47,11 @@ <artifactId>fastjson</artifactId> <version>1.2.66</version> </dependency> - + <dependency> + <groupId>cn.afterturn</groupId> + <artifactId>easypoi-spring-boot-starter</artifactId> + <version>4.0.0</version> + </dependency> </dependencies> <build> diff --git a/screen-api/src/main/java/com/moral/api/controller/SysTestController.java b/screen-api/src/main/java/com/moral/api/controller/SysTestController.java new file mode 100644 index 0000000..36f131a --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/controller/SysTestController.java @@ -0,0 +1,345 @@ +package com.moral.api.controller; + +import cn.afterturn.easypoi.word.WordExportUtil; +import com.moral.api.entity.SysTest; +import com.moral.api.service.SysTestService; +import com.moral.util.DateUtils; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.springframework.beans.factory.annotation.Autowired; +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.lang.reflect.Field; +import java.net.URLEncoder; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @ClassName SysTestController + * @Description TODO + * @Author @lizijie + * @Date 2023-08-01 13:45 + * @Version 1.0 + */ +@Slf4j +@Api(tags = {"������������������������"}) +@RestController +@RequestMapping("/systest") +public class SysTestController { + @Autowired + private SysTestService sysTestService; + + + @GetMapping("resultWord") + public void adresultWordd(HttpServletResponse response,String time) { + List<SysTest> listAll = sysTestService.listAll(time,"2022-06-22",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"); + + + + } + + + public static void downloadWord(String fileName, Map<String, Object> params, HttpServletResponse response,String newFileName) { + String path = getPath(fileName);//��������� resources������ + try { + //������������������ + + 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(); + word.write(out); + out.flush(); + out.close(); + } catch (Exception e) { + log.error ("������������������������������������������", e); + } + } + + + public static String getPath(String filename) { + filename = "/word/" + filename; + return filename; + } + + + /** + ������������Map + */ + public static Map<String, Object> entityToMap(Object object) { + Map<String, Object> map = new HashMap<>(); + for (Field field : object.getClass().getDeclaredFields()) { + try { + boolean flag = field.isAccessible(); + field.setAccessible(true); + Object o = field.get(object); + map.put(field.getName(), o); + field.setAccessible(flag); + } catch (Exception e) { + e.printStackTrace(); + } + } + return map; + } + + private Map<String,Object> resultMap(List<SysTest> listAll){ + String first = "2020-06-22"; + String firstYear = "2020"; + + Map<String,Object> resultMap = new HashMap<>(); + Date endTime =listAll.get(0).getTime(); + String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyy_MM_dd_EN); + List<String> endTimeList= Arrays.asList(endTimeStr.split("-")); + if(Integer.parseInt(firstYear)<Integer.parseInt(endTimeList.get(0))){ + firstYear = endTimeList.get(0); + first = endTimeList.get(0)+"-01-01"; + } + String firstM = String.valueOf(Integer.parseInt(endTimeList.get(1))); + String firstD = String.valueOf(Integer.parseInt(endTimeList.get(2))); + Long day = DateUtils.getQuotByDays(first,endTimeStr)+1 ; + resultMap.put("���",firstYear); + resultMap.put("���",firstM); + resultMap.put("���",firstD); + resultMap.put("���",day.intValue()); + 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 = stringButterStr(listAll); + resultMap.put("������������",bodyName); + return resultMap; + } + + private String stringButterStr(List<SysTest> listAll){ + + // 0 ������1 ������ 2���������3��������� + int type = 0; + // TODO: 2023-08-01 ��������������������������������������������� + int aqiHigh = Integer.parseInt(listAll.get(0).getAqi()); + int aqiMiddle = Integer.parseInt(listAll.get(1).getAqi()); + int aqiLow = Integer.parseInt(listAll.get(2).getAqi()); + List<Integer> numList = Arrays.asList(aqiHigh,aqiMiddle,aqiLow); + StringBuffer stringBuffer = new StringBuffer(); + Set<Integer> stringSet = new HashSet<>(numList); + List<Integer> listTest = stringSet.stream().collect(Collectors.toList()); + Collections.sort(listTest); + int aqiHighResult = listTest.get(listTest.size()-1); + int aqiLowResult = listTest.get(0); + if(stringSet.size() == 1){ + type = 0; + stringBuffer.append("���������������������AQI���������������,������������������"); + return stringBuffer.toString(); + }else if(stringSet.size() == 3){ + type = 3; + }else { + int count = Collections.frequency(numList, listTest.get(0)); + if(count == 1){ + type = 2; + }else { + type = 1; + } + } + int sizeHighResult = 0; + int sizeLowResult = 0; + String highName = "���������"; + String lowName = "���������"; + //1 ������ 2������ + if(type == 1){ + SysTest ResultAqi = listAll.stream().min(Comparator.comparing(SysTest::getAqi)).get(); + if(ResultAqi.getName().contains("���������")){ + lowName = "���������"; + highName = "���������������������"; + }else if(ResultAqi.getName().contains("���������")){ + lowName = "���������"; + highName = "���������������������"; + } else if(ResultAqi.getName().contains("���������")){ + lowName = "���������"; + highName = "���������������������"; + } + + }else if(type == 2){ + SysTest ResultAqi = listAll.stream().max(Comparator.comparing(SysTest::getAqi)).get(); + if(ResultAqi.getName().contains("���������")){ + highName = "���������"; + lowName = "���������������������"; + }else if(ResultAqi.getName().contains("���������")){ + highName = "���������"; + lowName = "���������������������"; + } else if(ResultAqi.getName().contains("���������")){ + highName = "���������"; + lowName = "���������������������"; + } + }else if(type == 3){ + if(aqiHigh == aqiHighResult){ + sizeHighResult = 0; + } + if(aqiMiddle == aqiHighResult){ + sizeHighResult = 1; + } + if(aqiLow == aqiHighResult){ + sizeHighResult = 2; + } + if(aqiHigh == aqiLowResult){ + sizeLowResult = 0; + } + if(aqiMiddle == aqiLowResult){ + sizeLowResult = 1; + } + if(aqiLow == aqiLowResult){ + sizeLowResult = 2; + } + SysTest HighResult = listAll.get(sizeHighResult); + SysTest LowResult = listAll.get(sizeLowResult); + + if(HighResult.getName().contains("���������")){ + highName = "���������"; + }else if(HighResult.getName().contains("���������")){ + highName = "���������"; + } + if(LowResult.getName().contains("���������")){ + lowName = "���������"; + }else if(LowResult.getName().contains("���������")){ + lowName = "���������"; + } + } + 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()); + stringBuffer.append(highName+"���������������������AQI������������"+lowName+"���������������������AQI������������"); + 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; + double num3 = StringUtils.isNotEmpty(nums3)?Double.parseDouble(nums3):0; + Map<String,String> map = new HashMap<>(); + if(num1 ==num2 && num2 ==num3){ + return map; + } + name1 = name1.substring(3,name1.length()); + name2 = name2.substring(3,name2.length()); + name3 = name3.substring(3,name3.length()); + if(num1 ==num2 && num2 < num3){ + map.put("high",name3); + map.put("low",name1+"���"+name2); + return map; + }else if(num1 ==num2 && num2 > num3){ + map.put("low",name3); + map.put("high",name1+"���"+name2); + return map; + } + if(num1 == num3 && num2 < num3){ + map.put("low",name2); + map.put("high",name1+"���"+name3); + return map; + }else if(num1 == num3 && num2 > num3){ + map.put("high",name2); + map.put("low",name1+"���"+name3); + return map; + } + if(num2 == num3 && num1 < num2){ + map.put("low",name1); + map.put("high",name2+"���"+name3); + return map; + }else if(num2 == num3 && num1 > num2){ + map.put("high",name1); + map.put("low",name2+"���"+name3); + return map; + } + List<Double> numList = Arrays.asList(num1,num2,num3); + int high = numList.indexOf(Collections.max(numList)); + int low = numList.indexOf(Collections.min(numList)); + if(high == 0){ + map.put("high",name1); + }else if(high == 1){ + map.put("high",name2); + }else if(high == 2){ + map.put("high",name3); + } + if(low == 0){ + map.put("low",name1); + }else if(low == 1){ + map.put("low",name2); + }else if(low == 2){ + map.put("low",name3); + } + return map; + + } + + + + +} diff --git a/screen-api/src/main/java/com/moral/api/entity/SysTest.java b/screen-api/src/main/java/com/moral/api/entity/SysTest.java new file mode 100644 index 0000000..b8b4590 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/entity/SysTest.java @@ -0,0 +1,52 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author moral + * @since 2023-08-01 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class SysTest extends Model<SysTest> { + + private static final long serialVersionUID = 1L; + + private String mac; + + private Date time; + + private String pm25; + + private String pm10; + + private String so2; + + private String no2; + + private String co; + + private String o3; + + private String voc; + + private String name; + + @TableField(exist = false) + private String aqi; + + @TableField(exist = false) + private String su; + +} diff --git a/screen-api/src/main/java/com/moral/api/mapper/SysTestMapper.java b/screen-api/src/main/java/com/moral/api/mapper/SysTestMapper.java new file mode 100644 index 0000000..da12a2c --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/mapper/SysTestMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.SysTest; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper ������ + * </p> + * + * @author moral + * @since 2023-08-01 + */ +public interface SysTestMapper extends BaseMapper<SysTest> { + +} diff --git a/screen-api/src/main/java/com/moral/api/service/SysTestService.java b/screen-api/src/main/java/com/moral/api/service/SysTestService.java new file mode 100644 index 0000000..c6ea4db --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/SysTestService.java @@ -0,0 +1,19 @@ +package com.moral.api.service; + +import com.moral.api.entity.SysTest; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2023-08-01 + */ +public interface SysTestService extends IService<SysTest> { + + List<SysTest> listAll(String startTime,String endTime ,String mac); +} diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java new file mode 100644 index 0000000..31e1e8c --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java @@ -0,0 +1,50 @@ +package com.moral.api.service.impl; + +import com.alibaba.excel.util.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.moral.api.entity.SysTest; +import com.moral.api.mapper.SysTestMapper; +import com.moral.api.service.SysTestService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.api.utils.AqiUtils; +import com.moral.util.DateUtils; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * <p> + * ��������������� + * </p> + * + * @author moral + * @since 2023-08-01 + */ +@Service +public class SysTestServiceImpl extends ServiceImpl<SysTestMapper, SysTest> implements SysTestService { + + @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)); + queryWrapper.eq(!StringUtils.isEmpty(mac),"mac",mac); + queryWrapper.orderByAsc("time","mac"); + List<SysTest> listAll = this.baseMapper.selectList(queryWrapper); + for(SysTest s : listAll){ + Map<String,Object> map = new HashMap<>(); + map.put("PM2_5",s.getPm25()); + map.put("PM10",s.getPm10()); + map.put("CO",s.getCo()); + map.put("SO2",s.getSo2()); + map.put("NO2",s.getNo2()); + map.put("O3",s.getO3()); + Map<String,Object> getAqi = AqiUtils.getAqi(map); + s.setSu(getAqi.get("SU").toString()); + s.setAqi(getAqi.get("AQI").toString()); + } + return listAll; + } +} diff --git a/screen-api/src/main/resources/application-qa.yml b/screen-api/src/main/resources/application-qa.yml index 257eae4..ab0f0ae 100644 --- a/screen-api/src/main/resources/application-qa.yml +++ b/screen-api/src/main/resources/application-qa.yml @@ -18,6 +18,8 @@ include: bulletin, specialCity, announcement application: name: screen-api + main: + allow-bean-definition-overriding: true redis: host: r-bp1hez4g7rkqjswpaypd1.redis.rds.aliyuncs.com port: 6379 diff --git a/screen-api/src/main/resources/mapper/SysTestMapper.xml b/screen-api/src/main/resources/mapper/SysTestMapper.xml new file mode 100644 index 0000000..8cc7059 --- /dev/null +++ b/screen-api/src/main/resources/mapper/SysTestMapper.xml @@ -0,0 +1,19 @@ +<?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.SysTestMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.SysTest"> + <result column="mac" property="mac" /> + <result column="time" property="time" /> + <result column="pm25" property="pm25" /> + <result column="pm10" property="pm10" /> + <result column="so2" property="so2" /> + <result column="no2" property="no2" /> + <result column="co" property="co" /> + <result column="o3" property="o3" /> + <result column="voc" property="voc" /> + <result column="name" property="name" /> + </resultMap> + +</mapper> \ No newline at end of file diff --git "a/screen-api/src/main/resources/word/\347\251\272\346\260\224\350\264\250\351\207\217\346\227\245\346\212\245.docx" "b/screen-api/src/main/resources/word/\347\251\272\346\260\224\350\264\250\351\207\217\346\227\245\346\212\245.docx" new file mode 100644 index 0000000..a433e30 --- /dev/null +++ "b/screen-api/src/main/resources/word/\347\251\272\346\260\224\350\264\250\351\207\217\346\227\245\346\212\245.docx" Binary files differ diff --git a/screen-manage/src/main/java/com/moral/api/entity/Device.java b/screen-manage/src/main/java/com/moral/api/entity/Device.java index ccf7d28..0fb249f 100644 --- a/screen-manage/src/main/java/com/moral/api/entity/Device.java +++ b/screen-manage/src/main/java/com/moral/api/entity/Device.java @@ -145,6 +145,8 @@ * */ @TableField(exist = false) private Version version; - - + /* + *������ + * */ + private Integer devNum; } diff --git a/screen-manage/src/main/resources/mapper/DeviceMapper.xml b/screen-manage/src/main/resources/mapper/DeviceMapper.xml index 28466d5..f394f1e 100644 --- a/screen-manage/src/main/resources/mapper/DeviceMapper.xml +++ b/screen-manage/src/main/resources/mapper/DeviceMapper.xml @@ -26,6 +26,7 @@ <result column="is_delete" property="isDelete"/> <result column="extend" property="extend"/> <result column="town_code" property="townCode"/> + <result column="dev_num" property="devNum"/> </resultMap> <resultMap id="resultMap" type="com.moral.api.pojo.vo.device.DeviceVO" extends="BaseResultMap"> -- Gitblit v1.8.0