You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
5.8 KiB
Java
150 lines
5.8 KiB
Java
package com.glxp.api.controller.sync;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.github.pagehelper.PageInfo;
|
|
import com.glxp.api.common.enums.ResultEnum;
|
|
import com.glxp.api.common.res.BaseResponse;
|
|
import com.glxp.api.common.util.ResultVOUtils;
|
|
import com.glxp.api.entity.sync.BasicDownloadStatusEntity;
|
|
import com.glxp.api.http.sync.SpGetHttpClient;
|
|
import com.glxp.api.req.sync.BasicDownloadRequest;
|
|
import com.glxp.api.req.system.DeleteRequest;
|
|
import com.glxp.api.res.PageSimpleResponse;
|
|
import com.glxp.api.service.sync.BasicDownloadService;
|
|
import com.glxp.api.util.RedisUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.servlet.ServletOutputStream;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.IOException;
|
|
import java.net.URLEncoder;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
@Slf4j
|
|
@RestController
|
|
public class SpsSyncDownloadController {
|
|
|
|
@Resource
|
|
BasicDownloadService basicDownloadService;
|
|
@Resource
|
|
RedisUtil redisUtil;
|
|
@Resource
|
|
SpGetHttpClient spGetHttp;
|
|
|
|
|
|
@GetMapping("/spssync/download/basic/udiinfo/getStatus")
|
|
public BaseResponse getStatus(BasicDownloadRequest basicDownloadRequest) {
|
|
List<BasicDownloadStatusEntity> basicDownloadStatusEntities = basicDownloadService.filterDownloadStatus(basicDownloadRequest);
|
|
return ResultVOUtils.success(basicDownloadStatusEntities);
|
|
}
|
|
|
|
@GetMapping("/spssync/download/basic/udiinfo/filter")
|
|
public BaseResponse filterStatus(BasicDownloadRequest basicDownloadRequest) {
|
|
List<BasicDownloadStatusEntity> basicDownloadStatusEntities = basicDownloadService.filterDownloadStatus(basicDownloadRequest);
|
|
PageInfo<BasicDownloadStatusEntity> pageInfo;
|
|
pageInfo = new PageInfo<>(basicDownloadStatusEntities);
|
|
PageSimpleResponse<BasicDownloadStatusEntity> pageSimpleResponse = new PageSimpleResponse<>();
|
|
pageSimpleResponse.setTotal(pageInfo.getTotal());
|
|
pageSimpleResponse.setList(basicDownloadStatusEntities);
|
|
return ResultVOUtils.success(pageSimpleResponse);
|
|
}
|
|
|
|
|
|
@PostMapping("/spssync/download/basic/udiinfo/deleteByStatus")
|
|
public BaseResponse deleteByStatus(@RequestBody DeleteRequest deleteRequest) {
|
|
|
|
boolean b = basicDownloadService.deleteById(deleteRequest.getId());
|
|
redisUtil.del(deleteRequest.getId());
|
|
if (b)
|
|
return ResultVOUtils.success("删除成功!");
|
|
else
|
|
return ResultVOUtils.error(500, "删除失败!");
|
|
}
|
|
|
|
@PostMapping("/spssync/download/basic/udiinfo/updateStatus")
|
|
public BaseResponse updateStatus(@RequestBody BasicDownloadStatusEntity basicDownloadStatusEntity) {
|
|
|
|
basicDownloadStatusEntity.setEndTime(new Date());
|
|
basicDownloadStatusEntity.setUpdateTime(new Date());
|
|
boolean b = basicDownloadService.updateDownloadStatus(basicDownloadStatusEntity);
|
|
if (b)
|
|
return ResultVOUtils.success("更新成功!");
|
|
else
|
|
return ResultVOUtils.error(500, "更新成功!");
|
|
}
|
|
|
|
@GetMapping("/spssync/download/basic/connect/test")
|
|
public BaseResponse testConnect() {
|
|
return spGetHttp.testConnect();
|
|
|
|
}
|
|
|
|
@GetMapping("/sps/sync/download/info/file")
|
|
public void downloadFile(HttpServletResponse response, String id){
|
|
if (StrUtil.isBlank(id)) {
|
|
throw new RuntimeException("缺少唯一标识");
|
|
}
|
|
BasicDownloadStatusEntity info = basicDownloadService.getById(id);
|
|
if (info == null) {
|
|
throw new RuntimeException("数据不存在");
|
|
}
|
|
if (StrUtil.isBlank(info.getCacheFilePath())) {
|
|
throw new RuntimeException("文件未生成");
|
|
}
|
|
File file = new File(info.getCacheFilePath());
|
|
if (!file.exists()) {
|
|
throw new RuntimeException("文件丢失");
|
|
}
|
|
String[] split = info.getCacheFilePath().split("/");
|
|
String enFileName = URLEncoder.encode(split[split.length - 1], StandardCharsets.UTF_8);
|
|
// 设值返回文件属性,浏览器会根据属性调用下载文件方法
|
|
response.addHeader("Content-Disposition", "attachment;filename=" + enFileName);
|
|
// 前端获取文件名,需要解码
|
|
response.addHeader("downLoadName", enFileName);
|
|
// 定义输出流
|
|
ServletOutputStream outputStream = null;
|
|
FileInputStream fileInputStream = null;
|
|
try {
|
|
outputStream = response.getOutputStream();
|
|
// 定义输出类型为二进制流输出
|
|
response.setContentType("application/octet-stream");
|
|
fileInputStream = new FileInputStream(file);
|
|
byte[] bytes = new byte[fileInputStream.available()];
|
|
fileInputStream.read(bytes);
|
|
// 把流写入response
|
|
outputStream.write(bytes);
|
|
// flush落盘
|
|
outputStream.flush();
|
|
// 关闭输出流
|
|
outputStream.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
} finally {
|
|
if (outputStream != null) {
|
|
try {
|
|
outputStream.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
if (fileInputStream != null) {
|
|
try {
|
|
fileInputStream.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|