PatientController.java 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406
  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. @RequestParam(value="cla", required=false, defaultValue="") String cla,
  97. @RequestParam(value="dateType", required=false, defaultValue="") String dateType,
  98. HttpServletRequest request,HttpServletResponse response) {
  99. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  100. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  101. String sesGroupIdx = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
  102. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  103. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  104. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  105. String processingContents = "환자리스트 조회";
  106. PrivateLogDTO logDTO = new PrivateLogDTO();
  107. logDTO.setId( sesId );
  108. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  109. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  110. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  111. logDTO.setProcessingTarget( "" );
  112. logDTO.setProcessingContents( processingContents );
  113. // privateLogService.insertPrivateAccessLog( logDTO );
  114. PatientDTO dto = new PatientDTO();
  115. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  116. dto.setGroupIdx( Integer.valueOf( sesGroupIdx ) );
  117. dto.setPatientName(patientName);
  118. dto.setState(inputState);
  119. dto.setStartDate(startDate);
  120. dto.setEndDate(endDate);
  121. dto.setSortType(sortType);
  122. dto.setSort(sort);
  123. dto.setLimit( ( Integer.valueOf( page ) - 1 ) * config.pageDataSize );
  124. dto.setLimitMax( config.pageDataSize );
  125. dto.setCla(cla);
  126. dto.setDateType(dateType);
  127. int total = patientService.selectPatientCount(dto);
  128. List<PatientDTO> result = new ArrayList<PatientDTO>();
  129. if (total > 0) {
  130. result = patientService.selectPatientList(dto);
  131. for( PatientDTO temp : result ) {
  132. // logger.error("temp -- > " + result.get( result.indexOf( temp ) ).getJumin());
  133. // String age = result.get( result.indexOf( temp ) ).getJumin();
  134. // try {
  135. // age = String.valueOf(LifeCenterFunction.getAgeFromBirthday(age));
  136. // } catch (ParseException e) {
  137. // // TODO Auto-generated catch block
  138. // e.printStackTrace();
  139. // }
  140. // result.get( result.indexOf( temp ) ).setAge(age);
  141. result.get( result.indexOf( temp ) ).setSymptomContent( LifeCenterFunction.getSymptom( temp ) );
  142. }
  143. }
  144. ModelAndView mv = setMV("patient/list");
  145. String param = "";
  146. try {
  147. param = "patientName=" + URLEncoder.encode(patientName, "UTF-8") + "&inputState=" + inputState + "&startDate=" + startDate + "&endDate=" + endDate + "&sortType=" + sortType + "&sort=" + sort + "&cla=" + cla + "&dateType=" + dateType;
  148. } catch (UnsupportedEncodingException e) {
  149. // TODO Auto-generated catch block
  150. e.printStackTrace();
  151. }
  152. paging = LifeCenterPaging.getInstance();
  153. paging.paging(config, total, page, param);
  154. CenterInfoDTO cDTO = new CenterInfoDTO();
  155. List<CenterInfoDTO> centerListAll = new ArrayList<CenterInfoDTO>();
  156. centerListAll = centerService.selectCenterListAllYn(cDTO);
  157. mv.addObject("inputState", inputState);
  158. mv.addObject("patientName", patientName);
  159. mv.addObject("total", total);
  160. mv.addObject("item", result);
  161. mv.addObject("paging", paging);
  162. mv.addObject( "startDate", startDate );
  163. mv.addObject( "endDate", endDate );
  164. mv.addObject( "page", page );
  165. mv.addObject( "pageSize", dto.getLimitMax() );
  166. mv.addObject( "sesGroupIdx" , sesGroupIdx );
  167. mv.addObject("sort", sort);
  168. mv.addObject("sortType", sortType);
  169. mv.addObject("centerListAll", centerListAll);
  170. mv.addObject("selectCode", cla);
  171. mv.addObject("dateType", dateType);
  172. return mv;
  173. }
  174. @RequestMapping("/new")
  175. public ModelAndView patientNew( HttpServletRequest request,HttpServletResponse response ) {
  176. ModelAndView mv = setMV("patient/new");
  177. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  178. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  179. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  180. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  181. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  182. //개인정보로그
  183. String processingContents = "신규환자등록페이지 접속";
  184. PrivateLogDTO logDTO = new PrivateLogDTO();
  185. logDTO.setId( sesId );
  186. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  187. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  188. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  189. logDTO.setProcessingTarget( "" );
  190. logDTO.setProcessingContents( processingContents );
  191. // privateLogService.insertPrivateAccessLog( logDTO );
  192. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  193. CenterInfoDTO dto = new CenterInfoDTO();
  194. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  195. dto.setStaffId( sesId );
  196. int centerCount = centerService.selectCenterOneCount( dto );
  197. String centerName = "";
  198. String centerType = "";
  199. if( centerCount > 0 ) {
  200. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  201. centerType = centerService.selectCenterInfoOne( dto ).getCenterType();
  202. }
  203. StaffDTO staffDTO = new StaffDTO();
  204. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  205. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  206. staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
  207. staffDTO.setUseYn( "" );
  208. int staffCount = staffService.selectMemberListCount( staffDTO );
  209. if( staffCount > 0 ) {
  210. staffDTO.setLimit( 0 );
  211. staffDTO.setLimitMax( staffCount );
  212. staffList = staffService.selectMemberList( staffDTO );
  213. }
  214. mv.addObject( "centerName", centerName );
  215. mv.addObject( "centerType", centerType );
  216. mv.addObject( "centerCount", centerCount );
  217. mv.addObject( "actionType", "new" );
  218. mv.addObject( "staffList", staffList );
  219. return mv;
  220. }
  221. @RequestMapping("/new/insert")
  222. @Transactional(propagation=Propagation.REQUIRED)
  223. public String patientNewInsert(
  224. @ModelAttribute("dto") final PatientDTO dto,
  225. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  226. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  227. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  228. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  229. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  230. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  231. //patientCare Insert
  232. //System.out.println( "dto.getJumin().substring(2) : " + dto.getJumin().replace( "-" , "" ).substring(2) );
  233. String jumin = dto.getJumin();
  234. jumin = LifeCenterFunction.removeStringChar(jumin, "-");
  235. dto.setJumin( jumin );
  236. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  237. // 환자 password는 생년월일(yyyymmdd)을 암호화
  238. // dto.setPw( LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, jumin ) );
  239. // dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  240. dto.setPw(jumin);
  241. dto.setCenterCode( sesCenterCode );
  242. dto.setState( "H" ); // H : 입소
  243. dto.setCreateBy( sesId );
  244. if( dto.getDisisolationDate() != null && dto.getDisisolationDate().equals( "" ) ) {
  245. dto.setDisisolationDate( null );
  246. }
  247. if( dto.getSymptomStartDate() != null && dto.getSymptomStartDate().equals( "" ) ) {
  248. dto.setSymptomStartDate( null );
  249. }
  250. if (dto.getExpectedDischargeDate() != null && dto.getExpectedDischargeDate().equals("")) {
  251. dto.setExpectedDischargeDate(null);
  252. }
  253. // base64 decode 주민뒷자리
  254. if (!dto.getResidentNumberLast().equals("")) {
  255. byte[] decoded = Base64.getDecoder().decode(dto.getResidentNumberLast());
  256. dto.setResidentNumberLast(new String(decoded, StandardCharsets.UTF_8));
  257. }
  258. // base64 decode 외국인등록번호 뒷자리
  259. if (!dto.getForeignNumberLast().equals("")) {
  260. byte[] decoded = Base64.getDecoder().decode(dto.getForeignNumberLast());
  261. dto.setForeignNumberLast(new String(decoded, StandardCharsets.UTF_8));
  262. }
  263. // base64 decode 여권번호
  264. if (!dto.getPassportNumber().equals("")) {
  265. byte[] decoded = Base64.getDecoder().decode(dto.getPassportNumber());
  266. dto.setPassportNumber(new String(decoded, StandardCharsets.UTF_8));
  267. }
  268. patientService.insertPatientCare( dto ); // 환지 기본정보 insert
  269. int patientIdx = dto.getPatientIdx();
  270. //개인정보로그
  271. String processingContents = "신규환자 생성";
  272. PrivateLogDTO logDTO = new PrivateLogDTO();
  273. logDTO.setId( sesId );
  274. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  275. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  276. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  277. logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
  278. logDTO.setProcessingContents( processingContents );
  279. // privateLogService.insertPrivateAccessLog( logDTO );
  280. dto.setPatientIdx( patientIdx );
  281. //patientDisease Insert
  282. dto.setEtcCheck( dto.getEtcCheckDisease() );
  283. dto.setEtcContent( dto.getEtcContentDisease() );
  284. patientService.insertPatientDisease( dto );
  285. //patientSymptom Insert
  286. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  287. dto.setEtcContent( dto.getEtcContentSymptom() );
  288. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  289. //
  290. patientService.insertPatientSymptom( dto );
  291. return "redirect:/patient/info?patientIdx=" + patientIdx;
  292. }
  293. @RequestMapping("/info")
  294. public ModelAndView patientInfo( @ModelAttribute("dto") PatientDTO dto,
  295. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  296. String referer = request.getHeader("referer");
  297. ModelAndView mv = setMV("patient/info");
  298. int patientIdx = dto.getPatientIdx();
  299. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  300. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  301. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  302. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  303. dto = patientService.selectPatientOne(dto);
  304. //개인정보로그
  305. String processingContents = "환자상세 조회 ";
  306. PrivateLogDTO logDTO = new PrivateLogDTO();
  307. logDTO.setId( sesId );
  308. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  309. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  310. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  311. logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
  312. logDTO.setProcessingContents( processingContents );
  313. // privateLogService.insertPrivateAccessLog( logDTO );
  314. String jumin = dto.getJumin();
  315. jumin = LifeCenterFunction.changeJuminToBirthday(jumin);
  316. dto.setJumin(jumin);
  317. dto.setPatientPhone(LifeCenterFunction.phone(dto.getPatientPhone()));
  318. dto.setGuardianPhone(LifeCenterFunction.phone(dto.getGuardianPhone()));
  319. String bloodPress = dto.getBloodPressureLevel();
  320. try {
  321. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  322. String[] bloodPressureLevel = bloodPress.split("[|]");
  323. if (bloodPressureLevel[0] != null) {
  324. dto.setBloodPressureLevelCon(bloodPressureLevel[0]);
  325. }
  326. if (bloodPressureLevel[1] != null) {
  327. dto.setBloodPressureLevelRel(bloodPressureLevel[1]);
  328. }
  329. }
  330. } catch (Exception e) {
  331. //TODO: handle exception
  332. dto.setBloodPressureLevelCon("0");
  333. dto.setBloodPressureLevelRel("0");
  334. }
  335. String strDisease = "";
  336. String strSymptom = LifeCenterFunction.getSymptom(dto);
  337. if (dto.getBasalDiseaseYn().equals("Y")) {
  338. strDisease = LifeCenterFunction.getDisease(dto);
  339. }
  340. StaffDTO staffDTO = new StaffDTO();
  341. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  342. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  343. staffDTO.setCenterCode( Integer.valueOf( dto.getCenterCode() ) );
  344. staffDTO.setUseYn( "" );
  345. int staffCount = staffService.selectMemberListCount( staffDTO );
  346. if( staffCount > 0 ) {
  347. staffDTO.setLimit( 0 );
  348. staffDTO.setLimitMax( staffCount );
  349. staffList = staffService.selectMemberList( staffDTO );
  350. }
  351. CenterInfoDTO cdto = new CenterInfoDTO();
  352. List<CenterInfoDTO> centerListAll = centerService.selectCenterListAll( cdto );
  353. mv.addObject( "disease", strDisease );
  354. mv.addObject( "symptom", strSymptom );
  355. mv.addObject( "patientIdx", patientIdx );
  356. mv.addObject( "enIdx", LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, String.valueOf( patientIdx ) ) );
  357. mv.addObject( "info", dto );
  358. mv.addObject( "staffList", staffList );
  359. mv.addObject( "referer", referer );
  360. mv.addObject( "centerListAll", centerListAll );
  361. return mv;
  362. }
  363. @RequestMapping( value="/changeCenterInfo", method=RequestMethod.POST )
  364. @Transactional(propagation=Propagation.REQUIRED)
  365. public String changeCenterInfo(
  366. @RequestParam(value="oldCenterCode", required=true ) int oldCenterCode,
  367. @RequestParam(value="newCenterCode", required=true ) int newCenterCode,
  368. @RequestParam(value="oldCenterName", required=true ) String oldCenterName,
  369. @RequestParam(value="newCenterName", required=true ) String newCenterName,
  370. @RequestParam(value="patientIdx", required=true ) int patientIdx,
  371. @RequestParam(value="patientName", required=true ) String patientName,
  372. HttpServletRequest request,HttpServletResponse response ) {
  373. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  374. String comment = patientName+"[patient_idx:"+13+"] - " + oldCenterName + "[center_code:"+oldCenterCode+"] => " + newCenterName + "[center_code:"+newCenterCode+"]";
  375. PatientDTO dto = new PatientDTO();
  376. dto.setOldCenterCode( oldCenterCode );
  377. dto.setNewCenterCode( newCenterCode );
  378. dto.setPatientIdx( patientIdx );
  379. dto.setUpdateBy( sesId );
  380. dto.setComment( comment );
  381. // System.err.println( "comment : " + comment );
  382. patientService.updatePatientCenterInfo(dto);
  383. patientService.insertCenterChangeLog(dto);
  384. return "redirect:/patient/list";
  385. }
  386. @RequestMapping("/delete")
  387. @Transactional(propagation=Propagation.REQUIRED)
  388. public String patientDelete( @RequestParam( value="enIdx", required = true ) String enIdx,
  389. @RequestParam( value="deleteReason", required = false, defaultValue = "" ) String deleteReason,
  390. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  391. String deIdx = LifeCenterFunction.aesDecrypt( config.aesKey, config.IV, enIdx );
  392. int patientIdx = Integer.valueOf( deIdx );
  393. PatientDTO dto = new PatientDTO();
  394. dto.setPatientIdx( patientIdx );
  395. // System.err.println( "patientIdx : " + patientIdx );
  396. int total = patientService.selectPatientOneCount(dto);
  397. if( total == 0 ) {
  398. LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '이미 삭제되었거나 존재하지않는 환자입니다.', callBack : function(){ history.back(); } });" );
  399. return "/common/blank";
  400. } else {
  401. // patientService.deletePatientCare(dto);
  402. // 환자데이터를 삭제하지않고 flag 값을 변경 (21.04.12 수정)
  403. PatientDTO patientOne = patientService.selectPatientOne(dto);
  404. dto.setUseYn( "N" );
  405. dto.setDeleteReason( deleteReason );
  406. patientService.updatePatientCareUseYn(dto);
  407. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  408. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  409. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  410. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  411. String processingContents = "환자삭제 [사유:"+deleteReason+"]";
  412. PrivateLogDTO logDTO = new PrivateLogDTO();
  413. logDTO.setId( sesId );
  414. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  415. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  416. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  417. logDTO.setProcessingTarget( "(환자)" + patientOne.getPatientName() + "["+patientOne.getPatientIdx()+"]" );
  418. logDTO.setProcessingContents( processingContents );
  419. // privateLogService.insertPrivateAccessLog( logDTO );
  420. }
  421. LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '환자정보가 삭제되었습니다. ', callBack : function(){ location.href='./list'; } });" );
  422. return "/common/blank";
  423. }
  424. @RequestMapping("/edit")
  425. public ModelAndView patientEdit(
  426. @ModelAttribute("dto") PatientDTO patientDTO,
  427. HttpServletRequest request,HttpServletResponse response ) {
  428. ModelAndView mv = setMV("patient/edit");
  429. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  430. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  431. int patientIdx = patientDTO.getPatientIdx();
  432. int cnt = patientService.selectPatientOneCount(patientDTO);
  433. if (cnt > 0) {
  434. patientDTO = patientService.selectPatientOne( patientDTO );
  435. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  436. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  437. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  438. String processingContents = "환자수정페이지 접속";
  439. PrivateLogDTO logDTO = new PrivateLogDTO();
  440. logDTO.setId( sesId );
  441. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  442. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  443. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  444. logDTO.setProcessingTarget( "(환자)" + patientDTO.getPatientName() + "["+patientDTO.getPatientIdx()+"]" );
  445. logDTO.setProcessingContents( processingContents );
  446. // privateLogService.insertPrivateAccessLog( logDTO );
  447. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  448. // 센터가 존재하는지 체크
  449. CenterInfoDTO dto = new CenterInfoDTO();
  450. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  451. dto.setStaffId( sesId );
  452. String centerName = "";
  453. int centerCount = centerService.selectCenterCount( dto );
  454. String centerType = "";
  455. if( sesCenterCode.equals( "0" ) ) { //센터코드가 없는 시스템권한 계정인경우
  456. centerName = patientDTO.getCenterName();
  457. centerType = "C";
  458. } else {
  459. if( centerCount > 0 ) {
  460. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  461. centerType = centerService.selectCenterInfoOne( dto ).getCenterType();
  462. } else {
  463. LifeCenterFunction.scriptMessage(response, "alertBox({ txt : '문진이 정상적으로 제출되었습니다.', callBack : function(){ history.back(); } });" );
  464. // return ""; 아직처리안함
  465. }
  466. }
  467. String bloodPress = patientDTO.getBloodPressureLevel();
  468. try {
  469. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  470. String[] bloodPressureLevel = bloodPress.split("[|]");
  471. if (bloodPressureLevel[0] != null) {
  472. patientDTO.setBloodPressureLevelCon(bloodPressureLevel[0]);
  473. }
  474. if (bloodPressureLevel[1] != null) {
  475. patientDTO.setBloodPressureLevelRel(bloodPressureLevel[1]);
  476. }
  477. }
  478. } catch (Exception e) {
  479. // TODO: handle exception
  480. patientDTO.setBloodPressureLevelCon("0");
  481. patientDTO.setBloodPressureLevelRel("0");
  482. }
  483. StaffDTO staffDTO = new StaffDTO();
  484. List<StaffDTO> staffList = new ArrayList<StaffDTO>();
  485. staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
  486. staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
  487. staffDTO.setUseYn( "" );
  488. int staffCount = staffService.selectMemberListCount( staffDTO );
  489. if( staffCount > 0 ) {
  490. staffDTO.setLimit( 0 );
  491. staffDTO.setLimitMax( staffCount );
  492. staffList = staffService.selectMemberList( staffDTO );
  493. }
  494. mv.addObject( "centerName", centerName );
  495. mv.addObject( "centerCount", centerCount );
  496. mv.addObject( "centerType", centerType );
  497. mv.addObject( "staffList", staffList );
  498. mv.addObject( "patientIdx", patientIdx );
  499. mv.addObject( "patientData", patientDTO );
  500. mv.addObject( "actionType", "edit" );
  501. } else {
  502. mv.addObject( "error", "error" );
  503. mv.addObject( "message", "삭제되었거나 존재하지 않는 환자입니다." );
  504. }
  505. return mv;
  506. }
  507. @RequestMapping("/edit/update")
  508. @Transactional(propagation=Propagation.REQUIRED)
  509. public String patientEditUpdate(
  510. @ModelAttribute("dto") PatientDTO dto,
  511. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  512. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  513. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  514. int patientIdx = dto.getPatientIdx();
  515. dto.setPatientIdx( patientIdx );
  516. PatientDTO originPatientData = patientService.selectPatientOne( dto );
  517. //patientCare Update
  518. String jumin = dto.getJumin();
  519. jumin = LifeCenterFunction.removeStringChar(jumin, "-");
  520. dto.setJumin( jumin );
  521. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  522. // dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  523. dto.setPw(jumin);
  524. dto.setCenterCode( sesCenterCode );
  525. dto.setUpdateBy( sesId );
  526. if( dto.getDisisolationDate() != null && dto.getDisisolationDate().equals( "" ) ) {
  527. dto.setDisisolationDate( null );
  528. }
  529. if( dto.getSymptomStartDate() != null && dto.getSymptomStartDate().equals( "" ) ) {
  530. dto.setSymptomStartDate( null );
  531. }
  532. System.err.println( "dto.getResidentNumberFront(): " + dto.getResidentNumberFront() );
  533. System.err.println( "dto.getResidentNumberLast(): " + dto.getResidentNumberLast() );
  534. try {
  535. // base64 decode 주민뒷자리
  536. if (!dto.getResidentNumberLast().equals("")) {
  537. byte[] decoded = Base64.getDecoder().decode(dto.getResidentNumberLast());
  538. dto.setResidentNumberLast(new String(decoded, StandardCharsets.UTF_8));
  539. }
  540. // base64 decode 외국인등록번호 뒷자리
  541. if (!dto.getForeignNumberLast().equals("")) {
  542. byte[] decoded = Base64.getDecoder().decode(dto.getForeignNumberLast());
  543. dto.setForeignNumberLast(new String(decoded, StandardCharsets.UTF_8));
  544. }
  545. // base64 decode 여권번호
  546. if (!dto.getPassportNumber().equals("")) {
  547. byte[] decoded = Base64.getDecoder().decode(dto.getPassportNumber());
  548. dto.setPassportNumber(new String(decoded, StandardCharsets.UTF_8));
  549. }
  550. } catch (Exception e) {
  551. //TODO: handle exception
  552. logger.error("개인식별정보 base64 복호화 error -- > " + e);
  553. }
  554. logger.error("getPw -- > " + dto.getPw());
  555. patientService.updatePatientCare( dto ); // 환지 기본정보
  556. //patientDisease Insert
  557. dto.setEtcCheck( dto.getEtcCheckDisease() );
  558. dto.setEtcContent( dto.getEtcContentDisease() );
  559. patientService.updatePatientDisease( dto );
  560. //patientSymptom Insert
  561. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  562. dto.setEtcContent( dto.getEtcContentSymptom() );
  563. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  564. // System.err.println( dto.toString() );
  565. patientService.updatePatientSymptom( dto );
  566. dto = new PatientDTO();
  567. dto.setPatientIdx( patientIdx );
  568. PatientDTO newPatientData = patientService.selectPatientOne( dto );
  569. String sesName = LifeCenterSessionController.getSession( request, "sesName" );
  570. String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
  571. String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
  572. String processingDetail = "[수정내역 :";
  573. PrivateLogDTO logDTO = new PrivateLogDTO();
  574. int cnt = 0;
  575. try{
  576. Object objNew=newPatientData;
  577. for (Field field : objNew.getClass().getDeclaredFields()){
  578. Object objOrigin=originPatientData;
  579. for (Field field1 : objOrigin.getClass().getDeclaredFields()){
  580. if( field1.getName().equals( field.getName() ) ) {
  581. field1.setAccessible(true);
  582. Object valueOrigin = field1.get(objOrigin);
  583. String originVal = valueOrigin == null ? "": valueOrigin.toString();
  584. field.setAccessible(true);
  585. Object valueNew=field.get(objNew);
  586. String newVal = valueNew == null ? "": valueNew.toString();
  587. // System.err.println(field.getName()+","+originVal + " -> " + newVal);
  588. if( !originVal.equals( newVal ) ) {
  589. // System.out.println(field.getName()+","+originVal + " -> " + newVal);
  590. String nv = cnt >= 1 ? ", " : " ";
  591. processingDetail += nv + field.getName()+"컬럼 값 변경 ("+originVal + " -> " + newVal +")";
  592. cnt ++;
  593. }
  594. }
  595. }
  596. }
  597. processingDetail +="]";
  598. }catch (Exception e){
  599. e.printStackTrace();
  600. }
  601. String processingContents = "환자정보 수정 [총 " + cnt + "건 항목] " + processingDetail;
  602. //System.err.println( "processingContents : " + processingContents );
  603. logDTO.setId( sesId );
  604. logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
  605. logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  606. logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
  607. logDTO.setProcessingTarget( "(환자)" + originPatientData.getPatientName() + "["+originPatientData.getPatientIdx()+"]" );
  608. logDTO.setProcessingContents( processingContents );
  609. // privateLogService.insertPrivateAccessLog( logDTO );
  610. return "redirect:/patient/info?patientIdx=" + patientIdx;
  611. }
  612. @RequestMapping("/privacy")
  613. public ModelAndView patientPrivacy() {
  614. ModelAndView mv = setMV("patient/privacy");
  615. return mv;
  616. }
  617. @RequestMapping( value="/nonFaceStart", method = RequestMethod.POST )
  618. @ResponseBody
  619. public String nonFaceStart(
  620. @RequestParam( value="pId", required = true ) String pId,
  621. @RequestParam( value="patientIdx", required = true ) String patientIdx,
  622. @RequestParam( value="roomId", required = true ) String roomId,
  623. @RequestParam( value="pName", required = true ) String pName,
  624. HttpServletRequest request, HttpServletResponse response) throws Exception {
  625. String salt = LifeCenterFunction.getSalt();
  626. String timeStamp = LifeCenterFunction.getTimestamp();
  627. String signature = LifeCenterFunction.getSignature(config.nonFaceApiSecret, salt, timeStamp);
  628. String userId = LifeCenterSessionController.getSession(request, "sesId");
  629. String userNm = LifeCenterSessionController.getSession(request, "sesName");
  630. HashMap<String, String> data = new HashMap<String, String>();
  631. data.put("api_key", config.nonFaceApiKey);
  632. data.put("salt", salt);
  633. data.put("timestamp", timeStamp);
  634. data.put("signature", signature);
  635. data.put("client_id", config.nonFaceClientId);
  636. data.put("member_id", userId);
  637. String result = LifeCenterFunction.httpUrlConnection(config.nonFaceApiTokenUrl, data);
  638. JSONObject object = new JSONObject(result);
  639. String message = "";
  640. String token = "";
  641. for(String key : object.keySet()) {
  642. if (key.equals("errorCode")) {
  643. message = object.getString("message");
  644. } else if (key.equals("token")){
  645. token = object.getString("token");
  646. }
  647. }
  648. if (!message.equals("")) {
  649. //error
  650. } else {
  651. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  652. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  653. String remoteIp = LifeCenterFunction.getRemoteAddr( request );
  654. PushDTO dto = new PushDTO();
  655. dto.setSendType("D");
  656. dto.setTargetType("P");
  657. dto.setPushTitle("비대면 진료");
  658. dto.setPushContent("비대면 진료를 요청하였습니다.");
  659. dto.setPushPayLoad1("nonface");
  660. dto.setCenterCode( sesCenterCode );
  661. dto.setSender( sesId );
  662. dto.setSenderIp( remoteIp );
  663. dto.setSendState( "W" );
  664. pushService.insertPushData(dto);
  665. dto.setPatientIdx(Integer.valueOf(patientIdx));
  666. pushService.insertPushTargetTemp(dto);
  667. }
  668. String hashData = LifeCenterFunction.getSignature(config.nonFaceApiSecret, config.nonFaceApiKey, roomId + userId); //"1011503101"
  669. object.put("api_key", config.nonFaceApiKey);
  670. object.put("member_id", userId);
  671. object.put("token", token);
  672. object.put("room_id", roomId);
  673. object.put("member_name", userNm);
  674. object.put("classify", "d"); // p이면 환자 d이면 의사
  675. object.put("hashData", hashData);
  676. return object.toString();
  677. }
  678. @RequestMapping( value="/excel", method=RequestMethod.POST )
  679. public void getPatientList(
  680. @RequestParam(value="downMemo", required=false, defaultValue="") String downMemo,
  681. @RequestParam(value="inputState", required=false, defaultValue="ALL") String inputState,
  682. @RequestParam(value="patientName", required=false, defaultValue="") String patientName,
  683. @RequestParam(value="startDate", required=false, defaultValue="") String startDate,
  684. @RequestParam(value="endDate", required=false, defaultValue="") String endDate,
  685. @RequestParam(value="excelDateYm", required=false, defaultValue="") String excelDateYm,
  686. @RequestParam(value="page", required=false, defaultValue="1") int page,
  687. HttpServletRequest request,HttpServletResponse response ) {
  688. String userId = LifeCenterSessionController.getSession(request, "sesId");
  689. String sesCenterCode = LifeCenterSessionController.getSession(request, "sesCenterCode");
  690. String sesGroupIdx = LifeCenterSessionController.getSession(request, "sesGroupIdx");
  691. //excel 다운로드 로그 남기기
  692. FileDownloadDTO fileDTO = new FileDownloadDTO();
  693. fileDTO.setId( userId );
  694. fileDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
  695. fileDTO.setUrl( request.getRequestURI().toString() );
  696. fileDTO.setMemo( downMemo );
  697. fileDTO.setEtc( "" );
  698. fileDownloadService.insertExcelDownloadLog( fileDTO );
  699. // 권한이 SYSTEM일경우
  700. PatientDTO dto = new PatientDTO();
  701. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  702. dto.setGroupIdx(Integer.valueOf(sesGroupIdx));
  703. dto.setPatientName(patientName);
  704. dto.setState(inputState);
  705. dto.setStartDate(startDate);
  706. dto.setEndDate(endDate);
  707. if (dto.getCenterCode() == 0) {
  708. if( !excelDateYm.equals( "" ) ) {
  709. String[] ymSplit = excelDateYm.split("/");
  710. String y = ymSplit[0];
  711. String m = ymSplit[1];
  712. if( Integer.valueOf(m) < 10 ) {
  713. m = "0" + m;
  714. }
  715. excelDateYm = y+"-"+m;
  716. }
  717. }
  718. dto.setExcelDateYm(excelDateYm);
  719. int total = patientService.selectPatientCount(dto);
  720. List<PatientDTO> result = new ArrayList<PatientDTO>();
  721. if (total > 0) {
  722. dto.setLimit( 0 );
  723. dto.setLimitMax( total );
  724. if (dto.getCenterCode() == 0) {
  725. result = patientService.selectPatientListSystem(dto);
  726. } else {
  727. result = patientService.selectPatientList(dto);
  728. }
  729. for (PatientDTO temp : result) {
  730. result.get(result.indexOf(temp)).setSymptomContent(LifeCenterFunction.getSymptom(temp));
  731. }
  732. }
  733. if (dto.getCenterCode() == 0) {
  734. getPatientListExcelSystem(request, response, result );
  735. } else {
  736. getPatientListExcel(request, response, result );
  737. }
  738. }
  739. private void getPatientListExcel(HttpServletRequest request, HttpServletResponse response, List<PatientDTO> data ) {
  740. String password = LifeCenterSessionController.getSession(request, "sesPhoneNumber");
  741. password = password.toLowerCase();
  742. if (!password.equals("null")) {
  743. password = password.replace("-", "");
  744. password = password.substring(3).trim();
  745. } else {
  746. password = "";
  747. }
  748. Workbook workbook = new XSSFWorkbook();
  749. Sheet sheet1 = workbook.createSheet("firstSheet");
  750. DecimalFormat df = new DecimalFormat("#,###");
  751. //1.셀 스타일 및 폰트 설정
  752. CellStyle styleOfBoardFillFontBlackBold16 = workbook.createCellStyle();
  753. //정렬
  754. styleOfBoardFillFontBlackBold16.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
  755. styleOfBoardFillFontBlackBold16.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
  756. //배경색
  757. styleOfBoardFillFontBlackBold16.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
  758. styleOfBoardFillFontBlackBold16.setFillPattern(CellStyle.SOLID_FOREGROUND);
  759. //테두리 선 (우,좌,위,아래)
  760. styleOfBoardFillFontBlackBold16.setBorderRight(HSSFCellStyle.BORDER_THIN);
  761. styleOfBoardFillFontBlackBold16.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  762. styleOfBoardFillFontBlackBold16.setBorderTop(HSSFCellStyle.BORDER_THIN);
  763. styleOfBoardFillFontBlackBold16.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  764. //폰트 설정
  765. Font fontOfGothicBlackBold16 = workbook.createFont();
  766. // fontOfGothicBlackBold16.setFontName("나눔고딕"); //글씨체
  767. fontOfGothicBlackBold16.setFontHeight((short)(10*20)); //사이즈
  768. fontOfGothicBlackBold16.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
  769. styleOfBoardFillFontBlackBold16.setFont(fontOfGothicBlackBold16);
  770. int i = 1;
  771. Row row = sheet1.createRow(0);
  772. Cell cell1 = row.createCell(0);
  773. Cell cell2 = row.createCell(1);
  774. Cell cell3 = row.createCell(2);
  775. Cell cell4 = row.createCell(3);
  776. Cell cell5 = row.createCell(4);
  777. Cell cell6 = row.createCell(5);
  778. Cell cell7 = row.createCell(6);
  779. Cell cell8 = row.createCell(7);
  780. Cell cell9 = row.createCell(8);
  781. Cell cell10 = row.createCell(9);
  782. Cell cell11 = row.createCell(10);
  783. Cell cell12 = row.createCell(11);
  784. Cell cell13 = row.createCell(12);
  785. Cell cell14 = row.createCell(13);
  786. Cell cell15 = row.createCell(14);
  787. Cell cell16 = row.createCell(15);
  788. cell1.setCellStyle(styleOfBoardFillFontBlackBold16);
  789. cell2.setCellStyle(styleOfBoardFillFontBlackBold16);
  790. cell3.setCellStyle(styleOfBoardFillFontBlackBold16);
  791. cell4.setCellStyle(styleOfBoardFillFontBlackBold16);
  792. cell5.setCellStyle(styleOfBoardFillFontBlackBold16);
  793. cell6.setCellStyle(styleOfBoardFillFontBlackBold16);
  794. cell7.setCellStyle(styleOfBoardFillFontBlackBold16);
  795. cell8.setCellStyle(styleOfBoardFillFontBlackBold16);
  796. cell9.setCellStyle(styleOfBoardFillFontBlackBold16);
  797. cell10.setCellStyle(styleOfBoardFillFontBlackBold16);
  798. cell11.setCellStyle(styleOfBoardFillFontBlackBold16);
  799. cell12.setCellStyle(styleOfBoardFillFontBlackBold16);
  800. cell13.setCellStyle(styleOfBoardFillFontBlackBold16);
  801. cell14.setCellStyle(styleOfBoardFillFontBlackBold16);
  802. cell15.setCellStyle(styleOfBoardFillFontBlackBold16);
  803. cell16.setCellStyle(styleOfBoardFillFontBlackBold16);
  804. sheet1.setColumnWidth( 0, 5000); //센터명
  805. sheet1.setColumnWidth( 1, 3000); //환자명
  806. sheet1.setColumnWidth( 2, 4000); //동호실
  807. sheet1.setColumnWidth( 3, 2000); //성별
  808. sheet1.setColumnWidth( 4, 3500); //나이
  809. sheet1.setColumnWidth( 5, 3500); //생년월일
  810. sheet1.setColumnWidth( 6, 3500); //입소일자
  811. sheet1.setColumnWidth( 7, 3500); //상태변경일
  812. sheet1.setColumnWidth( 8, 3800); //상태
  813. sheet1.setColumnWidth( 9, 6000); //체온
  814. sheet1.setColumnWidth( 10, 10000); //혈압
  815. sheet1.setColumnWidth( 11, 6200); //맥박
  816. sheet1.setColumnWidth( 12, 6200); //산소포화도
  817. sheet1.setColumnWidth( 13, 7000); //혈당
  818. sheet1.setColumnWidth( 14, 14000); //임상증상
  819. sheet1.setColumnWidth( 15, 20000); //정신건강
  820. cell1.setCellValue("생활치료센터명");
  821. cell2.setCellValue("환자명");
  822. cell3.setCellValue("동,호실");
  823. cell4.setCellValue("성별/나이");
  824. cell5.setCellValue("생년월일");
  825. cell6.setCellValue("확진일자");
  826. cell7.setCellValue("입소일자");
  827. cell8.setCellValue("퇴소예정일");
  828. cell9.setCellValue("상태(상태 변경일)");
  829. cell10.setCellValue("체온");
  830. cell11.setCellValue("혈압");
  831. cell12.setCellValue("맥박");
  832. cell13.setCellValue("산소포화도");
  833. cell14.setCellValue("혈당");
  834. cell15.setCellValue("임상증상");
  835. cell16.setCellValue("정신건강");
  836. for (PatientDTO dto : data) {
  837. row = sheet1.createRow(i);
  838. cell1 = row.createCell(0);
  839. cell2 = row.createCell(1);
  840. cell3 = row.createCell(2);
  841. cell4 = row.createCell(3);
  842. cell5 = row.createCell(4);
  843. cell6 = row.createCell(5);
  844. cell7 = row.createCell(6);
  845. cell8 = row.createCell(7);
  846. cell9 = row.createCell(8);
  847. cell10 = row.createCell(9);
  848. cell11 = row.createCell(10);
  849. cell12 = row.createCell(11);
  850. cell13 = row.createCell(12);
  851. cell14 = row.createCell(13);
  852. cell15 = row.createCell(14);
  853. cell16 = row.createCell(15);
  854. String patientName = dto.getPatientName();
  855. String roomWard = ( dto.getWardNumber() == null || dto.getWardNumber().equals( "" ) ) ? "" : dto.getWardNumber()+"동";
  856. roomWard += ( dto.getRoomNumber() == null || dto.getRoomNumber().equals( "" ) ) ? "" : dto.getRoomNumber()+"호 ";
  857. String gender = dto.getGender();
  858. String age = dto.getAge();
  859. String jumin = dto.getJumin();
  860. String confirmationDate = dto.getConfirmationDate();
  861. String hospitalizationDate = dto.getHospitalizationDate();
  862. String expecteDischargeDate = dto.getExpectedDischargeDate();
  863. String disisolationDate = dto.getDisisolationDate();
  864. String state = dto.getState();
  865. String temperature = dto.getTemperature();
  866. String temperatureCreateDate = dto.getTemperatureCreateDate();
  867. String systolicBloodPressure = dto.getSystolicBloodPressure();
  868. String systolicBloodPressureCreateDate = dto.getSystolicBloodPressureCreateDate();
  869. String diastolicBloodPressure = dto.getDiastolicBloodPressure();
  870. String diastolicBloodPressureCreateDate = dto.getDiastolicBloodPressureCreateDate();
  871. String pulseRate = dto.getPulseRate();
  872. String pulseRateCreateDate = dto.getPulseRateCreateDate();
  873. String oxygenSaturation = dto.getOxygenSaturation();
  874. String oxygenSaturationCreateDate = dto.getOxygenSaturationCreateDate();
  875. String bloodSugar = dto.getBloodSugar();
  876. String bloodSugarCreateDate = dto.getBloodSugarCreateDate();
  877. String notMeasured = "-";
  878. String symptomDate = dto.getCreateDate();
  879. String symptomContent = dto.getSymptomContent();
  880. // String symptom = LifeCenterFunction.getSymptom( dto );
  881. String centerName = dto.getCenterName();
  882. cell1.setCellValue( centerName );
  883. cell2.setCellValue( patientName );
  884. cell3.setCellValue( roomWard );
  885. cell4.setCellValue( gender + "/" + age );
  886. cell5.setCellValue( jumin );
  887. cell6.setCellValue( confirmationDate );
  888. cell7.setCellValue( hospitalizationDate );
  889. cell8.setCellValue( expecteDischargeDate );
  890. if (state.equals("입소(지정)")) {
  891. cell9.setCellValue( state );
  892. } else {
  893. cell9.setCellValue( state + "(" + disisolationDate + ")" );
  894. }
  895. cell10.setCellValue( ( temperature == null || temperature.equals("") ) ? notMeasured : temperature + " ˚C (" + temperatureCreateDate + ")" );
  896. cell11.setCellValue( ( systolicBloodPressure == null || systolicBloodPressure.equals("") ) ? notMeasured : systolicBloodPressure + " mmHg / " + diastolicBloodPressure + " mmHg (" + systolicBloodPressureCreateDate + ")" );
  897. cell12.setCellValue( ( pulseRate == null || pulseRate.equals("") ) ? notMeasured : pulseRate + " bpm (" + pulseRateCreateDate + ")" );
  898. cell13.setCellValue( ( oxygenSaturation == null || oxygenSaturation.equals("") ) ? notMeasured : oxygenSaturation + " % (" + oxygenSaturationCreateDate + ")" );
  899. cell14.setCellValue( ( bloodSugar == null || bloodSugar.equals("") ) ? notMeasured : bloodSugar + " mg/dL (" + bloodSugarCreateDate + ")" );
  900. cell15.setCellValue( ( symptomContent == null || symptomDate == null || symptomContent.equals("") || symptomDate.equals( "" ) ) ? notMeasured : symptomContent + " (" + symptomDate + ")" );
  901. String mental = "";
  902. if( dto.getMentalCreateDate() != null && dto.getMentalCreateDate() !="" ) {
  903. if( dto.getStressTotal() >= 2 || dto.getDepressedTotal() >= 5 || dto.getDepressedNine() >= 1 || dto.getVasTotal() >= 7 ) {
  904. String agreeYn = dto.getAgreeYn().equals("N")? "(비동의)" : "(동의)";
  905. mental = "상담" + agreeYn + " " + dto.getMentalCreateDate();
  906. } else {
  907. mental = "정상";
  908. }
  909. } else {
  910. mental = "-";
  911. }
  912. cell16.setCellValue(mental);
  913. i++;
  914. }
  915. row = sheet1.createRow(i);
  916. cell1 = row.createCell(2);
  917. cell2 = row.createCell(3);
  918. cell3 = row.createCell(4);
  919. cell4 = row.createCell(5);
  920. cell5 = row.createCell(6);
  921. cell6 = row.createCell(7);
  922. cell7 = row.createCell(8);
  923. cell8 = row.createCell(9);
  924. cell9 = row.createCell(10);
  925. cell10 = row.createCell(11);
  926. cell11 = row.createCell(12);
  927. cell12 = row.createCell(13);
  928. cell13 = row.createCell(14);
  929. cell14 = row.createCell(15);
  930. cell15 = row.createCell(16);
  931. cell16 = row.createCell(17);
  932. try {
  933. // File file = new File(".");
  934. // String rootPath = file.getAbsolutePath();
  935. // System.out.println("현재 프로젝트의 경로 : "+rootPath );
  936. // JBOSS에서 구동시 /home1/jboss/jboss-eap-7.3/domain/test/excel-temp 경로에 저장이됨
  937. String tempPath = "../excel-temp/testExcel.xlsx";
  938. String downName = LifeCenterFunction.getNow() + " 환자리스트.xlsx";
  939. File xlsFile = new File(tempPath);
  940. // FileOutputStream fileOut = new FileOutputStream(tempPath);
  941. // workbook.write(fileOut);
  942. // fileOut.close();
  943. ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
  944. FileOutputStream fos = new FileOutputStream(tempPath);
  945. workbook.write(fileOut);
  946. InputStream filein = new ByteArrayInputStream(fileOut.toByteArray());
  947. OPCPackage opc = OPCPackage.open(filein);
  948. POIFSFileSystem fileSystem = new POIFSFileSystem();
  949. EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.agile);
  950. Encryptor encryptor = encryptionInfo.getEncryptor();
  951. encryptor.confirmPassword(password);
  952. opc.save(encryptor.getDataStream(fileSystem));
  953. opc.flush();
  954. fileSystem.writeFilesystem(fos);
  955. fileOut.close();
  956. opc.close();
  957. filein.close();
  958. fileSystem.close();
  959. LifeCenterFileDownload.download(request, response, tempPath, downName);
  960. xlsFile.delete();
  961. } catch (FileNotFoundException e) {
  962. e.printStackTrace();
  963. } catch (IOException e) {
  964. e.printStackTrace();
  965. } catch (InvalidFormatException e) {
  966. // TODO Auto-generated catch block
  967. e.printStackTrace();
  968. } catch (GeneralSecurityException e) {
  969. // TODO Auto-generated catch block
  970. e.printStackTrace();
  971. }
  972. }
  973. private void getPatientListExcelSystem(HttpServletRequest request, HttpServletResponse response, List<PatientDTO> data ) {
  974. String password = LifeCenterSessionController.getSession(request, "sesPhoneNumber");
  975. password = password.toLowerCase();
  976. if (!password.equals("null")) {
  977. password = password.replace("-", "");
  978. password = password.substring(3).trim();
  979. } else {
  980. password = "";
  981. }
  982. Workbook workbook = new XSSFWorkbook();
  983. Sheet sheet1 = workbook.createSheet("firstSheet");
  984. DecimalFormat df = new DecimalFormat("#,###");
  985. //1.셀 스타일 및 폰트 설정
  986. CellStyle styleOfBoardFillFontBlackBold16 = workbook.createCellStyle();
  987. //정렬
  988. styleOfBoardFillFontBlackBold16.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
  989. styleOfBoardFillFontBlackBold16.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
  990. //배경색
  991. styleOfBoardFillFontBlackBold16.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
  992. styleOfBoardFillFontBlackBold16.setFillPattern(CellStyle.SOLID_FOREGROUND);
  993. //테두리 선 (우,좌,위,아래)
  994. styleOfBoardFillFontBlackBold16.setBorderRight(HSSFCellStyle.BORDER_THIN);
  995. styleOfBoardFillFontBlackBold16.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  996. styleOfBoardFillFontBlackBold16.setBorderTop(HSSFCellStyle.BORDER_THIN);
  997. styleOfBoardFillFontBlackBold16.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  998. //폰트 설정
  999. Font fontOfGothicBlackBold16 = workbook.createFont();
  1000. // fontOfGothicBlackBold16.setFontName("나눔고딕"); //글씨체
  1001. fontOfGothicBlackBold16.setFontHeight((short)(10*20)); //사이즈
  1002. fontOfGothicBlackBold16.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
  1003. styleOfBoardFillFontBlackBold16.setFont(fontOfGothicBlackBold16);
  1004. int i = 1;
  1005. Row row = sheet1.createRow(0);
  1006. Cell cell1 = row.createCell(0);
  1007. Cell cell2 = row.createCell(1);
  1008. Cell cell3 = row.createCell(2);
  1009. Cell cell4 = row.createCell(3);
  1010. Cell cell5 = row.createCell(4);
  1011. Cell cell6 = row.createCell(5);
  1012. Cell cell7 = row.createCell(6);
  1013. Cell cell8 = row.createCell(7);
  1014. Cell cell9 = row.createCell(8);
  1015. cell1.setCellStyle(styleOfBoardFillFontBlackBold16);
  1016. cell2.setCellStyle(styleOfBoardFillFontBlackBold16);
  1017. cell3.setCellStyle(styleOfBoardFillFontBlackBold16);
  1018. cell4.setCellStyle(styleOfBoardFillFontBlackBold16);
  1019. cell5.setCellStyle(styleOfBoardFillFontBlackBold16);
  1020. cell6.setCellStyle(styleOfBoardFillFontBlackBold16);
  1021. cell7.setCellStyle(styleOfBoardFillFontBlackBold16);
  1022. cell8.setCellStyle(styleOfBoardFillFontBlackBold16);
  1023. cell9.setCellStyle(styleOfBoardFillFontBlackBold16);
  1024. sheet1.setColumnWidth( 0, 5000); //센터명
  1025. sheet1.setColumnWidth( 1, 3000); //환자명
  1026. sheet1.setColumnWidth( 2, 4000); //동호실
  1027. sheet1.setColumnWidth( 3, 2000); //성별
  1028. sheet1.setColumnWidth( 4, 3500); //나이
  1029. sheet1.setColumnWidth( 5, 3500); //생년월일
  1030. sheet1.setColumnWidth( 6, 3500); //입소일자
  1031. sheet1.setColumnWidth( 7, 3500); //상태변경일
  1032. sheet1.setColumnWidth( 8, 7800); //상태
  1033. cell1.setCellValue("생활치료센터명");
  1034. cell2.setCellValue("환자명");
  1035. cell3.setCellValue("동,호실");
  1036. cell4.setCellValue("성별/나이");
  1037. cell5.setCellValue("생년월일");
  1038. cell6.setCellValue("확진일자");
  1039. cell7.setCellValue("입소일자");
  1040. cell8.setCellValue("퇴소예정일");
  1041. cell9.setCellValue("상태(상태 변경일)");
  1042. for (PatientDTO dto : data) {
  1043. row = sheet1.createRow(i);
  1044. cell1 = row.createCell(0);
  1045. cell2 = row.createCell(1);
  1046. cell3 = row.createCell(2);
  1047. cell4 = row.createCell(3);
  1048. cell5 = row.createCell(4);
  1049. cell6 = row.createCell(5);
  1050. cell7 = row.createCell(6);
  1051. cell8 = row.createCell(7);
  1052. cell9 = row.createCell(8);
  1053. String patientName = dto.getPatientName();
  1054. String roomWard = ( dto.getWardNumber() == null || dto.getWardNumber().equals( "" ) ) ? "" : dto.getWardNumber()+"동";
  1055. roomWard += ( dto.getRoomNumber() == null || dto.getRoomNumber().equals( "" ) ) ? "" : dto.getRoomNumber()+"호 ";
  1056. String gender = dto.getGender();
  1057. String age = dto.getAge();
  1058. String jumin = dto.getJumin();
  1059. String confirmationDate = dto.getConfirmationDate();
  1060. String hospitalizationDate = dto.getHospitalizationDate();
  1061. String expecteDischargeDate = dto.getExpectedDischargeDate();
  1062. String disisolationDate = dto.getDisisolationDate();
  1063. String state = dto.getState();
  1064. String notMeasured = "-";
  1065. String symptomDate = dto.getCreateDate();
  1066. String symptomContent = dto.getSymptomContent();
  1067. // String symptom = LifeCenterFunction.getSymptom( dto );
  1068. String centerName = dto.getCenterName();
  1069. cell1.setCellValue( centerName );
  1070. cell2.setCellValue( patientName );
  1071. cell3.setCellValue( roomWard );
  1072. cell4.setCellValue( gender + "/" + age );
  1073. cell5.setCellValue( jumin );
  1074. cell6.setCellValue( confirmationDate );
  1075. cell7.setCellValue( hospitalizationDate );
  1076. cell8.setCellValue( expecteDischargeDate );
  1077. if (state.equals("입소(지정)")) {
  1078. cell9.setCellValue( state );
  1079. } else {
  1080. cell9.setCellValue( state + "(" + disisolationDate + ")" );
  1081. }
  1082. i++;
  1083. }
  1084. row = sheet1.createRow(i);
  1085. cell1 = row.createCell(2);
  1086. cell2 = row.createCell(3);
  1087. cell3 = row.createCell(4);
  1088. cell4 = row.createCell(5);
  1089. cell5 = row.createCell(6);
  1090. cell6 = row.createCell(7);
  1091. cell7 = row.createCell(8);
  1092. cell8 = row.createCell(9);
  1093. cell9 = row.createCell(10);
  1094. try {
  1095. // File file = new File(".");
  1096. // String rootPath = file.getAbsolutePath();
  1097. // System.out.println("현재 프로젝트의 경로 : "+rootPath );
  1098. // JBOSS에서 구동시 /home1/jboss/jboss-eap-7.3/domain/test/excel-temp 경로에 저장이됨
  1099. String tempPath = "../excel-temp/testExcel.xlsx";
  1100. String downName = LifeCenterFunction.getNow() + " 환자리스트.xlsx";
  1101. File xlsFile = new File(tempPath);
  1102. // FileOutputStream fileOut = new FileOutputStream(tempPath);
  1103. // workbook.write(fileOut);
  1104. // fileOut.close();
  1105. ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
  1106. FileOutputStream fos = new FileOutputStream(tempPath);
  1107. workbook.write(fileOut);
  1108. InputStream filein = new ByteArrayInputStream(fileOut.toByteArray());
  1109. OPCPackage opc = OPCPackage.open(filein);
  1110. POIFSFileSystem fileSystem = new POIFSFileSystem();
  1111. EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.agile);
  1112. Encryptor encryptor = encryptionInfo.getEncryptor();
  1113. encryptor.confirmPassword(password);
  1114. opc.save(encryptor.getDataStream(fileSystem));
  1115. opc.flush();
  1116. fileSystem.writeFilesystem(fos);
  1117. fileOut.close();
  1118. opc.close();
  1119. filein.close();
  1120. fileSystem.close();
  1121. LifeCenterFileDownload.download(request, response, tempPath, downName);
  1122. xlsFile.delete();
  1123. } catch (FileNotFoundException e) {
  1124. e.printStackTrace();
  1125. } catch (IOException e) {
  1126. e.printStackTrace();
  1127. } catch (InvalidFormatException e) {
  1128. // TODO Auto-generated catch block
  1129. e.printStackTrace();
  1130. } catch (GeneralSecurityException e) {
  1131. // TODO Auto-generated catch block
  1132. e.printStackTrace();
  1133. }
  1134. }
  1135. }