Browse Source

对接解析文档,获取知识点接口

master
luogw 1 month ago
parent
commit
5bddbe7833
  1. 4
      src/main/java/com/project/appeal/application/AppealApplication.java
  2. 4
      src/main/java/com/project/appeal/application/Impl/AppealApplicationImpl.java
  3. 4
      src/main/java/com/project/appeal/controller/AppealAdminController.java
  4. 10
      src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java
  5. 4
      src/main/java/com/project/appeal/domain/service/SearchAppealDomainService.java
  6. 5
      src/main/java/com/project/information/application/KnowledgePointApplicationService.java
  7. 142
      src/main/java/com/project/information/application/KnowledgePointApplicationServiceImpl.java
  8. 41
      src/main/java/com/project/information/config/InformationAsyncConfig.java
  9. 36
      src/main/java/com/project/information/domain/dto/KnowledgePointDTO.java
  10. 49
      src/main/java/com/project/information/domain/entity/KnowledgePointEntity.java
  11. 23
      src/main/java/com/project/information/domain/service/impl/UploadInformationDomainServiceImpl.java
  12. 4
      src/main/java/com/project/information/mapper/KnowledgePointMapper.java
  13. 7
      src/main/java/com/project/operation/application/OperationLogApplicationServiceImpl.java
  14. 4
      src/main/java/com/project/operation/application/impl/OperationLogApplicationService.java
  15. 4
      src/main/java/com/project/operation/controller/OperationLogController.java
  16. 6
      src/main/java/com/project/operation/domain/service/SearchOperationLogDomainService.java
  17. 12
      src/main/java/com/project/operation/domain/service/impl/SearchOperationLogDomainServiceImpl.java
  18. 4
      src/main/resources/application.yml

4
src/main/java/com/project/appeal/application/AppealApplication.java

@ -1,9 +1,9 @@
package com.project.appeal.application; package com.project.appeal.application;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.tingyugetc520.ali.dingtalk.error.DtErrorException; import com.github.tingyugetc520.ali.dingtalk.error.DtErrorException;
import com.project.appeal.domain.dto.AppealDTO; import com.project.appeal.domain.dto.AppealDTO;
import com.project.appeal.domain.param.AppealParam; import com.project.appeal.domain.param.AppealParam;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import java.util.List; import java.util.List;
@ -17,5 +17,5 @@ public interface AppealApplication {
/** /**
* 查询申诉列表 * 查询申诉列表
*/ */
Result<IPage<AppealDTO>> list(AppealParam appealParam); Result<PageResult<AppealDTO>> list(AppealParam appealParam);
} }

4
src/main/java/com/project/appeal/application/Impl/AppealApplicationImpl.java

@ -1,6 +1,5 @@
package com.project.appeal.application.Impl; package com.project.appeal.application.Impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.tingyugetc520.ali.dingtalk.error.DtErrorException; import com.github.tingyugetc520.ali.dingtalk.error.DtErrorException;
import com.project.appeal.application.AppealApplication; import com.project.appeal.application.AppealApplication;
import com.project.appeal.domain.dto.AppealDTO; import com.project.appeal.domain.dto.AppealDTO;
@ -8,6 +7,7 @@ import com.project.appeal.domain.param.AppealParam;
import com.project.appeal.domain.service.CheckAppealDomainService; import com.project.appeal.domain.service.CheckAppealDomainService;
import com.project.appeal.domain.service.SaveAppealDomainService; import com.project.appeal.domain.service.SaveAppealDomainService;
import com.project.appeal.domain.service.SearchAppealDomainService; import com.project.appeal.domain.service.SearchAppealDomainService;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -36,7 +36,7 @@ public class AppealApplicationImpl implements AppealApplication {
* 查询申诉列表 * 查询申诉列表
*/ */
@Override @Override
public Result<IPage<AppealDTO>> list(AppealParam appealParam) { public Result<PageResult<AppealDTO>> list(AppealParam appealParam) {
return searchAppealDomainService.list(appealParam); return searchAppealDomainService.list(appealParam);
} }
} }

4
src/main/java/com/project/appeal/controller/AppealAdminController.java

@ -1,10 +1,10 @@
package com.project.appeal.controller; package com.project.appeal.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.tingyugetc520.ali.dingtalk.error.DtErrorException; import com.github.tingyugetc520.ali.dingtalk.error.DtErrorException;
import com.project.appeal.application.AppealApplication; import com.project.appeal.application.AppealApplication;
import com.project.appeal.domain.dto.AppealDTO; import com.project.appeal.domain.dto.AppealDTO;
import com.project.appeal.domain.param.AppealParam; import com.project.appeal.domain.param.AppealParam;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.operation.annotation.OperationLog; import com.project.operation.annotation.OperationLog;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -26,7 +26,7 @@ public class AppealAdminController {
} }
@GetMapping("list") @GetMapping("list")
public Result<IPage<AppealDTO>> list(AppealParam appealParam){ public Result<PageResult<AppealDTO>> list(AppealParam appealParam){
return appealApplication.list(appealParam); return appealApplication.list(appealParam);
} }
} }

10
src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java

@ -1,20 +1,16 @@
package com.project.appeal.domain.service.Impl; package com.project.appeal.domain.service.Impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.project.appeal.domain.dto.AppealDTO; import com.project.appeal.domain.dto.AppealDTO;
import com.project.appeal.domain.entity.AppealEntity; import com.project.appeal.domain.entity.AppealEntity;
import com.project.appeal.domain.param.AppealParam; import com.project.appeal.domain.param.AppealParam;
import com.project.appeal.domain.service.AppealBaseService;
import com.project.appeal.domain.service.SearchAppealDomainService; import com.project.appeal.domain.service.SearchAppealDomainService;
import com.project.appeal.mapper.AppealMapper; import com.project.appeal.mapper.AppealMapper;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.base.domain.utils.PageConverter; import com.project.base.domain.utils.PageConverter;
import com.project.exam.domain.entity.ExamRecordEntity;
import com.project.exam.domain.service.ExamRecordBaseService;
import com.project.information.domain.dto.InformationDTO;
import com.project.information.domain.entity.KnowledgePointEntity; import com.project.information.domain.entity.KnowledgePointEntity;
import com.project.information.domain.service.KnowledgePointBaseService; import com.project.information.domain.service.KnowledgePointBaseService;
import com.project.question.domain.entity.QuestionEntity; import com.project.question.domain.entity.QuestionEntity;
@ -42,7 +38,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService
private KnowledgePointBaseService knowledgePointBaseService; private KnowledgePointBaseService knowledgePointBaseService;
@Override @Override
public Result<IPage<AppealDTO>> list(AppealParam appealParam) { public Result<PageResult<AppealDTO>> list(AppealParam appealParam) {
QueryWrapper<AppealEntity> appealEntityQueryWrapper = new QueryWrapper<>(); QueryWrapper<AppealEntity> appealEntityQueryWrapper = new QueryWrapper<>();
IPage<AppealDTO> appealDTOIPage = new Page<>(); IPage<AppealDTO> appealDTOIPage = new Page<>();
Map<Long, String> taskIdToSubLineNameMap = Map.of(); Map<Long, String> taskIdToSubLineNameMap = Map.of();
@ -60,7 +56,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService
appealDTOIPage = appealEntityPage.convert(entity -> entity.toDTO(AppealDTO::new)); appealDTOIPage = appealEntityPage.convert(entity -> entity.toDTO(AppealDTO::new));
} }
appealDTOIPage.setRecords(buildDTO(appealDTOIPage.getRecords(),taskIdToSubLineNameMap)); appealDTOIPage.setRecords(buildDTO(appealDTOIPage.getRecords(),taskIdToSubLineNameMap));
return Result.success(appealDTOIPage); return Result.page(appealDTOIPage);
} }

4
src/main/java/com/project/appeal/domain/service/SearchAppealDomainService.java

@ -1,10 +1,10 @@
package com.project.appeal.domain.service; package com.project.appeal.domain.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.appeal.domain.dto.AppealDTO; import com.project.appeal.domain.dto.AppealDTO;
import com.project.appeal.domain.param.AppealParam; import com.project.appeal.domain.param.AppealParam;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
public interface SearchAppealDomainService { public interface SearchAppealDomainService {
Result<IPage<AppealDTO>> list(AppealParam appealParam); Result<PageResult<AppealDTO>> list(AppealParam appealParam);
} }

5
src/main/java/com/project/information/application/KnowledgePointApplicationService.java

@ -2,7 +2,12 @@ package com.project.information.application;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.information.domain.dto.KnowledgePointStatisticsDTO; import com.project.information.domain.dto.KnowledgePointStatisticsDTO;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
public interface KnowledgePointApplicationService { public interface KnowledgePointApplicationService {
Result<KnowledgePointStatisticsDTO> getSum(Long subLineId); Result<KnowledgePointStatisticsDTO> getSum(Long subLineId);
void parse(Map<Long, MultipartFile> fileMap);
} }

142
src/main/java/com/project/information/application/KnowledgePointApplicationServiceImpl.java

@ -1,18 +1,160 @@
package com.project.information.application; package com.project.information.application;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.information.domain.dto.KnowledgePointStatisticsDTO; import com.project.information.domain.dto.KnowledgePointStatisticsDTO;
import com.project.information.domain.entity.KnowledgePointEntity;
import com.project.information.domain.service.KnowledgePointBaseService;
import com.project.information.domain.service.SearchKnowledgePointDomainService; import com.project.information.domain.service.SearchKnowledgePointDomainService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import java.util.stream.Collectors;
@Service @Service
@Slf4j
public class KnowledgePointApplicationServiceImpl implements KnowledgePointApplicationService { public class KnowledgePointApplicationServiceImpl implements KnowledgePointApplicationService {
@Autowired @Autowired
private SearchKnowledgePointDomainService searchKnowledgePointDomainService; private SearchKnowledgePointDomainService searchKnowledgePointDomainService;
@Autowired
private KnowledgePointBaseService knowledgePointBaseService;
private final RestTemplate restTemplate = new RestTemplate();
@Value("${analysis.host:172.16.204.50}")
private String analysisHost;
@Value("${analysis.port:8888}")
private String analysisPort;
@Value("${analysis.url:/word/parse}")
private String analysisUrl;
@Override @Override
public Result<KnowledgePointStatisticsDTO> getSum(Long subLineId) { public Result<KnowledgePointStatisticsDTO> getSum(Long subLineId) {
return Result.success(searchKnowledgePointDomainService.getSum(subLineId)); return Result.success(searchKnowledgePointDomainService.getSum(subLineId));
} }
@Override
@Async("parseExecutor")
public void parse(Map<Long, MultipartFile> fileMap) {
for (Long id : fileMap.keySet()) {
try {
uploadToPython(fileMap.get(id),id);
} catch (Exception e) {
log.error("文件解析失败:{}", fileMap.get(id).getOriginalFilename(), e);
}
}
}
/**
* 发送请求解析文档知识点
*/
private void uploadToPython(MultipartFile file,Long id) throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setAccept(MediaType.parseMediaTypes("*/*"));
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
ByteArrayResource fileResource = new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getOriginalFilename();
}
};
body.add("file", fileResource);
HttpEntity<MultiValueMap<String, Object>> requestEntity =
new HttpEntity<>(body, headers);
ResponseEntity<String> response =
restTemplate.postForEntity("http://"+analysisHost+":"+analysisPort+analysisUrl, requestEntity, String.class);
log.info("文件 [{}] 解析完成,返回结果:{}", file.getOriginalFilename(), response.getBody());
List<KnowledgePointEntity> knowledgePointEntities = parseAnalysisResponse(response,id);
if(!CollectionUtils.isEmpty(knowledgePointEntities)){
knowledgePointBaseService.saveBatch(knowledgePointEntities);
}
}
/**
* 解析返回数据
*/
public List<KnowledgePointEntity> parseAnalysisResponse(ResponseEntity<String> response,Long id) throws JsonProcessingException {
if (response == null || response.getBody() == null) {
return Collections.emptyList();
}
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> root =
mapper.readValue(response.getBody(), new TypeReference<>() {});
if (root.containsKey("detail")) {
log.error("文件解析失败:{}", root.get("detail"));
return Collections.emptyList();
}
List<Map<String, Object>> data = new ArrayList<>();
Object dataObj = root.get("data");
if (dataObj instanceof List && ObjectUtils.isNotEmpty(dataObj)) {
data = (List<Map<String, Object>>) dataObj;
}else{
log.error("文件解析失败");
return Collections.emptyList();
}
return data.stream()
.filter(item -> {
Object attrs = item.get("attrs");
return attrs instanceof List && !((List<?>) attrs).isEmpty();
})
.map(item -> {
List<Map<String, String>> attrs =
(List<Map<String, String>>) item.get("attrs");
//判断是否存在精准知识点
boolean hasYellow = attrs.stream()
.flatMap(m -> m.values().stream())
.anyMatch("黄色"::equals);
//收集考点信息
List<KnowledgePointEntity.ExamFocus> focusList = attrs.stream()
.flatMap(m -> m.entrySet().stream())
.map(e -> {
KnowledgePointEntity.ExamFocus f = new KnowledgePointEntity.ExamFocus();
f.setExamFocusContent(e.getKey());
f.setColor(e.getValue());
return f;
})
.collect(Collectors.toList());
KnowledgePointEntity entity = new KnowledgePointEntity();
entity.setContent((String) item.get("knowledge"));
entity.setKnowledgeType(hasYellow ? 0 : 1);
entity.setExamFocusList(focusList);
entity.setInformationId(id);
return entity;
}).collect(Collectors.toList());
}
} }

41
src/main/java/com/project/information/config/InformationAsyncConfig.java

@ -0,0 +1,41 @@
package com.project.information.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 异步配置类开启异步支持
*/
@Configuration
@EnableAsync
public class InformationAsyncConfig {
/**
* 自定义发生通知异步线程池
*/
@Bean(name = "parseExecutor")
public Executor parseExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 核心线程数(根据业务量调整)
executor.setCorePoolSize(5);
// 最大线程数
executor.setMaxPoolSize(10);
// 队列容量
executor.setQueueCapacity(100);
// 线程前缀名(便于日志排查)
executor.setThreadNamePrefix("parse-file-");
// 线程空闲超时时间
executor.setKeepAliveSeconds(60);
// 拒绝策略:队列满时由调用线程执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 初始化线程池
executor.initialize();
return executor;
}
}

36
src/main/java/com/project/information/domain/dto/KnowledgePointDTO.java

@ -1,7 +1,13 @@
package com.project.information.domain.dto; package com.project.information.domain.dto;
import cn.hutool.core.collection.CollUtil;
import com.project.base.domain.dto.BaseDTO; import com.project.base.domain.dto.BaseDTO;
import com.project.information.domain.entity.KnowledgePointEntity;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.function.Supplier;
@Data @Data
public class KnowledgePointDTO extends BaseDTO { public class KnowledgePointDTO extends BaseDTO {
@ -9,5 +15,33 @@ public class KnowledgePointDTO extends BaseDTO {
private String content; private String content;
private Integer backgroundColor; private Integer knowledgeType;
private List<ExamFocusDTO> examFocusDTOList;
@Data
public static class ExamFocusDTO {
/*考点底色*/
private String color;
/*考点内容*/
private String examFocusContent;
}
@Override
public <T> T toEntity(Supplier<T> supplier) {
T result = super.toEntity(supplier);
if (result instanceof KnowledgePointEntity entity) {
// 处理内部列表快照的转换
if (CollUtil.isNotEmpty(this.examFocusDTOList)) {
List<KnowledgePointEntity.ExamFocus> examFocusList = this.examFocusDTOList.stream().map(dto -> {
KnowledgePointEntity.ExamFocus examFocus = new KnowledgePointEntity.ExamFocus();
BeanUtils.copyProperties(dto, examFocus);
return examFocus;
}).toList();
entity.setExamFocusList(examFocusList);
}
entity.setId(this.getId());
}
return result;
}
} }

49
src/main/java/com/project/information/domain/entity/KnowledgePointEntity.java

@ -1,15 +1,26 @@
package com.project.information.domain.entity; package com.project.information.domain.entity;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.project.base.domain.entity.BaseEntity; import com.project.base.domain.entity.BaseEntity;
import com.project.exam.domain.dto.ExamRecordDTO;
import com.project.exam.domain.entity.ExamRecordEntity;
import com.project.information.domain.dto.KnowledgePointDTO;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.function.Supplier;
@Data @Data
@Table(name = "evaluator_knowledge_point" , @Table(name = "evaluator_knowledge_point" ,
@ -25,13 +36,43 @@ public class KnowledgePointEntity extends BaseEntity {
@Column(name = "content", columnDefinition="TEXT comment '原始知识点文本内容'") @Column(name = "content", columnDefinition="TEXT comment '原始知识点文本内容'")
private String content; private String content;
@Comment("知识点底色,0-黄,1-红,2-绿") @Comment("知识点类型,0-精准,1-模糊")
@Column(name = "background_color") @Column(name = "knowledge_type")
@TableField("background_color") @TableField("knowledge_type")
private Integer backgroundColor; private Integer knowledgeType;
@Column(name = "information_id") @Column(name = "information_id")
@Comment("来源资料id") @Comment("来源资料id")
@TableField("information_id") @TableField("information_id")
private Long informationId; private Long informationId;
@TableField(value = "exam_focus_list" , typeHandler = JacksonTypeHandler.class)
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "exam_focus_list", columnDefinition = "json comment '考点集合'")
private List<ExamFocus> examFocusList;
@Data
public static class ExamFocus {
/*考点底色*/
private String color;
/*考点内容*/
private String examFocusContent;
}
@Override
public <T> T toDTO(Supplier<T> supplier) {
T result = super.toDTO(supplier);
if (result instanceof KnowledgePointDTO dto) {
// 处理内部快照列表从 Entity 到 DTO 的转换
if (CollUtil.isNotEmpty(this.examFocusList)) {
List<KnowledgePointDTO.ExamFocusDTO> dtoList = this.examFocusList.stream().map(examFocus -> {
KnowledgePointDTO.ExamFocusDTO examFocusDTO = new KnowledgePointDTO.ExamFocusDTO();
BeanUtils.copyProperties(examFocus, examFocusDTO);
return examFocusDTO;
}).toList();
dto.setExamFocusDTOList(dtoList);
}
}
return result;
}
} }

23
src/main/java/com/project/information/domain/service/impl/UploadInformationDomainServiceImpl.java

@ -6,8 +6,10 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.project.base.config.CustomIdGenerator;
import com.project.base.domain.exception.BusinessErrorException; import com.project.base.domain.exception.BusinessErrorException;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.information.application.KnowledgePointApplicationService;
import com.project.information.domain.dto.InformationDTO; import com.project.information.domain.dto.InformationDTO;
import com.project.information.domain.entity.InformationEntity; import com.project.information.domain.entity.InformationEntity;
import com.project.information.domain.entity.ProductLineEntity; import com.project.information.domain.entity.ProductLineEntity;
@ -22,10 +24,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Service @Service
@ -37,6 +36,10 @@ public class UploadInformationDomainServiceImpl implements UploadInformationDoma
private ProductLineBaseService productLineBaseService; private ProductLineBaseService productLineBaseService;
@Autowired @Autowired
private MinIoUtils minIoUtils; private MinIoUtils minIoUtils;
@Autowired
private KnowledgePointApplicationService knowledgePointApplicationService;
@Autowired
private CustomIdGenerator customIdGenerator;
private static final long MAX_SIZE = 50 * 1024 * 1024; // 50MB 限制 private static final long MAX_SIZE = 50 * 1024 * 1024; // 50MB 限制
@ -92,6 +95,7 @@ public class UploadInformationDomainServiceImpl implements UploadInformationDoma
throw new BusinessErrorException("不存在的子产品线"); throw new BusinessErrorException("不存在的子产品线");
} }
List<String> successFiles = new ArrayList<>(); List<String> successFiles = new ArrayList<>();
Map<Long, MultipartFile> fileMap = new HashMap<>();
for (MultipartFile file : files) { for (MultipartFile file : files) {
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
// 删掉原来的 // 删掉原来的
@ -112,8 +116,17 @@ public class UploadInformationDomainServiceImpl implements UploadInformationDoma
informationDTO.setFileSuffix(FileUtil.getSuffix(fileName)); informationDTO.setFileSuffix(FileUtil.getSuffix(fileName));
informationDTO.setFilePath(filePath); informationDTO.setFilePath(filePath);
informationDTO.setParseStatus(InformationParseStatusEnum.NotStart.getValue()); informationDTO.setParseStatus(InformationParseStatusEnum.NotStart.getValue());
informationBaseService.save(informationDTO.toEntity(InformationEntity::new)); InformationEntity entity = informationDTO.toEntity(InformationEntity::new);
entity.setId(customIdGenerator.nextId(entity));
informationBaseService.save(entity);
//收集file
fileMap.put(entity.getId(), file);
} }
//发起解析文档知识点
knowledgePointApplicationService.parse(fileMap);
return Result.success(String.format("上传成功:【%s】" , String.join("," , successFiles))); return Result.success(String.format("上传成功:【%s】" , String.join("," , successFiles)));
} }
} }

4
src/main/java/com/project/information/mapper/KnowledgePointMapper.java

@ -19,8 +19,8 @@ public interface KnowledgePointMapper extends BaseMapper<KnowledgePointEntity> {
*/ */
@Select({ @Select({
"SELECT", "SELECT",
" SUM(CASE WHEN p.background_color = 0 THEN 1 ELSE 0 END) AS preciseSum,", " SUM(CASE WHEN p.knowledgeType = 0 THEN 1 ELSE 0 END) AS preciseSum,",
" SUM(CASE WHEN p.background_color = 1 THEN 1 ELSE 0 END) AS blurSum", " SUM(CASE WHEN p.knowledgeType = 1 THEN 1 ELSE 0 END) AS blurSum",
"FROM evaluator_knowledge_point e", "FROM evaluator_knowledge_point e",
"INNER JOIN evaluator_knowledge_point p ON p.information_id = e.id", "INNER JOIN evaluator_knowledge_point p ON p.information_id = e.id",
"WHERE e.sub_line_id = #{subLineId}" "WHERE e.sub_line_id = #{subLineId}"

7
src/main/java/com/project/operation/application/OperationLogApplicationServiceImpl.java

@ -1,19 +1,16 @@
package com.project.operation.application; package com.project.operation.application;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.operation.application.impl.OperationLogApplicationService; import com.project.operation.application.impl.OperationLogApplicationService;
import com.project.operation.domain.dto.OperationLogDTO; import com.project.operation.domain.dto.OperationLogDTO;
import com.project.operation.domain.param.OperationLogParam; import com.project.operation.domain.param.OperationLogParam;
import com.project.operation.domain.service.OperationLogBaseService;
import com.project.operation.domain.service.SaveOperationLogDomainService; import com.project.operation.domain.service.SaveOperationLogDomainService;
import com.project.operation.domain.service.SearchOperationLogDomainService; import com.project.operation.domain.service.SearchOperationLogDomainService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
@Service @Service
public class OperationLogApplicationServiceImpl implements OperationLogApplicationService { public class OperationLogApplicationServiceImpl implements OperationLogApplicationService {
@ -34,7 +31,7 @@ public class OperationLogApplicationServiceImpl implements OperationLogApplicati
* 查询日志 * 查询日志
*/ */
@Override @Override
public Result<IPage<OperationLogDTO>> list(OperationLogParam param) { public Result<PageResult<OperationLogDTO>> list(OperationLogParam param) {
return searchOperationLogDomainService.list(param); return searchOperationLogDomainService.list(param);
} }

4
src/main/java/com/project/operation/application/impl/OperationLogApplicationService.java

@ -1,6 +1,6 @@
package com.project.operation.application.impl; package com.project.operation.application.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.operation.domain.dto.OperationLogDTO; import com.project.operation.domain.dto.OperationLogDTO;
import com.project.operation.domain.param.OperationLogParam; import com.project.operation.domain.param.OperationLogParam;
@ -16,7 +16,7 @@ public interface OperationLogApplicationService {
/** /**
* 查询日志 * 查询日志
*/ */
Result<IPage<OperationLogDTO>> list(OperationLogParam param); Result<PageResult<OperationLogDTO>> list(OperationLogParam param);
/** /**
* 异步保存日志 * 异步保存日志

4
src/main/java/com/project/operation/controller/OperationLogController.java

@ -1,6 +1,6 @@
package com.project.operation.controller; package com.project.operation.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.operation.application.impl.OperationLogApplicationService; import com.project.operation.application.impl.OperationLogApplicationService;
import com.project.operation.domain.dto.OperationLogDTO; import com.project.operation.domain.dto.OperationLogDTO;
@ -20,7 +20,7 @@ public class OperationLogController {
private OperationLogApplicationService operationLogApplicationService; private OperationLogApplicationService operationLogApplicationService;
@GetMapping("/list") @GetMapping("/list")
public Result<IPage<OperationLogDTO>> list(OperationLogParam param) throws Exception { public Result<PageResult<OperationLogDTO>> list(OperationLogParam param) throws Exception {
return operationLogApplicationService.list(param); return operationLogApplicationService.list(param);
} }
} }

6
src/main/java/com/project/operation/domain/service/SearchOperationLogDomainService.java

@ -1,13 +1,11 @@
package com.project.operation.domain.service; package com.project.operation.domain.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.operation.domain.dto.OperationLogDTO; import com.project.operation.domain.dto.OperationLogDTO;
import com.project.operation.domain.param.OperationLogParam; import com.project.operation.domain.param.OperationLogParam;
import java.util.List;
public interface SearchOperationLogDomainService { public interface SearchOperationLogDomainService {
Result<IPage<OperationLogDTO>> list(OperationLogParam param); Result<PageResult<OperationLogDTO>> list(OperationLogParam param);
} }

12
src/main/java/com/project/operation/domain/service/impl/SearchOperationLogDomainServiceImpl.java

@ -4,22 +4,18 @@ import cn.hutool.core.util.DesensitizedUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import com.project.base.domain.result.PageResult;
import com.project.appeal.domain.dto.AppealDTO;
import com.project.base.domain.result.Result; import com.project.base.domain.result.Result;
import com.project.base.domain.utils.PageConverter; import com.project.base.domain.utils.PageConverter;
import com.project.ding.application.DepartmentApplicationService; import com.project.ding.application.DepartmentApplicationService;
import com.project.ding.application.UserApplicationService; import com.project.ding.application.UserApplicationService;
import com.project.ding.domain.dto.DepartmentDTO; import com.project.ding.domain.dto.DepartmentDTO;
import com.project.ding.domain.dto.UserDTO; import com.project.ding.domain.dto.UserDTO;
import com.project.ding.domain.service.DepartmentBaseService;
import com.project.operation.domain.dto.OperationLogDTO; import com.project.operation.domain.dto.OperationLogDTO;
import com.project.operation.domain.entity.OperationLogEntity; import com.project.operation.domain.entity.OperationLogEntity;
import com.project.operation.domain.param.OperationLogParam; import com.project.operation.domain.param.OperationLogParam;
import com.project.operation.domain.service.OperationLogBaseService;
import com.project.operation.domain.service.SearchOperationLogDomainService; import com.project.operation.domain.service.SearchOperationLogDomainService;
import com.project.operation.mapper.OperationLogMapper; import com.project.operation.mapper.OperationLogMapper;
import com.project.task.domain.entity.TaskEntity;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -44,7 +40,7 @@ public class SearchOperationLogDomainServiceImpl implements SearchOperationLogDo
* 查询日志 * 查询日志
*/ */
@Override @Override
public Result<IPage<OperationLogDTO>> list(OperationLogParam param) { public Result<PageResult<OperationLogDTO>> list(OperationLogParam param) {
QueryWrapper<OperationLogEntity> logQueryWrapper = new QueryWrapper<>(); QueryWrapper<OperationLogEntity> logQueryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(param.getAction())){ if (StringUtils.isNotBlank(param.getAction())){
@ -67,7 +63,7 @@ public class SearchOperationLogDomainServiceImpl implements SearchOperationLogDo
List<OperationLogDTO> entityList = operationLogDTOIPage.getRecords(); List<OperationLogDTO> entityList = operationLogDTOIPage.getRecords();
if (CollectionUtils.isEmpty(entityList)){ if (CollectionUtils.isEmpty(entityList)){
return Result.success(operationLogDTOIPage); return Result.page(operationLogDTOIPage);
} }
//收集用户ID,冗余字段 //收集用户ID,冗余字段
@ -90,7 +86,7 @@ public class SearchOperationLogDomainServiceImpl implements SearchOperationLogDo
.map(entity -> buildDTO(entity,userDTOMap,departmentDTOMap)) .map(entity -> buildDTO(entity,userDTOMap,departmentDTOMap))
.collect(Collectors.toList())); .collect(Collectors.toList()));
return Result.success(operationLogDTOIPage); return Result.page(operationLogDTOIPage);
} }
/** /**

4
src/main/resources/application.yml

@ -63,6 +63,10 @@ mybatis-plus:
milvus: milvus:
host: 172.16.204.50 host: 172.16.204.50
port: 19530 port: 19530
analysis:
host: 172.16.204.50
port: 8888
url: /word/parse
ding: ding:
appKey: ding7qohu1rhsl5cflme appKey: ding7qohu1rhsl5cflme
appSecret: GYxRa6GLbfpDTInpAOGrdvZZDWMSJkdDsxbjxnh6kxFijnswnO9oIT6Y9d598VKp appSecret: GYxRa6GLbfpDTInpAOGrdvZZDWMSJkdDsxbjxnh6kxFijnswnO9oIT6Y9d598VKp

Loading…
Cancel
Save