package com.zskk.control; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jfinal.core.Controller; import com.jfinal.kit.HashKit; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.dialect.MysqlDialect; import com.jfinal.plugin.activerecord.dialect.OracleDialect; import com.jfinal.plugin.activerecord.dialect.SqlServerDialect; import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.plugin.redis.RedisPlugin; import com.zskk.model.*; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import org.apache.commons.codec.digest.DigestUtils; 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.*; public class ViewController extends Controller { private static final OkHttpClient OKHTTP_CLIENT = new OkHttpClient(); // static{ // PropKit.use("config.properties"); // DruidPlugin plugin = new DruidPlugin(PropKit.get("jdbcUrl_zskk"), PropKit.get("user_zskk"), PropKit.get("password_zskk").trim()); // ActiveRecordPlugin arp = new ActiveRecordPlugin(plugin); // _MappingKit.mapping(arp); // plugin.start(); // arp.start(); // // } /** * 在被连接数据库执行sql语句 */ public void executeSql() { try { List d = Db.use("connected").find("select top 5 * from reportinfo"); this.renderJson(d); } catch (Exception e) { // TODO: handle exception this.renderText(e.toString()); } } public void executeSql2() { try { String sqlString = this.getPara("str"); List d = Db.use("connected").find(sqlString); this.renderJson(d); } catch (Exception e) { // TODO: handle exception this.renderText(e.toString()); } } public void executeSql3() { try { DruidPlugin druidPluginConnected = createConnectedDruidPlugin(); druidPluginConnected.start(); // 配置ActiveRecord插件 ActiveRecordPlugin arpConnected = new ActiveRecordPlugin("connected", druidPluginConnected); arpConnected.setDialect(new SqlServerDialect()); arpConnected.start(); } catch (Exception e) { // TODO: handle exception this.renderText(e.toString()); } } public static DruidPlugin createConnectedDruidPlugin() { return new DruidPlugin(PropKit.get("jdbcUrl_connected"), PropKit.get("user_connected"),PropKit.get("password_connected").trim()); } public static DruidPlugin createZskkDruidPlugin() { return new DruidPlugin("jdbc:mysql://47.104.6.21:3306/pacsonline?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false", "pacs","ZSKK@2017~!@#"); } public static void testTask() { try { String string = "here"; String jString = "{\"birthdate\":\"1976-04-21 00:00:00\",\"modality\":\"MR\",\"patientid\":\"030419456\",\"patientsex\":\"女\",\"reportPaperNum\":740386,\"reportdate\":\"2020-01-08 16:13:06\",\"diagnosis\":\"上颌骨恶性肿瘤\",\"accessionNumber\":\"17822\",\"patientname\":\"王晓艳\",\"symptom\":\"上颌骨恶性肿瘤\",\"clinicaldoctor\":\"周宏\",\"phone\":\"13836302692\",\"DESCRIPTION\":\" 右侧上颌窦呈术后改变,上颌窦窦壁、部分鼻甲及右侧上腭部局部缺如。右侧上颌窦壁及鼻翼旁皮下软组织不均匀增厚,其内信号欠均,T1WI呈等、稍低信号,T2脂肪抑制呈不均匀稍高信号,增强扫描呈不均匀强化。右侧翼外肌内可见片状异常信号影,T1WI及T2脂肪抑制均呈低信号,增强扫描未见明显强化。双侧颈深部Ⅱ-Ⅳ区及咽旁可见多发结节影,T1WI呈低信号,T2脂肪抑制呈高信号,增强扫描呈不均匀中等强化,大者约为1.7*0.9*2.8cm。右侧筛窦及乳突内可见长T1长T2信号影,增强扫描未见强化。\\r\\n\\r\\n\",\"printreport\":false,\"idcard\":\"231003197604211648\",\"patientage\":\"43岁\",\"impression\":\" 1、右侧上颌窦呈术后改变,上颌窦窦壁、部分鼻甲及右侧上腭部局部缺如:右侧上颌窦壁及鼻翼旁皮下软组织不均匀增厚,右侧翼外肌双低信号,考虑术后改变伴周围软组织水肿,请以此为基准片定期复查。\\r\\n2、双侧颈深及左侧咽旁多发淋巴结增大,请追随。\\r\\n3、右侧副鼻窦炎、中耳炎。\\r\\n\",\"regPaperNum\":\"894136\",\"reviewdoctor\":\"杨波\",\"department\":\"放疗三科\",\"studyuid\":\"17822\",\"printfilm\":false,\"reportdoctor\":\"刘媛\"}"; List exams = Exams.dao.find("SELECT * FROM pacsonline.exams where id='116f84268cc9186a'"); 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()); // Record record = (Record)JSON.parse(jString); JSONObject record = JSON.parseObject(jString); if (record == null) { continue; } Report report = new Report().use("zskk"); report.setId(creatId()); report.setReportDatetime(parseStringToDate(record.getString("reportdate"))); if (record.getString("impression") == null || record.getString("DESCRIPTION") == null || record.getString("impression").isBlank() || record.getString("DESCRIPTION").isBlank()) { continue; } report.setImpression(record.getString("impression")); report.setDescription(record.getString("DESCRIPTION")); report.setExamId(exams2.getId()); report.setCreatedAt(new Date()); report.setReportDoctorId(getDoctorIdByName(record.getString("reportdoctor"))); report.setReviewDoctorId(getDoctorIdByName(record.getString("reviewdoctor"))); report.setReviewDatetime(parseStringToDate(record.getString("reportdate"))); report.setConfirmDoctorId(getDoctorIdByName(record.getString("reviewdoctor"))); report.setConfirmDatetime(parseStringToDate(record.getString("reportdate"))); // report.save(); PatientInfos patientInfos = PatientInfos.dao.findById(exams2.getPatientId()); patientInfos.setName(record.getString("patientname")); patientInfos.setPhone(record.getString("phone")); patientInfos.setCardNum(record.getString("idcard")); // patientInfos.update(); exams2.setExamStatus(9); exams2.setClinDoctors(record.getString("clinicaldoctor")); exams2.setApplicationDepartment(record.getString("department")); exams2.setApplicationDoctor(record.getString("clinicaldoctor")); exams2.setClinDiag(record.getString("diagnosis")); // exams2.update(); //传云医康 数据 Map data = new HashMap(); //获取data数据 //医院id data.put("hospital_id","15700002"); //影像所见 data.put("description",record.getString("DESCRIPTION")); //意见建议 data.put("impression",record.getString("impression")); //检查id data.put("exam_id",exams2.getId()); //患者id data.put("patient_id",exams2.getPatientId()); data.put("study_id",exams2.getStudyId()); //患者姓名 data.put("patient_name",record.getString("patientname")); //患者性别 data.put("patient_sex",record.getString("patientsex").equals("女")?"F":"M"); //身份证号 data.put("card_num",""); //手机号 data.put("phone",""); //患者生日 data.put("birthday",returnSecondTimestamp(record.getString("birthdate"))); //患者检查时年龄 data.put("patient_age",patientInfos.getAge()); //阴阳性 1阴性 2阳性 data.put("report_result",""); //报告时间 10位时间戳 data.put("report_datetime",returnSecondTimestamp(record.getString("reportdate"))); //报告医生id data.put("report_doctor_id",record.getString("reportdoctor")); //报告医生姓名 data.put("report_doctor_name",record.getString("reportdoctor")); //审核时间 data.put("review_datetime",returnSecondTimestamp(record.getString("reportdate"))); //审核医生id data.put("review_doctor_id",record.getString("reviewdoctor")); //审核姓名 data.put("review_doctor_name",record.getString("reviewdoctor")); //确认时间 data.put("confirm_datetime", returnSecondTimestamp(record.getString("reportdate"))); //确认医生id data.put("confirm_doctor_id", record.getString("reviewdoctor")); //确认医生姓名 data.put("confirm_doctor_name",record.getString("reviewdoctor")); // System.out.println(data); //调用接口 // String s = post(null, data); //// string = string+s; // String ssString = data.toString(); // //// String ssString = "{\"birthday\":\"-937382400\",\"review_datetime\":\"1577608513\",\"review_doctor_name\":\"王宪\",\"confirm_doctor_id\":\"王宪\",\"description\":\"所示胸腰椎及骨盆未见骨质异常;rn双侧膈下见气体密度影;rn腹部肠管内积气伴局部扩张;rn腰大肌影清晰;腹壁软组织影未见异常;rn胆囊区、肾区、输尿管区、膀胱区未见阳性结石影;rn双肾轮廓显影欠清;隐约可见;未见明显形态改变;rn腹部未见异常软组织团块影,未见异常钙化影。rn\",\"study_id\":\"116f50c27d705e37\",\"hospital_id\":\"15700002\",\"confirm_datetime\":\"1577608513\",\"card_num\":\"\",\"patient_sex\":\"M\",\"phone\":\"\",\"report_doctor_id\":\"王宪\",\"patient_id\":\"116f50c27d46d081\",\"report_doctor_name\":\"王宪\",\"patient_name\":\"赵清标\",\"impression\":\"1、膈下游离气体,考虑气腹,请结合临床rn2、腹部肠管扩张、积气,请结合临床。rn\",\"review_doctor_id\":\"王宪\",\"report_datetime\":\"1577608513\",\"patient_age\":\"79岁\",\"report_result\":\"\",\"confirm_doctor_name\":\"王宪\",\"exam_id\":\"116f50c27d8a1bc5\"}"; // Map maps = (Map)JSON.parse(ssString); // System.out.println(ssString); String ssString=JSON.toJSONString(data); System.out.println(ssString); ssString = ssString.replace("\\r\\n",""); ssString = ssString.replace(" ",""); ssString = ssString.replace("、",","); ssString = ssString.replace("*","乘"); Map maps = (Map)JSON.parse(ssString); post(null, maps); } System.out.println(string); // this.renderText(string); } catch (Exception e) { // TODO: handle exception // this.renderText(e.toString()); System.out.println(e.toString()); } } public static String getSign(Map param, String key) { return DigestUtils.md5Hex(Ksort(param) + key); } 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位数"; } } private static String creatId() { UUID id = UUID.randomUUID(); String[] idd= id.toString().split("-"); return idd[0]+idd[1]+idd[2]; } private static String getDoctorIdByName(String name) { if (name == null || name.isBlank()) { return null; } name = name.replace(" ", ""); Doctors doctors = Doctors.dao.findFirst("SELECT * FROM doctors where instr(?,realname) and institution_id=15700002 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("15700002"); newDoctors.setCreatedAt(new Date()); newDoctors.setUpdatedAt(new Date()); // newDoctors.save(); return newDoctors.getId(); } return doctors.getId(); } private static 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; } 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); return 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; } 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(); System.out.println(String.valueOf(getSecondTimestamp(new Date()))); System.out.println(Ksort(map)); System.out.println(JSON.toJSONString(map)); 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(); // } } 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); System.out.println("***"+sb); try { sb = URLEncoder.encode(sb, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }// 使用常见的UTF-8编码 sb = sb.replace("%3D", "=").replace("%26", "&"); System.out.println("**"+sb); String resultString = HashKit.md5(sb+"YgpxjVeIx0yoK6Atz413IAj7hU9dygH4"); return resultString; } public static String returnSecondTimestamp(String data) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return String.valueOf(sdf.parse(data).getTime()/1000); } public static void main(String[] args) { try { String ssString = returnSecondTimestamp("1955-03-17 00:00:00"); System.out.println(ssString); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // testTask(); } }