package com.zskk.task; import com.alibaba.fastjson.JSON; 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.PatientInfos; import com.zskk.model.Report; import com.zskk.service.ServiceFactory; import com.zskk.service.WeixinService; import org.apache.commons.codec.digest.DigestUtils; import java.io.*; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class DataTask implements ITask { @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=15700002 order by createdAt desc limit 30"); for (Exams exams2 : exams) { //Studies studies = Studies.dao.use("zskk").findById(exams2.getStudyId()); Record record = Db.use("connected").findFirst("select * from zskk where accessionNumber=?",exams2.getAccessionNum()); 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; } 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")); patientInfos.setCardNum(record.getStr("idcard")); patientInfos.update(); exams2.setExamStatus(9); exams2.setClinDoctors(record.getStr("clinicaldoctor")); exams2.setApplicationDepartment(record.getStr("department")); exams2.setApplicationDoctor(record.getStr("clinicaldoctor")); exams2.setClinDiag(record.getStr("diagnosis")); exams2.update(); //传云医康 数据 Map params = new HashMap<>(10); Map data = new HashMap<>(22); //获取data数据 //医院id data.put("hospital_id","15700002"); //影像所见 data.put("description",record.getStr("DESCRIPTION")); //意见建议 data.put("impression",record.getStr("impression")); //检查id data.put("exam_id",exams2.getId()); //患者id data.put("patient_id",exams2.getPatientId()); //患者姓名 data.put("patient_name",record.getStr("patientname")); //患者性别 data.put("patient_sex",record.getStr("patientsex")); //身份证号 data.put("card_num",record.getStr("idcard")); //手机号 data.put("phone",record.getStr("phone")); //患者生日 data.put("birthday",record.getStr("birthdate")); //患者检查时年龄 data.put("patient_age",record.getStr("patientage")); //阴阳性 1阴性 2阳性 //data.put("report_result",""); //报告时间 10位时间戳 data.put("report_datetime",returnSecondTimestamp(record.getStr("reportdate"))); //报告医生id //data.put("report_doctor_id",); //报告医生姓名 data.put("report_doctor_name",record.getStr("reportdoctor")); //审核时间 data.put("review_datetime",returnSecondTimestamp(record.getStr("reportdate"))); //审核医生id //data.put("review_doctor_id",); //审核姓名 data.put("review_doctor_name",record.getStr("reviewdoctor")); //确认时间 data.put("confirm_datetime", returnSecondTimestamp(record.getStr("reportdate"))); //确认医生id //data.put("confirm_doctor_id", ); //确认医生姓名 data.put("confirm_doctor_name",record.getStr("clinicaldoctor")); //时间戳 params.put("timestamp", String.valueOf(getSecondTimestamp(new Date()))); //signature params.put("signature", getSign(data, "YgpxjVeIx0yoK6Atz413IAj7hU9dygH4")); //datajson字符串 params.put("data", JSON.toJSONString(data)); System.out.println(params); //调用接口 sendPost("https://pacs.yunyikang.cn/pacs/zskk/writePatientReport", params); WeixinService wService = ServiceFactory.getService(WeixinService.class); wService.requestWeixinQrcode(report.getId());; } } catch (Exception e) { // TODO: handle exception } } /** * * 功能描述: 获取当前时间戳(秒) * * @param: [date] * @return: int * @auther: zzp * @date: 2019/12/26 18:26 */ public String getSecondTimestamp(Date date) { if (null == date) { return "参数为空"; } String timestamp = String.valueOf(date.getTime()); int length = timestamp.length(); if (length > 3) { return String.valueOf(timestamp.substring(0, length - 3)); } else { return "参数不足3位数"; } } /** * * 功能描述: 对数组的值按key排序,生成url的形式(http_build_query) * * @param: [map] * @return: java.lang.String * @auther: zzp * @date: 2019/12/26 19:21 */ public String Ksort(Map map) { String sb = ""; String[] key = new String[map.size()]; int index = 0; for (String k : map.keySet()) { key[index] = k; index++; } Arrays.sort(key); for (String s : key) { sb += s + "=" + map.get(s) + "&"; } sb = sb.substring(0, sb.length() - 1); try { sb = URLEncoder.encode(sb, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }// 使用常见的UTF-8编码 return sb.replace("%3D", "=").replace("%26", "&"); } /** * * 功能描述:生成signature * * @param: [param, key] * @return: java.lang.String * @auther: zzp * @date: 2019/12/24 15:28 */ public String getSign(Map param, String key) { return DigestUtils.md5Hex(Ksort(param) + key); } /** * * 功能描述: 转时间戳(秒) * * @param: * @return: * @auther: zpp * @date: 2019/12/26 18:26 */ public String returnSecondTimestamp(String data) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return String.valueOf(sdf.parse(data).getTime()/1000); } @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=15700002 and realname<>null",name); if (doctors == null) { Doctors newDoctors = new Doctors().use("zskk"); newDoctors.setId(creatId()); newDoctors.setUsername("none"); newDoctors.setRealname(name); newDoctors.setPassword("123456"); newDoctors.setInstitutionId("15700002"); newDoctors.setCreatedAt(new Date()); newDoctors.setUpdatedAt(new Date()); newDoctors.save(); return newDoctors.getId(); } 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; } /** * 发送POST请求 * * @param url 目的地址 * @param parameters 请求参数,Map类型。 * @return 远程响应结果 */ public static String sendPost(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(); params = temp_params.substring(0, temp_params.length() - 1); } // 创建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()); // 发送请求参数 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; } }