Selaa lähdekoodia

接入患者入科消息,护理内容获取

zhangzw 4 vuotta sitten
vanhempi
commit
41f1ea6284

+ 195 - 0
src/main/java/com/diagbot/entity/MedNurse.java

@@ -0,0 +1,195 @@
+package com.diagbot.entity;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhangzw
+ * @since 2020-11-26
+ */
+@Data
+public class MedNurse implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 单号
+     */
+    private String repNo;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 住院病人ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 测量时间
+     */
+    private Date measureTime;
+
+    /**
+     * 生命体征名称
+     */
+    private String itemName;
+
+    /**
+     * 生命体征数值
+     */
+    private String itemValue;
+
+    /**
+     * 生命体征单位
+     */
+    private String itemUnit;
+
+    /**
+     * 生命体征类别
+     */
+    private String itemType;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    public String getRepNo() {
+        return repNo;
+    }
+
+    public void setRepNo(String repNo) {
+        this.repNo = repNo;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+    public Date getMeasureTime() {
+        return measureTime;
+    }
+
+    public void setMeasureTime(Date measureTime) {
+        this.measureTime = measureTime;
+    }
+    public String getItemName() {
+        return itemName;
+    }
+
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+    public String getItemValue() {
+        return itemValue;
+    }
+
+    public void setItemValue(String itemValue) {
+        this.itemValue = itemValue;
+    }
+    public String getItemUnit() {
+        return itemUnit;
+    }
+
+    public void setItemUnit(String itemUnit) {
+        this.itemUnit = itemUnit;
+    }
+    public String getItemType() {
+        return itemType;
+    }
+
+    public void setItemType(String itemType) {
+        this.itemType = itemType;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    @Override
+    public String toString() {
+        return "MedNurse{" +
+            "repNo=" + repNo +
+            ", hospitalId=" + hospitalId +
+            ", behospitalCode=" + behospitalCode +
+            ", measureTime=" + measureTime +
+            ", itemName=" + itemName +
+            ", itemValue=" + itemValue +
+            ", itemUnit=" + itemUnit +
+            ", itemType=" + itemType +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+        "}";
+    }
+}

+ 18 - 0
src/main/java/com/diagbot/facade/MedNurseFacade.java

@@ -0,0 +1,18 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.MedLisResultDTO;
+import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.service.impl.MedLisResultServiceImpl;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhangzw
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class MedNurseFacade extends MedLisResultServiceImpl {
+
+}

+ 16 - 8
src/main/java/com/diagbot/facade/data/AHomePageFacade.java

@@ -85,11 +85,11 @@ public class AHomePageFacade extends HomePageServiceImpl{
                     if(aHomePageVO.getLeaveDiags()!=null && aHomePageVO.getLeaveDiags().size()>0){
                         for (AHomeDiagnoseVO aHomeDiagnoseVO:aHomePageVO.getLeaveDiags()){
                             if(StringUtil.isEmpty(aHomeDiagnoseVO.getHomePageId())) {
-                                return RespDTO.onError("出院诊断未输入病案首页编号!");
+                                return RespDTO.onSuc("出院诊断未输入病案首页编号!");
                             }else if(aHomeDiagnoseVO.getHospitalId()==null){
-                                return RespDTO.onError("出院诊断未输入医院编码!");
+                                return RespDTO.onSuc("出院诊断未输入医院编码!");
                             }else if(StringUtil.isEmpty(aHomeDiagnoseVO.getDiagnoseOrderNo())){
-                                return RespDTO.onError("出院诊断未输入顺序号!");
+                                return RespDTO.onSuc("出院诊断未输入顺序号!");
                             }
                         }
                     };
@@ -98,11 +98,11 @@ public class AHomePageFacade extends HomePageServiceImpl{
                     if(aHomePageVO.getOperations()!=null && aHomePageVO.getOperations().size()>0){
                         for (AHomeOperationVO aHomeOperationVO:aHomePageVO.getOperations()){
                             if(StringUtil.isEmpty(aHomeOperationVO.getHomePageId())) {
-                                return RespDTO.onError("住院手术未输入病案首页编号!");
+                                return RespDTO.onSuc("住院手术未输入病案首页编号!");
                             }else if(aHomeOperationVO.getHospitalId()==null){
-                                return RespDTO.onError("住院手术未输入医院编码!");
+                                return RespDTO.onSuc("住院手术未输入医院编码!");
                             }else if(StringUtil.isEmpty(aHomeOperationVO.getOperationOrderNo())){
-                                return RespDTO.onError("住院手术未输入顺序号!");
+                                return RespDTO.onSuc("住院手术未输入顺序号!");
                             }
                         }
                     }
@@ -118,7 +118,11 @@ public class AHomePageFacade extends HomePageServiceImpl{
             }
         }catch (Exception e){
             aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),"",e.getMessage());
-            return RespDTO.onError(e.getMessage());
+            if(e.getMessage().contains("该病历无关联的质控条目")){
+                return RespDTO.onSuc(e.getMessage());
+            }else {
+                return RespDTO.onError(e.getMessage());
+            }
         }
     }
 
@@ -279,7 +283,11 @@ public class AHomePageFacade extends HomePageServiceImpl{
             }
         }catch (Exception e){
             aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),"",e.getMessage());
-            return RespDTO.onError(e.getMessage());
+            if(e.getMessage().contains("该病历无关联的质控条目")){
+                return RespDTO.onSuc(e.getMessage());
+            }else {
+                return RespDTO.onError(e.getMessage());
+            }
         }
     }
 

+ 103 - 0
src/main/java/com/diagbot/facade/data/AMedNurseFacade.java

@@ -0,0 +1,103 @@
+package com.diagbot.facade.data;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.MedLisInfo;
+import com.diagbot.entity.MedNurse;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.MedLisInfoServiceImpl;
+import com.diagbot.service.impl.MedNurseServiceImpl;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.SqlProperties;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.TZDBConn;
+import com.diagbot.vo.data.ADeleteFlagVO;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class AMedNurseFacade extends MedNurseServiceImpl {
+
+    private TZDBConn tzDBConn = new TZDBConn();
+
+    @Autowired
+    private SqlProperties sqlProperties;
+
+    @Autowired
+    @Qualifier("medNurseServiceImpl")
+    private MedNurseServiceImpl medNurseServiceImpl;
+
+    @Autowired
+    private AMedAbnormalInfoFacade aMedAbnormalInfoFacade;
+
+
+    /**
+     * 同步前一天
+     */
+    public void executeMedPacsResult() {
+
+    }
+
+    public void execute(List<MedNurse> medNurseList){
+        try {
+            List<MedNurse> addE = Lists.newLinkedList();
+            List<MedNurse> updateE = Lists.newLinkedList();
+            if (medNurseList != null && medNurseList.size() > 0) {
+                medNurseList.stream().forEach(s -> {
+                    MedNurse medNurse = this.getOne(new QueryWrapper<MedNurse>()
+                            .eq("rep_no", s.getRepNo())
+                            .eq("behospital_code",s.getBehospitalCode())
+                            .eq("hospital_id", s.getHospitalId()), false);
+                    if (medNurse != null) {
+                        s.setGmtModified(new Date());
+                        updateE.add(s);
+                    } else {
+                        s.setGmtCreate(new Date());
+                        addE.add(s);
+                    }
+                });
+            }
+            if(addE.size()>0){
+                medNurseServiceImpl.saveBatch(addE);
+            }
+            if(updateE.size()>0){
+                this.baseMapper.updateBatchByKey(updateE);
+            }
+            //aMedAbnormalInfoFacade.saveAbnormalInfo("检查",JSON.toJSONString(medPacsResultList),"","操作成功!");
+        }catch (Exception e){
+            aMedAbnormalInfoFacade.saveAbnormalInfo("护理信息-保存异常",JSON.toJSONString(medNurseList),"",e.getMessage());
+        }
+    }
+
+    public RespDTO deleteFlag(ADeleteFlagVO aDeleteFlagVO){
+        try {
+            //验证数据是否存在
+            if(StringUtil.isEmpty(aDeleteFlagVO.getRepNo())){
+                return RespDTO.onError("请输入报告单号!");
+            }else if(aDeleteFlagVO.getHospitalId()==null){
+                return RespDTO.onError("请输入医院编码!");
+            }else {
+                UpdateWrapper<MedNurse> updateWrapper=new UpdateWrapper<>();
+                updateWrapper.eq("rep_no", aDeleteFlagVO.getRepNo())
+                        .eq("hospital_id", aDeleteFlagVO.getHospitalId())
+                        .eq("is_deleted", IsDeleteEnum.N)
+                        .set("is_deleted",IsDeleteEnum.Y)
+                        .set("gmt_modified", DateUtil.now());
+
+                Boolean flag=update(new MedNurse(),updateWrapper);
+                //aMedAbnormalInfoFacade.saveAbnormalInfo("检查-删除",JSON.toJSONString(aDeleteFlagVO),JSON.toJSONString(RespDTO.onSuc(flag)),"操作成功!");
+                return RespDTO.onSuc(flag);
+            }
+        }catch (Exception e){
+            aMedAbnormalInfoFacade.saveAbnormalInfo("检查信息-删除异常", JSON.toJSONString(aDeleteFlagVO),"",e.getMessage());
+            return RespDTO.onError(e.getMessage());
+        }
+    }
+}

+ 35 - 11
src/main/java/com/diagbot/facade/data/AMedicalRecordFacade.java

@@ -139,20 +139,28 @@ public class AMedicalRecordFacade extends MedicalRecordServiceImpl {
                         return RespDTO.onError("请输入病历类别编号!");
                     } else if (aMedicalRecordVO.getRecTitle() == null || "".equals(aMedicalRecordVO.getRecTitle())) {
                         return RespDTO.onError("请输入病历标题!");
-                    } else if (aMedicalRecordVO.getContents() == null || aMedicalRecordVO.getContents().size() == 0) {
+                    }else if (aMedicalRecordVO.getContents() == null || aMedicalRecordVO.getContents().size() == 0) {
                         return RespDTO.onError("请输入文书详情!");
                     }
+
                 }
                 //更新文书信息
                 executeMrRecord(aMrContentVO.getRecords());
                 aMrContentVO.getRecords().stream().forEach(s -> {
                     //更新文书详情
-                    aMedicalRecordContentFacade.executeMrRecordContent(s.getContents());
+                    if(StringUtil.isNotEmpty(aMrContentVO.getTranscode())){
+                        long startTime=System.currentTimeMillis();
+                        String sql = "SELECT * FROM AI_V_SENDMRRECORDING WHERE RECID = '"+s.getRecId()+"'";
+                        List<MedicalRecordContent> medicalRecordContentList =  tzDBConn.getMedicalRecordContent(sql);
+                        aMedicalRecordContentFacade.execute(medicalRecordContentList);
+                        long endTime=System.currentTimeMillis();
+                        System.out.println((endTime-startTime));
+                    }else{
+                        aMedicalRecordContentFacade.executeMrRecordContent(s.getContents());
+                    }
                 });
-
                 //评分后返回结构体
                 return mrIng(aMrContentVO);
-
             }else{
                 aMedAbnormalInfoFacade.saveAbnormalInfo("文书信息",JSON.toJSONString(aMrContentVO),"","未接收到数据!");
                 return RespDTO.onError("未接收到数据!");
@@ -175,15 +183,23 @@ public class AMedicalRecordFacade extends MedicalRecordServiceImpl {
             MedicalRecord medicalRecord=new MedicalRecord();
             BeanUtil.copyProperties(aMrContentVO.getRecords().get(0),medicalRecord);
             Long modeId=initModeId(medicalRecord);
+            BehospitalInfo behospitalInfo = behospitalInfoFacade.getOne(new QueryWrapper<BehospitalInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("hospital_id", hospitalId)
+                    .eq("behospital_code", behospitalCode), false);
+
+            if(behospitalInfo==null){
+                return RespDTO.onSuc("");
+            }
             if(aMrContentVO.getDockModeType().equals("0")){
                 Map<String,Object> map=new HashMap<String,Object>();
                 List<AMedicalRecordDTO> medicalRecordDTOList = BeanUtil.listCopyTo(aMrContentVO.getRecords(), AMedicalRecordDTO.class);
                 map.put("records",medicalRecordDTOList);
                 //aMedAbnormalInfoFacade.saveAbnormalInfo("文书信息",JSON.toJSONString(aMrContentVO),JSON.toJSONString(RespDTO.onSuc(map)),"操作正常!");
-                return RespDTO.onSuc(map);
-            }else if(aMrContentVO.getDockModeType().equals("1")){
+                return RespDTO.onSuc("保存成功");
+            } else if(aMrContentVO.getDockModeType().equals("1")){
                 if(modeId==null || modeId==0){
-                    return RespDTO.onError("无对应的文书类型");
+                    return RespDTO.onSuc("无对应的文书类型");
                 }
                 //页面模式
                 String url=readProperties.getProcessQcUrl()+"?behospitalCode="+behospitalCode+"&hospitalId="+hospitalId+"&modeId="+modeId;
@@ -206,27 +222,35 @@ public class AMedicalRecordFacade extends MedicalRecordServiceImpl {
                 return RespDTO.onSuc(map);
             }else{
                 if(modeId==null ||modeId==0 ){
-                    return RespDTO.onError("无对应的文书类型");
+                    return RespDTO.onSuc("无对应的文书类型");
                 }
                 //页面模式
                 String url=readProperties.getProcessQcUrl()+"?behospitalCode="+behospitalCode+"&hospitalId="+hospitalId+"&modeId="+modeId;
-
+                Map<String,Object> map=new HashMap<String,Object>();
+                long startTime=System.currentTimeMillis();
                 AnalyzeRunVO analyzeRunVO=new AnalyzeRunVO();
                 analyzeRunVO.setBehospitalCode(behospitalCode);
                 analyzeRunVO.setHospitalId(hospitalId);
                 analyzeRunVO.setModeId(modeId);
                 AnalyzeRunDTO analyzeRunDTO=behospitalInfoFacade.analyzeRun(analyzeRunVO);
-                Map<String,Object> map=new HashMap<String,Object>();
+
                 if(analyzeRunDTO.getMsgDTOList().size()>0){
                     map.put("url",url);
                     map.put("analyze",analyzeRunDTO.getMsgDTOList());
                 }
+                long endTime=System.currentTimeMillis();
+                System.out.println((endTime-startTime));
                 //aMedAbnormalInfoFacade.saveAbnormalInfo("文书信息",JSON.toJSONString(aMrContentVO),JSON.toJSONString(RespDTO.onSuc(map)),"操作正常!");
                 return RespDTO.onSuc(map);
             }
         }catch (Exception e){
             aMedAbnormalInfoFacade.saveAbnormalInfo("文书信息",JSON.toJSONString(aMrContentVO),"",e.getMessage());
-            return RespDTO.onError(e.getMessage());
+            if(e.getMessage().contains("该病历无关联的质控条目")){
+                return RespDTO.onSuc(e.getMessage());
+            }else {
+                return RespDTO.onError(e.getMessage());
+            }
+
         }
 
     }

+ 18 - 0
src/main/java/com/diagbot/mapper/MedNurseMapper.java

@@ -0,0 +1,18 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedNurse;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zhangzw
+ * @since 2020-11-26
+ */
+public interface MedNurseMapper extends BaseMapper<MedNurse> {
+
+    public void updateBatchByKey(List<MedNurse> list);
+}

+ 16 - 0
src/main/java/com/diagbot/service/MedNurseService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedNurse;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zhangzw
+ * @since 2020-11-26
+ */
+public interface MedNurseService extends IService<MedNurse> {
+
+}

+ 26 - 0
src/main/java/com/diagbot/service/impl/MedNurseServiceImpl.java

@@ -0,0 +1,26 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.MedNurse;
+import com.diagbot.entity.MedPacsResult;
+import com.diagbot.mapper.MedNurseMapper;
+import com.diagbot.service.MedNurseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zhangzw
+ * @since 2020-11-26
+ */
+@Service
+public class MedNurseServiceImpl extends ServiceImpl<MedNurseMapper, MedNurse> implements MedNurseService {
+
+    public void updateBatchByKey(List<MedNurse> list){
+        this.baseMapper.updateBatchByKey(list);
+    }
+}

+ 1 - 1
src/main/java/com/diagbot/util/SocketServer.java

@@ -88,7 +88,7 @@ public class SocketServer {
      * @return
      */
     private static StringBuilder onMessage(Socket socket) {
-        byte[] bytes = new byte[2048];
+        byte[] bytes = new byte[5120];
         int len;
         try {
             // 建立好连接后,从socket中获取输入流,并建立缓冲区进行读取

+ 125 - 41
src/main/java/com/diagbot/util/YWAnalysis.java

@@ -6,6 +6,7 @@ import ca.uhn.hl7v2.util.Terser;
 import com.alibaba.fastjson.JSON;
 import com.diagbot.entity.*;
 import com.diagbot.enums.data.DoctorAdviceStatusEnum;
+import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.data.*;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
@@ -18,6 +19,8 @@ import java.util.List;
 @Component
 public class YWAnalysis {
 
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
     private ABehospitalInfoFacade aBehospitalInfoFacade;
     @Autowired
@@ -38,6 +41,8 @@ public class YWAnalysis {
     private AMedicalRecordFacade aMedicalRecordFacade;
     @Autowired
     private AMedicalRecordContentFacade aMedicalRecordContentFacade;
+    @Autowired
+    private AMedNurseFacade aMedNurseFacade;
 
     private TZDBConn tzDBConn = new TZDBConn();
 
@@ -46,27 +51,45 @@ public class YWAnalysis {
     public static final Long HOSPITAL_ID = Long.valueOf("5");//1:长兴,2:邵逸夫,3:台州市立医院,5义乌妇幼医院
 
     @Transactional
-    public void executeAnalysis(String hisMessage) {
+    public void executeAnalysis(String hisMessage) throws Exception{
         try {
             Message message = pipeParser.parse(hisMessage);
             Terser terser = new Terser(message);
             //入院登记
-            if (message.getName().equals("ADT_A01")) {
+//            if (message.getName().equals("ADT_A01")) {
+//                aBehospitalInfoFacade.execute(getBehospitalInfoToView(terser.get("/.PV1-19-1")));
+//            }
+            if (message.getName().equals("ADT_A09")) {
                 aBehospitalInfoFacade.execute(getBehospitalInfoToView(terser.get("/.PV1-19-1")));
-            }
-            //医嘱
-            if (message.getName().equals("OMP_O09")) {
+                //从入科消息中获取更新入院时间
+//                BehospitalInfo behospitalInfo = behospitalInfoFacade.getOne(new QueryWrapper<BehospitalInfo>()
+//                        .eq("behospital_code", terser.get("/.PV1-19-1"))
+//                        .eq("hospital_id", HOSPITAL_ID)
+//                        .eq("is_deleted", IsDeleteEnum.N), false);
+//                if(behospitalInfo != null){
+//                    if(StringUtil.isNotEmpty(terser.get("/.PV1-44-1"))){
+//                        behospitalInfo.setBehospitalDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.PV1-44-1"), DateUtil.DATE_TIME_FORMAT)));
+//                    }
+//                    QueryWrapper<BehospitalInfo> queryWrapper = new QueryWrapper<>();
+//                    queryWrapper.eq("behospital_code", terser.get("/.PV1-19-1"));
+//                    queryWrapper.eq("hospital_id", HOSPITAL_ID);
+//                    queryWrapper.eq("is_deleted", IsDeleteEnum.N);
+//                    behospitalInfoFacade.update(behospitalInfo,queryWrapper);
+//                }
+            }else if (message.getName().equals("OMP_O09")) {
+                //医嘱
                 aDoctorAdviceFacade.execute(getDoctorAdviceToView(terser.get("/.ORC-2-1")));
-            }
-            //检查结果
-            if (message.getName().equals("ORU_R01")) {
+            }else if (message.getName().equals("ORU_R01")) {
+                //检查结果
                 aMedPacsInfoFacade.execute(getPacsInfoToMsg(hisMessage));
                 aMedPacsResultFacade.execute(getPacsResultToView(terser.get("/.ORC-2-1")));
-            }
-            //化验
-            if (message.getName().equals("OUL_R21")) {
+            }else if (message.getName().equals("OUL_R21")) {
+                //化验
                 aMedLisInfoFacade.execute(getLisInfoToMsg(hisMessage));
                 aMedLisResultFacade.execute(getLisResultToView(terser.get("/.OBR-2-3")));
+            }else if (message.getName().equals("RAS_O17") && terser.get("/.ORDER/RXR-1").equals("3")) {
+                //护理
+                aMedNurseFacade.execute(getMedNurseToMsg(hisMessage));
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -75,29 +98,37 @@ public class YWAnalysis {
 
     /**
      * 解析入院登记信息(视图获取/消息解析)
+     *
      * @param queryParam
      * @return
      */
     public List<BehospitalInfo> getBehospitalInfoToView(String queryParam) {
-        String queryLisResultSql = "SELECT * FROM AI_V_SENDPATIENTINFO t WHERE t.BEHOSPITALCODE='"+queryParam+"'";
-        List<BehospitalInfo> behospitalInfoList  = tzDBConn.getBehospitalInfo(queryLisResultSql);
+        String queryLisResultSql = "SELECT * FROM AI_V_SENDPATIENTINFO t WHERE t.BEHOSPITALCODE='" + queryParam + "'";
+        List<BehospitalInfo> behospitalInfoList = tzDBConn.getBehospitalInfo(queryLisResultSql);
         return behospitalInfoList;
     }
+
     public List<BehospitalInfo> getBehospitalInfoToMsg(String hisMessage) {
         List<BehospitalInfo> behospitalInfoList = Lists.newLinkedList();
         BehospitalInfo behospitalInfo = new BehospitalInfo();
         try {
             Message message = pipeParser.parse(hisMessage);
             Terser terser = new Terser(message);
-            /**表示位置*/
-            //String station = "Z2B-3";//
-            /**该位置的字段值*/
-            //String val = terser.get("/." + station);
             behospitalInfo.setBehospitalCode(terser.get("/.PV1-19-1"));
             behospitalInfo.setHospitalId(HOSPITAL_ID);
             behospitalInfo.setName(terser.get("/.PID-5-2"));
-            behospitalInfo.setSex(terser.get("/.PID-8").equals("F") ? "女" : "男");
-            behospitalInfo.setBirthday(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.PID-7"), DateUtil.DATE_FORMAT)));
+            String sex = terser.get("/.PID-8");
+            if(sex.equals("F")){
+                sex = "女";
+            }else if(sex.equals("M")){
+                sex = "男";
+            }else if(sex.equals("O")){
+                sex = "其他";
+            }
+            behospitalInfo.setSex(sex);
+            if(StringUtil.isNotEmpty(terser.get("/.PID-7"))){
+                behospitalInfo.setBirthday(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.PID-7"), DateUtil.DATE_FORMAT)));
+            }
             behospitalInfo.setFileCode(terser.get("/.PID-3(1)-1"));
             behospitalInfo.setWardCode(terser.get("/.PV1-3-1"));
             behospitalInfo.setWardName(terser.get("/.PV1-3-6"));
@@ -105,12 +136,14 @@ public class YWAnalysis {
             behospitalInfo.setBehDeptName(terser.get("/.PV1-3-4-2"));
             //behospitalInfo.setBedCode();
             //behospitalInfo.setBedName();
-            behospitalInfo.setInsuranceName(terser.get("/.PV1-18"));
+            behospitalInfo.setInsuranceName(terser.get("/.PV1-18"));//医保类别待转
             //behospitalInfo.setJobType();
-            //behospitalInfo.setBehospitalDate();
+            if(StringUtil.isNotEmpty(terser.get("/.PV1-44-1"))){
+                behospitalInfo.setBehospitalDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.PV1-44-1"), DateUtil.DATE_TIME_FORMAT)));
+            }
             //behospitalInfo.setLeaveHospitalDate();
             //behospitalInfo.setDiagnoseIcd();
-            behospitalInfo.setDiagnose(terser.get("/.DG1-4"));
+            //behospitalInfo.setDiagnose();
             //behospitalInfo.setBehDoctorId();
             //behospitalInfo.setBehDoctorName();
             behospitalInfo.setDoctorId(terser.get("/.PV1-7-1"));
@@ -129,6 +162,7 @@ public class YWAnalysis {
 
     /**
      * 解析医嘱(视图获取/消息解析)
+     *
      * @param hisMessage
      * @return
      */
@@ -154,12 +188,12 @@ public class YWAnalysis {
 
             doctorAdviceVO.setDaFrequency(terser.get("/.ORC-7-2-1"));
 //            doctorAdviceVO.setDaDealType("");
-            if(StringUtils.isNotEmpty(terser.get("/.ORC-7-4-1"))){
+            if (StringUtils.isNotEmpty(terser.get("/.ORC-7-4-1"))) {
                 doctorAdviceVO.setDaStartDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.ORC-7-4-1"), DateUtil.DATE_TIME_FORMAT), DateUtil.DATE_TIME_FORMAT));
             }
             doctorAdviceVO.setDaItemName(terser.get("/.RXO-1-2"));
             doctorAdviceVO.setDaStatus(DoctorAdviceStatusEnum.getName(terser.get("/.ORC-5")));
-            if(StringUtils.isNotEmpty(terser.get("/.ORC-7-5-1"))){
+            if (StringUtils.isNotEmpty(terser.get("/.ORC-7-5-1"))) {
                 doctorAdviceVO.setDaStopDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.ORC-7-5-1"), DateUtil.DATE_TIME_FORMAT), DateUtil.DATE_TIME_FORMAT));
             }
             doctorAdviceVO.setDaGroupNo(terser.get("/.ORC-4-1"));
@@ -168,7 +202,7 @@ public class YWAnalysis {
             doctorAdviceVO.setDoctorNotice(terser.get("/.RXO-7-2"));
             doctorAdviceVO.setDoctorId(terser.get("/.ORC-12-1"));
             doctorAdviceVO.setDoctorName(terser.get("/.ORC-12-3"));
-            if(terser.get("/.ORC-5").equals("CA") || terser.get("/.ORC-5").equals("HD")){
+            if (terser.get("/.ORC-5").equals("CA") || terser.get("/.ORC-5").equals("HD")) {
                 doctorAdviceVO.setIsDeleted("Y");
             }
         } catch (Exception e) {
@@ -177,8 +211,9 @@ public class YWAnalysis {
         doctorAdviceList.add(doctorAdviceVO);
         return doctorAdviceList;
     }
-    public List<DoctorAdvice> getDoctorAdviceToView(String queryParam){
-        String queryDoctorAdviceSql = "SELECT * FROM AI_V_SENDDOCTORADVICE t WHERE t.DOCTORADVICEID='"+queryParam+"'";
+
+    public List<DoctorAdvice> getDoctorAdviceToView(String queryParam) {
+        String queryDoctorAdviceSql = "SELECT * FROM AI_V_SENDDOCTORADVICE t WHERE t.DOCTORADVICEID='" + queryParam + "'";
         List<DoctorAdvice> doctorAdviceList = tzDBConn.getDoctorAdvice(queryDoctorAdviceSql);
         return doctorAdviceList;
     }
@@ -186,10 +221,11 @@ public class YWAnalysis {
 
     /**
      * 解析检查信息消息pacsInfo
+     *
      * @param hisMessage
      * @return
      */
-    public List<MedPacsInfo> getPacsInfoToMsg(String hisMessage){
+    public List<MedPacsInfo> getPacsInfoToMsg(String hisMessage) {
         List<MedPacsInfo> medPacsInfoList = Lists.newLinkedList();
         MedPacsInfo medPacsInfo = new MedPacsInfo();
         try {
@@ -202,8 +238,14 @@ public class YWAnalysis {
             medPacsInfo.setRepType(null);//报告类型代码
             medPacsInfo.setRepName(terser.get("/.OBR-4-5"));//检查类型名称
             medPacsInfo.setPart(terser.get("/.OBR-4-2"));//检查部位
-            medPacsInfo.setRepDate(terser.get("/.OBR-22-1"));//发布时间
-            medPacsInfo.setCheckDate(terser.get("/.ORC-9-1"));//报告检查时间
+            if (StringUtils.isNotEmpty(terser.get("/.OBR-22-1"))) {
+                //发布时间
+                medPacsInfo.setRepDate(DateUtil.formatDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.OBR-22-1"), DateUtil.DATE_TIME_FORMAT), DateUtil.DATE_TIME_FORMAT)));
+            }
+            if (StringUtils.isNotEmpty(terser.get("/.ORC-9-1"))) {
+                //报告检查时间
+                medPacsInfo.setCheckDate(DateUtil.formatDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.ORC-9-1"), DateUtil.DATE_TIME_FORMAT), DateUtil.DATE_TIME_FORMAT)));
+            }
             medPacsInfo.setApplyDoctor(terser.get("/.ORC-12-3"));//申请医生
             medPacsInfo.setDeptId(terser.get("/.ORC-17-1"));//开单科室代码
             medPacsInfo.setDeptName(terser.get("/.ORC-17-2"));//开单科室名称
@@ -211,22 +253,25 @@ public class YWAnalysis {
             medPacsInfo.setReportDoctor(terser.get("/.ORC-12-3"));//报告医生
             medPacsInfo.setChecker(terser.get("/.ORC-11-3"));//报告审核医生
             medPacsInfo.setYjpdz(null);//云胶片地址
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         medPacsInfoList.add(medPacsInfo);
         return medPacsInfoList;
     }
+
     /**
      * 解析检查结果消息(视图获取/消息解析)
+     *
      * @param queryParam
      * @return
      */
     public List<MedPacsResult> getPacsResultToView(String queryParam) {
-        String queryLisResultSql = "SELECT * FROM AI_V_SENDPACSRESULTS t WHERE t.REPTNO='"+queryParam+"'";
+        String queryLisResultSql = "SELECT * FROM AI_V_SENDPACSRESULTS t WHERE t.REPTNO='" + queryParam + "'";
         List<MedPacsResult> medPacsResultList = tzDBConn.getPacsResult(queryLisResultSql);
         return medPacsResultList;
     }
+
     public List<MedPacsResult> getPacsResultToMsg(String hisMessage) {
         List<MedPacsResult> medPacsResultList = Lists.newLinkedList();
         MedPacsResult medPacsResult = new MedPacsResult();
@@ -238,10 +283,10 @@ public class YWAnalysis {
             medPacsResult.setBehospitalCode(terser.get("/.PV1-19-1"));
             medPacsResult.setReptName(terser.get("/.OBR-4-5"));
             medPacsResult.setPart(terser.get("/.OBR-4-2"));
-            if(terser.get("/.OBR-3-1").equals("IMP") && terser.get("/.OBR-2").equals("CE")){
+            if (terser.get("/.OBR-3-1").equals("IMP") && terser.get("/.OBR-2").equals("CE")) {
                 medPacsResult.setClinicSight(terser.get("/.OBX-5"));
             }
-            if(terser.get("/.OBR-3-1").equals("GDT") && terser.get("/.OBR-2").equals("TX")){
+            if (terser.get("/.OBR-3-1").equals("GDT") && terser.get("/.OBR-2").equals("TX")) {
                 medPacsResult.setReptDiag(terser.get("/.OBX-5"));
             }
             medPacsResult.setRemark(null);
@@ -259,10 +304,11 @@ public class YWAnalysis {
 
     /**
      * 解析化验信息消息lisInfo
+     *
      * @param hisMessage
      * @return
      */
-    public List<MedLisInfo> getLisInfoToMsg(String hisMessage){
+    public List<MedLisInfo> getLisInfoToMsg(String hisMessage) {
         List<MedLisInfo> medLisInfoList = Lists.newLinkedList();
         MedLisInfo medLisInfo = new MedLisInfo();
         try {
@@ -275,7 +321,7 @@ public class YWAnalysis {
             medLisInfo.setRepName(terser.get("/.OBR-4-2"));//报告名称
             medLisInfo.setRepTypeName(null);//检查类型名称
             medLisInfo.setSlideType(null);//标本名称
-            if(StringUtils.isNotEmpty(terser.get("/.OBR-22-1"))){
+            if (StringUtils.isNotEmpty(terser.get("/.OBR-22-1"))) {
                 //发布时间
                 medLisInfo.setRepDate(DateUtil.formatDate(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.OBR-22-1"), DateUtil.DATE_TIME_FORMAT), DateUtil.DATE_TIME_FORMAT)));
             }
@@ -283,22 +329,25 @@ public class YWAnalysis {
             medLisInfo.setApplyDoctor(terser.get("/.ORC-12-3"));//申请医生
             medLisInfo.setDeptId(terser.get("/.ORC-17-1"));//开单科室代码
             medLisInfo.setRegisterFlag(terser.get("/.OBR-25"));//报告单状态
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         medLisInfoList.add(medLisInfo);
         return medLisInfoList;
     }
+
     /**
      * 化验结果消息(视图获取/消息解析)
+     *
      * @param queryParam
      * @return
      */
     public List<MedLisResult> getLisResultToView(String queryParam) {
-        String queryLisResultSql = "SELECT * FROM AI_V_SENDLISRESULTS t WHERE t.REPTNO='"+queryParam+"'";
+        String queryLisResultSql = "SELECT * FROM AI_V_SENDLISRESULTS t WHERE t.REPTNO='" + queryParam + "'";
         List<MedLisResult> medLisResultList = tzDBConn.getLisResult(queryLisResultSql);
         return medLisResultList;
     }
+
     public List<MedLisResult> getLisResultToMsg(String hisMessage) {
         List<MedLisResult> medLisResultList = Lists.newLinkedList();
         try {
@@ -328,17 +377,52 @@ public class YWAnalysis {
 
     /**
      * 解析危急值结果(视图获取/消息解析)
+     *
      * @param queryParam
      * @return
      */
-    public List<MedCrisisInfo> getMedCrisisInfo(String queryParam) {
-        String queryLisResultSql = "SELECT * FROM AI_V_SENDCRISIS t WHERE t.REPTNO='"+queryParam+"'";
+    public List<MedCrisisInfo> getMedCrisisInfoToView(String queryParam) {
+        String queryLisResultSql = "SELECT * FROM AI_V_SENDCRISIS t WHERE t.REPTNO='" + queryParam + "'";
         List<MedCrisisInfo> medCrisisInfoList = tzDBConn.getMedCrisisInfo(queryLisResultSql);
         return medCrisisInfoList;
     }
 
     /**
-     *消息段循环
+     * 消息解析护理
+     *
+     * @param hisMessage
+     * @return
+     */
+    public List<MedNurse> getMedNurseToMsg(String hisMessage) {
+        List<MedNurse> medNurseList = Lists.newLinkedList();
+        try {
+            Message message = pipeParser.parse(hisMessage);
+            Terser terser = new Terser(message);
+            int OBXCount = hisMsgHeaderCounts(hisMessage,"OBX|");
+            for (int i = 0; i < OBXCount; i++) {
+                MedNurse medNurse = new MedNurse();
+                medNurse.setRepNo(terser.get("/.PV1-19-1")+"_"+terser.get("/.PID-3(1)-1")+"_"+i);
+                medNurse.setHospitalId(HOSPITAL_ID);
+                medNurse.setBehospitalCode(terser.get("/.PV1-19-1"));
+                if (StringUtils.isNotEmpty(terser.get("/.OBSERVATION(" + i + ")/OBX-14-1"))) {
+                    //测量时间
+                    medNurse.setMeasureTime(DateUtil.parseDate(YWDateUtils.convJsonDateToString(terser.get("/.OBX-14-1"), DateUtil.DATE_TIME_FORMAT), DateUtil.DATE_TIME_FORMAT));
+                }
+                medNurse.setItemName(terser.get("/.OBSERVATION(" + i + ")/OBX-3-2"));
+                medNurse.setItemValue(terser.get("/.OBSERVATION(" + i + ")/OBX-5"));
+                medNurse.setItemUnit(terser.get("/.OBSERVATION(" + i + ")/OBX-6-1"));
+                medNurse.setItemType(null);
+                medNurseList.add(medNurse);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return medNurseList;
+    }
+
+    /**
+     * 消息段循环
      */
     public int hisMsgHeaderCounts(String s, String ch) {
         //定义计数

+ 0 - 5
src/main/java/com/diagbot/vo/data/AMedicalRecordVO.java

@@ -9,11 +9,6 @@ import lombok.Setter;
 @Setter
 public class AMedicalRecordVO {
 
-    /*
-     * 历史recId
-     */
-    private String oldRecId;
-
 	private String recId;
 
     /**

+ 1 - 1
src/main/java/com/diagbot/vo/data/AMrContentVO.java

@@ -11,6 +11,6 @@ import java.util.List;
 public class AMrContentVO {
     @NotBlank(message = "对接模式类型编码不能为空")
     private String dockModeType;//对接模式类型编码,1:页面模式,2:接口引擎模式
-
+    private String transcode;//有值表示xml为空
     private List<AMedicalRecordVO> records;
 }

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

@@ -293,7 +293,7 @@
 
     <update id="updateBatchByKey">
         <foreach collection="list" item="item"  separator=";">
-            update med_pacs_info
+            update med_lis_info
             <set>
                 behospital_code = #{item.behospitalCode},
                 rep_type = #{item.repType},

+ 43 - 0
src/main/resources/mapper/MedNurseMapper.xml

@@ -0,0 +1,43 @@
+<?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.diagbot.mapper.MedNurseMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedNurse">
+        <result column="rep_no" property="repNo" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="measure_time" property="measureTime" />
+        <result column="item_name" property="itemName" />
+        <result column="item_value" property="itemValue" />
+        <result column="item_unit" property="itemUnit" />
+        <result column="item_type" property="itemType" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+    </resultMap>
+
+    <update id="updateBatchByKey">
+        <foreach collection="list" item="item"  separator=";">
+            update med_nurse
+            <set>
+                behospital_code = #{item.behospitalCode},
+                measure_time = #{item.measureTime},
+                item_name = #{item.itemName},
+                item_value = #{item.itemValue},
+                item_unit = #{item.itemUnit},
+                item_type = #{item.itemType},
+                <if test="item.gmtModified != null">
+                    gmt_modified = #{item.gmtModified},
+                </if>
+                <if test="item.modifier != null">
+                    modifier = #{item.modifier},
+                </if>
+            </set>
+            where rep_no = #{item.repNo} and hospital_id = #{item.hospitalId} and behospital_code=#{item.behospitalCode}
+        </foreach>
+    </update>
+
+</mapper>