shjung hace 2 años
padre
commit
729f59cf51

+ 6 - 0
src/main/java/com/its/app/utils/SysUtils.java

@@ -42,6 +42,12 @@ public final class SysUtils
 		Date dtLog = new Date();
 		return sdfDate.format(dtLog);
 	}
+	public static String getSysTimeHm()
+	{
+		SimpleDateFormat sdfDate = new SimpleDateFormat("yyyyMMddHHmm");
+		Date dtLog = new Date();
+		return sdfDate.format(dtLog) + "00";
+	}
 	public static String getSysTimeStr() {
 		SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		Date dtLog = new Date();

+ 5 - 3
src/main/java/com/its/pis/dao/mapper/PrkPlceMapper.java

@@ -2,6 +2,7 @@ package com.its.pis.dao.mapper;
 
 import com.its.pis.entity.TbPrkPlceRt;
 import com.its.pis.entity.TbPrkPlce;
+import com.its.pis.entity.TbPrkPlceRtHs;
 import com.its.pis.entity.TbPrkPlceStts;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -13,9 +14,10 @@ public interface PrkPlceMapper {
 
     List<TbPrkPlce> selectAll();
 
-    int              updatePrltCtlrStts(@Param("stts") TbPrkPlceStts stts);
-    int              insertPrltCtlrSttsHs(@Param("stts") TbPrkPlceStts stts);
+    int              updatePrkPlceStts(@Param("stts") TbPrkPlceStts stts);
+    int              insertPrkPlceSttsHs(@Param("stts") TbPrkPlceStts stts);
 
     int              updatePrkPlceRlTime(@Param("obj") TbPrkPlceRt obj);
-    
+    int              insertPrkPlceRlTimeHs(@Param("obj") TbPrkPlceRtHs obj);
+
 }

+ 25 - 0
src/main/java/com/its/pis/entity/TbPrkPlceRtHs.java

@@ -0,0 +1,25 @@
+package com.its.pis.entity;
+
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 주차장 실시간 정보 이력 Entity Class
+ */
+@Getter
+@Setter
+@ToString
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+public class TbPrkPlceRtHs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String  crtnDt;
+    private Long    prkPlceNmbr;
+    private Integer parkingCgsSttus;
+    private Integer prkCmprtCo;
+    private Integer remndrPrkCmprtCo;
+
+}

+ 6 - 4
src/main/java/com/its/pis/process/DbmsJobProcess.java

@@ -5,14 +5,12 @@ import com.its.app.utils.SysUtils;
 import com.its.pis.dao.mapper.PrkPlceMapper;
 import com.its.pis.dao.mapper.batch.PisInfrDao;
 import com.its.pis.dao.mapper.batch.PrkPlceDao;
-import com.its.pis.entity.TbPisInfr;
-import com.its.pis.entity.TbPisInfrStts;
-import com.its.pis.entity.TbPrkPlceRt;
-import com.its.pis.entity.TbPrkPlceStts;
+import com.its.pis.entity.*;
 import com.its.pis.websocket.message.c2f.C2FMessage;
 import com.its.pis.websocket.message.c2f.PrkPlceRlTimeResponseInfo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import oracle.sql.DATE;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -62,6 +60,10 @@ public class DbmsJobProcess extends AbstractDbmsJobProcess {
                         log.error("PIS Object null");
                     }
                     break;
+                case DbmsJobType.DATA_TYPE_RL_TIME_HS:
+                    TbPrkPlceRtHs rtHs = (TbPrkPlceRtHs)data.getData();
+                    this.prkPlceMapper.insertPrkPlceRlTimeHs(rtHs);
+                    break;
                 case DbmsJobType.DATA_TYPE_PIS_STTS:
                     List<TbPisInfrStts> pisSttsList = (List<TbPisInfrStts>)data.getData();
                     this.pisInfrDao.updateStts(pisSttsList, data.isHistory());

+ 1 - 0
src/main/java/com/its/pis/process/DbmsJobType.java

@@ -12,4 +12,5 @@ public class DbmsJobType {
     public static final int DATA_TYPE_STTUS_INFO      = 3;
     public static final int DATA_TYPE_OPR_INFO        = 4;
     public static final int DATA_TYPE_RL_TIME         = 5;
+    public static final int DATA_TYPE_RL_TIME_HS      = 6;
 }

+ 20 - 4
src/main/java/com/its/pis/service/PisInfrService.java

@@ -26,6 +26,7 @@ public class PisInfrService {
 
     private PisInfrMapper pisInfrMapper;
     private PrkPlceMapper prkPlceMapper;
+    private DbmsJobProcess dbmsJobProcess;
 
     private int sttsMin;
 
@@ -34,6 +35,7 @@ public class PisInfrService {
         log.info("PisInfrService.init: Start.");
         this.pisInfrMapper = (PisInfrMapper) AppUtils.getBean(PisInfrMapper.class);
         this.prkPlceMapper = (PrkPlceMapper) AppUtils.getBean(PrkPlceMapper.class);
+        this.dbmsJobProcess = (DbmsJobProcess) AppUtils.getBean(DbmsJobProcess.class);
         log.info("PisInfrService.init: ..End.");
     }
 
@@ -174,11 +176,17 @@ public class PisInfrService {
         boolean insHs = false;
         Calendar cal = Calendar.getInstance();
         int min = cal.get(Calendar.MINUTE);
+        log.error("updateCtlrStts: {}, {}", min, (min%5));
         if ((min % 5) == 0) {
             insHs = true;
             this.sttsMin = min;
         }
 
+        if (isRun && insHs) {
+            // 5분 마다 실시간 주차장 이력 정보를 저장하자.
+            insertPrkPlceSttsHs();
+        }
+
         // 주차정보시스템 상태정보 업데이트
         List<TbPisInfrStts> pisSttsList = Collections.synchronizedList(new ArrayList<>());
         // 주차장 상태정보 업데이트
@@ -200,7 +208,7 @@ public class PisInfrService {
                     // 주차정보시스템이 데이터를 수집하지 않으면 주차장 상태정보를 업데이트 할 필요 없다.
                     for (Map.Entry<String, TbPrkPlce> el : pis.getRltnPrkPlce().entrySet()) {
                         TbPrkPlce obj = el.getValue();
-                        pis.getStts().setUPDT_DT(UPDT_DT);
+                        obj.getStts().setUPDT_DT(UPDT_DT);
                         if (PisConstants.C2F.equals(pis.getPIS_TP())) {
                             // 자체 수집하는 경우(주차정보시스템 당 주차장은 1개가 존재한다.
                             obj.getStts().setCMNC_STTS_CD("CMS0");
@@ -217,6 +225,7 @@ public class PisInfrService {
                 // 주차정보시스템 통신이상
                 error++;
                 pis.getStts().initStts(false);
+                pis.getStts().setUPDT_DT(UPDT_DT);
 
                 // 주차정보시스템에 연결된 주차장의 상태정보를 업데이트 한다.
                 if ("Y".equals(pis.getPIS_CLCT_YN())) {
@@ -225,6 +234,7 @@ public class PisInfrService {
                         TbPrkPlce obj = el.getValue();
                         // 주차정보시스템의 통신상태가 비정상이기 때문에 주차장의 상태정보도 비정상이다.
                         obj.getStts().initStts(false);
+                        obj.getStts().setUPDT_DT(UPDT_DT);
                         prkPlceSttsList.add(obj.getStts());
                     }
                 }
@@ -234,18 +244,24 @@ public class PisInfrService {
         }
 
         // 주차정보시스템 상태정보 DB 업데이트
-        DbmsJobProcess dbmsJobProcess = (DbmsJobProcess) AppUtils.getBean(DbmsJobProcess.class);
         if (pisSttsList.size() > 0) {
-            dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PIS_STTS, insHs, pisSttsList, null));
+            this.dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PIS_STTS, insHs, pisSttsList, null));
         }
         // 주차장 상태정보 DB 업데이트
         if (prkPlceSttsList.size() > 0) {
-            dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PRK_PLCE_STTS, insHs, prkPlceSttsList, null));
+            this.dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PRK_PLCE_STTS, insHs, prkPlceSttsList, null));
         }
 
         log.info("PisInfrService.updateCtlrStts: PIS, total {}, normal {}, error {}", normal + error, normal, error);
     }
 
+    public void insertPrkPlceSttsHs() {
+        TbPrkPlceRtHs rtHs = TbPrkPlceRtHs.builder()
+                .crtnDt(SysUtils.getSysTimeHm())
+                .build();
+        this.dbmsJobProcess.addQ(new DbmsJobData(DbmsJobType.DATA_TYPE_RL_TIME_HS, true, rtHs, null));
+    }
+
     /**
      * C2C-S 로 설정되어 있는 주차정보 시스템을 찾아 해당 주차정보 시스템으로 연결하여 통신하는 C2C_Client 핸들러를 실행시킨다.
      */

+ 26 - 2
src/main/resources/mybatis/mapper/PrkPlceMapper.xml

@@ -11,11 +11,12 @@
                A.PIS_TYPE           AS PIS_TYPE
         FROM TB_PRK_PLCE A
         WHERE A.PIS_TYPE != 'N'
+          AND A.DEL_YN    = 'N'
         ORDER BY A.PRK_PLCE_NMBR
     ]]>
     </select>
 
-    <update id="updatePrltCtlrStts" parameterType="com.its.pis.entity.TbPrkPlceStts">
+    <update id="updatePrkPlceStts" parameterType="com.its.pis.entity.TbPrkPlceStts">
     <![CDATA[
 		MERGE INTO TB_PRK_PLCE_STTS L
 		USING (SELECT #{stts.PRK_PLCE_NMBR} AS PRK_PLCE_NMBR,
@@ -40,7 +41,7 @@
     ]]>
     </update>
 
-    <insert id="insertPrltCtlrSttsHs" parameterType="com.its.pis.entity.TbPrkPlceStts">
+    <insert id="insertPrkPlceSttsHs" parameterType="com.its.pis.entity.TbPrkPlceStts">
     <![CDATA[
           INSERT INTO TB_PRK_PLCE_STTS_HS (
 		          CRTN_DT,
@@ -96,4 +97,27 @@
         ]]>
     </update>
 
+    <insert id="insertPrkPlceRlTimeHs" parameterType="com.its.pis.entity.TbPrkPlceRtHs">
+    <![CDATA[
+        INSERT INTO TB_PRK_PLCE_RT_HS (
+            CRTN_DT,
+            PRK_PLCE_NMBR,
+            PARKING_CGS_STTUS,
+            PRK_CMPRT_CO,
+            REMNDR_PRK_CMPRT_CO
+        )
+        SELECT #{obj.crtnDt} AS CRTN_DT,
+               A.PRK_PLCE_NMBR,
+               C.PARKING_CGS_STTUS,
+               C.PRK_CMPRT_CO,
+               C.REMNDR_PRK_CMPRT_CO
+          FROM TB_PRK_PLCE A, TB_PRK_PLCE_STTS B, TB_PRK_PLCE_RT C
+         WHERE A.DEL_YN = 'N'
+           AND A.PRK_PLCE_NMBR = B.PRK_PLCE_NMBR
+           AND B.CMNC_STTS_CD = 'CMS0'
+           AND B.PRK_PLCE_NMBR = C.PRK_PLCE_NMBR
+        ]]>
+    </insert>
+
+
 </mapper>