加入复制制度文件的代码。

This commit is contained in:
2026-03-19 16:27:20 +08:00
parent 60f1fe14d9
commit afafc1915d
5 changed files with 188 additions and 40 deletions

View File

@@ -0,0 +1,98 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2026-03-19 14:43:07
* @LastEditors: Kane Wang
* @LastModified: 2026-03-19 14:43:08
* @FilePath: src/main/java/com/cpic/xim/utils/files/RegulatoryFile.java
* @Description: 用于定义前端 AddNewRegulatoryRequest 请求中 regulatory_files 的json对象。
*
* Copyright (c) 2025 by Kane All rights reserved
*/
package com.cpic.xim.utils.files;
import com.fasterxml.jackson.annotation.JsonProperty;
public class RegulatoryFile
{
public RegulatoryFile()
{
}
public String getFileType()
{
return fileType;
}
public void setFileType( String fileType )
{
this.fileType = fileType;
}
public String getFileURL()
{
return fileURL;
}
public void setFileURL( String fileURL )
{
this.fileURL = fileURL;
}
public String getLocalFilePath()
{
return localFilePath;
}
public void setLocalFilePath( String localFilePath )
{
this.localFilePath = localFilePath;
}
public String getRegulatoryFileName()
{
return regulatoryFileName;
}
public void setRegulatoryFileName( String regulatoryFileName )
{
this.regulatoryFileName = regulatoryFileName;
}
public String getRegulatoryFileNameOriginal()
{
return regulatoryFileNameOriginal;
}
public void setRegulatoryFileNameOriginal( String regulatoryFileNameOriginal )
{
this.regulatoryFileNameOriginal = regulatoryFileNameOriginal;
}
public int getRowIndex()
{
return rowIndex;
}
public void setRowIndex( int rowIndex )
{
this.rowIndex = rowIndex;
}
@JsonProperty("file_type")
private String fileType;
@JsonProperty("file_url")
private String fileURL;
@JsonProperty("local_file_path")
private String localFilePath;
@JsonProperty("regulatory_file_name")
private String regulatoryFileName;
@JsonProperty("regulatory_file_name_original")
private String regulatoryFileNameOriginal;
@JsonProperty("rowIndex")
private int rowIndex;
}

View File

@@ -11,13 +11,15 @@
package com.cpic.xim.web.controllers.regulatory; package com.cpic.xim.web.controllers.regulatory;
import java.io.File; import java.io.File;
import java.io.IOException;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.apache.commons.io.FileUtils;
import com.cpic.xim.utils.files.UploadedFile; import com.cpic.xim.utils.files.RegulatoryFile;
@Controller @Controller
@RequestMapping( "/regulatory" ) @RequestMapping( "/regulatory" )
@@ -26,23 +28,38 @@ public class AddNewRegulatoryController
// 制度库文件的基础目录 // 制度库文件的基础目录
private static final String baseDirectory = "D:/制度库/"; private static final String baseDirectory = "D:/制度库/";
/**
*
* @param request
* @return
*/
@RequestMapping( path = "/add-new-regulatory.do", method = RequestMethod.POST ) @RequestMapping( path = "/add-new-regulatory.do", method = RequestMethod.POST )
@ResponseBody @ResponseBody
public static AddNewRegulatoryResponse addNewRegulatory( @RequestBody AddNewRegulatoryRequest request ) public static AddNewRegulatoryResponse addNewRegulatory( @RequestBody AddNewRegulatoryRequest request )
{ {
AddNewRegulatoryResponse response = new AddNewRegulatoryResponse(); AddNewRegulatoryResponse response = new AddNewRegulatoryResponse();
File regulatoryBaseDirectory = new File( baseDirectory + "/" + request.getRegulatoryName() );
// 创建目录
if ( regulatoryBaseDirectory.mkdirs() == false )
{
response.setSuccess( false );
response.setMessage( "创建制度目录失败,请联系管理员!" );
return response;
}
// 验证文件是否存在,并判断目睹路径是否有同名文件存在 // 验证文件是否存在,并判断目睹路径是否有同名文件存在
for ( UploadedFile file : request.getRegulatoryFiles() ) for ( RegulatoryFile file : request.getRegulatoryFiles() )
{ {
String destFilePath = baseDirectory + "/" + request.getRegulatoryName() + "/" + file.getFileName(); String destFilePath = baseDirectory + "/" + request.getRegulatoryName() + "/" + file.getRegulatoryFileName();
File uploadFile = new File( file.getAbsoluteFilePath() ); File uploadFile = new File( file.getLocalFilePath() + "/" + file.getRegulatoryFileName() );
File dest = new File( destFilePath ); File dest = new File( destFilePath );
if ( uploadFile.exists() == false ) if ( uploadFile.exists() == false )
{ {
response.setSuccess( false ); response.setSuccess( false );
response.setMessage( "文件" + file.getAbsoluteFilePath() + "不存在!" ); response.setMessage( "文件" + file.getRegulatoryFileName() + "不存在!" );
return response; return response;
} }
@@ -51,18 +68,50 @@ public class AddNewRegulatoryController
if ( dest.exists() == true ) if ( dest.exists() == true )
{ {
response.setSuccess( false ); response.setSuccess( false );
response.setMessage( "文件" + file.getAbsoluteFilePath() + "存在同名文件!" ); response.setMessage( "文件" + file.getRegulatoryFileName() + "存在同名文件!" );
return response; return response;
} }
} }
for ( RegulatoryFile file : request.getRegulatoryFiles() )
{
String destFilePath = baseDirectory + "/" + request.getRegulatoryName() + "/" + file.getRegulatoryFileName();
File uploadFile = new File( file.getLocalFilePath() + "/" + file.getRegulatoryFileName() );
File dest = new File( destFilePath );
// 复制文件 // 复制文件
for ( UploadedFile file : request.getRegulatoryFiles() ) try
{ {
File uploadFile = new File( file.getAbsoluteFilePath() ); FileUtils.copyFile( uploadFile, dest );
} }
catch ( IOException error )
{
// 出现异常,删除文件
try
{
FileUtils.deleteDirectory( regulatoryBaseDirectory );
}
catch ( Exception deleteError )
{
deleteError.printStackTrace();
}
response.setSuccess( false );
response.setMessage( "复制" + file.getRegulatoryFileNameOriginal() + "文件失败,请联系管理员!" );
return response;
}
}
//todo 写入数据库
// TO-DO: 清理上传文件的目录
response.setSuccess( true );
response.setMessage( "文件复制成功!" );
return response; return response;
} }

View File

@@ -2,7 +2,7 @@
* @Author: Kane Wang <wangkane@qq.com> * @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-12-26 17:25:13 * @Date: 2025-12-26 17:25:13
* @LastEditors: Kane Wang * @LastEditors: Kane Wang
* @LastModified: 2025-12-26 21:23:04 * @LastModified: 2026-03-19 14:51:38
* @FilePath: src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java * @FilePath: src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java
* @Description: * @Description:
* *
@@ -11,7 +11,8 @@
package com.cpic.xim.web.controllers.regulatory; package com.cpic.xim.web.controllers.regulatory;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.cpic.xim.utils.files.UploadedFile; import com.cpic.xim.utils.files.RegulatoryFile;
import java.util.Vector; import java.util.Vector;
public class AddNewRegulatoryRequest public class AddNewRegulatoryRequest
@@ -23,7 +24,7 @@ public class AddNewRegulatoryRequest
this.departmentName = ""; this.departmentName = "";
this.releaseYear = ""; this.releaseYear = "";
this.comment = ""; this.comment = "";
this.regulatoryFiles = new Vector<UploadedFile>(); this.regulatoryFiles = new Vector<RegulatoryFile>();
} }
public AddNewRegulatoryRequest( public AddNewRegulatoryRequest(
@@ -31,7 +32,7 @@ public class AddNewRegulatoryRequest
String departmentName, String departmentName,
String releaseYear, String releaseYear,
String comment, String comment,
Vector<UploadedFile> regulatoryFiles Vector<RegulatoryFile> regulatoryFiles
) )
{ {
this.regulatoryName = regulatoryName; this.regulatoryName = regulatoryName;
@@ -81,12 +82,12 @@ public class AddNewRegulatoryRequest
this.comment = comment; this.comment = comment;
} }
public Vector<UploadedFile> getRegulatoryFiles() public Vector<RegulatoryFile> getRegulatoryFiles()
{ {
return regulatoryFiles; return regulatoryFiles;
} }
public void setRegulatoryFiles( Vector<UploadedFile> regulatoryFiles ) public void setRegulatoryFiles( Vector<RegulatoryFile> regulatoryFiles )
{ {
this.regulatoryFiles = regulatoryFiles; this.regulatoryFiles = regulatoryFiles;
} }
@@ -104,5 +105,5 @@ public class AddNewRegulatoryRequest
private String comment; private String comment;
@JsonProperty("regulatory_files") @JsonProperty("regulatory_files")
private Vector<UploadedFile> regulatoryFiles; private Vector<RegulatoryFile> regulatoryFiles;
} }

View File

@@ -2,7 +2,7 @@
* @Author: Kane Wang <wangkane@qq.com> * @Author: Kane Wang <wangkane@qq.com>
* @Date: 2026-01-05 10:42:42 * @Date: 2026-01-05 10:42:42
* @LastEditors: Kane Wang * @LastEditors: Kane Wang
* @LastModified: 2026-02-04 15:37:20 * @LastModified: 2026-03-19 15:41:22
* @FilePath: src/utils/regulatory_utils.ts * @FilePath: src/utils/regulatory_utils.ts
* @Description: * @Description:
* *
@@ -18,7 +18,7 @@ interface AddNewRegulatoryResponse
message: string; message: string;
} }
interface Render { interface AddNewRegulatoryResponseRender {
( resonse: AddNewRegulatoryResponse ) :void, } ( resonse: AddNewRegulatoryResponse ) :void, }
type CallBackRender = ( response: AddNewRegulatoryResponse ) => void; type CallBackRender = ( response: AddNewRegulatoryResponse ) => void;
@@ -27,7 +27,7 @@ type CallBackRender = ( response: AddNewRegulatoryResponse ) => void;
* @param regulatory RegulatoryData类型制度对象用于发送请求。 * @param regulatory RegulatoryData类型制度对象用于发送请求。
* @param render 回调函数,请求成功后调用。 * @param render 回调函数,请求成功后调用。
*/ */
function addNewRegulatory( regulatory: RegulatoryData, render: Render ): void function addNewRegulatory( regulatory: RegulatoryData, render: AddNewRegulatoryResponseRender ): void
{ {
// const url = API_URL.URL_ADD_NEW_REGULATORY; // const url = API_URL.URL_ADD_NEW_REGULATORY;
@@ -69,6 +69,6 @@ function addNewRegulatory( regulatory: RegulatoryData, render: Render ): void
export { export {
addNewRegulatory, addNewRegulatory,
type AddNewRegulatoryResponse, type AddNewRegulatoryResponse,
type Render, type AddNewRegulatoryResponseRender,
type CallBackRender type CallBackRender
}; };

View File

@@ -205,7 +205,7 @@ Copyright © CPIC All rights reserved
import {reactive, ref} from "vue"; import {reactive, ref} from "vue";
import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus"; import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus";
import { type RegulatoryData, type RegulatoryFile} from "@/types/regulatory/regulatory.ts"; import { type RegulatoryData, type RegulatoryFile} from "@/types/regulatory/regulatory.ts";
import { addNewRegulatory, type AddNewRegulatoryResponse, type Render} from "@/utils/regulatory_utils.ts"; import { addNewRegulatory, type AddNewRegulatoryResponse, type AddNewRegulatoryResponseRender} from "@/utils/regulatory_utils.ts";
import { type UploadedFile, type UploadFileResponse } from "@/types/upload_file.ts"; import { type UploadedFile, type UploadFileResponse } from "@/types/upload_file.ts";
import {API_URL} from "@/utils/config.ts"; import {API_URL} from "@/utils/config.ts";
import { getFileType } from "@/utils/utils"; import { getFileType } from "@/utils/utils";
@@ -267,13 +267,6 @@ export default {
const releaseYear = ref<any>( null ); const releaseYear = ref<any>( null );
const comment = ref<any>( null ); const comment = ref<any>( null );
const render: Render = function ( response: AddNewRegulatoryResponse ) :void
{
// if ( response.success === true )
// { }
};
const headerCellStyle = reactive( const headerCellStyle = reactive(
{ {
textAlign: "center", textAlign: "center",
@@ -317,7 +310,7 @@ export default {
const onPreviewUploadedFile = ( rowId: number ): void => const onPreviewUploadedFile = ( rowId: number ): void =>
{ {
// ui.showPreviewDialog = true; // ui.showPreviewDialog = true;
ui.fileURL = encodeURI( ui.newRegulatory.regulatory_files[rowId]?.file_url + "/" + ui.newRegulatory.regulatory_files[rowId]?.regulatory_file_name ); ui.fileURL = ui.newRegulatory.regulatory_files[rowId]?.file_url + "/" + ui.newRegulatory.regulatory_files[rowId]?.regulatory_file_name;
console.log( "完整路径:", ui.fileURL ); console.log( "完整路径:", ui.fileURL );
@@ -430,6 +423,12 @@ export default {
ElMessage.error( "渲染文档出错!" ); ElMessage.error( "渲染文档出错!" );
}; };
const render: AddNewRegulatoryResponseRender = function ( response: AddNewRegulatoryResponse ) :void
{
// if ( response.success === true )
// { }
};
/** /**
* 创建新制度事件 * 创建新制度事件
*/ */
@@ -474,7 +473,7 @@ export default {
return; return;
} }
addNewRegulatory( ui.newRegulatory, ()=>{}); addNewRegulatory( ui.newRegulatory, render );
}; };
return { return {
@@ -488,6 +487,7 @@ export default {
onDeleteUploadedFile, onDeleteUploadedFile,
onPreviewUploadedFile, onPreviewUploadedFile,
onCreateNewRegulatory, onCreateNewRegulatory,
render,
onBeforeUpload, onBeforeUpload,
errorHandle, errorHandle,
}; };