feat: 茂名医嘱序号同步job和接口测试

master
wyb 1 year ago
parent f216144cf8
commit 2e35ec2d2d

@ -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<String> 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<TBasic> 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);
}
}

@ -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;
/**
* <p>
*
* </p>
*
* @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;
}

@ -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<TBasic> 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<String> 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;
}
}
}

@ -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<TBasic> getBasicByDate(@Param("dateTime") String dateTime, @Param("offset") long offset,@Param("size") long size);
int updateOrderIndex(@Param("patientId") String patientId, @Param("orderIndex") String orderIndex);
}

@ -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);

@ -3,5 +3,23 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docus.server.archive.mapper.TBasicMapper">
<sql id="tbasic">
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
</sql>
<update id="updateOrderIndex">
update docus_medicalrecord.t_basic set order_index = #{orderIndex} where patient_id = #{patientId}
</update>
<select id="getBasicByDate" resultType="com.docus.server.archive.entity.TBasic">
SELECT <include refid="tbasic"/>
FROM docus_medicalrecord.t_basic
WHERE
file_source = 1
and dis_date is not null
and (
dis_date >= #{dateTime}
or create_time >= #{dateTime}
)
LIMIT ${offset},${size}
</select>
</mapper>

Loading…
Cancel
Save