VerifyCaseFrontSheet.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. package thyyxxk.webserver.service.casefrontsheet;
  2. import lombok.extern.slf4j.Slf4j;
  3. import thyyxxk.webserver.constants.Capacity;
  4. import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetDisdiag;
  5. import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetMain;
  6. import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetSurgery;
  7. import thyyxxk.webserver.entity.dictionary.PureCodeName;
  8. import thyyxxk.webserver.utils.DateUtil;
  9. import thyyxxk.webserver.utils.StringUtil;
  10. import java.util.*;
  11. /**
  12. * @author dj
  13. */
  14. @Slf4j
  15. public class VerifyCaseFrontSheet {
  16. private static VerifyCaseFrontSheet INSTANCE;
  17. private VerifyCaseFrontSheet() { }
  18. public static VerifyCaseFrontSheet getInstance() {
  19. if (null == INSTANCE) {
  20. INSTANCE = new VerifyCaseFrontSheet();
  21. }
  22. return INSTANCE;
  23. }
  24. public List<PureCodeName> saveVerify(CaseFrontsheetMain sheet) {
  25. List<PureCodeName> array = new ArrayList<>();
  26. if (null != sheet.getLivePlace()) {
  27. try {
  28. byte[] livePlaceBytes = sheet.getLivePlace().getBytes("GBK");
  29. if (livePlaceBytes.length > 32) {
  30. array.add(new PureCodeName("livePlace", "患者现住址不能超过32个字节,当前字节数为" + livePlaceBytes.length + "(1汉字=2字节,1字母或数字=1字节)!"));
  31. }
  32. } catch (Exception e) {
  33. log.error("分析患者现住址长度出现异常", e);
  34. }
  35. }
  36. if (null != sheet.getHkPlaceName() && sheet.getHkPlaceName().length() > 10) {
  37. array.add(new PureCodeName("hkPlaceName", "患者户口地址不能超过10个汉字!"));
  38. }
  39. if (null != sheet.getUnitPlace() && sheet.getUnitPlace().length() > 16) {
  40. array.add(new PureCodeName("unitPlace", "患者单位地址不能超过16个汉字!"));
  41. }
  42. if (null != sheet.getContactAddrName() && sheet.getContactAddrName().length() > 16) {
  43. array.add(new PureCodeName("contactAddrName", "患者联系人地址不能超过16个汉字!"));
  44. }
  45. if (betweenDays(sheet.getQualityControlDate(), sheet.getDismissDate()) > 7) {
  46. array.add(new PureCodeName("qualityControlDate", "质控日期不能大于出院7天!"));
  47. }
  48. return connectedVerify(array, sheet);
  49. }
  50. public List<PureCodeName> printVerify(CaseFrontsheetMain info) {
  51. List<PureCodeName> array = new ArrayList<>();
  52. if (StringUtil.invalidValue(info.getName())) {
  53. array.add(new PureCodeName("name", "患者姓名不能为空!"));
  54. }
  55. if (null == info.getBirthDate()) {
  56. array.add(new PureCodeName("birthDate", "患者出生日期不能为空!"));
  57. }
  58. if (null == info.getAge()) {
  59. array.add(new PureCodeName("age","患者年龄不能为空!"));
  60. }
  61. if (StringUtil.invalidValue(info.getCountry())) {
  62. array.add(new PureCodeName("country","患者国籍不能为空!"));
  63. }
  64. if (StringUtil.invalidValue(info.getBirthPlace())) {
  65. array.add(new PureCodeName("birthPlaceName","患者出生地不能为空!"));
  66. }
  67. if (StringUtil.invalidValue(info.getNativePlace())) {
  68. array.add(new PureCodeName("nativePlaceName","患者籍贯不能为空!"));
  69. }
  70. if (StringUtil.invalidValue(info.getNation())) {
  71. array.add(new PureCodeName("nation","患者民族不能为空!"));
  72. }
  73. if (StringUtil.invalidValue(info.getSocialNo())) {
  74. array.add(new PureCodeName("socialNo","患者身份证不能为空!"));
  75. }
  76. if (StringUtil.invalidValue(info.getOccupation())) {
  77. array.add(new PureCodeName("occupation","患者职业不能为空!"));
  78. }
  79. if (StringUtil.invalidValue(info.getMarriage())) {
  80. array.add(new PureCodeName("marriage","患者婚姻状况不能为空!"));
  81. }
  82. if (StringUtil.invalidValue(info.getLivePlace())) {
  83. array.add(new PureCodeName("livePlace","患者现住址不能为空!"));
  84. }
  85. if (StringUtil.invalidValue(info.getPhone())) {
  86. array.add(new PureCodeName("phone","患者电话不能为空!"));
  87. }
  88. if (StringUtil.isBlank(info.getAddrZipCode())) {
  89. array.add(new PureCodeName("addrZipCode","现住址邮编不能为空!"));
  90. }
  91. if (StringUtil.isBlank(info.getHkZipCode())) {
  92. array.add(new PureCodeName("hkZipCode","户口地址邮编不能为空!"));
  93. }
  94. if (StringUtil.isBlank(info.getUnitZipCode())) {
  95. array.add(new PureCodeName("unitZipCode","工作住址邮编不能为空!"));
  96. }
  97. if (StringUtil.invalidValue(info.getHkPlaceName())) {
  98. array.add(new PureCodeName("hkPlaceName","患者户口地址不能为空!"));
  99. }
  100. if (StringUtil.isBlank(info.getUnitName()) || StringUtil.isBlank(info.getUnitPlace())) {
  101. array.add(new PureCodeName("unitName","患者工作单位及地址不能为空!"));
  102. }
  103. if (StringUtil.isBlank(info.getUnitPhone())) {
  104. array.add(new PureCodeName("unitPhone","患者单位电话不能为空!"));
  105. }
  106. if (StringUtil.invalidValue(info.getContactName())) {
  107. array.add(new PureCodeName("contactName","患者联系人姓名不能为空!"));
  108. }
  109. if (StringUtil.invalidValue(info.getContactRelation())) {
  110. array.add(new PureCodeName("contactRelation","患者联系人关系不能为空!"));
  111. }
  112. if (StringUtil.invalidValue(info.getContactAddrName())) {
  113. array.add(new PureCodeName("contactAddrName","患者联系人地址不能为空!"));
  114. }
  115. if (StringUtil.invalidValue(info.getContactPhone())) {
  116. array.add(new PureCodeName("contactPhone","患者联系人电话不能为空!"));
  117. }
  118. if (StringUtil.invalidValue(info.getZyAdmissWay())) {
  119. array.add(new PureCodeName("zyAdmissWay","患者入院途径不能为空!"));
  120. }
  121. if (null == info.getAdmissDate()) {
  122. array.add(new PureCodeName("admissDate","患者入院时间不能为空!"));
  123. }
  124. if (StringUtil.invalidValue(info.getAdmissDept())) {
  125. array.add(new PureCodeName("admissDept","患者入院科别不能为空!"));
  126. }
  127. if (StringUtil.invalidValue(info.getHasSurgery())) {
  128. array.add(new PureCodeName("hasSurgery","患者是否手术不能为空!"));
  129. }
  130. if (null == info.getDismissDate()) {
  131. array.add(new PureCodeName("dismissDate","患者出院时间不能为空!"));
  132. }
  133. if (StringUtil.invalidValue(info.getDismissDept())) {
  134. array.add(new PureCodeName("dismissDept","患者出院科别不能为空!"));
  135. }
  136. if (StringUtil.invalidValue(info.getAdmissDays())) {
  137. array.add(new PureCodeName("admissDays","患者住院天数不能为空!"));
  138. }
  139. if (StringUtil.invalidValue(info.getDisdiagList().get(0).getName())) {
  140. array.add(new PureCodeName("disdiagMain","患者主要诊断不能为空!"));
  141. }
  142. if (null == info.getDisdiagList().get(0).getAdmissStatus()) {
  143. array.add(new PureCodeName("disdiagMainAdmStatus","患者主要诊断入院病情不能为空!"));
  144. }
  145. if (StringUtil.invalidValue(info.getAllergy())) {
  146. array.add(new PureCodeName("allergy","患者有无药物过敏不能为空!"));
  147. }
  148. if (null == info.getBloodType()) {
  149. array.add(new PureCodeName("bloodType","患者ABO血型不能为空!"));
  150. }
  151. if (null == info.getRh()) {
  152. array.add(new PureCodeName("rh","患者Rh血型不能为空!"));
  153. }
  154. if (StringUtil.invalidValue(info.getDeptLeader())) {
  155. array.add(new PureCodeName("deptLeaderName","科主任不能为空!"));
  156. }
  157. if (StringUtil.invalidValue(info.getLeaderDoctor())) {
  158. array.add(new PureCodeName("leaderDoctorName","主任(副主任)医师不能为空!"));
  159. }
  160. if (StringUtil.invalidValue(info.getMainDoctor())) {
  161. array.add(new PureCodeName("mainDoctorName","主治医师不能为空!"));
  162. }
  163. if (StringUtil.invalidValue(info.getAdmissDoctor())) {
  164. array.add(new PureCodeName("admissDoctorName","住院医师不能为空!"));
  165. }
  166. if (StringUtil.invalidValue(info.getQualityControlLevel())) {
  167. array.add(new PureCodeName("qualityControlLevel","病案质量不能为空!"));
  168. }
  169. if (StringUtil.invalidValue(info.getZyDismissWay())) {
  170. array.add(new PureCodeName("zyDismissWay","患者离院方式不能为空!"));
  171. }
  172. if (StringUtil.invalidValue(info.getAdmissAgainInOneMonth())) {
  173. array.add(new PureCodeName("admissAgainInOneMonth","患者是否有出院31天内再住院计划不能为空!"));
  174. }
  175. if (StringUtil.invalidValue(info.getQualityControlDoctor())) {
  176. array.add(new PureCodeName("qualityControlDoctorName","质控医生不能为空!"));
  177. }
  178. if (StringUtil.invalidValue(info.getCaseClassification())) {
  179. array.add(new PureCodeName("caseClassification","病例分型不能为空!"));
  180. }
  181. if (StringUtil.invalidValue(info.getHasIcu())) {
  182. array.add(new PureCodeName("hasIcu","实施重症监护不能为空!"));
  183. }
  184. if (StringUtil.isBlank(info.getMonopathyManagement())) {
  185. array.add(new PureCodeName("monopathyManagement","单病种管理不能为空!"));
  186. }
  187. if (StringUtil.isBlank(info.getClinicalPathwayManagement())) {
  188. array.add(new PureCodeName("clinicalPathwayManagement","实施临床路径管理不能为空!"));
  189. }
  190. if (StringUtil.isBlank(info.getDrgsManagement())) {
  191. array.add(new PureCodeName("drgsManagement","DRGs管理不能为空!"));
  192. }
  193. if (StringUtil.isBlank(info.getUseAntibiotic())) {
  194. array.add(new PureCodeName("useAntibiotic","抗生素使用不能为空!"));
  195. }
  196. if (StringUtil.isBlank(info.getBacilliculture())) {
  197. array.add(new PureCodeName("bacilliculture","细菌培养标本送检不能为空!"));
  198. }
  199. if (zipCodeLengthWrong(info.getAddrZipCode())) {
  200. array.add(new PureCodeName("addrZipCode","现住址邮编长度错误!"));
  201. }
  202. if (zipCodeLengthWrong(info.getHkZipCode())) {
  203. array.add(new PureCodeName("hkZipCode","户口地址邮编长度错误!"));
  204. }
  205. if (zipCodeLengthWrong(info.getUnitZipCode())) {
  206. array.add(new PureCodeName("unitZipCode","工作地址邮编错误!"));
  207. }
  208. if (phoneLengthWrong(info.getPhone())) {
  209. array.add(new PureCodeName("phone","患者电话号码长度错误!"));
  210. }
  211. if (phoneLengthWrong(info.getContactPhone())) {
  212. array.add(new PureCodeName("contactPhone","联系人电话号码长度错误!"));
  213. }
  214. if (phoneLengthWrong(info.getUnitPhone())) {
  215. array.add(new PureCodeName("unitPhone","工作单位电话长度错误!"));
  216. }
  217. if (betweenDays(info.getDismissDate(), info.getAdmissDate()) < 0) {
  218. array.add(new PureCodeName("dismissDate","出院时间不能小于入院时间!"));
  219. }
  220. if (betweenDays(info.getBirthDate(), info.getAdmissDate()) > 0) {
  221. array.add(new PureCodeName("birthDate","出生时间不能大于入院时间!"));
  222. }
  223. if (betweenDays(info.getQualityControlDate(), info.getDismissDate()) > 7) {
  224. array.add(new PureCodeName("qualityControlDate","质控日期不能大于出院7天!"));
  225. }
  226. if (isNewBorn(info.getHasInfant(), info.getBirthDate())) {
  227. if (StringUtil.invalidValue(info.getNewBornWeight()) ||
  228. StringUtil.invalidValue(info.getNewBornAdmissWeight())) {
  229. array.add(new PureCodeName("newBornWeight","请填写新生儿信息!"));
  230. }
  231. if (StringUtil.invalidValue(info.getXxeApgar())) {
  232. array.add(new PureCodeName("xxeApgar","新生儿Apgar评分不能为空!"));
  233. }
  234. } else {
  235. if (StringUtil.validValue(info.getNewBornWeight()) ||
  236. StringUtil.validValue(info.getNewBornAdmissWeight())) {
  237. array.add(new PureCodeName("newBornWeight","非新生儿请保持新生信息为空!"));
  238. }
  239. }
  240. return connectedVerify(array, info);
  241. }
  242. private List<PureCodeName> connectedVerify(List<PureCodeName> array, CaseFrontsheetMain info) {
  243. if (StringUtil.notBlank(info.getZyDismissWay())) {
  244. if ("1".equals(info.getZyDismissWay()) || "2".equals(info.getZyDismissWay())) {
  245. if (StringUtil.invalidValue(info.getDismissDestination())) {
  246. array.add(new PureCodeName("dismissDestination","患者转入医疗机构不能为空!"));
  247. }
  248. }
  249. }
  250. if (StringUtil.notBlank(info.getHasSurgery()) && "0".equals(info.getHasSurgery()) && !"0".equals(info.getDiagConform3())) {
  251. array.add(new PureCodeName("diagConform3","无手术时,诊断符合情况中的术前与术后需要为【未做】!"));
  252. }
  253. if (StringUtil.notBlank(info.getHasSurgery())) {
  254. if ("1".equals(info.getHasSurgery()) || "2".equals(info.getHasSurgery()) || "3".equals(info.getHasSurgery())) {
  255. if ("0".equals(info.getDiagConform3())) {
  256. array.add(new PureCodeName("diagConform3","有手术时,诊断符合情况中的术前与术后不可为【未做】!"));
  257. }
  258. }
  259. }
  260. if (StringUtil.validValue(info.getAutopsy()) && !"".equals(info.getAutopsy())) {
  261. if (!"4".equals(info.getZyDismissWay())) {
  262. array.add(new PureCodeName("zyDismissWay","尸检不为空时,需要离院方式为死亡!"));
  263. }
  264. }
  265. for (CaseFrontsheetSurgery surgery : info.getSurgeryList()) {
  266. checkSurgery(array, surgery);
  267. }
  268. if (needPathologicDiag(info.getDisdiagList().get(0).getCode()) &&
  269. (StringUtil.invalidValue(info.getPathologicDiagStr()) || StringUtil.invalidValue(info.getPathologicDiagCode()))) {
  270. array.add(new PureCodeName("pathologicDiagCode","根据患者出院主要诊断,病理诊断不能为空!"));
  271. }
  272. if (StringUtil.validValue(info.getHasIcu()) && "2".equals(info.getHasIcu()) &&
  273. (StringUtil.invalidValue(info.getIcuDays()) || StringUtil.invalidValue(info.getIcuHours()))) {
  274. array.add(new PureCodeName("icuHours","患者ICU时间不能为空!"));
  275. }
  276. if (StringUtil.notBlank(info.getHasSurgery()) && hasSurgery(info.getHasSurgery()) &&
  277. StringUtil.invalidValue(info.getSurgeryList().get(0).getName())) {
  278. array.add(new PureCodeName("surgeryMain","患者有手术时,手术列表不能为空!"));
  279. }
  280. if (StringUtil.validValue(info.getAllergy()) && "2".equals(info.getAllergy()) && StringUtil.invalidValue(info.getAllergicMedicine())) {
  281. array.add(new PureCodeName("allergicMedicine","患者有药物过敏时,过敏药物名称不能为空!"));
  282. }
  283. if (StringUtil.validValue(info.getPathologicDiagFee()) && StringUtil.invalidValue(info.getBlh())) {
  284. array.add(new PureCodeName("blh","患者有病理诊断费,病理号不能为空!"));
  285. }
  286. if (hasSurgeryFee(info.getSurgeryFee()) && StringUtil.invalidValue(info.getSurgeryList().get(0).getName())) {
  287. array.add(new PureCodeName("surgeryMain","患者有手术费,手术列表不能为空!"));
  288. }
  289. if (needHurtReason(info.getDisdiagList().get(0).getCode()) &&
  290. (StringUtil.invalidValue(info.getHurtReasonName()) || StringUtil.invalidValue(info.getHurtReasonCode()))) {
  291. array.add(new PureCodeName("hurtReasonName","根据患者出院主要诊断,损伤中毒诊断不能为空!"));
  292. }
  293. if (StringUtil.notBlank(info.getBloodType()) && !"5".equals(info.getBloodType()) &&
  294. ("1".equals(info.getRh()) && "2".equals(info.getRh()))) {
  295. array.add(new PureCodeName("rh","患者血型确定时,Rh血型应为阴或阳!"));
  296. }
  297. if (hasDuplicateDiag(info.getDisdiagList())) {
  298. array.add(new PureCodeName("diagTable","出院诊断不能存在相同的诊断编码!"));
  299. }
  300. if (hasSameSurgeryInOneDay(info.getSurgeryList())) {
  301. array.add(new PureCodeName("surgeryTable","同一天不能有相同的手术!"));
  302. }
  303. if (surgeryDateWrong(info.getSurgeryList(), info.getAdmissDate(), info.getDismissDate())) {
  304. array.add(new PureCodeName("surgeryTable","手术时间必须在入院时间和出院时间之间!"));
  305. }
  306. if ((StringUtil.notBlank(info.getBloodType()) && ("5".equals(info.getBloodType()) || "6".equals(info.getBloodType()))) &&
  307. (StringUtil.notBlank(info.getRh()) && !"0".equals(info.getRh()) && !"3".equals(info.getRh()))) {
  308. array.add(new PureCodeName("rh","患者血型不确定时,Rh血型应为不详或未查!"));
  309. }
  310. if (StringUtil.validValue(info.getAutopsy()) || (StringUtil.notBlank(info.getZyDismissWay()) && "4".equals(info.getZyDismissWay()))) {
  311. if (StringUtil.notBlank(info.getRescueTimes()) && Integer.parseInt(info.getRescueTimes()) <= 0) {
  312. array.add(new PureCodeName("rescueTimes","患者死亡时,抢救次数不能小于一次!"));
  313. }
  314. }
  315. if (StringUtil.notBlank(info.getRescueTimes()) && Integer.parseInt(info.getRescueTimes()) < 0) {
  316. array.add(new PureCodeName("rescueTimes","抢救次数不能为负数!"));
  317. }
  318. if (Integer.parseInt(info.getRescueTimes()) < Integer.parseInt(info.getRescueSuccessTimes())) {
  319. array.add(new PureCodeName("rescueSuccessTimes","抢救成功次数不能大于抢救次数!"));
  320. }
  321. if (Integer.parseInt(info.getRescueTimes()) - Integer.parseInt(info.getRescueSuccessTimes()) > 1) {
  322. array.add(new PureCodeName("rescueSuccessTimes","抢救成功次数不能少于抢救次数两次!"));
  323. }
  324. return array;
  325. }
  326. private boolean hasSurgeryFee(String str) {
  327. if (StringUtil.invalidValue(str)) {
  328. return false;
  329. }
  330. return Float.parseFloat(str) > 0;
  331. }
  332. private boolean hasSurgery(String flag) {
  333. return "1".equals(flag) || "2".equals(flag) || "3".equals(flag);
  334. }
  335. private boolean isHighLevelSurgery(String level) {
  336. return StringUtil.notBlank(level) && ("3".equals(level) || "4".equals(level));
  337. }
  338. private void checkSurgery(List<PureCodeName> array, CaseFrontsheetSurgery surgery) {
  339. if (StringUtil.isBlank(surgery.getName())) {
  340. return;
  341. }
  342. if (isHighLevelSurgery(surgery.getLevel())) {
  343. if (StringUtil.isBlank(surgery.getName())) {
  344. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术名称、编码不能为空!"));
  345. }
  346. if (null == surgery.getDate()) {
  347. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术日期不能为空!"));
  348. }
  349. if (StringUtil.isBlank(surgery.getOperator())) {
  350. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术术者不能为空!"));
  351. }
  352. if (StringUtil.isBlank(surgery.getAssistantOne())) {
  353. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术I助不能为空!"));
  354. }
  355. if (StringUtil.isBlank(surgery.getCutHeal())) {
  356. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术切口愈合等级不能为空!"));
  357. }
  358. if (StringUtil.isBlank(surgery.getAnaesthesia())) {
  359. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术麻醉方式不能为空!"));
  360. }
  361. if (StringUtil.isBlank(surgery.getAnaesthesiaor())) {
  362. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术麻醉医师不能为空!"));
  363. }
  364. if (StringUtil.isBlank(surgery.getAssistantTwo())) {
  365. array.add(new PureCodeName("surgeryTable","手术" + surgery.getNo() + ",三、四级手术II助不能为空!"));
  366. }
  367. }
  368. }
  369. private boolean needPathologicDiag(String diag) {
  370. if (StringUtil.invalidValue(diag)) {
  371. return false;
  372. }
  373. final char firstLetter = diag.toUpperCase().charAt(0);
  374. if (firstLetter != 'C' && firstLetter != 'D') {
  375. return false;
  376. }
  377. final String diagBase = diag.substring(1, 3);
  378. final int code;
  379. try {
  380. code = Integer.parseInt(diagBase);
  381. } catch (NumberFormatException e) {
  382. return false;
  383. }
  384. if (firstLetter == 'C') {
  385. return code >= 0 && code <= 97;
  386. } else {
  387. return (code >= 0 && code <= 9) || (code >= 10 && code <= 36) || (code >= 37 && code <= 48);
  388. }
  389. }
  390. private boolean needHurtReason(String diag) {
  391. if (StringUtil.invalidValue(diag)) {
  392. return false;
  393. }
  394. diag = diag.toUpperCase();
  395. if (diag.startsWith("SY")) {
  396. return false;
  397. }
  398. final char firstLetter = diag.charAt(0);
  399. return firstLetter == 'S' || firstLetter == 'T';
  400. }
  401. private boolean hasDuplicateDiag(List<CaseFrontsheetDisdiag> disdiags) {
  402. Map<String, String> map = new HashMap<>(Capacity.DEFAULT);
  403. for (CaseFrontsheetDisdiag diag : disdiags) {
  404. if (StringUtil.validValue(diag.getCode())) {
  405. if (map.containsKey(diag.getCode())) {
  406. return true;
  407. }
  408. map.put(diag.getCode(), diag.getName());
  409. }
  410. }
  411. return false;
  412. }
  413. private boolean hasSameSurgeryInOneDay(List<CaseFrontsheetSurgery> surgeries) {
  414. Map<String, String> map = new HashMap<>(Capacity.DEFAULT);
  415. for (CaseFrontsheetSurgery surgery : surgeries) {
  416. if (StringUtil.validValue(surgery.getCode())) {
  417. if (map.containsKey(surgery.getCode() + DateUtil.formatDatetime(surgery.getDate(), "yyyy-MM-dd HH:mm:ss"))) {
  418. return true;
  419. }
  420. map.put(surgery.getCode() + DateUtil.formatDatetime(surgery.getDate(), "yyyy-MM-dd HH:mm:ss"), surgery.getCode());
  421. }
  422. }
  423. return false;
  424. }
  425. private boolean zipCodeLengthWrong(String zipCode) {
  426. return !"-".equals(zipCode) && !"--".equals(zipCode) && zipCode.length() != 6;
  427. }
  428. private boolean surgeryDateWrong(List<CaseFrontsheetSurgery> surgeries, Date admissDate, Date outmissDate) {
  429. for (CaseFrontsheetSurgery item : surgeries) {
  430. if (null == item.getDate()) {
  431. return false;
  432. }
  433. if (betweenDays(item.getDate(), admissDate) < 0 ||
  434. betweenDays(item.getDate(), outmissDate) > 0) {
  435. return true;
  436. }
  437. }
  438. return false;
  439. }
  440. private boolean phoneLengthWrong(String phone) {
  441. if (phone.matches("-")) {
  442. return false;
  443. }
  444. return phone.length() != 11 && phone.length() != 12 && phone.length() != 8;
  445. }
  446. public Integer betweenDays(Date date1, Date date2) {
  447. if (null == date1 || null == date2) {
  448. return -1;
  449. }
  450. return (int) ((date1.getTime() - date2.getTime()) / (1000L * 3600L * 24L));
  451. }
  452. private boolean isNewBorn(String hasInfant, Date birthDate) {
  453. return (StringUtil.validValue(hasInfant) && "1".equals(hasInfant)) || betweenDays(new Date(), birthDate) <= 28;
  454. }
  455. }