diff --git a/src/main/java/com/example/demo/parser/controller/FileParserController.java b/src/main/java/com/example/demo/parser/controller/FileParserController.java index 739162d..57f1ca1 100644 --- a/src/main/java/com/example/demo/parser/controller/FileParserController.java +++ b/src/main/java/com/example/demo/parser/controller/FileParserController.java @@ -1,241 +1,259 @@ -//package com.example.demo.parser.controller; -// -//import com.example.demo.common.wrapper.WrapMapper; -//import com.example.demo.common.wrapper.Wrapper; -//import com.example.demo.common.exception.BusinessException; -//import com.example.demo.common.utils.FileUtil; -//import com.example.demo.common.utils.XmlParserUtil; -//import com.example.demo.parser.model.dto.FileRecordDTO; -//import com.example.demo.parser.model.vo.FileRecordVO; -//import com.example.demo.parser.service.FileRecordService; -//import com.mybatisflex.core.paginate.Page; -//import io.swagger.v3.oas.annotations.Operation; -//import io.swagger.v3.oas.annotations.Parameter; -//import io.swagger.v3.oas.annotations.tags.Tag; -//import lombok.RequiredArgsConstructor; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.web.bind.annotation.*; -//import org.springframework.web.multipart.MultipartFile; -// -//import java.io.File; -//import java.nio.file.Path; -//import java.nio.file.Paths; -//import java.util.List; -// -///** -// * 文件解析控制器 -// * 提供XML文件上传、解析和转换的RESTful API接口 -// * -// * @author 岳佳君 (2025年09月25日 16:30:00) -// * @version 1.0.0 -// */ -//@Slf4j -//@RestController -//@RequestMapping("/parser/files") -//@RequiredArgsConstructor -//@Tag(name = "文件解析管理", description = "提供XML文件上传、解析和转换的接口") -//public class FileParserController { -// -// private final FileRecordService fileRecordService; -// -// @Value("${xml-parser.file.upload-dir:./upload}") -// private String uploadDir; -// -// @Value("${xml-parser.file.temp-dir:./temp}") -// private String tempDir; -// -// /** -// * 上传XML文件 -// * -// * @param file 上传的XML文件 -// * @return 操作结果包装对象 -// */ -// @PostMapping("/upload") -// @Operation(summary = "上传XML文件", description = "上传XML文件并进行解析准备") -// public Wrapper uploadFile( -// @Parameter(description = "XML文件", required = true) -// @RequestParam("file") MultipartFile file) { -// try { -// // 验证文件类型 -// if (!isValidXmlFile(file)) { -// return WrapMapper.fail("请上传有效的XML文件"); -// } -// -// // 创建上传目录 -// FileUtil.createDirectory(uploadDir); -// -// // 生成唯一文件名 -// String originalFilename = file.getOriginalFilename(); -// String uniqueFilename = FileUtil.generateUniqueFileName(originalFilename); -// String filePath = Paths.get(uploadDir, uniqueFilename).toString(); -// -// // 保存文件 -// file.transferTo(new File(filePath)); -// -// // 创建文件记录 -// FileRecordDTO record = new FileRecordDTO(); -// record.setFileName(originalFilename); -// record.setFilePath(filePath); -// record.setFileSize(file.getSize()); -// record.setStatus("UPLOADED"); -// record.setProcessLog("文件上传成功"); -// -// String recordId = fileRecordService.create(record); -// FileRecordVO result = fileRecordService.getById(recordId); -// -// return WrapMapper.ok(result, "文件上传成功"); -// } catch (BusinessException e) { -// log.error("文件上传失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("文件上传异常: {}", e.getMessage(), e); -// return WrapMapper.fail("文件上传失败"); -// } -// } -// -// /** -// * 解析XML文件 -// * -// * @param recordId 文件记录ID -// * @return 操作结果包装对象 -// */ -// @PostMapping("/parse/{recordId}") -// @Operation(summary = "解析XML文件", description = "解析已上传的XML文件") -// public Wrapper parseFile( -// @Parameter(description = "文件记录ID", required = true) -// @PathVariable String recordId) { -// try { -// FileRecordVO record = fileRecordService.getById(recordId); -// if (record == null) { -// return WrapMapper.fail("文件记录不存在"); -// } -// -// // 更新状态为解析中 -// fileRecordService.updateStatus(recordId, "PARSING", "开始解析XML文件"); -// -// // 解析XML文件 -// String xmlFilePath = record.getFilePath(); -// String txtFilePath = generateTxtFilePath(xmlFilePath); -// -// try { -// XmlParserUtil.parseXmlToTxt(xmlFilePath, txtFilePath); -// -// // 更新状态为解析成功 -// fileRecordService.updateStatus(recordId, "PARSED", "XML文件解析成功"); -// -// FileRecordVO result = fileRecordService.getById(recordId); -// return WrapMapper.ok(result, "XML文件解析成功"); -// -// } catch (Exception e) { -// // 更新状态为解析失败 -// fileRecordService.updateStatus(recordId, "PARSE_FAILED", "XML文件解析失败: " + e.getMessage()); -// throw new BusinessException("XML文件解析失败: " + e.getMessage()); -// } -// -// } catch (BusinessException e) { -// log.error("文件解析失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("文件解析异常: {}", e.getMessage(), e); -// return WrapMapper.fail("文件解析失败"); -// } -// } -// -// /** -// * 获取文件记录详情 -// * -// * @param recordId 文件记录ID -// * @return 文件记录详情包装对象 -// */ -// @GetMapping("/{recordId}") -// @Operation(summary = "获取文件记录详情", description = "根据ID获取文件记录的详细信息") -// public Wrapper getFileRecord( -// @Parameter(description = "文件记录ID", required = true) -// @PathVariable String recordId) { -// try { -// FileRecordVO result = fileRecordService.getById(recordId); -// return WrapMapper.ok(result, "获取文件记录详情成功"); -// } catch (BusinessException e) { -// log.error("获取文件记录详情失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("获取文件记录详情异常: {}", e.getMessage(), e); -// return WrapMapper.fail("获取文件记录详情失败"); -// } -// } -// -// /** -// * 分页查询文件记录列表 -// * -// * @param pageNumber 页码 -// * @param pageSize 每页大小 -// * @return 分页结果包装对象 -// */ -// @GetMapping("/page") -// @Operation(summary = "分页查询文件记录", description = "分页查询文件记录列表") -// public Wrapper> pageList( -// @Parameter(description = "页码", example = "1") -// @RequestParam(defaultValue = "1") Integer pageNumber, -// @Parameter(description = "每页大小", example = "10") -// @RequestParam(defaultValue = "10") Integer pageSize) { -// try { -// Page result = fileRecordService.pageList(pageNumber, pageSize); -// return WrapMapper.ok(result, "查询文件记录列表成功"); -// } catch (Exception e) { -// log.error("查询文件记录列表异常: {}", e.getMessage(), e); -// return WrapMapper.fail("查询文件记录列表失败"); -// } -// } -// -// /** -// * 获取所有文件记录列表 -// * -// * @return 文件记录列表包装对象 -// */ -// @GetMapping("/list") -// @Operation(summary = "获取所有文件记录", description = "获取所有文件记录的列表") -// public Wrapper> listAll() { -// try { -// List result = fileRecordService.listAll(); -// return WrapMapper.ok(result, "获取所有文件记录成功"); -// } catch (Exception e) { -// log.error("获取所有文件记录异常: {}", e.getMessage(), e); -// return WrapMapper.fail("获取所有文件记录失败"); -// } -// } -// -// /** -// * 验证是否为有效的XML文件 -// * -// * @param file 上传的文件 -// * @return 是否有效 -// */ -// private boolean isValidXmlFile(MultipartFile file) { -// if (file == null || file.isEmpty()) { -// return false; -// } -// -// String originalFilename = file.getOriginalFilename(); -// if (originalFilename == null) { -// return false; -// } -// -// // 检查文件扩展名 -// String extension = FileUtil.getFileExtension(originalFilename); -// return "xml".equalsIgnoreCase(extension); -// } -// -// /** -// * 生成TXT文件路径 -// * -// * @param xmlFilePath XML文件路径 -// * @return TXT文件路径 -// */ -// private String generateTxtFilePath(String xmlFilePath) { -// Path xmlPath = Paths.get(xmlFilePath); -// String xmlFileName = xmlPath.getFileName().toString(); -// String txtFileName = xmlFileName.replace(".xml", ".txt"); -// return xmlPath.getParent().resolve(txtFileName).toString(); -// } -//} \ No newline at end of file +package com.example.demo.parser.controller; + +import cn.zhxu.bs.SearchResult; +import com.example.demo.common.wrapper.WrapMapper; +import com.example.demo.common.wrapper.Wrapper; +import com.example.demo.common.exception.BusinessException; +import com.example.demo.common.utils.FileUtil; +import com.example.demo.common.utils.XmlParserUtil; +import com.example.demo.parser.entity.FileRecordEntity; +import com.example.demo.parser.model.dto.FileRecordDTO; +import com.example.demo.parser.model.dto.FileRecordQueryDTO; +import com.example.demo.parser.model.vo.FileRecordVO; +import com.example.demo.parser.service.FileRecordService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Date; +import java.util.List; + +/** + * 文件解析控制器 + * 提供XML文件上传、解析和转换的RESTful API接口 + * + * @author 岳佳君 (2025年09月25日 16:30:00) + * @version 1.0.0 + */ +@Slf4j +@RestController +@RequestMapping("/parser/files") +@RequiredArgsConstructor +@Tag(name = "文件解析管理", description = "提供XML文件上传、解析和转换的接口") +public class FileParserController { + + private final FileRecordService fileRecordService; + + @Value("${xml-parser.file.upload-dir:./upload}") + private String uploadDir; + + @Value("${xml-parser.file.temp-dir:./temp}") + private String tempDir; + + /** + * 上传XML文件 + * + * @param file 上传的XML文件 + * @return 操作结果包装对象 + */ + @PostMapping("/upload") + @Operation(summary = "上传XML文件", description = "上传XML文件并进行解析准备") + public Wrapper uploadFile( + @Parameter(description = "XML文件", required = true) + @RequestParam("file") MultipartFile file) { + try { + // 验证文件类型 + if (!isValidXmlFile(file)) { + return WrapMapper.fail("请上传有效的XML文件"); + } + + // 创建上传目录 + FileUtil.createDirectory(uploadDir); + + // 生成唯一文件名 + String originalFilename = file.getOriginalFilename(); + String uniqueFilename = FileUtil.generateUniqueFileName(originalFilename); + String filePath = Paths.get(uploadDir, uniqueFilename).toString(); + + // 保存文件 + file.transferTo(new File(filePath)); + + // 创建文件记录 + FileRecordDTO record = new FileRecordDTO(); + record.setFileName(originalFilename); + record.setFilePath(filePath); + record.setStatus("UPLOADED"); + + FileRecordVO result = fileRecordService.create(record); + + return WrapMapper.ok(result, "文件上传成功"); + } catch (BusinessException e) { + log.error("文件上传失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("文件上传异常: {}", e.getMessage(), e); + return WrapMapper.fail("文件上传失败"); + } + } + + /** + * 解析XML文件 + * + * @param recordId 文件记录ID + * @return 操作结果包装对象 + */ + @PostMapping("/parse/{recordId}") + @Operation(summary = "解析XML文件", description = "解析已上传的XML文件") + public Wrapper parseFile( + @Parameter(description = "文件记录ID", required = true) + @PathVariable String recordId) { + try { + FileRecordVO record = fileRecordService.detail(recordId); + if (record == null) { + return WrapMapper.fail("文件记录不存在"); + } + + // 更新状态为解析中 - 使用builder模式构建实体后调用updateById + FileRecordEntity parsingEntity = FileRecordEntity.builder() + .id(recordId) + .status("PARSING") + .processLog("开始解析XML文件") + .processTime(new Date()) + .build(); + fileRecordService.updateById(parsingEntity); + + // 解析XML文件 + String xmlFilePath = record.getFilePath(); + String txtFilePath = generateTxtFilePath(xmlFilePath); + + try { + XmlParserUtil.parseXmlToTxt(xmlFilePath, txtFilePath); + + // 更新状态为解析成功 - 使用builder模式构建实体后调用updateById + FileRecordEntity parsedEntity = FileRecordEntity.builder() + .id(recordId) + .status("PARSED") + .processLog("XML文件解析成功") + .processTime(new Date()) + .build(); + fileRecordService.updateById(parsedEntity); + + FileRecordVO result = fileRecordService.detail(recordId); + return WrapMapper.ok(result, "XML文件解析成功"); + + } catch (Exception e) { + // 更新状态为解析失败 - 使用builder模式构建实体后调用updateById + FileRecordEntity failedEntity = FileRecordEntity.builder() + .id(recordId) + .status("PARSE_FAILED") + .processLog("XML文件解析失败: " + e.getMessage()) + .processTime(new Date()) + .build(); + fileRecordService.updateById(failedEntity); + throw new BusinessException("XML文件解析失败: " + e.getMessage()); + } + + } catch (BusinessException e) { + log.error("文件解析失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("文件解析异常: {}", e.getMessage(), e); + return WrapMapper.fail("文件解析失败"); + } + } + + /** + * 获取文件记录详情 + * + * @param recordId 文件记录ID + * @return 文件记录详情包装对象 + */ + @GetMapping("/{recordId}") + @Operation(summary = "获取文件记录详情", description = "根据ID获取文件记录的详细信息") + public Wrapper getFileRecord( + @Parameter(description = "文件记录ID", required = true) + @PathVariable String recordId) { + try { + FileRecordVO result = fileRecordService.detail(recordId); + return WrapMapper.ok(result, "获取文件记录详情成功"); + } catch (BusinessException e) { + log.error("获取文件记录详情失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("获取文件记录详情异常: {}", e.getMessage(), e); + return WrapMapper.fail("获取文件记录详情失败"); + } + } + + /** + * 分页查询文件记录列表 + * + * @param queryDTO 查询封装对象 + * @return 分页结果包装对象 + */ + @GetMapping("/page") + @Operation(summary = "分页查询文件记录", description = "分页查询文件记录列表") + public Wrapper> pageList( + @Parameter(description = "文件记录QueryDTO数据", required = true) + @RequestBody FileRecordQueryDTO queryDTO) { + try { + SearchResult result = fileRecordService.pageList(queryDTO); + return WrapMapper.ok(result); + } catch (Exception e) { + log.error("查询文件记录列表异常: {}", e.getMessage(), e); + return WrapMapper.fail("查询文件记录列表失败"); + } + } + + /** + * 获取所有文件记录列表 + * + * @param queryDTO 查询封装对象 + * @return 文件记录列表包装对象 + */ + @GetMapping("/options") + @Operation(summary = "获取所有文件记录", description = "获取所有文件记录的列表") + public Wrapper> options( + @Parameter(description = "文件记录QueryDTO数据", required = true) + @RequestBody FileRecordQueryDTO queryDTO) { + try { + List result = fileRecordService.option(queryDTO); + return WrapMapper.ok(result, "获取所有文件记录成功"); + } catch (Exception e) { + log.error("获取所有文件记录异常: {}", e.getMessage(), e); + return WrapMapper.fail("获取所有文件记录失败"); + } + } + + /** + * 验证是否为有效的XML文件 + * + * @param file 上传的文件 + * @return 是否有效 + */ + private boolean isValidXmlFile(MultipartFile file) { + if (file == null || file.isEmpty()) { + return false; + } + + String originalFilename = file.getOriginalFilename(); + if (originalFilename == null) { + return false; + } + + // 检查文件扩展名 + String extension = FileUtil.getFileExtension(originalFilename); + return "xml".equalsIgnoreCase(extension); + } + + /** + * 生成TXT文件路径 + * + * @param xmlFilePath XML文件路径 + * @return TXT文件路径 + */ + private String generateTxtFilePath(String xmlFilePath) { + Path xmlPath = Paths.get(xmlFilePath); + String xmlFileName = xmlPath.getFileName().toString(); + String txtFileName = xmlFileName.replace(".xml", ".txt"); + return xmlPath.getParent().resolve(txtFileName).toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/parser/controller/MapperRuleController.java b/src/main/java/com/example/demo/parser/controller/MapperRuleController.java index 80c1844..2cda258 100644 --- a/src/main/java/com/example/demo/parser/controller/MapperRuleController.java +++ b/src/main/java/com/example/demo/parser/controller/MapperRuleController.java @@ -1,219 +1,168 @@ -//package com.example.demo.parser.controller; -// -//import com.example.demo.common.wrapper.WrapMapper; -//import com.example.demo.common.wrapper.Wrapper; -//import com.example.demo.common.exception.BusinessException; -//import com.example.demo.parser.model.dto.MapperRuleDTO; -//import com.example.demo.parser.model.vo.MapperRuleVO; -//import com.example.demo.parser.service.MapperRuleService; -//import com.mybatisflex.core.paginate.Page; -//import io.swagger.v3.oas.annotations.Operation; -//import io.swagger.v3.oas.annotations.Parameter; -//import io.swagger.v3.oas.annotations.tags.Tag; -//import lombok.RequiredArgsConstructor; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.web.bind.annotation.*; -// -//import java.util.List; -// -///** -// * 映射规则控制器 -// * 提供XML映射规则管理的RESTful API接口 -// * -// * @author 岳佳君 (2025年09月25日 16:30:00) -// * @version 1.0.0 -// */ -//@Slf4j -//@RestController -//@RequestMapping("/parser/mapper-rules") -//@RequiredArgsConstructor -//@Tag(name = "映射规则管理", description = "提供XML映射规则管理的接口") -//public class MapperRuleController { -// -// private final MapperRuleService mapperRuleService; -// -// /** -// * 创建映射规则 -// * -// * @param rule 映射规则数据 -// * @return 操作结果包装对象 -// */ -// @PostMapping -// @Operation(summary = "创建映射规则", description = "创建新的映射规则") -// public Wrapper createRule( -// @Parameter(description = "映射规则数据", required = true) -// @RequestBody MapperRuleDTO rule) { -// try { -// String ruleId = mapperRuleService.create(rule); -// MapperRuleVO result = mapperRuleService.getById(ruleId); -// return WrapMapper.ok(result, "映射规则创建成功"); -// } catch (BusinessException e) { -// log.error("映射规则创建失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("映射规则创建异常: {}", e.getMessage(), e); -// return WrapMapper.fail("映射规则创建失败"); -// } -// } -// -// /** -// * 更新映射规则 -// * -// * @param ruleId 规则ID -// * @param rule 映射规则数据 -// * @return 操作结果包装对象 -// */ -// @PutMapping("/{ruleId}") -// @Operation(summary = "更新映射规则", description = "更新指定的映射规则") -// public Wrapper updateRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId, -// @Parameter(description = "映射规则数据", required = true) -// @RequestBody MapperRuleDTO rule) { -// try { -// mapperRuleService.update(ruleId, rule); -// MapperRuleVO result = mapperRuleService.getById(ruleId); -// return WrapMapper.ok(result, "映射规则更新成功"); -// } catch (BusinessException e) { -// log.error("映射规则更新失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("映射规则更新异常: {}", e.getMessage(), e); -// return WrapMapper.fail("映射规则更新失败"); -// } -// } -// -// /** -// * 删除映射规则 -// * -// * @param ruleId 规则ID -// * @return 操作结果包装对象 -// */ -// @DeleteMapping("/{ruleId}") -// @Operation(summary = "删除映射规则", description = "删除指定的映射规则") -// public Wrapper deleteRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// mapperRuleService.delete(ruleId); -// return WrapMapper.ok(null, "映射规则删除成功"); -// } catch (BusinessException e) { -// log.error("映射规则删除失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("映射规则删除异常: {}", e.getMessage(), e); -// return WrapMapper.fail("映射规则删除失败"); -// } -// } -// -// /** -// * 获取映射规则详情 -// * -// * @param ruleId 规则ID -// * @return 映射规则详情包装对象 -// */ -// @GetMapping("/{ruleId}") -// @Operation(summary = "获取映射规则详情", description = "根据ID获取映射规则的详细信息") -// public Wrapper getRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// MapperRuleVO result = mapperRuleService.getById(ruleId); -// return WrapMapper.ok(result, "获取映射规则详情成功"); -// } catch (BusinessException e) { -// log.error("获取映射规则详情失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("获取映射规则详情异常: {}", e.getMessage(), e); -// return WrapMapper.fail("获取映射规则详情失败"); -// } -// } -// -// /** -// * 分页查询映射规则列表 -// * -// * @param pageNumber 页码 -// * @param pageSize 每页大小 -// * @return 分页结果包装对象 -// */ -// @GetMapping("/page") -// @Operation(summary = "分页查询映射规则", description = "分页查询映射规则列表") -// public Wrapper> pageList( -// @Parameter(description = "页码", example = "1") -// @RequestParam(defaultValue = "1") Integer pageNumber, -// @Parameter(description = "每页大小", example = "10") -// @RequestParam(defaultValue = "10") Integer pageSize) { -// try { -// Page result = mapperRuleService.pageList(pageNumber, pageSize); -// return WrapMapper.ok(result, "查询映射规则列表成功"); -// } catch (Exception e) { -// log.error("查询映射规则列表异常: {}", e.getMessage(), e); -// return WrapMapper.fail("查询映射规则列表失败"); -// } -// } -// -// /** -// * 获取所有映射规则列表 -// * -// * @return 映射规则列表包装对象 -// */ -// @GetMapping("/list") -// @Operation(summary = "获取所有映射规则", description = "获取所有映射规则的列表") -// public Wrapper> listAll() { -// try { -// List result = mapperRuleService.listAll(); -// return WrapMapper.ok(result, "获取所有映射规则成功"); -// } catch (Exception e) { -// log.error("获取所有映射规则异常: {}", e.getMessage(), e); -// return WrapMapper.fail("获取所有映射规则失败"); -// } -// } -// -// /** -// * 启用映射规则 -// * -// * @param ruleId 规则ID -// * @return 操作结果包装对象 -// */ -// @PostMapping("/{ruleId}/enable") -// @Operation(summary = "启用映射规则", description = "启用指定的映射规则") -// public Wrapper enableRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// mapperRuleService.enable(ruleId); -// MapperRuleVO result = mapperRuleService.getById(ruleId); -// return WrapMapper.ok(result, "映射规则启用成功"); -// } catch (BusinessException e) { -// log.error("映射规则启用失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("映射规则启用异常: {}", e.getMessage(), e); -// return WrapMapper.fail("映射规则启用失败"); -// } -// } -// -// /** -// * 禁用映射规则 -// * -// * @param ruleId 规则ID -// * @return 操作结果包装对象 -// */ -// @PostMapping("/{ruleId}/disable") -// @Operation(summary = "禁用映射规则", description = "禁用指定的映射规则") -// public Wrapper disableRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// mapperRuleService.disable(ruleId); -// MapperRuleVO result = mapperRuleService.getById(ruleId); -// return WrapMapper.ok(result, "映射规则禁用成功"); -// } catch (BusinessException e) { -// log.error("映射规则禁用失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("映射规则禁用异常: {}", e.getMessage(), e); -// return WrapMapper.fail("映射规则禁用失败"); -// } -// } -//} \ No newline at end of file +package com.example.demo.parser.controller; + +import cn.zhxu.bs.SearchResult; +import com.example.demo.common.wrapper.WrapMapper; +import com.example.demo.common.wrapper.Wrapper; +import com.example.demo.common.exception.BusinessException; +import com.example.demo.parser.model.dto.MapperRuleDTO; +import com.example.demo.parser.model.dto.MapperRuleQueryDTO; +import com.example.demo.parser.model.vo.MapperRuleVO; +import com.example.demo.parser.service.MapperRuleService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 映射规则控制器 + * 提供XML映射规则管理的RESTful API接口 + * + * @author 岳佳君 (2025年09月25日 16:30:00) + * @version 1.0.0 + */ +@Slf4j +@RestController +@RequestMapping("/parser/mapper-rules") +@RequiredArgsConstructor +@Tag(name = "映射规则管理", description = "提供XML映射规则管理的接口") +public class MapperRuleController { + + private final MapperRuleService mapperRuleService; + + /** + * 创建映射规则 + * + * @param rule 映射规则数据 + * @return 操作结果包装对象 + */ + @PostMapping + @Operation(summary = "创建映射规则", description = "创建新的映射规则") + public Wrapper createRule( + @Parameter(description = "映射规则数据", required = true) + @RequestBody MapperRuleDTO rule) { + try { + MapperRuleVO result = mapperRuleService.create(rule); + return WrapMapper.ok(result, "映射规则创建成功"); + } catch (BusinessException e) { + log.error("映射规则创建失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("映射规则创建异常: {}", e.getMessage(), e); + return WrapMapper.fail("映射规则创建失败"); + } + } + + /** + * 更新映射规则 + * + * @param rule 映射规则数据 + * @return 操作结果包装对象 + */ + @PutMapping("/{ruleId}") + @Operation(summary = "更新映射规则", description = "更新指定的映射规则") + public Wrapper updateRule( + @Parameter(description = "映射规则数据", required = true) + @RequestBody MapperRuleDTO rule) { + try { + mapperRuleService.update(rule); + MapperRuleVO result = mapperRuleService.detail(rule.getId()); + return WrapMapper.ok(result, "映射规则更新成功"); + } catch (BusinessException e) { + log.error("映射规则更新失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("映射规则更新异常: {}", e.getMessage(), e); + return WrapMapper.fail("映射规则更新失败"); + } + } + + /** + * 删除映射规则 + * + * @param ruleId 规则ID + * @return 操作结果包装对象 + */ + @DeleteMapping("/{ruleId}") + @Operation(summary = "删除映射规则", description = "删除指定的映射规则") + public Wrapper deleteRule( + @Parameter(description = "规则ID", required = true) + @PathVariable String ruleId) { + try { + mapperRuleService.delete(ruleId); + return WrapMapper.ok(null, "映射规则删除成功"); + } catch (BusinessException e) { + log.error("映射规则删除失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("映射规则删除异常: {}", e.getMessage(), e); + return WrapMapper.fail("映射规则删除失败"); + } + } + + /** + * 获取映射规则详情 + * + * @param ruleId 规则ID + * @return 映射规则详情包装对象 + */ + @GetMapping("/{ruleId}") + @Operation(summary = "获取映射规则详情", description = "根据ID获取映射规则的详细信息") + public Wrapper getRule( + @Parameter(description = "规则ID", required = true) + @PathVariable String ruleId) { + try { + MapperRuleVO result = mapperRuleService.detail(ruleId); + return WrapMapper.ok(result, "获取映射规则详情成功"); + } catch (BusinessException e) { + log.error("获取映射规则详情失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("获取映射规则详情异常: {}", e.getMessage(), e); + return WrapMapper.fail("获取映射规则详情失败"); + } + } + + /** + * 分页查询映射规则列表 + * + * @param queryDTO 查询封装对象 + * @return 分页结果包装对象 + */ + @GetMapping("/page") + @Operation(summary = "分页查询映射规则", description = "分页查询映射规则列表") + public Wrapper> pageList( + @Parameter(description = "映射规则QueryDTO数据", required = true) + @RequestBody MapperRuleQueryDTO queryDTO) { + try { + SearchResult result = mapperRuleService.pageList(queryDTO); + return WrapMapper.ok(result); + } catch (Exception e) { + log.error("查询映射规则列表异常: {}", e.getMessage(), e); + return WrapMapper.fail("查询映射规则列表失败"); + } + } + + /** + * 获取所有映射规则列表 + * + * @return 映射规则列表包装对象 + */ + @GetMapping("/options") + @Operation(summary = "获取所有映射规则", description = "获取所有映射规则的列表") + public Wrapper> options( + @Parameter(description = "映射规则QueryDTO数据", required = true) + @RequestBody MapperRuleQueryDTO queryDTO) { + try { + List result = mapperRuleService.option(queryDTO); + return WrapMapper.ok(result, "获取所有映射规则成功"); + } catch (Exception e) { + log.error("获取所有映射规则异常: {}", e.getMessage(), e); + return WrapMapper.fail("获取所有映射规则失败"); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/parser/controller/ParseRuleController.java b/src/main/java/com/example/demo/parser/controller/ParseRuleController.java index 34c73b2..7e4e902 100644 --- a/src/main/java/com/example/demo/parser/controller/ParseRuleController.java +++ b/src/main/java/com/example/demo/parser/controller/ParseRuleController.java @@ -1,219 +1,170 @@ -//package com.example.demo.parser.controller; -// -//import com.example.demo.common.wrapper.WrapMapper; -//import com.example.demo.common.wrapper.Wrapper; -//import com.example.demo.common.exception.BusinessException; -//import com.example.demo.parser.model.dto.ParseRuleDTO; -//import com.example.demo.parser.model.vo.ParseRuleVO; -//import com.example.demo.parser.service.ParseRuleService; -//import com.mybatisflex.core.paginate.Page; -//import io.swagger.v3.oas.annotations.Operation; -//import io.swagger.v3.oas.annotations.Parameter; -//import io.swagger.v3.oas.annotations.tags.Tag; -//import lombok.RequiredArgsConstructor; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.web.bind.annotation.*; -// -//import java.util.List; -// -///** -// * 解析规则控制器 -// * 提供XML解析规则管理的RESTful API接口 -// * -// * @author 岳佳君 (2025年09月25日 16:30:00) -// * @version 1.0.0 -// */ -//@Slf4j -//@RestController -//@RequestMapping("/parser/rules") -//@RequiredArgsConstructor -//@Tag(name = "解析规则管理", description = "提供XML解析规则管理的接口") -//public class ParseRuleController { -// -// private final ParseRuleService parseRuleService; -// -// /** -// * 创建解析规则 -// * -// * @param rule 解析规则数据 -// * @return 操作结果包装对象 -// */ -// @PostMapping -// @Operation(summary = "创建解析规则", description = "创建新的解析规则") -// public Wrapper createRule( -// @Parameter(description = "解析规则数据", required = true) -// @RequestBody ParseRuleDTO rule) { -// try { -// String ruleId = parseRuleService.create(rule); -// ParseRuleVO result = parseRuleService.getById(ruleId); -// return WrapMapper.ok(result, "解析规则创建成功"); -// } catch (BusinessException e) { -// log.error("解析规则创建失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("解析规则创建异常: {}", e.getMessage(), e); -// return WrapMapper.fail("解析规则创建失败"); -// } -// } -// -// /** -// * 更新解析规则 -// * -// * @param ruleId 规则ID -// * @param rule 解析规则数据 -// * @return 操作结果包装对象 -// */ -// @PutMapping("/{ruleId}") -// @Operation(summary = "更新解析规则", description = "更新指定的解析规则") -// public Wrapper updateRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId, -// @Parameter(description = "解析规则数据", required = true) -// @RequestBody ParseRuleDTO rule) { -// try { -// parseRuleService.update(ruleId, rule); -// ParseRuleVO result = parseRuleService.getById(ruleId); -// return WrapMapper.ok(result, "解析规则更新成功"); -// } catch (BusinessException e) { -// log.error("解析规则更新失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("解析规则更新异常: {}", e.getMessage(), e); -// return WrapMapper.fail("解析规则更新失败"); -// } -// } -// -// /** -// * 删除解析规则 -// * -// * @param ruleId 规则ID -// * @return 操作结果包装对象 -// */ -// @DeleteMapping("/{ruleId}") -// @Operation(summary = "删除解析规则", description = "删除指定的解析规则") -// public Wrapper deleteRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// parseRuleService.delete(ruleId); -// return WrapMapper.ok(null, "解析规则删除成功"); -// } catch (BusinessException e) { -// log.error("解析规则删除失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("解析规则删除异常: {}", e.getMessage(), e); -// return WrapMapper.fail("解析规则删除失败"); -// } -// } -// -// /** -// * 获取解析规则详情 -// * -// * @param ruleId 规则ID -// * @return 解析规则详情包装对象 -// */ -// @GetMapping("/{ruleId}") -// @Operation(summary = "获取解析规则详情", description = "根据ID获取解析规则的详细信息") -// public Wrapper getRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// ParseRuleVO result = parseRuleService.getById(ruleId); -// return WrapMapper.ok(result, "获取解析规则详情成功"); -// } catch (BusinessException e) { -// log.error("获取解析规则详情失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("获取解析规则详情异常: {}", e.getMessage(), e); -// return WrapMapper.fail("获取解析规则详情失败"); -// } -// } -// -// /** -// * 分页查询解析规则列表 -// * -// * @param pageNumber 页码 -// * @param pageSize 每页大小 -// * @return 分页结果包装对象 -// */ -// @GetMapping("/page") -// @Operation(summary = "分页查询解析规则", description = "分页查询解析规则列表") -// public Wrapper> pageList( -// @Parameter(description = "页码", example = "1") -// @RequestParam(defaultValue = "1") Integer pageNumber, -// @Parameter(description = "每页大小", example = "10") -// @RequestParam(defaultValue = "10") Integer pageSize) { -// try { -// Page result = parseRuleService.pageList(pageNumber, pageSize); -// return WrapMapper.ok(result, "查询解析规则列表成功"); -// } catch (Exception e) { -// log.error("查询解析规则列表异常: {}", e.getMessage(), e); -// return WrapMapper.fail("查询解析规则列表失败"); -// } -// } -// -// /** -// * 获取所有解析规则列表 -// * -// * @return 解析规则列表包装对象 -// */ -// @GetMapping("/list") -// @Operation(summary = "获取所有解析规则", description = "获取所有解析规则的列表") -// public Wrapper> listAll() { -// try { -// List result = parseRuleService.listAll(); -// return WrapMapper.ok(result, "获取所有解析规则成功"); -// } catch (Exception e) { -// log.error("获取所有解析规则异常: {}", e.getMessage(), e); -// return WrapMapper.fail("获取所有解析规则失败"); -// } -// } -// -// /** -// * 启用解析规则 -// * -// * @param ruleId 规则ID -// * @return 操作结果包装对象 -// */ -// @PostMapping("/{ruleId}/enable") -// @Operation(summary = "启用解析规则", description = "启用指定的解析规则") -// public Wrapper enableRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// parseRuleService.enable(ruleId); -// ParseRuleVO result = parseRuleService.getById(ruleId); -// return WrapMapper.ok(result, "解析规则启用成功"); -// } catch (BusinessException e) { -// log.error("解析规则启用失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("解析规则启用异常: {}", e.getMessage(), e); -// return WrapMapper.fail("解析规则启用失败"); -// } -// } -// -// /** -// * 禁用解析规则 -// * -// * @param ruleId 规则ID -// * @return 操作结果包装对象 -// */ -// @PostMapping("/{ruleId}/disable") -// @Operation(summary = "禁用解析规则", description = "禁用指定的解析规则") -// public Wrapper disableRule( -// @Parameter(description = "规则ID", required = true) -// @PathVariable String ruleId) { -// try { -// parseRuleService.disable(ruleId); -// ParseRuleVO result = parseRuleService.getById(ruleId); -// return WrapMapper.ok(result, "解析规则禁用成功"); -// } catch (BusinessException e) { -// log.error("解析规则禁用失败: {}", e.getMessage(), e); -// return WrapMapper.fail(e.getMessage()); -// } catch (Exception e) { -// log.error("解析规则禁用异常: {}", e.getMessage(), e); -// return WrapMapper.fail("解析规则禁用失败"); -// } -// } -//} \ No newline at end of file +package com.example.demo.parser.controller; + +import cn.zhxu.bs.SearchResult; +import com.example.demo.common.wrapper.WrapMapper; +import com.example.demo.common.wrapper.Wrapper; +import com.example.demo.common.exception.BusinessException; +import com.example.demo.parser.model.dto.ParseRuleDTO; +import com.example.demo.parser.model.dto.ParseRuleQueryDTO; +import com.example.demo.parser.model.vo.ParseRuleVO; +import com.example.demo.parser.service.ParseRuleService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 解析规则控制器 + * 提供XML解析规则管理的RESTful API接口 + * + * @author 岳佳君 (2025年09月25日 16:30:00) + * @version 1.0.0 + */ +@Slf4j +@RestController +@RequestMapping("/parser/rules") +@RequiredArgsConstructor +@Tag(name = "解析规则管理", description = "提供XML解析规则管理的接口") +public class ParseRuleController { + + private final ParseRuleService parseRuleService; + + /** + * 创建解析规则 + * + * @param rule 解析规则数据 + * @return 操作结果包装对象 + */ + @PostMapping + @Operation(summary = "创建解析规则", description = "创建新的解析规则") + public Wrapper createRule( + @Parameter(description = "解析规则数据", required = true) + @RequestBody ParseRuleDTO rule) { + try { + ParseRuleVO result = parseRuleService.create(rule); + return WrapMapper.ok(result, "解析规则创建成功"); + } catch (BusinessException e) { + log.error("解析规则创建失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("解析规则创建异常: {}", e.getMessage(), e); + return WrapMapper.fail("解析规则创建失败"); + } + } + + /** + * 更新解析规则 + * + * @param rule 解析规则数据 + * @return 操作结果包装对象 + */ + @PutMapping("/{ruleId}") + @Operation(summary = "更新解析规则", description = "更新指定的解析规则") + public Wrapper updateRule( + @Parameter(description = "解析规则数据", required = true) + @RequestBody ParseRuleDTO rule) { + try { + parseRuleService.update(rule); + ParseRuleVO result = parseRuleService.detail(rule.getId()); + return WrapMapper.ok(result, "解析规则更新成功"); + } catch (BusinessException e) { + log.error("解析规则更新失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("解析规则更新异常: {}", e.getMessage(), e); + return WrapMapper.fail("解析规则更新失败"); + } + } + + /** + * 删除解析规则 + * + * @param ruleId 规则ID + * @return 操作结果包装对象 + */ + @DeleteMapping("/{ruleId}") + @Operation(summary = "删除解析规则", description = "删除指定的解析规则") + public Wrapper deleteRule( + @Parameter(description = "规则ID", required = true) + @PathVariable String ruleId) { + try { + parseRuleService.delete(ruleId); + return WrapMapper.ok(null, "解析规则删除成功"); + } catch (BusinessException e) { + log.error("解析规则删除失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("解析规则删除异常: {}", e.getMessage(), e); + return WrapMapper.fail("解析规则删除失败"); + } + } + + /** + * 获取解析规则详情 + * + * @param ruleId 规则ID + * @return 解析规则详情包装对象 + */ + @GetMapping("/{ruleId}") + @Operation(summary = "获取解析规则详情", description = "根据ID获取解析规则的详细信息") + public Wrapper getRule( + @Parameter(description = "规则ID", required = true) + @PathVariable String ruleId) { + try { + ParseRuleVO result = parseRuleService.detail(ruleId); + return WrapMapper.ok(result, "获取解析规则详情成功"); + } catch (BusinessException e) { + log.error("获取解析规则详情失败: {}", e.getMessage(), e); + return WrapMapper.fail(e.getMessage()); + } catch (Exception e) { + log.error("获取解析规则详情异常: {}", e.getMessage(), e); + return WrapMapper.fail("获取解析规则详情失败"); + } + } + + /** + * 分页查询解析规则列表 + * + * @param queryDTO 查询封装对象 + * @return 分页结果包装对象 + */ + @GetMapping("/page") + @Operation(summary = "分页查询解析规则", description = "分页查询解析规则列表") + public Wrapper> pageList( + @Parameter(description = "解析规则QueryDTO数据", required = true) + @RequestBody ParseRuleQueryDTO queryDTO) { + try { + SearchResult result = parseRuleService.pageList(queryDTO); + return WrapMapper.ok(result); + } catch (Exception e) { + log.error("查询解析规则列表异常: {}", e.getMessage(), e); + return WrapMapper.fail("查询解析规则列表失败"); + } + } + + /** + * 获取所有解析规则列表 + * + * @param queryDTO 查询封装对象 + * @return 解析规则列表包装对象 + */ + @GetMapping("/options") + @Operation(summary = "获取所有解析规则", description = "获取所有解析规则的列表") + public Wrapper> options( + @Parameter(description = "解析规则QueryDTO数据", required = true) + @RequestBody ParseRuleQueryDTO queryDTO) { + try { + List result = parseRuleService.option(queryDTO); + return WrapMapper.ok(result, "获取所有解析规则成功"); + } catch (Exception e) { + log.error("获取所有解析规则异常: {}", e.getMessage(), e); + return WrapMapper.fail("获取所有解析规则失败"); + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/parser/model/dto/FileRecordDTO.java b/src/main/java/com/example/demo/parser/model/dto/FileRecordDTO.java index 1229b21..a0da88e 100644 --- a/src/main/java/com/example/demo/parser/model/dto/FileRecordDTO.java +++ b/src/main/java/com/example/demo/parser/model/dto/FileRecordDTO.java @@ -71,7 +71,7 @@ public class FileRecordDTO extends BaseDTO implements Serializable { */ @Schema(description = "文件状态") @DbField("status") - private Integer status; + private String status; /** * 上传时间开始