package com.zskk.task; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.commons.codec.digest.DigestUtils; import com.alibaba.fastjson.JSON; import com.jfinal.kit.HashKit; 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.model.Studies; import com.zskk.service.ThreadPoolService; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class UpdateTask implements ITask { private static final OkHttpClient OKHTTP_CLIENT = new OkHttpClient(); @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='03060001' and patient_num like 'T%' order by createdAt desc limit 50"); for (Exams exams2 : exams) { try { // Studies studies = Studies.dao.use("zskk").findById(exams2.getStudyId()); Record record = Db.use("connected2").findFirst("select * from reportinfo where studyuid=?", exams2.getPatientNum()); if (record == null) { continue; } Report report = new Report().use("zskk"); report.setId(creatId()); report.setReportDatetime(parseStringToDate(record.getStr("reportdate"))); if (record.getStr("description") == null || record.getStr("impression") == null || record.getStr("description").isBlank()) { 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")==null?"":record.getStr("phone")); patientInfos.setCardNum(record.getStr("idcard")==null?"":record.getStr("idcard")); patientInfos.update(); exams2.setExamStatus(9); // String patString = record.getStr("住院号"); // Integer length = patString.length(); // patString = String.format("%0"+length+"d",Long.valueOf(patString)); // exams2.setHopitalizedNo(patString); // exams2.setClinDoctors(record.getStr("CLINICALDOCTOR")); exams2.setApplicationDepartment(record.getStr("department")); exams2.setApplicationDoctor(record.getStr("clinicaldoctor")); // exams2.setClinDiag(record.getStr("diagnosis")); exams2.update(); // 传云医康 数据 Map data = new HashMap(); // 获取data数据 // 医院id data.put("hospital_id", "03060001"); // 影像所见 data.put("description", record.getStr("description")); // 意见建议 data.put("impression", record.getStr("impression")); // 检查id data.put("exam_id", exams2.getId()); data.put("study_id", exams2.getStudyId()); // 患者id data.put("patient_id", exams2.getPatientId()); // 患者姓名 data.put("patient_name", record.getStr("patientname")); // 患者性别 data.put("patient_sex", patientInfos.getSex()); // 身份证号 data.put("card_num", record.getStr("idcard")==null?"":record.getStr("idcard")); // 手机号 data.put("phone", patientInfos.getPhone()); // 患者生日 data.put("birthday", patientInfos.getBirthday()==null?"":patientInfos.getBirthday()); // 患者检查时年龄 data.put("patient_age", patientInfos.getAge()==null?"":patientInfos.getAge()); // 阴阳性 1阴性 2阳性 data.put("report_result", record.getStr("result").contains("阴")?"1":"2"); // 报告时间 10位时间戳 data.put("report_datetime", returnSecondTimestamp(record.getStr("reportdate"))); // 报告医生id data.put("report_doctor_id", record.getStr("reportdoctor")==null?"":record.getStr("reportdoctor")); // 报告医生姓名 data.put("report_doctor_name", record.getStr("reportdoctor")==null?"":record.getStr("reportdoctor")); // 审核时间 data.put("review_datetime", returnSecondTimestamp(record.getStr("reportdate"))); // 审核医生id data.put("review_doctor_id", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor")); // 审核姓名 data.put("review_doctor_name", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor")); // 确认时间 data.put("confirm_datetime", returnSecondTimestamp(record.getStr("reportdate"))); // 确认医生id data.put("confirm_doctor_id", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor")); // 确认医生姓名 data.put("confirm_doctor_name", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor")); data.put("patient_no", ""); ThreadPoolService tService = new com.zskk.service.ThreadPoolService(); tService.execute(() -> { String dadaString = JSON.toJSONString(data); dadaString = dadaString.replace("\\r", ""); dadaString = dadaString.replace("\\n", ""); dadaString = dadaString.replace("*", "X"); dadaString = dadaString.replace("

", ""); dadaString = dadaString.replace("
", ""); dadaString = dadaString.replace("

", ""); dadaString = dadaString.replace("/", "-"); dadaString = dadaString.replace("  ", ""); Map maps = (Map) JSON.parse(dadaString); try { post(null, maps); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }); } catch (Exception e) { // TODO: handle exception continue; } } } catch (Exception e) { // TODO: handle exception } } private static void post(String url, Map map) throws IOException { RequestBody formBody = new FormBody.Builder().add("timestamp", String.valueOf(getSecondTimestamp(new Date()))) .add("signature", Ksort(map)).add("data", JSON.toJSONString(map)).build(); Request request = new Request.Builder().url("http://39.106.136.96/pacs/zskk/writePatientReport").post(formBody) .build(); try (Response response = OKHTTP_CLIENT.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(response.body().string()); // return response.body().string(); } } /** * * 功能描述: 获取当前时间戳(秒) * * @param: [date] * @return: int * @auther: zzp * @date: 2019/12/26 18:26 */ public static 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 static 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编码 sb = sb.replace("%3D", "=").replace("%26", "&"); String resultString = HashKit.md5(sb + "YgpxjVeIx0yoK6Atz413IAj7hU9dygH4"); return resultString; } /** * * 功能描述:生成signature * * @param: [param, key] * @return: java.lang.String * @auther: zzp * @date: 2019/12/24 15:28 */ public static 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"); 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 || name.isBlank()) { return null; } name = name.replace(" ", ""); Doctors doctors = Doctors.dao.use("zskk").findFirst( "SELECT * FROM doctors where instr(?,realname) and institution_id='03060001' and realname <>''", name); if (doctors == null) { Doctors newDoctors = new Doctors().use("zskk"); newDoctors.setId(creatId()); newDoctors.setUsername("none"); newDoctors.setRealname(name); newDoctors.setPassword("123456"); newDoctors.setInstitutionId("03060001"); 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"); 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; } System.out.println(result); } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } }