cjl
2024-03-28 c5b1a331a238ef37818d8bcebca1226b9fe1a559
fix:盐城报告查询
21 files added
5 files modified
2388 ■■■■■ changed files
screen-api/pom.xml 30 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/YcReptilesController.java 714 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/YcGenerateReport.java 56 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/FileTableMapper.java 5 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/YcGenerateReportMapper.java 54 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/enums/FileTableEnum.java 5 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportExt.java 21 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportListExt.java 22 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportPageExt.java 98 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportAddCond.java 73 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportListCond.java 28 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportPageCond.java 34 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUpdateCond.java 73 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUploadCond.java 35 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/yc/AqiResultVo.java 80 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/yc/SixConcentrationsVo.java 88 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportListVo.java 80 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportPageVo.java 79 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportVo.java 75 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/ReptileResultService.java 16 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/YcGenerateReportService.java 67 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/ReptileResultServiceImpl.java 487 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/YcGenerateReportServiceImpl.java 79 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/FileTableMapper.xml 5 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/YcGenerateReportMapper.xml 77 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/DateUtils.java 7 ●●●●● patch | view | raw | blame | history
screen-api/pom.xml
@@ -135,6 +135,36 @@
            <artifactId>hutool-all</artifactId>
            <version>5.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.1</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.0</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>4.2.1</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.openpnp</groupId>
            <artifactId>opencv</artifactId>
            <version>3.2.0-1</version>
        </dependency>
    </dependencies>
    <build>
screen-api/src/main/java/com/moral/api/controller/YcReptilesController.java
New file
@@ -0,0 +1,714 @@
package com.moral.api.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moral.api.config.Interceptor.UserHelper;
import com.moral.api.entity.FileTable;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.exception.BusinessException;
import com.moral.api.pojo.enums.FileTableEnum;
import com.moral.api.pojo.enums.FileType;
import com.moral.api.pojo.ext.allocation.AllocationPageExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportPageExt;
import com.moral.api.pojo.query.allocation.AllocationPageCond;
import com.moral.api.pojo.query.ycgeneratereport.YcGenerateReportPageCond;
import com.moral.api.pojo.query.ycgeneratereport.YcGenerateReportUploadCond;
import com.moral.api.pojo.vo.allocation.AllocationPageVo;
import com.moral.api.pojo.vo.user.QxUser;
import com.moral.api.pojo.vo.yc.AqiResultVo;
import com.moral.api.pojo.vo.yc.SixConcentrationsVo;
import com.moral.api.pojo.vo.ycgeneratereport.YcGenerateReportPageVo;
import com.moral.api.service.FileTableService;
import com.moral.api.service.ReptileResultService;
import com.moral.api.service.YcGenerateReportService;
import com.moral.api.service.impl.ReptileResultServiceImpl;
import com.moral.constant.PageResult;
import com.moral.constant.ResultMessage;
import com.moral.util.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Year;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @ClassName TestController
 * @Description TODO
 * @Author @cjl
 * @Date 2024-03-04 9:58
 * @Version 1.0
 */
@Slf4j
@Api(tags = {"盐城接口数据"})
@RestController
@RequestMapping("/cityReptiles")
public class YcReptilesController {
    @Autowired
    private ReptileResultService resultService;
    @Autowired
    private YcGenerateReportService ycGenerateReportService;
    @Autowired
    private FileTableService fileTableService;
    @Value("${file.path}")
    private String basePath;
    @GetMapping("/report")
    @ApiOperation("生成报告")
    public ResultMessage report(@RequestParam @ApiParam(value = "字典",name = "code") String code,
                                @RequestParam(required = false) @ApiParam(value = "时间",name = "time") String time){
        String filePath = getFilePath(FileTableEnum.YC_GENERATEEXCEL.value.toString());
        String targetFolder = basePath.replaceAll(com.moral.api.utils.StringUtils.BACKSLASH.concat(com.moral.api.utils.StringUtils.BACKSLASH), com.moral.api.utils.StringUtils.SLASH).concat(com.moral.api.utils.StringUtils.SLASH).concat(filePath);
        generateReport(time,code,targetFolder,filePath);
        return ResultMessage.ok();
    }
    @PostMapping("/page")
    @ApiOperation("分页")
    public ResultMessage<PageResult<YcGenerateReportPageVo>> page(@Valid @RequestBody YcGenerateReportPageCond ycGenerateReportPageCond) {
        Page<YcGenerateReportPageExt> page = ycGenerateReportService.extPage(ycGenerateReportPageCond);
        PageResult<YcGenerateReportPageVo> result = new PageResult<>(page);
        result.setList(YcGenerateReportPageVo.convert(page.getRecords()));
        return ResultMessage.ok(result);
    }
    @PostMapping("/fileUpload")
    @ApiOperation("重新上传")
    public ResultMessage fileUpload(@Valid @RequestBody YcGenerateReportUploadCond uploadCond) {
        ycGenerateReportService.fileUpload(uploadCond);
        return ResultMessage.ok();
    }
    public void generateReport(String time,String code,String filePath,String path) {
        YcReptilesController testController = new YcReptilesController();
        String yc = "大丰区,阜宁县,盐都区,响水县,建湖县,东台市,亭湖区,射阳县,盐城市区,滨海县,盐南高新区,开发区";
        String gk = "大丰高级中学,开发区管委会,宝龙广场,盐城电厂,市监测站,月亮广场";
        String url = "http://116.147.41.178:8081/DataReport/AQIReport";
        String cookie = null;
        if(StringUtils.isEmpty(code)){
            cookie = "ASP.NET_SessionId=xo1nn2mvzmhaeb2csok130fd;CurrentAMenuID=2fa3c748-bf4e-4453-9544-e5fd860d74bf;";
        }else {
            cookie = code+"CurrentAMenuID=2fa3c748-bf4e-4453-9544-e5fd860d74bf;";
        }
        Date resultDate = null;
        if(StringUtils.isEmpty(time)){
            resultDate= new Date();
        }else {
            resultDate = DateUtils.convertDate(time);
        }
        ReptileResultService resultService = new ReptileResultServiceImpl();
        Date endDate = DateUtils.addDays(resultDate,-1);
        String endDateTime = DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_dd_EN);
        //Map<String,Object> map0 = resultService.getYcDaily(url,cookie,DateUtils.dateToDateString(DateUtils.getFirstDayOfLastYear(endDate),DateUtils.yyyy_MM_dd_EN),2);
        Map<String,Object> map = resultService.getYcDaily(url,cookie,endDateTime,2);
        Map<String,Object> map0 = resultService.getYcDaily(url,cookie,DateUtils.dateToDateString(DateUtils.getFirstDayOfLastYear(endDate),DateUtils.yyyy_MM_dd_EN),2);
        Date dateTime = DateUtils.getFirstDayOfMonth(resultDate);
        String sTime = DateUtils.dateToDateString(dateTime);
        String eTime = endDateTime+" 00:00:00";
        String url1 = "http://116.147.41.178:8081/AQA/YearCustom/Year_Custom1?sTime="+sTime+"&eTime="+eTime+"&type=1&viewtype=1&isDustDay=true&DecimalPlaces=1";
        Map<String,Object> map1 = resultService.getYcDaily(url1,cookie,null,3);
        String url2 = "http://116.147.41.178:8081/AQI/Statistics/YouLiangRateDataNewNewNew?sTime="+sTime+"&eTime="+eTime+"&DecimalPlaces=1&isDustDay=false&selec=0&selet=0&isDustDayXianShi=false";
        Map<String,Object> map3 = resultService.getYcDaily(url2,cookie,null,1);
        sTime = DateUtils.dateToDateString(DateUtils.getFirstDayOfLastYear(DateUtils.getFirstDayOfMonth(dateTime)));
        eTime = DateUtils.dateToDateString(DateUtils.getFirstDayOfLastYear(endDate));
        url1 = "http://116.147.41.178:8081/AQA/YearCustom/Year_Custom1?sTime="+sTime+"&eTime="+eTime+"&type=1&viewtype=1&isDustDay=true&DecimalPlaces=1";
        Map<String,Object> map2 = resultService.getYcDaily(url1,cookie,null,3);
        url2 = "http://116.147.41.178:8081/AQI/Statistics/YouLiangRateDataNewNewNew?sTime="+sTime+"&eTime="+eTime+"&DecimalPlaces=1&isDustDay=false&selec=0&selet=0&isDustDayXianShi=false";
        Map<String,Object> map4 = resultService.getYcDaily(url2,cookie,null,1);
        Date dateFirstTime = DateUtils.getFirstDayOfCurrYear();
        sTime = DateUtils.dateToDateString(dateFirstTime);
        eTime = endDateTime+" 00:00:00";
        url1 = "http://116.147.41.178:8081/AQA/YearCustom/Year_Custom1?sTime="+sTime+"&eTime="+eTime+"&type=1&viewtype=1&isDustDay=true&DecimalPlaces=1";
        Map<String,Object> map5 = resultService.getYcDaily(url1,cookie,null,3);
        url2 = "http://116.147.41.178:8081/AQI/Statistics/YouLiangRateDataNewNewNew?sTime="+sTime+"&eTime="+eTime+"&DecimalPlaces=1&isDustDay=false&selec=0&selet=0&isDustDayXianShi=false";
        Map<String,Object> map7 = resultService.getYcDaily(url2,cookie,null,1);
        // 污染天
        String url3 = "http://116.147.41.178:8081/AQI/Statistics/StandardRateData?&sTime="+sTime+"&eTime="+eTime;
        Map<String,Object> surplusMap = resultService.getYcDaily(url3,cookie,null,4);
        sTime = DateUtils.dateToDateString(DateUtils.getFirstDayOfLastYear(dateFirstTime));
        eTime = DateUtils.dateToDateString(DateUtils.getFirstDayOfLastYear(endDate));
        url1 = "http://116.147.41.178:8081/AQA/YearCustom/Year_Custom1?sTime="+sTime+"&eTime="+eTime+"&type=1&viewtype=1&isDustDay=true&DecimalPlaces=1";
        Map<String,Object> map6 = resultService.getYcDaily(url1,cookie,null,3);
        url2 = "http://116.147.41.178:8081/AQI/Statistics/YouLiangRateDataNewNewNew?sTime="+sTime+"&eTime="+eTime+"&DecimalPlaces=1&isDustDay=false&selec=0&selet=0&isDustDayXianShi=false";
        Map<String,Object> map8 = resultService.getYcDaily(url2,cookie,null,1);
        url3 = "http://116.147.41.178:8081/AQI/Statistics/StandardRateData?&sTime="+sTime+"&eTime="+eTime;
        Map<String,Object> surplusOldMap = resultService.getYcDaily(url3,cookie,null,4);
        //String templateFile = "E:/java/模板-盐城县市区统计001.xlsx";
        // 结果文件,省去了根据模板文件生成的步骤
       // String resultFile = "E:/java/模板-盐城县市区统计1.xlsx";
        String templateFile = basePath+"/模板-盐城县市区统计001.xlsx";
        String resultFileName = endDateTime+"盐城县市区统计.xlsx";;
        String resultFile =UUID.randomUUID().toString()+".xlsx";;
        storageFile(filePath.concat(resultFile));
        // 根据模板文件生成目标文件
        ExcelWriter excelWriter = EasyExcel
                .write(filePath.concat(resultFile))
                .withTemplate(templateFile)
                // 单独设置单元格格式
//                .registerWriteHandler(new CellStyleHandler())
                .build();
        WriteSheet writeSheet = EasyExcel.writerSheet("日").build();
        WriteSheet writeSheet1 = EasyExcel.writerSheet("月").build();
        WriteSheet writeSheet2 = EasyExcel.writerSheet("年").build();
        // 每次都会重新生成新的一行,而不是使用下面的空行
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build();
        // 第一种占位符替换
       /*  Map<String, Object> map = new HashMap<>();
        List<TestVo> list = new ArrayList<>();
       TestVo testVo = TestVo.builder().sj("Sj11").sl("2234").build();
        TestVo testVo1 = TestVo.builder().sj("Sj1").sl("2214").build();
        list.add(testVo);
        list.add(testVo1);*/
//        map.put("time", "111113");
//        map.put("time1", "2222224");
       // map.put("dd", list);
        List<AqiResultVo>  list = (List<AqiResultVo>) map.get("table");
        List<AqiResultVo>  listG = list.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<AqiResultVo>  listG1 = list.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        excelWriter.fill(map, writeSheet);
        excelWriter.fill(new FillWrapper("data",listG),fillConfig, writeSheet);
        map1.put("title1",map2.get("title"));
        excelWriter.fill(map1, writeSheet1);
        List<SixConcentrationsVo>  list1 = (List<SixConcentrationsVo>) map1.get("table");
        testController.listReplaceName(list1);
        List<SixConcentrationsVo>  list1G = list1.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list1G1 = list1.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list2 = (List<SixConcentrationsVo>) map2.get("table");
        testController.listReplaceName(list2);
        List<SixConcentrationsVo>  list2G = list2.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list2G1 = list2.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list3 = (List<SixConcentrationsVo>) map3.get("table");
        testController.listReplaceName(list3);
        List<SixConcentrationsVo>  list3G = list3.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list3G1 = list3.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list4 = (List<SixConcentrationsVo>) map4.get("table");
        testController.listReplaceName(list4);
        List<SixConcentrationsVo>  list4G = list4.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list4G1 = list4.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        excelWriter.fill(new FillWrapper("data1",list1G),fillConfig, writeSheet1);
        excelWriter.fill(new FillWrapper("data2",list2G),fillConfig, writeSheet1);
        excelWriter.fill(new FillWrapper("data3",list3G),fillConfig, writeSheet1);
        excelWriter.fill(new FillWrapper("data4",list4G),fillConfig, writeSheet1);
        map5.put("title3",map5.get("title"));
        map5.put("title4",map6.get("title"));
        excelWriter.fill(map5, writeSheet2);
        List<SixConcentrationsVo>  list5 = (List<SixConcentrationsVo>) map5.get("table");
        testController.listReplaceName(list5);
        List<SixConcentrationsVo>  list5G = list5.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list5G1 = list5.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list6 = (List<SixConcentrationsVo>) map6.get("table");
        testController.listReplaceName(list6);
        List<SixConcentrationsVo>  list6G = list6.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list6G1 = list6.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list7 = (List<SixConcentrationsVo>) map7.get("table");
        testController.listReplaceName(list7);
        List<SixConcentrationsVo>  list7G = list7.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list7G1 = list7.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list8 = (List<SixConcentrationsVo>) map8.get("table");
        testController.listReplaceName(list8);
        List<SixConcentrationsVo>  list8G = list8.stream().filter(it->yc.contains(it.getName())).collect(Collectors.toList());
        List<SixConcentrationsVo>  list8G1 = list8.stream().filter(it->!yc.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        excelWriter.fill(new FillWrapper("data5",list5G),fillConfig, writeSheet2);
        excelWriter.fill(new FillWrapper("data6",list6G),fillConfig, writeSheet2);
        excelWriter.fill(new FillWrapper("data7",list7G),fillConfig, writeSheet2);
        excelWriter.fill(new FillWrapper("data8",list8G),fillConfig, writeSheet2);
        //excelWriter.fill(map, writeSheet1);
        //excelWriter.fill(new FillWrapper("time2",list),fillConfig, writeSheet1);
        excelWriter.finish();
        //String templateFile1 = "E:/java/模板-日报模板计算00.xlsx";
        // 结果文件,省去了根据模板文件生成的步骤
        //String resultFile1 = "E:/java/模板-日报模板计算1.xlsx";
        String templateFile1 = basePath+"/模板-日报模板计算00.xlsx";
        String resultFileName1 = endDateTime+"日报统计.xlsx";
        String resultFile1 = UUID.randomUUID().toString()+".xlsx";;
        storageFile(filePath.concat(resultFile1));
        // 根据模板文件生成目标文件
        ExcelWriter excelWriter1 = EasyExcel
                .write(filePath.concat(resultFile1))
                .withTemplate(templateFile1)
                // 单独设置单元格格式
//                .registerWriteHandler(new CellStyleHandler())
                .build();
        WriteSheet writeSheet4 = EasyExcel.writerSheet("日排名").build();
        WriteSheet writeSheet5 = EasyExcel.writerSheet("月排名").build();
        WriteSheet writeSheet6 = EasyExcel.writerSheet("年排名").build();
        map.put("title1",map0.get("title"));
        excelWriter1.fill(map, writeSheet4);
        List<AqiResultVo>  list0 = (List<AqiResultVo>) map0.get("table");
        excelWriter1.fill(new FillWrapper("data",listG1),fillConfig, writeSheet4);
        excelWriter1.fill(new FillWrapper("data0",list0),fillConfig, writeSheet4);
        //map1.put("title1",map2.get("title"));
        excelWriter1.fill(map1, writeSheet5);
        excelWriter1.fill(new FillWrapper("data1",list1G1),fillConfig, writeSheet5);
        excelWriter1.fill(new FillWrapper("data2",list2G1),fillConfig, writeSheet5);
        excelWriter1.fill(new FillWrapper("data3",list3G1),fillConfig, writeSheet5);
        excelWriter1.fill(new FillWrapper("data4",list4G1),fillConfig, writeSheet5);
        excelWriter1.fill(map5, writeSheet6);
        excelWriter1.fill(new FillWrapper("data5",list5G1),fillConfig, writeSheet6);
        excelWriter1.fill(new FillWrapper("data6",list6G1),fillConfig, writeSheet6);
        excelWriter1.fill(new FillWrapper("data7",list7G1),fillConfig, writeSheet6);
        excelWriter1.fill(new FillWrapper("data8",list8G1),fillConfig, writeSheet6);
        excelWriter1.finish();
        log.info("开始生成简报");
        List<AqiResultVo> Yc = listG.stream().filter(it->it.getName().equals("盐城市区")).collect(Collectors.toList());
        // 月-优良
        SixConcentrationsVo ycMon = testController.sixResult(list1G,"盐城市区");
        SixConcentrationsVo ycMonOld = testController.sixResult(list2G,"盐城市区");
        SixConcentrationsVo ycYMon = testController.sixResult(list3G,"盐城市区");
        SixConcentrationsVo ycYMonOld = testController.sixResult(list4G,"盐城市区");
        // 年-优良
        SixConcentrationsVo ycYear = testController.sixResult(list5G,"盐城市区");
        SixConcentrationsVo ycYearOld = testController.sixResult(list6G,"盐城市区");
        SixConcentrationsVo ycYYear = testController.sixResult(list7G,"盐城市区");
        SixConcentrationsVo ycYYearOld = testController.sixResult(list8G,"盐城市区");
        // 超标天
        int surplusDay = (int) surplusMap.get("surplusDay");
        int surplusOldDay = (int) surplusOldMap.get("surplusDay");
        StringBuilder broadcast = new StringBuilder();
        String timeDay = map.get("title").toString().substring(3,map.get("title").toString().length());
        String timeMon = map1.get("title").toString().substring(3,map1.get("title").toString().length());
        String timeYear = map5.get("title").toString().substring(3,map5.get("title").toString().length());
        broadcast.append("各位领导、同事,").append(timeDay).append("空气质量分析简报,请查阅。").append("\n");
        broadcast.append("【盐城市空气质量情况】").append("\n");
        broadcast.append(timeDay+",盐城市环境空气质量为"+Yc.get(0).getCategory()+",其中PM2.5浓度为"+
                Yc.get(0).getGranule25()+"微克/立方米、O3浓度为"+Yc.get(0).getOO()+"微克/立方米、优良率为").
                append(Yc.get(0).getCategory().equals("良")||Yc.get(0).getCategory().equals("优")?"100%;":"0%;").append("\n");
        broadcast.append(timeMon+",盐城市PM2.5浓度均值为"+ycMon.getPM25()+"微克/立方米,同比"+testController.compareYear(ycMon.getPM25(),ycMonOld.getPM25(),2)+";O3浓度均值为");
        broadcast.append(ycMon.getOOAvg()+"微克/立方米,同比"+testController.compareYear(ycMon.getOOAvg(),ycMonOld.getOOAvg(),2)+"。优良率为"+ycYMon.getExcellentRateRatio()+"%,同比"+testController.compareYear(ycYMon.getExcellentRateRatio(),ycYMonOld.getExcellentRateRatio(),1)+"。").append("\n");
        broadcast.append("截至"+timeDay+",盐城市PM2.5浓度均值为"+ycYear.getPM25()+"微克/立方米,同比"+testController.compareYear(ycYear.getPM25(),ycYearOld.getPM25(),2)+"。O3浓度均值为");
        broadcast.append(ycYear.getOOAvg()+"微克/立方米,同比"+testController.compareYear(ycYear.getOOAvg(),ycYearOld.getOOAvg(),2)+"。优良率为"+ycYYear.getExcellentRateRatio()+"%,同比"+testController.compareYear(ycYYear.getExcellentRateRatio(),ycYYearOld.getExcellentRateRatio(),1)+"。").append("\n");
        broadcast.append("\n");
        broadcast.append("【盐城市空气质量达标情况分析】").append("\n");
        broadcast.append("截至"+timeDay+",盐城市 PM2.5累积均值为"+ycYear.getPM25()+"微克/立方米(去年同期"+ycYearOld.getPM25()+"微克/立方米),同比"+testController.compareYear(ycYear.getPM25(),ycYearOld.getPM25(),2)+",若要PM2.5年均浓度达到目标值27.0微克/立方米,剩余");
        broadcast.append(testController.annualTarget(ycYear.getPM25(),27.0,resultDate)+"优良天数比率为"+ycYYear.getExcellentRateRatio()+"(去年同期"+ycYYearOld.getExcellentRateRatio()+"),同比"+testController.compareYear(ycYYear.getExcellentRateRatio(),ycYYearOld.getExcellentRateRatio(),1)+";当前已超标"+surplusDay+"天,超标天数已超过同期污染天数"+(surplusDay-surplusOldDay)+"天。").append("\n");
        broadcast.append("\n");
        broadcast.append("【国控站点空气质量情况】").append("\n");
        broadcast.append("截至"+timeDay+",各国控站空气质量排名情况如下:").append("\n");;
        List<SixConcentrationsVo>  list5G2 = list5G1.stream().filter(it->gk.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list6G2 = list6G1.stream().filter(it->gk.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo> list5G3  = testController.resultList(list5G2,list6G2,2);
        broadcast.append("PM2.5排名情况:绝对值排名后三名分别为:"+testController.rankingList(list5G2,1)).append("改善排名后三名分别为:"+testController.rankingList(list5G3,2)).append("\n");
        broadcast.append("O3排名情况:绝对值排名后三名分别为:"+testController.rankingList(list5G2,3)).append("改善排名后三名分别为:"+testController.rankingList(list5G3,4)).append("\n");
        List<SixConcentrationsVo>  list7G2 = list7G1.stream().filter(it->gk.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list8G2 = list8G1.stream().filter(it->gk.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo> list7G3  = testController.resultList(list7G2,list8G2,1);
        broadcast.append("优良率排名情况:绝对值排名后三名分别为:"+testController.rankingList(list7G2,5)).append("改善排名后三名分别为:"+testController.rankingList(list7G3,6)).append("\n");;
        broadcast.append("\n");
        broadcast.append("【省控站点空气质量情况】").append("\n");
        broadcast.append("截至"+timeDay+",各省控站空气质量排名情况如下:").append("\n");;
        List<SixConcentrationsVo>  list5G4 = list5G1.stream().filter(it->!gk.contains(it.getName())&&!it.getName().equals("总计")&&!it.getName().equals("亭湖区政府(自建站)")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list6G4 = list6G1.stream().filter(it->!gk.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo> list5G5  = testController.resultList(list5G4,list6G4,2);
        broadcast.append("PM2.5排名情况:绝对值排名后三名分别为:"+testController.rankingList(list5G4,1)).append("改善排名后三名分别为:"+testController.rankingList(list5G5,2)).append("\n");
        broadcast.append("O3排名情况:绝对值排名后三名分别为:"+testController.rankingList(list5G4,3)).append("改善排名后三名分别为:"+testController.rankingList(list5G5,4)).append("\n");
        List<SixConcentrationsVo>  list7G4 = list7G1.stream().filter(it->!gk.contains(it.getName())&&!it.getName().equals("总计")&&!it.getName().equals("亭湖区政府(自建站)")).collect(Collectors.toList());
        List<SixConcentrationsVo>  list8G4= list8G1.stream().filter(it->!gk.contains(it.getName())&&!it.getName().equals("总计")).collect(Collectors.toList());
        List<SixConcentrationsVo> list7G5  = testController.resultList(list7G4,list8G4,1);
        broadcast.append("优良率排名情况:绝对值排名后三名分别为:"+testController.rankingList(list7G4,5)).append("改善排名后三名分别为:"+testController.rankingList(list7G5,6)).append("\n");
        broadcast.append("\n");
        broadcast.append("【11个县(市、区)空气质量情况】").append("\n");
        broadcast.append(timeMon+",各县(市、区)空气质量排名情况如下:").append("\n");
        List<SixConcentrationsVo> list1G0 = list1G.stream().filter(it->!it.getName().equals("盐城市区")).collect(Collectors.toList());
        List<SixConcentrationsVo> list1G3  = testController.resultList(list1G0,list2G,2);
        broadcast.append("PM2.5排名情况:绝对值排名后三名分别为:"+testController.rankingList(list1G0,1)).append("改善排名后三名分别为:"+testController.rankingList(list1G3,2)).append("\n");
        broadcast.append("O3排名情况:绝对值排名后三名分别为:"+testController.rankingList(list1G0,3)).append("改善排名后三名分别为:"+testController.rankingList(list1G3,4)).append("\n");
        List<SixConcentrationsVo> list3G0 = list3G.stream().filter(it->!it.getName().equals("盐城市区")).collect(Collectors.toList());
        List<SixConcentrationsVo> list3G3  = testController.resultList(list3G0,list4G,1);
        broadcast.append("优良率排名情况:绝对值排名后三名分别为:"+testController.rankingList(list3G0,5)).append("改善排名后三名分别为:"+testController.rankingList(list3G3,6)).append("\n");
        broadcast.append("截至"+timeDay+",各县(市、区)空气质量排名情况如下:").append("\n");
        List<SixConcentrationsVo> list5G00 = list5G.stream().filter(it->!it.getName().equals("盐城市区")).collect(Collectors.toList());
        List<SixConcentrationsVo> list5G0  = testController.resultList(list5G00,list6G,2);
        broadcast.append("PM2.5排名情况:绝对值排名后三名分别为:"+testController.rankingList(list5G00,1)).append("改善排名后三名分别为:"+testController.rankingList(list5G0,2)).append("\n");
        broadcast.append("O3排名情况:绝对值排名后三名分别为:"+testController.rankingList(list5G00,3)).append("改善排名后三名分别为:"+testController.rankingList(list5G0,4)).append("\n");
        List<SixConcentrationsVo> list7G00 = list7G.stream().filter(it->!it.getName().equals("盐城市区")).collect(Collectors.toList());
        List<SixConcentrationsVo> list7G0  = testController.resultList(list7G00,list8G,1);
        broadcast.append("优良率排名情况:绝对值排名后三名分别为:"+testController.rankingList(list7G00,5)).append("改善排名后三名分别为:"+testController.rankingList(list7G0,6)).append("\n");
        broadcast.append("\n");
        log.info(broadcast.toString());
        log.info("生成结束");
        // 插入附件 表格
        LambdaQueryChainWrapper<YcGenerateReport> wrapper = ycGenerateReportService.lambdaQuery();
        wrapper.eq(YcGenerateReport::getReportTime,DateUtils.convertDate(endDateTime));
        YcGenerateReport ycGenerateReport = wrapper.one();
        if(ycGenerateReport == null){
            ycGenerateReport = new YcGenerateReport();
            ycGenerateReport.setReportTime(DateUtils.convertDate(endDateTime));
            ycGenerateReport.setReportContent(broadcast.toString()).setOriginalContent(broadcast.toString());
            ycGenerateReportService.save(ycGenerateReport);
        }else {
            ycGenerateReport.setReportContent(broadcast.toString()).setOriginalContent(broadcast.toString());
            ycGenerateReportService.updateById(ycGenerateReport);
        }
        Integer id = ycGenerateReport.getId();
        LambdaQueryChainWrapper<FileTable> wrapperFile = fileTableService.lambdaQuery();
        wrapperFile.eq(FileTable::getFileModule,FileTableEnum.YC_GENERATEEXCEL.getValue());
        wrapperFile.eq(FileTable::getRelationId,id);
        List<FileTable> listFileTable = wrapperFile.list();
        if(CollectionUtils.isNotEmpty(listFileTable)){
            listFileTable.forEach(it->it.setIsDel(1));
            fileTableService.updateBatchById(listFileTable);
        }
        // 封装文件信息
        QxUser user = UserHelper.getCurrentUser();
        FileTable fileTable = new FileTable();
        fileTable.setFileModule(FileTableEnum.YC_GENERATEEXCEL.getValue()).setRelationId(id)
                .setFileName(resultFileName).setFileAddress(path.concat(resultFile)).setFileType(FileType.EXCEL.getValue());
        if (Objects.nonNull(user)) {
            fileTable.setCreateId(user.getUserId()).setCreateName(user.getUserName()).setCreateTime(new Date());
        }
        fileTableService.save(fileTable);
        fileTable.setFileName(resultFileName1).setFileAddress(path.concat(resultFile));
        fileTableService.save(fileTable);
    }
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 设置时区为东八区
        String dateString = sdf.format(date);
        System.out.println(dateString);
    }
    public String compareYear(Double d1,Double d2,int type){
        BigDecimal r = BigDecimal.ZERO;
        BigDecimal decimal = d2==null?BigDecimal.ZERO:new BigDecimal(d2);
        if(type == 1){
            r = (new BigDecimal(d1).subtract(decimal)).setScale(1, BigDecimal.ROUND_HALF_UP).stripTrailingZeros();
        }else {
            if(d2==null){
                r = new BigDecimal(100).setScale(1, BigDecimal.ROUND_HALF_UP).stripTrailingZeros();
            }else {
                r = (new BigDecimal(d1).subtract(decimal)).divide(decimal,3, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100d)).stripTrailingZeros();
            }
        }
        if(1 == r.compareTo(BigDecimal.ZERO)){
            return 1==type?"上升"+r.toPlainString()+"个百分点" :"上升"+r.toPlainString()+"%";
        }else if(0 == r.compareTo(BigDecimal.ZERO)){
            return "持平";
        }else {
            r = r.abs().setScale(2,BigDecimal.ROUND_HALF_UP).stripTrailingZeros();
            return 1==type?"下降"+r.toPlainString()+"个百分点" :"下降"+r.toPlainString()+"%";
        }
    }
    public List<Object> compareYearList(Double d1,Double d2,int type){
        BigDecimal decimal = d2==null?BigDecimal.ZERO:new BigDecimal(d2);
        List<Object> list = new ArrayList<>();
        BigDecimal r = BigDecimal.ZERO;
        if(type == 1){
            r = (new BigDecimal(d1).subtract(decimal)).setScale(1, BigDecimal.ROUND_HALF_UP).stripTrailingZeros();
        }else {
            if(d2 == null){
                r = new BigDecimal(100).setScale(1, BigDecimal.ROUND_HALF_UP).stripTrailingZeros();
            }else {
                r = (new BigDecimal(d1).subtract(decimal)).divide(new BigDecimal(d2),3, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100d)).stripTrailingZeros();
            }
           }
        list.add(r);
        if(1 == r.compareTo(BigDecimal.ZERO)){
             if(1==type){
                 list.add("上升"+r.toPlainString()+"个百分点");
             }else {
                 list.add("上升"+r.toPlainString()+"%");
             }
        }else if(0 == r.compareTo(BigDecimal.ZERO)){
            list.add("持平");
        }else {
            r = r.abs().setScale(2,BigDecimal.ROUND_HALF_UP).stripTrailingZeros();
            if(1==type){
                list.add("下降"+r.toPlainString()+"个百分点");
            }else {
                list.add("下降"+r.toPlainString()+"%");
            }
        }
        return list;
    }
    public SixConcentrationsVo sixResult(List<SixConcentrationsVo> list,String name){
        SixConcentrationsVo sixConcentrationsVo = new SixConcentrationsVo();
        if(CollectionUtils.isNotEmpty(list)){
            sixConcentrationsVo = list.stream().filter(it->it.getName().equals(name)).collect(Collectors.toList()).get(0);
        }
        return sixConcentrationsVo;
    }
    public String annualTarget(Double d,Double target,Date date){
        int year = DateUtils.getYear(date);
        int totalDays = Year.of(year).length();
        LocalDate todayLast = LocalDate.now().minusDays(1);
        LocalDate yearEnd = LocalDate.of(year, 12, 31);
        long daysLeft = yearEnd.toEpochDay() - todayLast.toEpochDay();
        BigDecimal r = new BigDecimal(target).multiply(new BigDecimal(totalDays));
        BigDecimal r1 = new BigDecimal(d).multiply(new BigDecimal(totalDays-daysLeft));
        BigDecimal r3 = (r.subtract(r1)).divide(new BigDecimal(daysLeft),1,BigDecimal.ROUND_HALF_UP);
        return daysLeft+"天PM2.5日均浓度应低于"+r3+"微克/立方米,";
    }
    public String rankingList(List<SixConcentrationsVo>  list,int type){
        List<SixConcentrationsVo> resultList = new ArrayList<>();
        String resultStr = null;
        if(1 == type){
            resultList = list.stream().sorted(Comparator.comparing(SixConcentrationsVo::getPM25,Comparator.reverseOrder())).collect(Collectors.toList());
        }else if(2 == type){
            resultList = list.stream().sorted(Comparator.comparing(SixConcentrationsVo::getYoYPM25,Comparator.reverseOrder())).collect(Collectors.toList());
        }else if(3 == type){
            resultList = list.stream().sorted(Comparator.comparing(SixConcentrationsVo::getOOAvg,Comparator.reverseOrder())).collect(Collectors.toList());
        }else if(4 == type){
            resultList = list.stream().sorted(Comparator.comparing(SixConcentrationsVo::getYoYO3,Comparator.reverseOrder())).collect(Collectors.toList());
        }else if(5 == type){
            resultList = list.stream().sorted(Comparator.comparing(SixConcentrationsVo::getExcellentRateRatio)).collect(Collectors.toList());
        }else if(6 == type){
            resultList = list.stream().sorted(Comparator.comparing(SixConcentrationsVo::getExcellentRateRatioYoY)).collect(Collectors.toList());
        }
        resultStr =  improveList(resultList,type,1);
        return resultStr;
    }
    public List<SixConcentrationsVo> resultList(List<SixConcentrationsVo> list1,List<SixConcentrationsVo> list2,int type){
        for(SixConcentrationsVo x : list1){
            for(SixConcentrationsVo x1 : list2){
                if(x.getName().equals(x1.getName())){
                    if(type == 1){
                        List<Object> rateRatioList = compareYearList(x.getExcellentRateRatio(),x1.getExcellentRateRatio(),1);
                        BigDecimal excellentRateRatioYoY = (BigDecimal) rateRatioList.get(0);
                        x.setExcellentRateRatioYoY(excellentRateRatioYoY.doubleValue());
                        x.setExcellentRateRatioYoYStr(rateRatioList.get(1).toString());
                    }else {
                        List<Object> pm25List = compareYearList(x.getPM25(),x1.getPM25(),2);
                        x.setYoYPM25((BigDecimal) pm25List.get(0));
                        x.setYoYPM25Str(pm25List.get(1).toString());
                        List<Object> o3List = compareYearList(x.getOOAvg(),x1.getOOAvg(),2);
                        x.setYoYO3((BigDecimal) o3List.get(0));
                        x.setYoYO3Str(o3List.get(1).toString());
                    }
                }
            }
        }
        return list1;
    }
    private String improveList(List<SixConcentrationsVo> resultList,int type,int lastType){
        //resultList.stream().sorted(Comparator.comparing(SixConcentrationsVo::getPM25,Comparator.reverseOrder())).collect(Collectors.toList());
        int num = 1;
        int numLength = 1;
        Map<String,List<SixConcentrationsVo>> map = new LinkedHashMap<>();
        for(int i = 0;i<resultList.size();i++){
            SixConcentrationsVo concentrationsVo = resultList.get(i);
            if(StringUtils.isEmpty(concentrationsVo.getName())&&!StringUtils.isEmpty(concentrationsVo.getExcellentRateName())){
                concentrationsVo.setName(concentrationsVo.getExcellentRateName());
            }
            String result = null;
            boolean numType =false;
            if(num>3){
                numType =true;
            }
            //pm2.5,2.5改善,O3,O3改善
            if(1 == type){
                result = Double.toString(concentrationsVo.getPM25());
            }else if(2 == type){
                result = concentrationsVo.getYoYPM25Str();
            }else if(3 == type){
                result = Double.toString(concentrationsVo.getOOAvg());
            }else if(4 == type){
                result = concentrationsVo.getYoYO3Str();
            }else if(5 == type){
                result = Double.toString(concentrationsVo.getExcellentRateRatio());
            }else if(6 == type){
                result = concentrationsVo.getExcellentRateRatioYoYStr();
            }
            if(map.containsKey(result)){
                numType =false;
            }
            if(numType){
                break;
            }
            if(!map.containsKey(result)){
                if(numLength >3){
                    break;
                }
                List<SixConcentrationsVo> list = new ArrayList<>();
                list.add(concentrationsVo);
                map.put(result,list);
                num++;
            }else {
                List<SixConcentrationsVo> list = map.get(result);
                list.add(concentrationsVo);
                map.put(result ,list);
            }
            numLength++;
        }
        StringBuilder topThree = new StringBuilder();
        StringBuilder topThreeNum = new StringBuilder();
        num = 1;
        int mapNum = map.size();
        String unitName = null;
        if(1 == type||3 == type){
            unitName = "微克/立方米";
        }else if(5 == type){
            unitName = "%";
        }else{
            unitName = "";
        }
        for(Map.Entry entry : map.entrySet()){
            String mapKey =  entry.getKey().toString();
            List<SixConcentrationsVo> mapValue = (List<SixConcentrationsVo>)entry.getValue();
            if(1 == mapValue.size()){
                topThree.append(mapValue.get(0).getName());
                topThreeNum.append(mapKey).append(unitName);
            }else{
                topThree.append(mapValue.get(0).getName()).append("(");
              /*  if(5 == type){
                    topThreeNum.append(mapKey+"%").append(unitName).append("(");
                }else {
                }*/
                topThreeNum.append(mapKey).append(unitName).append("(");
                for(int i = 1 ;i<mapValue.size();i++){
                    if(i == mapValue.size()-1){
                        topThreeNum.append(mapKey).append(unitName).append(")");
                        topThree.append(mapValue.get(i).getName()).append("并列)");
                    }else {
                        topThreeNum.append(mapKey).append(unitName).append("、");
                        topThree.append(mapValue.get(i).getName()).append("、");
                    }
                }
            }
            if(num<mapNum){
                topThree.append("、");
                topThreeNum.append("、");
            }else {
                topThree.append(",");
                if(6 == type){
                    topThreeNum.append("。");
                }else {
                    topThreeNum.append(";");
                }
            }
            num++;
        }
        String resultTopThree = null;
        if(1 == type || 3 == type){
            resultTopThree = topThree.toString()+"浓度分别为"+topThreeNum.toString();
        }else if(2 == type || 4 == type || 6 == type){
            resultTopThree = topThree.toString()+"同比分别为"+topThreeNum.toString();
        }else if(5 == type){
            resultTopThree = topThree.toString()+"比例分别为"+topThreeNum.toString();
        }
        return resultTopThree;
    }
    public void listReplaceName(List<SixConcentrationsVo> list){
        for(SixConcentrationsVo l : list){
            if(org.apache.commons.lang3.StringUtils.isNotEmpty(l.getName())&&l.getName().equals("大丰高级中学(国)")){
                l.setName("大丰高级中学");
            }
            if(org.apache.commons.lang3.StringUtils.isNotEmpty(l.getName())&&l.getName().equals("盐都区(市)")){
                l.setName("盐都区");
            }
            if(org.apache.commons.lang3.StringUtils.isNotEmpty(l.getExcellentRateName())&&l.getExcellentRateName().equals("大丰高级中学(国)")){
                l.setExcellentRateName("大丰高级中学");
            }
            if(org.apache.commons.lang3.StringUtils.isNotEmpty(l.getExcellentRateName())&&l.getExcellentRateName().equals("盐都区(市)")){
                l.setExcellentRateName("盐都区");
            }
        }
    }
    private String getFilePath(String sysCode) {
        return sysCode.concat(com.moral.api.utils.StringUtils.SLASH).concat(DateUtils.dateToDateString(new Date(),DateUtils.yyyyMMdd_EN)).concat(com.moral.api.utils.StringUtils.SLASH);
    }
    private void storageFile(String filePath){
        File f = new File(filePath);
        try {
            // 保存文件
            if (!f.getParentFile().exists()) {
                boolean success = f.mkdir();
                if (!f.getParentFile().mkdirs()) {
                    log.error("error:创建文件失败! dir={}", f.getAbsolutePath());
                }
            }
        } catch (Exception e) {
            log.error("error:文件上传失败!!!e={}", e.getMessage());
            throw new BusinessException("文件上传失败,请重试!");
        }
    }
}
screen-api/src/main/java/com/moral/api/entity/YcGenerateReport.java
New file
@@ -0,0 +1,56 @@
package com.moral.api.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.moral.api.pojo.bean.BaseInvalidEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 *
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class YcGenerateReport extends BaseInvalidEntity<YcGenerateReport> {
    /**
     * 主键id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 报告日期
     */
    private Date reportTime;
    /**
     * 报告内容
     */
    private String reportContent;
    /**
     * 原始内容
     */
    private String originalContent;
    /**
     * 作废理由
     */
    private String invalidReason;
}
screen-api/src/main/java/com/moral/api/mapper/FileTableMapper.java
@@ -2,6 +2,10 @@
import com.moral.api.entity.FileTable;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.pojo.vo.file.FileVo;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -13,4 +17,5 @@
 */
public interface FileTableMapper extends BaseMapper<FileTable> {
    List<FileVo> fileList(Map map);
}
screen-api/src/main/java/com/moral/api/mapper/YcGenerateReportMapper.java
New file
@@ -0,0 +1,54 @@
package com.moral.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportListExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportPageExt;
import com.moral.api.pojo.query.ycgeneratereport.YcGenerateReportListCond;
import com.moral.api.pojo.query.ycgeneratereport.YcGenerateReportPageCond;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 盐城报告表 Mapper 接口
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
public interface YcGenerateReportMapper extends BaseMapper<YcGenerateReport> {
    /**
     * 逻辑删除
     * @param param
     * @return
     */
    int deleteByIdWithFill(YcGenerateReport param);
    /**
     * 查询单个详情
     * @param id
     * @return YcGenerateReportExt
     */
    YcGenerateReportExt extOne(@Param("id") Integer id);
    /**
     * 查询列表详情
     * @param ycGenerateReportListCond
     * @return YcGenerateReportListExt
     */
    List<YcGenerateReportListExt> extList(@Param("ycgeneratereport") YcGenerateReportListCond ycGenerateReportListCond);
    /**
     * 查询分页详情
     * @param page
     * @param ycGenerateReportPageCond
     * @return YcGenerateReportPageExt
     */
    Page<YcGenerateReportPageExt> extPage(Page page, @Param("ycgeneratereport") YcGenerateReportPageCond ycGenerateReportPageCond);
}
screen-api/src/main/java/com/moral/api/pojo/enums/FileTableEnum.java
@@ -41,7 +41,10 @@
     * 小程序头像
     */
    APP_ALLOCATION(1202401, "app头像"),
    /**
     * 盐城自动excel
     */
    YC_GENERATEEXCEL(1250301, "盐城自动生成报告"),
    ;
    @EnumValue
screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportExt.java
New file
@@ -0,0 +1,21 @@
package com.moral.api.pojo.ext.ycgeneratereport;
import com.moral.api.entity.YcGenerateReport;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class YcGenerateReportExt extends YcGenerateReport {
}
screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportListExt.java
New file
@@ -0,0 +1,22 @@
package com.moral.api.pojo.ext.ycgeneratereport;
import com.moral.api.entity.YcGenerateReport;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class YcGenerateReportListExt extends YcGenerateReport {
}
screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportPageExt.java
New file
@@ -0,0 +1,98 @@
package com.moral.api.pojo.ext.ycgeneratereport;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.pojo.vo.file.FileVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.sql.Date;
import java.util.List;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class YcGenerateReportPageExt{
    /**
     * 主键id
     */
    private Integer id;
    /**
     * 报告日期
     */
    private Date reportTime;
    /**
     * 报告内容
     */
    private String reportContent;
    /**
     * 原始内容
     */
    private String originalContent;
    /**
     * 是否删除
     */
    @TableLogic
    private Integer isDel;
    /**
     * 是否作废
     */
    private Integer isInvalid;
    /**
     * 作废理由
     */
    private String invalidReason;
    /**
     * 创建人id
     */
    private Integer createId;
    /**
     * 创建人姓名
     */
    private String createName;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 更新人id
     */
    private Integer updateId;
    /**
     * 更新人姓名
     */
    private String updateName;
    /**
     * 更新时间
     */
    private Date updateTime;
    private List<FileVo> list;
}
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportAddCond.java
New file
@@ -0,0 +1,73 @@
package com.moral.api.pojo.query.ycgeneratereport;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.utils.BeanConverts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 新增对象", description="YcGenerateReport - 新增对象")
public class YcGenerateReportAddCond implements Serializable {
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "报告日期")
    private Date reportTime;
    @ApiModelProperty(value = "报告内容")
    private String reportContent;
    @ApiModelProperty(value = "原始内容")
    private String originalContent;
    @ApiModelProperty(value = "是否删除")
    private Integer isDel;
    @ApiModelProperty(value = "是否作废")
    private Integer isInvalid;
    @ApiModelProperty(value = "作废理由")
    private String invalidReason;
    @ApiModelProperty(value = "创建人id")
    private Integer createId;
    @ApiModelProperty(value = "创建人姓名")
    private String createName;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    @ApiModelProperty(value = "更新人id")
    private Integer updateId;
    @ApiModelProperty(value = "更新人姓名")
    private String updateName;
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    public YcGenerateReport convert() {
        YcGenerateReport ycGenerateReport = BeanConverts.convert(this, YcGenerateReport.class);
        return ycGenerateReport;
    }
}
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportListCond.java
New file
@@ -0,0 +1,28 @@
package com.moral.api.pojo.query.ycgeneratereport;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 列表查询对象", description="YcGenerateReport - 列表查询对象")
public class YcGenerateReportListCond implements Serializable {
    @ApiModelProperty(value = "ID")
    private Integer id;
}
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportPageCond.java
New file
@@ -0,0 +1,34 @@
package com.moral.api.pojo.query.ycgeneratereport;
import com.moral.api.pojo.query.PageCond;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 分页查询对象", description="YcGenerateReport - 分页查询对象")
public class YcGenerateReportPageCond implements Serializable{
    @ApiModelProperty(value = "开始时间")
    private String startTime;
    @ApiModelProperty(value = "结束时间")
    private String endTime;
    @ApiModelProperty(value = "分页参数")
    private PageCond page;
}
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUpdateCond.java
New file
@@ -0,0 +1,73 @@
package com.moral.api.pojo.query.ycgeneratereport;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.utils.BeanConverts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 更新对象", description="YcGenerateReport - 更新对象")
public class YcGenerateReportUpdateCond implements Serializable {
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "报告日期")
    private Date reportTime;
    @ApiModelProperty(value = "报告内容")
    private String reportContent;
    @ApiModelProperty(value = "原始内容")
    private String originalContent;
    @ApiModelProperty(value = "是否删除")
    private Integer isDel;
    @ApiModelProperty(value = "是否作废")
    private Integer isInvalid;
    @ApiModelProperty(value = "作废理由")
    private String invalidReason;
    @ApiModelProperty(value = "创建人id")
    private Integer createId;
    @ApiModelProperty(value = "创建人姓名")
    private String createName;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    @ApiModelProperty(value = "更新人id")
    private Integer updateId;
    @ApiModelProperty(value = "更新人姓名")
    private String updateName;
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    public YcGenerateReport convert() {
        YcGenerateReport ycGenerateReport = BeanConverts.convert(this, YcGenerateReport.class);
        return ycGenerateReport;
    }
}
screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUploadCond.java
New file
@@ -0,0 +1,35 @@
package com.moral.api.pojo.query.ycgeneratereport;
import com.moral.api.pojo.query.PageCond;
import com.moral.api.pojo.vo.file.FileVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReportUploadCond - 重新上传对象", description="YcGenerateReportUploadCond - 重新上传对象")
public class YcGenerateReportUploadCond implements Serializable{
    @ApiModelProperty(value = "报告表id")
    private Integer id;
    @ApiModelProperty(value = "附件list")
    private List<FileVo> list;
}
screen-api/src/main/java/com/moral/api/pojo/vo/yc/AqiResultVo.java
New file
@@ -0,0 +1,80 @@
package com.moral.api.pojo.vo.yc;
import com.moral.api.controller.YcReptilesController;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @ClassName TsetVo
 * @Description TODO
 * @Author @cjl
 * @Date 2024-03-04 11:17
 * @Version 1.0
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class AqiResultVo {
    private String name;
    private double SO2;
    private double SO2Index;
    private double NO2;
    private double NO2Index;
    private double granule;
    private double granuleIndex;
    private double CO;
    private double COIndex;
    private String OO;
    private String OOIndex;
    private double granule25;
    private double granule25Index;
    private String AQI;
    private String SW;
    private String airQuality;
    private String category;
    private String colour;
    public static void main(String[] args) {
        YcReptilesController testController = new YcReptilesController();
        String str =  testController.compareYear(42.6d,    46d,2);
        System.out.println(str);
        /*List<SixConcentrationsVo> list = new ArrayList<>();
        list.add(SixConcentrationsVo.builder().name("宝龙广场").PM25(51d).build());
        list.add(SixConcentrationsVo.builder().name("市监测站").PM25(32d).build());
        list.add(SixConcentrationsVo.builder().name("大丰高级中学").PM25(51d).build());
        list.add(SixConcentrationsVo.builder().name("响水县自来水厂").PM25(33d).build());
        list.add(SixConcentrationsVo.builder().name("响水职业中学").PM25(51d).build());
        List<SixConcentrationsVo> list1 = new ArrayList<>();
        list1.add(SixConcentrationsVo.builder().name("宝龙广场").PM25(89d).build());
        list1.add(SixConcentrationsVo.builder().name("市监测站").PM25(32d).build());
        list1.add(SixConcentrationsVo.builder().name("大丰高级中学").PM25(44d).build());
        list1.add(SixConcentrationsVo.builder().name("响水县自来水厂").PM25(33d).build());
        list1.add(SixConcentrationsVo.builder().name("响水职业中学").PM25(78d).build());
        List<SixConcentrationsVo> listAll = testController.resultList(list,list1,2);
        String str = testController.rankingList(listAll,2);
        System.out.println(str);*/
    }
}
screen-api/src/main/java/com/moral/api/pojo/vo/yc/SixConcentrationsVo.java
New file
@@ -0,0 +1,88 @@
package com.moral.api.pojo.vo.yc;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
 * @ClassName SixConcentrationsVo
 * @Description TODO
 * @Author @cjl
 * @Date 2024-03-07 11:24
 * @Version 1.0
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SixConcentrationsVo {
    private String name;
    private double SO2;
    private String SO2ExceedingMultiple;
    private double SO2Avg;
    private String SO2ExceedingMultipleTwo;
    private double NO2;
    private String NO2ExceedingMultiple;
    private double NO2Avg;
    private String NO2ExceedingMultipleTwo;
    private double PM10;
    private String PM10ExceedingMultiple;
    private double PM10Avg;
    private String PM10ExceedingMultipleTwo;
    private double CO;
    /*private String COExceedingMultiple;*/
    private double COAvg;
    private String COExceedingMultipleTwo;
    private double OO;
   /* private String OOExceedingMultiple;*/
    private double OOAvg;
    private String OOExceedingMultipleTwo;
    private double PM25;
    private String PM25ExceedingMultiple;
    private double PM25Avg;
    private String PM25ExceedingMultipleTwo;
    private String excellentRateName;
    private double excellentRateRatio;
    private double excellentRateRatioYoY;
    private BigDecimal YoYPM25;
    private String YoYPM25Str;
    private BigDecimal YoYO3;
    private String YoYO3Str;
    private String excellentRateRatioYoYStr;
}
screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportListVo.java
New file
@@ -0,0 +1,80 @@
package com.moral.api.pojo.vo.ycgeneratereport;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportListExt;
import com.moral.api.utils.BeanConverts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 列表VO对象", description="YcGenerateReport - 列表VO对象")
public class YcGenerateReportListVo implements Serializable {
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "报告日期")
    private Date reportTime;
    @ApiModelProperty(value = "报告内容")
    private String reportContent;
    @ApiModelProperty(value = "原始内容")
    private String originalContent;
    @ApiModelProperty(value = "是否删除")
    private Integer isDel;
    @ApiModelProperty(value = "是否作废")
    private Integer isInvalid;
    @ApiModelProperty(value = "作废理由")
    private String invalidReason;
    @ApiModelProperty(value = "创建人id")
    private Integer createId;
    @ApiModelProperty(value = "创建人姓名")
    private String createName;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    @ApiModelProperty(value = "更新人id")
    private Integer updateId;
    @ApiModelProperty(value = "更新人姓名")
    private String updateName;
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    public static YcGenerateReportListVo convert(YcGenerateReportListExt ycGenerateReportListExt) {
        YcGenerateReportListVo ycGenerateReportListVo = BeanConverts.convert(ycGenerateReportListExt, YcGenerateReportListVo.class);
        return ycGenerateReportListVo;
    }
    public static List<YcGenerateReportListVo> convert(List<YcGenerateReportListExt> ycGenerateReportListExtList) {
        return ycGenerateReportListExtList.stream().map(YcGenerateReportListVo::convert).collect(Collectors.toList());
    }
}
screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportPageVo.java
New file
@@ -0,0 +1,79 @@
package com.moral.api.pojo.vo.ycgeneratereport;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportPageExt;
import com.moral.api.pojo.vo.file.FileVo;
import com.moral.api.utils.BeanConverts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.commons.collections.CollectionUtils;
import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 分页VO对象", description="YcGenerateReport - 分页VO对象")
public class YcGenerateReportPageVo implements Serializable {
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "报告日期")
    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
    private Date reportTime;
    @ApiModelProperty(value = "报告内容")
    private String reportContent;
    @ApiModelProperty(value = "创建人id")
    private Integer createId;
    @ApiModelProperty(value = "创建人姓名")
    private String createName;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    @ApiModelProperty(value = "更新人id")
    private Integer updateId;
    @ApiModelProperty(value = "更新人姓名")
    private String updateName;
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    @ApiModelProperty(value = "附件")
    private List<FileVo> list;
    public static YcGenerateReportPageVo convert(YcGenerateReportPageExt ycGenerateReportPageExt) {
        YcGenerateReportPageVo ycGenerateReportPageVo = BeanConverts.convert(ycGenerateReportPageExt, YcGenerateReportPageVo.class);
        return ycGenerateReportPageVo;
    }
    public static List<YcGenerateReportPageVo> convert(List<YcGenerateReportPageExt> ycGenerateReportPageExtList) {
        return ycGenerateReportPageExtList.stream().map(YcGenerateReportPageVo::convert).collect(Collectors.toList());
    }
    public List<FileVo> getList() {
        return CollectionUtils.isEmpty(list)?new ArrayList<>():list;
    }
}
screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportVo.java
New file
@@ -0,0 +1,75 @@
package com.moral.api.pojo.vo.ycgeneratereport;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportExt;
import com.moral.api.utils.BeanConverts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 盐城报告表
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="YcGenerateReport - 详情VO对象", description="YcGenerateReport - 详情VO对象")
public class YcGenerateReportVo implements Serializable {
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "报告日期")
    private Date reportTime;
    @ApiModelProperty(value = "报告内容")
    private String reportContent;
    @ApiModelProperty(value = "原始内容")
    private String originalContent;
    @ApiModelProperty(value = "是否删除")
    private Integer isDel;
    @ApiModelProperty(value = "是否作废")
    private Integer isInvalid;
    @ApiModelProperty(value = "作废理由")
    private String invalidReason;
    @ApiModelProperty(value = "创建人id")
    private Integer createId;
    @ApiModelProperty(value = "创建人姓名")
    private String createName;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    @ApiModelProperty(value = "更新人id")
    private Integer updateId;
    @ApiModelProperty(value = "更新人姓名")
    private String updateName;
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    public static YcGenerateReportVo convert(YcGenerateReportExt ycGenerateReportExt) {
        YcGenerateReportVo ycGenerateReportVo = BeanConverts.convert(ycGenerateReportExt, YcGenerateReportVo.class);
        return ycGenerateReportVo;
    }
}
screen-api/src/main/java/com/moral/api/service/ReptileResultService.java
New file
@@ -0,0 +1,16 @@
package com.moral.api.service;
import java.util.Map;
/**
 * @ClassName reptileResultService
 * @Description TODO
 * @Author @cjl
 * @Date 2024-02-27 13:50
 * @Version 1.0
 */
public interface ReptileResultService {
    Map<String,Object> getYcDaily(String url,String cookie,String time,int type);
}
screen-api/src/main/java/com/moral/api/service/YcGenerateReportService.java
New file
@@ -0,0 +1,67 @@
package com.moral.api.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportListExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportPageExt;
import com.moral.api.pojo.query.ycgeneratereport.*;
import java.util.List;
/**
 * <p>
 * 盐城报告表 服务类
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
public interface YcGenerateReportService extends IService<YcGenerateReport> {
    /**
     * 逻辑删除
     * @param id
     * @return
     */
    boolean removeByIdWithFill(Integer id);
    /**
     * 根据id查询详情
     * @param id
     * @return YcGenerateReportExt
     */
    YcGenerateReportExt extOne(Integer id);
    /**
     * 查询列表详情
     * @param ycGenerateReportListCond
     * @return YcGenerateReportListExt
     */
    List<YcGenerateReportListExt> extList(YcGenerateReportListCond ycGenerateReportListCond);
    /**
     * 查询分页详情
     * @param ycGenerateReportPageCond
     * @return YcGenerateReportPageExt
     */
    Page<YcGenerateReportPageExt> extPage(YcGenerateReportPageCond ycGenerateReportPageCond);
    /**
    * 保存
    * @param ycGenerateReportAddCond
    * @return
    */
    boolean save(YcGenerateReportAddCond ycGenerateReportAddCond);
    /**
    * 更新
    * @param ycGenerateReportUpdateCond
    * @return
    */
    boolean update(YcGenerateReportUpdateCond ycGenerateReportUpdateCond);
    boolean fileUpload(YcGenerateReportUploadCond uploadCond);
}
screen-api/src/main/java/com/moral/api/service/impl/ReptileResultServiceImpl.java
New file
@@ -0,0 +1,487 @@
package com.moral.api.service.impl;
import com.moral.api.pojo.vo.yc.AqiResultVo;
import com.moral.api.pojo.vo.yc.SixConcentrationsVo;
import com.moral.api.service.ReptileResultService;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 * @ClassName reptileResultServiceImpl
 * @Description TODO
 * @Author @cjl
 * @Date 2024-02-27 13:50
 * @Version 1.0
 */
@Service
@Slf4j
public class ReptileResultServiceImpl implements ReptileResultService {
    @Override
    public Map<String,Object>  getYcDaily(String url,String cookie,String time,int type) {
        /*String host = "http://116.147.41.178:8081";
        String path = "/Home/AjaxLogin";
        String method = "POST";
        Map<String, String> headers = new HashMap<String, String>();
        Map<String, String> querys = new HashMap<String, String>();
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, new HashMap<>(),querys);
        }catch (Exception e) {
            e.printStackTrace();
        }*/
        return saveRedis(url,cookie,null,type,time,"2024-03-06 10:00:00");
    }
    public static void main(String[] args) {
        String host = "http://116.147.41.178:8081?t="+System.currentTimeMillis();;
        String path = "/Home/AjaxLogin";
        String path1 = "/AQI/Statistics/YouLiangRateDataNewNewNew?sTime=2024-01-01%2000:00:00&eTime=2024-02-26%2000:00:00&DecimalPlaces=0&isDustDay=false&selec=0&selet=0&Time=2024-02&isDustDayXianShi=false";
        String method = "POST";
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Cookie","ASP.NET_SessionId=vpt0ai143s0npijvnl4bmm0b");
        Map<String, String> querys = new HashMap<String, String>();
        querys.put("user","shbj");
        querys.put("password","shbj@123");
        querys.put("yzma","7557");
        String url = "http://116.147.41.178:8081/AQI/Statistics/YouLiangRateDataNewNewNew?sTime=2024-01-01%2000:00:00&eTime=2024-03-03%2000:00:00&DecimalPlaces=0&isDustDay=false&selec=0&selet=0&Time=2024-02&isDustDayXianShi=false";
        String url1 = "http://116.147.41.178:8081/DataReport/AQIReport";
        /*String cookie = "ASP.NET_SessionId=anpfqfg3qy0k3xlcbtqyfa0w;CurrentAMenuID=2fa3c748-bf4e-4453-9544-e5fd860d74bf;";*/
        String cookie = "ASP.NET_SessionId=xo1nn2mvzmhaeb2csok130fd; CurrentSiteID=1fa76063-ec08-4907-ae54-0f78b57fec08; ";
        StringBuffer stringBuffer = new StringBuffer();
        try {
//            HttpResponse response = HttpUtils.doPost(host, path, method, headers, new HashMap<>(),querys);
//            Header[] headerList = response.getHeaders("Set-Cookie");
//            if(0 == headerList.length){
//                return;
//            }
//            String cookieResult = headerList[0].toString().substring(0, headerList[0].toString().indexOf(";"));
//            System.out.println(cookieResult);
//            stringBuffer.append(cookieResult).append(";CurrentAMenuID=2fa3c748-bf4e-4453-9544-e5fd860d74bf;");
            // AQI统计
            /*ReptileResultServiceImpl resultService = new ReptileResultServiceImpl();
            resultService.saveRedis(url1,cookie,null,2,"2024-03-05","2024-03-06 10:00:00");*/
            // 六项浓度均值
            /*String sTime="2024-01-01 00:00:00";
            String eTime="2024-03-06 00:00:00";
            String url2 = "http://116.147.41.178:8081/AQA/YearCustom/Year_Custom1?sTime="+sTime+"&eTime="+eTime+"&type=1&viewtype=1&isDustDay=true&DecimalPlaces=1";
            ReptileResultServiceImpl resultService = new ReptileResultServiceImpl();
            resultService.saveRedis(url2,cookie,null,3,"2024-03-05","2024-03-06 10:00:00");*/
            // 县市区考核
           // String url3 = "http://116.147.41.178:8081/AQA/Statistics/YouLiangRateDataNewNewNew?sTime="+sTime+"&eTime="+eTime+"&DecimalPlaces=1&isDustDay=false&selec=0&selet=0&Time=2024-03&isDustDayXianShi=false";
           /* String sTime="2024-01-01";
            String eTime="2024-03-06";
            String url3 = "http://116.147.41.178:8081/AQI/Statistics/YouLiangRateDataNewNewNew?sTime="+sTime+"&eTime="+eTime+"&DecimalPlaces=1&isDustDay=false&selec=0&selet=0&isDustDayXianShi=false";
            ReptileResultServiceImpl resultService = new ReptileResultServiceImpl();
            resultService.saveRedis(url3,cookie,null,1,"2024-03-05","2024-03-06 10:00:00");
            */
            //达标率
            String sTime="2023-01-01";
            String eTime="2023-03-12";
            String url4 = "http://116.147.41.178:8081/AQI/Statistics/StandardRateData?&sTime="+sTime+"&eTime="+eTime;
            ReptileResultServiceImpl resultService = new ReptileResultServiceImpl();
            resultService.saveRedis(url4,cookie,null,4,"2024-03-05","2024-03-06 10:00:00");
            int i = 0;
        }catch (Exception e) {
            log.error("错误>>>",e);
        }
    }
    public Map<String,Object> saveRedis(String url,String cookie,String redisString,int type,String time,String newTime){
        Map<String,Object> map = new HashMap<>();
        StringBuffer data = new StringBuffer();
        int timeout = 60;
        OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(timeout, TimeUnit.SECONDS)
                .readTimeout(timeout, TimeUnit.SECONDS).writeTimeout(timeout, TimeUnit.SECONDS)
                .build();
        Request request = new Request.Builder()
                .url(url)
                .method("POST", resultBody(type,time,newTime))
                .addHeader("Cookie", cookie)
                .build();
        try {
            Response response = client.newCall(request).execute();
            String responseData = response.body().string();
            //System.out.println(responseData);
            Document doc = Jsoup.parse(responseData);
            Element thead = null;
            Element tbody = null;
            if(2 == type){
                Element element = doc.select("#Vdate").first();
                thead = element.select("thead").last();
                tbody = element.select("tbody").last();
            }else {
                thead = doc.select("thead").last();
                tbody = doc.select("tbody").last();
            }
            Elements trsHead = thead.select("tr");
            if(trsHead.size()>0){
                String title = trsHead.get(0).select("th").get(0).text();
                data.append(title + "\t");
                data.append("\n");
                map.put("title",title);
            }
            Elements trs = tbody.select("tr");
            int id = 0;
            List<AqiResultVo> tableResult = new ArrayList<>();
            List<SixConcentrationsVo> tableSixResult = new ArrayList<>();
            for (Element tr : trs) {
                Elements tds = tr.select("td");
                id = 0;
                if(2 == type && tds.size() == 18){
                    if(tds.get(1).text().equals("NA")&&tds.get(2).text().equals("NA")&&tds.get(3).text().equals("NA")&&tds.get(4).text().equals("NA")&&tds.get(5).text().equals("NA")){
                        continue;
                    }
                    AqiResultVo testVo = AqiResultVo.builder().name(tds.get(0).text()).SO2(Double.valueOf(tds.get(1).text()))
                            .SO2Index(Double.valueOf(tds.get(2).text())).NO2(Double.valueOf(tds.get(3).text())).NO2Index(Double.valueOf(tds.get(4).text()))
                            .granule(tds.get(5).text().equals("NA")?0:Double.valueOf(tds.get(5).text())).granuleIndex(tds.get(6).text().equals("NA")?0:Double.valueOf(tds.get(6).text())).CO(tds.get(7).text().equals("NA")?0:Double.valueOf(tds.get(7).text()))
                            .COIndex(tds.get(8).text().equals("NA")?0:Double.valueOf(tds.get(8).text())).OO(tds.get(9).text()).OOIndex(tds.get(10).text())
                            .granule25(tds.get(11).text().equals("NA")?0:Double.valueOf(tds.get(11).text())).granule25Index(tds.get(12).text().equals("NA")?0:Double.valueOf(tds.get(12).text())).AQI(tds.get(13).text())
                            .SW(tds.get(14).text()).airQuality(tds.get(15).text()).category(tds.get(16).text())
                            .colour(tds.get(17).text())
                            .build();
                    tableResult.add(testVo);
                }else if(3 == type && 23 == tds.size()){
                    SixConcentrationsVo sixConcentrationsVo = SixConcentrationsVo.builder()
                            .name(tds.get(0).text()).SO2(Double.valueOf(tds.get(1).text()))
                            .SO2ExceedingMultiple(tds.get(2).text()).SO2Avg(Double.valueOf(tds.get(3).text())).SO2ExceedingMultipleTwo(tds.get(4).text())
                            .NO2(Double.valueOf(tds.get(5).text())).NO2ExceedingMultiple(tds.get(6).text()).NO2Avg(Double.valueOf(tds.get(7).text()))
                            .NO2ExceedingMultipleTwo(tds.get(8).text()).PM10(Double.valueOf(tds.get(9).text())).PM10ExceedingMultiple(tds.get(10).text())
                            .PM10Avg(Double.valueOf(tds.get(11).text())).PM10ExceedingMultipleTwo(tds.get(12).text()).CO(Double.valueOf(tds.get(13).text()))
                            .COAvg(Double.valueOf(tds.get(14).text())).COExceedingMultipleTwo(tds.get(15).text()).OO(Double.valueOf(tds.get(16).text()))
                            .OOAvg(Double.valueOf(tds.get(17).text())).OOExceedingMultipleTwo(tds.get(18).text()).PM25(Double.valueOf(tds.get(19).text()))
                            .PM25ExceedingMultiple(tds.get(20).text()).PM25Avg(Double.valueOf(tds.get(21).text())).PM25ExceedingMultipleTwo(tds.get(22).text())
                            .build();
                    tableSixResult.add(sixConcentrationsVo);
                }else if(1 == type && 20 == tds.size()){
                    SixConcentrationsVo sixConcentrationsVo = SixConcentrationsVo.builder()
                            .excellentRateName(tds.get(1).text()).excellentRateRatio(Double.valueOf(tds.get(14).text()))
                            .excellentRateRatioYoY(Double.valueOf(tds.get(15).text())).name(tds.get(1).text())
                            .build();
                    tableSixResult.add(sixConcentrationsVo);
                }else if(4 == type && 28 == tds.size() ){
                    int rDay = BigDecimal.valueOf(Double.valueOf(tds.get(25).text())).subtract(BigDecimal.valueOf(Double.valueOf(tds.get(26).text()))).intValue();
                    map.put("surplusDay",rDay);
                }
                for (Element td : tds) {
                    Elements tdList = td.getElementsByClass("class_xianshi");
                    if(1 == type){
                        if(tdList.size()>0 || id ==0){
                            id++;
                            continue;
                        }
                    }
                    data.append(td.text() + "\t");
                }
                data.append("\n");
            }
            if(2 == type){
                map.put("table",tableResult);
            }else if(3 ==type){
                map.put("table",tableSixResult);
            }else if(1 == type){
                map.put("table",tableSixResult);
            }
            System.out.println(data.toString());
        }catch (Exception e){
            log.error("错误>>>",e);
        }
        return map;
    }
    private RequestBody resultBody(int type, String time, String newTime){
        RequestBody body = null;
        if(1 == type){
            body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("sids[]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("sids[]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("sids[]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("sids[]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("sids[]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("sids[]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("sids[]","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("sids[]","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("sids[]","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("sids[]","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("sids[]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("sids[]","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("sids[]","1d94cf00-c1a8-44d4-9468-cdc9d5c60711")
                    .addFormDataPart("sids[]","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("sids[]","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("sids[]","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("sids[]","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("sids[]","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("sids[]","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("sids[]","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("sids[]","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("rids[]","2a38e028-db85-4afa-a682-a6f5e015e231")
                    .addFormDataPart("rids[]","085fab12-2897-4a54-93fe-009288a4b933")
                    .addFormDataPart("rids[]","780470c6-b99c-4ab8-88e5-9155aeef354c")
                    .addFormDataPart("rids[]","58b02ba2-936b-4a20-a090-1b859cdd82a4")
                    .addFormDataPart("rids[]","bffb79ac-e836-476b-b981-78cc752ec751")
                    .addFormDataPart("rids[]","9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784")
                    .addFormDataPart("rids[]","00e1a970-e889-42e0-a45c-79b506b826ac")
                    .addFormDataPart("rids[]","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("rids[]","28e31d35-068f-4674-b70e-c742f9881b27")
                    .addFormDataPart("rids[]","442f00ea-75b7-4fcb-8e39-52cbf4e76e15")
                    .addFormDataPart("rids[]","203567c0-bff7-449a-bbe1-21ea9b62567b")
                    .addFormDataPart("rids[]","c3d506b0-8541-4086-ac72-b34e5155e1a4")
                    .addFormDataPart("r_sids[0][]","2a38e028-db85-4afa-a682-a6f5e015e231")//
                    .addFormDataPart("r_sids[0][]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("r_sids[0][]","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("r_sids[1][]","085fab12-2897-4a54-93fe-009288a4b933")//
                    .addFormDataPart("r_sids[1][]","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("r_sids[1][]","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("r_sids[2][]","cd11ce0b-5a31-43c1-879a-425866585652")
                    .addFormDataPart("r_sids[2][]","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("r_sids[2][]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("r_sids[3][]","780470c6-b99c-4ab8-88e5-9155aeef354c")
                    .addFormDataPart("r_sids[3][]","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("r_sids[3][]","1d94cf00-c1a8-44d4-9468-cdc9d5c60711")
                    .addFormDataPart("r_sids[4][]","58b02ba2-936b-4a20-a090-1b859cdd82a4")
                    .addFormDataPart("r_sids[4][]","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("r_sids[4][]","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("r_sids[5][]","bffb79ac-e836-476b-b981-78cc752ec751")
                    .addFormDataPart("r_sids[5][]","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("r_sids[5][]","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("r_sids[6][]","9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784")
                    .addFormDataPart("r_sids[6][]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("r_sids[6][]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("r_sids[7][]","00e1a970-e889-42e0-a45c-79b506b826ac")
                    .addFormDataPart("r_sids[7][]","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("r_sids[7][]","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("r_sids[8][]","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("r_sids[8][]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("r_sids[8][]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("r_sids[8][]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("r_sids[8][]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("r_sids[8][]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("r_sids[8][]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("r_sids[9][]","28e31d35-068f-4674-b70e-c742f9881b27")
                    .addFormDataPart("r_sids[9][]","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("r_sids[9][]","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("r_sids[10][]","442f00ea-75b7-4fcb-8e39-52cbf4e76e15")
                    .addFormDataPart("r_sids[10][]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("r_sids[10][]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("r_sids[11][]","203567c0-bff7-449a-bbe1-21ea9b62567b")
                    .addFormDataPart("r_sids[11][]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("r_sids[12][]","c3d506b0-8541-4086-ac72-b34e5155e1a4")
                    .addFormDataPart("r_sids[12][]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("r_sids[12][]","6f2ee392-e989-4069-811f-18924155de18")
                    .build();
        }else if(2 == type){
            body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("chose","station")
                    .addFormDataPart("Region","on")
                    .addFormDataPart("Station","on")
                    .addFormDataPart("Item","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("Item","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("Item","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("Item","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("Item","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("Item","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("Item","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("Item","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("Item","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("Item","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("Item","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("Item","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("Item","1d94cf00-c1a8-44d4-9468-cdc9d5c60711")
                    .addFormDataPart("Item","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("Item","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("Item","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("Item","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("Item","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("Item","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("Item","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("Item","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("ItemCity","2a38e028-db85-4afa-a682-a6f5e015e231")
                    .addFormDataPart("ItemCity","085fab12-2897-4a54-93fe-009288a4b933")
                    .addFormDataPart("ItemCity","780470c6-b99c-4ab8-88e5-9155aeef354c")
                    .addFormDataPart("ItemCity","58b02ba2-936b-4a20-a090-1b859cdd82a4")
                    .addFormDataPart("ItemCity","bffb79ac-e836-476b-b981-78cc752ec751")
                    .addFormDataPart("ItemCity","9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784")
                    .addFormDataPart("ItemCity","00e1a970-e889-42e0-a45c-79b506b826ac")
                    .addFormDataPart("ItemCity","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("ItemCity","28e31d35-068f-4674-b70e-c742f9881b27")
                    .addFormDataPart("ItemCity","442f00ea-75b7-4fcb-8e39-52cbf4e76e15")
                    .addFormDataPart("ItemCity","203567c0-bff7-449a-bbe1-21ea9b62567b")
                    .addFormDataPart("ItemCity","c3d506b0-8541-4086-ac72-b34e5155e1a4")
                    .addFormDataPart("2a38e028-db85-4afa-a682-a6f5e015e231Item","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("2a38e028-db85-4afa-a682-a6f5e015e231Item","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("085fab12-2897-4a54-93fe-009288a4b933Item","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("085fab12-2897-4a54-93fe-009288a4b933Item","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("cd11ce0b-5a31-43c1-879a-425866585652Item","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("cd11ce0b-5a31-43c1-879a-425866585652Item","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("780470c6-b99c-4ab8-88e5-9155aeef354cItem","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("780470c6-b99c-4ab8-88e5-9155aeef354cItem","1d94cf00-c1a8-44d4-9468-cdc9d5c60711")
                    .addFormDataPart("58b02ba2-936b-4a20-a090-1b859cdd82a4Item","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("58b02ba2-936b-4a20-a090-1b859cdd82a4Item","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("bffb79ac-e836-476b-b981-78cc752ec751Item","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("bffb79ac-e836-476b-b981-78cc752ec751Item","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784Item","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784Item","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("00e1a970-e889-42e0-a45c-79b506b826acItem","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("00e1a970-e889-42e0-a45c-79b506b826acItem","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0faItem","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0faItem","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0faItem","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0faItem","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0faItem","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0faItem","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("28e31d35-068f-4674-b70e-c742f9881b27Item","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("28e31d35-068f-4674-b70e-c742f9881b27Item","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("442f00ea-75b7-4fcb-8e39-52cbf4e76e15Item","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("442f00ea-75b7-4fcb-8e39-52cbf4e76e15Item","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("203567c0-bff7-449a-bbe1-21ea9b62567bItem","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("c3d506b0-8541-4086-ac72-b34e5155e1a4Item","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("c3d506b0-8541-4086-ac72-b34e5155e1a4Item","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("date",time)
                    //.addFormDataPart("dateTime",newTime)
                    .build();
        }else if(3 == type){
            body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("sids[]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("sids[]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("sids[]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("sids[]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("sids[]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("sids[]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("sids[]","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("sids[]","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("sids[]","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("sids[]","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("sids[]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("sids[]","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("sids[]","1d94cf00-c1a8-44d4-9468-cdc9d5c60711")
                    .addFormDataPart("sids[]","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("sids[]","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("sids[]","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("sids[]","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("sids[]","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("sids[]","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("sids[]","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("sids[]","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("rids[]","2a38e028-db85-4afa-a682-a6f5e015e231")
                    .addFormDataPart("rids[]","085fab12-2897-4a54-93fe-009288a4b933")
                    .addFormDataPart("rids[]","780470c6-b99c-4ab8-88e5-9155aeef354c")
                    .addFormDataPart("rids[]","58b02ba2-936b-4a20-a090-1b859cdd82a4")
                    .addFormDataPart("rids[]","bffb79ac-e836-476b-b981-78cc752ec751")
                    .addFormDataPart("rids[]","9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784")
                    .addFormDataPart("rids[]","00e1a970-e889-42e0-a45c-79b506b826ac")
                    .addFormDataPart("rids[]","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("rids[]","28e31d35-068f-4674-b70e-c742f9881b27")
                    .addFormDataPart("rids[]","442f00ea-75b7-4fcb-8e39-52cbf4e76e15")
                    .addFormDataPart("rids[]","203567c0-bff7-449a-bbe1-21ea9b62567b")
                    .addFormDataPart("rids[]","c3d506b0-8541-4086-ac72-b34e5155e1a4")
                    .addFormDataPart("r_sids[0][]","2a38e028-db85-4afa-a682-a6f5e015e231")
                    .addFormDataPart("r_sids[0][]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("r_sids[0][]","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("r_sids[1][]","085fab12-2897-4a54-93fe-009288a4b933")
                    .addFormDataPart("r_sids[1][]","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("r_sids[1][]","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("r_sids[2][]","cd11ce0b-5a31-43c1-879a-425866585652")
                    .addFormDataPart("r_sids[2][]","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("r_sids[2][]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("r_sids[3][]","780470c6-b99c-4ab8-88e5-9155aeef354c")
                    .addFormDataPart("r_sids[3][]","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("r_sids[3][]","1d94cf00-c1a8-44d4-9468-cdc9d5c60711")
                    .addFormDataPart("r_sids[4][]","58b02ba2-936b-4a20-a090-1b859cdd82a4")
                    .addFormDataPart("r_sids[4][]","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("r_sids[4][]","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("r_sids[5][]","bffb79ac-e836-476b-b981-78cc752ec751")
                    .addFormDataPart("r_sids[5][]","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("r_sids[5][]","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("r_sids[6][]","9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784")
                    .addFormDataPart("r_sids[6][]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("r_sids[6][]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("r_sids[7][]","00e1a970-e889-42e0-a45c-79b506b826ac")
                    .addFormDataPart("r_sids[7][]","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("r_sids[7][]","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("r_sids[8][]","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("r_sids[8][]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("r_sids[8][]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("r_sids[8][]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("r_sids[8][]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("r_sids[8][]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("r_sids[8][]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("r_sids[9][]","28e31d35-068f-4674-b70e-c742f9881b27")
                    .addFormDataPart("r_sids[9][]","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("r_sids[9][]","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("r_sids[10][]","442f00ea-75b7-4fcb-8e39-52cbf4e76e15")
                    .addFormDataPart("r_sids[10][]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("r_sids[10][]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("r_sids[11][]","203567c0-bff7-449a-bbe1-21ea9b62567b")
                    .addFormDataPart("r_sids[11][]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("r_sids[12][]","c3d506b0-8541-4086-ac72-b34e5155e1a4")
                    .addFormDataPart("r_sids[12][]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("r_sids[12][]","6f2ee392-e989-4069-811f-18924155de18").build();
        }else if(4 == type){
            body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("rids[]","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("r_sids[0][]","2a38e028-db85-4afa-a682-a6f5e015e231")
                    .addFormDataPart("r_sids[0][]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("r_sids[0][]","ca6bb16e-dc1b-403d-8501-358ddd17a82f")
                    .addFormDataPart("r_sids[1][]","085fab12-2897-4a54-93fe-009288a4b933")
                    .addFormDataPart("r_sids[1][]","791e37f2-47dd-44a8-8cdb-1166387fe11a")
                    .addFormDataPart("r_sids[1][]","3c97d443-772c-40f8-8962-cdaf5097b35c")
                    .addFormDataPart("r_sids[2][]","cd11ce0b-5a31-43c1-879a-425866585652")
                    .addFormDataPart("r_sids[2][]","6f2ee392-e989-4069-811f-18924155de18")
                    .addFormDataPart("r_sids[3][]","780470c6-b99c-4ab8-88e5-9155aeef354c")
                    .addFormDataPart("r_sids[3][]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("r_sids[3][]","d30b414c-ba52-453e-84fa-46451e2cb768")
                    .addFormDataPart("r_sids[4][]","58b02ba2-936b-4a20-a090-1b859cdd82a4")
                    .addFormDataPart("r_sids[4][]","240b6457-6037-4f98-ad63-51b011f3313a")
                    .addFormDataPart("r_sids[4][]","faeab8e5-7dbc-4382-bcb3-9879b248315e")
                    .addFormDataPart("r_sids[5][]","bffb79ac-e836-476b-b981-78cc752ec751")
                    .addFormDataPart("r_sids[5][]","6c214d7b-b8df-43ef-8304-5b0443e1e34c")
                    .addFormDataPart("r_sids[5][]","a72c9e60-cf73-4dc9-aa51-b2e98b41bb96")
                    .addFormDataPart("r_sids[6][]","9d2d6eb3-ebca-4fa6-bf5b-6e01e85ba784")
                    .addFormDataPart("r_sids[6][]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("r_sids[6][]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("r_sids[7][]","00e1a970-e889-42e0-a45c-79b506b826ac")
                    .addFormDataPart("r_sids[7][]","ff180f3b-af4b-4f20-ac71-94a707c5ac79")
                    .addFormDataPart("r_sids[7][]","fe06316e-6132-4be8-9dab-e0ac944a2030")
                    .addFormDataPart("r_sids[8][]","3bea4bc8-23c0-4b9d-8eb1-b7e874c7c0fa")
                    .addFormDataPart("r_sids[8][]","1fa76063-ec08-4907-ae54-0f78b57fec08")
                    .addFormDataPart("r_sids[8][]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .addFormDataPart("r_sids[8][]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("r_sids[8][]","8fb74ca0-f1c2-4b43-b93a-d6f4a3f95ea9")
                    .addFormDataPart("r_sids[8][]","67cd5c80-d475-4b3e-b544-d6bd825767a4")
                    .addFormDataPart("r_sids[8][]","35d19f51-df72-4ee7-afcb-1ac93471f273")
                    .addFormDataPart("r_sids[9][]","28e31d35-068f-4674-b70e-c742f9881b27")
                    .addFormDataPart("r_sids[9][]","753da141-1b30-488b-b9b2-eb65a8268a37")
                    .addFormDataPart("r_sids[9][]","3ff41b7b-f0b6-4af7-bc3f-f4b3b48671ee")
                    .addFormDataPart("r_sids[10][]","442f00ea-75b7-4fcb-8e39-52cbf4e76e15")
                    .addFormDataPart("r_sids[10][]","39db8e45-8ecd-4314-addd-bb9d3bfd5e22")
                    .addFormDataPart("r_sids[10][]","e3be2a96-831c-493b-bfa8-8c6ff1aec698")
                    .addFormDataPart("r_sids[11][]","203567c0-bff7-449a-bbe1-21ea9b62567b")
                    .addFormDataPart("r_sids[11][]","d9a3e3d7-3a9e-45ce-9066-d3ee644f2777")
                    .build();
        }
        return body;
    }
}
screen-api/src/main/java/com/moral/api/service/impl/YcGenerateReportServiceImpl.java
New file
@@ -0,0 +1,79 @@
package com.moral.api.service.impl;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.moral.api.entity.FileTable;
import com.moral.api.entity.YcGenerateReport;
import com.moral.api.pojo.enums.FileTableEnum;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportListExt;
import com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportPageExt;
import com.moral.api.mapper.YcGenerateReportMapper;
import com.moral.api.pojo.query.ycgeneratereport.*;
import com.moral.api.pojo.vo.file.FileVo;
import com.moral.api.service.FileTableService;
import com.moral.api.service.YcGenerateReportService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * <p>
 * 盐城报告表 服务实现类
 * </p>
 * deyt template generate
 * @author JI
 * @since 2024-03-26
 */
@Service
public class YcGenerateReportServiceImpl extends ServiceImpl<YcGenerateReportMapper, YcGenerateReport> implements YcGenerateReportService {
    private final FileTableService fileTableService;
    public YcGenerateReportServiceImpl(FileTableService fileTableService) {
        this.fileTableService = fileTableService;
    }
    @Override
    public boolean removeByIdWithFill(Integer id) {
        return SqlHelper.retBool(this.baseMapper.deleteByIdWithFill(new YcGenerateReport().setId(id)));
    }
    @Override
    public YcGenerateReportExt extOne(Integer id) {
        return this.baseMapper.extOne(id);
    }
    @Override
    public List<YcGenerateReportListExt> extList(YcGenerateReportListCond ycGenerateReportListCond) {
        return this.baseMapper.extList(ycGenerateReportListCond);
    }
    @Override
    public Page<YcGenerateReportPageExt> extPage(YcGenerateReportPageCond ycGenerateReportPageCond) {
        Page<YcGenerateReportPageExt> pageExtPage =  this.baseMapper.extPage(ycGenerateReportPageCond.getPage().convertPage(), ycGenerateReportPageCond);
        return pageExtPage;
    }
    @Override
    public boolean save(YcGenerateReportAddCond ycGenerateReportAddCond) {
        return this.save(ycGenerateReportAddCond.convert());
    }
    @Override
    public boolean update(YcGenerateReportUpdateCond ycGenerateReportUpdateCond) {
        return this.updateById(ycGenerateReportUpdateCond.convert());
    }
    @Override
    @Transactional
    public boolean fileUpload(YcGenerateReportUploadCond uploadCond) {
        fileTableService.upDateResult(uploadCond.getList(),uploadCond.getId(), FileTableEnum.YC_GENERATEEXCEL.value);
        return true;
    }
}
screen-api/src/main/resources/mapper/FileTableMapper.xml
@@ -17,4 +17,9 @@
                    <result column="create_time" property="createTime" />
        </resultMap>
    <select id="fileList" resultType="com.moral.api.pojo.vo.file.FileVo">
        select file_id,file_name,file_type from file_table where
        file_module = 1250301 and relation_id= #{relation_id} and is_del = 0
        order by file_id desc
    </select>
</mapper>
screen-api/src/main/resources/mapper/YcGenerateReportMapper.xml
New file
@@ -0,0 +1,77 @@
<?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.YcGenerateReportMapper">
    <!-- 通用查询映射结果 deyt template generate -->
    <resultMap id="BaseResultMap" type="com.moral.api.entity.YcGenerateReport">
        <id column="id" property="id" />
        <result column="report_time" property="reportTime" />
        <result column="report_content" property="reportContent" />
        <result column="original_content" property="originalContent" />
        <result column="invalid_reason" property="invalidReason" />
    </resultMap>
    <!-- 通用查询映射结果 deyt template generate -->
    <resultMap id="BaseResultMyMap" type="com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportPageExt">
        <id column="id" property="id" />
        <result column="report_time" property="reportTime" />
        <result column="report_content" property="reportContent" />
        <result column="original_content" property="originalContent" />
        <result column="is_del" property="isDel" />
        <result column="is_invalid" property="isInvalid" />
        <result column="invalid_reason" property="invalidReason" />
        <result column="create_id" property="createId" />
        <result column="create_name" property="createName" />
        <result column="create_time" property="createTime" />
        <result column="update_id" property="updateId" />
        <result column="update_name" property="updateName" />
        <result column="update_time" property="updateTime" />
        <collection property="list" ofType="com.moral.api.pojo.vo.file.FileVo" select="com.moral.api.mapper.FileTableMapper.fileList" column="id"></collection>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, report_time, report_content, original_content, is_del, is_invalid, invalid_reason, create_id, create_name, create_time, update_id, update_name, update_time
    </sql>
    <!-- 通用查询结果列 -->
    <sql id="YcGenerateReport_Column_List">
        ycgeneratereport.id, ycgeneratereport.report_time, ycgeneratereport.report_content, ycgeneratereport.original_content, ycgeneratereport.is_del, ycgeneratereport.is_invalid, ycgeneratereport.invalid_reason, ycgeneratereport.create_id, ycgeneratereport.create_name, ycgeneratereport.create_time, ycgeneratereport.update_id, ycgeneratereport.update_name, ycgeneratereport.update_time
    </sql>
    <select id="extOne" resultType="com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportExt">
        SELECT
        <include refid="YcGenerateReport_Column_List"/>
        FROM yc_generate_report ycgeneratereport
        where ycgeneratereport.id = #{id}
    </select>
    <select id="extList" resultType="com.moral.api.pojo.ext.ycgeneratereport.YcGenerateReportListExt">
        SELECT
        <include refid="YcGenerateReport_Column_List"/>
        FROM yc_generate_report ycgeneratereport
        <where>
            1 = 1
            <if test="ycgeneratereport.id != null and ycgeneratereport.id != 0">
                and ycgeneratereport.id = #{ycgeneratereport.id}
            </if>
        </where>
    </select>
    <select id="extPage" resultMap="BaseResultMyMap">
        SELECT
        <include refid="YcGenerateReport_Column_List"/>
        FROM yc_generate_report ycgeneratereport
        <where>
            1 = 1
            <if test="ycgeneratereport.startTime != null and ycgeneratereport.startTime != '' ">
                and date(ycgeneratereport.report_time) <![CDATA[>=]]> #{ycgeneratereport.startTime}
            </if>
            <if test="ycgeneratereport.endTime != null and ycgeneratereport.endTime !='' ">
                and date(ycgeneratereport.report_time) <![CDATA[<=]]>  #{ycgeneratereport.endTime}
            </if>
        </where>
        order by ycgeneratereport.report_time desc
    </select>
</mapper>
screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -1869,6 +1869,13 @@
        String lastYear = getDateAddYear(DateUtils.dateToDateString(getDate(), DateUtils.yyyy), -1);
        return DateUtils.getDate(lastYear, DateUtils.yyyy);
    }
    //去年指定日期
    public static Date getFirstDayOfLastYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, -1);
        return calendar.getTime();
    }
    //获取一天中每个小时的前后一小时集合
    public static Map<Date, List<Integer>> getBeforeAndAfterHourDate(Date date) {