提交 34b0fb4d 作者: obcy

Merge remote-tracking branch 'origin/master'

package com.zzsn.knowbase.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redisConfig
*
* @author ShiQiangChen
* @date 2024/1/8
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, ?> getRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, ?> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setEnableTransactionSupport(true);
template.setConnectionFactory(factory);
return template;
}
}
\ No newline at end of file
...@@ -26,18 +26,18 @@ import java.util.Map; ...@@ -26,18 +26,18 @@ import java.util.Map;
public class KnowInterceptor implements HandlerInterceptor { public class KnowInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行调用(Controller方法调用之前) // // 在请求处理之前进行调用(Controller方法调用之前)
// 返回true才会继续执行后续的Interceptor和Controller // // 返回true才会继续执行后续的Interceptor和Controller
// 返回false则取消当前请求 // // 返回false则取消当前请求
String token = request.getHeader("X-Access-Token"); // String token = request.getHeader("X-Access-Token");
//
KbAuthorizedUserService userService = SpringContextUtils.getBean(KbAuthorizedUserService.class); // KbAuthorizedUserService userService = SpringContextUtils.getBean(KbAuthorizedUserService.class);
Result<?> result = userService.doCheck(token); // Result<?> result = userService.doCheck(token);
/**第三方用户验证未通过,直接拦截请求并返回提示*/ // /**第三方用户验证未通过,直接拦截请求并返回提示*/
if (!result.isSuccess()){ // if (!result.isSuccess()){
doRes(request,response); // doRes(request,response);
return false; // return false;
} // }
return true; return true;
} }
......
...@@ -254,5 +254,14 @@ public class Constants { ...@@ -254,5 +254,14 @@ public class Constants {
//招投标索引 //招投标索引
public final static String TENDER = "tender"; public final static String TENDER = "tender";
public static final Integer MAX_FILE_SIZE = 5 * 1024 * 1024;
public static final Integer CONVERT_TIMEOUT_MS = 120000;
public static final String CONVERTATION_ERROR_MESSAGE_TEMPLATE = "Error occurred in the ConvertService: ";
public static final Long FULL_LOADING_IN_PERCENT = 100L;
public static final Integer FILE_SAVE_TIMEOUT = 5000;
public static final Integer MAX_KEY_LENGTH = 20;
public static final Integer ANONYMOUS_USER_ID = 4;
public static final Integer KILOBYTE_SIZE = 1024;
private Constants() { }
} }
...@@ -3,8 +3,10 @@ package com.zzsn.knowbase.controller; ...@@ -3,8 +3,10 @@ package com.zzsn.knowbase.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zzsn.knowbase.entity.KnowFile;
import com.zzsn.knowbase.entity.Knowledge; import com.zzsn.knowbase.entity.Knowledge;
import com.zzsn.knowbase.service.IKnowledgeService; import com.zzsn.knowbase.service.IKnowledgeService;
import com.zzsn.knowbase.service.ILocalFileService;
import com.zzsn.knowbase.util.DocUtil; import com.zzsn.knowbase.util.DocUtil;
import com.zzsn.knowbase.util.HttpUtil; import com.zzsn.knowbase.util.HttpUtil;
import com.zzsn.knowbase.vo.IntelligentQaParam; import com.zzsn.knowbase.vo.IntelligentQaParam;
...@@ -17,10 +19,16 @@ import lombok.extern.slf4j.Slf4j; ...@@ -17,10 +19,16 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Description: 知识 * @Description: 知识
...@@ -35,8 +43,11 @@ public class KnowledgeController { ...@@ -35,8 +43,11 @@ public class KnowledgeController {
@Autowired @Autowired
private IKnowledgeService knowledgeService; private IKnowledgeService knowledgeService;
@Value("${python.IntelligentQaUrl:}") @Value("${python.intelligentQaUrl:}")
private String IntelligentQaUrl; private String intelligentQaUrl;
@Autowired
private ILocalFileService localFileService;
/** /**
* 分页列表查询 * 分页列表查询
...@@ -51,6 +62,20 @@ public class KnowledgeController { ...@@ -51,6 +62,20 @@ public class KnowledgeController {
return Result.OK(pageList); return Result.OK(pageList);
} }
/**
* 分页列表查询
*/
@GetMapping(value = "/listFromPython")
public Result<?> listFromPython(KnowledgeParam knowledgeParam,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "column", defaultValue = "common") String column,
@RequestParam(name = "order", defaultValue = "desc") String order) {
IPage<KnowledgeVO> pageList = knowledgeService.listFromPython(knowledgeParam, pageNo, pageSize, column, order);
return Result.OK(pageList);
}
/** /**
* 添加 * 添加
* *
...@@ -59,8 +84,17 @@ public class KnowledgeController { ...@@ -59,8 +84,17 @@ public class KnowledgeController {
*/ */
@ApiOperation(value = "知识-添加", notes = "知识-添加") @ApiOperation(value = "知识-添加", notes = "知识-添加")
@PostMapping(value = "/uploadKnowledge") @PostMapping(value = "/uploadKnowledge")
public Result<?> uploadKnowledge(HttpServletRequest request, @RequestBody Knowledge knowledge) { public Result<?> uploadKnowledge(HttpServletRequest request, Knowledge knowledge) {
knowledgeService.addKnowledge(request,knowledge); MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
Map<String,MultipartFile> fileMap = multipartRequest.getFileMap();
List<Result<KnowFile>> resultList = localFileService.upload(fileMap);
if(null==resultList||resultList.isEmpty()){
return Result.error("上传文件失败");
}
for (Result<KnowFile> knowFileResult : resultList) {
knowledgeService.addKnowledge(knowFileResult.getResult(),knowledge);
}
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} }
...@@ -80,12 +114,12 @@ public class KnowledgeController { ...@@ -80,12 +114,12 @@ public class KnowledgeController {
/** /**
* 通过id删除 * 通过id删除
* *
* @param id * @param ids
* @return * @return
*/ */
@DeleteMapping(value = "/delete") @DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name = "id") String id) { public Result<?> delete(@RequestParam(name = "id") String ids) {
knowledgeService.deleteKnowledge(id); knowledgeService.deleteKnowledge(ids);
return Result.OK("删除成功!"); return Result.OK("删除成功!");
} }
/** /**
...@@ -108,7 +142,7 @@ public class KnowledgeController { ...@@ -108,7 +142,7 @@ public class KnowledgeController {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("question",intelligentQaParam.getQuestion()); params.put("question",intelligentQaParam.getQuestion());
params.put("knowledge_base_id",Arrays.asList(intelligentQaParam.getKnowledgeProjectIds().split(","))); params.put("knowledge_base_id",Arrays.asList(intelligentQaParam.getKnowledgeProjectIds().split(",")));
String result = HttpUtil.doPost(IntelligentQaUrl, params, 120000); String result = HttpUtil.doPost(intelligentQaUrl, params, 120000);
if(!result.isEmpty()){ if(!result.isEmpty()){
JSONObject jsonObject= JSON.parseObject(result); JSONObject jsonObject= JSON.parseObject(result);
return Result.OK(jsonObject.get("result")); return Result.OK(jsonObject.get("result"));
......
...@@ -17,7 +17,8 @@ import lombok.NoArgsConstructor; ...@@ -17,7 +17,8 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class KnowFile{ public class KnowFile{
private String fileId; private String fileId;
private String fileName;
private String filePath; private String filePath;
private String fileType; private String fileType;
private Integer fileSize; private Long fileSize;
} }
...@@ -35,7 +35,7 @@ public class Knowledge implements Serializable { ...@@ -35,7 +35,7 @@ public class Knowledge implements Serializable {
*/ */
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private String id; String id;
/** /**
* 标题 * 标题
*/ */
...@@ -79,6 +79,10 @@ public class Knowledge implements Serializable { ...@@ -79,6 +79,10 @@ public class Knowledge implements Serializable {
*/ */
private String publishDate; private String publishDate;
/** /**
* 审核时间
*/
private String verifyTime;
/**
* 审核状态 * 审核状态
*/ */
private Integer verifyStatus; private Integer verifyStatus;
...@@ -101,6 +105,7 @@ public class Knowledge implements Serializable { ...@@ -101,6 +105,7 @@ public class Knowledge implements Serializable {
private Integer deleteFlag; private Integer deleteFlag;
private List<Content> contents; private List<Content> contents;
private List<KnowFile> files; private List<KnowFile> files;
private Integer score;
} }
......
/**
*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.zzsn.knowbase.enums;
public enum DocumentType {
word,
cell,
slide
}
package com.zzsn.knowbase.service; package com.zzsn.knowbase.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zzsn.knowbase.entity.KnowFile;
import com.zzsn.knowbase.entity.Knowledge; import com.zzsn.knowbase.entity.Knowledge;
import com.zzsn.knowbase.vo.KnowledgeParam; import com.zzsn.knowbase.vo.KnowledgeParam;
import com.zzsn.knowbase.vo.KnowledgeVO; import com.zzsn.knowbase.vo.KnowledgeVO;
...@@ -19,7 +20,7 @@ public interface IKnowledgeService { ...@@ -19,7 +20,7 @@ public interface IKnowledgeService {
/** /**
* 新增 * 新增
*/ */
void addKnowledge(HttpServletRequest httpServletRequest,Knowledge knowledge); void addKnowledge(KnowFile knowFile, Knowledge knowledge);
/** /**
* 修改 * 修改
...@@ -29,7 +30,7 @@ public interface IKnowledgeService { ...@@ -29,7 +30,7 @@ public interface IKnowledgeService {
/** /**
* 删除 * 删除
*/ */
void deleteKnowledge(String id) ; void deleteKnowledge(String ids) ;
/** /**
* 分页检索 * 分页检索
...@@ -41,4 +42,6 @@ public interface IKnowledgeService { ...@@ -41,4 +42,6 @@ public interface IKnowledgeService {
* @return * @return
*/ */
IPage<KnowledgeVO> queryPageList(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order); IPage<KnowledgeVO> queryPageList(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
} }
package com.zzsn.knowbase.service;
import com.zzsn.knowbase.entity.KnowFile;
import com.zzsn.knowbase.vo.Result;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* @Version 1.0
* @Author: ZhangJingKun
* @Date: 2024/1/9 9:34
* @Content: 文件上传下载服务
*/
public interface ILocalFileService {
/**
* 文件上传
* @param file
* @return
*/
Result<KnowFile> upload(MultipartFile file);
/**
* 批量文件上传
* @param fileMap
* @return
*/
List<Result<KnowFile>> upload(Map<String,MultipartFile> fileMap);
/**
* 文件下载
* @param fileName
* @param filePath
* @return
*/
ResponseEntity<Resource> download(String fileName, String filePath);
}
package com.zzsn.knowbase.service.impl;
import com.zzsn.knowbase.entity.KnowFile;
import com.zzsn.knowbase.service.ILocalFileService;
import com.zzsn.knowbase.util.file.FileUtility;
import com.zzsn.knowbase.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* @Version 1.0
* @Author: ZhangJingKun
* @Date: 2024/1/9 9:36
* @Content:
*/
@Service
@Slf4j
public class LocalFileServiceImpl implements ILocalFileService {
@Autowired
private FileUtility fileUtility;
@Value("${files.storage}")
String filesStorage;
@Override
public Result<KnowFile> upload(MultipartFile file) {
try {
String fullFileName = file.getOriginalFilename(); // get file name
String fileExtension = fileUtility.getFileExtension(fullFileName); // get file extension
long fileSize = file.getSize(); // get file size
// check if the file size exceeds the maximum file size or is less than 0
if (fileUtility.getMaxFileSize() < fileSize || fileSize <= 0) {
Result result = Result.error("文件大小不正确!");
return result;
}
// check if file extension is supported by the editor
if (!fileUtility.getFileExts().contains(fileExtension)) {
Result result = Result.error("不支持的文件类型!");
return result;
}
String fileName = file.getOriginalFilename();
String fileSuffix = getFileSuffix(fileName);
String uid = UUID.randomUUID().toString();
String filePath = getFilePath() + uid + "." + fileSuffix;
byte[] bytes = file.getBytes(); // get file in bytes
//Files.write(Paths.get(filePath), bytes);
file.transferTo(new File(filePath));
KnowFile knowFile = new KnowFile();
knowFile.setFileId(uid);
knowFile.setFileName(fileName);
knowFile.setFilePath(filePath);
knowFile.setFileType(fileSuffix);
knowFile.setFileSize(fileSize);
Result result = Result.OK(knowFile);
return result; // create user metadata and return it
} catch (Exception e) {
e.printStackTrace();
}
// if the operation of file uploading is unsuccessful, an error occurs
Result result = Result.error("上传文件时出现问题!");
return result;
}
@Override
public List<Result<KnowFile>> upload(Map<String, MultipartFile> fileMap) {
List<Result<KnowFile>> list = new ArrayList<>();
for (Map.Entry<String,MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
Result<KnowFile> result = upload(file);
list.add(result);
}
return list;
}
/**
* 文件下载
*/
@Override
public ResponseEntity<Resource> download(String fileName, String filePath) {
Path path = Paths.get(filePath);
try {
Resource resource = new UrlResource(path.toUri());
if (resource.exists() || resource.isReadable()) {
return ResponseEntity.ok()
.header("Content-Disposition", "attachment; filename=\"" + fileName + "\"")
.body(resource);
} else {
throw new RuntimeException("文件不存在或不可读");
}
} catch (MalformedURLException e) {
e.printStackTrace();
throw new RuntimeException("文件读取失败");
}
}
//获取文件夹路径
private String getFilePath(){
LocalDate currentDate = LocalDate.now();
//System.out.println("当前日期: " + currentDate);
String filePath = filesStorage + currentDate + "/";
//判断文件夹是否存在,不存在创建
Path directory = Paths.get(filePath);
if (!Files.exists(directory)) {
try {
Files.createDirectories(directory);
log.info("文件夹创建成功:" + filePath);
} catch (IOException e) {
log.error("文件夹创建失败:" + filePath);
e.printStackTrace();
}
}
return filePath;
}
//获取文件后缀
private String getFileSuffix(String fileName){
int lastIndexOfDot = fileName.lastIndexOf('.');
String fileExtension = "";
if (lastIndexOfDot != -1) {
fileExtension = fileName.substring(lastIndexOfDot + 1);
}
return fileExtension;
}
}
/**
*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.zzsn.knowbase.util.file;
import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.enums.DocumentType;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Component
@Qualifier("default")
public class DefaultFileUtility implements FileUtility {
@Value("${filesize-max}")
private String filesizeMax;
@Value("${files.docservice.viewed-docs}")
private String docserviceViewedDocs;
@Value("${files.docservice.edited-docs}")
private String docserviceEditedDocs;
@Value("${files.docservice.convert-docs}")
private String docserviceConvertDocs;
@Value("${files.docservice.fillforms-docs}")
private String docserviceFillDocs;
// document extensions
private List<String> extsDocument = Arrays.asList(
".doc", ".docx", ".docm",
".dot", ".dotx", ".dotm",
".odt", ".fodt", ".ott", ".rtf", ".txt",
".html", ".htm", ".mht", ".xml",
".pdf", ".djvu", ".fb2", ".epub", ".xps", ".oform");
// spreadsheet extensions
private List<String> extsSpreadsheet = Arrays.asList(
".xls", ".xlsx", ".xlsm", ".xlsb",
".xlt", ".xltx", ".xltm",
".ods", ".fods", ".ots", ".csv");
// presentation extensions
private List<String> extsPresentation = Arrays.asList(
".pps", ".ppsx", ".ppsm",
".ppt", ".pptx", ".pptm",
".pot", ".potx", ".potm",
".odp", ".fodp", ".otp");
// get the document type
public DocumentType getDocumentType(final String fileName) {
String ext = getFileExtension(fileName).toLowerCase(); // get file extension from its name
// word type for document extensions
if (extsDocument.contains(ext)) {
return DocumentType.word;
}
// cell type for spreadsheet extensions
if (extsSpreadsheet.contains(ext)) {
return DocumentType.cell;
}
// slide type for presentation extensions
if (extsPresentation.contains(ext)) {
return DocumentType.slide;
}
// default file type is word
return DocumentType.word;
}
// get file name from its URL
public String getFileName(final String url) {
if (url == null) {
return "";
}
// get file name from the last part of URL
String fileName = url.substring(url.lastIndexOf('/') + 1);
fileName = fileName.split("\\?")[0];
return fileName;
}
// get file name without extension
public String getFileNameWithoutExtension(final String url) {
String fileName = getFileName(url);
if (fileName == null) {
return null;
}
String fileNameWithoutExt = fileName.substring(0, fileName.lastIndexOf('.'));
return fileNameWithoutExt;
}
// get file extension from URL
public String getFileExtension(final String url) {
String fileName = getFileName(url);
if (fileName == null) {
return null;
}
String fileExt = fileName.substring(fileName.lastIndexOf("."));
return fileExt.toLowerCase();
}
// get an editor internal extension
public String getInternalExtension(final DocumentType type) {
// .docx for word file type
if (type.equals(DocumentType.word)) {
return ".docx";
}
// .xlsx for cell file type
if (type.equals(DocumentType.cell)) {
return ".xlsx";
}
// .pptx for slide file type
if (type.equals(DocumentType.slide)) {
return ".pptx";
}
// the default file type is .docx
return ".docx";
}
public List<String> getFillExts() {
return Arrays.asList(docserviceFillDocs.split("\\|"));
}
// get file extensions that can be viewed
public List<String> getViewedExts() {
return Arrays.asList(docserviceViewedDocs.split("\\|"));
}
// get file extensions that can be edited
public List<String> getEditedExts() {
return Arrays.asList(docserviceEditedDocs.split("\\|"));
}
// get file extensions that can be converted
public List<String> getConvertExts() {
return Arrays.asList(docserviceConvertDocs.split("\\|"));
}
// get all the supported file extensions
public List<String> getFileExts() {
List<String> res = new ArrayList<>();
res.addAll(getViewedExts());
res.addAll(getEditedExts());
res.addAll(getConvertExts());
res.addAll(getFillExts());
return res;
}
// generate the file path from file directory and name
public Path generateFilepath(final String directory, final String fullFileName) {
String fileName = getFileNameWithoutExtension(fullFileName); // get file name without extension
String fileExtension = getFileExtension(fullFileName); // get file extension
Path path = Paths.get(directory + fullFileName); // get the path to the files with the specified name
for (int i = 1; Files.exists(path); i++) { // run through all the files with the specified name
// get a name of each file without extension and add an index to it
fileName = getFileNameWithoutExtension(fullFileName) + "(" + i + ")";
// create a new path for this file with the correct name and extension
path = Paths.get(directory + fileName + fileExtension);
}
path = Paths.get(directory + fileName + fileExtension);
return path;
}
// get maximum file size
public long getMaxFileSize() {
long size = Long.parseLong(filesizeMax);
return size > 0 ? size : Constants.MAX_FILE_SIZE;
}
}
/**
*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.zzsn.knowbase.util.file;
import com.zzsn.knowbase.enums.DocumentType;
import java.nio.file.Path;
import java.util.List;
// specify the file utility functions
public interface FileUtility {
DocumentType getDocumentType(String fileName); // get the document type
String getFileName(String url); // get file name from its URL
String getFileNameWithoutExtension(String url); // get file name without extension
String getFileExtension(String url); // get file extension from URL
String getInternalExtension(DocumentType type); // get an editor internal extension
List<String> getFileExts(); // get all the supported file extensions
List<String> getFillExts(); // get file extensions that can be filled
List<String> getViewedExts(); // get file extensions that can be viewed
List<String> getEditedExts(); // get file extensions that can be edited
List<String> getConvertExts(); // get file extensions that can be converted
Path generateFilepath(String directory, String fullFileName); /* generate the file path
from file directory and name */
long getMaxFileSize(); // get maximum file size
}
...@@ -17,7 +17,6 @@ import lombok.NoArgsConstructor; ...@@ -17,7 +17,6 @@ import lombok.NoArgsConstructor;
@Data @Data
public class KnowledgeParam { public class KnowledgeParam {
private String id; private String id;
private String title;
/** /**
* 来源 * 来源
*/ */
...@@ -25,7 +24,7 @@ public class KnowledgeParam { ...@@ -25,7 +24,7 @@ public class KnowledgeParam {
/** /**
* 作者 * 作者
*/ */
private Integer author; private String author;
/** /**
* 发布时间 * 发布时间
*/ */
...@@ -49,10 +48,34 @@ public class KnowledgeParam { ...@@ -49,10 +48,34 @@ public class KnowledgeParam {
/** /**
* 类型 * 类型
*/ */
private String type; private String types;
/**
* 发布开始时间
*/
private String startTime; private String startTime;
/**
* 发布结束时间
*/
private String endTime; private String endTime;
private String content; /**
* 搜索信息
*/
private String searchInfo;
/**
* 范围 1标题 2正文
*/
private Integer searchScope;
/**
* 精确搜索
*/
private String searchAccuracy;
/**
* 审核开始时间
*/
private String verifyStartTime;
/**
* 审核结束时间
*/
private String verifyEndTime;
} }
package com.zzsn.knowbase.vo; package com.zzsn.knowbase.vo;
import com.zzsn.knowbase.entity.Knowledge; import lombok.Builder;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,6 +10,16 @@ import lombok.Data; ...@@ -10,6 +10,16 @@ import lombok.Data;
* @date 2024/1/4 * @date 2024/1/4
*/ */
@Data @Data
public class KnowledgeVO extends Knowledge { @Builder
public class KnowledgeVO {
private String content;
private String id;
private String verifyTime;
private String publishDate;
private String type;
private String verifierName;
private Integer score;
private Integer verifyStatus;
} }
...@@ -2,6 +2,10 @@ server: ...@@ -2,6 +2,10 @@ server:
port: 9088 port: 9088
spring: spring:
servlet:
multipart:
max-request-size: 1024MB
max-file-size: 100MB
datasource: datasource:
url: jdbc:mysql://114.116.44.11:3306/knowledge?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True url: jdbc:mysql://114.116.44.11:3306/knowledge?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True
username: ciglobal username: ciglobal
...@@ -18,8 +22,6 @@ spring: ...@@ -18,8 +22,6 @@ spring:
brokers: 114.115.159.144:9092 brokers: 114.115.159.144:9092
zkNodes: 114.115.159.144:2181 zkNodes: 114.115.159.144:2181
requiredAcks: 1 requiredAcks: 1
redis: redis:
database: 0 database: 0
host: 114.115.236.206 host: 114.115.236.206
...@@ -39,9 +41,23 @@ mybatis-plus: ...@@ -39,9 +41,23 @@ mybatis-plus:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
python: python:
IntelligentQaUrl: http://116.63.179.212:7862/platform/chat intelligentQaUrl: http://116.63.179.212:7862/platform/chat
searchUrl: http://114.115.172.99:10013/platform/search
deleteUrl: http://114.115.172.99:10013/platform/delete
know: know:
thirdpartyurl: thirdpartyurl:
checkuserurl: http://127.0.0.1:9988/sys/checkToken checkuserurl: http://127.0.0.1:9988/sys/checkToken
getusersurl: http://127.0.0.1:9988/sys/user/thirdparty getusersurl: http://127.0.0.1:9988/sys/user/thirdparty
files:
storage: E:/aaa/
docservice:
fillforms-docs: .docx|.oform
viewed-docs: .djvu|.oxps|.pdf|.xps
edited-docs: .csv|.docm|.docx|.docxf|.dotm|.dotx|.epub|.fb2|.html|.odp|.ods|.odt|.otp|.ots|.ott|.potm|.potx|.ppsm|.ppsx|.pptm|.pptx|.rtf|.txt|.xlsm|.xlsx|.xltm|.xltx
convert-docs: .doc|.dot|.dps|.dpt|.epub|.et|.ett|.fb2|.fodp|.fods|.fodt|.htm|.html|.mht|.mhtml|.odp|.ods|.odt|.otp|.ots|.ott|.pot|.pps|.ppt|.rtf|.stw|.sxc|.sxi|.sxw|.wps|.wpt|.xls|.xlsb|.xlt|.xml
timeout: 120000
history:
postfix: -hist
filesize-max: 5242880
package com.zzsn.knowbase; package com.zzsn.knowbase;
import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.service.ILocalFileService;
import com.zzsn.knowbase.util.CodeGenerateUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import java.io.File;
import java.io.IOException;
@SpringBootTest @SpringBootTest
class KnowBaseApplicationTests { class KnowBaseApplicationTests {
@Autowired
private CodeGenerateUtil codeGenerateUtil;
@Autowired
private ILocalFileService localFileService;
@Test @Test
void contextLoads() { void contextLoads() throws IOException {
ResponseEntity<Resource> re = localFileService.download("abc.docx", "E:/aaa/abc.docx");
File file = re.getBody().getFile();
System.out.println(re);
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论