From 2e35ec2d2d8a333998d1d0ad6436cac4410f47a8 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Mon, 11 Mar 2024 15:34:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=8C=82=E5=90=8D=E5=8C=BB=E5=98=B1?= =?UTF-8?q?=E5=BA=8F=E5=8F=B7=E5=90=8C=E6=AD=A5job=E5=92=8C=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MmRySyncController.java | 71 +++++++++ .../docus/server/archive/entity/TBasic.java | 73 ++++++++++ .../archive/job/MmRyOrderIndexSyncJob.java | 136 ++++++++++++++++++ .../server/archive/mapper/TBasicMapper.java | 13 ++ .../controller/ManualFunctionController.java | 2 +- src/main/resources/mapper/TBasicMapper.xml | 18 +++ 6 files changed, 312 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/docus/server/archive/controller/MmRySyncController.java create mode 100644 src/main/java/com/docus/server/archive/entity/TBasic.java create mode 100644 src/main/java/com/docus/server/archive/job/MmRyOrderIndexSyncJob.java diff --git a/src/main/java/com/docus/server/archive/controller/MmRySyncController.java b/src/main/java/com/docus/server/archive/controller/MmRySyncController.java new file mode 100644 index 0000000..a046a0c --- /dev/null +++ b/src/main/java/com/docus/server/archive/controller/MmRySyncController.java @@ -0,0 +1,71 @@ +package com.docus.server.archive.controller; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.job.MmRyOrderIndexSyncJob; +import com.docus.server.archive.mapper.TBasicMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * @author YongBin Wen + * @date 2024/3/8 15:21 + */ +@Slf4j +@RequestMapping("/mmry-collect") +@Api(tags = "茂名人医同步接口") +@RestController +public class MmRySyncController { + @Resource + private MmRyOrderIndexSyncJob orderIndexSyncJob; + + @ApiOperation(value = "根据时间进行同步医嘱序号 yyyy-MM-dd HH:mm:ss") + @GetMapping("/sync/orderIndex") + public CommonResult syncOrderIndex(@RequestParam("dateTime") String dateTime) { + String pattern = "yyyy-MM-dd HH:mm:ss"; + int patternLen = pattern.length(); + if (dateTime.length() != patternLen) { + return CommonResult.failed("请传入正确的时间格式 yyyy-MM-dd HH:mm:ss"); + } + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + try { + sdf.parse(dateTime); + } catch (Exception ex) { + return CommonResult.failed("请传入正确的时间格式 yyyy-MM-dd HH:mm:ss"); + } + TBasicMapper tBasicMapper = orderIndexSyncJob.gettBasicMapper(); + int offset = 0; + int size = 100; + int total = 0; + try { + while (true) { + List tBasicList = tBasicMapper.getBasicByDate(dateTime, offset, size); + int basicSize = tBasicList.size(); + total += basicSize; + if (basicSize == 0) { + break; + } + for (TBasic basic : tBasicList) { + orderIndexSyncJob.mmRyOrderIndexSync(basic); + } + offset += size; + } + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return CommonResult.success("同步失败"); + } + + return CommonResult.success("同步完成,共同步患者条数:" + total); + } + + +} diff --git a/src/main/java/com/docus/server/archive/entity/TBasic.java b/src/main/java/com/docus/server/archive/entity/TBasic.java new file mode 100644 index 0000000..4232cbf --- /dev/null +++ b/src/main/java/com/docus/server/archive/entity/TBasic.java @@ -0,0 +1,73 @@ +package com.docus.server.archive.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 病案基本信息 + *

+ * + * @author jiashi + * @since 2021-04-14 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "TBasic对象", description = "病案基本信息") +public class TBasic implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "病案主键") + @TableId(value = "patient_id", type = IdType.ASSIGN_ID) + private String patientId; + + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + + @ApiModelProperty(value = "病案号") + private String inpatientNo; + + + @ApiModelProperty(value = "患者姓名") + private String name; + + @ApiModelProperty(value = "身份证") + private String idCard; + + @ApiModelProperty(value = "住院日期") + private Date admissDate; + + @ApiModelProperty(value = "住院科室") + private String admissDept; + + @ApiModelProperty(value = "住院科室名称") + private String admissDeptName; + + @ApiModelProperty(value = "出院日期") + private Date disDate; + + @ApiModelProperty(value = "出院科室") + private String disDept; + + @ApiModelProperty(value = "出院科室名称") + private String disDeptName; + + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + @ApiModelProperty(value = "文件来源 1:af_archive_detail,2:t_scan_assort") + private Integer fileSource; + +} diff --git a/src/main/java/com/docus/server/archive/job/MmRyOrderIndexSyncJob.java b/src/main/java/com/docus/server/archive/job/MmRyOrderIndexSyncJob.java new file mode 100644 index 0000000..67e6399 --- /dev/null +++ b/src/main/java/com/docus/server/archive/job/MmRyOrderIndexSyncJob.java @@ -0,0 +1,136 @@ +package com.docus.server.archive.job; + +import com.docus.core.util.Func; +import com.docus.infrastructure.core.utils.TableJsonRead; +import com.docus.server.archive.entity.TBasic; +import com.docus.server.archive.mapper.TBasicMapper; +import com.docus.server.trusthis.mapper.JsOrdersMapper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * 茂名人医医嘱序号同步 + * + * @author YongBin Wen + * @date 2024/3/11 8:59 + */ +@Slf4j +@Component +public class MmRyOrderIndexSyncJob { + + private TBasicMapper tBasicMapper; + + private JsOrdersMapper jsOrdersMapper; + + @Autowired + public MmRyOrderIndexSyncJob(TBasicMapper tBasicMapper, JsOrdersMapper jsOrdersMapper) { + this.tBasicMapper = tBasicMapper; + this.jsOrdersMapper = jsOrdersMapper; + } + + public TBasicMapper gettBasicMapper() { + return tBasicMapper; + } + + public JsOrdersMapper getJsOrdersMapper() { + return jsOrdersMapper; + } + + @XxlJob("MmRyOrderIndexSyncJob") + public void mmRyOrderIndexSyncJob() { + LocalDateTime now = LocalDateTime.now(); + String configPath = "data-config"; + String configFileName = "order-index-config"; + TableJsonRead jsonRead = new TableJsonRead(); + MmRyOrderIndexSyncJobConfig config = jsonRead.Read(configPath, configFileName, MmRyOrderIndexSyncJobConfig.class); + if (Objects.isNull(config)) { + config = new MmRyOrderIndexSyncJobConfig(); + LocalDateTime dateTime = now.plusDays(-config.getDay()); + config.setDateTime(Func.formatDateTime(dateTime)); + } + + int currentSyncCount = 0; + try { + while (true) { + List tBasicList = tBasicMapper.getBasicByDate(config.getDateTime(), config.getOffset(), config.getSize()); + int basicSize = tBasicList.size(); + log.info("========== 茂名人医,根据日期同步医嘱序号JOB,日期:{} limit {},{} 查询基础数据{}条 ==========", config.getDateTime(), config.getOffset(), config.getSize(), basicSize); + currentSyncCount += basicSize; + if (basicSize == 0) { + log.info("========== 茂名人医,根据日期同步医嘱序号JOB,日期:{} 同步基础数据 {} 条 ,JOB 结束==========", config.getDateTime(), currentSyncCount); + config.setOffset(0); + config.setDateTime(Func.formatDateTime(now)); + jsonRead.Save(configPath, configFileName, Func.toJson(config)); + return; + } + for (TBasic basic : tBasicList) { + mmRyOrderIndexSync(basic); + } + config.setOffset(config.getOffset() + config.getSize()); + } + } catch (Exception ex) { + log.error("茂名人医,根据日期同步医嘱序号JOB,日期:" + config.getDateTime() + " 发生错误," + ex.getMessage(), ex); + } + + + } + + public void mmRyOrderIndexSync(TBasic basic) { + Date disDate = basic.getDisDate(); + String inpatientNo = basic.getInpatientNo(); + String date = Func.formatDate(disDate); + List orderIndex = jsOrdersMapper.getOrderIndex(inpatientNo, date, date); + log.info("茂名人医,同步医嘱序号,病案号:{},出院日期:{},同步医嘱序号为:{} ,病案主键:{}", inpatientNo, date, orderIndex,basic.getPatientId()); + if (Func.isNotEmpty(orderIndex)) { + tBasicMapper.updateOrderIndex(basic.getPatientId(),String.join(",",orderIndex)); + } + } + + private static class MmRyOrderIndexSyncJobConfig { + private String dateTime; + private int day = 7; + private int offset = 0; + private int size = 100; + + public String getDateTime() { + return dateTime; + } + + public void setDateTime(String dateTime) { + this.dateTime = dateTime; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getDay() { + return day; + } + + public void setDay(int day) { + this.day = day; + } + } + + +} diff --git a/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java b/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java index 965d0a7..d68a55e 100644 --- a/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java +++ b/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java @@ -1,9 +1,22 @@ package com.docus.server.archive.mapper; +import com.docus.server.archive.entity.TBasic; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; @Mapper public interface TBasicMapper { + /** + * 根据时间查询患者基础信息 + * 会查询 出院时间大于等于条件 或者 数据 插入 时间大于等于条件 ,已出院的并且为质控的患者 + * @date 2024/3/11 8:48 + * @author YongBin Wen + * @return 基础信息 + */ + List getBasicByDate(@Param("dateTime") String dateTime, @Param("offset") long offset,@Param("size") long size); + int updateOrderIndex(@Param("patientId") String patientId, @Param("orderIndex") String orderIndex); } diff --git a/src/main/java/com/docus/server/trusthis/controller/ManualFunctionController.java b/src/main/java/com/docus/server/trusthis/controller/ManualFunctionController.java index 7771b5b..0e89122 100644 --- a/src/main/java/com/docus/server/trusthis/controller/ManualFunctionController.java +++ b/src/main/java/com/docus/server/trusthis/controller/ManualFunctionController.java @@ -41,7 +41,7 @@ public class ManualFunctionController { if (admissionOrDisDate.length() != patternLen || disDate.length() != patternLen) { return CommonResult.failed("请传入正确的时间格式 yyyy-MM-dd"); } - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf = new SimpleDateFormat(pattern); try { sdf.parse(admissionOrDisDate); sdf.parse(disDate); diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml index 8b84532..c35b185 100644 --- a/src/main/resources/mapper/TBasicMapper.xml +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -3,5 +3,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + patient_id,inpatient_no,admiss_times,name,id_card,admiss_date,admiss_dept,admiss_dept_name,dis_date,dis_dept,dis_dept_name,create_time,update_time,file_source + + + update docus_medicalrecord.t_basic set order_index = #{orderIndex} where patient_id = #{patientId} + +