PatientController.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. package com.lemon.lifecenter.controller;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.text.DecimalFormat;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  13. import org.apache.poi.ss.usermodel.Cell;
  14. import org.apache.poi.ss.usermodel.CellStyle;
  15. import org.apache.poi.ss.usermodel.Font;
  16. import org.apache.poi.ss.usermodel.IndexedColors;
  17. import org.apache.poi.ss.usermodel.Row;
  18. import org.apache.poi.ss.usermodel.Sheet;
  19. import org.apache.poi.ss.usermodel.Workbook;
  20. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  21. import org.json.JSONObject;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Controller;
  26. import org.springframework.transaction.annotation.Propagation;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import org.springframework.web.bind.annotation.ModelAttribute;
  29. import org.springframework.web.bind.annotation.RequestMapping;
  30. import org.springframework.web.bind.annotation.RequestMethod;
  31. import org.springframework.web.bind.annotation.RequestParam;
  32. import org.springframework.web.bind.annotation.ResponseBody;
  33. import org.springframework.web.servlet.ModelAndView;
  34. import com.lemon.lifecenter.common.LifeCenterConfigVO;
  35. import com.lemon.lifecenter.common.LifeCenterController;
  36. import com.lemon.lifecenter.common.LifeCenterFileDownload;
  37. import com.lemon.lifecenter.common.LifeCenterFunction;
  38. import com.lemon.lifecenter.common.LifeCenterPaging;
  39. import com.lemon.lifecenter.common.LifeCenterSessionController;
  40. import com.lemon.lifecenter.dto.CenterInfoDTO;
  41. import com.lemon.lifecenter.dto.PatientDTO;
  42. import com.lemon.lifecenter.dto.StaffDTO;
  43. import com.lemon.lifecenter.service.CenterService;
  44. import com.lemon.lifecenter.service.PatientService;
  45. import com.lemon.lifecenter.service.StaffService;
  46. @Controller
  47. @RequestMapping("/patient")
  48. //@DependsOn(value = {"LifeCenterPaging"})
  49. public class PatientController extends LifeCenterController {
  50. @Autowired
  51. private PatientService patientService;
  52. @Autowired
  53. private CenterService centerService;
  54. @Autowired
  55. private StaffService staffService;
  56. @Autowired
  57. private LifeCenterConfigVO config;
  58. private LifeCenterPaging paging;
  59. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  60. @RequestMapping("/list")
  61. public ModelAndView patientList(
  62. @RequestParam(value="inputState", required=false, defaultValue="ALL") String inputState,
  63. @RequestParam(value="patientName", required=false, defaultValue="") String patientName,
  64. @RequestParam(value="startDate", required=false, defaultValue="") String startDate,
  65. @RequestParam(value="endDate", required=false, defaultValue="") String endDate,
  66. @RequestParam(value="page", required=false, defaultValue="1") int page,
  67. @RequestParam(value="sortType", required=false, defaultValue="patient_name") String sortType,
  68. @RequestParam(value="sort", required=false, defaultValue="asc") String sort,
  69. HttpServletRequest request,HttpServletResponse response) {
  70. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  71. String sesGroupIdx = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
  72. // 권한이 SYSTEM일경우
  73. PatientDTO dto = new PatientDTO();
  74. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  75. dto.setGroupIdx( Integer.valueOf( sesGroupIdx ) );
  76. dto.setPatientName(patientName);
  77. dto.setState(inputState);
  78. dto.setStartDate(startDate);
  79. dto.setEndDate(endDate);
  80. dto.setSortType(sortType);
  81. dto.setSort(sort);
  82. dto.setLimit( ( Integer.valueOf( page ) - 1 ) * config.pageDataSize );
  83. dto.setLimitMax( config.pageDataSize );
  84. int total = patientService.selectPatientCount(dto);
  85. List<PatientDTO> result = new ArrayList<PatientDTO>();
  86. if (total > 0) {
  87. result = patientService.selectPatientList(dto);
  88. for( PatientDTO temp : result ) {
  89. result.get( result.indexOf( temp ) ).setSymptomContent( LifeCenterFunction.getSymptom( temp ) );
  90. }
  91. }
  92. ModelAndView mv = setMV("patient/list");
  93. String param = "patientName=" + patientName + "&inputState=" + inputState + "&startDate=" + startDate + "&endDate=" + endDate + "&sortType=" + sortType + "&sort=" + sort;
  94. paging = LifeCenterPaging.getInstance();
  95. paging.paging(config, total, page, param);
  96. mv.addObject("inputState", inputState);
  97. mv.addObject("patientName", patientName);
  98. mv.addObject("total", total);
  99. mv.addObject("item", result);
  100. mv.addObject("paging", paging);
  101. mv.addObject( "startDate", startDate );
  102. mv.addObject( "endDate", endDate );
  103. mv.addObject( "page", page );
  104. mv.addObject( "pageSize", dto.getLimitMax() );
  105. mv.addObject( "sesGroupIdx" , sesGroupIdx );
  106. mv.addObject("sort", sort);
  107. mv.addObject("sortType", sortType);
  108. return mv;
  109. }
  110. @RequestMapping("/new")
  111. public ModelAndView patientNew( HttpServletRequest request,HttpServletResponse response ) {
  112. ModelAndView mv = setMV("patient/new");
  113. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  114. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  115. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  116. CenterInfoDTO dto = new CenterInfoDTO();
  117. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  118. dto.setStaffId( sesId );
  119. int centerCount = centerService.selectCenterOneCount( dto );
  120. String centerName = "";
  121. if( centerCount > 0 ) {
  122. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  123. }
  124. StaffDTO staffDTO = new StaffDTO();
  125. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  126. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  127. staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
  128. staffDTO.setUseYn( "" );
  129. int staffCount = staffService.selectMemberListCount( staffDTO );
  130. if( staffCount > 0 ) {
  131. staffDTO.setLimit( 0 );
  132. staffDTO.setLimitMax( staffCount );
  133. staffList = staffService.selectMemberList( staffDTO );
  134. }
  135. mv.addObject( "centerName", centerName );
  136. mv.addObject( "centerCount", centerCount );
  137. mv.addObject( "actionType", "new" );
  138. mv.addObject( "staffList", staffList );
  139. return mv;
  140. }
  141. @RequestMapping("/new/insert")
  142. @Transactional(propagation=Propagation.REQUIRED)
  143. public String patientNewInsert(
  144. @ModelAttribute("dto") final PatientDTO dto,
  145. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  146. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  147. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  148. //patientCare Insert
  149. //System.out.println( "dto.getJumin().substring(2) : " + dto.getJumin().replace( "-" , "" ).substring(2) );
  150. String jumin = dto.getJumin();
  151. jumin = LifeCenterFunction.removeStringChar(jumin, "-");
  152. dto.setJumin( jumin );
  153. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  154. // 환자 password는 생년월일(yyyymmdd)을 암호화
  155. // dto.setPw( LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, jumin ) );
  156. dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  157. dto.setCenterCode( sesCenterCode );
  158. dto.setState( "H" ); // H : 입소
  159. dto.setCreateBy( sesId );
  160. if( dto.getDisisolationDate() != null && dto.getDisisolationDate().equals( "" ) ) {
  161. dto.setDisisolationDate( null );
  162. }
  163. if( dto.getSymptomStartDate() != null && dto.getSymptomStartDate().equals( "" ) ) {
  164. dto.setSymptomStartDate( null );
  165. }
  166. if (dto.getExpectedDischargeDate() != null && dto.getExpectedDischargeDate().equals("")) {
  167. dto.setExpectedDischargeDate(null);
  168. }
  169. patientService.insertPatientCare( dto ); // 환지 기본정보 insert
  170. int patientIdx = dto.getPatientIdx();
  171. dto.setPatientIdx( patientIdx );
  172. //patientDisease Insert
  173. dto.setEtcCheck( dto.getEtcCheckDisease() );
  174. dto.setEtcContent( dto.getEtcContentDisease() );
  175. patientService.insertPatientDisease( dto );
  176. //patientSymptom Insert
  177. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  178. dto.setEtcContent( dto.getEtcContentSymptom() );
  179. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  180. //
  181. patientService.insertPatientSymptom( dto );
  182. return "redirect:/patient/info?patientIdx=" + patientIdx;
  183. }
  184. @RequestMapping("/info")
  185. public ModelAndView patientInfo( @ModelAttribute("dto") PatientDTO dto,
  186. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  187. String referer = request.getHeader("referer");
  188. ModelAndView mv = setMV("patient/info");
  189. int patientIdx = dto.getPatientIdx();
  190. dto = patientService.selectPatientOne(dto);
  191. String jumin = dto.getJumin();
  192. jumin = LifeCenterFunction.changeJuminToBirthday(jumin);
  193. dto.setJumin(jumin);
  194. dto.setPatientPhone(LifeCenterFunction.phone(dto.getPatientPhone()));
  195. dto.setGuardianPhone(LifeCenterFunction.phone(dto.getGuardianPhone()));
  196. String bloodPress = dto.getBloodPressureLevel();
  197. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  198. String[] bloodPressureLevel = bloodPress.split("[|]");
  199. if (bloodPressureLevel[0] != null) {
  200. dto.setBloodPressureLevelCon(bloodPressureLevel[0]);
  201. }
  202. if (bloodPressureLevel[1] != null) {
  203. dto.setBloodPressureLevelRel(bloodPressureLevel[1]);
  204. }
  205. }
  206. String strDisease = "";
  207. String strSymptom = LifeCenterFunction.getSymptom(dto);
  208. if (dto.getBasalDiseaseYn().equals("Y")) {
  209. strDisease = LifeCenterFunction.getDisease(dto);
  210. }
  211. StaffDTO staffDTO = new StaffDTO();
  212. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  213. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  214. staffDTO.setCenterCode( Integer.valueOf( dto.getCenterCode() ) );
  215. staffDTO.setUseYn( "" );
  216. int staffCount = staffService.selectMemberListCount( staffDTO );
  217. if( staffCount > 0 ) {
  218. staffDTO.setLimit( 0 );
  219. staffDTO.setLimitMax( staffCount );
  220. staffList = staffService.selectMemberList( staffDTO );
  221. }
  222. mv.addObject( "disease", strDisease );
  223. mv.addObject( "symptom", strSymptom );
  224. mv.addObject( "patientIdx", patientIdx );
  225. mv.addObject( "enIdx", LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, String.valueOf( patientIdx ) ) );
  226. mv.addObject( "info", dto );
  227. mv.addObject( "staffList", staffList );
  228. mv.addObject( "referer", referer );
  229. return mv;
  230. }
  231. @RequestMapping("/delete")
  232. @Transactional(propagation=Propagation.REQUIRED)
  233. public String patientDelete( @RequestParam( value="enIdx", required = true ) String enIdx,
  234. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  235. String deIdx = LifeCenterFunction.aesDecrypt( config.aesKey, config.IV, enIdx );
  236. int patientIdx = Integer.valueOf( deIdx );
  237. PatientDTO dto = new PatientDTO();
  238. dto.setPatientIdx( patientIdx );
  239. System.err.println( "patientIdx : " + patientIdx );
  240. int total = patientService.selectPatientOneCount(dto);
  241. if( total == 0 ) {
  242. LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '이미 삭제되었거나 존재하지않는 환자입니다.', callBack : function(){ history.back(); } });" );
  243. return "/common/blank";
  244. } else {
  245. patientService.deletePatientCare(dto);
  246. }
  247. LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '환자정보가 삭제되었습니다. ', callBack : function(){ location.href='./list'; } });" );
  248. return "/common/blank";
  249. }
  250. @RequestMapping("/edit")
  251. public ModelAndView patientEdit(
  252. @ModelAttribute("dto") PatientDTO patientDTO,
  253. HttpServletRequest request,HttpServletResponse response ) {
  254. ModelAndView mv = setMV("patient/edit");
  255. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  256. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  257. int patientIdx = patientDTO.getPatientIdx();
  258. int cnt = patientService.selectPatientOneCount(patientDTO);
  259. if (cnt > 0) {
  260. patientDTO = patientService.selectPatientOne( patientDTO );
  261. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  262. // 센터가 존재하는지 체크
  263. CenterInfoDTO dto = new CenterInfoDTO();
  264. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  265. dto.setStaffId( sesId );
  266. String centerName = "";
  267. int centerCount = centerService.selectCenterCount( dto );
  268. if( centerCount > 0 ) {
  269. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  270. } else {
  271. LifeCenterFunction.scriptMessage(response, "alertBox({ txt : '문진이 정상적으로 제출되었습니다.', callBack : function(){ history.back(); } });" );
  272. // return ""; 아직처리안함
  273. }
  274. String bloodPress = patientDTO.getBloodPressureLevel();
  275. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  276. String[] bloodPressureLevel = bloodPress.split("[|]");
  277. if (bloodPressureLevel[0] != null) {
  278. patientDTO.setBloodPressureLevelCon(bloodPressureLevel[0]);
  279. }
  280. if (bloodPressureLevel[1] != null) {
  281. patientDTO.setBloodPressureLevelRel(bloodPressureLevel[1]);
  282. }
  283. }
  284. StaffDTO staffDTO = new StaffDTO();
  285. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  286. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  287. staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
  288. staffDTO.setUseYn( "" );
  289. int staffCount = staffService.selectMemberListCount( staffDTO );
  290. if( staffCount > 0 ) {
  291. staffDTO.setLimit( 0 );
  292. staffDTO.setLimitMax( staffCount );
  293. staffList = staffService.selectMemberList( staffDTO );
  294. }
  295. mv.addObject( "centerName", centerName );
  296. mv.addObject( "centerCount", centerCount );
  297. mv.addObject( "staffList", staffList );
  298. mv.addObject( "patientIdx", patientIdx );
  299. mv.addObject( "patientData", patientDTO );
  300. mv.addObject( "actionType", "edit" );
  301. } else {
  302. mv.addObject( "error", "error" );
  303. mv.addObject( "message", "삭제되었거나 존재하지 않는 환자입니다." );
  304. }
  305. return mv;
  306. }
  307. @RequestMapping("/edit/update")
  308. @Transactional(propagation=Propagation.REQUIRED)
  309. public String patientEditUpdate(
  310. @ModelAttribute("dto") final PatientDTO dto,
  311. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  312. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  313. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  314. int patientIdx = dto.getPatientIdx();
  315. dto.setPatientIdx( patientIdx );
  316. //patientCare Update
  317. String jumin = dto.getJumin();
  318. jumin = LifeCenterFunction.removeStringChar(jumin, "-");
  319. dto.setJumin( jumin );
  320. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  321. dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  322. dto.setCenterCode( sesCenterCode );
  323. dto.setUpdateBy( sesId );
  324. if( dto.getDisisolationDate() != null && dto.getDisisolationDate().equals( "" ) ) {
  325. dto.setDisisolationDate( null );
  326. }
  327. if( dto.getSymptomStartDate() != null && dto.getSymptomStartDate().equals( "" ) ) {
  328. dto.setSymptomStartDate( null );
  329. }
  330. patientService.updatePatientCare( dto ); // 환지 기본정보
  331. //patientDisease Insert
  332. dto.setEtcCheck( dto.getEtcCheckDisease() );
  333. dto.setEtcContent( dto.getEtcContentDisease() );
  334. patientService.updatePatientDisease( dto );
  335. //patientSymptom Insert
  336. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  337. dto.setEtcContent( dto.getEtcContentSymptom() );
  338. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  339. patientService.updatePatientSymptom( dto );
  340. return "redirect:/patient/info?patientIdx=" + patientIdx;
  341. }
  342. @RequestMapping("/privacy")
  343. public ModelAndView patientPrivacy() {
  344. ModelAndView mv = setMV("patient/privacy");
  345. return mv;
  346. }
  347. @RequestMapping( value="/nonFaceStart", method = RequestMethod.POST )
  348. @ResponseBody
  349. public String nonFaceStart(
  350. @RequestParam( value="pId", required = true ) String pId,
  351. @RequestParam( value="roomId", required = true ) String roomId,
  352. @RequestParam( value="pName", required = true ) String pName,
  353. HttpServletRequest request, HttpServletResponse response) throws Exception {
  354. String salt = LifeCenterFunction.getSalt();
  355. String timeStamp = LifeCenterFunction.getTimestamp();
  356. String signature = LifeCenterFunction.getSignature(config.nonFaceApiSecret, salt, timeStamp);
  357. String userId = LifeCenterSessionController.getSession(request, "sesId");
  358. String userNm = LifeCenterSessionController.getSession(request, "sesName");
  359. HashMap<String, String> data = new HashMap<String, String>();
  360. data.put("api_key", config.nonFaceApiKey);
  361. data.put("salt", salt);
  362. data.put("timestamp", timeStamp);
  363. data.put("signature", signature);
  364. data.put("client_id", config.nonFaceClientId);
  365. data.put("member_id", userId);
  366. String result = LifeCenterFunction.httpUrlConnection(config.nonFaceApiTokenUrl, data);
  367. JSONObject object = new JSONObject(result);
  368. String message = "";
  369. String token = "";
  370. for(String key : object.keySet()) {
  371. if (key.equals("errorCode")) {
  372. message = object.getString("message");
  373. } else if (key.equals("token")){
  374. token = object.getString("token");
  375. }
  376. }
  377. if (!message.equals("")) {
  378. //error
  379. }
  380. String hashData = LifeCenterFunction.getSignature(config.nonFaceApiSecret, config.nonFaceApiKey, roomId + userId); //"1011503101"
  381. object.put("api_key", config.nonFaceApiKey);
  382. object.put("member_id", userId);
  383. object.put("token", token);
  384. object.put("room_id", roomId);
  385. object.put("member_name", userNm);
  386. object.put("classify", "d"); // p이면 환자 d이면 의사
  387. object.put("hashData", hashData);
  388. return object.toString();
  389. }
  390. @RequestMapping( value="/excel", method=RequestMethod.POST )
  391. public void getPatientList(
  392. @RequestParam(value="inputState", required=false, defaultValue="ALL") String inputState,
  393. @RequestParam(value="patientName", required=false, defaultValue="") String patientName,
  394. @RequestParam(value="startDate", required=false, defaultValue="") String startDate,
  395. @RequestParam(value="endDate", required=false, defaultValue="") String endDate,
  396. @RequestParam(value="page", required=false, defaultValue="1") int page,
  397. HttpServletRequest request,HttpServletResponse response ) {
  398. String sesCenterCode = LifeCenterSessionController.getSession(request, "sesCenterCode");
  399. String sesGroupIdx = LifeCenterSessionController.getSession(request, "sesGroupIdx");
  400. // 권한이 SYSTEM일경우
  401. PatientDTO dto = new PatientDTO();
  402. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  403. dto.setGroupIdx(Integer.valueOf(sesGroupIdx));
  404. dto.setPatientName(patientName);
  405. dto.setState(inputState);
  406. dto.setStartDate(startDate);
  407. dto.setEndDate(endDate);
  408. int total = patientService.selectPatientCount(dto);
  409. List<PatientDTO> result = new ArrayList<PatientDTO>();
  410. if (total > 0) {
  411. dto.setLimit( 0 );
  412. dto.setLimitMax( total );
  413. result = patientService.selectPatientList(dto);
  414. for (PatientDTO temp : result) {
  415. result.get(result.indexOf(temp)).setSymptomContent(LifeCenterFunction.getSymptom(temp));
  416. }
  417. }
  418. getPatientListExcel(request, response, result );
  419. }
  420. private void getPatientListExcel(HttpServletRequest request, HttpServletResponse response, List<PatientDTO> data ) {
  421. Workbook workbook = new XSSFWorkbook();
  422. Sheet sheet1 = workbook.createSheet("firstSheet");
  423. DecimalFormat df = new DecimalFormat("#,###");
  424. //1.셀 스타일 및 폰트 설정
  425. CellStyle styleOfBoardFillFontBlackBold16 = workbook.createCellStyle();
  426. //정렬
  427. styleOfBoardFillFontBlackBold16.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
  428. styleOfBoardFillFontBlackBold16.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
  429. //배경색
  430. styleOfBoardFillFontBlackBold16.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
  431. styleOfBoardFillFontBlackBold16.setFillPattern(CellStyle.SOLID_FOREGROUND);
  432. //테두리 선 (우,좌,위,아래)
  433. styleOfBoardFillFontBlackBold16.setBorderRight(HSSFCellStyle.BORDER_THIN);
  434. styleOfBoardFillFontBlackBold16.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  435. styleOfBoardFillFontBlackBold16.setBorderTop(HSSFCellStyle.BORDER_THIN);
  436. styleOfBoardFillFontBlackBold16.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  437. //폰트 설정
  438. Font fontOfGothicBlackBold16 = workbook.createFont();
  439. // fontOfGothicBlackBold16.setFontName("나눔고딕"); //글씨체
  440. fontOfGothicBlackBold16.setFontHeight((short)(10*20)); //사이즈
  441. fontOfGothicBlackBold16.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
  442. styleOfBoardFillFontBlackBold16.setFont(fontOfGothicBlackBold16);
  443. int i = 1;
  444. Row row = sheet1.createRow(0);
  445. Cell cell1 = row.createCell(0);
  446. Cell cell2 = row.createCell(1);
  447. Cell cell3 = row.createCell(2);
  448. Cell cell4 = row.createCell(3);
  449. Cell cell5 = row.createCell(4);
  450. Cell cell6 = row.createCell(5);
  451. Cell cell7 = row.createCell(6);
  452. Cell cell8 = row.createCell(7);
  453. Cell cell9 = row.createCell(8);
  454. Cell cell10 = row.createCell(9);
  455. Cell cell11 = row.createCell(10);
  456. Cell cell12 = row.createCell(11);
  457. Cell cell13 = row.createCell(12);
  458. Cell cell14 = row.createCell(13);
  459. Cell cell15 = row.createCell(14);
  460. cell1.setCellStyle(styleOfBoardFillFontBlackBold16);
  461. cell2.setCellStyle(styleOfBoardFillFontBlackBold16);
  462. cell3.setCellStyle(styleOfBoardFillFontBlackBold16);
  463. cell4.setCellStyle(styleOfBoardFillFontBlackBold16);
  464. cell5.setCellStyle(styleOfBoardFillFontBlackBold16);
  465. cell6.setCellStyle(styleOfBoardFillFontBlackBold16);
  466. cell7.setCellStyle(styleOfBoardFillFontBlackBold16);
  467. cell8.setCellStyle(styleOfBoardFillFontBlackBold16);
  468. cell9.setCellStyle(styleOfBoardFillFontBlackBold16);
  469. cell10.setCellStyle(styleOfBoardFillFontBlackBold16);
  470. cell11.setCellStyle(styleOfBoardFillFontBlackBold16);
  471. cell12.setCellStyle(styleOfBoardFillFontBlackBold16);
  472. cell13.setCellStyle(styleOfBoardFillFontBlackBold16);
  473. cell14.setCellStyle(styleOfBoardFillFontBlackBold16);
  474. cell15.setCellStyle(styleOfBoardFillFontBlackBold16);
  475. sheet1.setColumnWidth( 0, 5000); //센터명
  476. sheet1.setColumnWidth( 1, 3000); //환자명
  477. sheet1.setColumnWidth( 2, 4000); //동호실
  478. sheet1.setColumnWidth( 3, 2000); //성별
  479. sheet1.setColumnWidth( 4, 3500); //나이
  480. sheet1.setColumnWidth( 5, 3500); //생년월일
  481. sheet1.setColumnWidth( 6, 3500); //입소일자
  482. sheet1.setColumnWidth( 7, 3500); //상태변경일
  483. sheet1.setColumnWidth( 8, 3800); //상태
  484. sheet1.setColumnWidth( 9, 6000); //체온
  485. sheet1.setColumnWidth( 10, 10000); //혈압
  486. sheet1.setColumnWidth( 11, 6200); //맥박
  487. sheet1.setColumnWidth( 12, 6200); //산소포화도
  488. sheet1.setColumnWidth( 13, 7000); //혈당
  489. sheet1.setColumnWidth( 14, 14000); //임상증상
  490. cell1.setCellValue("생활치료센터명");
  491. cell2.setCellValue("환자명");
  492. cell3.setCellValue("동,호실");
  493. cell4.setCellValue("성별/나이");
  494. cell5.setCellValue("생년월일");
  495. cell6.setCellValue("확진일자");
  496. cell7.setCellValue("입소일자");
  497. cell8.setCellValue("퇴소예정일");
  498. cell9.setCellValue("상태(상태 변경일)");
  499. cell10.setCellValue("체온");
  500. cell11.setCellValue("혈압");
  501. cell12.setCellValue("맥박");
  502. cell13.setCellValue("산소포화도");
  503. cell14.setCellValue("혈당");
  504. cell15.setCellValue("임상증상");
  505. for (PatientDTO dto : data) {
  506. row = sheet1.createRow(i);
  507. cell1 = row.createCell(0);
  508. cell2 = row.createCell(1);
  509. cell3 = row.createCell(2);
  510. cell4 = row.createCell(3);
  511. cell5 = row.createCell(4);
  512. cell6 = row.createCell(5);
  513. cell7 = row.createCell(6);
  514. cell8 = row.createCell(7);
  515. cell9 = row.createCell(8);
  516. cell10 = row.createCell(9);
  517. cell11 = row.createCell(10);
  518. cell12 = row.createCell(11);
  519. cell13 = row.createCell(12);
  520. cell14 = row.createCell(13);
  521. cell15 = row.createCell(14);
  522. String patientName = dto.getPatientName();
  523. String roomWard = ( dto.getWardNumber() == null || dto.getWardNumber().equals( "" ) ) ? "" : dto.getWardNumber()+"동";
  524. roomWard += ( dto.getRoomNumber() == null || dto.getRoomNumber().equals( "" ) ) ? "" : dto.getRoomNumber()+"호 ";
  525. String gender = dto.getGender();
  526. String age = dto.getAge();
  527. String jumin = dto.getJumin();
  528. String confirmationDate = dto.getConfirmationDate();
  529. String hospitalizationDate = dto.getHospitalizationDate();
  530. String expecteDischargeDate = dto.getExpectedDischargeDate();
  531. String disisolationDate = dto.getDisisolationDate();
  532. String state = dto.getState();
  533. String temperature = dto.getTemperature();
  534. String temperatureCreateDate = dto.getTemperatureCreateDate();
  535. String systolicBloodPressure = dto.getSystolicBloodPressure();
  536. String systolicBloodPressureCreateDate = dto.getSystolicBloodPressureCreateDate();
  537. String diastolicBloodPressure = dto.getDiastolicBloodPressure();
  538. String diastolicBloodPressureCreateDate = dto.getDiastolicBloodPressureCreateDate();
  539. String pulseRate = dto.getPulseRate();
  540. String pulseRateCreateDate = dto.getPulseRateCreateDate();
  541. String oxygenSaturation = dto.getOxygenSaturation();
  542. String oxygenSaturationCreateDate = dto.getOxygenSaturationCreateDate();
  543. String bloodSugar = dto.getBloodSugar();
  544. String bloodSugarCreateDate = dto.getBloodSugarCreateDate();
  545. String notMeasured = "-";
  546. String symptomDate = dto.getCreateDate();
  547. String symptomContent = dto.getSymptomContent();
  548. // String symptom = LifeCenterFunction.getSymptom( dto );
  549. String centerName = dto.getCenterName();
  550. cell1.setCellValue( centerName );
  551. cell2.setCellValue( patientName );
  552. cell3.setCellValue( roomWard );
  553. cell4.setCellValue( gender + "/" + age );
  554. cell5.setCellValue( jumin );
  555. cell6.setCellValue( confirmationDate );
  556. cell7.setCellValue( hospitalizationDate );
  557. cell8.setCellValue( expecteDischargeDate );
  558. if (state.equals("입소")) {
  559. cell9.setCellValue( state );
  560. } else {
  561. cell9.setCellValue( state + "(" + disisolationDate + ")" );
  562. }
  563. cell10.setCellValue( ( temperature == null || temperature.equals("") ) ? notMeasured : temperature + " ˚C (" + temperatureCreateDate + ")" );
  564. cell11.setCellValue( ( systolicBloodPressure == null || systolicBloodPressure.equals("") ) ? notMeasured : systolicBloodPressure + " mmHg / " + diastolicBloodPressure + " mmHg (" + systolicBloodPressureCreateDate + ")" );
  565. cell12.setCellValue( ( pulseRate == null || pulseRate.equals("") ) ? notMeasured : pulseRate + " bpm (" + pulseRateCreateDate + ")" );
  566. cell13.setCellValue( ( oxygenSaturation == null || oxygenSaturation.equals("") ) ? notMeasured : oxygenSaturation + " % (" + oxygenSaturationCreateDate + ")" );
  567. cell14.setCellValue( ( bloodSugar == null || bloodSugar.equals("") ) ? notMeasured : bloodSugar + " mg/dL (" + bloodSugarCreateDate + ")" );
  568. cell15.setCellValue( ( symptomContent == null || symptomDate == null || symptomContent.equals("") || symptomDate.equals( "" ) ) ? notMeasured : symptomContent + " (" + symptomDate + ")" );
  569. i++;
  570. }
  571. row = sheet1.createRow(i);
  572. cell1 = row.createCell(2);
  573. cell2 = row.createCell(3);
  574. cell3 = row.createCell(4);
  575. cell4 = row.createCell(5);
  576. cell5 = row.createCell(6);
  577. cell6 = row.createCell(7);
  578. cell7 = row.createCell(8);
  579. cell8 = row.createCell(9);
  580. cell9 = row.createCell(10);
  581. cell10 = row.createCell(11);
  582. cell11 = row.createCell(12);
  583. cell12 = row.createCell(13);
  584. cell13 = row.createCell(14);
  585. cell14 = row.createCell(15);
  586. cell15 = row.createCell(16);
  587. try {
  588. // File file = new File(".");
  589. // String rootPath = file.getAbsolutePath();
  590. // System.out.println("현재 프로젝트의 경로 : "+rootPath );
  591. // JBOSS에서 구동시 /home1/jboss/jboss-eap-7.3/domain/test/excel-temp 경로에 저장이됨
  592. String tempPath = "../excel-temp/testExcel.xlsx";
  593. String downName = LifeCenterFunction.getNow() + " 환자리스트.xlsx";
  594. File xlsFile = new File(tempPath);
  595. FileOutputStream fileOut = new FileOutputStream(xlsFile);
  596. workbook.write(fileOut);
  597. LifeCenterFileDownload.download(request, response, tempPath, downName);
  598. xlsFile.delete();
  599. } catch (FileNotFoundException e) {
  600. e.printStackTrace();
  601. } catch (IOException e) {
  602. e.printStackTrace();
  603. }
  604. }
  605. }