DataTask.java 12 KB

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