imp: 使用多线程转换base64。

lianzhong-receive
wyb 3 months ago
parent 7f41fe15ec
commit 618ad44486

@ -38,9 +38,8 @@ public class GzFirstLabReportSyncJob {
private AtomicBoolean isAllRunning = new AtomicBoolean(false); private AtomicBoolean isAllRunning = new AtomicBoolean(false);
private AtomicBoolean isThreeRunning = new AtomicBoolean(false); private AtomicBoolean isThreeRunning = new AtomicBoolean(false);
private static final int coreThreads = Runtime.getRuntime().availableProcessors() - 1; private static final ThreadPoolExecutor LAB_SYNC_EXECUTOR = new ThreadPoolExecutor(5,
private static final ThreadPoolExecutor LAB_SYNC_EXECUTOR = new ThreadPoolExecutor(coreThreads, 6,
coreThreads + 1,
30, TimeUnit.SECONDS, 30, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(200), new ArrayBlockingQueue<>(200),
new ThreadPoolExecutor.CallerRunsPolicy()); new ThreadPoolExecutor.CallerRunsPolicy());

@ -21,7 +21,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -31,6 +30,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -46,7 +46,7 @@ public class WebServiceImpl implements IWebService {
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
private final ExecutorService executor = Executors.newFixedThreadPool(8); private static final ExecutorService BASE64_CONVERT_PDF_EXECUTOR = Executors.newFixedThreadPool(3);
@Override @Override
public CommonResult<?> syncInspection(SyncBasicDataDto syncBasicDataDto) { public CommonResult<?> syncInspection(SyncBasicDataDto syncBasicDataDto) {
@ -124,7 +124,7 @@ public class WebServiceImpl implements IWebService {
log.info("同步检验报告跳过同步,病案号:{},住院次数:{} 已经存在 {} 份检验报告", inpatientNo, times, size); log.info("同步检验报告跳过同步,病案号:{},住院次数:{} 已经存在 {} 份检验报告", inpatientNo, times, size);
return; return;
} }
basicMapper.addLabSync(patientId,0); basicMapper.addLabSync(patientId, 0);
//获取所有的报告列表 //获取所有的报告列表
PatientListResult patientListResult = getCommonResult(inpatientNo, times, startDate, endDate); PatientListResult patientListResult = getCommonResult(inpatientNo, times, startDate, endDate);
if (patientListResult == null) { if (patientListResult == null) {
@ -162,9 +162,11 @@ public class WebServiceImpl implements IWebService {
try { try {
log.info("同步检验报告,病案号:{},住院次数:{},开始转换:{} - {}", inpatientNo, times, item.getRepId(), item.getPidComName()); log.info("同步检验报告,病案号:{},住院次数:{},开始转换:{} - {}", inpatientNo, times, item.getRepId(), item.getPidComName());
addScanList = PDFFileUtils.base64StringToPDF(base64Result, root, item.getRepId(), item.getPidComName(), sortIndex); final int pdfIndex = sortIndex;
Future<List<ScanAssort>> toPdfFuture = BASE64_CONVERT_PDF_EXECUTOR.submit(() -> PDFFileUtils.base64StringToPDF(base64Result, root, item.getRepId(), item.getPidComName(), pdfIndex));
addScanList = toPdfFuture.get();
log.info("同步检验报告,病案号:{},住院次数:{},{} - {} 转换结束", inpatientNo, times, item.getRepId(), item.getPidComName()); log.info("同步检验报告,病案号:{},住院次数:{},{} - {} 转换结束", inpatientNo, times, item.getRepId(), item.getPidComName());
} catch (IOException e) { } catch (Exception e) {
String msg = "同步检验报告,病案号:" + inpatientNo + ",住院次数:" + times + "," + item.getRepId() + " - " + item.getPidComName() + " 转换出错了!"; String msg = "同步检验报告,病案号:" + inpatientNo + ",住院次数:" + times + "," + item.getRepId() + " - " + item.getPidComName() + " 转换出错了!";
log.error(msg, e); log.error(msg, e);
} }
@ -186,9 +188,9 @@ public class WebServiceImpl implements IWebService {
//数据写入到3.0 //数据写入到3.0
if (ObjectUtil.isNotEmpty(scanAssortList)) { if (ObjectUtil.isNotEmpty(scanAssortList)) {
log.info("同步检验报告,病案号:{},住院次数:{},同步 {} 份文件。", inpatientNo, times,scanAssortList.size() ); log.info("同步检验报告,病案号:{},住院次数:{},同步 {} 份文件。", inpatientNo, times, scanAssortList.size());
scanAssortMapper.insertOrUpdateBatch(scanAssortList); scanAssortMapper.insertOrUpdateBatch(scanAssortList);
basicMapper.addLabSync(patientId,1); basicMapper.addLabSync(patientId, 1);
} }
} }
@ -209,6 +211,20 @@ public class WebServiceImpl implements IWebService {
return BeanUtil.fillBeanWithMap(result, new PatientReportResult(), false); return BeanUtil.fillBeanWithMap(result, new PatientReportResult(), false);
} }
public static void main(String[] args) {
String pNo="";
String times="";
String StartDate="";
String EndDate="";
String paramMap =
"<![CDATA[<Request>" +
"<PidInNo>" + pNo + "</PidInNo>"
+ "<PidAddmissTimes>" + times + "</PidAddmissTimes>"
+ "<StartDate>" + StartDate + "</StartDate>"
+ "<EndDate>" + EndDate + "</EndDate>"
+ "</Request>]]>";
System.out.println(paramMap);
}
private PatientListResult getCommonResult(String pNo, String times, String StartDate, String EndDate) { private PatientListResult getCommonResult(String pNo, String times, String StartDate, String EndDate) {
String paramMap = String paramMap =

@ -7,7 +7,9 @@ import sun.misc.BASE64Decoder;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.*; import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -21,7 +23,7 @@ public class PDFFileUtils {
* @param rootPath * @param rootPath
* @param repId * @param repId
*/ */
public static synchronized List<ScanAssort> base64StringToPDF(String base64Content, String rootPath, String repId,String fileTitle,int index) throws IOException { public static List<ScanAssort> base64StringToPDF(String base64Content, String rootPath, String repId,String fileTitle,int index) throws IOException {
BASE64Decoder decoder = new BASE64Decoder(); BASE64Decoder decoder = new BASE64Decoder();
List<ScanAssort> addScanList = new ArrayList<>(); List<ScanAssort> addScanList = new ArrayList<>();
PDDocument document =null ; PDDocument document =null ;

Loading…
Cancel
Save