PatientController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. package com.lemon.lifecenter.controller;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import org.json.JSONObject;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Controller;
  12. import org.springframework.transaction.annotation.Propagation;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import org.springframework.web.bind.annotation.ModelAttribute;
  15. import org.springframework.web.bind.annotation.RequestMapping;
  16. import org.springframework.web.bind.annotation.RequestMethod;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.ResponseBody;
  19. import org.springframework.web.servlet.ModelAndView;
  20. import com.lemon.lifecenter.common.LifeCenterConfigVO;
  21. import com.lemon.lifecenter.common.LifeCenterController;
  22. import com.lemon.lifecenter.common.LifeCenterFunction;
  23. import com.lemon.lifecenter.common.LifeCenterPaging;
  24. import com.lemon.lifecenter.common.LifeCenterSessionController;
  25. import com.lemon.lifecenter.dto.CenterInfoDTO;
  26. import com.lemon.lifecenter.dto.PatientDTO;
  27. import com.lemon.lifecenter.service.CenterService;
  28. import com.lemon.lifecenter.service.PatientService;
  29. @Controller
  30. @RequestMapping("/patient")
  31. //@DependsOn(value = {"LifeCenterPaging"})
  32. public class PatientController extends LifeCenterController {
  33. @Autowired
  34. private PatientService patientService;
  35. @Autowired
  36. private CenterService centerService;
  37. @Autowired
  38. private LifeCenterConfigVO config;
  39. private LifeCenterPaging paging;
  40. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  41. @RequestMapping("/list")
  42. // @ModelAttribute("dto") final ASiboDTO dto,
  43. // @RequestParam( value="k", required=true ) String k
  44. // @RequestParam( value="type", required=false, defaultValue="" ) String type
  45. public ModelAndView patientList(
  46. @RequestParam(value="inputState", required=false, defaultValue="ALL") String inputState,
  47. @RequestParam(value="patientName", required=false, defaultValue="") String patientName,
  48. @RequestParam(value="startDate", required=false, defaultValue="") String startDate,
  49. @RequestParam(value="endDate", required=false, defaultValue="") String endDate,
  50. @RequestParam(value="page", required=false, defaultValue="1") int page,
  51. HttpServletRequest request,HttpServletResponse response) {
  52. System.err.println( "page : " + page );
  53. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  54. String sesGroupIdx = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
  55. // 권한이 SYSTEM일경우
  56. PatientDTO dto = new PatientDTO();
  57. dto.setCenterCode(Integer.parseInt(sesCenterCode));
  58. dto.setGroupIdx( Integer.valueOf( sesGroupIdx ) );
  59. dto.setPatientName(patientName);
  60. dto.setState(inputState);
  61. dto.setStartDate(startDate);
  62. dto.setEndDate(endDate);
  63. dto.setLimit( ( Integer.valueOf( page ) - 1 ) * config.pageDataSize );
  64. dto.setLimitMax( config.pageDataSize );
  65. int total = patientService.selectPatientCount(dto);
  66. List<PatientDTO> result = new ArrayList<PatientDTO>();
  67. if (total > 0) {
  68. result = patientService.selectPatietList(dto);
  69. }
  70. ModelAndView mv = setMV("patient/list");
  71. System.out.println( "PatientController config.pageGroupSize : " + config.pageGroupSize );
  72. String param = "patientName=" + patientName + "&inputState=" + inputState + "&startDate=" + startDate + "&endDate=" + endDate;
  73. paging = LifeCenterPaging.getInstance();
  74. paging.paging(config, total, page, param);
  75. // startDate = startDate.equals( "" ) ? LifeCenterFunction.getNow( "yyyy-MM-dd" ) : startDate;
  76. // endDate = endDate.equals( "" ) ? LifeCenterFunction.getNow( "yyyy-MM-dd" ) : endDate;
  77. mv.addObject("inputState", inputState);
  78. mv.addObject("patientName", patientName);
  79. mv.addObject("total", total);
  80. mv.addObject("item", result);
  81. mv.addObject("paging", paging);
  82. mv.addObject( "startDate", startDate );
  83. mv.addObject( "endDate", endDate );
  84. mv.addObject( "page", page );
  85. mv.addObject( "pageSize", dto.getLimitMax() );
  86. mv.addObject( "sesGroupIdx" , sesGroupIdx );
  87. return mv;
  88. }
  89. @RequestMapping("/new")
  90. public ModelAndView patientNew( HttpServletRequest request,HttpServletResponse response ) {
  91. ModelAndView mv = setMV("patient/new");
  92. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  93. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  94. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  95. CenterInfoDTO dto = new CenterInfoDTO();
  96. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  97. dto.setStaffId( sesId );
  98. int centerCount = centerService.selectCenterOneCount( dto );
  99. String centerName = "";
  100. if( centerCount > 0 ) {
  101. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  102. }
  103. mv.addObject( "centerName", centerName );
  104. mv.addObject( "centerCount", centerCount );
  105. mv.addObject( "actionType", "new" );
  106. return mv;
  107. }
  108. @RequestMapping("/new/insert")
  109. @Transactional(propagation=Propagation.REQUIRED)
  110. public String patientNewInsert(
  111. @ModelAttribute("dto") final PatientDTO dto,
  112. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  113. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  114. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  115. //patientCare Insert
  116. //System.out.println( "dto.getJumin().substring(2) : " + dto.getJumin().replace( "-" , "" ).substring(2) );
  117. String jumin = dto.getJumin().replace( "-" , "" );
  118. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  119. // 환자 password는 생년월일(yyyymmdd)을 암호화
  120. // dto.setPw( LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, jumin ) );
  121. dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  122. dto.setJumin( jumin );
  123. dto.setCenterCode( sesCenterCode );
  124. dto.setState( "H" ); // H : 입소
  125. dto.setCreateBy( sesId );
  126. if( dto.getDisisolationDate().equals( "" ) ) {
  127. dto.setDisisolationDate( null );
  128. }
  129. patientService.insertPatientCare( dto ); // 환지 기본정보 insert
  130. int patientIdx = dto.getPatientIdx();
  131. dto.setPatientIdx( patientIdx );
  132. //patientDisease Insert
  133. dto.setEtcCheck( dto.getEtcCheckDisease() );
  134. dto.setEtcContent( dto.getEtcContentDisease() );
  135. patientService.insertPatientDisease( dto );
  136. //patientSymptom Insert
  137. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  138. dto.setEtcContent( dto.getEtcContentSymptom() );
  139. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  140. //
  141. patientService.insertPatientSymptom( dto );
  142. return "redirect:/patient/info?patientIdx=" + patientIdx;
  143. }
  144. @RequestMapping("/info")
  145. public ModelAndView patientInfo( @ModelAttribute("dto") PatientDTO dto ) {
  146. ModelAndView mv = setMV("patient/info");
  147. int patientIdx = dto.getPatientIdx();
  148. dto = patientService.selectPatientOne(dto);
  149. String jumin = dto.getJumin();
  150. jumin = jumin.substring(0, 4) + "년 " + jumin.substring(4, 6) + "월 " + jumin.substring(6, 8) + "일";
  151. dto.setJumin(jumin);
  152. dto.setPatientPhone(LifeCenterFunction.phone(dto.getPatientPhone()));
  153. dto.setGuardianPhone(LifeCenterFunction.phone(dto.getGuardianPhone()));
  154. String bloodPress = dto.getBloodPressureLevel();
  155. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  156. String[] bloodPressureLevel = bloodPress.split("[|]");
  157. dto.setBloodPressureLevelCon(bloodPressureLevel[0]);
  158. dto.setBloodPressureLevelRel(bloodPressureLevel[1]);
  159. }
  160. String strDisease = "";
  161. String strSymptom = LifeCenterFunction.getSymptom(dto);
  162. if (dto.getBasalDiseaseYn().equals("Y")) {
  163. strDisease = LifeCenterFunction.getDisease(dto);
  164. }
  165. mv.addObject("disease", strDisease);
  166. mv.addObject("symptom", strSymptom);
  167. mv.addObject("patientIdx", patientIdx);
  168. mv.addObject("info", dto);
  169. return mv;
  170. }
  171. @RequestMapping("/edit")
  172. public ModelAndView patientEdit(
  173. @ModelAttribute("dto") PatientDTO patientDTO,
  174. HttpServletRequest request,HttpServletResponse response ) {
  175. String sesCenterCode = LifeCenterSessionController.getSession( request, "sesCenterCode" );
  176. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  177. int patientIdx = patientDTO.getPatientIdx();
  178. patientDTO = patientService.selectPatientOne( patientDTO );
  179. // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
  180. // 센터가 존재하는지 체크
  181. CenterInfoDTO dto = new CenterInfoDTO();
  182. dto.setCenterCode( Integer.valueOf( sesCenterCode ) );
  183. dto.setStaffId( sesId );
  184. String centerName = "";
  185. int centerCount = centerService.selectCenterCount( dto );
  186. if( centerCount > 0 ) {
  187. centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
  188. } else {
  189. LifeCenterFunction.scriptMessage(response, "alertBox({ txt : '문진이 정상적으로 제출되었습니다.', callBack : function(){ history.back(); } });" );
  190. // return ""; 아직처리안함
  191. }
  192. String bloodPress = patientDTO.getBloodPressureLevel();
  193. if (!bloodPress.equals("") && !bloodPress.equals("|")) {
  194. String[] bloodPressureLevel = bloodPress.split("[|]");
  195. patientDTO.setBloodPressureLevelCon(bloodPressureLevel[0]);
  196. patientDTO.setBloodPressureLevelRel(bloodPressureLevel[1]);
  197. }
  198. ModelAndView mv = setMV("patient/edit");
  199. mv.addObject( "centerName", centerName );
  200. mv.addObject( "centerCount", centerCount );
  201. mv.addObject( "patientIdx", patientIdx );
  202. mv.addObject( "patientData", patientDTO );
  203. mv.addObject( "actionType", "edit" );
  204. return mv;
  205. }
  206. @RequestMapping("/edit/update")
  207. @Transactional(propagation=Propagation.REQUIRED)
  208. public String patientEditUpdate(
  209. @ModelAttribute("dto") final PatientDTO dto,
  210. HttpServletRequest request,HttpServletResponse response ) throws Exception {
  211. int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
  212. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  213. int patientIdx = dto.getPatientIdx();
  214. dto.setPatientIdx( patientIdx );
  215. //patientCare Update
  216. String jumin = dto.getJumin().replace( "-" , "" );
  217. dto.setId( dto.getWardNumber().trim() + dto.getRoomNumber().trim() );
  218. dto.setPw( LifeCenterFunction.sha256Encrypt( jumin ) );
  219. dto.setJumin( jumin );
  220. dto.setCenterCode( sesCenterCode );
  221. dto.setUpdateBy( sesId );
  222. if( dto.getDisisolationDate().equals( "" ) ) {
  223. dto.setDisisolationDate( null );
  224. }
  225. patientService.updatePatientCare( dto ); // 환지 기본정보
  226. //patientDisease Insert
  227. dto.setEtcCheck( dto.getEtcCheckDisease() );
  228. dto.setEtcContent( dto.getEtcContentDisease() );
  229. patientService.updatePatientDisease( dto );
  230. //patientSymptom Insert
  231. dto.setEtcCheck( dto.getEtcCheckSymptom() );
  232. dto.setEtcContent( dto.getEtcContentSymptom() );
  233. dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
  234. patientService.updatePatientSymptom( dto );
  235. return "redirect:/patient/info?patientIdx=" + patientIdx;
  236. }
  237. @RequestMapping("/privacy")
  238. public ModelAndView patientPrivacy() {
  239. ModelAndView mv = setMV("patient/privacy");
  240. return mv;
  241. }
  242. @RequestMapping( value="/nonFaceStart", method = RequestMethod.POST )
  243. @ResponseBody
  244. public String nonFaceStart(
  245. @RequestParam( value="pId", required = true ) String pId,
  246. @RequestParam( value="roomId", required = true ) String roomId,
  247. @RequestParam( value="pName", required = true ) String pName,
  248. HttpServletRequest request, HttpServletResponse response) throws Exception {
  249. String salt = LifeCenterFunction.getSalt();
  250. String timeStamp = LifeCenterFunction.getTimestamp();
  251. String signature = LifeCenterFunction.getSignature(config.nonFaceApiSecret, salt, timeStamp);
  252. String userId = LifeCenterSessionController.getSession(request, "sesId");
  253. String userNm = LifeCenterSessionController.getSession(request, "sesName");
  254. HashMap<String, String> data = new HashMap<String, String>();
  255. data.put("api_key", config.nonFaceApiKey);
  256. data.put("salt", salt);
  257. data.put("timestamp", timeStamp);
  258. data.put("signature", signature);
  259. data.put("client_id", config.nonFaceClientId);
  260. data.put("member_id", userId);
  261. String result = LifeCenterFunction.httpUrlConnection(config.nonFaceApiTokenUrl, data);
  262. JSONObject object = new JSONObject(result);
  263. String message = "";
  264. String token = "";
  265. for(String key : object.keySet()) {
  266. if (key.equals("errorCode")) {
  267. message = object.getString("message");
  268. } else if (key.equals("token")){
  269. token = object.getString("token");
  270. }
  271. }
  272. if (!message.equals("")) {
  273. //error
  274. }
  275. String hashData = LifeCenterFunction.getSignature(config.nonFaceApiSecret, config.nonFaceApiKey, roomId + userId); //"1011503101"
  276. object.put("api_key", config.nonFaceApiKey);
  277. object.put("member_id", userId);
  278. object.put("token", token);
  279. object.put("room_id", roomId);
  280. object.put("member_name", userNm);
  281. object.put("classify", "d"); // p이면 환자 d이면 의사
  282. object.put("hashData", hashData);
  283. return object.toString();
  284. }
  285. }