You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

278 lines
15 KiB
Java

package com.ann.demo.interfaces.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ann.demo.entity.constant.AliasName;
import com.ann.demo.entity.constant.InterfaceName;
import com.ann.demo.entity.constant.WebserviceId;
import com.ann.demo.entity.filing.ArchiveDetail;
import com.ann.demo.entity.filing.MessageSubordinate;
import com.ann.demo.entity.filing.dto.MessageDto;
import com.ann.demo.entity.filing.dto.PatientMainDto;
import com.ann.demo.entity.interfaceEntity.*;
import com.ann.demo.interfaces.HomepageDictionary;
import com.ann.demo.repository.ArchiveMasterRepository;
import com.ann.demo.service.*;
import com.ann.demo.utils.XMLUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.jws.WebService;
import java.util.Date;
import java.util.Objects;
/**
* @Author: LeiJiaXin
* @Date: 2019/6/11 17:01
*/
@WebService(serviceName = "HomepageDictionary", // 与接口中指定的name一致
targetNamespace = "http://interfaces.demo.ann.com/", // 与接口中的命名空间一致,一般是接口的包名倒
endpointInterface = "com.ann.demo.interfaces.HomepageDictionary"// 接口地址
)
public class HomepageDictionaryImpl implements HomepageDictionary {
private static final Logger logger = LoggerFactory.getLogger(HomepageDictionaryImpl.class);
@Autowired
private MessageService messageService;
@Autowired
private MessageSubordinateService messageSubordinateService;
@Autowired
private ArchiveDetailService archiveDetailService;
@Autowired
private ArchiveMasterRepository archiveMasterRepository;
@Override
public String NurseData(String xmlStr) {
String outContent = "失败";
try {
// 1、定义变量
boolean flag = false;
Integer result = 0;
String type = "", patientMainStr = null,remark = null,masterId = null;
ArchiveMaster archiveMaster ;
long startTime = System.currentTimeMillis();
Date xmlCreateTime = null;
MessageLog messageLog = new MessageLog(xmlStr, InterfaceName.NURSE_DATA, new Date(), WebserviceId.NURSE_DATA);
messageService.save(messageLog);
// 2、 解析
MessageDto messageDto = XMLUtils.xpathToBean(xmlStr, EMRData.class, InterfaceName.NURSE_DATA);
if (messageDto != null) {
archiveMaster = archiveMasterRepository.findByInpNoAndVisitIdAndIsValid(messageDto.getInpNo(),messageDto.getVisitId(),0);
if(archiveMaster != null){
masterId = archiveMaster.getId();
// 区分类型
String reportType = messageDto.getType();
if (reportType != null) {
if (AliasName.NURSE_MAP.containsKey(reportType)) {
String subType = messageDto.getSubType();
if (AliasName.NURSE_MAP.containsKey(subType)) {
type = AliasName.NURSE_MAP.get(subType);
} else {
// 如果都不包含,但是有大类 那么归为其他记录
if (subType != null && !subType.equals("")) {
type = AliasName.OTHER;
} else {
type = AliasName.NURSE_MAP.get(reportType);
}
}
messageDto.setType(type);
}
if(! (archiveMaster.getArchiveState().equals("初审") || archiveMaster.getArchiveState().equals("已归档"))){
String addFlag = messageDto.getAddFlag();
if(Objects.equals(addFlag,"delete") || Objects.equals(addFlag,"update") || Objects.equals(addFlag,"insert")){
if(Objects.equals(messageDto.getIsOld(),"0")){
if(messageDto.getType().equals("20")){
messageDto.setType("8");
}
messageDto.setApplyId(messageDto.getInpNo() + "-" + messageDto.getVisitId()+"-nurse-"+messageDto.getCommitTime());
remark = archiveDetailService.updateAllFlag(messageDto.getApplyId(), messageDto.getSource());
}else if(Objects.equals(messageDto.getIsOld(),"1")){
ArchiveDetail archiveDetail = archiveDetailService.isExit(archiveMaster.getId(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId());
if(archiveDetail == null && !Objects.equals(addFlag,"insert")){
remark = messageDto.getSubType()+"没有生成对应的文件不能"+addFlag;
}else{
if(Objects.equals(addFlag,"delete")){
if(!archiveDetailService.delete(archiveDetail.getId())){
remark = messageDto.getSubType()+"删除失败!";
}else{
remark = "ok";
}
}
}
}else{
remark = "数据有问题";
}
}else{
remark = "标识不包括insert/update/delete";
}
}else{
remark = "该病历已"+archiveMaster.getArchiveState()+",不再接收";
}
}
// 保存消息从属表xmlCreateTime
xmlCreateTime = messageDto.getXmlCreateTime();
}else{
remark = "没有入院消息";
}
} else {
remark = "传过来的消息无法解析";
}
if(remark == null || remark.equals("ok") ){
result = 1;
flag = true;
patientMainStr = JSON.toJSONString(new PatientMainDto(messageDto.getInpNo(), messageDto.getVisitId()), SerializerFeature.WriteMapNullValue);
}
// 4、判断是否成功 失败 的原因 我们插入报错 然后无法解析xml 传入参数为null
outContent = AnalysisService.getReturnResult(flag,remark);
// 更新日志表
long endTime = System.currentTimeMillis();
messageLog.setValue(masterId,outContent, result, messageDto == null ? "" : JSON.toJSONString(messageDto), xmlCreateTime, (endTime - startTime), new Date(), type,remark);
messageService.save(messageLog);
if( remark == null && flag){
messageSubordinateService.save(new MessageSubordinate(messageLog.getId(), patientMainStr, JSON.toJSONString(messageLog)));
}
}catch (Exception e){
try {
logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e,e.getStackTrace()[0]);
return AnalysisService.getReturnResult(false,e.toString());
} catch (Exception e1) {
logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e1,e1.getStackTrace()[0]);
return outContent;
}
}
return outContent;
}
@Override
public String DoctorData(String xmlStr) {
String outContent = "失败";
try {
// 1、定义变量
boolean flag = false;
Integer result = 0;
String type = "", patientMainStr = null,remark = null,masterId = null;
ArchiveMaster archiveMaster ;
long startTime = System.currentTimeMillis();
Date xmlCreateTime = null;
MessageLog messageLog = new MessageLog(xmlStr, InterfaceName.DOCTOR_DATA, new Date(),WebserviceId.DOCTOR_DATA);
messageService.save(messageLog);
// 2、 解析
MessageDto messageDto = XMLUtils.xpathToBean(xmlStr, EMRData.class, InterfaceName.DOCTOR_DATA);
if (messageDto != null) {
archiveMaster = archiveMasterRepository.findByInpNoAndVisitIdAndIsValid(messageDto.getInpNo(),messageDto.getVisitId(),0);
if(archiveMaster != null) {
masterId = archiveMaster.getId();
// 区分类型
String reportType = messageDto.getType();
if (reportType != null) {
// 分配类型
if (AliasName.DOCTOR_MAP.containsKey(reportType)) {
String subType = messageDto.getSubType();
if (AliasName.DOCTOR_MAP.containsKey(subType)) {
type = AliasName.DOCTOR_MAP.get(subType);
} else {
// 如果都不包含,但是有大类 那么归为其他记录
if (subType != null && !subType.equals("")) {
type = AliasName.OTHER;
} else {
type = AliasName.DOCTOR_MAP.get(reportType);
}
}
messageDto.setType(type);
}
if(! (archiveMaster.getArchiveState().equals("初审") || archiveMaster.getArchiveState().equals("已归档") )){
String addFlag = messageDto.getAddFlag();
if(Objects.equals(addFlag,"delete") || Objects.equals(addFlag,"update") || Objects.equals(addFlag,"insert")){
if(Objects.equals(messageDto.getIsOld(),"0")){
messageDto.setApplyId(messageDto.getInpNo() + "-" + messageDto.getVisitId()+"-doctor-"+messageDto.getCommitTime());
remark = archiveDetailService.updateAllFlag(messageDto.getApplyId(), messageDto.getSource());
}else if(Objects.equals(messageDto.getIsOld(),"1")){
ArchiveDetail archiveDetail = archiveDetailService.isExit(archiveMaster.getId(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId());
if(archiveDetail == null && !Objects.equals(addFlag,"insert")){
remark = messageDto.getSubType()+"没有生成对应的文件不能"+addFlag;
}else{
if(Objects.equals(addFlag,"delete")){
if(!archiveDetailService.delete(archiveDetail.getId())){
remark = messageDto.getSubType()+"删除失败!";
}else{
remark = "ok";
}
}
}
}else{
remark = "数据有问题";
}
}else{
remark = "标识不包括insert/update/delete";
}
}else{
remark = "该病历已"+archiveMaster.getArchiveState()+",不再接收";
}
// 根据住院次数 患者id 查询是否存在记录 如果存在 那么就作废
// messageDto.setApplyId(messageDto.getInpNo() + "-" + messageDto.getVisitId() + "-doctor-" + messageDto.getCommitTime());
// if((archiveMaster.getArchiveState().equals("初审") || archiveMaster.getArchiveState().equals("已归档") ||
// archiveMaster.getArchiveState().equals("复审退回") )){
// String temp = archiveDetailService.updateAllFlag(messageDto.getApplyId(), messageDto.getSource());
// if (temp != null) {
// messageLog.setRemark(temp);
// } else {
// result = 1;
// flag = true;
// patientMainStr = JSON.toJSONString(new PatientMainDto(messageDto.getInpNo(), messageDto.getVisitId()), SerializerFeature.WriteMapNullValue);
// }
// messageLog.setRemark("该病历已"+archiveMaster.getArchiveState()+",不再接收");
// }
// else{
//
// }
}
xmlCreateTime = messageDto.getXmlCreateTime();
}else{
remark = "没有入院消息。。";
}
} else {
remark = "传过来的消息无法解析。。";
}
if(remark == null || remark.equals("ok")){
result = 1;
flag = true;
patientMainStr = JSON.toJSONString(new PatientMainDto(messageDto.getInpNo(), messageDto.getVisitId()), SerializerFeature.WriteMapNullValue);
}
// 4、判断是否成功 失败 的原因 我们插入报错 然后无法解析xml 传入参数为null
outContent = AnalysisService.getReturnResult(flag,remark);
// 更新日志表
long endTime = System.currentTimeMillis();
messageLog.setValue(masterId,outContent, result, messageDto == null ? "" : JSON.toJSONString(messageDto), xmlCreateTime, (endTime - startTime), new Date(), type,remark);
messageService.save(messageLog);
if( remark == null && flag){
messageSubordinateService.save(new MessageSubordinate(messageLog.getId(), patientMainStr, JSON.toJSONString(messageLog)));
}
}catch (Exception e){
try {
logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e,e.getStackTrace()[0]);
return AnalysisService.getReturnResult(false,e.toString());
} catch (Exception e1) {
logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e1,e1.getStackTrace()[0]);
}
}
return outContent;
}
}