Przeglądaj źródła

回写his量测数据

malz 1 rok temu
rodzic
commit
1aeb3091a4

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

@@ -0,0 +1,78 @@
+package com.hgwebservice.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.util.Arrays;
+
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+public enum PeriodMarkEnum {
+
+//    P_M_6_0("6_0", "晨起"),
+    P_M_1_2("1_2", "早餐前"),
+    P_M_1_1("1_1", "早餐后2h"),
+    P_M_2_2("2_2", "午餐前"),
+    P_M_2_1("2_1", "午餐后2h"),
+    P_M_3_2("3_2", "晚餐前"),
+    P_M_3_1("3_1", "晚餐后2h"),
+    P_M_0_0("0_0", "睡前"),
+    P_M_5_0("5_0", "00:00"),
+    P_M_7_0("7_0", "随机"),
+    P_M_6_0("6_0", "03:00"),
+    P_M_8_0("8_0", "5AM");
+
+    private String code;
+    private String desc;
+
+    static final String[] MEAL_BEFORE = {P_M_1_2.getCode(), P_M_2_2.getCode(), P_M_3_2.getCode()};
+    static final String[] MEAL_AFTER = {P_M_1_1.getCode(), P_M_2_1.getCode(), P_M_3_1.getCode()};
+
+    public static boolean mealBefore(String code) {
+        return Arrays.asList(MEAL_BEFORE).contains(code);
+    }
+
+    public static boolean mealAfter(String code) {
+        return Arrays.asList(MEAL_AFTER).contains(code);
+    }
+
+    public static PeriodMarkEnum getPeriodMark(Integer period, Integer mark) {
+        if(period == null || mark == null){
+            return null;
+        }
+        return getByCode( String.format("%s_%s", period, mark));
+    }
+
+    public static PeriodMarkEnum getByCode(String periodMark) {
+        if(periodMark == null){
+            return null;
+        }
+        for (PeriodMarkEnum en:PeriodMarkEnum.values()) {
+            if(en.getCode().equals(periodMark)){
+                return en;
+            }
+        }
+        return null;
+    }
+
+
+    public  static Boolean mealBefore(Integer period, Integer mark){
+        PeriodMarkEnum periodMark = getPeriodMark(period, mark);
+        if (null == periodMark){
+            return false;
+        }
+
+        return  mealBefore(periodMark.getCode());
+    }
+
+    public  static Boolean mealAfter(Integer period, Integer mark){
+        PeriodMarkEnum periodMark = getPeriodMark(period, mark);
+        if (null == periodMark){
+            return false;
+        }
+
+        return  mealAfter(periodMark.getCode());
+    }
+}

+ 2 - 2
src/main/java/com/hgwebservice/controller/MeasureController.java

@@ -12,7 +12,7 @@ public class MeasureController {
     @Autowired
     MeasureService measureService;
     @RequestMapping({"/measure"})
-    public Boolean measure(HttpServletRequest request) {
-        return this.measureService.measure(request);
+    public int measure() {
+        return measureService.measure();
     }
 }

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

@@ -22,5 +22,7 @@ public interface OperatorDataMapper extends BaseMapper<OperatorDataDO> {
     int replaceOperatorData(@Param("list") List<OperatorDataDO> list,@Param("hospitalId")Integer hospitalId);
     int replacePatientData(@Param("list") List<PatientDataDO> list,@Param("hospitalId")Integer hospitalId);
     int insertDispatchData(@Param("list") List<DispatchDataDO> list,@Param("hospitalId")Integer hospitalId);
+
     int insertDispatchInfo(@Param("list") List<DispatchInfoDO> list, @Param("hospitalId")Integer hospitalId);
+    int updateDispatchInfo(@Param("list") List<String> list );
 }

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

@@ -0,0 +1,18 @@
+package com.hgwebservice.dal.mysql.data;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.hgwebservice.entity.hisview.SyncToHisDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+
+@Mapper
+public interface SyncToHisMapper extends BaseMapper<SyncToHisDO> {
+
+   default SyncToHisDO selectByCode(String code, Long tenantId){
+       return  selectOne(Wrappers.<SyncToHisDO>lambdaQuery().eq(SyncToHisDO::getCode,code).eq(SyncToHisDO::getHospitalId,tenantId).last("limit 1"));
+   }
+   @Update("update sync_to_his set is_sync=#{isSync} where id=#{id}")
+   int updateIsSync(@Param("id")Integer id,@Param("id")Integer isSync);
+}

+ 91 - 0
src/main/java/com/hgwebservice/entity/hisview/SyncToHisDO.java

@@ -0,0 +1,91 @@
+package com.hgwebservice.entity.hisview;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author: liwang
+ * @Date: 2023年06月01日 16:52
+ */
+@TableName("sync_to_his")
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SyncToHisDO {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("code")
+    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("PERIOD")
+    private String period;
+    @TableField("HOSPITALCODE")
+    private String hospitalCode;
+
+    @TableField("MEASUREMETHOD")
+    private Integer measureMethod;
+    @TableField("CHARGEFLAG")
+    private Integer chargeFlag;
+    @TableField("is_sync")
+    private Integer isSync;
+
+}

+ 14 - 0
src/main/java/com/hgwebservice/scheduledTask/ScheduledTask.java

@@ -3,6 +3,7 @@ package com.hgwebservice.scheduledTask;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import com.hgwebservice.service.syncCdm2.MeasureService;
 import com.hgwebservice.service.syncCdm2.SyncDispatchDataByDeptCode;
 import com.hgwebservice.service.syncCdm2.SyncOperatorData;
 import com.hgwebservice.service.syncCdm2.SyncPatientDataByDeptCode;
@@ -22,6 +23,8 @@ public class ScheduledTask {
     private SyncOperatorData syncOperatorData;
     @Autowired
     private SyncPatientDataByDeptCode syncPatientDataByDeptCode;
+    @Autowired
+    MeasureService measureService;
     @PostConstruct
     @Scheduled(cron ="0 0 0/24 * * ?")
     public void sync() {
@@ -44,4 +47,15 @@ public class ScheduledTask {
         long between = DateUtil.between(beginTime, endTime, DateUnit.SECOND);
         log.info("同步患者数据结束,耗时: "+between+ "秒") ;
     }
+
+//    @PostConstruct
+//    @Scheduled(cron ="0 0/3 * * * ?")
+    public void sync2() {
+        DateTime beginTime = DateTime.now();
+        log.info("===========开始同步量测数据===========");
+        measureService.measure();
+        DateTime endTime = DateTime.now();
+        long between = DateUtil.between(beginTime, endTime, DateUnit.SECOND);
+        log.info("同步患者量测结束,耗时: "+between+ "秒") ;
+    }
 }

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

@@ -3,5 +3,5 @@ package com.hgwebservice.service.syncCdm2;
 import javax.servlet.http.HttpServletRequest;
 
 public interface MeasureService {
-     Boolean measure(HttpServletRequest request);
+     int measure();
 }

+ 52 - 2
src/main/java/com/hgwebservice/service/syncCdm2/MeasureServiceImpl.java

@@ -1,12 +1,62 @@
 package com.hgwebservice.service.syncCdm2;
 
+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.PatientDataMapper;
+import com.hgwebservice.dal.mysql.data.SyncToHisMapper;
+import com.hgwebservice.entity.hisview.PatientData;
+import com.hgwebservice.entity.hisview.SyncToHisDO;
+import com.hgwebservice.entity.server.MeasureData;
+import com.hgwebservice.util.WebServiceUtil;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Optional;
+
 @Service
 public class MeasureServiceImpl implements MeasureService {
+    @Resource
+    SyncToHisMapper syncToHisMapper;
+    @Resource
+    PatientDataMapper patientDataMapper;
+    @Value("${hospital_id}")
+    private Integer hospitalId;
     @Override
-    public Boolean measure(HttpServletRequest request) {
-        return null;
+    public int measure() {
+        LambdaQueryWrapper<SyncToHisDO> syncToHisDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        syncToHisDOLambdaQueryWrapper.eq(SyncToHisDO::getHospitalId,hospitalId);
+        syncToHisDOLambdaQueryWrapper.eq(SyncToHisDO::getType,"BS");
+        syncToHisDOLambdaQueryWrapper.eq(SyncToHisDO::getValidflag,1);
+        syncToHisDOLambdaQueryWrapper.eq(SyncToHisDO::getIsSync,0);
+        List<SyncToHisDO> syncToHisDOS = syncToHisMapper.selectList(syncToHisDOLambdaQueryWrapper);
+
+        LambdaQueryWrapper<PatientDataDO> patientDataDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        patientDataDOLambdaQueryWrapper.eq(PatientDataDO::getHospitalId,hospitalId);
+        List<PatientDataDO> patientDataDOS = patientDataMapper.selectList(patientDataDOLambdaQueryWrapper);
+        for (SyncToHisDO syncToHisDO : syncToHisDOS) {
+            MeasureData measureData=new MeasureData();
+            measureData.setAcc(syncToHisDO.getOperatorcode());
+            measureData.setAccName(syncToHisDO.getOperatorname());
+            measureData.setPeriodCode(PeriodMarkEnum.getByCode(syncToHisDO.getPeriod()).getDesc());
+            measureData.setTestID(syncToHisDO.getId());
+            measureData.setPatientNO(syncToHisDO.getPatientcode());
+            measureData.setName(syncToHisDO.getPatientname());
+            measureData.setMeasureValue(syncToHisDO.getVal());
+            Optional<PatientDataDO> first = patientDataDOS.stream().filter(item -> item.getPatientNo().equals(syncToHisDO.getPatientcode())).findFirst();
+            if (first.isPresent()){
+                PatientDataDO patientDataDO = first.get();
+                measureData.setStripLot(patientDataDO.getBedNo());
+                measureData.setMeterSn(patientDataDO.getWristbandNo());
+            }
+            Boolean aBoolean = WebServiceUtil.insertMeasureResult(measureData);
+            if (aBoolean){
+                syncToHisMapper.updateIsSync(syncToHisDO.getId(),1);
+            }
+        }
+        return syncToHisDOS.size();
     }
 }

+ 3 - 0
src/main/java/com/hgwebservice/service/syncCdm2/SyncDispatchInfoByDeptCodeImpl.java

@@ -72,6 +72,9 @@ public class SyncDispatchInfoByDeptCodeImpl implements SyncDispatchInfoByDeptCod
                         }else{
                             insertDispatchInfo=dispatchData;
                         }
+                        if (CollUtil.isNotEmpty(updateIds)){
+                            operatorDataMapper.updateDispatchInfo(updateIds);
+                        }
                         if (CollUtil.isNotEmpty(insertDispatchInfo)){
                             List<DispatchInfoDO> dispatchDataDOS = BeanUtil.copyToList(insertDispatchInfo, DispatchInfoDO.class);
                             operatorDataMapper.insertDispatchInfo(dispatchDataDOS,hospitalId);

+ 5 - 6
src/main/java/com/hgwebservice/util/WebServiceUtil.java

@@ -110,7 +110,7 @@ public class WebServiceUtil {
                     }
                 }
             }
-
+            log.info(deptCode + "获取住院患者数量" + allPatientDataList.size());
             return allPatientDataList;
         } catch (Exception var18) {
             log.error("Get PatientDataByWardCode Fail !!! ", var18);
@@ -194,7 +194,7 @@ public class WebServiceUtil {
                 }
             }
 
-            log.info("获取有效医嘱" + dispatcList.size());
+//            log.info("获取有效医嘱" + dispatcList.size());
             return dispatcList;
         } catch (Exception var20) {
             log.error("Get AllOperatorData Fail !!! ", var20);
@@ -216,7 +216,6 @@ public class WebServiceUtil {
             }
 
             String analylsisNode = null;
-            if (!"随机".equals(period) && !"00:00".equals(period) && !"03:00".equals(period)) {
                 if ("早餐前".equals(period)) {
                     analylsisNode = "01";
                 } else if ("早餐后2h".equals(period)) {
@@ -235,10 +234,9 @@ public class WebServiceUtil {
                     analylsisNode = "08";
                 } else if ("03:00".equals(period)) {
                     analylsisNode = "09";
+                }else {
+                    analylsisNode = "00";
                 }
-            } else {
-                analylsisNode = "00";
-            }
 
             String msgHeaderQuest = buildmsgHeaderXml("SendBloodGlucoseRecord");
             StringBuilder sb = new StringBuilder();
@@ -301,6 +299,7 @@ public class WebServiceUtil {
             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);
+            return false;
         }
 
         if (response.contains("OK")) {

+ 12 - 0
src/main/resources/mapper/DataMapper.xml

@@ -92,4 +92,16 @@
             )
         </foreach>
     </insert>
+
+    <update id="updateDispatchInfo">
+        <foreach item="item" index="index" collection="list" separator=";">
+            UPDATE dispatch_info
+            <set>
+                set update_time=NOW(
+            </set>
+            <where>
+                code = #{item}
+            </where>
+        </foreach>
+    </update>
 </mapper>