diff --git a/src/main/java/com/platform/check/actuator/china/Handler.java b/src/main/java/com/platform/check/actuator/china/Handler.java index dc75bde..01366f5 100644 --- a/src/main/java/com/platform/check/actuator/china/Handler.java +++ b/src/main/java/com/platform/check/actuator/china/Handler.java @@ -2,8 +2,7 @@ package com.platform.check.actuator.china; import java.util.List; import java.util.concurrent.ThreadPoolExecutor; - -import com.platform.check.actuator.parsing.BaseActurtor; +import com.platform.check.actuator.parsing.AbstractBaseActurtor; import com.platform.check.actuator.task.TaskCounter; import com.platform.check.actuator.task.TaskThreadMonitor; import com.platform.check.domain.CheckDocTask; @@ -114,7 +113,7 @@ public abstract class Handler { * 缓存文件解析执行器 * @param acturtor */ - protected void cacheActurtor(BaseActurtor acturtor) { + protected void cacheActurtor(AbstractBaseActurtor acturtor) { TaskThreadMonitor.getInstance().offer(this.checkDocTask.getId(),acturtor); } } diff --git a/src/main/java/com/platform/check/actuator/china/ImgHandler.java b/src/main/java/com/platform/check/actuator/china/ImgHandler.java index 5070b19..8ffcc96 100644 --- a/src/main/java/com/platform/check/actuator/china/ImgHandler.java +++ b/src/main/java/com/platform/check/actuator/china/ImgHandler.java @@ -1,8 +1,7 @@ package com.platform.check.actuator.china; import java.util.List; - -import com.platform.check.actuator.parsing.BaseActurtor; +import com.platform.check.actuator.parsing.AbstractBaseActurtor; import com.platform.check.actuator.parsing.ImgParsingActurtor; import com.platform.check.domain.CheckFile; import com.platform.check.enums.FileSuffix; @@ -46,7 +45,7 @@ public class ImgHandler extends Handler { } if(flag) { String poolName = "img-parsing-Pool"; - BaseActurtor imgParsingActurtor = new ImgParsingActurtor(); + AbstractBaseActurtor imgParsingActurtor = new ImgParsingActurtor(); imgParsingActurtor.init( super.checkDocumentService, super.checkRepeatedDocumentService, diff --git a/src/main/java/com/platform/check/actuator/china/PDFHandler.java b/src/main/java/com/platform/check/actuator/china/PDFHandler.java index 79ea997..4088e15 100644 --- a/src/main/java/com/platform/check/actuator/china/PDFHandler.java +++ b/src/main/java/com/platform/check/actuator/china/PDFHandler.java @@ -2,7 +2,7 @@ package com.platform.check.actuator.china; import java.util.List; -import com.platform.check.actuator.parsing.BaseActurtor; +import com.platform.check.actuator.parsing.AbstractBaseActurtor; import com.platform.check.actuator.parsing.PDFParsingGroupActurtor; import com.platform.check.domain.CheckFile; import com.platform.check.enums.FileSuffix; @@ -46,7 +46,7 @@ public class PDFHandler extends Handler { } if(flag) { String poolName = "pdf-parsing-Pool"; - BaseActurtor pdfGroupActurtor = new PDFParsingGroupActurtor(); + AbstractBaseActurtor pdfGroupActurtor = new PDFParsingGroupActurtor(); pdfGroupActurtor.init( super.checkDocumentService, super.checkRepeatedDocumentService, diff --git a/src/main/java/com/platform/check/actuator/china/WordHandler.java b/src/main/java/com/platform/check/actuator/china/WordHandler.java index 1d45418..5834f1f 100644 --- a/src/main/java/com/platform/check/actuator/china/WordHandler.java +++ b/src/main/java/com/platform/check/actuator/china/WordHandler.java @@ -1,8 +1,7 @@ package com.platform.check.actuator.china; import java.util.List; - -import com.platform.check.actuator.parsing.BaseActurtor; +import com.platform.check.actuator.parsing.AbstractBaseActurtor; import com.platform.check.actuator.parsing.WordParsingActurtor; import com.platform.check.domain.CheckFile; import com.platform.check.enums.FileSuffix; @@ -32,7 +31,7 @@ public class WordHandler extends Handler{ } if(flag) { //如果此次任务是word解析 - BaseActurtor wordParsingThread = new WordParsingActurtor(); + AbstractBaseActurtor wordParsingThread = new WordParsingActurtor(); wordParsingThread.init( super.checkDocTask, super.checkDocumentService, diff --git a/src/main/java/com/platform/check/actuator/parsing/BaseActurtor.java b/src/main/java/com/platform/check/actuator/parsing/AbstractBaseActurtor.java similarity index 99% rename from src/main/java/com/platform/check/actuator/parsing/BaseActurtor.java rename to src/main/java/com/platform/check/actuator/parsing/AbstractBaseActurtor.java index bb4540a..05528f5 100644 --- a/src/main/java/com/platform/check/actuator/parsing/BaseActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/AbstractBaseActurtor.java @@ -46,7 +46,7 @@ import lombok.Setter; * @author 86187 * */ -public abstract class BaseActurtor extends Thread{ +public abstract class AbstractBaseActurtor extends Thread{ @Getter @Setter protected volatile boolean isStop = false; diff --git a/src/main/java/com/platform/check/actuator/parsing/DocParsingActurtor.java b/src/main/java/com/platform/check/actuator/parsing/AbstractDocParsingActurtor.java similarity index 99% rename from src/main/java/com/platform/check/actuator/parsing/DocParsingActurtor.java rename to src/main/java/com/platform/check/actuator/parsing/AbstractDocParsingActurtor.java index be59ca7..ad00cd1 100644 --- a/src/main/java/com/platform/check/actuator/parsing/DocParsingActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/AbstractDocParsingActurtor.java @@ -38,7 +38,7 @@ import org.apache.poi.xwpf.usermodel.XWPFParagraph; * @author 86187 * */ -public abstract class DocParsingActurtor extends BaseActurtor{ +public abstract class AbstractDocParsingActurtor extends AbstractBaseActurtor{ /** 单步骤占比 */ protected Double stepProportion; diff --git a/src/main/java/com/platform/check/actuator/parsing/ImgParsingActurtor.java b/src/main/java/com/platform/check/actuator/parsing/ImgParsingActurtor.java index a90a87e..b55adf9 100644 --- a/src/main/java/com/platform/check/actuator/parsing/ImgParsingActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/ImgParsingActurtor.java @@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j; * */ @Slf4j -public class ImgParsingActurtor extends BaseActurtor implements Thread.UncaughtExceptionHandler{ +public class ImgParsingActurtor extends AbstractBaseActurtor implements Thread.UncaughtExceptionHandler{ /** 图片校验单步骤占比 */ private Double checkStepProportion; @@ -101,8 +101,7 @@ public class ImgParsingActurtor extends BaseActurtor implements Thread.UncaughtE /** * 解析图片 - * @param fileList - * @throws InterruptedException + * @throws InterruptedException */ private void parseImgs() throws Exception{ if(CollectionUtils.isNotEmpty(checkFiles) && !super.isStop) { @@ -153,7 +152,7 @@ public class ImgParsingActurtor extends BaseActurtor implements Thread.UncaughtE if(super.isStop) { return; } - BaseActurtor wordParsingThread = new ImgWordParsingActurtor(); + AbstractBaseActurtor wordParsingThread = new ImgWordParsingActurtor(); wordParsingThread.init( checkDocTask, checkDocumentService, diff --git a/src/main/java/com/platform/check/actuator/parsing/ImgWordParsingActurtor.java b/src/main/java/com/platform/check/actuator/parsing/ImgWordParsingActurtor.java index ea393e9..eaab8d6 100644 --- a/src/main/java/com/platform/check/actuator/parsing/ImgWordParsingActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/ImgWordParsingActurtor.java @@ -19,7 +19,7 @@ import cn.textcheck.engine.report.Reporter; * @author 86187 * */ -public class ImgWordParsingActurtor extends DocParsingActurtor{ +public class ImgWordParsingActurtor extends AbstractDocParsingActurtor{ /** * 计算任务步骤占比 diff --git a/src/main/java/com/platform/check/actuator/parsing/PDFParsingActurtor.java b/src/main/java/com/platform/check/actuator/parsing/PDFParsingActurtor.java index 9cadaa9..7b25c21 100644 --- a/src/main/java/com/platform/check/actuator/parsing/PDFParsingActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/PDFParsingActurtor.java @@ -44,7 +44,7 @@ import cn.hutool.core.util.ArrayUtil; import lombok.extern.slf4j.Slf4j; @Slf4j -public class PDFParsingActurtor extends BaseActurtor{ +public class PDFParsingActurtor extends AbstractBaseActurtor{ /** 存储解析过程中图片和文档路径 */ private String sectionPath; diff --git a/src/main/java/com/platform/check/actuator/parsing/PDFParsingGroupActurtor.java b/src/main/java/com/platform/check/actuator/parsing/PDFParsingGroupActurtor.java index 50038ca..1f80029 100644 --- a/src/main/java/com/platform/check/actuator/parsing/PDFParsingGroupActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/PDFParsingGroupActurtor.java @@ -38,7 +38,7 @@ import lombok.extern.slf4j.Slf4j; * */ @Slf4j -public class PDFParsingGroupActurtor extends BaseActurtor implements Thread.UncaughtExceptionHandler{ +public class PDFParsingGroupActurtor extends AbstractBaseActurtor implements Thread.UncaughtExceptionHandler{ /** 前部分单步骤占比 */ private Double stepProportion; @@ -138,7 +138,7 @@ public class PDFParsingGroupActurtor extends BaseActurtor implements Thread.Unca if(super.isStop) { return; } - BaseActurtor wordParsingThread = new PDFWordParsingActurtor(); + AbstractBaseActurtor wordParsingThread = new PDFWordParsingActurtor(); wordParsingThread.init( checkDocTask, checkDocumentService, diff --git a/src/main/java/com/platform/check/actuator/parsing/PDFWordParsingActurtor.java b/src/main/java/com/platform/check/actuator/parsing/PDFWordParsingActurtor.java index 3367766..a407cf4 100644 --- a/src/main/java/com/platform/check/actuator/parsing/PDFWordParsingActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/PDFWordParsingActurtor.java @@ -13,12 +13,14 @@ import com.platform.check.enums.FileSuffix; import com.platform.check.enums.PDFParsingSectionPath; import cn.textcheck.engine.pojo.Paper; import cn.textcheck.engine.report.Reporter; +import org.springframework.util.CollectionUtils; + /** * pdf识别后所属word文档解析 * @author 86187 * */ -public class PDFWordParsingActurtor extends DocParsingActurtor{ +public class PDFWordParsingActurtor extends AbstractDocParsingActurtor{ /** * 计算任务步骤占比 @@ -50,6 +52,15 @@ public class PDFWordParsingActurtor extends DocParsingActurtor{ ProgressQueue.getInstance().offer(backEvent); } catch (Exception e) { throw new RuntimeException(e); + }finally { + //PDF文档查重任务执行完毕删除ES存储的索引(索引只用到页码需求,查重完毕页码已存储到数据库) + if (!CollectionUtils.isEmpty(super.checkFiles)){ + for (CheckFile checkFile : super.checkFiles){ + if(elasticsearchService.indexExists(checkFile.getId())){ + elasticsearchService.deleteIndex(checkFile.getId()); + } + } + } } } diff --git a/src/main/java/com/platform/check/actuator/parsing/WordParsingActurtor.java b/src/main/java/com/platform/check/actuator/parsing/WordParsingActurtor.java index e651bad..874fd80 100644 --- a/src/main/java/com/platform/check/actuator/parsing/WordParsingActurtor.java +++ b/src/main/java/com/platform/check/actuator/parsing/WordParsingActurtor.java @@ -30,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; * */ @Slf4j -public class WordParsingActurtor extends DocParsingActurtor{ +public class WordParsingActurtor extends AbstractDocParsingActurtor{ /** * 计算任务步骤占比 diff --git a/src/main/java/com/platform/check/actuator/task/TaskThreadMonitor.java b/src/main/java/com/platform/check/actuator/task/TaskThreadMonitor.java index 57d2bb5..a56588e 100644 --- a/src/main/java/com/platform/check/actuator/task/TaskThreadMonitor.java +++ b/src/main/java/com/platform/check/actuator/task/TaskThreadMonitor.java @@ -2,12 +2,11 @@ package com.platform.check.actuator.task; import java.util.HashMap; import java.util.Map; - -import com.platform.check.actuator.parsing.BaseActurtor; +import com.platform.check.actuator.parsing.AbstractBaseActurtor; public class TaskThreadMonitor { - private final Map taskThreadMap = new HashMap<>(); + private final Map taskThreadMap = new HashMap<>(); private static TaskThreadMonitor taskThreadMonitor = new TaskThreadMonitor(); @@ -15,13 +14,13 @@ public class TaskThreadMonitor { return taskThreadMonitor; } - public void offer(String taskId,BaseActurtor baseActurtor) { + public void offer(String taskId,AbstractBaseActurtor baseActurtor) { synchronized (taskThreadMap) { taskThreadMap.put(taskId, baseActurtor); } } - public BaseActurtor take(String taskId){ + public AbstractBaseActurtor take(String taskId){ synchronized (taskThreadMap) { if(!taskThreadMap.isEmpty() && taskThreadMap.containsKey(taskId)) { return taskThreadMap.get(taskId); diff --git a/src/main/java/com/platform/check/service/impl/CheckDocTaskServiceImpl.java b/src/main/java/com/platform/check/service/impl/CheckDocTaskServiceImpl.java index 070981d..74ace53 100644 --- a/src/main/java/com/platform/check/service/impl/CheckDocTaskServiceImpl.java +++ b/src/main/java/com/platform/check/service/impl/CheckDocTaskServiceImpl.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.base.Splitter; import com.google.common.collect.Lists; -import com.platform.check.actuator.parsing.BaseActurtor; +import com.platform.check.actuator.parsing.AbstractBaseActurtor; import com.platform.check.actuator.task.TaskCounter; import com.platform.check.actuator.task.TaskQueue; import com.platform.check.actuator.task.TaskThreadMonitor; @@ -341,13 +341,14 @@ public class CheckDocTaskServiceImpl extends ServiceImpl { * @return */ List findByUnitNames(List unitNames); + + /** + * 添加参数单位 + * @param unitName + * @return + */ + CheckUnit saveCheckUnit(String unitName); } diff --git a/src/main/java/com/platform/project/service/impl/CheckProjectServiceImpl.java b/src/main/java/com/platform/project/service/impl/CheckProjectServiceImpl.java index b05e4a6..573af0f 100644 --- a/src/main/java/com/platform/project/service/impl/CheckProjectServiceImpl.java +++ b/src/main/java/com/platform/project/service/impl/CheckProjectServiceImpl.java @@ -50,6 +50,7 @@ import com.platform.system.service.ISysDeptService; import com.platform.system.service.ISysDictDataService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -102,87 +103,63 @@ public class CheckProjectServiceImpl extends ServiceImpl projectQueryWrapper = new LambdaQueryWrapper<>(); List checkUnits = checkUnitMapper.selectList(projectQueryWrapper); - //存放单位id - List projectIds = new ArrayList<>(); - //声明项目 - CheckProject entity = new CheckProject(); - //判断是否参与单位为空 - if(StringUtils.isNotBlank(vo.getParticipateUnit())){ - //获取参与单位信息 - String units = vo.getParticipateUnit(); - //切割单位名称 - String[] unitNames = units.split(","); - //判断单位名称 - if(unitNames.length<2){ - throw new BusinessException("参与单位必须两家以上,单位名称间需要用中文,隔开"); + //以存储单位名称为key,以存储单位id为value + Map unitMap = new LinkedHashMap<>(); + + //获取参与单位信息 + String units = vo.getParticipateUnit(); + String[] unitNames = units.split(","); + if(unitNames.length<2){ + throw new BusinessException("参与单位必须两家以上,单位名称间需要用中文,隔开"); + } + List list = Arrays.stream(unitNames).distinct().collect(Collectors.toList()); + if(list.size()!=unitNames.length){ + throw new BusinessException("当前输入的参与单位中,有单位名称重复,请检查后重新新增"); + } + if(!vo.getParticipateUnit().contains(vo.getWinningUnit())){ + throw new BusinessException(500, "中标单位不在参与单位中!"); + } + //如果数据库参与单位数据表为空,界面表单参与单位不为空直接入库 + if(CollectionUtils.isEmpty(checkUnits)){ + for (String unitName:unitNames) { + final CheckUnit checkUnit = checkUnitService.saveCheckUnit(unitName); + unitMap.put(checkUnit.getUnitName(),checkUnit.getId()); } - List list = Arrays.stream(unitNames).distinct().collect(Collectors.toList()); - if(list.size()!=unitNames.length){ - throw new BusinessException("当前输入的参与单位中,有单位名称重复,请检查后重新新增"); - } - //判断是否存在单位 如果当前数据库中不存在单位信息 - if(checkUnits.size()<=0){ - for (String unitName:unitNames) { - CheckUnit projectEntity = new CheckUnit(); - projectEntity.setUnitName(unitName.replaceAll("\\s*","")); - projectEntity.setUnitCode(String.valueOf(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli())); - if (checkUnitService.checkNameUnique(unitName.replaceAll("\\s*",""), "")) { - throw new BusinessException(500, "单位名称已存在,添加失败!"); - } - if (checkUnitService.checkNameUnique(projectEntity.getUnitCode(), "")) { - throw new BusinessException(500, "单位编号已存在,添加失败!"); - } - checkUnitService.save(projectEntity); - projectIds.add(projectEntity.getId()); - } - }else { //如果当前数据库存在单位信息 - //遍历循环 - for (String unitName:unitNames) { - for (int i=0;i participateUnits = Arrays.asList(vo.getParticipateUnit().split(",")); - if(participateUnits.indexOf(vo.getWinningUnit())<0){ - throw new BusinessException(500, "中标单位不在参与单位中!"); - } - LambdaQueryWrapper tenderProjectQueryWrapper = new LambdaQueryWrapper<>(); - tenderProjectQueryWrapper.eq(CheckUnit::getUnitName,vo.getWinningUnit().replaceAll("\\s*","")); - CheckUnit checkUnit = checkUnitMapper.selectOne(tenderProjectQueryWrapper); - vo.setWinningUnit(checkUnit.getId()); - } - - Object json = JSONArray.toJSON(projectIds); + //声明项目 + CheckProject entity = new CheckProject(); + Object json = JSONArray.toJSON(unitMap.values()); BeanUtils.copyProperties(vo, entity); entity.setParticipateUnit(json.toString()); entity.setAuditStatus(AuditStatus.NOT_AUDIT.getCode()); @@ -205,67 +182,64 @@ public class CheckProjectServiceImpl extends ServiceImpl projectQueryWrapper = new LambdaQueryWrapper<>(); List checkUnits = checkUnitMapper.selectList(projectQueryWrapper); - List projectIds = new ArrayList<>(); - //声明项目 - CheckProject entity = new CheckProject(); - //判断是否参与单位为空 - if(StringUtils.isNotBlank(vo.getParticipateUnit())){ - //获取参与单位信息 - String units = vo.getParticipateUnit(); - String[] unitNames = units.split(","); - if(unitNames.length<2){ - throw new BusinessException("参与单位必须两家以上,单位名称间需要用中文,隔开"); - } - List list = Arrays.stream(unitNames).distinct().collect(Collectors.toList()); - if(list.size()!=unitNames.length){ - throw new BusinessException("当前输入的参与单位中,有单位名称重复,请检查后重新新增"); + //以存储单位名称为key,以存储单位id为value + Map unitMap = new LinkedHashMap<>(); + + //获取参与单位信息 + String units = vo.getParticipateUnit(); + String[] unitNames = units.split(","); + if(unitNames.length<2){ + throw new BusinessException("参与单位必须两家以上,单位名称间需要用中文,隔开"); + } + List list = Arrays.stream(unitNames).distinct().collect(Collectors.toList()); + if(list.size()!=unitNames.length){ + throw new BusinessException("当前输入的参与单位中,有单位名称重复,请检查后重新新增"); + } + if(!vo.getParticipateUnit().contains(vo.getWinningUnit())){ + throw new BusinessException(500, "中标单位不在参与单位中!"); + } + //如果数据库参与单位数据表为空,界面表单参与单位不为空直接入库 + if(CollectionUtils.isEmpty(checkUnits)){ + for (String unitName:unitNames) { + final CheckUnit checkUnit = checkUnitService.saveCheckUnit(unitName); + unitMap.put(checkUnit.getUnitName(),checkUnit.getId()); } + }else{ //遍历循环 for (String unitName:unitNames) { for (int i=0;i participateUnits = Arrays.asList(vo.getParticipateUnit().split(",")); - if(participateUnits.indexOf(vo.getWinningUnit())<0){ - throw new BusinessException(500, "中标单位不在参与单位中!"); - } - LambdaQueryWrapper tenderProjectQueryWrapper = new LambdaQueryWrapper<>(); - tenderProjectQueryWrapper.eq(CheckUnit::getUnitName,vo.getWinningUnit().replaceAll("\\s*","")); - CheckUnit checkUnit = checkUnitMapper.selectOne(tenderProjectQueryWrapper); - vo.setWinningUnit(checkUnit.getId()); - } - + //设置此字段内容为中标单位id + vo.setWinningUnit(unitMap.getOrDefault(vo.getWinningUnit(),StringPool.EMPTY)); + //声明项目 + CheckProject entity = new CheckProject(); HiBeanUtils.dataFormatter(vo, entity); - Object json = JSONArray.toJSON(projectIds); + Object json = JSONArray.toJSON(unitMap.values()); entity.setParticipateUnit(json.toString()); return this.updateById(entity); } @@ -451,7 +425,9 @@ public class CheckProjectServiceImpl extends ServiceImpl