diff --git a/src/main/java/com/docus/server/report/job/ReportJob.java b/src/main/java/com/docus/server/report/job/ReportJob.java new file mode 100644 index 0000000..8dbab52 --- /dev/null +++ b/src/main/java/com/docus/server/report/job/ReportJob.java @@ -0,0 +1,79 @@ +package com.docus.server.report.job; + +import com.docus.core.util.Func; +import com.docus.server.collection.mapper.TBasicMapper; +import com.docus.server.report.entity.AfReportRecord; +import com.docus.server.report.mapper.AfReportRecordMapper; +import com.docus.server.report.service.ReportService; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 报告相关xxl-Job + * + * @author jiashi + */ +@Component +@Slf4j +public class ReportJob { + @Resource + private ReportService reportService; + @Resource + private AfReportRecordMapper afReportRecordMapper; + @Resource + private TBasicMapper tBasicMapper; + + /** + * 补偿异常的报告 + */ + @XxlJob("MakeupExceptionReportJob") + public void makeupExceptionReport() { + log.info("补偿异常的报告 任务开始了"); + int makeupSize = 0; + final int pageSize = 1000; + int page = 1; + boolean loopCondition = true; + try { + do { + + List reportRecords = afReportRecordMapper.getStartStateReportRecord(page, pageSize); + if (reportRecords == null || reportRecords.size() < pageSize) { + // 结束循环 + loopCondition = false; + } + if (reportRecords != null) { + updateReportRecordPatientId(reportRecords); + List taskIds = reportRecords.stream().map(AfReportRecord::getTaskId).collect(Collectors.toList()); + reportService.makeupReportByTaskIds(taskIds); + } + page++; + } while (loopCondition); + } catch (Exception ex) { + log.error("补偿异常的报告出错啦!" + ex.getMessage(), ex); + } + log.info("补偿异常的报告 任务结束了,本次补偿报告 {} 条", makeupSize); + } + + private void updateReportRecordPatientId(List reportRecords) { + if (reportRecords == null || reportRecords.isEmpty()) { + return; + } + for (AfReportRecord reportRecord : reportRecords) { + if (Func.isNotBlank(reportRecord.getPatientId())) { + continue; + } + try { + // 如果出现多条出错的情况,还是得保存收到的信息,人工干预处理 + String patientId = tBasicMapper.getPatientIdByInpatientNoAndAdminssTimes(reportRecord.getInpatientNo(), reportRecord.getAdmissTimes()); + afReportRecordMapper.updateReportRecordPatientId(patientId, reportRecord.getTaskId()); + } catch (Exception ex) { + log.error("查询病案主键出错了", ex); + } + } + } +} diff --git a/src/main/java/com/docus/server/report/mapper/AfReportRecordMapper.java b/src/main/java/com/docus/server/report/mapper/AfReportRecordMapper.java index 5529275..8c74b50 100644 --- a/src/main/java/com/docus/server/report/mapper/AfReportRecordMapper.java +++ b/src/main/java/com/docus/server/report/mapper/AfReportRecordMapper.java @@ -49,4 +49,20 @@ public interface AfReportRecordMapper { * @return 数据有patientId的任务id集合 */ List getHasPatientIdTaskIdsByTaskIds(@Param("taskIds") List taskIds); + + /** + * 获取未开始的报告记录 + * @param page 分页页码 + * @param pageSize 一页条数 + * @return 未开始的报告记录 + */ + List getStartStateReportRecord(@Param("page") int page,@Param("pageSize") int pageSize); + + /** + * 根据任务id更新病案主键 + * @param patientId 病案主键 + * @param taskId 任务id + * @return 数据库操作结果 + */ + int updateReportRecordPatientId(@Param("patientId") String patientId,@Param("taskId") Long taskId); } \ No newline at end of file diff --git a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java index 783b434..14fe5b4 100644 --- a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java @@ -91,6 +91,9 @@ public class ReportServiceImpl implements ReportService { @Override public void makeupReportByTaskIds(List taskIds) throws Exception { + if (taskIds == null || taskIds.isEmpty()) { + return; + } // 定义一批200查询,分批次 final int oneBatchCount = 200; int startIndex = 0; diff --git a/src/main/resources/mapper/AfReportRecordMapper.xml b/src/main/resources/mapper/AfReportRecordMapper.xml index eddd271..a31ed23 100644 --- a/src/main/resources/mapper/AfReportRecordMapper.xml +++ b/src/main/resources/mapper/AfReportRecordMapper.xml @@ -29,6 +29,11 @@ `update_time`=now() where `task_id` = #{taskId} + + update `docus_archivefile`.`af_report_record` + set `patient_id`= #{patientId} + where `task_id` = #{taskId} + +