| New file | 
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|