package cn.cslg.pas.service.novelty; import cn.cslg.pas.common.dto.NoveltyProjectDTO.NoveltyReportReferenceDTO; import cn.cslg.pas.common.dto.NoveltyProjectDTO.NoveltyReportReferenceQueryDTO; import cn.cslg.pas.common.dto.NoveltyProjectDTO.QueryNoveltyCompareRecordDTO; import cn.cslg.pas.common.dto.QuerySearchRecordDTO; import cn.cslg.pas.common.dto.TechnicalCaseIdDTO; import cn.cslg.pas.common.dto.business.GetReferencesDTO; import cn.cslg.pas.common.dto.business.LiteratureQueryDTO; import cn.cslg.pas.common.model.cronModel.PersonnelVO; import cn.cslg.pas.common.model.cronModel.Records; import cn.cslg.pas.common.model.cronModel.SystemFile; import cn.cslg.pas.common.model.request.QueryRequest; import cn.cslg.pas.common.model.request.StringRequest; import cn.cslg.pas.common.utils.*; import cn.cslg.pas.common.vo.CompareLiteratureVO; import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyCompareRecordQueryVO; import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyCompareRecordVO; import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyReferencesVO; import cn.cslg.pas.common.vo.NoveltyProjectVO.RetrieveRecordVO; import cn.cslg.pas.common.vo.QueryNoveltyProjectVO; import cn.cslg.pas.common.vo.TechnicalCaseVO; import cn.cslg.pas.common.vo.business.ReferencesVO; import cn.cslg.pas.domain.business.References; import cn.cslg.pas.domain.business.ReportTemple; import cn.cslg.pas.domain.business.novelty.NoveltyReportTemplate; import cn.cslg.pas.domain.es.Patent; import cn.cslg.pas.domain.es.PatentPerson; import cn.cslg.pas.factorys.noveltyTemplateFacotry.GetTemplateMapsImp; import cn.cslg.pas.factorys.noveltyTemplateFacotry.NoveltyTemplateFactory; import cn.cslg.pas.service.business.NoveltyProjectService; import cn.cslg.pas.service.business.ReferencesService; import cn.cslg.pas.service.business.TechnicalCaseService; import cn.cslg.pas.service.business.es.EsPatentService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.cslg.pas.domain.business.novelty.NoveltyReportReferences; import cn.cslg.pas.mapper.novelty.NoveltyReportReferencesMapper; import lombok.RequiredArgsConstructor; import org.apache.poi.hslf.record.Record; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** * @author admin * @description 针对表【novelty_report_references(查新报告文档)】的数据库操作Service实现 * @createDate 2024-09-30 15:33:57 */ @Service @RequiredArgsConstructor(onConstructor_={@Lazy}) public class NoveltyReportReferencesService extends ServiceImpl { private final NoveltyReportTemplateService noveltyReportTemplateService; private final ReferencesService referencesService; private final NoveltyProjectService noveltyProjectService; private final TechnicalCaseService technicalCaseService; private final NoveltyCompareLiteratureService noveltyCompareLiteratureService; private final NoveltyCompareRecordService noveltyCompareRecordService; private final NoveltySearchRecordService noveltySearchRecordService; private final EsPatentService esPatentService; private final NoveltyTemplateFactory noveltyTemplateFactory; private final NoveltyExportReportService noveltyExportReportService; @Autowired private CacheUtils cacheUtils; @Autowired private LoginUtils loginUtils; public Integer addOrUpdate(NoveltyReportReferenceDTO noveltyReportReferenceDTO) { Integer id = noveltyReportReferenceDTO.getId(); if (id != null) { return this.updateReference(noveltyReportReferenceDTO); } else { return this.addReference(noveltyReportReferenceDTO); } } private Integer addReference(NoveltyReportReferenceDTO noveltyReportReferenceDTO) { Integer templateId = noveltyReportReferenceDTO.getTemplateId(); Integer projectId = noveltyReportReferenceDTO.getProjectId(); NoveltyReportTemplate noveltyReportTemplate = noveltyReportTemplateService.getById(templateId); String dataSource = noveltyReportReferenceDTO.getDataSource(); //添加附件 References references = new References(); String name = noveltyReportTemplate.getTemplateName().replace("模板", "报告"); PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); references.setReferencesName(name); references.setProjectId(projectId); references.setCreateId(personnelVO.getId()); references.insert(); //添加查新报告附件 NoveltyReportReferences noveltyReportReferences = new NoveltyReportReferences(); noveltyReportReferences.setReportReferenceId(references.getId()); noveltyReportReferences.setIfHaveFinalFile(false); noveltyReportReferences.setTemplateId(templateId); noveltyReportReferences.setDataSource(dataSource); noveltyReportReferences.setConfigMessage(noveltyReportTemplate.getConfigMessage()); noveltyReportReferences.insert(); return references.getId(); } private Integer updateReference(NoveltyReportReferenceDTO noveltyReportReferenceDTO) { Integer templateId = noveltyReportReferenceDTO.getTemplateId(); String dataSource = noveltyReportReferenceDTO.getDataSource(); Integer id = noveltyReportReferenceDTO.getId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(NoveltyReportReferences::getReportReferenceId, id); NoveltyReportReferences noveltyReportReferences = this.getOne(queryWrapper, false); noveltyReportReferences.setDataSource(dataSource); noveltyReportReferences.updateById(); return id; } public Integer addFinalReference(Integer id, String fileGuid) { References references = referencesService.getById(id); references.setFileGuid(fileGuid); references.updateById(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(NoveltyReportReferences::getReportReferenceId, id); NoveltyReportReferences noveltyReportReferences = this.getOne(queryWrapper, false); noveltyReportReferences.setIfHaveFinalFile(true); noveltyReportReferences.updateById(); return id; } public Records queryReference(NoveltyReportReferenceQueryDTO noveltyReportReferenceQueryDTO) { List noveltyReferencesVOS = new ArrayList<>(); GetReferencesDTO getReferencesDTO = new GetReferencesDTO(); BeanUtils.copyProperties(noveltyReportReferenceQueryDTO, getReferencesDTO); Records records = referencesService.query(getReferencesDTO); List referencesVOS = (List) records.getData(); List ids = referencesVOS.stream().map(ReferencesVO::getId).collect(Collectors.toList()); if (ids == null || ids.size() == 0) { records.setData(noveltyReferencesVOS); return records; } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(NoveltyReportReferences::getReportReferenceId, ids); List noveltyReportReferences = this.list(queryWrapper); referencesVOS.forEach(item -> { NoveltyReferencesVO noveltyReferencesVO = new NoveltyReferencesVO(); BeanUtils.copyProperties(item, noveltyReferencesVO); NoveltyReportReferences noveltyReportReference = noveltyReportReferences.stream().filter(tem -> tem.getReportReferenceId().equals(item.getId())).findFirst().orElse(null); if (noveltyReportReference != null) { noveltyReferencesVO.setIfHaveFinalFile(noveltyReportReference.getIfHaveFinalFile()); noveltyReferencesVO.setDataSource(noveltyReportReference.getDataSource()); noveltyReferencesVO.setConfigMessage(noveltyReportReference.getConfigMessage()); noveltyReferencesVO.setTemplateId(noveltyReportReference.getTemplateId()); } noveltyReferencesVOS.add(noveltyReferencesVO); }); records.setData(noveltyReferencesVOS); return records; } public List delete(List ids) { //删除文件 referencesService.removeBatchByIds(ids); //删除 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(NoveltyReportReferences::getReportReferenceId, ids); this.remove(queryWrapper); return ids; } public Integer addOrUpdate2(NoveltyReportReferenceDTO noveltyReportReferenceDTO) throws Exception { Integer id = noveltyReportReferenceDTO.getId(); Integer projectId = noveltyReportReferenceDTO.getProjectId(); Integer templateId = noveltyReportReferenceDTO.getTemplateId(); GetTemplateMapsImp getTemplateMapsImp = noveltyTemplateFactory.getClass(templateId); List queryNoveltyProjectVOs = this.getQueryNoveltyProjectVOs(projectId); // String searchTime = noveltySearchRecordService.getLastRecordTime(projectId); // baseMap.put("searchTime", searchTime); TechnicalCaseVO technicalCaseVO = this.getTechnicalCaseVO(projectId); List compareLiteratureVOS = this.getCompareCompareLiteratureVO(projectId); List noveltyCompareRecordQueryVOS = this.getNoveltyCompareRecordQueryVOs(projectId); List retrieveRecordVOS = this.getRetrieveRecordVOs(projectId); Map map = getTemplateMapsImp.getMap(queryNoveltyProjectVOs, technicalCaseVO, compareLiteratureVOS, noveltyCompareRecordQueryVOS, retrieveRecordVOS); String json = JsonUtils.objectToJson(map); noveltyReportReferenceDTO.setDataSource(json); id = this.addOrUpdate(noveltyReportReferenceDTO); noveltyExportReportService.exportReport(id); return id; } public TechnicalCaseVO getTechnicalCaseVO(Integer projectId) { TechnicalCaseIdDTO technicalCaseIdDTO = new TechnicalCaseIdDTO(); technicalCaseIdDTO.setProjectId(projectId); TechnicalCaseVO technicalCaseVO = technicalCaseService.queryTechnicalCase(technicalCaseIdDTO); return technicalCaseVO; } public List getQueryNoveltyProjectVOs(Integer projectId) throws Exception { StringRequest queryRequest = new StringRequest(); queryRequest.setProjectId(projectId); Object projectRecordsObject = noveltyProjectService.queryMessage(queryRequest); Records projectRecords = (Records) projectRecordsObject; List queryNoveltyProjectVOs = (List) projectRecords.getData(); return queryNoveltyProjectVOs; } public List getCompareCompareLiteratureVO(Integer projectId) throws Exception { LiteratureQueryDTO literatureQueryDTO = new LiteratureQueryDTO(); literatureQueryDTO.setProjectId(projectId); Records records = noveltyCompareLiteratureService.queryNoveltyCompareLiterature(literatureQueryDTO); List compareLiteratureVOS1 = (List) records.getData(); return compareLiteratureVOS1; } public List getNoveltyCompareRecordQueryVOs(Integer projectId) throws Exception { QueryNoveltyCompareRecordDTO queryNoveltyCompareRecordDTO = new QueryNoveltyCompareRecordDTO(); queryNoveltyCompareRecordDTO.setProjectId(projectId); List noveltyCompareRecordQueryVOs = noveltyCompareRecordService.queryCompareRecord(queryNoveltyCompareRecordDTO); return noveltyCompareRecordQueryVOs; } public List getRetrieveRecordVOs(Integer projectId) throws Exception { cn.cslg.pas.common.dto.QuerySearchRecordDTO querySearchRecordDTO = new QuerySearchRecordDTO(); querySearchRecordDTO.setProjectId(projectId); Records records = noveltySearchRecordService.querySearchRecord(querySearchRecordDTO); List retrieveRecordVOS = (List) records.getData(); return retrieveRecordVOS; } }