PushController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.lemon.lifecenter.scheduler.controller;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.time.LocalDateTime;
  6. import java.util.ArrayList;
  7. import java.util.Calendar;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.transaction.annotation.Propagation;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RequestMethod;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import com.lemon.lifecenter.scheduler.common.PushUtils;
  21. import com.lemon.lifecenter.scheduler.dto.DeviceInfoDTO;
  22. import com.lemon.lifecenter.scheduler.dto.PushResultDTO;
  23. import com.lemon.lifecenter.scheduler.dto.ScheduleDTO;
  24. import com.lemon.lifecenter.scheduler.service.PushService;
  25. @RestController
  26. public class PushController {
  27. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  28. @Autowired
  29. private PushService service;
  30. @Autowired
  31. private PushUtils pushUtils;
  32. @RequestMapping(value = "/queryTest", method = RequestMethod.POST)
  33. public void queryTest() {
  34. pushUtils.compareTime("18:00:01");
  35. }
  36. @RequestMapping(value = "/selectSendPushList", method = RequestMethod.POST)
  37. @Transactional(propagation=Propagation.REQUIRED)
  38. public void selectSendPushList() {
  39. int count = service.selectSendPushCount();
  40. if (count == 0) {
  41. } else {
  42. ArrayList<ScheduleDTO> list = (ArrayList<ScheduleDTO>) service.selectSendPushList();
  43. for (int i = 0; i < list.size(); i++) {
  44. int pushIdx = list.get(i).getPushIdx();
  45. String sendType = list.get(i).getSendType();
  46. String targetType = list.get(i).getTargetType();
  47. String pushTitle = list.get(i).getPushTitle();
  48. String pushContent = list.get(i).getPushContent();
  49. String sendDate = list.get(i).getSendDate();
  50. String sendTime = list.get(i).getSendTime();
  51. // String createDate = list.get(i).getCreateDate();
  52. String startDate = sendDate + " " + sendTime;
  53. int logIdx = 0;
  54. if (sendType.equals("D")) {
  55. startDate = pushUtils.getNow();
  56. }
  57. list.get(i).setStartDate(startDate);
  58. logger.error("DDDDDDDDDD1111 IDX -- > " + list.get(i).getIdx());
  59. if (pushUtils.compareDateTime(startDate) == true) {
  60. int idx = service.insertPushLog(list.get(i));
  61. logIdx = list.get(i).getIdx();
  62. logger.error("DDDDDDDDD2222 IDX -- > " + list.get(i).getIdx());
  63. logger.error("DDDDDDDDD2222 IDX -- > " + logIdx);
  64. if (idx == 0) {
  65. } else {
  66. list.get(i).setSendState("I");
  67. service.updatePushSchedule(list.get(i));
  68. // sendType : D(즉시), R(발송중), E(매일 발송)
  69. // sendState : W(대기), I(발송중), C(완료)
  70. // targetType : A(전체), N(건강정보 미엽락자), M(본인관리환자), P(환자개별선택)
  71. List<DeviceInfoDTO> pushTargetList = service.selectPushTarget(targetType, list.get(i));
  72. for (int j = 0; j <pushTargetList.size(); j++) {
  73. String token = pushTargetList.get(j).getDeviceToken();
  74. int patientIdx = pushTargetList.get(j).getPatientIdx();
  75. PushResultDTO pushResultDto = new PushResultDTO();
  76. pushResultDto.setYm(pushUtils.getNowYm());
  77. pushResultDto.setLogIdx(logIdx);
  78. pushResultDto.setPushIdx(pushIdx);
  79. pushResultDto.setPatientIdx(patientIdx);
  80. pushResultDto.setDeviceToken(token);
  81. pushResultDto.setState("W"); // 결과 대기
  82. service.insertPushResult(pushResultDto);
  83. HashMap<String, String> response = new HashMap<String, String>();
  84. if (!token.equals("")) {
  85. response = pushUtils.sendFcm(token, pushTitle, pushContent);
  86. } else {
  87. response.put("NOT_FOUND", "Requested entity was not found.");
  88. }
  89. for (String key : response.keySet()) {
  90. pushResultDto.setSuccessYn("N");
  91. if (key.equals("success")) {
  92. pushResultDto.setSuccessYn("Y");
  93. } else {
  94. pushResultDto.setSuccessYn("N");
  95. pushResultDto.setFailCode(key);
  96. pushResultDto.setNote(response.get(key));
  97. }
  98. }
  99. pushResultDto.setState("C"); // 발송 완료
  100. service.updatePushResult(pushResultDto);
  101. }
  102. service.updatePushLog(list.get(i));
  103. }
  104. }
  105. }
  106. }
  107. }
  108. // @RequestMapping(value = "/everyDayPushSend", method = RequestMethod.POST)
  109. @Transactional(propagation=Propagation.REQUIRED)
  110. public void everyDayPushSend() {
  111. int cnt = service.selectEveryDaySendPushCount();
  112. if (cnt == 0) {
  113. } else {
  114. List<ScheduleDTO> list = service.selectEveryDaySendPushList();
  115. for (int i = 0; i < list.size(); i++) {
  116. int pushIdx = list.get(i).getPushIdx();
  117. String targetType = list.get(i).getTargetType();
  118. String pushTitle = list.get(i).getPushTitle();
  119. String pushContent = list.get(i).getPushContent();
  120. String sendTime = list.get(i).getSendTime();
  121. int logIdx = 0;
  122. logger.error("EEEEEEEE1111 IDX -- > " + list.get(i).getIdx());
  123. if (pushUtils.compareTime(sendTime) == true) {
  124. int idx = service.insertEveryDayPushLog(list.get(i));
  125. logIdx = list.get(i).getIdx();
  126. logger.error("EEEEEEEE2222 IDX -- > " + list.get(i).getIdx());
  127. logger.error("EEEEEEEE2222 IDX -- > " + logIdx);
  128. if (idx == 0) {
  129. } else {
  130. list.get(i).setSendState("I");
  131. service.updatePushSchedule(list.get(i));
  132. // sendType : D(즉시), R(발송중), E(매일 발송)
  133. // sendState : W(대기), I(발송중), C(완료)
  134. // targetType : A(전체), N(건강정보 미엽락자), M(본인관리환자), P(환자개별선택)
  135. List<DeviceInfoDTO> pushTargetList = service.selectPushTarget(targetType, list.get(i));
  136. for (int j = 0; j <pushTargetList.size(); j++) {
  137. String token = pushTargetList.get(j).getDeviceToken();
  138. int patientIdx = pushTargetList.get(j).getPatientIdx();
  139. PushResultDTO pushResultDto = new PushResultDTO();
  140. pushResultDto.setYm(pushUtils.getNowYm());
  141. pushResultDto.setLogIdx(logIdx);
  142. pushResultDto.setPushIdx(pushIdx);
  143. pushResultDto.setPatientIdx(patientIdx);
  144. pushResultDto.setDeviceToken(token);
  145. pushResultDto.setState("W"); // 결과 대기
  146. service.insertPushResult(pushResultDto);
  147. HashMap<String, String> response = new HashMap<String, String>();
  148. if (!token.equals("")) {
  149. response = pushUtils.sendFcm(token, pushTitle, pushContent);
  150. } else {
  151. response.put("NOT_FOUND", "Requested entity was not found.");
  152. }
  153. for (String key : response.keySet()) {
  154. pushResultDto.setSuccessYn("N");
  155. if (key.equals("success")) {
  156. pushResultDto.setSuccessYn("Y");
  157. } else {
  158. pushResultDto.setSuccessYn("N");
  159. pushResultDto.setFailCode(key);
  160. pushResultDto.setNote(response.get(key));
  161. }
  162. }
  163. pushResultDto.setState("C"); // 발송 완료
  164. service.updatePushResult(pushResultDto);
  165. }
  166. service.updatePushLog(list.get(i));
  167. list.get(i).setSendState("W");
  168. service.updatePushSchedule(list.get(i));
  169. }
  170. }
  171. }
  172. }
  173. }
  174. @RequestMapping(value = "/createResultTable", method = RequestMethod.POST)
  175. public void createResultTable() {
  176. String ym = pushUtils.getNowYm();
  177. int tableCount = 0;
  178. tableCount = service.resultTableCount(ym);
  179. if (tableCount == 0) {
  180. service.createResultTable(ym);
  181. }
  182. Calendar cal = Calendar.getInstance();
  183. cal.add (cal.MONTH, + 1); //다음달
  184. ym = pushUtils.getNextYm();
  185. tableCount = service.resultTableCount(ym);
  186. if (tableCount == 0) {
  187. service.createResultTable(ym);
  188. }
  189. }
  190. }