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.

254 lines
11 KiB
Java

package com.docus.bgts.service;
4 years ago
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.docus.bgts.entity.AfCollectTask;
import com.docus.bgts.entity.ReportDownDto;
import com.docus.bgts.entity.ReportDownPatientDto;
import com.docus.bgts.entity.ReportDownScanFileDto;
import com.docus.bgts.enums.Codes;
import com.docus.bgts.facade.IAfCollectTaskService;
import com.docus.bgts.facade.IBgtsService;
import com.docus.bgts.utils.FileUtils;
import com.docus.bgts.utils.HttpUtils;
4 years ago
import com.docus.bgts.utils.JAXDynamicClientFactory;
import com.docus.bgts.utils.XmlUtils;
4 years ago
import org.apache.cxf.endpoint.Client;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class BgtsServiceImpl implements IBgtsService {
@Value("${ws.url}")
private String wsUrl;
@Value("${ws.localMethod}")
private String wsLocalMethod;
private Logger logger= LogManager.getLogger(BgtsServiceImpl.class);
@Autowired
IAfCollectTaskService afCollectTaskService;
@Override
4 years ago
public void collect(String empId) throws Exception {
//通过empId获取报告单号集合
List<String[]> exams = getExamNo(empId);
//通过报告单号集合采集
collectExams(exams, empId);
}
@Override
4 years ago
public void collectByExamNo(String emamNo, String empId) throws Exception {
String[] strings = new String[2];
//通过报告单号和系统id查询任务表
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
AfCollectTask afCollectTask = afCollectTaskService.getOne(new QueryWrapper<AfCollectTask>().eq("C1", emamNo).eq("sysflag", collectorid));
strings[0] = emamNo;
strings[1] = afCollectTask.getC2();
List<String[]> exams = new ArrayList<>();
exams.add(strings);
collectExams(exams, empId);
}
/**
*
*
* @param exams
* @param empId
*/
4 years ago
private void collectExams(List<String[]> exams, String empId) throws Exception {
//获取插入表数据
ReportDownDto reportDownDto = getUrlCreateReportDto(exams, empId);
//插入文件af_collect_task表数据
afCollectTaskService.insert(reportDownDto);
// reportDownDto.setTaskid(id);
//调用上传接口
Map<String, Object> headMap = new HashMap<>();
headMap.put("Content-Type", "application/json");
String post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), headMap, JSON.parseObject(JSON.toJSONString(reportDownDto), Map.class));
Map resMap = JSON.parseObject(post, Map.class);
System.out.println(resMap);
if (String.valueOf(resMap.get("code")).equals("500")) {
throw new RuntimeException(String.valueOf(resMap.get("msg")));
}
}
/**
* url
*
* @param exams
* @param empId
* @return
*/
4 years ago
private ReportDownDto getUrlCreateReportDto(List<String[]> exams, String empId) throws Exception {
ReportDownDto reportDownDto = new ReportDownDto();
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setJzh(empId);
reportDownDto.setPatient(reportDownPatientDto);
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
reportDownDto.setAssortid(assortid);
reportDownDto.setCollectorid(collectorid);
List<ReportDownScanFileDto> reportDownScanFileDtos = new ArrayList<>();
ReportDownScanFileDto reportDownScanFileDto;
int filesource = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource")));
int filestoragetype = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype")));
for (String[] exam : exams) {
reportDownScanFileDto = getScanByExam(exam);
reportDownScanFileDto.setFilesource(filesource);
reportDownScanFileDto.setFilestoragetype(filestoragetype);
reportDownScanFileDtos.add(reportDownScanFileDto);
}
reportDownDto.setScanfiles(reportDownScanFileDtos);
return reportDownDto;
}
/**
* ReportDownScanFileDto
*
* @param exam
* @return
*/
4 years ago
private ReportDownScanFileDto getScanByExam(String[] exam) throws Exception {
ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto();
reportDownScanFileDto.setSerialnum(exam[0]);
reportDownScanFileDto.setFiletitle(exam[1]);
// 1、创建document对象
Document document = DocumentHelper.createDocument();
// Element request = document.addElement("Request");
// Element msg = request.addElement("Msg");
// msg.addElement("EXAM_NO").setText(exam[0]);
// List<String> bgtsDetailParam = (List<String>) FileUtils.getJsonByName("bgtsDetailParam");
// Element request = null;
// for (int i = 0; i < bgtsDetailParam.size(); i++) {
// if (i == 0) {
// request = document.addElement(bgtsDetailParam.get(i));
// } else {
// request = request.addElement(bgtsDetailParam.get(i));
// }
// }
Element esbEntry = document.addElement("ESBEntry");
Element request = HttpUtils.reqElement(esbEntry,0);
request.addElement("EXAM_NO").setText(exam[0]);
String resXml = invokeWs(esbEntry.asXML());
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
// List<String> dis = new ArrayList<>();
// dis.add("MsgInfo");
// dis.add("Msg");
// dis.add("ReportInfo");
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsDetailRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
reportDownScanFileDto.setDownurl(element.element(String.valueOf(FileUtils.getJsonByName("pdfUrl"))) == null ? "" : element.element(String.valueOf(FileUtils.getJsonByName("pdfUrl"))).getText());
return reportDownScanFileDto;
}
/**
* empId
*
* @param empId
* @return
*/
private List<String[]> getExamNo(String empId) throws Exception {
List<String[]> exams = new ArrayList<>();
// 1、创建document对象
Document document = DocumentHelper.createDocument();
// Element request = document.addElement("Request");
// Element msg = request.addElement("Msg");
// msg.addElement("EMPI_ID").setText(empId);
// List<String> bgtsParam = (List<String>) FileUtils.getJsonByName("bgtsParam");
// Element request = null;
// for (int i = 0; i < bgtsParam.size(); i++) {
// if (i == 0) {
// request = document.addElement(bgtsParam.get(i));
// } else {
// request = request.addElement(bgtsParam.get(i));
// }
// }
Element esbEntry = document.addElement("ESBEntry");
Element reqElement = HttpUtils.reqElement(esbEntry,1);
reqElement.addElement("EMPI_ID").setText(empId);
logger.info("-------根据患者主索引号查询多个报告单号,地址:"+wsUrl+",方法:"+wsLocalMethod+"---------");
String xml = esbEntry.asXML();
logger.info("---------------------------");
logger.info(xml);
logger.info("----------------------------");
String resXml = invokeWs(xml);
logger.info("---------返回值-------------");
logger.info(resXml);
logger.info("-----------------------------");
//解析XML
XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(resXml.getBytes("UTF-8")));
// List<String> dis = new ArrayList<>();
// dis.add("MsgInfo");
// dis.add("Msg");
List<String> dis = (List<String>) FileUtils.getJsonByName("bgtsRespon");
//数据所在节点
Element element = xmlUtils.getElement(dis);
List<Element> examInfos = element.elements("ExamInfo");
Element examNo;
String[] key;
for (Element examInfo : examInfos) {
key = new String[2];
examNo = examInfo.element(String.valueOf(FileUtils.getJsonByName("examNo")));
if (examNo != null) {
key[0] = examNo.getText();
}
Element examItemInfo = examInfo.element("ExamItemInfo");
if (examItemInfo != null) {
key[1] = examItemInfo.element(String.valueOf(FileUtils.getJsonByName("examItemName"))).getText();
}
exams.add(key);
}
return exams;
}
4 years ago
/**
* web service
* @param xml
* @return
* @throws Exception
*/
public String invokeWs(String xml) throws Exception {
// Object[] object = new Object[]{xml};//请求参数
// org.apache.axis.client.Service service = new org.apache.axis.client.Service();
// Call call = (Call) service.createCall();
// call.setTargetEndpointAddress(wsUrl);// 远程调用路径
// // 调用的命名空间和方法名
//// call.setOperationName(new QName(wsNamespaceUrl, wsLocalMethod));
// call.setOperationName(wsLocalMethod);
// call.setUseSOAPAction(true);
//// call.setSOAPActionURI(wsNamespaceUrl + "pushSurveyReport");
// call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);
// call.setReturnType(XMLType.XSD_STRING);// 返回值类型String
// call.setTimeout(100000);//超时
// String result = (String) call.invoke(object);// 远程调用
// System.out.println(result);
logger.info("-----\n客户端调用服务端"+wsUrl+"方法:"+wsLocalMethod+"\n------------");
4 years ago
JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance();
Client client = dcf.createClient(wsUrl);
Object[] objects = client.invoke(wsLocalMethod,xml);
String str = objects[0].toString();
logger.info("----------结果---------");
logger.info(str);
4 years ago
return str;
}
}