diff --git a/data-config/job-config/GzZxyJhQcPatientInfoSyncJob.json b/data-config/job-config/GzZxyJhQcPatientInfoSyncJob.json new file mode 100644 index 0000000..fdcdda0 --- /dev/null +++ b/data-config/job-config/GzZxyJhQcPatientInfoSyncJob.json @@ -0,0 +1,8 @@ +{ + "startDate": "2024-08-21", + "errorDays": 30, + "url": "http://192.168.12.121:3000/ws/service?wsdl", + "namespaceUri": "http://ws.sie.com", + "operationName": "service", + "param": "flow=HIS_SQL_IN_PATIENT_01,app=JS_MR_DOC" +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/archive/converter/GzZxyJhPatientInfoConverter.java b/src/main/java/com/docus/server/archive/converter/GzZxyJhPatientInfoConverter.java new file mode 100644 index 0000000..c3ea183 --- /dev/null +++ b/src/main/java/com/docus/server/archive/converter/GzZxyJhPatientInfoConverter.java @@ -0,0 +1,72 @@ +package com.docus.server.archive.converter; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.utils.PinYinUtil; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author YongBin Wen + * @date 2024/8/23 11:03 + */ +public class GzZxyJhPatientInfoConverter { + public static List convertTbasic(String result) { + List parseArray = JSONArray.parseArray(result, JSONObject.class); + List tBasicList = new ArrayList<>(); + for (JSONObject jsonObject : parseArray) { + String jzh = jsonObject.getString("INPATIENT_NO"); + if (StrUtil.isBlank(jzh)) { + continue; + } + String inpatientNo = jsonObject.getString("PATIENT_NO"); + String name = jsonObject.getString("NAME"); + Integer admissTimes = jsonObject.getInteger("IN_TIMES"); + String idCard = jsonObject.getString("IDENNO"); + Date admissDate = jsonObject.getDate("IN_DATE"); + String admissDept = jsonObject.getString("IN_DEPT_CODE"); + String admissDeptName = jsonObject.getString("IN_DEPT_NAME"); + Date disDate = jsonObject.getDate("OUT_DATE"); + String disDept = jsonObject.getString("OUT_DEPT_CODE"); + String disDeptName = jsonObject.getString("OUT_DEPT_NAME"); + String groundingNo = jsonObject.getString("CASE_LIST_NO"); + String attending = jsonObject.getString("HOUSE_DOC_CODE"); + String attendingName = jsonObject.getString("HOUSE_DOC_NAME"); + String sexName = jsonObject.getString("SEX_NAME"); + String bedNo = jsonObject.getString("BED_NO"); + String zgName = jsonObject.getString("ZG_NAME"); + String linkmanTel = jsonObject.getString("LINKMAN_TEL"); + + TBasic tBasic = new TBasic(); + tBasic.setJzh(jzh); + tBasic.setInpatientNo(inpatientNo); + tBasic.setName(name); + tBasic.setNameSpell(PinYinUtil.getFirstSpell(name)); + tBasic.setAdmissTimes(admissTimes); + tBasic.setIdCard(idCard); + tBasic.setAdmissDate(admissDate); + tBasic.setAdmissDept(admissDept); + tBasic.setAdmissDeptName(admissDeptName); + tBasic.setDisDate(disDate); + tBasic.setDisDept(disDept); + tBasic.setDisDeptName(disDeptName); + tBasic.setGroundingNo(groundingNo); + tBasic.setAttending(attending); + tBasic.setAttendingName(attendingName); + tBasic.setSexName(sexName); + tBasic.setSex("男".equals(sexName) ? "1" : "2"); + tBasic.setBedNo(bedNo); + tBasic.setIsDead("死亡".equals(zgName) ? 1 : 0); + tBasic.setTelphone(linkmanTel); + tBasicList.add(tBasic); + } + return tBasicList; + + } + + +} diff --git a/src/main/java/com/docus/server/archive/entity/TBasic.java b/src/main/java/com/docus/server/archive/entity/TBasic.java index fc6016a..06c1cc7 100644 --- a/src/main/java/com/docus/server/archive/entity/TBasic.java +++ b/src/main/java/com/docus/server/archive/entity/TBasic.java @@ -118,4 +118,7 @@ public class TBasic implements Serializable { @ApiModelProperty(value = "离院方式代码") private Integer leaveMethod; + + @ApiModelProperty(value = "上架号") + private String groundingNo; } diff --git a/src/main/java/com/docus/server/archive/job/PatientInfoSyncJob.java b/src/main/java/com/docus/server/archive/job/PatientInfoSyncJob.java index 67003b3..78b6b41 100644 --- a/src/main/java/com/docus/server/archive/job/PatientInfoSyncJob.java +++ b/src/main/java/com/docus/server/archive/job/PatientInfoSyncJob.java @@ -1,5 +1,6 @@ package com.docus.server.archive.job; +import com.alibaba.fastjson.JSONObject; import com.docus.core.util.DateUtil; import com.docus.core.util.Func; import com.docus.infrastructure.core.utils.TableJsonRead; @@ -52,7 +53,7 @@ public class PatientInfoSyncJob { String startDateTimeStr = startDate + " 00:00:00"; String endDateTimeStr = runLocalDate.toString() + " 23:59:59"; try { - patientInfoSyncService.syncByModifyTime(Func.parseDateTime(startDateTimeStr), Func.parseDateTime(endDateTimeStr)); + patientInfoSyncService.syncByModifyTimeRange(Func.parseDateTime(startDateTimeStr), Func.parseDateTime(endDateTimeStr)); log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> {} 患者基础数据按照最后修改时间 {} ,{} 同步结束了!", syncServicePrefix, startDateTimeStr, endDateTimeStr); // 下次同步则开始多同步一天,防止时间差引起同步缺漏 例如 10分钟同步一次 导致 23:50:01 出院未同步到 String nexRunStartDate = runLocalDate.plusDays(-1).toString(); @@ -82,18 +83,56 @@ public class PatientInfoSyncJob { syncJobConfig = PatientInfoSyncJobConfig.checkAndInit(syncJobConfig); String cyrqStart = syncJobConfig.getCyrqStart(); String startTime = syncJobConfig.getStartTime(); - String now = DateUtil.format(DateUtil.now(),DateUtil.PATTERN_DATETIME); + String now = DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATETIME); try { - patientInfoSyncService.syncByModifyTimeAndCyrq(cyrqStart,startTime); + patientInfoSyncService.syncByModifyTimeAndCyrq(cyrqStart, startTime); log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> {} 患者基础数据按照最后修改时间 {} 同步结束了!", syncServicePrefix, startTime); syncJobConfig.setStartTime(now); jsonReader.Save(jobConfigPath, jobConfigName, Func.toJson(syncJobConfig)); } catch (Exception ex) { - log.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " + syncServicePrefix + " 患者基础数据按照最后修改时间 " + startTime + " 出现异常!" + ex.getMessage(), ex); + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " + syncServicePrefix + " 患者基础数据按照最后修改时间 " + startTime + " 出现异常!" + ex.getMessage(), ex); } } + /** + * 广州中西医结合医院质控患者信息同步job + * + * @date 2024/8/23 10:21 + * @author YongBin Wen + */ + @XxlJob("GzZxyJhQcPatientInfoSyncJob") + public void gzZxyJhQcPatientInfoSyncJob() { + String syncServicePrefix = "gzzxyjhqc"; + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> {} 患者基础数据按照出院日期,ws接口同步开始了!", syncServicePrefix); + String serviceName = syncServicePrefix + SyncConstant.PATIENT_INFO_SYNC_SERVICE_SUFFIX; + PatientInfoSyncService patientInfoSyncService = patientInfoSyncServiceMap.get(serviceName); + if (patientInfoSyncService == null) { + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 患者基础数据同步服务 {} 未找到!", serviceName); + return; + } + + String jobConfigPath = "data-config\\job-config"; + String jobConfigName = "GzZxyJhQcPatientInfoSyncJob.json"; + TableJsonRead jsonReader = new TableJsonRead(); + JSONObject syncJobConfig = jsonReader.Read(jobConfigPath, jobConfigName, JSONObject.class); + String startDateStr = syncJobConfig.getString("startDate"); + // 出院日期存在误差天数,因为不是按照修改时间 + int errorDays = syncJobConfig.getIntValue("errorDays"); + LocalDate startDate = Func.parseDate(startDateStr); + LocalDate endDate = LocalDate.now(); + try { + patientInfoSyncService.syncByDisDateRange(startDate, endDate); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> {} 患者基础数据按照出院日期 {} 开始,同步结束了!", syncServicePrefix, startDateStr); + syncJobConfig.put("startDate", endDate.plusDays(-errorDays).toString()); + jsonReader.Save(jobConfigPath, jobConfigName, Func.toJson(syncJobConfig)); + } catch (Exception ex) { + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " + syncServicePrefix + " 患者基础数据按照出院日期 " + startDateStr + " 出现异常!" + ex.getMessage(), ex); + } + + + } + private static class PatientInfoSyncJobConfig { private String startDate; diff --git a/src/main/java/com/docus/server/archive/rpc/GzZxyJhBasicDataService.java b/src/main/java/com/docus/server/archive/rpc/GzZxyJhBasicDataService.java new file mode 100644 index 0000000..8cd7eb1 --- /dev/null +++ b/src/main/java/com/docus/server/archive/rpc/GzZxyJhBasicDataService.java @@ -0,0 +1,11 @@ +package com.docus.server.archive.rpc; + +import com.docus.server.archive.rpc.dto.HisSqlInPatient01Dto; + +/** + * @author YongBin Wen + * @date 2024/8/23 13:58 + */ +public interface GzZxyJhBasicDataService { + String getHisSqlInPatient01(HisSqlInPatient01Dto hisSqlInPatient01Dto); +} diff --git a/src/main/java/com/docus/server/archive/rpc/dto/HisSqlInPatient01Dto.java b/src/main/java/com/docus/server/archive/rpc/dto/HisSqlInPatient01Dto.java new file mode 100644 index 0000000..1f93afb --- /dev/null +++ b/src/main/java/com/docus/server/archive/rpc/dto/HisSqlInPatient01Dto.java @@ -0,0 +1,20 @@ +package com.docus.server.archive.rpc.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author YongBin Wen + * @date 2024/8/23 14:03 + */ +@Data +public class HisSqlInPatient01Dto { + @JSONField(name = "PATIENT_NO") + private String PATIENT_NO; + @JSONField(name = "BEGIN_TIME") + private String BEGIN_TIME; + @JSONField(name = "END_TIME") + private String END_TIME; + + +} diff --git a/src/main/java/com/docus/server/archive/rpc/impl/GzZxyJhBasicDataServiceImpl.java b/src/main/java/com/docus/server/archive/rpc/impl/GzZxyJhBasicDataServiceImpl.java new file mode 100644 index 0000000..3560bdc --- /dev/null +++ b/src/main/java/com/docus/server/archive/rpc/impl/GzZxyJhBasicDataServiceImpl.java @@ -0,0 +1,35 @@ +package com.docus.server.archive.rpc.impl; + +import com.alibaba.fastjson.JSONObject; +import com.docus.infrastructure.core.utils.TableJsonRead; +import com.docus.server.archive.rpc.GzZxyJhBasicDataService; +import com.docus.server.archive.rpc.dto.HisSqlInPatient01Dto; +import com.docus.server.archive.utils.JaxWsDynamicClientUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author YongBin Wen + * @date 2024/8/23 13:58 + */ +@Component +@Slf4j +public class GzZxyJhBasicDataServiceImpl implements GzZxyJhBasicDataService { + + @Override + public String getHisSqlInPatient01(HisSqlInPatient01Dto hisSqlInPatient01Dto) { + String jobConfigPath = "data-config\\job-config"; + String jobConfigName = "GzZxyJhQcPatientInfoSyncJob.json"; + TableJsonRead jsonReader = new TableJsonRead(); + JSONObject syncJobConfig = jsonReader.Read(jobConfigPath, jobConfigName, JSONObject.class); + String url = syncJobConfig.getString("url"); + String namespaceUri = syncJobConfig.getString("namespaceUri"); + String operationName = syncJobConfig.getString("operationName"); + String param1 = syncJobConfig.getString("param"); + String param2 = JSONObject.toJSONString(hisSqlInPatient01Dto); + String[] params = {param1, param2}; + String result = JaxWsDynamicClientUtil.send(url, namespaceUri, operationName, params); + log.info("广州中西医结合查询基础数据参数 {} 获取数据:{}", param2, result); + return result; + } +} diff --git a/src/main/java/com/docus/server/archive/service/PatientInfoSyncService.java b/src/main/java/com/docus/server/archive/service/PatientInfoSyncService.java index d656d86..d97624b 100644 --- a/src/main/java/com/docus/server/archive/service/PatientInfoSyncService.java +++ b/src/main/java/com/docus/server/archive/service/PatientInfoSyncService.java @@ -1,5 +1,6 @@ package com.docus.server.archive.service; +import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -8,14 +9,14 @@ import java.time.LocalDateTime; */ public interface PatientInfoSyncService { /** - * 根据出院时间同步 + * 根据出院时间范围同步 * * @param start 开始时间 * @param end 结束日期 * @date 2024/5/23 15:33 * @author YongBin Wen */ - void syncByDisDate(LocalDateTime start, LocalDateTime end); + void syncByDisDateRange(LocalDate start, LocalDate end); /** * 根据最后修改时间同步 @@ -25,7 +26,7 @@ public interface PatientInfoSyncService { * @date 2024/5/23 15:35 * @author YongBin Wen */ - void syncByModifyTime(LocalDateTime start, LocalDateTime end); + void syncByModifyTimeRange(LocalDateTime start, LocalDateTime end); /** * 根据最后修改时间和出院开始时间同步 diff --git a/src/main/java/com/docus/server/archive/service/impl/GzZxyJhQcPatientInfoSyncServiceImpl.java b/src/main/java/com/docus/server/archive/service/impl/GzZxyJhQcPatientInfoSyncServiceImpl.java new file mode 100644 index 0000000..b97c26b --- /dev/null +++ b/src/main/java/com/docus/server/archive/service/impl/GzZxyJhQcPatientInfoSyncServiceImpl.java @@ -0,0 +1,158 @@ +package com.docus.server.archive.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.core.exception.BaseException; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.archive.constans.SyncConstant; +import com.docus.server.archive.converter.GzZxyJhPatientInfoConverter; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.mapper.TBasicMapper; +import com.docus.server.archive.rpc.GzZxyJhBasicDataService; +import com.docus.server.archive.rpc.dto.HisSqlInPatient01Dto; +import com.docus.server.archive.service.PatientInfoSyncService; +import com.docus.server.archive.utils.MethodRetryUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 广州中西医结合医院质控患者基础数据同步 + * + * @author YongBin Wen + * @date 2024/8/23 10:56 + */ +@Service("gzzxyjhqc" + SyncConstant.PATIENT_INFO_SYNC_SERVICE_SUFFIX) +@Slf4j +public class GzZxyJhQcPatientInfoSyncServiceImpl implements PatientInfoSyncService { + @Resource + private TBasicMapper tBasicMapper; + + @Resource + private IdService idService; + + @Resource + private GzZxyJhBasicDataService gzZxyJhBasicDataService; + + + @Override + public void syncByDisDateRange(LocalDate start, LocalDate end) { + LocalDate startDate = start; + LocalDate endDate = end; + String endDateStr = end.toString(); + String startDateStr = start.toString(); + int everyDayRetries = 20; + while (endDate.isBefore(startDate)) { + // 同步与重试 + String dateStr = startDate.toString(); + try { + syncByDisDate(startDate); + } catch (Exception ex) { + log.info("广州中西医结合同步质控患者,出院日期:" + dateStr + " 出错了,进行 " + everyDayRetries + "次重试," + ex.getMessage(), ex); + boolean retryStatus = MethodRetryUtil.retry(this::syncByDisDate, startDate, everyDayRetries, 500); + if (!retryStatus) { + throw new BaseException("广州中西医结合同步质控患者,出院日期:" + dateStr + ",多次(" + everyDayRetries + ")重试失败了!"); + } + } + + startDate = startDate.plusDays(1); + } + + } + + + @Override + public void syncByModifyTimeRange(LocalDateTime start, LocalDateTime end) { + log.error("广州中西医结合医院未开发按照视图最后修改时间同步患者基础数据!"); + } + + @Override + public void syncByModifyTimeAndCyrq(String cyrqStart, String startTime) { + log.error("广州中西医结合医院未开发按照出院时间和最后修改时间同步患者基础数据!"); + } + + + private void syncByDisDate(LocalDate date) { + HisSqlInPatient01Dto hisSqlInPatient01Dto = new HisSqlInPatient01Dto(); + hisSqlInPatient01Dto.setBEGIN_TIME(date + " 00:00:00"); + hisSqlInPatient01Dto.setEND_TIME(date + " 23:59:59"); + String result = gzZxyJhBasicDataService.getHisSqlInPatient01(hisSqlInPatient01Dto); + List tBasicList = GzZxyJhPatientInfoConverter.convertTbasic(result); + // 因为扫描也同步了一套,为了区分,修改为jzh_1 + for (TBasic tBasic : tBasicList) { + String jzh = tBasic.getJzh(); + tBasic.setJzh(jzh + "_1"); + tBasic.setFileSource(1); + } + saveOrUpdate(tBasicList); + } + + + /** + * @param iuBasicList 修改的患者基础信息 + */ + private void saveOrUpdate(List iuBasicList) { + Date nowDate = new Date(); + List iuJzhList = iuBasicList.stream() + .map(TBasic::getJzh) + .collect(Collectors.toList()); + List existsBasicList = tBasicMapper.getByJzh(iuJzhList); + Map existsJzhBasicMap = existsBasicList.stream().collect(Collectors.toMap(TBasic::getJzh, Function.identity())); + List insertBasicList = new ArrayList<>(); + List updateBasicList = new ArrayList<>(); + + for (TBasic iuBasic : iuBasicList) { + if (existsJzhBasicMap.containsKey(iuBasic.getJzh())) { + TBasic tBasic = existsJzhBasicMap.get(iuBasic.getJzh()); + tBasic.setName(iuBasic.getName()); + tBasic.setInpatientNo(iuBasic.getInpatientNo()); + tBasic.setAdmissTimes(iuBasic.getAdmissTimes()); + tBasic.setSex(iuBasic.getSex()); + tBasic.setSexName(iuBasic.getSexName()); + tBasic.setNameSpell(iuBasic.getNameSpell()); + tBasic.setJzh(iuBasic.getJzh()); + tBasic.setAdmissDate(iuBasic.getAdmissDate()); + tBasic.setAdmissDept(iuBasic.getAdmissDept()); + tBasic.setAdmissDeptName(iuBasic.getAdmissDeptName()); + tBasic.setBedNo(iuBasic.getBedNo()); + tBasic.setAttending(iuBasic.getAttending()); + tBasic.setAttendingName(iuBasic.getAttendingName()); + tBasic.setAge(iuBasic.getAge()); + tBasic.setAgeMonth(iuBasic.getAgeMonth()); + tBasic.setAgeDay(iuBasic.getAgeDay()); + tBasic.setIdCard(iuBasic.getIdCard()); + tBasic.setTelphone(iuBasic.getTelphone()); + tBasic.setDisDate(iuBasic.getDisDate()); + tBasic.setDisDept(iuBasic.getDisDept()); + tBasic.setDisDeptName(iuBasic.getDisDeptName()); + tBasic.setIsDead(iuBasic.getIsDead()); + tBasic.setTotalCost(iuBasic.getTotalCost()); + tBasic.setFileSource(iuBasic.getFileSource()); + tBasic.setGroundingNo(iuBasic.getGroundingNo()); + tBasic.setUpdateTime(nowDate); + updateBasicList.add(tBasic); + continue; + } + iuBasic.setPatientId(String.valueOf(idService.getDateSeq())); + iuBasic.setCreateTime(nowDate); + iuBasic.setUpdateTime(nowDate); + insertBasicList.add(iuBasic); + } + + if (Func.isNotEmpty(insertBasicList)) { + tBasicMapper.insertBatch(insertBasicList); + } + if (Func.isNotEmpty(updateBasicList)) { + tBasicMapper.updateBatch(updateBasicList); + } + + } +} diff --git a/src/main/java/com/docus/server/archive/service/impl/MzsyPatientInfoSyncServiceImpl.java b/src/main/java/com/docus/server/archive/service/impl/MzsyPatientInfoSyncServiceImpl.java index 4c54ddb..e027ae4 100644 --- a/src/main/java/com/docus/server/archive/service/impl/MzsyPatientInfoSyncServiceImpl.java +++ b/src/main/java/com/docus/server/archive/service/impl/MzsyPatientInfoSyncServiceImpl.java @@ -14,11 +14,14 @@ import com.docus.server.mzsy.entity.MzsyPatientInfoView; import com.docus.server.mzsy.mapper.MzsyPatientInfoViewMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -36,12 +39,12 @@ public class MzsyPatientInfoSyncServiceImpl implements PatientInfoSyncService { private PowerUserMapper powerUserMapper; @Override - public void syncByDisDate(LocalDateTime start, LocalDateTime end) { + public void syncByDisDateRange(LocalDate start, LocalDate end) { log.error("梅州三院未开发按照出院时间同步患者基础数据!"); } @Override - public void syncByModifyTime(LocalDateTime start, LocalDateTime end) { + public void syncByModifyTimeRange(LocalDateTime start, LocalDateTime end) { log.error("梅州三院未开发按照修改时间同步患者基础数据!"); } diff --git a/src/main/java/com/docus/server/archive/service/impl/ZqDyRyPatientInfoSyncServiceImpl.java b/src/main/java/com/docus/server/archive/service/impl/ZqDyRyPatientInfoSyncServiceImpl.java index 9361a9d..9491f98 100644 --- a/src/main/java/com/docus/server/archive/service/impl/ZqDyRyPatientInfoSyncServiceImpl.java +++ b/src/main/java/com/docus/server/archive/service/impl/ZqDyRyPatientInfoSyncServiceImpl.java @@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; @@ -33,12 +34,12 @@ public class ZqDyRyPatientInfoSyncServiceImpl implements PatientInfoSyncService private IdService idService; @Override - public void syncByDisDate(LocalDateTime start, LocalDateTime end) { + public void syncByDisDateRange(LocalDate start, LocalDate end) { log.error("肇庆第一人民医院未开发按照出院时间同步患者基础数据!"); } @Override - public void syncByModifyTime(LocalDateTime start, LocalDateTime end) { + public void syncByModifyTimeRange(LocalDateTime start, LocalDateTime end) { String startDateTime = Func.formatDateTime(start); String endDateTime = Func.formatDateTime(end); int size = 1000; diff --git a/src/main/java/com/docus/server/archive/utils/MethodRetryUtil.java b/src/main/java/com/docus/server/archive/utils/MethodRetryUtil.java new file mode 100644 index 0000000..e7571ff --- /dev/null +++ b/src/main/java/com/docus/server/archive/utils/MethodRetryUtil.java @@ -0,0 +1,47 @@ +package com.docus.server.archive.utils; + +import com.docus.infrastructure.core.exception.BaseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; + +/** + * @author YongBin Wen + * @date 2024/8/23 11:35 + */ +public class MethodRetryUtil { + private final static Logger logger = LoggerFactory.getLogger(MethodRetryUtil.class); + + public static boolean retry(Consumer consumer, T param, int retries, int timeoutMillis) { + if (retries <= 0) { + throw new BaseException("重试次数需要大于0"); + } + for (int i = 1; i <= retries; i++) { + try { + consumer.accept(param); + logger.info("重试操作成功,进行了 {} 次重试",i); + return true; + } catch (Exception rex) { + logger.error("重试操作失败,尝试第" + (i + 1) + "次重试," + rex.getMessage(), rex); + try { + TimeUnit.MILLISECONDS.sleep(timeoutMillis); + } catch (InterruptedException exc) { + Thread.currentThread().interrupt(); + return false; + } + } + } + return false; + } + + public static void main(String[] args) { + AtomicInteger i=new AtomicInteger(-1); + System.out.println(retry(n -> { + System.out.println(2 / n); + }, 0, 10, 500)); + + } +} diff --git a/src/main/java/com/docus/server/archive/utils/PinYinUtil.java b/src/main/java/com/docus/server/archive/utils/PinYinUtil.java index a9895dc..e14d265 100644 --- a/src/main/java/com/docus/server/archive/utils/PinYinUtil.java +++ b/src/main/java/com/docus/server/archive/utils/PinYinUtil.java @@ -48,26 +48,31 @@ public class PinYinUtil { * @return 汉语拼音首字母 */ public static String getFirstSpell(String chinese) { - StringBuffer pybf = new StringBuffer(); - char[] arr = chinese.toCharArray(); - HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); - defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); - defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); - for (int i = 0; i < arr.length; i++) { - if (arr[i] > 128) { - try { - String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat); - if (temp != null) { - pybf.append(temp[0].charAt(0)); + try { + StringBuffer pybf = new StringBuffer(); + char[] arr = chinese.toCharArray(); + HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); + defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); + defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); + for (int i = 0; i < arr.length; i++) { + if (arr[i] > 128) { + try { + String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat); + if (temp != null) { + pybf.append(temp[0].charAt(0)); + } + } catch (BadHanyuPinyinOutputFormatCombination e) { + e.printStackTrace(); } - } catch (BadHanyuPinyinOutputFormatCombination e) { - e.printStackTrace(); + } else { + pybf.append(arr[i]); } - } else { - pybf.append(arr[i]); } + return pybf.toString().replaceAll("\\W", "").trim(); + }catch (Exception ex){ + return null; } - return pybf.toString().replaceAll("\\W", "").trim(); + } public static void main(String[] args) { diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml index eae7c43..6a6d446 100644 --- a/src/main/resources/mapper/TBasicMapper.xml +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -12,7 +12,7 @@ `attending`, `attending_name`, `is_dead`,`file_source`, `jzh`,`bed_no`, `jz_card_no`, `total_cost`, - `create_time`, `update_time`,`admiss_days`) VALUES + `create_time`, `update_time`,`admiss_days`,`grounding_no`) VALUES ( #{basic.patientId},#{basic.admissTimes},#{basic.inpatientNo},#{basic.name},#{basic.nameSpell}, @@ -22,7 +22,7 @@ #{basic.attending},#{basic.attendingName}, #{basic.isDead},#{basic.fileSource}, #{basic.jzh},#{basic.bedNo},#{basic.jzCardNo},#{basic.totalCost}, - #{basic.createTime},#{basic.updateTime},#{basic.admissDays} + #{basic.createTime},#{basic.updateTime},#{basic.admissDays,#{basic.groundingNo} ) @@ -37,8 +37,7 @@ `attending`= #{basic.attending}, `attending_name`=#{basic.attendingName}, `is_dead`=#{basic.isDead},`file_source`=#{basic.fileSource}, `jzh`= #{basic.jzh},`bed_no`=#{basic.bedNo}, `jz_card_no`=#{basic.jzCardNo}, `total_cost`=#{basic.totalCost}, - `create_time`= #{basic.createTime}, `update_time`=#{basic.updateTime}, - `admiss_days`=#{basic.admissDays} + `create_time`= #{basic.createTime}, `update_time`=#{basic.updateTime},`admiss_days`=#{basic.admissDays},`grounding_no`==#{basic.groundingNo} WHERE patient_id= #{basic.patientId}; @@ -61,7 +60,7 @@ `attending`, `attending_name`, `is_dead`,`file_source`, `jzh`,`bed_no`, `jz_card_no`, `total_cost`, - `create_time`, `update_time` + `create_time`, `update_time`,`admiss_days`,`basic.groundingNo` from docus_medicalrecord.t_basic where jzh in #{jzh}