PatientController.java 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087
  1. package com.lemon.lifecenter.controller;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.UnsupportedEncodingException;
  10. import java.lang.reflect.Field;
  11. import java.net.URLEncoder;
  12. import java.security.GeneralSecurityException;
  13. import java.text.DecimalFormat;
  14. import java.util.ArrayList;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  20. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  21. import org.apache.poi.openxml4j.opc.OPCPackage;
  22. import org.apache.poi.poifs.crypt.EncryptionInfo;
  23. import org.apache.poi.poifs.crypt.EncryptionMode;
  24. import org.apache.poi.poifs.crypt.Encryptor;
  25. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  26. import org.apache.poi.ss.usermodel.Cell;
  27. import org.apache.poi.ss.usermodel.CellStyle;
  28. import org.apache.poi.ss.usermodel.Font;
  29. import org.apache.poi.ss.usermodel.IndexedColors;
  30. import org.apache.poi.ss.usermodel.Row;
  31. import org.apache.poi.ss.usermodel.Sheet;
  32. import org.apache.poi.ss.usermodel.Workbook;
  33. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  34. import org.json.JSONObject;
  35. import org.slf4j.Logger;
  36. import org.slf4j.LoggerFactory;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.stereotype.Controller;
  39. import org.springframework.transaction.annotation.Propagation;
  40. import org.springframework.transaction.annotation.Transactional;
  41. import org.springframework.web.bind.annotation.ModelAttribute;
  42. import org.springframework.web.bind.annotation.RequestMapping;
  43. import org.springframework.web.bind.annotation.RequestMethod;
  44. import org.springframework.web.bind.annotation.RequestParam;
  45. import org.springframework.web.bind.annotation.ResponseBody;
  46. import org.springframework.web.servlet.ModelAndView;
  47. import com.lemon.lifecenter.common.LifeCenterConfigVO;
  48. import com.lemon.lifecenter.common.LifeCenterController;
  49. import com.lemon.lifecenter.common.LifeCenterFileDownload;
  50. import com.lemon.lifecenter.common.LifeCenterFunction;
  51. import com.lemon.lifecenter.common.LifeCenterPaging;
  52. import com.lemon.lifecenter.common.LifeCenterSessionController;
  53. import com.lemon.lifecenter.dto.CenterInfoDTO;
  54. import com.lemon.lifecenter.dto.FileDownloadDTO;
  55. import com.lemon.lifecenter.dto.PatientDTO;
  56. import com.lemon.lifecenter.dto.PrivateLogDTO;
  57. import com.lemon.lifecenter.dto.PushDTO;
  58. import com.lemon.lifecenter.dto.StaffDTO;
  59. import com.lemon.lifecenter.service.CenterService;
  60. import com.lemon.lifecenter.service.FileDownloadService;
  61. import com.lemon.lifecenter.service.PatientService;
  62. import com.lemon.lifecenter.service.PrivateLogService;
  63. import com.lemon.lifecenter.service.PushService;
  64. import com.lemon.lifecenter.service.StaffService;
  65. @Controller
  66. @RequestMapping("/patient")
  67. //@DependsOn(value = {"LifeCenterPaging"})
  68. public class PatientController extends LifeCenterController {
  69. @Autowired
  70. private PatientService patientService;
  71. @Autowired
  72. private CenterService centerService;
  73. @Autowired
  74. private StaffService staffService;
  75. @Autowired
  76. private FileDownloadService fileDownloadService;
  77. @Autowired
  78. private PushService pushService;
  79. @Autowired
  80. private LifeCenterConfigVO config;
  81. @Autowired
  82. private PrivateLogService privateLogService;
  83. private LifeCenterPaging paging;
  84. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  85. @RequestMapping("/list")
  86. public ModelAndView patientList(
  87. @RequestParam(value="inputState", required=false, defaultValue="ALL") String inputState,
  88. @RequestParam(value="patientName", required=false, defaultValue="") String patientName,
  89. @RequestParam(value="startDate", required=false, defaultValue="") String startDate,
  90. @RequestParam(value="endDate", required=false, defaultValue="") String endDate,
  91. @RequestParam(value="page", required=false, defaultValue="1") int page,
  92. @RequestParam(value="sortType", required=false, defaultValue="patient_name") String sortType,
  93. @RequestParam(value="sort", required=false, defaultValue="desc") String sort,
  94. HttpServletRequest request,HttpServletResponse response) {
  95. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  96. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  97. String sesGroupIdx = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
  98. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  99. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  100. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  101. String processingContents = "환자리스트 조회";
  102. PrivateLogDTO logDTO = new PrivateLogDTO();
  103. logDTO.setId( sesId );
  104. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  105. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  106. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  107. logDTO.setProcessingTarget( "" );
  108. logDTO.setProcessingContents( processingContents );
  109. privateLogService.insertPrivateAccessLog( logDTO );
  110. PatientDTO dto = new PatientDTO();
  111. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  112. dto.setGroupIdx( Integer.valueOf( sesGroupIdx ) );
  113. dto.setPatientName(patientName);
  114. dto.setState(inputState);
  115. dto.setStartDate(startDate);
  116. dto.setEndDate(endDate);
  117. dto.setSortType(sortType);
  118. dto.setSort(sort);
  119. dto.setLimit( ( Integer.valueOf( page ) - 1 ) * config.pageDataSize );
  120. dto.setLimitMax( config.pageDataSize );
  121. int total = patientService.selectPatientCount(dto);
  122. List<PatientDTO> result = new ArrayList<PatientDTO>();
  123. if (total > 0) {
  124. result = patientService.selectPatientList(dto);
  125. for( PatientDTO temp : result ) {
  126. result.get( result.indexOf( temp ) ).setSymptomContent( LifeCenterFunction.getSymptom( temp ) );
  127. }
  128. }
  129. ModelAndView mv = setMV("patient/list");
  130. String param = "";
  131. try {
  132. param = "patientName=" + URLEncoder.encode(patientName, "UTF-8") + "&inputState=" + inputState + "&startDate=" + startDate + "&endDate=" + endDate + "&sortType=" + sortType + "&sort=" + sort;
  133. } catch (UnsupportedEncodingException e) {
  134. // TODO Auto-generated catch block
  135. e.printStackTrace();
  136. }
  137. paging = LifeCenterPaging.getInstance();
  138. paging.paging(config, total, page, param);
  139. mv.addObject("inputState", inputState);
  140. mv.addObject("patientName", patientName);
  141. mv.addObject("total", total);
  142. mv.addObject("item", result);
  143. mv.addObject("paging", paging);
  144. mv.addObject( "startDate", startDate );
  145. mv.addObject( "endDate", endDate );
  146. mv.addObject( "page", page );
  147. mv.addObject( "pageSize", dto.getLimitMax() );
  148. mv.addObject( "sesGroupIdx" , sesGroupIdx );
  149. mv.addObject("sort", sort);
  150. mv.addObject("sortType", sortType);
  151. return mv;
  152. }
  153. @RequestMapping("/new")
  154. public ModelAndView patientNew( HttpServletRequest request,HttpServletResponse response ) {
  155. ModelAndView mv = setMV("patient/new");
  156. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  157. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  158. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  159. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  160. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  161. //개인정보로그
  162. String processingContents = "신규환자등록페이지 접속";
  163. PrivateLogDTO logDTO = new PrivateLogDTO();
  164. logDTO.setId( sesId );
  165. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  166. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  167. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  168. logDTO.setProcessingTarget( "" );
  169. logDTO.setProcessingContents( processingContents );
  170. privateLogService.insertPrivateAccessLog( logDTO );
  171. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  172. CenterInfoDTO dto = new CenterInfoDTO();
  173. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  174. dto.setStaffId( sesId );
  175. int centerCount = centerService.selectCenterOneCount( dto );
  176. String centerName = "";
  177. if( centerCount > 0 ) {
  178. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  179. }
  180. StaffDTO staffDTO = new StaffDTO();
  181. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  182. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  183. staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
  184. staffDTO.setUseYn( "" );
  185. int staffCount = staffService.selectMemberListCount( staffDTO );
  186. if( staffCount > 0 ) {
  187. staffDTO.setLimit( 0 );
  188. staffDTO.setLimitMax( staffCount );
  189. staffList = staffService.selectMemberList( staffDTO );
  190. }
  191. mv.addObject( "centerName", centerName );
  192. mv.addObject( "centerCount", centerCount );
  193. mv.addObject( "actionType", "new" );
  194. mv.addObject( "staffList", staffList );
  195. return mv;
  196. }
  197. @RequestMapping("/new/insert")
  198. @Transactional(propagation=Propagation.REQUIRED)
  199. public String patientNewInsert(
  200. @ModelAttribute("dto") final PatientDTO dto,
  201. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  202. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  203. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  204. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  205. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  206. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  207. //patientCare Insert
  208. //System.out.println( "dto.getJumin().substring(2) : " + dto.getJumin().replace( "-" , "" ).substring(2) );
  209. String jumin = dto.getJumin();
  210. jumin = LifeCenterFunction.removeStringChar(jumin, "-");
  211. dto.setJumin( jumin );
  212. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  213. // 환자 password는 생년월일(yyyymmdd)을 암호화
  214. // dto.setPw( LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, jumin ) );
  215. dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  216. dto.setCenterCode( sesCenterCode );
  217. dto.setState( "H" ); // H : 입소
  218. dto.setCreateBy( sesId );
  219. if( dto.getDisisolationDate() != null && dto.getDisisolationDate().equals( "" ) ) {
  220. dto.setDisisolationDate( null );
  221. }
  222. if( dto.getSymptomStartDate() != null && dto.getSymptomStartDate().equals( "" ) ) {
  223. dto.setSymptomStartDate( null );
  224. }
  225. if (dto.getExpectedDischargeDate() != null && dto.getExpectedDischargeDate().equals("")) {
  226. dto.setExpectedDischargeDate(null);
  227. }
  228. patientService.insertPatientCare( dto ); // 환지 기본정보 insert
  229. int patientIdx = dto.getPatientIdx();
  230. //개인정보로그
  231. String processingContents = "신규환자 생성";
  232. PrivateLogDTO logDTO = new PrivateLogDTO();
  233. logDTO.setId( sesId );
  234. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  235. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  236. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  237. logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
  238. logDTO.setProcessingContents( processingContents );
  239. privateLogService.insertPrivateAccessLog( logDTO );
  240. dto.setPatientIdx( patientIdx );
  241. //patientDisease Insert
  242. dto.setEtcCheck( dto.getEtcCheckDisease() );
  243. dto.setEtcContent( dto.getEtcContentDisease() );
  244. patientService.insertPatientDisease( dto );
  245. //patientSymptom Insert
  246. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  247. dto.setEtcContent( dto.getEtcContentSymptom() );
  248. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  249. //
  250. patientService.insertPatientSymptom( dto );
  251. return "redirect:/patient/info?patientIdx=" + patientIdx;
  252. }
  253. @RequestMapping("/info")
  254. public ModelAndView patientInfo( @ModelAttribute("dto") PatientDTO dto,
  255. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  256. String referer = request.getHeader("referer");
  257. ModelAndView mv = setMV("patient/info");
  258. int patientIdx = dto.getPatientIdx();
  259. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  260. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  261. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  262. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  263. dto = patientService.selectPatientOne(dto);
  264. //개인정보로그
  265. String processingContents = "환자상세 조회 ";
  266. PrivateLogDTO logDTO = new PrivateLogDTO();
  267. logDTO.setId( sesId );
  268. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  269. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  270. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  271. logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
  272. logDTO.setProcessingContents( processingContents );
  273. privateLogService.insertPrivateAccessLog( logDTO );
  274. String jumin = dto.getJumin();
  275. jumin = LifeCenterFunction.changeJuminToBirthday(jumin);
  276. dto.setJumin(jumin);
  277. dto.setPatientPhone(LifeCenterFunction.phone(dto.getPatientPhone()));
  278. dto.setGuardianPhone(LifeCenterFunction.phone(dto.getGuardianPhone()));
  279. String bloodPress = dto.getBloodPressureLevel();
  280. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  281. String[] bloodPressureLevel = bloodPress.split("[|]");
  282. if (bloodPressureLevel[0] != null) {
  283. dto.setBloodPressureLevelCon(bloodPressureLevel[0]);
  284. }
  285. if (bloodPressureLevel[1] != null) {
  286. dto.setBloodPressureLevelRel(bloodPressureLevel[1]);
  287. }
  288. }
  289. String strDisease = "";
  290. String strSymptom = LifeCenterFunction.getSymptom(dto);
  291. if (dto.getBasalDiseaseYn().equals("Y")) {
  292. strDisease = LifeCenterFunction.getDisease(dto);
  293. }
  294. StaffDTO staffDTO = new StaffDTO();
  295. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  296. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  297. staffDTO.setCenterCode( Integer.valueOf( dto.getCenterCode() ) );
  298. staffDTO.setUseYn( "" );
  299. int staffCount = staffService.selectMemberListCount( staffDTO );
  300. if( staffCount > 0 ) {
  301. staffDTO.setLimit( 0 );
  302. staffDTO.setLimitMax( staffCount );
  303. staffList = staffService.selectMemberList( staffDTO );
  304. }
  305. CenterInfoDTO cdto = new CenterInfoDTO();
  306. List<CenterInfoDTO> centerListAll = centerService.selectCenterListAll( cdto );
  307. mv.addObject( "disease", strDisease );
  308. mv.addObject( "symptom", strSymptom );
  309. mv.addObject( "patientIdx", patientIdx );
  310. mv.addObject( "enIdx", LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, String.valueOf( patientIdx ) ) );
  311. mv.addObject( "info", dto );
  312. mv.addObject( "staffList", staffList );
  313. mv.addObject( "referer", referer );
  314. mv.addObject( "centerListAll", centerListAll );
  315. return mv;
  316. }
  317. @RequestMapping( value="/changeCenterInfo", method=RequestMethod.POST )
  318. @Transactional(propagation=Propagation.REQUIRED)
  319. public String changeCenterInfo(
  320. @RequestParam(value="oldCenterCode", required=true ) int oldCenterCode,
  321. @RequestParam(value="newCenterCode", required=true ) int newCenterCode,
  322. @RequestParam(value="oldCenterName", required=true ) String oldCenterName,
  323. @RequestParam(value="newCenterName", required=true ) String newCenterName,
  324. @RequestParam(value="patientIdx", required=true ) int patientIdx,
  325. @RequestParam(value="patientName", required=true ) String patientName,
  326. HttpServletRequest request,HttpServletResponse response ) {
  327. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  328. String comment = patientName+"[patient_idx:"+13+"] - " + oldCenterName + "[center_code:"+oldCenterCode+"] => " + newCenterName + "[center_code:"+newCenterCode+"]";
  329. PatientDTO dto = new PatientDTO();
  330. dto.setOldCenterCode( oldCenterCode );
  331. dto.setNewCenterCode( newCenterCode );
  332. dto.setPatientIdx( patientIdx );
  333. dto.setUpdateBy( sesId );
  334. dto.setComment( comment );
  335. // System.err.println( "comment : " + comment );
  336. patientService.updatePatientCenterInfo(dto);
  337. patientService.insertCenterChangeLog(dto);
  338. return "redirect:/patient/list";
  339. }
  340. @RequestMapping("/delete")
  341. @Transactional(propagation=Propagation.REQUIRED)
  342. public String patientDelete( @RequestParam( value="enIdx", required = true ) String enIdx,
  343. @RequestParam( value="deleteReason", required = false, defaultValue = "" ) String deleteReason,
  344. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  345. String deIdx = LifeCenterFunction.aesDecrypt( config.aesKey, config.IV, enIdx );
  346. int patientIdx = Integer.valueOf( deIdx );
  347. PatientDTO dto = new PatientDTO();
  348. dto.setPatientIdx( patientIdx );
  349. System.err.println( "patientIdx : " + patientIdx );
  350. int total = patientService.selectPatientOneCount(dto);
  351. if( total == 0 ) {
  352. LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '이미 삭제되었거나 존재하지않는 환자입니다.', callBack : function(){ history.back(); } });" );
  353. return "/common/blank";
  354. } else {
  355. // patientService.deletePatientCare(dto);
  356. // 환자데이터를 삭제하지않고 flag 값을 변경 (21.04.12 수정)
  357. PatientDTO patientOne = patientService.selectPatientOne(dto);
  358. dto.setUseYn( "N" );
  359. dto.setDeleteReason( deleteReason );
  360. patientService.updatePatientCareUseYn(dto);
  361. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  362. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  363. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  364. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  365. String processingContents = "환자삭제 [사유:"+deleteReason+"]";
  366. PrivateLogDTO logDTO = new PrivateLogDTO();
  367. logDTO.setId( sesId );
  368. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  369. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  370. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  371. logDTO.setProcessingTarget( "(환자)" + patientOne.getPatientName() + "["+patientOne.getPatientIdx()+"]" );
  372. logDTO.setProcessingContents( processingContents );
  373. privateLogService.insertPrivateAccessLog( logDTO );
  374. }
  375. LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '환자정보가 삭제되었습니다. ', callBack : function(){ location.href='./list'; } });" );
  376. return "/common/blank";
  377. }
  378. @RequestMapping("/edit")
  379. public ModelAndView patientEdit(
  380. @ModelAttribute("dto") PatientDTO patientDTO,
  381. HttpServletRequest request,HttpServletResponse response ) {
  382. ModelAndView mv = setMV("patient/edit");
  383. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  384. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  385. int patientIdx = patientDTO.getPatientIdx();
  386. int cnt = patientService.selectPatientOneCount(patientDTO);
  387. if (cnt > 0) {
  388. patientDTO = patientService.selectPatientOne( patientDTO );
  389. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  390. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  391. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  392. String processingContents = "환자수정페이지 접속";
  393. PrivateLogDTO logDTO = new PrivateLogDTO();
  394. logDTO.setId( sesId );
  395. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  396. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  397. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  398. logDTO.setProcessingTarget( "(환자)" + patientDTO.getPatientName() + "["+patientDTO.getPatientIdx()+"]" );
  399. logDTO.setProcessingContents( processingContents );
  400. privateLogService.insertPrivateAccessLog( logDTO );
  401. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  402. // 센터가 존재하는지 체크
  403. CenterInfoDTO dto = new CenterInfoDTO();
  404. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  405. dto.setStaffId( sesId );
  406. String centerName = "";
  407. int centerCount = centerService.selectCenterCount( dto );
  408. if( sesCenterCode.equals( "0" ) ) { //센터코드가 없는 시스템권한 계정인경우
  409. centerName = patientDTO.getCenterName();
  410. } else {
  411. if( centerCount > 0 ) {
  412. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  413. } else {
  414. LifeCenterFunction.scriptMessage(response, "alertBox({ txt : '문진이 정상적으로 제출되었습니다.', callBack : function(){ history.back(); } });" );
  415. // return ""; 아직처리안함
  416. }
  417. }
  418. String bloodPress = patientDTO.getBloodPressureLevel();
  419. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  420. String[] bloodPressureLevel = bloodPress.split("[|]");
  421. if (bloodPressureLevel[0] != null) {
  422. patientDTO.setBloodPressureLevelCon(bloodPressureLevel[0]);
  423. }
  424. if (bloodPressureLevel[1] != null) {
  425. patientDTO.setBloodPressureLevelRel(bloodPressureLevel[1]);
  426. }
  427. }
  428. StaffDTO staffDTO = new StaffDTO();
  429. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  430. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  431. staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
  432. staffDTO.setUseYn( "" );
  433. int staffCount = staffService.selectMemberListCount( staffDTO );
  434. if( staffCount > 0 ) {
  435. staffDTO.setLimit( 0 );
  436. staffDTO.setLimitMax( staffCount );
  437. staffList = staffService.selectMemberList( staffDTO );
  438. }
  439. mv.addObject( "centerName", centerName );
  440. mv.addObject( "centerCount", centerCount );
  441. mv.addObject( "staffList", staffList );
  442. mv.addObject( "patientIdx", patientIdx );
  443. mv.addObject( "patientData", patientDTO );
  444. mv.addObject( "actionType", "edit" );
  445. } else {
  446. mv.addObject( "error", "error" );
  447. mv.addObject( "message", "삭제되었거나 존재하지 않는 환자입니다." );
  448. }
  449. return mv;
  450. }
  451. @RequestMapping("/edit/update")
  452. @Transactional(propagation=Propagation.REQUIRED)
  453. public String patientEditUpdate(
  454. @ModelAttribute("dto") PatientDTO dto,
  455. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  456. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  457. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  458. int patientIdx = dto.getPatientIdx();
  459. dto.setPatientIdx( patientIdx );
  460. PatientDTO originPatientData = patientService.selectPatientOne( dto );
  461. //patientCare Update
  462. String jumin = dto.getJumin();
  463. jumin = LifeCenterFunction.removeStringChar(jumin, "-");
  464. dto.setJumin( jumin );
  465. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  466. dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  467. dto.setCenterCode( sesCenterCode );
  468. dto.setUpdateBy( sesId );
  469. if( dto.getDisisolationDate() != null && dto.getDisisolationDate().equals( "" ) ) {
  470. dto.setDisisolationDate( null );
  471. }
  472. if( dto.getSymptomStartDate() != null && dto.getSymptomStartDate().equals( "" ) ) {
  473. dto.setSymptomStartDate( null );
  474. }
  475. patientService.updatePatientCare( dto ); // 환지 기본정보
  476. //patientDisease Insert
  477. dto.setEtcCheck( dto.getEtcCheckDisease() );
  478. dto.setEtcContent( dto.getEtcContentDisease() );
  479. patientService.updatePatientDisease( dto );
  480. //patientSymptom Insert
  481. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  482. dto.setEtcContent( dto.getEtcContentSymptom() );
  483. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  484. System.err.println( dto.toString() );
  485. patientService.updatePatientSymptom( dto );
  486. dto = new PatientDTO();
  487. dto.setPatientIdx( patientIdx );
  488. PatientDTO newPatientData = patientService.selectPatientOne( dto );
  489. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  490. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  491. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  492. String processingDetail = "[수정내역 :";
  493. PrivateLogDTO logDTO = new PrivateLogDTO();
  494. int cnt = 0;
  495. try{
  496. Object objNew=newPatientData;
  497. for (Field field : objNew.getClass().getDeclaredFields()){
  498. Object objOrigin=originPatientData;
  499. for (Field field1 : objOrigin.getClass().getDeclaredFields()){
  500. if( field1.getName().equals( field.getName() ) ) {
  501. field1.setAccessible(true);
  502. Object valueOrigin = field1.get(objOrigin);
  503. String originVal = valueOrigin == null ? "": valueOrigin.toString();
  504. field.setAccessible(true);
  505. Object valueNew=field.get(objNew);
  506. String newVal = valueNew == null ? "": valueNew.toString();
  507. // System.err.println(field.getName()+","+originVal + " -> " + newVal);
  508. if( !originVal.equals( newVal ) ) {
  509. // System.out.println(field.getName()+","+originVal + " -> " + newVal);
  510. String nv = cnt >= 1 ? ", " : " ";
  511. processingDetail += nv + field.getName()+"컬럼 값 변경 ("+originVal + " -> " + newVal +")";
  512. cnt ++;
  513. }
  514. }
  515. }
  516. }
  517. processingDetail +="]";
  518. }catch (Exception e){
  519. e.printStackTrace();
  520. }
  521. String processingContents = "환자정보 수정 [총 " + cnt + "건 항목] " + processingDetail;
  522. System.err.println( "processingContents : " + processingContents );
  523. logDTO.setId( sesId );
  524. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  525. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  526. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  527. logDTO.setProcessingTarget( "(환자)" + originPatientData.getPatientName() + "["+originPatientData.getPatientIdx()+"]" );
  528. logDTO.setProcessingContents( processingContents );
  529. privateLogService.insertPrivateAccessLog( logDTO );
  530. return "redirect:/patient/info?patientIdx=" + patientIdx;
  531. }
  532. @RequestMapping("/privacy")
  533. public ModelAndView patientPrivacy() {
  534. ModelAndView mv = setMV("patient/privacy");
  535. return mv;
  536. }
  537. @RequestMapping( value="/nonFaceStart", method = RequestMethod.POST )
  538. @ResponseBody
  539. public String nonFaceStart(
  540. @RequestParam( value="pId", required = true ) String pId,
  541. @RequestParam( value="patientIdx", required = true ) String patientIdx,
  542. @RequestParam( value="roomId", required = true ) String roomId,
  543. @RequestParam( value="pName", required = true ) String pName,
  544. HttpServletRequest request, HttpServletResponse response) throws Exception {
  545. String salt = LifeCenterFunction.getSalt();
  546. String timeStamp = LifeCenterFunction.getTimestamp();
  547. String signature = LifeCenterFunction.getSignature(config.nonFaceApiSecret, salt, timeStamp);
  548. String userId = LifeCenterSessionController.getSession(request, "sesId");
  549. String userNm = LifeCenterSessionController.getSession(request, "sesName");
  550. HashMap<String, String> data = new HashMap<String, String>();
  551. data.put("api_key", config.nonFaceApiKey);
  552. data.put("salt", salt);
  553. data.put("timestamp", timeStamp);
  554. data.put("signature", signature);
  555. data.put("client_id", config.nonFaceClientId);
  556. data.put("member_id", userId);
  557. String result = LifeCenterFunction.httpUrlConnection(config.nonFaceApiTokenUrl, data);
  558. JSONObject object = new JSONObject(result);
  559. String message = "";
  560. String token = "";
  561. for(String key : object.keySet()) {
  562. if (key.equals("errorCode")) {
  563. message = object.getString("message");
  564. } else if (key.equals("token")){
  565. token = object.getString("token");
  566. }
  567. }
  568. if (!message.equals("")) {
  569. //error
  570. } else {
  571. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  572. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  573. String remoteIp = LifeCenterFunction.getRemoteAddr( request );
  574. PushDTO dto = new PushDTO();
  575. dto.setSendType("D");
  576. dto.setTargetType("P");
  577. dto.setPushTitle("비대면 진료");
  578. dto.setPushContent("비대면 진료를 요청하였습니다.");
  579. dto.setPushPayLoad1("nonface");
  580. dto.setCenterCode( sesCenterCode );
  581. dto.setSender( sesId );
  582. dto.setSenderIp( remoteIp );
  583. dto.setSendState( "W" );
  584. pushService.insertPushData(dto);
  585. dto.setPatientIdx(Integer.valueOf(patientIdx));
  586. pushService.insertPushTargetTemp(dto);
  587. }
  588. String hashData = LifeCenterFunction.getSignature(config.nonFaceApiSecret, config.nonFaceApiKey, roomId + userId); //"1011503101"
  589. object.put("api_key", config.nonFaceApiKey);
  590. object.put("member_id", userId);
  591. object.put("token", token);
  592. object.put("room_id", roomId);
  593. object.put("member_name", userNm);
  594. object.put("classify", "d"); // p이면 환자 d이면 의사
  595. object.put("hashData", hashData);
  596. return object.toString();
  597. }
  598. @RequestMapping( value="/excel", method=RequestMethod.POST )
  599. public void getPatientList(
  600. @RequestParam(value="downMemo", required=false, defaultValue="") String downMemo,
  601. @RequestParam(value="inputState", required=false, defaultValue="ALL") String inputState,
  602. @RequestParam(value="patientName", required=false, defaultValue="") String patientName,
  603. @RequestParam(value="startDate", required=false, defaultValue="") String startDate,
  604. @RequestParam(value="endDate", required=false, defaultValue="") String endDate,
  605. @RequestParam(value="page", required=false, defaultValue="1") int page,
  606. HttpServletRequest request,HttpServletResponse response ) {
  607. String userId = LifeCenterSessionController.getSession(request, "sesId");
  608. String sesCenterCode = LifeCenterSessionController.getSession(request, "sesCenterCode");
  609. String sesGroupIdx = LifeCenterSessionController.getSession(request, "sesGroupIdx");
  610. //excel 다운로드 로그 남기기
  611. FileDownloadDTO fileDTO = new FileDownloadDTO();
  612. fileDTO.setId( userId );
  613. fileDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  614. fileDTO.setUrl( request.getRequestURI().toString() );
  615. fileDTO.setMemo( downMemo );
  616. fileDTO.setEtc( "" );
  617. fileDownloadService.insertExcelDownloadLog( fileDTO );
  618. // 권한이 SYSTEM일경우
  619. PatientDTO dto = new PatientDTO();
  620. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  621. dto.setGroupIdx(Integer.valueOf(sesGroupIdx));
  622. dto.setPatientName(patientName);
  623. dto.setState(inputState);
  624. dto.setStartDate(startDate);
  625. dto.setEndDate(endDate);
  626. int total = patientService.selectPatientCount(dto);
  627. List<PatientDTO> result = new ArrayList<PatientDTO>();
  628. if (total > 0) {
  629. dto.setLimit( 0 );
  630. dto.setLimitMax( total );
  631. result = patientService.selectPatientList(dto);
  632. for (PatientDTO temp : result) {
  633. result.get(result.indexOf(temp)).setSymptomContent(LifeCenterFunction.getSymptom(temp));
  634. }
  635. }
  636. getPatientListExcel(request, response, result );
  637. }
  638. private void getPatientListExcel(HttpServletRequest request, HttpServletResponse response, List<PatientDTO> data ) {
  639. String password = LifeCenterSessionController.getSession(request, "sesPhoneNumber");
  640. password = password.toLowerCase();
  641. if (!password.equals("null")) {
  642. password = password.replace("-", "");
  643. password = password.substring(3).trim();
  644. } else {
  645. password = "";
  646. }
  647. Workbook workbook = new XSSFWorkbook();
  648. Sheet sheet1 = workbook.createSheet("firstSheet");
  649. DecimalFormat df = new DecimalFormat("#,###");
  650. //1.셀 스타일 및 폰트 설정
  651. CellStyle styleOfBoardFillFontBlackBold16 = workbook.createCellStyle();
  652. //정렬
  653. styleOfBoardFillFontBlackBold16.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
  654. styleOfBoardFillFontBlackBold16.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
  655. //배경색
  656. styleOfBoardFillFontBlackBold16.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
  657. styleOfBoardFillFontBlackBold16.setFillPattern(CellStyle.SOLID_FOREGROUND);
  658. //테두리 선 (우,좌,위,아래)
  659. styleOfBoardFillFontBlackBold16.setBorderRight(HSSFCellStyle.BORDER_THIN);
  660. styleOfBoardFillFontBlackBold16.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  661. styleOfBoardFillFontBlackBold16.setBorderTop(HSSFCellStyle.BORDER_THIN);
  662. styleOfBoardFillFontBlackBold16.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  663. //폰트 설정
  664. Font fontOfGothicBlackBold16 = workbook.createFont();
  665. // fontOfGothicBlackBold16.setFontName("나눔고딕"); //글씨체
  666. fontOfGothicBlackBold16.setFontHeight((short)(10*20)); //사이즈
  667. fontOfGothicBlackBold16.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
  668. styleOfBoardFillFontBlackBold16.setFont(fontOfGothicBlackBold16);
  669. int i = 1;
  670. Row row = sheet1.createRow(0);
  671. Cell cell1 = row.createCell(0);
  672. Cell cell2 = row.createCell(1);
  673. Cell cell3 = row.createCell(2);
  674. Cell cell4 = row.createCell(3);
  675. Cell cell5 = row.createCell(4);
  676. Cell cell6 = row.createCell(5);
  677. Cell cell7 = row.createCell(6);
  678. Cell cell8 = row.createCell(7);
  679. Cell cell9 = row.createCell(8);
  680. Cell cell10 = row.createCell(9);
  681. Cell cell11 = row.createCell(10);
  682. Cell cell12 = row.createCell(11);
  683. Cell cell13 = row.createCell(12);
  684. Cell cell14 = row.createCell(13);
  685. Cell cell15 = row.createCell(14);
  686. cell1.setCellStyle(styleOfBoardFillFontBlackBold16);
  687. cell2.setCellStyle(styleOfBoardFillFontBlackBold16);
  688. cell3.setCellStyle(styleOfBoardFillFontBlackBold16);
  689. cell4.setCellStyle(styleOfBoardFillFontBlackBold16);
  690. cell5.setCellStyle(styleOfBoardFillFontBlackBold16);
  691. cell6.setCellStyle(styleOfBoardFillFontBlackBold16);
  692. cell7.setCellStyle(styleOfBoardFillFontBlackBold16);
  693. cell8.setCellStyle(styleOfBoardFillFontBlackBold16);
  694. cell9.setCellStyle(styleOfBoardFillFontBlackBold16);
  695. cell10.setCellStyle(styleOfBoardFillFontBlackBold16);
  696. cell11.setCellStyle(styleOfBoardFillFontBlackBold16);
  697. cell12.setCellStyle(styleOfBoardFillFontBlackBold16);
  698. cell13.setCellStyle(styleOfBoardFillFontBlackBold16);
  699. cell14.setCellStyle(styleOfBoardFillFontBlackBold16);
  700. cell15.setCellStyle(styleOfBoardFillFontBlackBold16);
  701. sheet1.setColumnWidth( 0, 5000); //센터명
  702. sheet1.setColumnWidth( 1, 3000); //환자명
  703. sheet1.setColumnWidth( 2, 4000); //동호실
  704. sheet1.setColumnWidth( 3, 2000); //성별
  705. sheet1.setColumnWidth( 4, 3500); //나이
  706. sheet1.setColumnWidth( 5, 3500); //생년월일
  707. sheet1.setColumnWidth( 6, 3500); //입소일자
  708. sheet1.setColumnWidth( 7, 3500); //상태변경일
  709. sheet1.setColumnWidth( 8, 3800); //상태
  710. sheet1.setColumnWidth( 9, 6000); //체온
  711. sheet1.setColumnWidth( 10, 10000); //혈압
  712. sheet1.setColumnWidth( 11, 6200); //맥박
  713. sheet1.setColumnWidth( 12, 6200); //산소포화도
  714. sheet1.setColumnWidth( 13, 7000); //혈당
  715. sheet1.setColumnWidth( 14, 14000); //임상증상
  716. cell1.setCellValue("생활치료센터명");
  717. cell2.setCellValue("환자명");
  718. cell3.setCellValue("동,호실");
  719. cell4.setCellValue("성별/나이");
  720. cell5.setCellValue("생년월일");
  721. cell6.setCellValue("확진일자");
  722. cell7.setCellValue("입소일자");
  723. cell8.setCellValue("퇴소예정일");
  724. cell9.setCellValue("상태(상태 변경일)");
  725. cell10.setCellValue("체온");
  726. cell11.setCellValue("혈압");
  727. cell12.setCellValue("맥박");
  728. cell13.setCellValue("산소포화도");
  729. cell14.setCellValue("혈당");
  730. cell15.setCellValue("임상증상");
  731. for (PatientDTO dto : data) {
  732. row = sheet1.createRow(i);
  733. cell1 = row.createCell(0);
  734. cell2 = row.createCell(1);
  735. cell3 = row.createCell(2);
  736. cell4 = row.createCell(3);
  737. cell5 = row.createCell(4);
  738. cell6 = row.createCell(5);
  739. cell7 = row.createCell(6);
  740. cell8 = row.createCell(7);
  741. cell9 = row.createCell(8);
  742. cell10 = row.createCell(9);
  743. cell11 = row.createCell(10);
  744. cell12 = row.createCell(11);
  745. cell13 = row.createCell(12);
  746. cell14 = row.createCell(13);
  747. cell15 = row.createCell(14);
  748. String patientName = dto.getPatientName();
  749. String roomWard = ( dto.getWardNumber() == null || dto.getWardNumber().equals( "" ) ) ? "" : dto.getWardNumber()+"동";
  750. roomWard += ( dto.getRoomNumber() == null || dto.getRoomNumber().equals( "" ) ) ? "" : dto.getRoomNumber()+"호 ";
  751. String gender = dto.getGender();
  752. String age = dto.getAge();
  753. String jumin = dto.getJumin();
  754. String confirmationDate = dto.getConfirmationDate();
  755. String hospitalizationDate = dto.getHospitalizationDate();
  756. String expecteDischargeDate = dto.getExpectedDischargeDate();
  757. String disisolationDate = dto.getDisisolationDate();
  758. String state = dto.getState();
  759. String temperature = dto.getTemperature();
  760. String temperatureCreateDate = dto.getTemperatureCreateDate();
  761. String systolicBloodPressure = dto.getSystolicBloodPressure();
  762. String systolicBloodPressureCreateDate = dto.getSystolicBloodPressureCreateDate();
  763. String diastolicBloodPressure = dto.getDiastolicBloodPressure();
  764. String diastolicBloodPressureCreateDate = dto.getDiastolicBloodPressureCreateDate();
  765. String pulseRate = dto.getPulseRate();
  766. String pulseRateCreateDate = dto.getPulseRateCreateDate();
  767. String oxygenSaturation = dto.getOxygenSaturation();
  768. String oxygenSaturationCreateDate = dto.getOxygenSaturationCreateDate();
  769. String bloodSugar = dto.getBloodSugar();
  770. String bloodSugarCreateDate = dto.getBloodSugarCreateDate();
  771. String notMeasured = "-";
  772. String symptomDate = dto.getCreateDate();
  773. String symptomContent = dto.getSymptomContent();
  774. // String symptom = LifeCenterFunction.getSymptom( dto );
  775. String centerName = dto.getCenterName();
  776. cell1.setCellValue( centerName );
  777. cell2.setCellValue( patientName );
  778. cell3.setCellValue( roomWard );
  779. cell4.setCellValue( gender + "/" + age );
  780. cell5.setCellValue( jumin );
  781. cell6.setCellValue( confirmationDate );
  782. cell7.setCellValue( hospitalizationDate );
  783. cell8.setCellValue( expecteDischargeDate );
  784. if (state.equals("입소")) {
  785. cell9.setCellValue( state );
  786. } else {
  787. cell9.setCellValue( state + "(" + disisolationDate + ")" );
  788. }
  789. cell10.setCellValue( ( temperature == null || temperature.equals("") ) ? notMeasured : temperature + " ˚C (" + temperatureCreateDate + ")" );
  790. cell11.setCellValue( ( systolicBloodPressure == null || systolicBloodPressure.equals("") ) ? notMeasured : systolicBloodPressure + " mmHg / " + diastolicBloodPressure + " mmHg (" + systolicBloodPressureCreateDate + ")" );
  791. cell12.setCellValue( ( pulseRate == null || pulseRate.equals("") ) ? notMeasured : pulseRate + " bpm (" + pulseRateCreateDate + ")" );
  792. cell13.setCellValue( ( oxygenSaturation == null || oxygenSaturation.equals("") ) ? notMeasured : oxygenSaturation + " % (" + oxygenSaturationCreateDate + ")" );
  793. cell14.setCellValue( ( bloodSugar == null || bloodSugar.equals("") ) ? notMeasured : bloodSugar + " mg/dL (" + bloodSugarCreateDate + ")" );
  794. cell15.setCellValue( ( symptomContent == null || symptomDate == null || symptomContent.equals("") || symptomDate.equals( "" ) ) ? notMeasured : symptomContent + " (" + symptomDate + ")" );
  795. i++;
  796. }
  797. row = sheet1.createRow(i);
  798. cell1 = row.createCell(2);
  799. cell2 = row.createCell(3);
  800. cell3 = row.createCell(4);
  801. cell4 = row.createCell(5);
  802. cell5 = row.createCell(6);
  803. cell6 = row.createCell(7);
  804. cell7 = row.createCell(8);
  805. cell8 = row.createCell(9);
  806. cell9 = row.createCell(10);
  807. cell10 = row.createCell(11);
  808. cell11 = row.createCell(12);
  809. cell12 = row.createCell(13);
  810. cell13 = row.createCell(14);
  811. cell14 = row.createCell(15);
  812. cell15 = row.createCell(16);
  813. try {
  814. // File file = new File(".");
  815. // String rootPath = file.getAbsolutePath();
  816. // System.out.println("현재 프로젝트의 경로 : "+rootPath );
  817. // JBOSS에서 구동시 /home1/jboss/jboss-eap-7.3/domain/test/excel-temp 경로에 저장이됨
  818. String tempPath = "../excel-temp/testExcel.xlsx";
  819. String downName = LifeCenterFunction.getNow() + " 환자리스트.xlsx";
  820. File xlsFile = new File(tempPath);
  821. // FileOutputStream fileOut = new FileOutputStream(tempPath);
  822. // workbook.write(fileOut);
  823. // fileOut.close();
  824. ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
  825. FileOutputStream fos = new FileOutputStream(tempPath);
  826. workbook.write(fileOut);
  827. InputStream filein = new ByteArrayInputStream(fileOut.toByteArray());
  828. OPCPackage opc = OPCPackage.open(filein);
  829. POIFSFileSystem fileSystem = new POIFSFileSystem();
  830. EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.agile);
  831. Encryptor encryptor = encryptionInfo.getEncryptor();
  832. encryptor.confirmPassword(password);
  833. opc.save(encryptor.getDataStream(fileSystem));
  834. opc.flush();
  835. fileSystem.writeFilesystem(fos);
  836. fileOut.close();
  837. opc.close();
  838. filein.close();
  839. fileSystem.close();
  840. LifeCenterFileDownload.download(request, response, tempPath, downName);
  841. xlsFile.delete();
  842. } catch (FileNotFoundException e) {
  843. e.printStackTrace();
  844. } catch (IOException e) {
  845. e.printStackTrace();
  846. } catch (InvalidFormatException e) {
  847. // TODO Auto-generated catch block
  848. e.printStackTrace();
  849. } catch (GeneralSecurityException e) {
  850. // TODO Auto-generated catch block
  851. e.printStackTrace();
  852. }
  853. }
  854. }