diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/external/MhFileClient.java b/hz-pm-api/src/main/java/com/hz/pm/api/external/MhFileClient.java
index 483d036..32aab68 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/external/MhFileClient.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/external/MhFileClient.java
@@ -1,10 +1,21 @@
package com.hz.pm.api.external;
+import cn.hutool.core.lang.TypeReference;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import com.hz.pm.api.external.model.dto.MhFileInfoDTO;
+import com.hz.pm.api.external.model.dto.MhRetDTO;
+import com.ningdatech.basic.exception.BizException;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.Collection;
+import java.util.List;
/**
*
@@ -14,20 +25,40 @@ import java.util.Collection;
* @author WendyYang
* @since 20:24 2023/12/28
*/
+@Slf4j
@Component
@RequiredArgsConstructor
public class MhFileClient {
+ private static final int TIMEOUT_MILLS = 5000;
- @Value("${mh.file-down-url:}")
+ @Value("${mh.file.down-url:}")
private String fileDownUrl;
- @Value("${mh.file-detail-url:}")
- private String fileDetailUrl;
-
- public void getFileDetail(Collection fileIds) {
+ @Value("${mh.file.detail-url:}")
+ private String fileDetailUrl;
+ public void download(String fileId, HttpServletResponse response) {
+ String fileUrl = fileDownUrl + fileId;
+ try (ServletOutputStream stream = response.getOutputStream()) {
+ long size = HttpUtil.download(fileUrl, stream, true);
+ log.info("下载文件:{},大小为:{}", fileId, size);
+ } catch (IOException e) {
+ log.error("信创平台文件下载异常:{}", fileId, e);
+ throw BizException.wrap("下载文件失败");
+ }
}
+ public List listFileInfo(String fileIds) {
+ String url = fileDetailUrl + "?ids=" + fileIds;
+ String body = HttpUtil.get(url, TIMEOUT_MILLS);
+ MhRetDTO> ret = JSONUtil.toBean(body,
+ new TypeReference>>() {
+ }, false);
+ if (ret.isOk()) {
+ return ret.getData();
+ }
+ throw BizException.wrap("获取文件详情");
+ }
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/external/controller/MhFileController.java b/hz-pm-api/src/main/java/com/hz/pm/api/external/controller/MhFileController.java
new file mode 100644
index 0000000..07acca9
--- /dev/null
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/external/controller/MhFileController.java
@@ -0,0 +1,43 @@
+package com.hz.pm.api.external.controller;
+
+import com.hz.pm.api.external.MhFileClient;
+import com.hz.pm.api.external.model.dto.MhFileInfoDTO;
+import com.ningdatech.log.annotation.WebLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ *
+ * MhFileController
+ *
+ *
+ * @author WendyYang
+ * @since 09:47 2023/12/29
+ */
+@Api("信创平台文件管理")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/v1/mh/file")
+public class MhFileController {
+
+ private final MhFileClient mhFileClient;
+
+ @GetMapping("/download/{fileId}")
+ @WebLog("下载信创平台文件")
+ @ApiOperation("下载信创平台文件")
+ public void download(@PathVariable String fileId, HttpServletResponse response) {
+ mhFileClient.download(fileId, response);
+ }
+
+ @GetMapping("/listFileInfo")
+ @ApiOperation("获取文件详情")
+ public List listFileInfo(@RequestParam String fileIds) {
+ return mhFileClient.listFileInfo(fileIds);
+ }
+
+}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhFileInfoDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhFileInfoDTO.java
new file mode 100644
index 0000000..6531319
--- /dev/null
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhFileInfoDTO.java
@@ -0,0 +1,48 @@
+package com.hz.pm.api.external.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * MhFileInfoDTO
+ *
+ *
+ * @author WendyYang
+ * @since 09:32 2023/12/29
+ */
+@Data
+public class MhFileInfoDTO {
+
+ @ApiModelProperty("文件ID")
+ private String fileId;
+
+ @ApiModelProperty("文件bucket")
+ private String fileBucket;
+
+ @ApiModelProperty("文件路径")
+ private String filePath;
+
+ @ApiModelProperty("文件名")
+ private String fileName;
+
+ @ApiModelProperty("文件后缀")
+ private String fileSuffix;
+
+ @ApiModelProperty("文件大小")
+ private Integer byteSize;
+
+ private String createBy;
+
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("文件完整路径")
+ private String wholeFilePath;
+
+ @ApiModelProperty("文件类型")
+ private String fileTypeEnum;
+
+
+}