yxm
2024-06-25 1fb2394da586317c75762359574fd10270ce731f
水库普查、堤防普查白蚁防治图片视频压缩导出v20240625
10 files modified
2 files added
394 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/TbDykeInvestigationController.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/TbResGeneralInvestigationController.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeInvestigationMapper.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeInvestigationMapper.xml 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResGeneralInvestigationMapper.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResGeneralInvestigationMapper.xml 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/ITbDykeInvestigationService.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/ITbResGeneralInvestigationService.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbDykeInvestigationServiceImpl.java 43 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbResGeneralInvestigationServiceImpl.java 50 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/DownloadZipUtils.java 231 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ImageAndVideoVO.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/TbDykeInvestigationController.java
@@ -24,6 +24,7 @@
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -134,6 +135,15 @@
        return R.data(list);
    }
    @GetMapping("/downloadZip")
    @ApiOperation(value = "批量导出白蚁普查的图片视频zip文件")
    public R downloadZip(Query query,String type) throws IOException {
        List<String> msg = tbDykeInvestigationService.downZip(Condition.getPage(query),type);
        return  R.data(msg);
    }
    @GetMapping("/statisticsPie")
    public R statisticsPie(StatisticsParams statisticsParams){
        StatisticsPie statisticsPie = tbDykeInvestigationService.statisticsPie(statisticsParams);
@@ -146,4 +156,6 @@
        return R.data(list);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/TbResGeneralInvestigationController.java
@@ -24,9 +24,11 @@
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -134,6 +136,15 @@
        return R.data(list);
    }
    @GetMapping("/downloadZip")
    @ApiOperation(value = "批量导出白蚁普查的图片视频zip文件")
    public R downloadZip(Query query,String type) throws IOException {
    List<String> msg = tbResGeneralInvestigationService.downZip(Condition.getPage(query),type);
        return  R.data(msg);
    }
    @GetMapping("/statisticsPie")
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeInvestigationMapper.java
@@ -5,7 +5,9 @@
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsBar;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsParams;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsPie;
import cn.gistack.sm.sjztmd.vo.ImageAndVideoVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -28,4 +30,6 @@
    List<StatisticsBar> getProvinceStatisticsBar(@Param("params") StatisticsParams statisticsParams);
    List<StatisticsBar> getStatisticsBar(@Param("params") StatisticsParams statisticsParams);
    List<ImageAndVideoVO> getIamgeAndVideoUrl(IPage<ImageAndVideoVO> page);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeInvestigationMapper.xml
@@ -288,4 +288,8 @@
            </if>
        </if>
    </select>
    <select id="getIamgeAndVideoUrl" resultType="cn.gistack.sm.sjztmd.vo.ImageAndVideoVO">
        select "image_urls" as imagesUrl ,"video_urls" as videosUrl from sjzt_md."tb_dyke_investigation"
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResGeneralInvestigationMapper.java
@@ -6,7 +6,9 @@
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsParams;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsPie;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsTable;
import cn.gistack.sm.sjztmd.vo.ImageAndVideoVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -35,4 +37,8 @@
    List<StatisticsBar> getStatisticsBar(@Param("params") StatisticsParams statisticsParams);
    List<StatisticsTable> getStatisticsTable(@Param("params") StatisticsParams statisticsParams);
    List<ImageAndVideoVO> getIamgeAndVideoUrl(IPage<ImageAndVideoVO> page);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResGeneralInvestigationMapper.xml
@@ -527,5 +527,8 @@
        order by aab."guid"
    </select>
    <select id="getIamgeAndVideoUrl" resultType="cn.gistack.sm.sjztmd.vo.ImageAndVideoVO">
        select "image_urls" as imagesUrl ,"video_urls" as videosUrl from sjzt_md."tb_res_general_investigation"
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/ITbDykeInvestigationService.java
@@ -5,11 +5,14 @@
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsBar;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsParams;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsPie;
import cn.gistack.sm.sjztmd.vo.ImageAndVideoVO;
import cn.gistack.sm.sjztmd.vo.TbDykeInvestigationParam;
import cn.gistack.sm.sjztmd.vo.TbResGeneralInvestigationParam;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.tool.api.R;
import java.io.IOException;
import java.util.List;
/**
@@ -21,6 +24,13 @@
public interface ITbDykeInvestigationService extends IService<TbDykeInvestigation> {
    /**
     *
     * @param page
     * @return
     */
     List<String> downZip(IPage<ImageAndVideoVO> page,String type) throws IOException;
    /**
     * 自定义保存或者修改对象方法
     * @param entity
     * @return
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/ITbResGeneralInvestigationService.java
@@ -5,10 +5,14 @@
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsParams;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsPie;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsTable;
import cn.gistack.sm.sjztmd.vo.AttResBaseGeneralInvestigationVO;
import cn.gistack.sm.sjztmd.vo.ImageAndVideoVO;
import cn.gistack.sm.sjztmd.vo.TbResGeneralInvestigationParam;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.tool.api.R;
import java.io.IOException;
import java.util.List;
/**
@@ -43,4 +47,5 @@
    List<StatisticsTable> statisticsTable(StatisticsParams statisticsParams);
    List<String> downZip(IPage<ImageAndVideoVO> page,String type) throws IOException;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbDykeInvestigationServiceImpl.java
@@ -7,10 +7,13 @@
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsBar;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsParams;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsPie;
import cn.gistack.sm.sjztmd.util.DownloadZipUtils;
import cn.gistack.sm.sjztmd.vo.ImageAndVideoVO;
import cn.gistack.sm.sjztmd.vo.TbDykeInvestigationParam;
import cn.gistack.sm.sjztmd.vo.TbResGeneralInvestigationParam;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -20,6 +23,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
@@ -40,6 +46,12 @@
    @Autowired
    private IAttAdBaseService attAdBaseService;
    @Autowired
    private HttpServletRequest request;
    @Autowired
    private HttpServletResponse response;
    @Override
    @Transactional
@@ -225,4 +237,35 @@
        return list;
    }
    /**
     *
     * @param page
     * @return 操作状态
     */
    @Override
    public List<String> downZip(IPage<ImageAndVideoVO> page,String type) throws IOException {
        List<ImageAndVideoVO> iamgeAndVideoUrls;
        if (type.equals("1")) {
            iamgeAndVideoUrls = baseMapper.getIamgeAndVideoUrl(page);
        }else {
            iamgeAndVideoUrls = baseMapper.getIamgeAndVideoUrl(null);
        }
        List<String> urls = new ArrayList<>();
        for (ImageAndVideoVO iamgeAndVideoUrl : iamgeAndVideoUrls) {
            urls.add(iamgeAndVideoUrl.getImagesUrl());
            urls.add(iamgeAndVideoUrl.getVideosUrl());
        }
        List<String> urlss = DownloadZipUtils.getUrls(urls);
        if (urlss.isEmpty()) {
            return null;
        }else {
            // 打印提取的URLs
            for (String url1 : urlss) {
                DownloadZipUtils.downloadFile(url1);
            }
            DownloadZipUtils.downloadZip(request, response,0);
            return urlss;
        }
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbResGeneralInvestigationServiceImpl.java
@@ -1,5 +1,6 @@
package cn.gistack.sm.sjztmd.service.impl;
import cn.gistack.sm.sjztmd.util.DownloadZipUtils;
import cn.gistack.sm.sjztmd.entity.TbResGeneralInvestigation;
import cn.gistack.sm.sjztmd.entity.TbResGeneralInvestigationState;
import cn.gistack.sm.sjztmd.mapper.TbResGeneralInvestigationMapper;
@@ -10,10 +11,19 @@
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsPie;
import cn.gistack.sm.sjztmd.statisticsVO.StatisticsTable;
import cn.gistack.sm.sjztmd.util.CalculateUtils;
import cn.gistack.sm.sjztmd.util.DownloadZipUtils;
import cn.gistack.sm.sjztmd.vo.AttResBaseGeneralInvestigationVO;
import cn.gistack.sm.sjztmd.vo.ImageAndVideoVO;
import cn.gistack.sm.sjztmd.vo.TbResGeneralInvestigationParam;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.alibaba.nacos.shaded.com.google.gson.JsonArray;
import com.alibaba.nacos.shaded.com.google.gson.JsonElement;
import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.val;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
@@ -22,6 +32,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
@@ -39,6 +52,11 @@
    @Autowired
    private ITbResGeneralInvestigationStateService tbResGeneralInvestigationStateService;
    @Autowired
    private HttpServletRequest request;
    @Autowired
    private HttpServletResponse response;
    @Override
    @Transactional
@@ -157,4 +175,36 @@
        return list;
    }
    @Override
    public List<String> downZip(IPage<ImageAndVideoVO> page,String type) throws IOException {
        List<String> urls = new ArrayList<>();
        List<ImageAndVideoVO> iamgeAndVideoUrls;
        if (type.equals("1")) {
            iamgeAndVideoUrls = baseMapper.getIamgeAndVideoUrl(page);
        }else {
            iamgeAndVideoUrls = baseMapper.getIamgeAndVideoUrl(null);
        }
        for (ImageAndVideoVO iamgeAndVideoUrl : iamgeAndVideoUrls) {
            urls.add(iamgeAndVideoUrl.getImagesUrl());
            urls.add(iamgeAndVideoUrl.getVideosUrl());
        }
        List<String> urlss =DownloadZipUtils.getUrls(urls);
        if (urlss.isEmpty()) {
            return null;
        }else {
            // 打印提取的URLs
            for (String url1 : urlss) {
                //System.out.println(url1+"ssss");
                DownloadZipUtils.downloadFile(url1);
            }
            DownloadZipUtils.downloadZip(request, response,1);
            return urlss;
        }
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/DownloadZipUtils.java
New file
@@ -0,0 +1,231 @@
package cn.gistack.sm.sjztmd.util;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.alibaba.nacos.shaded.com.google.gson.JsonArray;
import com.alibaba.nacos.shaded.com.google.gson.JsonElement;
import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public  class DownloadZipUtils {
    //private static Logger logger = LoggerFactory.getLogger(Test.class);
    /**
     * 需要压缩的文件夹
     */
    private final static String downloadDir = "download";
    /**
     * 打包后的文件夹
     */
    private final static String downloadZip = "downloadZip";
    public static HttpServletRequest request;
    public static HttpServletResponse response;
    /**
     *
     * @param urls
     * @return 获取url
     */
    public static List<String> getUrls(List<String> urls){
        List<String> urlss = new ArrayList<>();
        for (String url : urls) {
            Gson gson = new Gson();
            JsonArray jsonArray = gson.fromJson(url, JsonArray.class);
            //解析json数据提取ur
            for (JsonElement element : jsonArray) {
                JsonObject jsonObject = element.getAsJsonObject();
                String urlsss = jsonObject.get("url").getAsString();
                urlss.add(urlsss);
            }
        }
        return urlss;
    }
    /**
     * 通过图片url下载图片到指定文件夹
     * @param downloadUrl    图片url
     */
    public static void  downloadFile(String downloadUrl ) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            //获取连接
            URL url=new URL(downloadUrl);
            HttpURLConnection connection=(HttpURLConnection)url.openConnection();
            //连接超时时间
            //connection.setConnectTimeout(3*1000);
            //设置请求头
            //connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36");
            //获取输入流
            inputStream=connection.getInputStream();
            //System.out.println("竟来了");
            File fileDir=new File(downloadDir);
            if(!fileDir.exists()){//如果文件夹不存在
                fileDir.mkdir();//创建文件夹
            }
            //截取文件名称
            String filePath = downloadDir+"/" + downloadUrl.substring(downloadUrl.lastIndexOf("/"));
            //System.out.println(filePath);
            File file = new File(filePath);
            file.createNewFile();//创建文件,存在覆盖
            outputStream = new FileOutputStream(file);
            int len = 0;
            byte[] buf = new byte[16384];
            while ((len = inputStream.read(buf, 0, 16384)) != -1) {
                outputStream.write(buf, 0, len);
            }
            outputStream.flush();
        } catch (Exception e) {
            //logger.error("文件下载出错:" + e);
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                //logger.error("关闭流出错:" + e);
            }
        }
    }
    /**
     * 下载压缩包
     */
    public static void downloadZip(HttpServletRequest request, HttpServletResponse res,Integer  logoType) throws IOException {
        OutputStream out = null;
        File zip = null;
        String zipName;
        try{
            //多个文件进行压缩,批量打包下载文件
            //创建压缩文件需要的空的zip包
            if (logoType==1) {
                zipName="水库白蚁防治图片视频资料.zip";
            }else {
                zipName="堤坝白蚁防治图片视频资料.zip";
            }
            String zipFilePath = downloadZip+File.separator+zipName;
            File fileDir=new File(downloadZip);
            if(!fileDir.exists()){//如果文件夹不存在
                fileDir.mkdir();//创建文件夹
            }
            //压缩文件
            zip = new File(zipFilePath);
            zip.createNewFile();//创建文件,存在覆盖
            //创建zip文件输出流
            ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zip));
            zipFile(downloadDir, zos);
            zos.close();
            //将打包后的文件写到客户端,输出的方法同上,使用缓冲流输出
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(zipFilePath));
            byte[] buff = new byte[bis.available()];
            bis.read(buff);
            bis.close();
            //IO流实现下载的功能
            res.setCharacterEncoding("UTF-8"); //设置编码字符
            res.setContentType("application/json;charset=utf-8"); //设置下载内容类型application/octet-stream(二进制流,未知文件类型);
            //防止文件名乱码
            String userAgent = request.getHeader("USER-AGENT");
            if (userAgent.contains("Firefox") || userAgent.contains("firefox")) {//火狐浏览器
                zipName = new String(zipName.getBytes(), "ISO8859-1");
            } else {
                zipName = URLEncoder.encode(zipName, "UTF-8");//其他浏览器
            }
            res.setHeader("Content-disposition", "attachment;filename="+zipName);//设置下载的压缩文件名称
            out = res.getOutputStream();   //创建页面返回方式为输出流,会自动弹出下载框
            out.write(buff);//输出数据文件
            //System.out.println("压缩包下载完成");
        }catch(Exception e) {
            //logger.error("压缩包下载出错:" + e);
        }finally {
            if(out != null){
                out.flush();//释放缓存
                //out.close();//关闭输出流
            }
            //下载完后删除文件夹和压缩包
            File fileDir = new File(downloadDir);
            FileUtils.deleteDirectory(fileDir);
            if(zip != null){
                zip.delete();
            }
        }
    }
    /**
     * 压缩文件
     * @param filePath    需要压缩的文件夹
     * @param zos    zip文件输出流
     */
    private static void zipFile(String filePath, ZipOutputStream zos) throws IOException {
        File inputFile = new File(filePath);  //根据文件路径创建文件
        if(inputFile.exists()) { //判断文件是否存在
            if (inputFile.isFile()) {  //判断是否属于文件,还是文件夹
                //创建输入流读取文件
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile));
                //将文件写入zip内,即将文件进行打包
                zos.putNextEntry(new ZipEntry(inputFile.getName()));
                //写入文件的方法,同上
                int size = 0;
                byte[] buffer = new byte[16384];  //设置读取数据缓存大小
                while ((size = bis.read(buffer)) > 0) {
                    zos.write(buffer, 0, size);
                }
                //关闭输入输出流
                zos.closeEntry();
                bis.close();
            } else {  //如果是文件夹,则使用穷举的方法获取文件,写入zip
                try {
                    File[] files = inputFile.listFiles();
                    for (File fileTem:files) {
                        zipFile(fileTem.toString(),zos);
                    }
                } catch (Exception e) {
                    //logger.error("压缩文件出错:" + e);
                }
            }
        }
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/ImageAndVideoVO.java
New file
@@ -0,0 +1,15 @@
package cn.gistack.sm.sjztmd.vo;
import lombok.Data;
@Data
public class ImageAndVideoVO {
    private String imagesUrl;//图片url
    private String videosUrl;//视频url
}