diff --git a/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java b/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java new file mode 100644 index 0000000..c55c8ec --- /dev/null +++ b/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java @@ -0,0 +1,227 @@ +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.SyncBasicDataDto; +import com.docus.demo.dto.SyncFileDto; +import com.docus.demo.dto.SyncLabReportDto; +import com.docus.demo.entity.CommonResult; +import com.docus.demo.facade.ISyncBasicDataService; +import com.docus.demo.facade.ISyncBasicFileService; +import com.docus.demo.facade.IWebService; +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.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.RestController; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * + * @author YongBin Wen + * @date 2025/12/10 星期三 8:23 + */ +@Api(value = "广州市一数据同步接口", tags = "广州市一数据同步接口") +@RestController +@Slf4j +public class GuangZhouFirstHospController { + private static final ConcurrentHashMap SYNC_BASIC_DATA_BLOCK_MAP = new ConcurrentHashMap<>(); + @Autowired + private ISyncBasicDataService syncBasicDataService; + @Autowired + private ISyncBasicFileService syncBasicFileService; + @Autowired + private IWebService webService; + + @ApiOperation("省厅-同步基础数据") + @PostMapping("/syncBasicData") + public CommonResult syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto) { + if (syncBasicDataDto == null) { + return CommonResult.failed("无效的请求参数!"); + } + 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); + try { + return syncBasicDataService.syncBasicData(syncBasicDataDto); + } catch (Exception ex) { + return CommonResult.failed("同步失败!"); + } finally { + SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); + } + + } + + @ApiOperation("省厅-同步单个患者基础数据") + @GetMapping("/syncSingleBasicData") + public CommonResult syncSingleBasicData(@RequestParam(name = "disDate") String disDate, @RequestParam(name = "inpatientNo") String inpatientNo) { + log.info("省厅-同步单个患者基础数据,disDate={},inpatientNo={}", disDate, inpatientNo); + String blockKey = "syncSingleBasicData:" + inpatientNo + ":" + disDate; + if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) { + return CommonResult.failed("有正在同步的任务!"); + } + SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey, 0); + try { + LocalDate localDate = LocalDate.parse(disDate); + SyncBasicDataDto dto = new SyncBasicDataDto(); + dto.setStartDate(localDate.toString()); + dto.setEndDate(localDate.toString()); + dto.setInpatientNoList(Collections.singletonList(inpatientNo)); + dto.setLimit(100); + return syncBasicDataService.syncBasicData(dto); + } catch (Exception ex) { + return CommonResult.failed("同步失败!"); + } finally { + SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); + } + } + + @ApiOperation("省厅-同步上个月基础数据") + @GetMapping("/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); + try { + LocalDate today = LocalDate.now(); + LocalDate firstDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()); + LocalDate lastDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + + SyncBasicDataDto dto = new SyncBasicDataDto(); + dto.setStartDate(firstDayOfLastMonth.toString()); + dto.setEndDate(lastDayOfLastMonth.toString()); + dto.setLimit(1000); + return syncBasicDataService.syncBasicData(dto); + } catch (Exception ex) { + return CommonResult.failed("同步失败!"); + } finally { + SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); + } + } + + + @ApiOperation("同步检验图片数据") + @PostMapping("/syncInspection") + public CommonResult syncInspection(@RequestBody SyncBasicDataDto syncBasicDataDto) { + 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()); + } + } + + + @ApiOperation("联众-同步基础数据") + @PostMapping("/syncLzBasicData") + public CommonResult syncLzBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto) { + + return syncBasicDataService.syncLzBasicData(syncBasicDataDto); + } + + @ApiOperation("同步文件数据") + @PostMapping("/syncBasicFile") + public CommonResult syncBasicFile(@RequestBody SyncFileDto syncFileDto) { + return syncBasicFileService.syncBasicFile(syncFileDto); + } + + @ApiOperation("去除文件不存在的数据") + @PostMapping("/deleteSync") + public CommonResult deleteSync(@RequestBody SyncBasicDataDto syncBasicDataDto) { + return syncBasicFileService.deleteSync(syncBasicDataDto); + } + + @ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条") + @GetMapping("/choose") + public CommonResult choose() { + log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条"); + try { + syncBasicDataService.choose(); + log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!"); + return CommonResult.success("筛选完成!"); + } catch (Exception ex) { + log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex); + return CommonResult.failed("筛选异常!"); + } + } + + + @ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条") + @PostMapping("/chooseByInpatientNo") + public CommonResult chooseByInpatientNo(@RequestBody List inpatientNos) { + log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条"); + try { + syncBasicDataService.choose(inpatientNos); + log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!"); + return CommonResult.success("筛选完成!"); + } catch (Exception ex) { + log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex); + return CommonResult.failed("筛选异常!"); + } + } + + + 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"); + } +} diff --git a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java index 0d80e5b..8263e91 100644 --- a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java +++ b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java @@ -1,38 +1,23 @@ 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; import com.docus.demo.facade.ISyncBasicFileService; -import com.docus.demo.facade.IWebService; 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.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; -import java.util.concurrent.ConcurrentHashMap; - @Api(value = "数据同步接口", tags = "数据同步接口") @RestController @Slf4j @@ -42,164 +27,6 @@ public class SyncBasicDataController { private ISyncBasicDataService syncBasicDataService; @Autowired private ISyncBasicFileService syncBasicFileService; - @Autowired - private IWebService webService; - - private static final ConcurrentHashMap SYNC_BASIC_DATA_BLOCK_MAP = new ConcurrentHashMap<>(); - - - @ApiOperation("去除文件不存在的数据") - @PostMapping("/deleteSync") - public CommonResult deleteSync(@RequestBody SyncBasicDataDto syncBasicDataDto) { - return syncBasicFileService.deleteSync(syncBasicDataDto); - } - - - @ApiOperation("省厅-同步基础数据") - @PostMapping("/syncBasicData") - public CommonResult syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto) { - if (syncBasicDataDto == null) { - return CommonResult.failed("无效的请求参数!"); - } - 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); - try { - return syncBasicDataService.syncBasicData(syncBasicDataDto); - } catch (Exception ex) { - return CommonResult.failed("同步失败!"); - } finally { - SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); - } - - } - - @ApiOperation("省厅-同步单个患者基础数据") - @GetMapping("/syncSingleBasicData") - public CommonResult syncSingleBasicData(@RequestParam(name = "disDate") String disDate, @RequestParam(name = "inpatientNo") String inpatientNo) { - log.info("省厅-同步单个患者基础数据,disDate={},inpatientNo={}", disDate, inpatientNo); - String blockKey = "syncSingleBasicData:" + inpatientNo + ":" + disDate; - if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) { - return CommonResult.failed("有正在同步的任务!"); - } - SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey, 0); - try { - LocalDate localDate = LocalDate.parse(disDate); - SyncBasicDataDto dto = new SyncBasicDataDto(); - dto.setStartDate(localDate.toString()); - dto.setEndDate(localDate.toString()); - dto.setInpatientNoList(Collections.singletonList(inpatientNo)); - dto.setLimit(100); - return syncBasicDataService.syncBasicData(dto); - } catch (Exception ex) { - return CommonResult.failed("同步失败!"); - } finally { - SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); - } - } - - - @ApiOperation("省厅-同步上个月基础数据") - @GetMapping("/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); - try { - LocalDate today = LocalDate.now(); - LocalDate firstDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()); - LocalDate lastDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); - - SyncBasicDataDto dto = new SyncBasicDataDto(); - dto.setStartDate(firstDayOfLastMonth.toString()); - dto.setEndDate(lastDayOfLastMonth.toString()); - dto.setLimit(1000); - return syncBasicDataService.syncBasicData(dto); - } catch (Exception ex) { - return CommonResult.failed("同步失败!"); - } finally { - SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); - } - } - - - @ApiOperation("同步检验图片数据") - @PostMapping("/syncInspection") - public CommonResult syncInspection(@RequestBody SyncBasicDataDto syncBasicDataDto) { - 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) { - - return syncBasicDataService.syncLzBasicData(syncBasicDataDto); - } - - @ApiOperation("同步文件数据") - @PostMapping("/syncBasicFile") - public CommonResult syncBasicFile(@RequestBody SyncFileDto syncFileDto) { - return syncBasicFileService.syncBasicFile(syncFileDto); - } /** @@ -264,34 +91,7 @@ public class SyncBasicDataController { } - @ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条") - @GetMapping("/choose") - public CommonResult choose() { - log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条"); - try { - syncBasicDataService.choose(); - log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!"); - return CommonResult.success("筛选完成!"); - } catch (Exception ex) { - log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex); - return CommonResult.failed("筛选异常!"); - } - } - - @ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条") - @PostMapping("/chooseByInpatientNo") - public CommonResult chooseByInpatientNo(@RequestBody List inpatientNos) { - log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条"); - try { - syncBasicDataService.choose(inpatientNos); - log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!"); - return CommonResult.success("筛选完成!"); - } catch (Exception ex) { - log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex); - return CommonResult.failed("筛选异常!"); - } - } @ApiOperation("厦门中医院异地扫描导入数据,根据 病案号、姓名、出院日期 进行 入院日期,性别,科室补充,被选择的改为未归档状态") @GetMapping("/xmzyyYidi/choose") diff --git a/src/main/java/com/docus/demo/controller/TemporaryFunctionController.java b/src/main/java/com/docus/demo/controller/TemporaryFunctionController.java index 250c33f..2a56801 100644 --- a/src/main/java/com/docus/demo/controller/TemporaryFunctionController.java +++ b/src/main/java/com/docus/demo/controller/TemporaryFunctionController.java @@ -18,7 +18,7 @@ import java.text.SimpleDateFormat; import java.util.List; @Api(value = "临时方法接口", tags = "临时方法接口") -@RestController("/tempfunc") +@RestController @Slf4j public class TemporaryFunctionController { diff --git a/src/main/java/com/docus/demo/facade/IWebService.java b/src/main/java/com/docus/demo/facade/IWebService.java index 44df8c9..70bde83 100644 --- a/src/main/java/com/docus/demo/facade/IWebService.java +++ b/src/main/java/com/docus/demo/facade/IWebService.java @@ -13,11 +13,21 @@ public interface IWebService { void syncLabReport(SyncLabReportDto syncLabReportDto); /** - * 同步检验图片方法 + * 同步检验图片方法,调用syncInspection(Tbasic tbasic, String startDate, String endDate,true) * * @param tbasic 患者基础数据 * @param startDate 报告查询时间开始时间,格式 yyyy-MM-dd HH:mm:ss * @param endDate 报告查询时间结束时间,格式 yyyy-MM-dd HH:mm:ss */ void syncInspection(Tbasic tbasic, String startDate, String endDate); + + /** + * 同步检验图片方法,skip参数表示如果查到了文件则不会重新同步 + * + * @param tbasic 患者基础数据 + * @param startDate 报告查询时间开始时间,格式 yyyy-MM-dd HH:mm:ss + * @param endDate 报告查询时间结束时间,格式 yyyy-MM-dd HH:mm:ss + * @param skip 如果存在同步过检验报告,则跳过 + */ + void syncInspection(Tbasic tbasic, String startDate, String endDate,boolean skip); } diff --git a/src/main/java/com/docus/demo/service/WebServiceImpl.java b/src/main/java/com/docus/demo/service/WebServiceImpl.java index 47a1cb9..aba1f9e 100644 --- a/src/main/java/com/docus/demo/service/WebServiceImpl.java +++ b/src/main/java/com/docus/demo/service/WebServiceImpl.java @@ -48,6 +48,8 @@ public class WebServiceImpl implements IWebService { private static final ExecutorService BASE64_CONVERT_PDF_EXECUTOR = Executors.newFixedThreadPool(3); + private final static String LAB_SOURCE="jy"; + @Override public CommonResult syncInspection(SyncBasicDataDto syncBasicDataDto) { try { @@ -95,13 +97,20 @@ public class WebServiceImpl implements IWebService { syncBasicDataDto.setEndDate(disDate + " 23:59:59"); List tbasicList = basicMapper.getOldBasicListLimit(offset, limit, Collections.singletonList(inpatientNo), syncBasicDataDto); for (Tbasic tbasic : tbasicList) { - syncInspection(tbasic, startDate, endDate); + syncInspection(tbasic, startDate, endDate,false); } } } + @Override public void syncInspection(Tbasic tbasic, String startDate, String endDate) { + syncInspection(tbasic, startDate, endDate, true); + } + + @Override + public void syncInspection(Tbasic tbasic, String startDate, String endDate,boolean skip) { + boolean syncError=false; Date admissDate = tbasic.getAdmissDate(); // 如果报告的开始时间大于入院时间,则开始时间取入院时间 if (admissDate != null) { @@ -114,21 +123,26 @@ public class WebServiceImpl implements IWebService { } catch (Exception ignored) { } } + + String inpatientNo = tbasic.getInpatientNo(); String times = tbasic.getAdmissTimes().toString(); String patientId = tbasic.getPatientId(); log.info("同步检验报告,病案号:{},住院次数:{}", inpatientNo, times); + List oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", patientId); int size = oldScanAssortList.size(); - if (size > 0) { + if (skip && size > 0) { log.info("同步检验报告跳过同步,病案号:{},住院次数:{} 已经存在 {} 份检验报告", inpatientNo, times, size); return; } + basicMapper.addLabSync(patientId, 0); //获取所有的报告列表 PatientListResult patientListResult = getCommonResult(inpatientNo, times, startDate, endDate); if (patientListResult == null) { log.warn("同步检验报告,病案号:{},住院次数:{},开始时间:{},结束时间:{} 未查到报告!", inpatientNo, times, startDate, endDate); + basicMapper.addLabSync(patientId, 404); return; } // 匹配患者的报告列表 @@ -138,9 +152,11 @@ public class WebServiceImpl implements IWebService { .collect(Collectors.toList()); if (reportInfoList.isEmpty()) { log.warn("同步检验报告,病案号:{},住院次数:{},开始时间:{},结束时间:{} 未查到报告!", inpatientNo, times, startDate, endDate); + basicMapper.addLabSync(patientId, 404); return; } + scanAssortMapper.delScanAssort(patientId,LAB_SOURCE); List scanAssortList = new ArrayList<>(); for (int sortIndex = 0; sortIndex < reportInfoList.size(); sortIndex++) { //根据旧数据判断是否需要做同步 @@ -167,6 +183,7 @@ public class WebServiceImpl implements IWebService { addScanList = toPdfFuture.get(); log.info("同步检验报告,病案号:{},住院次数:{},{} - {} 转换结束", inpatientNo, times, item.getRepId(), item.getPidComName()); } catch (Exception e) { + syncError = true; String msg = "同步检验报告,病案号:" + inpatientNo + ",住院次数:" + times + "," + item.getRepId() + " - " + item.getPidComName() + " 转换出错了!"; log.error(msg, e); } @@ -181,6 +198,7 @@ public class WebServiceImpl implements IWebService { scanAssort.setId(snowflakeIdWorker.nextId()); } scanAssort.setPatientId(patientId); + scanAssort.setSource(LAB_SOURCE); scanAssortList.add(scanAssort); } @@ -190,7 +208,12 @@ public class WebServiceImpl implements IWebService { if (ObjectUtil.isNotEmpty(scanAssortList)) { log.info("同步检验报告,病案号:{},住院次数:{},同步 {} 份文件。", inpatientNo, times, scanAssortList.size()); scanAssortMapper.insertOrUpdateBatch(scanAssortList); - basicMapper.addLabSync(patientId, 1); + if(syncError){ + basicMapper.addLabSync(patientId, 500); + }else { + basicMapper.addLabSync(patientId, 1); + } + } } diff --git a/src/main/resources/mapper/mysql/ScanAssortMapper.xml b/src/main/resources/mapper/mysql/ScanAssortMapper.xml index 4b99dde..b818c44 100644 --- a/src/main/resources/mapper/mysql/ScanAssortMapper.xml +++ b/src/main/resources/mapper/mysql/ScanAssortMapper.xml @@ -106,6 +106,8 @@ WHERE assort_id = #{assortId} and patient_id = #{pid} and source='jy' + + @@ -131,4 +133,5 @@ + \ No newline at end of file