diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index d5dd6ac..8e4bc37 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -16,7 +16,7 @@
\ No newline at end of file
diff --git a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java
index 011c7dc..0d80e5b 100644
--- a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java
+++ b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java
@@ -1,10 +1,13 @@
package com.docus.demo.controller;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.docus.demo.dto.LianZhongUploadInfo;
import com.docus.demo.dto.SyncBasicDataDto;
import com.docus.demo.dto.SyncFileDto;
+import com.docus.demo.dto.SyncLabReportDto;
import com.docus.demo.dto.UploadJpgFileParam;
import com.docus.demo.entity.CommonResult;
import com.docus.demo.facade.ISyncBasicDataService;
@@ -14,10 +17,17 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Collections;
import java.util.List;
@@ -35,45 +45,46 @@ public class SyncBasicDataController {
@Autowired
private IWebService webService;
- private static final ConcurrentHashMap SYNC_BASIC_DATA_BLOCK_MAP = new ConcurrentHashMap<>();
+ private static final ConcurrentHashMap SYNC_BASIC_DATA_BLOCK_MAP = new ConcurrentHashMap<>();
@ApiOperation("去除文件不存在的数据")
@PostMapping("/deleteSync")
- public CommonResult> deleteSync(@RequestBody SyncBasicDataDto syncBasicDataDto){
+ public CommonResult> deleteSync(@RequestBody SyncBasicDataDto syncBasicDataDto) {
return syncBasicFileService.deleteSync(syncBasicDataDto);
}
@ApiOperation("省厅-同步基础数据")
@PostMapping("/syncBasicData")
- public CommonResult> syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto){
- if(syncBasicDataDto == null){
+ public CommonResult> syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto) {
+ if (syncBasicDataDto == null) {
return CommonResult.failed("无效的请求参数!");
}
- String blockKey="syncBasicData:"+ JSON.toJSONString(syncBasicDataDto);
+ String blockKey = "syncBasicData:" + JSON.toJSONString(syncBasicDataDto);
if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) {
return CommonResult.failed("有正在同步的任务!");
}
- SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey,0);
+ SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey, 0);
try {
return syncBasicDataService.syncBasicData(syncBasicDataDto);
- }catch (Exception ex){
+ } catch (Exception ex) {
return CommonResult.failed("同步失败!");
- }finally {
+ } finally {
SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey);
}
}
+
@ApiOperation("省厅-同步单个患者基础数据")
@GetMapping("/syncSingleBasicData")
- public CommonResult> syncSingleBasicData(@RequestParam(name = "disDate") String disDate,@RequestParam(name = "inpatientNo") String inpatientNo){
+ public CommonResult> syncSingleBasicData(@RequestParam(name = "disDate") String disDate, @RequestParam(name = "inpatientNo") String inpatientNo) {
log.info("省厅-同步单个患者基础数据,disDate={},inpatientNo={}", disDate, inpatientNo);
- String blockKey="syncSingleBasicData:"+ inpatientNo+":"+disDate;
+ String blockKey = "syncSingleBasicData:" + inpatientNo + ":" + disDate;
if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) {
return CommonResult.failed("有正在同步的任务!");
}
- SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey,0);
+ SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey, 0);
try {
LocalDate localDate = LocalDate.parse(disDate);
SyncBasicDataDto dto = new SyncBasicDataDto();
@@ -82,9 +93,9 @@ public class SyncBasicDataController {
dto.setInpatientNoList(Collections.singletonList(inpatientNo));
dto.setLimit(100);
return syncBasicDataService.syncBasicData(dto);
- }catch (Exception ex){
+ } catch (Exception ex) {
return CommonResult.failed("同步失败!");
- }finally {
+ } finally {
SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey);
}
}
@@ -92,12 +103,12 @@ public class SyncBasicDataController {
@ApiOperation("省厅-同步上个月基础数据")
@GetMapping("/syncLastMonthBasicData")
- public CommonResult> syncLastMonthBasicData(){
- String blockKey="syncLastMonthBasicData";
+ public CommonResult> syncLastMonthBasicData() {
+ String blockKey = "syncLastMonthBasicData";
if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) {
return CommonResult.failed("有正在同步的任务!");
}
- SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey,0);
+ SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey, 0);
try {
LocalDate today = LocalDate.now();
LocalDate firstDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
@@ -108,9 +119,9 @@ public class SyncBasicDataController {
dto.setEndDate(lastDayOfLastMonth.toString());
dto.setLimit(1000);
return syncBasicDataService.syncBasicData(dto);
- }catch (Exception ex){
+ } catch (Exception ex) {
return CommonResult.failed("同步失败!");
- }finally {
+ } finally {
SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey);
}
}
@@ -122,16 +133,71 @@ public class SyncBasicDataController {
return webService.syncInspection(syncBasicDataDto);
}
+
+ @ApiOperation("同步检验图片数据(V2)")
+ @PostMapping("/syncLabReport")
+ public CommonResult> syncLabReport(@RequestBody SyncLabReportDto syncLabReportDto) {
+ try {
+ validateAndSet(syncLabReportDto);
+ webService.syncLabReport(syncLabReportDto);
+ return CommonResult.success("同步检验数据成功");
+ } catch (Exception ex) {
+ log.error("同步检验图片数据,出错了," + ex.getMessage(), ex);
+ return CommonResult.failed("同步检验数据出错," + ex.getMessage());
+ }
+ }
+
+ private void validateAndSet(SyncLabReportDto syncLabReportDto) {
+ List basicDtoList = syncLabReportDto.getBasicDtoList();
+ if (CollUtil.isEmpty(basicDtoList)) {
+ throw new RuntimeException("患者基础数据为空!");
+ }
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+ for (SyncLabReportDto.SyncLabReportBasicDto basicDto : basicDtoList) {
+
+ if (StrUtil.isBlank(basicDto.getInpatientNo()) || StrUtil.isBlank(basicDto.getDisDate())) {
+ throw new RuntimeException("患者基础数据病案号或出院日期为空!");
+ }
+ LocalDate.parse(basicDto.getDisDate(), dateTimeFormatter);
+ }
+
+ final String startDefault = "2018-01-01";
+ final String endDefault = LocalDate.now().toString() ;
+
+
+ String startDate = syncLabReportDto.getStartDate();
+ String endDate = syncLabReportDto.getEndDate();
+ if (StrUtil.isBlank(startDate)) {
+ startDate = startDefault;
+ }
+ if (StrUtil.isBlank(endDate)) {
+ endDate = endDefault;
+ }
+
+
+ LocalDate startLocalDate = LocalDate.parse(startDate, dateTimeFormatter);
+ LocalDate endLocalDate = LocalDate.parse(endDate, dateTimeFormatter);
+ if (startLocalDate.isAfter(endLocalDate)) {
+ throw new RuntimeException("三方查询接口开始时间不合法!");
+ }
+
+
+ syncLabReportDto.setStartDate(startLocalDate + " 00:00:00");
+ syncLabReportDto.setEndDate(endLocalDate + " 23:59:59");
+ }
+
+
@ApiOperation("联众-同步基础数据")
@PostMapping("/syncLzBasicData")
- public CommonResult> syncLzBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto){
+ public CommonResult> syncLzBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto) {
return syncBasicDataService.syncLzBasicData(syncBasicDataDto);
}
@ApiOperation("同步文件数据")
@PostMapping("/syncBasicFile")
- public CommonResult> syncBasicFile(@RequestBody SyncFileDto syncFileDto){
+ public CommonResult> syncBasicFile(@RequestBody SyncFileDto syncFileDto) {
return syncBasicFileService.syncBasicFile(syncFileDto);
}
@@ -198,12 +264,9 @@ public class SyncBasicDataController {
}
-
-
-
@ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条")
@GetMapping("/choose")
- public CommonResult> choose(){
+ public CommonResult> choose() {
log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条");
try {
syncBasicDataService.choose();
@@ -218,7 +281,7 @@ public class SyncBasicDataController {
@ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条")
@PostMapping("/chooseByInpatientNo")
- public CommonResult> chooseByInpatientNo(@RequestBody List inpatientNos){
+ public CommonResult> chooseByInpatientNo(@RequestBody List inpatientNos) {
log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条");
try {
syncBasicDataService.choose(inpatientNos);
@@ -232,7 +295,7 @@ public class SyncBasicDataController {
@ApiOperation("厦门中医院异地扫描导入数据,根据 病案号、姓名、出院日期 进行 入院日期,性别,科室补充,被选择的改为未归档状态")
@GetMapping("/xmzyyYidi/choose")
- public CommonResult> xmzyyYidiChoose(){
+ public CommonResult> xmzyyYidiChoose() {
log.info("厦门中医院异地扫描导入数据,根据 病案号、姓名、出院日期 进行 入院日期,性别,科室补充");
try {
syncBasicDataService.xmzyyYidiChoose();
diff --git a/src/main/java/com/docus/demo/dto/SyncLabReportDto.java b/src/main/java/com/docus/demo/dto/SyncLabReportDto.java
new file mode 100644
index 0000000..79e1359
--- /dev/null
+++ b/src/main/java/com/docus/demo/dto/SyncLabReportDto.java
@@ -0,0 +1,32 @@
+package com.docus.demo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author YongBin Wen
+ * @date 2025/4/16 0016 17:05
+ */
+@ApiModel("检验报告同步参数")
+@Data
+public class SyncLabReportDto {
+ @ApiModelProperty("三方查询接口开始时间,接口格式为 yyyy-MM-dd,后端转带时分秒格式,为空默认为 2018-01-01 00:00:00")
+ private String startDate;
+ @ApiModelProperty("三方查询接口开始时间,接口格式为 yyyy-MM-dd,后端转带时分秒格式,为空默认为 接口调用时间")
+ private String endDate;
+
+ @ApiModelProperty("患者基础数据")
+ private List basicDtoList;
+
+ @Data
+ @ApiModel("检验报告同步患者基础数据参数")
+ public static class SyncLabReportBasicDto {
+ @ApiModelProperty("病案号")
+ private String inpatientNo;
+ @ApiModelProperty("出院日期,格式为 yyyy-MM-dd")
+ private String disDate;
+ }
+}
diff --git a/src/main/java/com/docus/demo/facade/IWebService.java b/src/main/java/com/docus/demo/facade/IWebService.java
index 154c362..e7f0b1a 100644
--- a/src/main/java/com/docus/demo/facade/IWebService.java
+++ b/src/main/java/com/docus/demo/facade/IWebService.java
@@ -1,12 +1,13 @@
package com.docus.demo.facade;
import com.docus.demo.dto.SyncBasicDataDto;
+import com.docus.demo.dto.SyncLabReportDto;
import com.docus.demo.entity.CommonResult;
-import java.io.IOException;
-
public interface IWebService {
CommonResult> syncInspection(SyncBasicDataDto syncBasicDataDto);
+
+ void syncLabReport(SyncLabReportDto syncLabReportDto);
}
diff --git a/src/main/java/com/docus/demo/service/WebServiceImpl.java b/src/main/java/com/docus/demo/service/WebServiceImpl.java
index ae65b76..b5efa7d 100644
--- a/src/main/java/com/docus/demo/service/WebServiceImpl.java
+++ b/src/main/java/com/docus/demo/service/WebServiceImpl.java
@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.http.webservice.SoapClient;
import com.docus.demo.dto.SyncBasicDataDto;
+import com.docus.demo.dto.SyncLabReportDto;
import com.docus.demo.entity.CommonResult;
import com.docus.demo.entity.PatientListResult;
import com.docus.demo.entity.PatientReportResult;
@@ -23,6 +24,7 @@ import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -46,14 +48,13 @@ public class WebServiceImpl implements IWebService {
@Override
public CommonResult> syncInspection(SyncBasicDataDto syncBasicDataDto) {
-
try {
-
//页码
int current;
//每页1000条数据
int limit = syncBasicDataDto.getLimit();
-
+ String StartDate = "2018-01-01 00:00:00";
+ String EndDate = "2025-01-01 00:00:00";
for (current = 1; ; current++) {
//查询基础数据
List tbasicList = basicMapper.getOldBasicListLimit((current - 1) * limit, limit, syncBasicDataDto.getInpatientNoList(), syncBasicDataDto);
@@ -61,98 +62,118 @@ public class WebServiceImpl implements IWebService {
if (tbasicList.size() == 0) {
break;
}
+ for (int j = 0; j < tbasicList.size(); j++) {
+ Tbasic tbasic = tbasicList.get(j);
+ syncInspection(tbasic, StartDate, EndDate);
+ }
+ log.info("业务结束");
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ }
+ return CommonResult.success("同步检验数据成功");
+ }
- for (int j = 0; j < tbasicList.size(); j++) {
+ @Override
+ public void syncLabReport(SyncLabReportDto syncLabReportDto) {
+ //页码
+ int offset = 0;
+ //每页1000条数据
+ int limit = 1000;
+ String startDate = syncLabReportDto.getStartDate();
+ String endDate = syncLabReportDto.getEndDate();
+
+ List basicDtoList = syncLabReportDto.getBasicDtoList();
+ for (SyncLabReportDto.SyncLabReportBasicDto syncLabReportBasicDto : basicDtoList) {
+ String disDate = syncLabReportBasicDto.getDisDate();
+ String inpatientNo = syncLabReportBasicDto.getInpatientNo();
+ SyncBasicDataDto syncBasicDataDto = new SyncBasicDataDto();
+ syncBasicDataDto.setStartDate(disDate + " 00:00:00");
+ syncBasicDataDto.setEndDate(disDate + " 23:59:59");
+ List tbasicList = basicMapper.getOldBasicListLimit(offset, limit, Collections.singletonList(inpatientNo), syncBasicDataDto);
+ for (Tbasic tbasic : tbasicList) {
+ syncInspection(tbasic, startDate, endDate);
+ }
+ }
+ }
- Tbasic tbasic = tbasicList.get(j);
- log.info("正在同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
- List oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", tbasic.getPatientId());
- log.info("旧数据" + oldScanAssortList.size());
- if (oldScanAssortList.size()>0){
- log.info("跳过同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
- continue;
- }
+ public void syncInspection(Tbasic tbasic, String startDate, String endDate) {
+ log.info("正在同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
+ List oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", tbasic.getPatientId());
+ log.info("旧数据" + oldScanAssortList.size());
+ if (oldScanAssortList.size() > 0) {
+ log.info("跳过同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
+ return;
+ }
- String pNo = tbasic.getInpatientNo();
- String times = tbasic.getAdmissTimes().toString();
+ String pNo = tbasic.getInpatientNo();
+ String times = tbasic.getAdmissTimes().toString();
// String StartDate = sdf.format(tbasic.getAdmissDate());
// String EndDate = sdf.format(tbasic.getDisDate());
- String StartDate = "2018-01-01 00:00:00";
- String EndDate = "2025-01-01 00:00:00";
- String patientId = tbasic.getPatientId();
- //获取所有的报告列表
- PatientListResult patientListResult = getCommonResult(pNo, times, StartDate, EndDate);
+ String patientId = tbasic.getPatientId();
+
+ //获取所有的报告列表
+ PatientListResult patientListResult = getCommonResult(pNo, times, startDate, endDate);
// log.info("返回结果"+patientListResult);
- if (patientListResult == null) {
- log.error(pNo + " " + times + "调用失败");
- continue;
- }
+ if (patientListResult == null) {
+ log.error(pNo + " " + times + "调用失败");
+ return;
+ }
- List scanAssortList = new ArrayList<>();
+ List scanAssortList = new ArrayList<>();
- for (int i = 0; i < patientListResult.getResult().getPidReportMain().size(); i++) {
- //根据旧数据判断是否需要做同步
- PatientListResult.Result.ReportInfo item = patientListResult.getResult().getPidReportMain().get(i);
+ for (int i = 0; i < patientListResult.getResult().getPidReportMain().size(); i++) {
+ //根据旧数据判断是否需要做同步
+ PatientListResult.Result.ReportInfo item = patientListResult.getResult().getPidReportMain().get(i);
// ScanAssort oldAssort = oldScanAssortList.stream()
// .filter(f -> f.getFileTitle().equals(item.getPidComName())).findAny().orElse(null);
- String root = "F:\\jianyan" + File.separator
- + tbasic.getInpatientNo() + File.separator
- + tbasic.getAdmissTimes();
+ String root = "F:\\jianyan" + File.separator
+ + tbasic.getInpatientNo() + File.separator
+ + tbasic.getAdmissTimes();
// log.info("开始转换"+root);
- //时间段内如果查询到住院次数相同的数据 则数据入库
- if (item.getPidAddmissTimes().equals(times) && item.getPidInNo().equalsIgnoreCase(pNo)) {
- log.info("正在同步" + item.getPidComName() + i);
+ //时间段内如果查询到住院次数相同的数据 则数据入库
+ if (item.getPidAddmissTimes().equals(times) && item.getPidInNo().equalsIgnoreCase(pNo)) {
+ log.info("正在同步" + item.getPidComName() + i);
// log.info("进入条件");
- PatientReportResult patientReportResult = this.getReportResult(item.getRepId());
- String base64Result = patientReportResult.getResult().getPatient().getPatientReport();
- List addScanList = new ArrayList<>();
- try {
- log.info("开始转换");
- addScanList = PDFFileUtils.base64StringToPDF(base64Result, root, item.getRepId(), item.getPidComName(), i);
- log.info("转换结束");
- } catch (IOException e) {
- log.error("检验pdf转化出错" + e.getMessage(),e);
- }
- addScanList.forEach(scanAssort -> {
- ScanAssort oldAssort = oldScanAssortList.stream()
- .filter(f -> f.getScanPage().equals(scanAssort.getScanPage())).findAny().orElse(null);
- if (oldAssort != null) {
- scanAssort.setId(oldAssort.getId());
- } else {
- scanAssort.setId(snowflakeIdWorker.nextId());
- }
- scanAssort.setPatientId(patientId);
- scanAssortList.add(scanAssort);
- log.info("结果" + scanAssort);
- });
- }
- }
-
- //数据写入到3.0
- if (ObjectUtil.isNotEmpty(scanAssortList)) {
- log.info("开始写入" + scanAssortList.size());
- scanAssortMapper.insertOrUpdateBatch(scanAssortList);
- log.info("写入结束" + scanAssortList.size());
- }
+ PatientReportResult patientReportResult = this.getReportResult(item.getRepId());
+ String base64Result = patientReportResult.getResult().getPatient().getPatientReport();
+ List addScanList = new ArrayList<>();
+ try {
+ log.info("开始转换");
+ addScanList = PDFFileUtils.base64StringToPDF(base64Result, root, item.getRepId(), item.getPidComName(), i);
+ log.info("转换结束");
+ } catch (IOException e) {
+ log.error("检验pdf转化出错" + e.getMessage(), e);
}
- log.info("业务结束");
-
+ addScanList.forEach(scanAssort -> {
+ ScanAssort oldAssort = oldScanAssortList.stream()
+ .filter(f -> f.getScanPage().equals(scanAssort.getScanPage())).findAny().orElse(null);
+ if (oldAssort != null) {
+ scanAssort.setId(oldAssort.getId());
+ } else {
+ scanAssort.setId(snowflakeIdWorker.nextId());
+ }
+ scanAssort.setPatientId(patientId);
+ scanAssortList.add(scanAssort);
+ log.info("结果" + scanAssort);
+ });
}
-
- } catch (Exception e) {
- log.error(e.getMessage(), e);
}
-
- return CommonResult.success("同步检验数据成功");
+ //数据写入到3.0
+ if (ObjectUtil.isNotEmpty(scanAssortList)) {
+ log.info("开始写入" + scanAssortList.size());
+ scanAssortMapper.insertOrUpdateBatch(scanAssortList);
+ log.info("写入结束" + scanAssortList.size());
+ }
}
private PatientReportResult getReportResult(String repID) {