From c5b1a331a238ef37818d8bcebca1226b9fe1a559 Mon Sep 17 00:00:00 2001
From: cjl <909710561@qq.com>
Date: Thu, 28 Mar 2024 15:47:56 +0800
Subject: [PATCH] fix:盐城报告查询

---
 screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportPageExt.java      |   98 ++
 screen-api/src/main/java/com/moral/api/service/YcGenerateReportService.java                        |   67 +
 screen-api/src/main/java/com/moral/api/mapper/FileTableMapper.java                                 |    5 
 screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportPageVo.java        |   79 +
 screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportListExt.java      |   22 
 screen-api/src/main/resources/mapper/YcGenerateReportMapper.xml                                    |   77 +
 screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUploadCond.java |   35 
 screen-api/pom.xml                                                                                 |   30 
 screen-api/src/main/java/com/moral/api/entity/YcGenerateReport.java                                |   56 +
 screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportListCond.java   |   28 
 screen-api/src/main/java/com/moral/api/controller/YcReptilesController.java                        |  714 +++++++++++++++++
 screen-api/src/main/java/com/moral/api/pojo/vo/yc/SixConcentrationsVo.java                         |   88 ++
 screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportListVo.java        |   80 ++
 screen-common/src/main/java/com/moral/util/DateUtils.java                                          |    7 
 screen-api/src/main/java/com/moral/api/mapper/YcGenerateReportMapper.java                          |   54 +
 screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportAddCond.java    |   73 +
 screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportPageCond.java   |   34 
 screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportVo.java            |   75 +
 screen-api/src/main/java/com/moral/api/service/impl/YcGenerateReportServiceImpl.java               |   79 +
 screen-api/src/main/java/com/moral/api/service/impl/ReptileResultServiceImpl.java                  |  487 ++++++++++++
 screen-api/src/main/java/com/moral/api/service/ReptileResultService.java                           |   16 
 screen-api/src/main/java/com/moral/api/pojo/vo/yc/AqiResultVo.java                                 |   80 ++
 screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportExt.java          |   21 
 screen-api/src/main/java/com/moral/api/pojo/enums/FileTableEnum.java                               |    5 
 screen-api/src/main/resources/mapper/FileTableMapper.xml                                           |    5 
 screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUpdateCond.java |   73 +
 26 files changed, 2,387 insertions(+), 1 deletions(-)

diff --git a/screen-api/pom.xml b/screen-api/pom.xml
index 9a39a17..3c34250 100644
--- a/screen-api/pom.xml
+++ b/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>
diff --git a/screen-api/src/main/java/com/moral/api/controller/YcReptilesController.java b/screen-api/src/main/java/com/moral/api/controller/YcReptilesController.java
new file mode 100644
index 0000000..ed76aab
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/controller/YcReptilesController.java
@@ -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("������������������������������!");
+        }
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/entity/YcGenerateReport.java b/screen-api/src/main/java/com/moral/api/entity/YcGenerateReport.java
new file mode 100644
index 0000000..35593f7
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/entity/YcGenerateReport.java
@@ -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;
+
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/FileTableMapper.java b/screen-api/src/main/java/com/moral/api/mapper/FileTableMapper.java
index 6486afb..1860797 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/FileTableMapper.java
+++ b/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);
 }
diff --git a/screen-api/src/main/java/com/moral/api/mapper/YcGenerateReportMapper.java b/screen-api/src/main/java/com/moral/api/mapper/YcGenerateReportMapper.java
new file mode 100644
index 0000000..d57fc56
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/mapper/YcGenerateReportMapper.java
@@ -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);
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/FileTableEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/FileTableEnum.java
index ca9b0bf..38f05cf 100644
--- a/screen-api/src/main/java/com/moral/api/pojo/enums/FileTableEnum.java
+++ b/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
diff --git a/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportExt.java b/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportExt.java
new file mode 100644
index 0000000..839cf8e
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportExt.java
@@ -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 {
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportListExt.java b/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportListExt.java
new file mode 100644
index 0000000..5ae3f3a
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportListExt.java
@@ -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 {
+
+}
+
diff --git a/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportPageExt.java b/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportPageExt.java
new file mode 100644
index 0000000..abb1139
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/ext/ycgeneratereport/YcGenerateReportPageExt.java
@@ -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;
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportAddCond.java b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportAddCond.java
new file mode 100644
index 0000000..630a08e
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportAddCond.java
@@ -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;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportListCond.java b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportListCond.java
new file mode 100644
index 0000000..f652064
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportListCond.java
@@ -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;
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportPageCond.java b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportPageCond.java
new file mode 100644
index 0000000..fbb669e
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportPageCond.java
@@ -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;
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUpdateCond.java b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUpdateCond.java
new file mode 100644
index 0000000..32d3c41
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUpdateCond.java
@@ -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;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUploadCond.java b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUploadCond.java
new file mode 100644
index 0000000..6c8d6ec
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/query/ycgeneratereport/YcGenerateReportUploadCond.java
@@ -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;
+
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/yc/AqiResultVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/yc/AqiResultVo.java
new file mode 100644
index 0000000..e3a2b73
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/yc/AqiResultVo.java
@@ -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);*/
+
+    }
+}
+
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/yc/SixConcentrationsVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/yc/SixConcentrationsVo.java
new file mode 100644
index 0000000..be4d729
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/yc/SixConcentrationsVo.java
@@ -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;
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportListVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportListVo.java
new file mode 100644
index 0000000..2991635
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportListVo.java
@@ -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());
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportPageVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportPageVo.java
new file mode 100644
index 0000000..a1774bc
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportPageVo.java
@@ -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;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportVo.java
new file mode 100644
index 0000000..87dee2f
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/ycgeneratereport/YcGenerateReportVo.java
@@ -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;
+    }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/ReptileResultService.java b/screen-api/src/main/java/com/moral/api/service/ReptileResultService.java
new file mode 100644
index 0000000..33e274a
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/ReptileResultService.java
@@ -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);
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/YcGenerateReportService.java b/screen-api/src/main/java/com/moral/api/service/YcGenerateReportService.java
new file mode 100644
index 0000000..f6897d7
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/YcGenerateReportService.java
@@ -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);
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/ReptileResultServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/ReptileResultServiceImpl.java
new file mode 100644
index 0000000..9997307
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/ReptileResultServiceImpl.java
@@ -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;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/YcGenerateReportServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/YcGenerateReportServiceImpl.java
new file mode 100644
index 0000000..6affcb2
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/YcGenerateReportServiceImpl.java
@@ -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;
+    }
+}
diff --git a/screen-api/src/main/resources/mapper/FileTableMapper.xml b/screen-api/src/main/resources/mapper/FileTableMapper.xml
index 3f57c01..7d300d9 100644
--- a/screen-api/src/main/resources/mapper/FileTableMapper.xml
+++ b/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>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/YcGenerateReportMapper.xml b/screen-api/src/main/resources/mapper/YcGenerateReportMapper.xml
new file mode 100644
index 0000000..fd96cec
--- /dev/null
+++ b/screen-api/src/main/resources/mapper/YcGenerateReportMapper.xml
@@ -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>
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 9ebd49a..cca005b 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/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) {

--
Gitblit v1.8.0