Sfoglia il codice sorgente

回写his量测数据

malz 1 anno fa
parent
commit
0b07847b4d

+ 5 - 0
pom.xml

@@ -98,6 +98,11 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.16</version>
         </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 -->
+            <version>3.5.0</version>
+        </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>

+ 12 - 0
src/main/java/com/hgwebservice/config/PeriodMarkEnum.java

@@ -57,6 +57,18 @@ public enum PeriodMarkEnum {
         return null;
     }
 
+    public static PeriodMarkEnum getByDesc(String desc) {
+        if(desc == null){
+            return null;
+        }
+        for (PeriodMarkEnum en:PeriodMarkEnum.values()) {
+            if(en.getDesc().equals(desc)){
+                return en;
+            }
+        }
+        return null;
+    }
+
 
     public  static Boolean mealBefore(Integer period, Integer mark){
         PeriodMarkEnum periodMark = getPeriodMark(period, mark);

+ 7 - 1
src/main/java/com/hgwebservice/controller/MeasureController.java

@@ -2,6 +2,7 @@ package com.hgwebservice.controller;
 
 import com.hgwebservice.service.syncCdm2.MeasureService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -11,8 +12,13 @@ import javax.servlet.http.HttpServletRequest;
 public class MeasureController {
     @Autowired
     MeasureService measureService;
-    @RequestMapping({"/measure"})
+    @PostMapping("/hisMeasure")
     public int measure() {
         return measureService.measure();
     }
+
+    @PostMapping("/dmsMeasure")
+    public int dmsMeasure(String startTime,String endTime) {
+        return measureService.dmsMeasure(startTime,endTime);
+    }
 }

+ 2 - 1
src/main/java/com/hgwebservice/dal/mysql/data/DispatchDataMapper.java

@@ -1,9 +1,9 @@
 package com.hgwebservice.dal.mysql.data;
 
 
+import com.baomidou.dynamic.datasource.annotation.Master;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hgwebservice.dal.dataobject.data.DispatchDataDO;
-import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -12,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @author super_admin
  */
 @Mapper
+@Master
 public interface DispatchDataMapper extends BaseMapper<DispatchDataDO> {
 
 }

+ 2 - 0
src/main/java/com/hgwebservice/dal/mysql/data/DispatchInfoMapper.java

@@ -1,6 +1,7 @@
 package com.hgwebservice.dal.mysql.data;
 
 
+import com.baomidou.dynamic.datasource.annotation.Master;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hgwebservice.dal.dataobject.data.DispatchDataDO;
 import com.hgwebservice.dal.dataobject.data.DispatchInfoDO;
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @author super_admin
  */
 @Mapper
+@Master
 public interface DispatchInfoMapper extends BaseMapper<DispatchInfoDO> {
 
 }

+ 21 - 0
src/main/java/com/hgwebservice/dal/mysql/data/DmsMeasureMapper.java

@@ -0,0 +1,21 @@
+package com.hgwebservice.dal.mysql.data;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.dynamic.datasource.annotation.Master;
+import com.baomidou.dynamic.datasource.annotation.Slave;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.hgwebservice.entity.hisview.SyncToHisDO;
+import com.hgwebservice.entity.server.MeasureData;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+@Mapper
+@Slave
+public interface DmsMeasureMapper extends BaseMapper<SyncToHisDO> {
+    List<MeasureData> getMeasureDataByMark(@Param("startTime")DateTime startTime,@Param("endTime")DateTime endTime);
+
+}

+ 17 - 0
src/main/java/com/hgwebservice/dal/mysql/data/HisMeasureDataMapper.java

@@ -0,0 +1,17 @@
+package com.hgwebservice.dal.mysql.data;
+
+import com.baomidou.dynamic.datasource.annotation.Master;
+import com.baomidou.dynamic.datasource.annotation.Slave;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hgwebservice.entity.hisview.HisMeasureData;
+import com.hgwebservice.entity.server.MeasureData;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+@Master
+public interface HisMeasureDataMapper extends BaseMapper<HisMeasureData> {
+
+}

+ 2 - 0
src/main/java/com/hgwebservice/dal/mysql/data/OperatorDataMapper.java

@@ -1,6 +1,7 @@
 package com.hgwebservice.dal.mysql.data;
 
 
+import com.baomidou.dynamic.datasource.annotation.Master;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hgwebservice.dal.dataobject.data.DispatchDataDO;
 import com.hgwebservice.dal.dataobject.data.DispatchInfoDO;
@@ -17,6 +18,7 @@ import java.util.List;
  * @author super_admin
  */
 @Mapper
+@Master
 public interface OperatorDataMapper extends BaseMapper<OperatorDataDO> {
 
     int replaceOperatorData(@Param("list") List<OperatorDataDO> list,@Param("hospitalId")Integer hospitalId);

+ 2 - 0
src/main/java/com/hgwebservice/dal/mysql/data/PatientDataMapper.java

@@ -2,6 +2,7 @@ package com.hgwebservice.dal.mysql.data;
 
 import java.util.*;
 
+import com.baomidou.dynamic.datasource.annotation.Master;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hgwebservice.dal.dataobject.data.PatientDataDO;
 import org.apache.ibatis.annotations.Mapper;
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @author super_admin
  */
 @Mapper
+@Master
 public interface PatientDataMapper extends BaseMapper<PatientDataDO> {
 
 

+ 3 - 0
src/main/java/com/hgwebservice/dal/mysql/data/SyncToHisMapper.java

@@ -1,5 +1,7 @@
 package com.hgwebservice.dal.mysql.data;
 
+import com.baomidou.dynamic.datasource.annotation.Master;
+import com.baomidou.dynamic.datasource.annotation.Slave;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.hgwebservice.entity.hisview.SyncToHisDO;
@@ -8,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
 @Mapper
+@Master
 public interface SyncToHisMapper extends BaseMapper<SyncToHisDO> {
 
    default SyncToHisDO selectByCode(String code, Long tenantId){

+ 88 - 0
src/main/java/com/hgwebservice/entity/hisview/HisMeasureData.java

@@ -0,0 +1,88 @@
+package com.hgwebservice.entity.hisview;
+
+import com.baomidou.dynamic.datasource.annotation.Master;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author guixue
+ * @since 2023-06-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HisMeasureData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String code;
+
+    @TableField("PATIENTCODE")
+    private String patientcode;
+
+    @TableField("PATIENTPHONE")
+    private String patientphone;
+
+    @TableField("PATIENTNAME")
+    private String patientname;
+
+    @TableField("ADMCODE")
+    private String admcode;
+
+    @TableField("TYPE")
+    private String type;
+
+    @TableField("VAL")
+    private String val;
+
+    @TableField("UNIT")
+    private String unit;
+
+    @TableField("TIP")
+    private String tip;
+
+    @TableField("REMARK")
+    private String remark;
+
+    @TableField("MEASURETIME")
+    private String measuretime;
+
+    @TableField("DATAFROM")
+    private String datafrom;
+
+    @TableField("OPERATORCODE")
+    private String operatorcode;
+
+    @TableField("OPERATORNAME")
+    private String operatorname;
+
+    @TableField("VALIDFLAG")
+    private Integer validflag;
+
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @TableField("UPDATETIME")
+    private Date updatetime;
+
+    private Long hospitalId;
+
+    @TableField("HOSPITALCODE")
+    private String hospitalcode;
+
+    @TableField("PERIOD")
+    private String period;
+
+}

+ 14 - 3
src/main/java/com/hgwebservice/entity/server/MeasureData.java

@@ -27,8 +27,19 @@ public class MeasureData {
   
   private String mark;
   
-  private long measureID;
-  
+  private Long measureID;
+
+  private String admCode;
+
+
+  public String getAdmCode() {
+    return admCode;
+  }
+
+  public void setAdmCode(String admCode) {
+    this.admCode = admCode;
+  }
+
   public String getPatientNO() {
     return this.patientNO;
   }
@@ -133,7 +144,7 @@ public class MeasureData {
     this.mark = mark;
   }
   
-  public long getMeasureID() {
+  public Long getMeasureID() {
     return this.measureID;
   }
   

+ 20 - 6
src/main/java/com/hgwebservice/scheduledTask/ScheduledTask.java

@@ -13,6 +13,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
+import java.util.Date;
 
 @Component
 @Slf4j
@@ -25,8 +26,8 @@ public class ScheduledTask {
     private SyncPatientDataByDeptCode syncPatientDataByDeptCode;
     @Autowired
     MeasureService measureService;
-    @PostConstruct
-    @Scheduled(cron ="0 0 0/24 * * ?")
+//    @PostConstruct
+//    @Scheduled(cron ="0 0 0/24 * * ?")
     public void sync() {
         DateTime beginTime = DateTime.now();
         log.info("===========开始同步医护数据===========");
@@ -36,8 +37,8 @@ public class ScheduledTask {
         log.info("同步数据医护结束,耗时: "+between+ "秒") ;
     }
 
-    @PostConstruct
-    @Scheduled(cron ="0 0/5 * * * ?")
+//    @PostConstruct
+//    @Scheduled(cron ="0 0/5 * * * ?")
     public void sync1() {
         DateTime beginTime = DateTime.now();
         log.info("===========开始同步患者数据===========");
@@ -52,10 +53,23 @@ public class ScheduledTask {
 //    @Scheduled(cron ="0 0/3 * * * ?")
     public void sync2() {
         DateTime beginTime = DateTime.now();
-        log.info("===========开始同步量测数据===========");
+        log.info("===========开始同步华广量测数据===========");
+        String start="2024-03-15 00:00:00";
+        String end="2024-03-15 23:59:59";
+        measureService.dmsMeasure(start,end);
+        DateTime endTime = DateTime.now();
+        long between = DateUtil.between(beginTime, endTime, DateUnit.SECOND);
+        log.info("开始同步华广量测数据,耗时: "+between+ "秒") ;
+    }
+
+//    @PostConstruct
+//    @Scheduled(cron ="0 0/3 * * * ?")
+    public void sync3() {
+        DateTime beginTime = DateTime.now();
+        log.info("===========开始回写患者量测数据===========");
         measureService.measure();
         DateTime endTime = DateTime.now();
         long between = DateUtil.between(beginTime, endTime, DateUnit.SECOND);
-        log.info("同步患者量测结束,耗时: "+between+ "秒") ;
+        log.info("同步回写患者量测数据结束,耗时: "+between+ "秒") ;
     }
 }

+ 2 - 0
src/main/java/com/hgwebservice/service/syncCdm2/MeasureService.java

@@ -4,4 +4,6 @@ import javax.servlet.http.HttpServletRequest;
 
 public interface MeasureService {
      int measure();
+
+     int dmsMeasure(String startTime,String endTime);
 }

+ 44 - 1
src/main/java/com/hgwebservice/service/syncCdm2/MeasureServiceImpl.java

@@ -1,28 +1,41 @@
 package com.hgwebservice.service.syncCdm2;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hgwebservice.config.PeriodMarkEnum;
 import com.hgwebservice.dal.dataobject.data.PatientDataDO;
+import com.hgwebservice.dal.mysql.data.DmsMeasureMapper;
+import com.hgwebservice.dal.mysql.data.HisMeasureDataMapper;
 import com.hgwebservice.dal.mysql.data.PatientDataMapper;
 import com.hgwebservice.dal.mysql.data.SyncToHisMapper;
+import com.hgwebservice.entity.hisview.HisMeasureData;
 import com.hgwebservice.entity.hisview.PatientData;
 import com.hgwebservice.entity.hisview.SyncToHisDO;
 import com.hgwebservice.entity.server.MeasureData;
 import com.hgwebservice.util.WebServiceUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 
 @Service
+@Slf4j
 public class MeasureServiceImpl implements MeasureService {
     @Resource
     SyncToHisMapper syncToHisMapper;
     @Resource
     PatientDataMapper patientDataMapper;
+    @Resource
+    DmsMeasureMapper dmsMeasureMapper;
+    @Resource
+    HisMeasureDataMapper hisMeasureDataMapper;
     @Value("${hospital_id}")
     private Integer hospitalId;
     @Override
@@ -33,7 +46,7 @@ public class MeasureServiceImpl implements MeasureService {
         syncToHisDOLambdaQueryWrapper.eq(SyncToHisDO::getValidflag,1);
         syncToHisDOLambdaQueryWrapper.eq(SyncToHisDO::getIsSync,0);
         List<SyncToHisDO> syncToHisDOS = syncToHisMapper.selectList(syncToHisDOLambdaQueryWrapper);
-
+        log.info("需要同步的数据条数"+syncToHisDOS.size());
         LambdaQueryWrapper<PatientDataDO> patientDataDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
         patientDataDOLambdaQueryWrapper.eq(PatientDataDO::getHospitalId,hospitalId);
         List<PatientDataDO> patientDataDOS = patientDataMapper.selectList(patientDataDOLambdaQueryWrapper);
@@ -59,4 +72,34 @@ public class MeasureServiceImpl implements MeasureService {
         }
         return syncToHisDOS.size();
     }
+
+    @Override
+    public int dmsMeasure(String startTime,String endTime) {
+        DateTime start = DateUtil.parseDateTime(startTime);
+        DateTime end = DateUtil.parseDateTime(endTime);
+        // 读取华广数据
+        List<MeasureData> measureDataByMark = dmsMeasureMapper.getMeasureDataByMark(start, end);
+        log.info("读取华广数据"+measureDataByMark.size());
+        for (MeasureData measureData : measureDataByMark) {
+            HisMeasureData hisMeasureData = new HisMeasureData();
+            hisMeasureData.setCode(measureData.getMeasureID().toString());
+            hisMeasureData.setPatientcode(measureData.getPatientNO());
+            hisMeasureData.setPatientname(measureData.getName());
+            hisMeasureData.setAdmcode(measureData.getAdmCode());
+            hisMeasureData.setType("BS");
+            hisMeasureData.setVal(measureData.getMeasureValue());
+            hisMeasureData.setUnit("mmol/l");
+            hisMeasureData.setMeasuretime(measureData.getMeasureDate());
+            hisMeasureData.setDatafrom("HIS");
+            hisMeasureData.setOperatorcode(measureData.getAcc());
+            hisMeasureData.setOperatorname(measureData.getAccName());
+            hisMeasureData.setValidflag(1);
+            hisMeasureData.setCreatetime(new Date());
+            hisMeasureData.setUpdatetime(new Date());
+            hisMeasureData.setHospitalId(Long.valueOf(hospitalId));
+            hisMeasureData.setPeriod(PeriodMarkEnum.getByDesc(measureData.getPeriodCode()).getCode());
+            hisMeasureDataMapper.insert(hisMeasureData);
+        }
+        return measureDataByMark.size();
+    }
 }

+ 1 - 0
src/main/java/com/hgwebservice/util/WebServiceUtil.java

@@ -296,6 +296,7 @@ public class WebServiceUtil {
             log.info("回传字符串:" + msgBodyQuest);
             String[] inputNames = new String[]{"msgHeader", "msgBody"};
             String[] inputValues = new String[]{msgHeaderQuest, msgBodyQuest};
+            log.info("回显his参数",inputValues);
             response = SoapUtil.GeneratorWebserviceBySoapResultUpload("soap12", END_POINT_URL_RESULT, "http://www.zysoft.com/", "CallInterface", "http://www.zysoft.com/CallInterface", inputNames, inputValues, "zys:payload");
         } catch (Exception var12) {
             log.error("doReplyResult fail ", var12);

+ 13 - 3
src/main/resources/application.yml

@@ -14,9 +14,19 @@ spring:
     name: hg-webService
 
   datasource:
-    url: jdbc:mysql://${db.url}:3306/jyhis?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
-    username: ${db.username}
-    password: ${db.password}
+    dynamic:
+      primary: master
+      datasource:
+        master:
+          name: cdm2
+          url: jdbc:mysql://${db.url}:3306/jyhis?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+          username: ${db.username}
+          password: ${db.password}
+        slave: # 模拟从库,可根据自己需要修改
+          name: dms_cloud
+          url: jdbc:mysql://192.168.8.225:3306/dms_cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone =Asia/Shanghai
+          username: bionime_wms
+          password: bionime
 
 mybatis-plus:
   configuration:

+ 1 - 1
src/main/resources/mapper/DataMapper.xml

@@ -97,7 +97,7 @@
         <foreach item="item" index="index" collection="list" separator=";">
             UPDATE dispatch_info
             <set>
-                set update_time=NOW(
+                 update_time=NOW()
             </set>
             <where>
                 code = #{item}

+ 39 - 0
src/main/resources/mapper/DmsMeasureMapper.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hgwebservice.dal.mysql.data.DmsMeasureMapper">
+
+
+    <select id="getMeasureDataByMark" resultType="com.hgwebservice.entity.server.MeasureData">
+        SELECT
+        md.measure_id as measureID,
+        pd.patient_no as patientNO,
+        pd.`name` as name,
+        pd.hospital_no as admCode,
+        md.measure_date as measureDate,
+        md.measure_value as measureValue,
+        ptp.`display_name` as periodCode,
+        '' as note,
+        od.operator_no as acc,
+        od.operator_name as accName,
+        pd.wristband_no as meterSn,
+        pd.bed_no as stripLot,
+        dc.dept_code as dispatchNO,
+        t.test_id as testID,
+        md.mark as mark
+        FROM
+        s_measure_data md
+        LEFT JOIN s_patient_data pd ON md.patient_uid = pd.patient_uid
+        LEFT JOIN poc_test_period ptp ON md.period_id = ptp.id
+        LEFT JOIN s_operator_data od ON od.operator_uid = md.operator_uid
+        LEFT JOIN test t ON t.test_id = md.test_id
+        LEFT Join s_dept_care dc ON pd.care_id = dc.care_id
+        WHERE
+        <if test="startTime != null">
+            md.measure_date &gt;= #{startTime,jdbcType=TIMESTAMP}
+        </if>
+        <if test="endTime != null">
+            AND md.measure_date &lt;= #{endTime,jdbcType=TIMESTAMP}
+        </if>
+        group by md.measure_id
+    </select>
+</mapper>