feat: 广州市一检验报告同步job

lianzhong-receive
wyb 3 months ago
parent 42e89000b5
commit 6d68f707c4

@ -3,6 +3,7 @@ package com.docus.demo.facade;
import com.docus.demo.dto.SyncBasicDataDto;
import com.docus.demo.dto.SyncLabReportDto;
import com.docus.demo.entity.CommonResult;
import com.docus.demo.entity.Tbasic;
public interface IWebService {
@ -10,4 +11,13 @@ public interface IWebService {
CommonResult<?> syncInspection(SyncBasicDataDto syncBasicDataDto);
void syncLabReport(SyncLabReportDto syncLabReportDto);
/**
*
*
* @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);
}

@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author YongBin Wen
@ -20,22 +21,30 @@ public class GzFirstHospBasicSyncJob {
@Autowired
private ISyncBasicDataService syncBasicDataService;
private AtomicBoolean isRunning = new AtomicBoolean(false);
@Scheduled(cron = "0 0 0/12 * * ?")
@Scheduled(cron = "0 0 3/12 * * ?")
public void syncOneMonthData() {
LocalDate today = LocalDate.now();
LocalDate firstDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
SyncBasicDataDto dto = new SyncBasicDataDto();
dto.setStartDate(firstDayOfLastMonth.toString());
dto.setEndDate(today.toString());
dto.setLimit(1000);
log.info("广州市第一人民医院,同步省厅基础数据,日期:{} —— {}", firstDayOfLastMonth, today);
try {
syncBasicDataService.syncBasicData(dto);
log.info("广州市第一人民医院,同步省厅基础数据,日期:" + firstDayOfLastMonth + "—— " + today + ",同步完成!");
} catch (Exception ex) {
log.info("广州市第一人民医院,同步省厅基础数据,日期:" + firstDayOfLastMonth + "—— " + today + ",出现异常:" + ex.getMessage(), ex);
if (isRunning.compareAndSet(false, true)) {
LocalDate today = LocalDate.now();
LocalDate firstDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
SyncBasicDataDto dto = new SyncBasicDataDto();
dto.setStartDate(firstDayOfLastMonth.toString());
dto.setEndDate(today.toString());
dto.setLimit(1000);
log.info("广州市第一人民医院,同步省厅基础数据,日期:{} —— {}", firstDayOfLastMonth, today);
try {
syncBasicDataService.syncBasicData(dto);
log.info("广州市第一人民医院,同步省厅基础数据,日期:" + firstDayOfLastMonth + "—— " + today + ",同步完成!");
} catch (Exception ex) {
log.info("广州市第一人民医院,同步省厅基础数据,日期:" + firstDayOfLastMonth + "—— " + today + ",出现异常:" + ex.getMessage(), ex);
} finally {
isRunning.set(false);
}
} else {
log.warn("广州市第一人民医院,同步省厅基础数据正在调度!");
}
}
}

@ -0,0 +1,66 @@
package com.docus.demo.job;
import cn.hutool.core.collection.CollUtil;
import com.docus.demo.entity.Tbasic;
import com.docus.demo.facade.IWebService;
import com.docus.demo.mapper.mysql.BasicMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author YongBin Wen
* @date 2025/4/23 0023 17:13
*/
@Component
@Slf4j
public class GzFirstLabReportSyncJob {
@Autowired
private IWebService iWebService;
@Resource
private BasicMapper basicMapper;
private AtomicBoolean isRunning = new AtomicBoolean(false);
@Scheduled(cron = "0 0 0/8 * * ?")
public void syncOneMonthData() {
LocalDate today = LocalDate.now();
String startDisDateTime = "2018-01-01 00:00:00";
String startDateTime = "2018-01-01 00:00:00";
String endDateTime = today + " 23:59:59";
if (isRunning.compareAndSet(false, true)) {
try {
int offset = 0;
int limit = 1000;
while (true) {
log.info("广州市第一人民医院同步已扫描患者检验报告患者参数查询startDisDateTime={}offset={}limit={}", startDisDateTime, offset, limit);
List<Tbasic> tbasicList = basicMapper.getLabSyncBasicList(startDisDateTime, offset, limit);
if (CollUtil.isEmpty(tbasicList)) {
break;
}
for (Tbasic tbasic : tbasicList) {
iWebService.syncInspection(tbasic, startDateTime, endDateTime);
}
offset = offset + limit;
}
log.info("广州市第一人民医院,同步已扫描患者检验报告,同步完成!");
} catch (Exception ex) {
log.info("广州市第一人民医院,同步已扫描患者检验报告,出现异常:" + ex.getMessage(), ex);
} finally {
isRunning.set(false);
}
} else {
log.warn("广州市第一人民医院,同步已扫描患者检验报告正在调度!");
}
}
}

@ -29,6 +29,8 @@ public interface BasicMapper {
List<Tbasic> getOldBasicListLimit(@Param("pageStart") int pageStart,
@Param("pageEnd") int pageEnd,@Param("list") List<String> fprnList, @Param("dto") SyncBasicDataDto syncBasicDataDto);
List<Tbasic> getLabSyncBasicList(@Param("startDisDateTime") String startDisDateTime, @Param("offset") int offset, @Param("limit") int limit);
void updateScanStatus(@Param("pid")String pid);
@ -56,4 +58,6 @@ public interface BasicMapper {
int fillMissingFields(@Param("basic") Tbasic yidiBasic);
int updateNotArchive(@Param("patientId")String patientId);
}

@ -98,7 +98,7 @@ public class WebServiceImpl implements IWebService {
}
}
@Override
public void syncInspection(Tbasic tbasic, String startDate, String endDate) {
log.info("正在同步" + tbasic.getInpatientNo() + " " + tbasic.getAdmissTimes());
List<ScanAssort> oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", tbasic.getPatientId());

@ -197,6 +197,27 @@
</if>
limit #{pageStart} ,#{pageEnd}
</select>
<select id="getLabSyncBasicList" resultType="com.docus.demo.entity.Tbasic">
SELECT
patient_id,
admiss_times,
inpatient_no,
admiss_date,
`name`,
dis_date
FROM
docus_medicalrecord.t_basic
WHERE
dis_date >= #{startDisDateTime}
AND is_cancel = 0
AND scan_source = '1'
ORDER BY dis_date ASC
LIMIT ${offset},${limit}
</select>
<select id="getTbasicByAdmissId" resultType="com.docus.demo.entity.Tbasic">
select patient_id,
ph,
@ -251,4 +272,5 @@
</select>
</mapper>
Loading…
Cancel
Save