package com.zskk.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.cron4j.ITask; import com.zskk.model.Doctors; import com.zskk.model.Exams; import com.zskk.model.Report; import com.zskk.model.Studies; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.log4j.Logger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.nio.charset.Charset; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class UpdateTask implements ITask { Logger logger = Logger.getLogger(UpdateTask.class); private static String GET_EXAM_URL = "https://risserver3.pacsonline.cn/butt/getExam"; private static String SAVE_REPORT_URL = "https://risserver3.pacsonline.cn/butt/saveReport"; private static CloseableHttpClient httpClient; static { PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(100); cm.setDefaultMaxPerRoute(20); cm.setDefaultMaxPerRoute(50); httpClient = HttpClients.custom().setConnectionManager(cm).build(); } @Override public void run() { // TODO Auto-generated method stub try { //List exams = Exams.dao.use("zskk").find("SELECT * FROM pacsonline.exams where exam_status=3 and institution_id=51000001 order by createdAt desc limit 50"); JSONArray examList = getExamList("51000001", 30); List exams = JSONObject.parseArray(examList.toJSONString(), Exams.class); for (Exams exams2 : exams) { logger.info(exams2.getId()); try { Studies studies = Studies.dao.use("zskk").findById(exams2.getStudyId()); Record record = Db.use("connected2").findFirst("select * from reportinfo where STUDYUID=?",studies.getStudyuid()); if (record == null) { continue; } Report report = new Report().use("zskk"); report.setId(creatId()); report.setReportDatetime(parseStringToDate(record.getStr("REPORTDATE"))); if (record.getStr("IMPRESSION") == null && record.getStr("DESCRIPTION") == null) { continue; } Map params = new HashMap<>(); //params.put("institution_id","51000001"); //exams表 params.put("exam_id",exams2.getId()); //报告医生姓名 params.put("report_doctor_name",record.getStr("REPORTDOCTOR")); //报告时间 params.put("report_datetime",record.getStr("REPORTDATE")); //审核医生姓名 params.put("review_doctor_name",record.getStr("REVIEWDOCTOR")); //审核时间 params.put("review_datetime",record.getStr("REPORTDATE")); //确认医生姓名 params.put("confirm_doctor_name",record.getStr("REVIEWDOCTOR")); //确认时间 params.put("confirm_datetime",record.getStr("REPORTDATE")); if (record.getStr("IMPRESSION") == null && record.getStr("DESCRIPTION") == null) { continue; } //意见建议 params.put("impression",record.getStr("IMPRESSION")); //影像所见 params.put("description",record.getStr("DESCRIPTION")); //exams表 //申请科室 params.put("application_department",record.getStr("DEPARTMENT")); //申请医生 params.put("application_doctor",record.getStr("CLINICALDOCTOR")); //临床诊断 params.put("clin_diag",record.getStr("DIAGNOSIS")); //patient_infos表 //患者姓名 params.put("name",record.getStr("PATIENTNAME")); //患者手机号 params.put("phone",record.getStr("phone")); //患者身份证号 params.put("card_num",record.getStr("IDCARD")); params.put("report_result","1"); String post = post(SAVE_REPORT_URL, JSON.toJSONString(params)); logger.error(post); /*report.setImpression(record.getStr("IMPRESSION")); report.setDescription(record.getStr("DESCRIPTION")); report.setExamId(exams2.getId()); report.setCreatedAt(new Date()); report.setReportDoctorId(getDoctorIdByName(record.getStr("REPORTDOCTOR"))); report.setReviewDoctorId(getDoctorIdByName(record.getStr("REVIEWDOCTOR"))); report.setReviewDatetime(parseStringToDate(record.getStr("REPORTDATE"))); report.setConfirmDoctorId(getDoctorIdByName(record.getStr("REVIEWDOCTOR"))); report.setConfirmDatetime(parseStringToDate(record.getStr("REPORTDATE"))); report.save(); PatientInfos patientInfos = PatientInfos.dao.use("zskk").findById(exams2.getPatientId()); patientInfos.setName(record.getStr("PATIENTNAME")); patientInfos.setPhone(record.getStr("PHONE")==null?"":record.getStr("PHONE")); patientInfos.setCardNum(record.getStr("IDCARD")==null?"":record.getStr("IDCARD")); patientInfos.update(); exams2.setApplicationDepartment(record.getStr("DEPARTMENT")); exams2.setApplicationDoctor(record.getStr("CLINICALDOCTOR")); exams2.setExamStatus(9); exams2.update(); WeixinService wService = ServiceFactory.getService(WeixinService.class); wService.requestWeixinQrcode(report.getId());*/ } catch (Exception e) { // TODO: handle exception continue; } } } catch (Exception e) { // TODO: handle exception } } @Override public void stop() { // TODO Auto-generated method stub } private String creatId() { UUID id=UUID.randomUUID(); String[] idd = id.toString().split("-"); return idd[0]+idd[1]+idd[2]; } private String getDoctorIdByName(String name) { if (name == null) { return null; } Doctors doctors = Doctors.dao.use("zskk").findFirst("SELECT * FROM doctors where instr(?,realname) and institution_id=51000001",name); if (doctors == null) { return null; } return doctors.getId(); } private Date parseStringToDate(String dateStr) { if (dateStr == null) { return new Date(); } SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = sdf.parse(dateStr); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return date; } /** * 获取未出报告的检查列表 * @param instutionId * @param number */ public static JSONArray getExamList(String instutionId, Integer number) { Map map = new HashMap(); map.put("institution_id", instutionId); map.put("num", number.toString()); String content = postWithParameters(GET_EXAM_URL, map); JSONObject jsonObject = JSON.parseObject(content); if (!jsonObject.getString("msg").equals("success")) { return null; } JSONArray jsonArray = JSON.parseArray(jsonObject.getString("data")); return jsonArray; } /** * 发送POST请求 * * @param url 目的地址 * @param parameters 请求参数,Map类型。 * @return 远程响应结果 */ public static String postWithParameters(String url, Map parameters) { String result = "";// 返回的结果 BufferedReader in = null;// 读取响应输入流 PrintWriter out = null; StringBuffer sb = new StringBuffer();// 处理请求参数 String params = "";// 编码之后的参数 try { // 编码请求参数 if (parameters.size() == 1) { for (String name : parameters.keySet()) { sb.append(name).append("=").append( java.net.URLEncoder.encode(parameters.get(name), "UTF-8")); } params = sb.toString(); } else { for (String name : parameters.keySet()) { sb.append(name).append("=").append( java.net.URLEncoder.encode(parameters.get(name), "UTF-8")).append("&"); } String temp_params = sb.toString(); //System.out.println(temp_params); params = temp_params.substring(0, temp_params.length() - 1); System.out.println(params); } //params = java.net.URLEncoder.encode(params, "UTF-8"); // 创建URL对象 java.net.URL connURL = new java.net.URL(url); // 打开URL连接 java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL .openConnection(); // 设置通用属性 httpConn.setRequestProperty("Accept", "*/*"); httpConn.setRequestProperty("Connection", "Keep-Alive"); httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); // 设置POST方式 httpConn.setDoInput(true); httpConn.setDoOutput(true); // 获取HttpURLConnection对象对应的输出流 // out = new PrintWriter(httpConn.getOutputStream()); // 用PrintWriter进行包装 // out.println(params); out = new PrintWriter(httpConn.getOutputStream()); // 发送请求参数 out.write(params); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应,设置编码方式 in = new BufferedReader(new InputStreamReader(httpConn .getInputStream(), "UTF-8")); String line; // 读取返回的内容 while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } public static String post(String url, String jsonString) { CloseableHttpResponse response = null; BufferedReader in = null; String result = ""; try { HttpPost httpPost = new HttpPost(url); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000).setConnectionRequestTimeout(30000).setSocketTimeout(30000).build(); httpPost.setConfig(requestConfig); httpPost.setConfig(requestConfig); httpPost.addHeader("Content-type", "application/json; charset=utf-8"); httpPost.setHeader("Accept", "application/json"); httpPost.setEntity(new StringEntity(jsonString, Charset.forName("UTF-8"))); response = httpClient.execute(httpPost); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); result = sb.toString(); //System.out.println(result); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != response) { response.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } }