TrafficService.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package com.its.web.service.traffic;
  2. import com.its.web.dto.message.ResultDto;
  3. import com.its.web.dto.traffic.*;
  4. import com.its.web.mapper.its.traffic.TrafficMapper;
  5. import lombok.RequiredArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Service;
  8. import java.sql.Blob;
  9. import java.sql.SQLException;
  10. import java.util.*;
  11. @Slf4j
  12. @RequiredArgsConstructor
  13. @Service
  14. public class TrafficService {
  15. private final TrafficMapper mapper;
  16. /**
  17. * CCTV 조회
  18. * @return
  19. */
  20. public List<TbCctvCtlrDto> findAllCctv() {
  21. return this.mapper.findAllCctv();
  22. }
  23. /**
  24. * 홈페이지 CCTV 조회
  25. * @return
  26. */
  27. public List<TbCctvCtlrDto> findCctvList() {
  28. return this.mapper.findCctvList();
  29. }
  30. /**
  31. * VMS 조회
  32. * @return
  33. */
  34. public List<TbVmsCtlrDto> findAllVms() {
  35. List<TbVmsCtlrDto> resultList = mapper.findAllVms();
  36. resultList.forEach((TbVmsCtlrDto obj)->{
  37. Long vmsCtlrNmbr = obj.getVmsCtlrNmbr();
  38. List<VmsDsplPhaseDto> list = this.mapper.findVmsDsplPhaseInfo(vmsCtlrNmbr.toString());
  39. if (list != null) {
  40. obj.setMsg(new ArrayList<VmsDsplPhaseDto>());
  41. list.forEach((VmsDsplPhaseDto dto) -> {
  42. obj.getMsg().add(dto);
  43. });
  44. }
  45. });
  46. return resultList;
  47. }
  48. /**
  49. * VMS 표출 이미지 조회
  50. * @return 이미지 byteArray
  51. */
  52. public byte [] findVmsDsplImage(String vmsCtlrNmbr, String phase) {
  53. Map<String, String> paramMap = new HashMap<>();
  54. paramMap.put("vmsCtlrNmbr", vmsCtlrNmbr);
  55. paramMap.put("phase", phase);
  56. Map<String, Object> resultMap = this.mapper.findVmsDsplImage(paramMap);
  57. if (resultMap != null && resultMap.get("VMS_DSPL_MSG_IMAG") != null) {
  58. Blob blob = (Blob) resultMap.get("VMS_DSPL_MSG_IMAG");
  59. try {
  60. if ((int)blob.length() > 0) {
  61. return blob.getBytes(1, (int) blob.length());
  62. }
  63. }
  64. catch (SQLException e) {
  65. log.error("Please Check the Sql Exception :{}", e.getStackTrace());
  66. }
  67. }
  68. return null;
  69. }
  70. /**
  71. * 돌발상황 조회
  72. * @return
  73. */
  74. public List<TbIncdOcrrDto> findAllIncident() {
  75. return this.mapper.findAllIncident();
  76. }
  77. /**
  78. * 지도 소통정보 버텍스 조회
  79. * @param req 버텍스 그리는 범위
  80. * @return
  81. */
  82. public List<VertexDto> findVertexByRange(VertexDto.VertexDtoReq req) {
  83. Map<String, Object> paramMap = new HashMap<>();
  84. List<VertexDto> resultList = new ArrayList<>();
  85. if (req != null) {
  86. if ( req.getLevl() != null &&
  87. req.getNeLat() != null &&
  88. req.getNeLng() != null &&
  89. req.getSwLat() != null &&
  90. req.getSwLng() != null ) {
  91. int level = req.getLevl();
  92. paramMap.put("neLat", req.getNeLat());
  93. paramMap.put("neLng", req.getNeLng());
  94. paramMap.put("swLat", req.getSwLat());
  95. paramMap.put("swLng", req.getSwLng());
  96. if (level <= 2) {
  97. paramMap.put("levl", level);
  98. resultList = this.mapper.findLinkVertexByRange(paramMap);
  99. }
  100. else if (level < 6) {
  101. if (level == 3) {
  102. level = 4;
  103. }
  104. paramMap.put("levl", level);
  105. resultList = this.mapper.findIfscVertexByRange(paramMap);
  106. }
  107. else if (level >= 6) {
  108. if (level == 7) {
  109. level = 6;
  110. }
  111. else if (level >= 8){
  112. level = 7;
  113. }
  114. paramMap.put("levl", level);
  115. resultList = this.mapper.findRoadVertexByRange(paramMap);
  116. }
  117. }
  118. else {
  119. log.error("파라미터 정보를 확인 해주세요. {}", req);
  120. }
  121. }
  122. else {
  123. log.error("조회할 파라미터 정보가 없습니다.");
  124. }
  125. return resultList;
  126. }
  127. public Map<String, List<TbAtrdDto>> findAllAtrd() {
  128. List<TbAtrdDto> atrdList = this.mapper.findAllAtrd();
  129. Map<String, List<TbAtrdDto>> resultMap = new HashMap<>();
  130. atrdList.forEach(atrd->{
  131. if (atrd != null) {
  132. resultMap.computeIfAbsent(atrd.getAtrdNm(), k -> new ArrayList<TbAtrdDto>());
  133. resultMap.get(atrd.getAtrdNm()).add(atrd);
  134. }
  135. });
  136. return resultMap;
  137. }
  138. public List<TbAtrdDto> findAtrdNameList() {
  139. return this.mapper.findAtrdNameList();
  140. }
  141. public List<TbAtrdDto> findAtrdVertexByIdAndLevel(TbAtrdDto.TbAtrdDtoReq req) {
  142. List<TbAtrdDto> atrdList = new ArrayList<>();
  143. Map<String, Object> paramMap = new HashMap<>();
  144. if (req != null &&
  145. req.getLevl() != null &&
  146. req.getUpHill() != null &&
  147. req.getDownHill() != null
  148. ) {
  149. paramMap.put("levl", req.getLevl());
  150. paramMap.put("upHillId", req.getUpHill());
  151. paramMap.put("downHillId", req.getDownHill());
  152. int level = req.getLevl();
  153. if (level > 5) {
  154. if (level == 7) {
  155. level = 6;
  156. }
  157. else if (level >= 8){
  158. level = 7;
  159. }
  160. paramMap.put("levl", level);
  161. atrdList = this.mapper.findAtrdRoadVertexByIdAndLevel(paramMap);
  162. }
  163. else if (level > 3) {
  164. atrdList = this.mapper.findAtrdIfscVertexByIdAndLevel(paramMap);
  165. }
  166. else {
  167. atrdList = this.mapper.findAtrdLinkVertexByIdAndLevel(paramMap);
  168. }
  169. }
  170. else {
  171. log.error("파라미터 정보를 확인해주세요.");
  172. }
  173. return atrdList;
  174. }
  175. public List<TbAtrdInfoDto> findAllAtrdInfo() {
  176. List<TbAtrdInfoDto> result = new ArrayList<>();
  177. String[] levelArr = {"1", "2", "3", "4", "5", "6", "7"};
  178. for (String level : levelArr) {
  179. TbAtrdInfoDto dto = new TbAtrdInfoDto();
  180. dto.setLevel(level);
  181. Map<String, Object> paramMap = new HashMap<>();
  182. paramMap.put("levl", level);
  183. if (level.equals("1") || level.equals("2")) {
  184. dto.setType("link");
  185. dto.setList(this.mapper.findAtrdLinkVertexByIdAndLevel(paramMap));
  186. }
  187. else if (level.equals("3") || level.equals("4") || level.equals("5")) {
  188. dto.setType("ifsc");
  189. dto.setList(this.mapper.findAtrdIfscVertexByIdAndLevel(paramMap));
  190. }
  191. else {
  192. dto.setType("road");
  193. dto.setList(this.mapper.findAtrdRoadVertexByIdAndLevel(paramMap));
  194. }
  195. result.add(dto);
  196. }
  197. return result;
  198. }
  199. public List<TbIncdOcrrDto> findMainIncident() {
  200. List<TbIncdOcrrDto> result = this.mapper.findMainIncident();
  201. for (TbIncdOcrrDto dto: result) {
  202. String agoStr = "-";
  203. String incdTitl = dto.getIncdTitl();
  204. if (null == incdTitl || "".equals(incdTitl)) {
  205. dto.setIncdTitl("-");
  206. }
  207. try {// 숫자가 나와야 정상이지만 혹시라도 아닐경우를 대비해야한다.
  208. //화면에 보여줄때 돌발 시간이 1시간 보다 커질 경우 대비하여 분, 시간, 일 전으로 분류
  209. int agoMinutes= Integer.parseInt(dto.getAgoMinutes());
  210. if (agoMinutes < 60) { // 분 단위
  211. agoStr = agoMinutes + "분 전";
  212. }
  213. else if (agoMinutes < 1440) { //시간 단위
  214. agoStr = (agoMinutes / 60) + "시간 전";
  215. }
  216. else { // 일 단위
  217. agoStr = (agoMinutes / 1440) + "일 전";
  218. }
  219. }
  220. catch (NumberFormatException e) {
  221. log.error("Can not parsed ago minutes... {}", dto.getAgoMinutes());
  222. }
  223. dto.setAgoMinutes(agoStr);
  224. }
  225. return result;
  226. }
  227. public ResultDto updateCctvHmpgUseYn(Map<String, String> paramMap) {
  228. ResultDto result = new ResultDto();
  229. int affectedRow = this.mapper.updateCctvHmpgUseYn(paramMap);
  230. String message = "설정하신 홈페이지 표출정보를 수정하였습니다.";
  231. String success = "S";
  232. if (affectedRow <= 0) {
  233. message = "설정하신 홈페이지 표출정보가 수정되지 않았습니다.";
  234. success = "F";
  235. }
  236. result.setMessage(message);
  237. result.setSuccess(success);
  238. return result;
  239. }
  240. public List<TbPrkPlceDto> findParkingList() {
  241. return this.mapper.findParkingList();
  242. }
  243. }