From 9027055e7d0d6120b83a2bc0cdf265d733252037 Mon Sep 17 00:00:00 2001 From: dazer007 Date: Sun, 9 Mar 2025 15:30:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(all):=20winlistCaTask=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=80=97=E6=97=B6=E7=BB=9F=E8=AE=A1=E5=92=8CCountDownLatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/winlis/WinLisServiceImpl.java | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java index d2440e3ea..b03d2016f 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java @@ -19,10 +19,12 @@ import com.ruoyi.common.enums.DataSourceType; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StopWatch; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -278,21 +280,48 @@ public class WinLisServiceImpl implements IWinLisService { @Override public int winlistCaTask(String testdateLike, Integer limit) { + //方法计算执行时间 + StopWatch sw = new StopWatch(); + AtomicInteger successNum = new AtomicInteger(); + sw.start("任务1:获取待处理列表"); List watingSignVos = lasSapSampleregService.selectWaitingCaSignList(testdateLike, limit); + sw.stop(); + + sw.start("任务2:多线程执行任务"); + CountDownLatch latch = new CountDownLatch(watingSignVos.size()); // 总共等待的任务 for (LasSapCadataWatingSignVo vo : watingSignVos) { AtomicInteger i = new AtomicInteger(); executorService.execute(() -> { - log.debug("开始winlistCaTask, index = {}", i.incrementAndGet()); - String originText = getWinLisCaOriginText(vo.getTestdate(), vo.getMachineid(), vo.getSampleid()); - CaResultVo caResultVo = generateBjCaInfo(vo.getTestdate(), vo.getMachineid(), vo.getSampleid(), autoSignSignDataId); - if (StrUtil.isEmpty(originText) || caResultVo == null) { - return; - } - int result = lasSapSampleregService.insertLasSapCaData(vo, caResultVo); - successNum.addAndGet(result); + try { + log.debug("开始winlistCaTask, index = {}", i.incrementAndGet()); + String originText = getWinLisCaOriginText(vo.getTestdate(), vo.getMachineid(), vo.getSampleid()); + CaResultVo caResultVo = generateBjCaInfo(vo.getTestdate(), vo.getMachineid(), vo.getSampleid(), autoSignSignDataId); + if (StrUtil.isEmpty(originText) || caResultVo == null) { + return; + } + int result = lasSapSampleregService.insertLasSapCaData(vo, caResultVo); + successNum.addAndGet(result); + } finally { + latch.countDown(); //计数,减1 + } }); } + + try { + latch.await(); // 等待计数为0后再解除阻塞 + } catch (Exception e) { + log.error("多线程等待异常:" + e.getMessage()); + } + sw.stop(); + + log.info("【主线程】所有的任务都到执行,开车走人,去下一个景点购物消费。"); + log.info("多线程执行winlis补偿签名完成,统计耗时:"); + log.info(sw.prettyPrint()); + log.info(sw.getTotalTimeSeconds() + ""); + log.info(sw.getLastTaskName()); + log.info(sw.getLastTaskInfo() + ""); + log.info(sw.getTaskCount() + ""); return successNum.get(); }