DataTask.java 12 KB

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