PatientController.java 50 KB

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