PatientController.java 39 KB

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