UpdateTask.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. package com.zskk.task;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.io.UnsupportedEncodingException;
  7. import java.net.URLEncoder;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Arrays;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.UUID;
  16. import org.apache.commons.codec.digest.DigestUtils;
  17. import com.alibaba.fastjson.JSON;
  18. import com.jfinal.kit.HashKit;
  19. import com.jfinal.plugin.activerecord.Db;
  20. import com.jfinal.plugin.activerecord.Record;
  21. import com.jfinal.plugin.cron4j.ITask;
  22. import com.zskk.model.Doctors;
  23. import com.zskk.model.Exams;
  24. import com.zskk.model.PatientInfos;
  25. import com.zskk.model.Report;
  26. import com.zskk.model.Studies;
  27. import com.zskk.service.ThreadPoolService;
  28. import okhttp3.FormBody;
  29. import okhttp3.OkHttpClient;
  30. import okhttp3.Request;
  31. import okhttp3.RequestBody;
  32. import okhttp3.Response;
  33. public class UpdateTask implements ITask {
  34. private static final OkHttpClient OKHTTP_CLIENT = new OkHttpClient();
  35. @Override
  36. public void run() {
  37. // TODO Auto-generated method stub
  38. try {
  39. List<Exams> exams = Exams.dao.use("zskk").find(
  40. "SELECT * FROM pacsonline.exams where exam_status=3 and institution_id='03060001' and patient_num like 'T%' order by createdAt desc limit 50");
  41. for (Exams exams2 : exams) {
  42. try {
  43. // Studies studies = Studies.dao.use("zskk").findById(exams2.getStudyId());
  44. Record record = Db.use("connected2").findFirst("select * from reportinfo where studyuid=?",
  45. exams2.getPatientNum());
  46. if (record == null) {
  47. continue;
  48. }
  49. Report report = new Report().use("zskk");
  50. report.setId(creatId());
  51. report.setReportDatetime(parseStringToDate(record.getStr("reportdate")));
  52. if (record.getStr("description") == null || record.getStr("impression") == null
  53. || record.getStr("description").isBlank()) {
  54. continue;
  55. }
  56. report.setImpression(record.getStr("impression"));
  57. report.setDescription(record.getStr("description"));
  58. report.setExamId(exams2.getId());
  59. report.setCreatedAt(new Date());
  60. // report.setReportDoctorId(getDoctorIdByName(record.getStr("reportdoctor")));
  61. // report.setReviewDoctorId(getDoctorIdByName(record.getStr("reviewdoctor")));
  62. report.setReviewDatetime(parseStringToDate(record.getStr("reportdate")));
  63. // report.setConfirmDoctorId(getDoctorIdByName(record.getStr("reviewdoctor")));
  64. report.setConfirmDatetime(parseStringToDate(record.getStr("reportdate")));
  65. report.save();
  66. PatientInfos patientInfos = PatientInfos.dao.use("zskk").findById(exams2.getPatientId());
  67. patientInfos.setName(record.getStr("patientname"));
  68. patientInfos.setPhone(record.getStr("phone")==null?"":record.getStr("phone"));
  69. patientInfos.setCardNum(record.getStr("idcard")==null?"":record.getStr("idcard"));
  70. patientInfos.update();
  71. exams2.setExamStatus(9);
  72. // String patString = record.getStr("住院号");
  73. // Integer length = patString.length();
  74. // patString = String.format("%0"+length+"d",Long.valueOf(patString));
  75. // exams2.setHopitalizedNo(patString);
  76. // exams2.setClinDoctors(record.getStr("CLINICALDOCTOR"));
  77. exams2.setApplicationDepartment(record.getStr("department"));
  78. exams2.setApplicationDoctor(record.getStr("clinicaldoctor"));
  79. // exams2.setClinDiag(record.getStr("diagnosis"));
  80. exams2.update();
  81. // 传云医康 数据
  82. Map<String, String> data = new HashMap<String, String>();
  83. // 获取data数据
  84. // 医院id
  85. data.put("hospital_id", "03060001");
  86. // 影像所见
  87. data.put("description", record.getStr("description"));
  88. // 意见建议
  89. data.put("impression", record.getStr("impression"));
  90. // 检查id
  91. data.put("exam_id", exams2.getId());
  92. data.put("study_id", exams2.getStudyId());
  93. // 患者id
  94. data.put("patient_id", exams2.getPatientId());
  95. // 患者姓名
  96. data.put("patient_name", record.getStr("patientname"));
  97. // 患者性别
  98. data.put("patient_sex", patientInfos.getSex());
  99. // 身份证号
  100. data.put("card_num", record.getStr("idcard")==null?"":record.getStr("idcard"));
  101. // 手机号
  102. data.put("phone", patientInfos.getPhone());
  103. // 患者生日
  104. data.put("birthday", patientInfos.getBirthday()==null?"":patientInfos.getBirthday());
  105. // 患者检查时年龄
  106. data.put("patient_age", patientInfos.getAge()==null?"":patientInfos.getAge());
  107. // 阴阳性 1阴性 2阳性
  108. data.put("report_result", record.getStr("result").contains("阴")?"1":"2");
  109. // 报告时间 10位时间戳
  110. data.put("report_datetime", returnSecondTimestamp(record.getStr("reportdate")));
  111. // 报告医生id
  112. data.put("report_doctor_id", record.getStr("reportdoctor")==null?"":record.getStr("reportdoctor"));
  113. // 报告医生姓名
  114. data.put("report_doctor_name", record.getStr("reportdoctor")==null?"":record.getStr("reportdoctor"));
  115. // 审核时间
  116. data.put("review_datetime", returnSecondTimestamp(record.getStr("reportdate")));
  117. // 审核医生id
  118. data.put("review_doctor_id", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor"));
  119. // 审核姓名
  120. data.put("review_doctor_name", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor"));
  121. // 确认时间
  122. data.put("confirm_datetime", returnSecondTimestamp(record.getStr("reportdate")));
  123. // 确认医生id
  124. data.put("confirm_doctor_id", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor"));
  125. // 确认医生姓名
  126. data.put("confirm_doctor_name", record.getStr("reviewdoctor")==null?"":record.getStr("reviewdoctor"));
  127. data.put("patient_no", "");
  128. ThreadPoolService tService = new com.zskk.service.ThreadPoolService();
  129. tService.execute(() -> {
  130. String dadaString = JSON.toJSONString(data);
  131. dadaString = dadaString.replace("\\r", "");
  132. dadaString = dadaString.replace("\\n", "");
  133. dadaString = dadaString.replace("*", "X");
  134. dadaString = dadaString.replace("<p>", "");
  135. dadaString = dadaString.replace("<br/>", "");
  136. dadaString = dadaString.replace("<p>", "");
  137. dadaString = dadaString.replace("/", "-");
  138. dadaString = dadaString.replace("&nbsp; ", "");
  139. Map maps = (Map) JSON.parse(dadaString);
  140. try {
  141. post(null, maps);
  142. } catch (IOException e) {
  143. // TODO Auto-generated catch block
  144. e.printStackTrace();
  145. }
  146. });
  147. } catch (Exception e) {
  148. // TODO: handle exception
  149. continue;
  150. }
  151. }
  152. } catch (Exception e) {
  153. // TODO: handle exception
  154. }
  155. }
  156. private static void post(String url, Map<String, String> map) throws IOException {
  157. RequestBody formBody = new FormBody.Builder().add("timestamp", String.valueOf(getSecondTimestamp(new Date())))
  158. .add("signature", Ksort(map)).add("data", JSON.toJSONString(map)).build();
  159. Request request = new Request.Builder().url("http://39.106.136.96/pacs/zskk/writePatientReport").post(formBody)
  160. .build();
  161. try (Response response = OKHTTP_CLIENT.newCall(request).execute()) {
  162. if (!response.isSuccessful())
  163. throw new IOException("Unexpected code " + response);
  164. System.out.println(response.body().string());
  165. // return response.body().string();
  166. }
  167. }
  168. /**
  169. *
  170. * 功能描述: 获取当前时间戳(秒)
  171. *
  172. * @param: [date]
  173. * @return: int
  174. * @auther: zzp
  175. * @date: 2019/12/26 18:26
  176. */
  177. public static String getSecondTimestamp(Date date) {
  178. if (null == date) {
  179. return "参数为空";
  180. }
  181. String timestamp = String.valueOf(date.getTime());
  182. int length = timestamp.length();
  183. if (length > 3) {
  184. return String.valueOf(timestamp.substring(0, length - 3));
  185. } else {
  186. return "参数不足3位数";
  187. }
  188. }
  189. /**
  190. *
  191. * 功能描述: 对数组的值按key排序,生成url的形式(http_build_query)
  192. *
  193. * @param: [map]
  194. * @return: java.lang.String
  195. * @auther: zzp
  196. * @date: 2019/12/26 19:21
  197. */
  198. public static String Ksort(Map<String, String> map) {
  199. String sb = "";
  200. String[] key = new String[map.size()];
  201. int index = 0;
  202. for (String k : map.keySet()) {
  203. key[index] = k;
  204. index++;
  205. }
  206. Arrays.sort(key);
  207. for (String s : key) {
  208. sb += s + "=" + map.get(s) + "&";
  209. }
  210. sb = sb.substring(0, sb.length() - 1);
  211. try {
  212. sb = URLEncoder.encode(sb, "UTF-8");
  213. } catch (UnsupportedEncodingException e) {
  214. e.printStackTrace();
  215. } // 使用常见的UTF-8编码
  216. sb = sb.replace("%3D", "=").replace("%26", "&");
  217. String resultString = HashKit.md5(sb + "YgpxjVeIx0yoK6Atz413IAj7hU9dygH4");
  218. return resultString;
  219. }
  220. /**
  221. *
  222. * 功能描述:生成signature
  223. *
  224. * @param: [param, key]
  225. * @return: java.lang.String
  226. * @auther: zzp
  227. * @date: 2019/12/24 15:28
  228. */
  229. public static String getSign(Map<String, String> param, String key) {
  230. return DigestUtils.md5Hex(Ksort(param) + key);
  231. }
  232. /**
  233. *
  234. * 功能描述: 转时间戳(秒)
  235. *
  236. * @param:
  237. * @return:
  238. * @auther: zpp
  239. * @date: 2019/12/26 18:26
  240. */
  241. public String returnSecondTimestamp(String data) throws ParseException {
  242. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  243. return String.valueOf(sdf.parse(data).getTime() / 1000);
  244. }
  245. @Override
  246. public void stop() {
  247. // TODO Auto-generated method stub
  248. }
  249. private String creatId() {
  250. UUID id = UUID.randomUUID();
  251. String[] idd = id.toString().split("-");
  252. return idd[0] + idd[1] + idd[2];
  253. }
  254. private String getDoctorIdByName(String name) {
  255. if (name == null || name.isBlank()) {
  256. return null;
  257. }
  258. name = name.replace(" ", "");
  259. Doctors doctors = Doctors.dao.use("zskk").findFirst(
  260. "SELECT * FROM doctors where instr(?,realname) and institution_id='03060001' and realname <>''", name);
  261. if (doctors == null) {
  262. Doctors newDoctors = new Doctors().use("zskk");
  263. newDoctors.setId(creatId());
  264. newDoctors.setUsername("none");
  265. newDoctors.setRealname(name);
  266. newDoctors.setPassword("123456");
  267. newDoctors.setInstitutionId("03060001");
  268. newDoctors.setCreatedAt(new Date());
  269. newDoctors.setUpdatedAt(new Date());
  270. newDoctors.save();
  271. return newDoctors.getId();
  272. }
  273. return doctors.getId();
  274. }
  275. private Date parseStringToDate(String dateStr) {
  276. if (dateStr == null) {
  277. return new Date();
  278. }
  279. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  280. Date date = null;
  281. try {
  282. date = sdf.parse(dateStr);
  283. } catch (ParseException e) {
  284. // TODO Auto-generated catch block
  285. e.printStackTrace();
  286. }
  287. return date;
  288. }
  289. /**
  290. * 发送POST请求
  291. *
  292. * @param url 目的地址
  293. * @param parameters 请求参数,Map类型。
  294. * @return 远程响应结果
  295. */
  296. public static String sendPost(String url, Map<String, String> parameters) {
  297. String result = "";// 返回的结果
  298. BufferedReader in = null;// 读取响应输入流
  299. PrintWriter out = null;
  300. StringBuffer sb = new StringBuffer();// 处理请求参数
  301. String params = "";// 编码之后的参数
  302. try {
  303. // 编码请求参数
  304. if (parameters.size() == 1) {
  305. for (String name : parameters.keySet()) {
  306. sb.append(name).append("=").append(java.net.URLEncoder.encode(parameters.get(name), "UTF-8"));
  307. }
  308. params = sb.toString();
  309. } else {
  310. for (String name : parameters.keySet()) {
  311. sb.append(name).append("=").append(java.net.URLEncoder.encode(parameters.get(name), "UTF-8"))
  312. .append("&");
  313. }
  314. String temp_params = sb.toString();
  315. params = temp_params.substring(0, temp_params.length() - 1);
  316. }
  317. // 创建URL对象
  318. java.net.URL connURL = new java.net.URL(url);
  319. // 打开URL连接
  320. java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL.openConnection();
  321. // 设置通用属性
  322. httpConn.setRequestProperty("Accept", "*/*");
  323. httpConn.setRequestProperty("Connection", "Keep-Alive");
  324. httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
  325. // 设置POST方式
  326. httpConn.setDoInput(true);
  327. httpConn.setDoOutput(true);
  328. // 获取HttpURLConnection对象对应的输出流
  329. out = new PrintWriter(httpConn.getOutputStream());
  330. // 发送请求参数
  331. out.write(params);
  332. // flush输出流的缓冲
  333. out.flush();
  334. // 定义BufferedReader输入流来读取URL的响应,设置编码方式
  335. in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));
  336. String line;
  337. // 读取返回的内容
  338. while ((line = in.readLine()) != null) {
  339. result += line;
  340. }
  341. System.out.println(result);
  342. } catch (Exception e) {
  343. e.printStackTrace();
  344. } finally {
  345. try {
  346. if (out != null) {
  347. out.close();
  348. }
  349. if (in != null) {
  350. in.close();
  351. }
  352. } catch (IOException ex) {
  353. ex.printStackTrace();
  354. }
  355. }
  356. return result;
  357. }
  358. }