diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 14a675f..418209b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,43 +5,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
-
-
+
@@ -81,67 +55,67 @@
- {
- "keyToString": {
- "Maven.HnRealNameBmw [clean].executor": "Run",
- "Maven.HnRealNameBmw [install].executor": "Run",
- "Maven.HnRealNameMmw [clean].executor": "Run",
- "Maven.HnRealNameMmw [install].executor": "Run",
- "Maven.hn-czl-service [clean].executor": "Run",
- "Maven.hn-czl-service [install].executor": "Run",
- "Maven.hn-gateway [clean].executor": "Run",
- "Maven.hn-gateway [install].executor": "Run",
- "Maven.hn_czl_screen [clean].executor": "Run",
- "Maven.hn_czl_screen [install].executor": "Run",
- "Maven.ldlz [clean].executor": "Run",
- "Maven.ldlz [install].executor": "Run",
- "Maven.real-name [clean].executor": "Run",
- "Maven.real-name [install].executor": "Run",
- "Maven.real-name-screen [clean].executor": "Run",
- "Maven.real-name-screen [install].executor": "Run",
- "Maven.realname-app [clean].executor": "Run",
- "Maven.realname-app [install].executor": "Run",
- "RequestMappingsPanelOrder0": "0",
- "RequestMappingsPanelOrder1": "1",
- "RequestMappingsPanelWidth0": "75",
- "RequestMappingsPanelWidth1": "75",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "RunOnceActivity.git.unshallow": "true",
- "SONARLINT_PRECOMMIT_ANALYSIS": "true",
- "Spring Boot.BonusGatewayApplication.executor": "Debug",
- "Spring Boot.CzlScreenApplication.executor": "Run",
- "Spring Boot.CzlServiceApplication.executor": "Debug",
- "Spring Boot.HnRealNameBmwApplication.executor": "Debug",
- "Spring Boot.LdlzApplication.executor": "Debug",
- "Spring Boot.RealNameAppApplication.executor": "Debug",
- "Spring Boot.RnamaApplication.executor": "Run",
- "Spring Boot.RnmwApplication.executor": "Run",
- "git-widget-placeholder": "main",
- "kotlin-language-version-configured": "true",
- "last_opened_file_path": "F:/workspace/idea/hn_cloud_service/realname-app/src/main/java/com/bonus/hnrn/rnama/core",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)",
- "nodejs_package_manager_path": "npm",
- "project.structure.last.edited": "Project",
- "project.structure.proportion": "0.15",
- "project.structure.side.proportion": "0.43843496",
- "run.configurations.included.in.services": "true",
- "settings.editor.selected.configurable": "reference.settings.project.maven.importing",
- "vue.rearranger.settings.migration": "true"
+
+}]]>
+
-
@@ -290,7 +264,7 @@
-
+
@@ -508,7 +482,15 @@
1766485046206
-
+
+
+ 1766633422277
+
+
+
+ 1766633422277
+
+
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/BnsSecurityConfig.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/BnsSecurityConfig.java
index 4a3dc4d..353159d 100644
--- a/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/BnsSecurityConfig.java
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/BnsSecurityConfig.java
@@ -53,7 +53,7 @@ public class BnsSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()//开启登录配置
- .antMatchers("/gzRealName/**","/user/**","/offLine/**","/login").permitAll()
+ .antMatchers("/gzRealName/**","/user/**","/offLine/**","/login","/api/resource/getResourceFile").permitAll()
.anyRequest().authenticated();//表示剩余的其他接口,登录之后就能访问
http.formLogin().loginProcessingUrl("/login")
//登录成功的处理器
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/TokenFilter.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/TokenFilter.java
index 1ff3c0e..d71f01e 100644
--- a/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/TokenFilter.java
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/core/config/TokenFilter.java
@@ -40,7 +40,7 @@ public class TokenFilter extends OncePerRequestFilter {
throws ServletException, IOException {
String token = getToken(request);
String requestURI = request.getRequestURI();
- if ("/login".equals(requestURI)) {
+ if ("/login".equals(requestURI) || "/api/resource/getResourceFile".equals(requestURI)) {
filterChain.doFilter(request, response);
return;
}else{
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/core/controller/ResourceFileController.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/core/controller/ResourceFileController.java
new file mode 100644
index 0000000..2a38f19
--- /dev/null
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/core/controller/ResourceFileController.java
@@ -0,0 +1,117 @@
+package com.bonus.hnrn.rnama.core.controller;
+
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+
+import org.springframework.web.bind.annotation.RequestParam;
+
+
+
+@RestController
+@RequestMapping("/api/resource")
+public class ResourceFileController {
+
+ // 固定文件根目录(resources/files/)
+ private static final String RESOURCE_ROOT = "file/";
+
+ @GetMapping("getResourceFile")
+ public ResponseEntity getResourceFile(@RequestParam String filePath) { // 显式声明@RequestParam,避免参数绑定失败
+ try {
+ // 1. 入参校验(避免空指针)
+ if (filePath == null || filePath.trim().isEmpty()) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
+ }
+ String fullPath = RESOURCE_ROOT + filePath.trim();
+ Resource resource = new ClassPathResource(fullPath);
+ long originalFileSize = 0;
+ if (resource.exists()) {
+ originalFileSize = resource.contentLength();
+ }
+
+ // 2. 校验文件存在性
+ if (!resource.exists() || !resource.isReadable()) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
+ }
+ // 3. 读取文件字节流(核心:确保完整读取,兼容JAR包)
+ byte[] fileBytes;
+ try (InputStream inputStream = resource.getInputStream()) {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ bos.write(buffer, 0, bytesRead);
+ }
+ fileBytes = bos.toByteArray();
+ // 校验读取完整性
+ if (fileBytes.length != originalFileSize) {
+ System.err.println("警告:读取的字节数与原文件大小不一致!");
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
+ }
+
+ // 4. 确定媒体类型(优先PDF,兜底自动识别)
+ MediaType mediaType = MediaType.APPLICATION_PDF;
+ if (!filePath.endsWith(".pdf")) {
+ mediaType = getMediaTypeByFileName(filePath);
+ }
+
+ // 5. 构建响应头(解决乱码/空白核心)
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(mediaType); // 强制媒体类型
+ headers.setContentLength(fileBytes.length); // 明确文件大小
+ // 禁用缓存,避免浏览器加载旧文件
+ headers.setCacheControl(CacheControl.noCache().noStore().getHeaderValue());
+ // 跨域配置(完整且正确)
+ // headers.setAccessControlAllowOrigin("*");
+// List allowedMethods = Arrays.asList(HttpMethod.GET, HttpMethod.OPTIONS);
+// headers.setAccessControlAllowMethods(allowedMethods);
+ // 关键:预览模式(inline),避免触发下载
+ // 设置Content-Disposition
+ headers.setContentDisposition(ContentDisposition.builder("inline")
+ .filename(filePath, java.nio.charset.StandardCharsets.UTF_8)
+ .build());
+
+ // 6. 返回字节数组(核心修正:不再返回Resource)
+ return ResponseEntity.ok()
+ .headers(headers)
+ .body(fileBytes);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
+ }
+ }
+
+ /**
+ * 兜底的媒体类型识别
+ */
+ private MediaType getMediaTypeByFileName(String fileName) {
+ if (fileName == null) {
+ return MediaType.APPLICATION_OCTET_STREAM;
+ }
+ String lowerName = fileName.toLowerCase();
+ if (lowerName.endsWith(".jpg") || lowerName.endsWith(".jpeg")) {
+ return MediaType.IMAGE_JPEG;
+ } else if (lowerName.endsWith(".png")) {
+ return MediaType.IMAGE_PNG;
+ } else if (lowerName.endsWith(".gif")) {
+ return MediaType.IMAGE_GIF;
+ } else if (lowerName.endsWith(".json")) {
+ return MediaType.APPLICATION_JSON;
+ } else {
+ return MediaType.APPLICATION_OCTET_STREAM;
+ }
+}
+}
\ No newline at end of file
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/ContractBean.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/ContractBean.java
index ac648df..57a5402 100644
--- a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/ContractBean.java
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/ContractBean.java
@@ -19,6 +19,8 @@ public class ContractBean {
* 视频录制
*/
private String videoUrl;
+
+ private String videoUrlPath;
/**
* 甲方身份证
*/
@@ -181,6 +183,8 @@ public class ContractBean {
private String messageTime;
private String shortMessage;
private String personPdfUrl;
+
+ private String personPdfUrlPath;
private String subPdfUrl;
private String proId;
private String subId;
@@ -211,7 +215,10 @@ public class ContractBean {
/**
* 安全协议书路径
*/
+
private String aqxysPath;
+
+ private String aqxysPathUrl;
/**
* 安全协议书签署路径
*/
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/WorkerPhotoBean.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/WorkerPhotoBean.java
index 8c7aef3..ff2938e 100644
--- a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/WorkerPhotoBean.java
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/entity/WorkerPhotoBean.java
@@ -22,20 +22,31 @@ public class WorkerPhotoBean implements Serializable {
* 身份证正面照片
*/
private String frontPhoto;
+
+ private String frontPhotoUrl;
/**
* 身份证反面照片
*/
private String backPhoto;
+
+ private String backPhotoUrl;
/**
* 人脸
*/
private String facePhoto;
+
+ private String facePhotoUrl;
/**
* 银行卡
*/
private String bankPhoto;
+
+ private String bankPhotoUrl;
+
/**
* 签名
*/
private String signaturePhoto;
+
+ private String signaturePhotoUrl;
}
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/PersonIdentifyServiceImpl.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/PersonIdentifyServiceImpl.java
index 68a0bac..0035d5c 100644
--- a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/PersonIdentifyServiceImpl.java
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/PersonIdentifyServiceImpl.java
@@ -38,11 +38,11 @@ public class PersonIdentifyServiceImpl implements PersonIdentifyService {
public WorkerPhotoBean selectWorkerPhotoByIdNumber(WorkerPhotoBean bean) {
WorkerPhotoBean ben= dao.selectWorkerPhotoByIdNumber(bean);
if(ben!=null){
- ben.setBankPhoto(uploadService.getPresignedUrl(ben.getBankPhoto()));
- ben.setSignaturePhoto(uploadService.getPresignedUrl(ben.getSignaturePhoto()));
- ben.setBackPhoto(uploadService.getPresignedUrl(ben.getBackPhoto()));
- ben.setFacePhoto(uploadService.getPresignedUrl(ben.getFacePhoto()));
- ben.setFrontPhoto(uploadService.getPresignedUrl(ben.getFrontPhoto()));
+ ben.setBankPhotoUrl(uploadService.getPresignedUrl(ben.getBankPhoto()));
+ ben.setSignaturePhotoUrl(uploadService.getPresignedUrl(ben.getSignaturePhoto()));
+ ben.setBackPhotoUrl(uploadService.getPresignedUrl(ben.getBackPhoto()));
+ ben.setFacePhotoUrl(uploadService.getPresignedUrl(ben.getFacePhoto()));
+ ben.setFrontPhotoUrl(uploadService.getPresignedUrl(ben.getFrontPhoto()));
}
return ben;
}
diff --git a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/WorkPersonServiceImpl.java b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/WorkPersonServiceImpl.java
index 9e8573a..5644d0f 100644
--- a/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/WorkPersonServiceImpl.java
+++ b/realname-app/src/main/java/com/bonus/hnrn/rnama/person/service/WorkPersonServiceImpl.java
@@ -278,15 +278,23 @@ public class WorkPersonServiceImpl implements WorkPersonService {
public List queryList(ContractBean bean) {
List list= workPersonDao.queryList(bean);
for (ContractBean bean2 : list) {
- bean2.setVideoUrl(uploadService.getPresignedUrl(bean2.getVideoUrl()));
- bean2.setPersonPdfUrl(uploadService.getPresignedUrl(bean2.getPersonPdfUrl()));
+ bean2.setVideoUrlPath(uploadService.getPresignedUrl(bean2.getVideoUrl()));
+ bean2.setPersonPdfUrlPath(uploadService.getPresignedUrl(bean2.getPersonPdfUrl()));
+ bean2.setAqxysPathUrl(uploadService.getPresignedUrl(bean2.getAqcnsPath()));
}
return list;
}
@Override
public List queryIsSignList(ContractBean bean) {
- return workPersonDao.queryIsSignList(bean);
+ List list= workPersonDao.queryIsSignList(bean);
+ for (ContractBean bean2 : list) {
+ bean2.setPersonPdfUrlPath(uploadService.getPresignedUrl(bean2.getPersonPdfUrl()));
+ bean2.setVideoUrlPath(uploadService.getPresignedUrl(bean2.getVideoUrl()));
+ bean2.setAqxysPathUrl(uploadService.getPresignedUrl(bean2.getAqcnsPath()));
+
+ }
+ return list;
}
@Override
@@ -382,7 +390,7 @@ public class WorkPersonServiceImpl implements WorkPersonService {
Map map=uploadService.uploadLocalFile(lastFile,"app/contract/pdf");
String url=uploadService.getPresignedUrl(map.get("url"));
boolean isDel=lastFile.delete();
- return Ajax.ok(url,path);
+ return Ajax.ok(url,map.get("url"));
}
return !tf ? Ajax.ok(path) : Ajax.error(bean.getPartB() + "已存在电子合同或电子合同未签署完,请勿重复提交");
}
diff --git a/realname-app/src/main/resources/file/aqgzs.pdf b/realname-app/src/main/resources/file/aqgzs.pdf
new file mode 100644
index 0000000..eb6f592
Binary files /dev/null and b/realname-app/src/main/resources/file/aqgzs.pdf differ
diff --git a/realname-app/src/main/resources/file/ygxy.pdf b/realname-app/src/main/resources/file/ygxy.pdf
new file mode 100644
index 0000000..cf4354f
Binary files /dev/null and b/realname-app/src/main/resources/file/ygxy.pdf differ
diff --git a/realname-app/src/main/resources/mappers/person/WorkPersonMapper.xml b/realname-app/src/main/resources/mappers/person/WorkPersonMapper.xml
index dd42492..d75829d 100644
--- a/realname-app/src/main/resources/mappers/person/WorkPersonMapper.xml
+++ b/realname-app/src/main/resources/mappers/person/WorkPersonMapper.xml
@@ -969,7 +969,7 @@
,#{isXbg}
- ,,#{xbgContractId}
+ ,#{xbgContractId}
)