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.
udi-wms-java/src/main/java/com/glxp/api/controller/sync/SpsSyncDownloadController.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);
}
}
}
}
}