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.

230 lines
10 KiB
Java

package com.docus.bgts.config;
import com.alibaba.fastjson.JSON;
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.IMrReportErrorService;
import com.docus.bgts.utils.FileUtils;
import com.docus.bgts.utils.HttpUtils;
import com.docus.bgts.utils.XmlUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.axis.client.Call;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.ByteArrayOutputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.io.ByteArrayInputStream;
import java.io.PrintStream;
import java.net.URISyntaxException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
@Component
public class MyScheduling {
public static Date oneDate;
public static String namespance = "";
private static String methodName = "";
private static String url;
private static String pdfUrl;
static {
url = String.valueOf(FileUtils.getJsonByName("zyUrl"));
methodName = String.valueOf(FileUtils.getJsonByName("zyMethod"));
pdfUrl = String.valueOf(FileUtils.getJsonByName("pdfUrl"));
namespance = String.valueOf(FileUtils.getJsonByName("zyNamespance"));
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
try {
oneDate = fmt.parse(String.valueOf(FileUtils.getJsonByName("zysj")));
} catch (ParseException e) {
e.printStackTrace();
}
}
@Autowired
private IMrReportErrorService mrReportErrorService;
@Autowired
private IAfCollectTaskService afCollectTaskService;
@Value("${beat.url}")
private String beatUrl;
private Logger logger = LogManager.getLogger(MyScheduling.class);
//10分钟执行一次
@Scheduled(fixedRate = 1000 * 60 * 5)
public void beat() {
logger.info("------------心跳开始---------------");
Map<String, String> params = new HashMap<>();
params.put("code", String.valueOf(FileUtils.getJsonByName("collectorid")));
try {
HttpUtils.get(beatUrl, params);
} catch (URISyntaxException e) {
e.printStackTrace();
logger.info("心跳推送出错,可能是住院服务没有开启");
} finally {
logger.info("-------------心跳结束---------------");
}
}
//10分钟执行一次
@Scheduled(fixedRate = 1000 * 60 * 60 * 5)
public void ruyuan() {
log.info("----------开始采集------------");
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = fmt.format(oneDate);
log.info("-----采集时间:开始时间:"+ format);
Date twoDate = new Date();
String format1 = fmt.format(twoDate);
log.info("-----采集时间:结束时间:"+ format1);
//获取jzh列表
List<String> jzhs = afCollectTaskService.listJZHByDate(format, format1);
int size = jzhs.size();
log.info("-------本次采集数:" + size);
if(size==0){
oneDate=twoDate;
log.info("------------采集结束-----------------");
return;
}
Object[] params;
List<String> keys = new ArrayList<>();
keys.add("action");
keys.add("message");
XmlUtils xmlUtils;
List<String> zyDirectory = (List<String>) FileUtils.getJsonByName("zyDirectory");
String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
String filesource = String.valueOf(FileUtils.getJsonByName("filesource"));
String filestoragetype = String.valueOf(FileUtils.getJsonByName("filestoragetype"));
String res;
Element element;
Map<String, Object> headMap = new HashMap<>();
headMap.put("Content-Type", "application/json");
for (String jzh : jzhs) {
try {
params = new Object[]{"flow-mra-queryencounterpdf", "<Req>\n" +
"<Params>\n" +
"<ENCT_ID>" + jzh + "</ENCT_ID>\n" +
"</Params>\n" +
"</Req>"};
res = requestFunctionWebService(params, url, methodName, namespance, keys);
log.info("返回值:" + res);
xmlUtils = new XmlUtils(new ByteArrayInputStream(res.getBytes("UTF-8")));
element = xmlUtils.getElement(zyDirectory);
List<Element> items = element.elements("ITEM");
if (items == null || items.size() <= 0) {
throw new RuntimeException("查询到的信息不存在");
}
ReportDownDto reportDownDto = new ReportDownDto();
reportDownDto.setCollectorid(collectorid);
reportDownDto.setAssortid(assortid);
ReportDownPatientDto reportDownPatientDto = new ReportDownPatientDto();
reportDownPatientDto.setJzh(jzh);
reportDownDto.setPatient(reportDownPatientDto);
List<ReportDownScanFileDto> scanFileDtos = new ArrayList<>();
ReportDownScanFileDto reportDownScanFileDto;
for (Element item : items) {
Element pdfId = item.element("PDF_ID");
if (pdfId != null && StringUtils.isNotBlank(pdfId.getText())) {
//采集流水号
String pdfIdText = pdfId.getText();
//文件标题
String fileTitle = item.element("MED_REC_CAT_NAME").getText();
//url地址
String pdf = pdfUrl + pdfIdText;
reportDownScanFileDto = new ReportDownScanFileDto();
reportDownScanFileDto.setFiletitle(fileTitle);
reportDownScanFileDto.setFilesource(Integer.parseInt(filesource));
reportDownScanFileDto.setFilestoragetype(Integer.parseInt(filestoragetype));
reportDownScanFileDto.setSerialnum(pdfIdText);
reportDownScanFileDto.setDownurl(pdf);
scanFileDtos.add(reportDownScanFileDto);
} else {
log.info("记账号:", jzh + "不存在pdfId");
size--;
throw new RuntimeException("记账号:" + jzh + "不存在pdfId");
}
}
log.info("文件信息:" + scanFileDtos);
reportDownDto.setScanfiles(scanFileDtos);
afCollectTaskService.insert(reportDownDto);
String post = "";
logger.info("--------执行上传功能----------");
Map paramMap = JSON.parseObject(JSON.toJSONString(reportDownDto), Map.class);
logger.info("上传参数:" + paramMap);
post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), headMap, paramMap);
// String post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), map, headMap);
if (StringUtils.isBlank(post)) {
logger.info("--------上传时出现错误,可能是文件服务没有启动----------");
throw new RuntimeException("上传时出现错误,可能是文件服务没有启动");
}
Map resMap = JSON.parseObject(post, Map.class);
if (String.valueOf(resMap.get("code")).equals("500")) {
throw new RuntimeException(String.valueOf(resMap.get("msg")));
} else {
logger.info("----------执行成功,当前最后更新日期" + twoDate + "-----------");
}
} catch (Exception e) {
log.info(e.getMessage());
e.printStackTrace();
size--;
mrReportErrorService.insert(jzh);
}
}
log.info("-------本次成功采集数:" + size);
// oneDate = twoDate;
}
private String requestFunctionWebService(Object[] params,
String url,
String methodName,
String namespance,
List<String> parameterNames) {
String result = "";
if (null != params) {
try {
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(namespance, methodName));
for (int i = 0; i < parameterNames.size(); i++) {
call.addParameter(parameterNames.get(i), XMLType.XSD_STRING, ParameterMode.IN);//接口的参数
}
call.setReturnType(XMLType.XSD_STRING);//设置返回类型
result = (String) call.invoke(params);
} catch (Exception e) {
e.printStackTrace();
//方法名
ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
String exception = baos.toString();
log.error("requestFunctionWebService请求接口异常" + exception);
}
}
return result;
}
}