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 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 * 30) public void ruyuan() { log.info("----------开始采集------------"); log.info("-----采集时间:"+oneDate); Date twoDate = new Date(); //获取jzh列表 List jzhs = afCollectTaskService.listJZHByDate(oneDate, twoDate); int size = jzhs.size(); log.info("-------本次采集数:" + size); if(size==0){ oneDate=twoDate; log.info("------------采集结束-----------------"); return; } Object[] params; List keys = new ArrayList<>(); keys.add("action"); keys.add("message"); XmlUtils xmlUtils; List zyDirectory = (List) 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 headMap = new HashMap<>(); headMap.put("Content-Type", "application/json"); for (String jzh : jzhs) { try { params = new Object[]{"flow-mra-queryencounterpdf", "\n" + "\n" + "" + jzh + "\n" + "\n" + ""}; res = requestFunctionWebService(params, url, methodName, namespance, keys); log.info("返回值:" + res); xmlUtils = new XmlUtils(new ByteArrayInputStream(res.getBytes("UTF-8"))); element = xmlUtils.getElement(zyDirectory); List 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 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 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; } }