shjung 1 жил өмнө
parent
commit
824eb9c56d

+ 3 - 18
app-install/conf/application.yml

@@ -1,26 +1,11 @@
 application:
   name: 안동시 VMS 통신 서버
-  listen-port: 3001
-  ftp-home-dir: C:\ADITS\vms-comm-server\ftp
-  ftp-server-ip: 192.168.10.11
-  ftp-server-port: 9871
-  ftp-passive-mode: 0
-  ftp-user-id: vmsuser
-  ftp-user-pswd: vmsuser#1234
-  load-db: true
-  check-new-form: false
-
-communication:
-  listen-port: 30200
-  dump-recv: true
-  dump-send: true
-  subscription-status: true
-  subscription-status-cycle: 30
-  esb-server: 192.168.20.99
-  esb-port: 9904
 
 server:
   port: 8904
+  history-min: 30
+  min-speed: 3
+  max-speed: 140
 
 spring:
   datasource:

+ 0 - 18
conf/application.yml

@@ -1,23 +1,5 @@
 application:
   name: 안동시 BIS 위치정보 수집 서버
-  listen-port: 3001
-  ftp-home-dir: C:\DRIVE_E\ANDONG_VMS_FTP
-  ftp-server-ip: 115.91.94.42
-  ftp-server-port: 8871
-  ftp-passive-mode: 0
-  ftp-user-id: vmsuser
-  ftp-user-pswd: vmsuser#1234
-  load-db: true
-  check-new-form: false
-
-communication:
-  listen-port: 30200
-  dump-recv: true
-  dump-send: true
-  subscription-status: true
-  subscription-status-cycle: 30
-  esb-server: 192.168.20.99
-  esb-port: 9904
 
 server:
   port: 7904

+ 1 - 64
src/main/java/com/its/bis/config/ApplicationConfig.java

@@ -1,6 +1,5 @@
 package com.its.bis.config;
 
-import com.its.app.utils.NettyUtils;
 import com.its.app.utils.SysUtils;
 import lombok.Getter;
 import lombok.Setter;
@@ -11,8 +10,6 @@ import org.springframework.context.annotation.Configuration;
 
 import javax.annotation.PostConstruct;
 import java.io.File;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 
 @Slf4j
 @Getter
@@ -22,11 +19,6 @@ import java.nio.file.Paths;
 @ConfigurationProperties(prefix = "application")
 public class ApplicationConfig {
 
-    public static String FTP_FORM = "FORM";
-    public static String FTP_VIDEO = "VIDEO";
-    public static String FTP_STATIC = "STATIC";
-    public static String FTP_IMAGE = "IMAGE";
-
     private String bootingDateTime;
     private boolean startSchedule;
 
@@ -39,7 +31,7 @@ public class ApplicationConfig {
     private String userPswd = "1234";
 
     // Center Communication Config
-    private boolean centerCommEnable = true;
+    private boolean centerCommEnable = false;
     private int listenPort = 30200;
     protected String bindingAddr = "0.0.0.0";
     protected int backlog = 0;
@@ -52,38 +44,7 @@ public class ApplicationConfig {
     protected int allIdleTimeSeconds = 0;
     protected int connectTimeoutSeconds = 0;
 
-    private String ftpHomeDir = "./ftp";
-    private String ftpServerIp = "";
-    private int ftpServerPort = 9871;
-    private int ftpPassiveMode = 0;
-    private String ftpUserId = "vmsuser";
-    private String ftpUserPswd = "vmsuser#1234";
-
-    private String ftpFormDir ;  // FTP Form Directory
-    private String ftpVideoDir;  // FTP Video Directory
-    private String ftpStaticDir; // FTP 정적폼 Directory
-    private String ftpImageDir;  // FTP Image Directory
-
     private boolean loadDb = true;
-    private boolean requestDeviceId = true;
-    private int maxDownloadForms = 10;
-    private int cngstContCount = 2;
-    private int maxCngstForms = 5;
-    private int bottomTrafficMax = 1;
-    private int bottomTrafficCycle = 0;
-    private boolean figureTrafficCenter = true;
-    private boolean textTrafficCenter = true;
-    private String figureTrafGrad1 = "원활";
-    private String figureTrafGrad2 = "지체";
-    private String figureTrafGrad3 = "정체";
-    private String textTrafGrad1 = "소통원활";
-    private String textTrafGrad2 = "지 체";
-    private String textTrafGrad3 = "정 체";
-    private boolean imageSeqSave = false;
-    private float fontSizeRatio = 1.35f;
-    private boolean checkNewForm = true;
-    private boolean downloadBitmapForm = false;
-    private boolean useParking = false;
 
     @PostConstruct
     private void init() {
@@ -112,30 +73,6 @@ public class ApplicationConfig {
 
         this.bootingDateTime = SysUtils.getSysTimeStr();
 
-        if (this.ftpHomeDir == null || this.ftpHomeDir.trim().length() == 0) {
-            Path filePath = Paths.get(System.getProperty("user.dir"), "ftp");
-            this.ftpHomeDir = filePath.toFile().getAbsolutePath();
-        }
-        this.ftpHomeDir = this.ftpHomeDir.trim();
-
-        this.ftpFormDir  = this.ftpHomeDir + File.separator + FTP_FORM + File.separator;  // FTP Form Directory
-        this.ftpVideoDir = this.ftpHomeDir + File.separator + FTP_VIDEO + File.separator;  // FTP Video Directory
-        this.ftpStaticDir = this.ftpHomeDir + File.separator + FTP_STATIC + File.separator; // FTP 정적폼 Directory
-        this.ftpImageDir = this.ftpHomeDir + File.separator + FTP_IMAGE + File.separator;  // FTP Image Directory
-
-        makeDirectory(this.ftpHomeDir, "ftp Home directory");
-        makeDirectory(this.ftpFormDir, "ftp Form directory");
-        makeDirectory(this.ftpVideoDir, "ftp Video directory");
-        makeDirectory(this.ftpStaticDir, "ftp Static Form directory");
-        makeDirectory(this.ftpImageDir, "ftp Image directory");
-
-        this.ftpServerIp = this.ftpServerIp.trim();
-        if (this.ftpServerIp.isEmpty()) {
-            this.ftpServerIp = NettyUtils.getLocalAddress();
-        }
-        if (this.fontSizeRatio == 0f) {
-            this.fontSizeRatio = 1.35f;
-        }
         log.info("{}", this);
     }
 

+ 0 - 85
src/main/java/com/its/bis/config/CommunicationConfig.java

@@ -1,85 +0,0 @@
-package com.its.bis.config;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import javax.annotation.PostConstruct;
-
-@Slf4j
-@Getter
-@Setter
-@ToString
-@Configuration
-@ConfigurationProperties(prefix = "communication")
-public class CommunicationConfig {
-
-    private boolean logging = false;
-
-    private String bindingAddr = "";
-    private int listenPort = 30200;
-    private int backLog = 0;
-    private int acceptThreads = 0;
-    private int workerThreads = 0;
-    private int readerIdleTimeSeconds = 0;
-    private int writerIdleTimeSeconds = 0;
-    private int allIdleTimeSeconds = 0;
-
-    private int rcvBuf = 0;
-    private int sndBuf = 0;
-    private int connectTimeoutSeconds = 0;
-    private int maxConnection = 0;
-    private int retrySeconds = 10;
-
-    private boolean dumpRecv = false;
-    private boolean dumpSend = false;
-
-    private boolean subscriptionStatus = true;
-    private int subscriptionStatusCycle = 30;
-
-    private String esbServer;
-    private int esbPort;
-
-    @PostConstruct
-    private void init() {
-        int DEFAULT_EVENT_THREADS = Runtime.getRuntime().availableProcessors();
-        if (this.bindingAddr.equals("")) {
-            this.bindingAddr = "0.0.0.0";
-        }
-
-        if (this.backLog == 0) {
-            this.backLog = 64;
-        }
-
-        if (this.acceptThreads == 0) {
-            this.acceptThreads = DEFAULT_EVENT_THREADS * 2;
-        }
-
-        if (this.workerThreads == 0) {
-            this.workerThreads = DEFAULT_EVENT_THREADS * 2;
-        }
-
-        if (this.rcvBuf == 0) {
-            this.rcvBuf = 32768;
-        }
-        if (this.sndBuf == 0) {
-            this.sndBuf = 32768;
-        }
-
-        if (this.readerIdleTimeSeconds == 0) {
-            this.readerIdleTimeSeconds = 80;
-        }
-        if (this.connectTimeoutSeconds == 0) {
-            this.connectTimeoutSeconds = 10;
-        }
-
-        if (this.maxConnection == 0) {
-            this.maxConnection = 1024;
-        }
-
-        log.info("{}", this);
-    }
-}

+ 1 - 1
src/main/java/com/its/bis/config/ThreadPoolInitializer.java

@@ -40,7 +40,7 @@ public class ThreadPoolInitializer extends AsyncConfigurerSupport {
             this.work = MAX_CORE;
         }
         if (this.dbms <= 0) {
-            this.dbms = MAX_CORE;
+            this.dbms = MAX_CORE*4;
         }
         if (this.ping <= 0) {
             this.ping = MAX_CORE;

+ 3 - 3
src/main/java/com/its/bis/dao/mapper/NodeLinkMapper.java

@@ -1,8 +1,6 @@
 package com.its.bis.dao.mapper;
 
-import com.its.bis.entity.MakeTrafParam;
-import com.its.bis.entity.TbLink;
-import com.its.bis.entity.TbNode;
+import com.its.bis.entity.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -15,5 +13,7 @@ public interface NodeLinkMapper {
     List<TbLink> selectLinkAll();
 
     int createBisLinkTraf(@Param("obj") MakeTrafParam obj);
+    int updateBisVehLoc(@Param("obj") TbBisVehLoc obj);
+    int insertBisLinkTrafClct(@Param("obj") TbBisLinkTrafClct obj);
 
 }

+ 3 - 3
src/main/java/com/its/bis/dao/mapper/batch/VmsCtlrDao.java → src/main/java/com/its/bis/dao/mapper/batch/NodeLinkDao.java

@@ -13,11 +13,11 @@ import java.util.List;
 
 @Slf4j
 @Repository
-public class VmsCtlrDao extends BatchDaoService {
+public class NodeLinkDao extends BatchDaoService {
 
-    public VmsCtlrDao(SqlSessionFactory sqlSessionFactory) {
+    public NodeLinkDao(SqlSessionFactory sqlSessionFactory) {
         super(sqlSessionFactory);
-        this.serviceName = "VmsCtlrDao";//this.getClass().getName();
+        this.serviceName = "NodeLinkDao";//this.getClass().getName();
     }
 
     public List<HashMap<String, Object>> getSttsList(List<TbVmsCtlrStts> req) {

+ 0 - 59
src/main/java/com/its/bis/dao/mapper/batch/VmsManageDao.java

@@ -1,59 +0,0 @@
-package com.its.bis.dao.mapper.batch;
-
-import com.its.bis.dao.mapper.BatchDaoService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.springframework.stereotype.Repository;
-
-@Slf4j
-@Repository
-public class VmsManageDao extends BatchDaoService {
-
-    public VmsManageDao(SqlSessionFactory sqlSessionFactory) {
-        super(sqlSessionFactory);
-        this.serviceName = "VmsManageDao";//this.getClass().getName();
-    }
-//
-//    public List<HashMap<String, Object>> getVmsDsplList(List<TbVmsDsplPrst> req) {
-//        List<HashMap<String, Object>> lists = new ArrayList<>();
-//        req.forEach(obj -> {
-//            HashMap<String, Object> param = new HashMap<>();
-//
-//            param.put("vmsCtlrNmbr",       obj.getVmsCtlrNmbr());
-//            param.put("phase",             obj.getPhase());
-//            param.put("dsplDt",            obj.getDsplDt());
-//            param.put("vmsSchType",        obj.getVmsSchType());
-//            param.put("vmsSchFormType",    obj.getVmsSchFormType());
-//            param.put("vmsFormId",         obj.getVmsFormId());
-//            param.put("dsplHh",            obj.getDsplHh());
-//            param.put("vmsDsplMsgData",    obj.getVmsDsplMsgData());
-//            param.put("vmsDsplMsgImag",    obj.getVmsDsplMsgImag());
-//            param.put("vmsDsplMsgTxt",     obj.getVmsDsplMsgTxt());
-//            param.put("vmsFormDsplDrctCd", obj.getVmsFormDsplDrctCd());
-//            param.put("vmsFormDsplMthdCd", obj.getVmsFormDsplMthdCd());
-//            param.put("dnldYn",            obj.getDnldYn());
-//
-//            lists.add(param);
-//        });
-//        return lists;
-//    }
-//
-//    public int updateVmsDsplPrst(List<TbVmsDsplPrst> req) {
-//        String mapperFunc = "batchUpdateVmsDsplPrst";
-//        log.info("{}.{}: START. {} EA.", this.serviceName, mapperFunc, req.size());
-//        Elapsed elapsed = new Elapsed();
-//        int total = updateBatch(mapperFunc, getVmsDsplList(req));
-//        log.info("{}.{}: ..END. {} EA. {} ms.", this.serviceName, mapperFunc, total, elapsed.milliSeconds());
-//        return total;
-//    }
-//
-//    public int insertVmsDsplPrst(List<TbVmsDsplPrst> req) {
-//        String mapperFunc = "batchInsertVmsDsplPrst";
-//        log.info("{}.{}: START. {} EA.", this.serviceName, mapperFunc, req.size());
-//        Elapsed elapsed = new Elapsed();
-//        int total = insertBatch("batchInsertVmsDsplPrst", getVmsDsplList(req));
-//        log.info("{}.{}: ..END. {} EA. {} ms.", this.serviceName, mapperFunc, total, elapsed.milliSeconds());
-//        return total;
-//    }
-
-}

+ 43 - 0
src/main/java/com/its/bis/entity/TbBisLinkTrafClct.java

@@ -0,0 +1,43 @@
+package com.its.bis.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * BIS 연계 링크 소통정보 수집 이력 Entity Class
+ */
+@ApiModel("BIS 연계 링크 소통정보 수집 이력")
+@Getter
+@Builder
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbBisLinkTrafClct implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("수집 일시")  // Y VARCHAR(14)
+    private String CLCT_DT;
+
+    @ApiModelProperty("링크ID")  // N NUMBER(10)
+    private Long LINK_ID;
+
+    @ApiModelProperty("OBE DEVICE ID")  // Y VARCHAR(64)
+    private String DEVICE_ID;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    private Integer SPED;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    private Integer TRVL_HH;
+
+    @ApiModelProperty("시작노드 도착 일시")  // Y VARCHAR(14)
+    private String ST_NODE_ARR_DT;
+    @ApiModelProperty("종료노드 도착 일시")  // Y VARCHAR(14)
+    private String ED_NODE_ARR_DT;
+
+}

+ 50 - 0
src/main/java/com/its/bis/entity/TbBisVehLoc.java

@@ -0,0 +1,50 @@
+package com.its.bis.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * BIS 차량 위치 정보 Entity Class
+ */
+@ApiModel("BIS 차량 위치 정보")
+@Getter
+@Builder
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbBisVehLoc implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("OBE DEVICE ID")  // Y VARCHAR(64)
+    private String DEVICE_ID;
+
+    @ApiModelProperty("수집 일시")  // Y VARCHAR(14)
+    private String CLCT_DT;
+
+    @ApiModelProperty("위치정보의 타입")  // Y VARCHAR(10)
+    private String LOC_TYPE;
+
+    @ApiModelProperty("속도(km/h)")  // Y NUMBER(5,2)
+    private Double SPEED;
+
+    @ApiModelProperty("높이(m)")  // Y NUMBER(5,2)
+    private Double HEGT;
+
+    @ApiModelProperty("방위각")  // Y NUMBER(5,2)
+    private Double ANGLE;
+
+    @ApiModelProperty("경도(126.89448518666667)")  // Y NUMBER(11,8)
+    private Double LNG;
+
+    @ApiModelProperty("위도(37.48543554333333)")  // Y NUMBER(10,8)
+    private Double LAT;
+
+    @ApiModelProperty("지나온 노드ID")  // Y NUMBER(10)
+    private Long PASS_NODE_ID;
+
+}

+ 14 - 7
src/main/java/com/its/bis/process/DbmsDataProcess.java

@@ -5,6 +5,8 @@ import com.its.bis.config.ThreadPoolInitializer;
 import com.its.bis.dao.mapper.NodeLinkMapper;
 import com.its.bis.dao.mapper.UnitSystMapper;
 import com.its.bis.entity.MakeTrafParam;
+import com.its.bis.entity.TbBisLinkTrafClct;
+import com.its.bis.entity.TbBisVehLoc;
 import com.its.bis.entity.TbUnitSystStts;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -26,16 +28,14 @@ public class DbmsDataProcess {
 
     private final UnitSystMapper unitSystMapper;
     private final NodeLinkMapper nodeLinkMapper;
-
-    private int maxCore = Runtime.getRuntime().availableProcessors();
+    private final ThreadPoolInitializer threadPoolInitializer;
 
     public void run() {
         log.info("DbmsDataProcess.run: Start.");
-        if (this.maxCore < 8) {
-            this.maxCore = 8;
-        }
+        int maxCore = this.threadPoolInitializer.getDbms();
+
         ThreadPoolInitializer poolInitializer = (ThreadPoolInitializer) AppUtils.getBean(ThreadPoolInitializer.class);
-        int executePool = Math.max(this.maxCore, poolInitializer.getWork());
+        int executePool = Math.max(maxCore, poolInitializer.getWork());
         for (int ii = 0; ii < executePool; ii++) {
             log.info("DbmsDataProcess.Task: {}", ii);
             this.taskExecutor.execute(() -> {
@@ -53,7 +53,6 @@ public class DbmsDataProcess {
                 }
             });
         }
-
         log.info("DbmsDataProcess.run: ..End.");
     }
 
@@ -84,6 +83,14 @@ public class DbmsDataProcess {
                     MakeTrafParam trafParam = (MakeTrafParam)data.getData();
                     this.nodeLinkMapper.createBisLinkTraf(trafParam);
                     break;
+                case DBMS_DATA_UPD_BIS_VEH_LOC:
+                    TbBisVehLoc bisVehLoc = (TbBisVehLoc)data.getData();
+                    this.nodeLinkMapper.updateBisVehLoc(bisVehLoc);
+                    break;
+                case DBMS_DATA_CRT_BIS_LINK_TRAF_CLCT:
+                    TbBisLinkTrafClct bisLinkTrafClct = (TbBisLinkTrafClct)data.getData();
+                    this.nodeLinkMapper.insertBisLinkTrafClct(bisLinkTrafClct);
+                    break;
                 default:
                     log.error("DbmsJobProcess.process: Unknown Request {}.", type);
                     break;

+ 2 - 1
src/main/java/com/its/bis/process/DbmsDataType.java

@@ -5,5 +5,6 @@ public enum DbmsDataType {
     DBMS_DATA_UNIT_SYST_STTS,
 
     DBMS_DATA_CRT_BIS_LINK_TRAF,
-
+    DBMS_DATA_UPD_BIS_VEH_LOC,
+    DBMS_DATA_CRT_BIS_LINK_TRAF_CLCT,
 }

+ 0 - 6
src/main/java/com/its/bis/service/UnitSystService.java

@@ -3,7 +3,6 @@ package com.its.bis.service;
 import com.its.app.AppUtils;
 import com.its.app.utils.SysUtils;
 import com.its.bis.config.ApplicationConfig;
-import com.its.bis.config.CommunicationConfig;
 import com.its.bis.dao.mapper.UnitSystMapper;
 import com.its.bis.entity.TbUnitSyst;
 import com.its.bis.entity.TbUnitSystStts;
@@ -33,7 +32,6 @@ import java.util.concurrent.ConcurrentHashMap;
 @Transactional(rollbackFor = {Exception.class})
 public class UnitSystService {
 
-    private final CommunicationConfig config;
     private final DbmsDataProcess dbmsDataProcess;
     private final UnitSystMapper mapper;
     private final ConcurrentHashMap<String, TbUnitSyst> dataMap = new ConcurrentHashMap<>();
@@ -100,10 +98,6 @@ public class UnitSystService {
                     this.dataMap.put(unit.getSystId(), unit);
                 }
 
-                if (("ESB01").equals(unit.getSystId())) {
-                    this.config.setEsbServer(unit.getSystIp1());
-                    this.config.setEsbPort(unit.getPrgmPort());
-                }
             }
         }
         catch (Exception e) {

+ 0 - 31
src/main/resources/application.yml

@@ -53,37 +53,6 @@ application:
   history: true
   user-id: admin
   user-pswd: 1234
-  listen-port: 3001
-  ftp-home-dir: C:\DRIVE_E\ANDONG_VMS_FTP
-  load-db: true
-  request-device-id: false
-  max-download-forms: 10
-  cngst-cont-count: 2
-  max-cngst-forms: 5
-  bottom-traffic-max: 3
-  bottom-traffic-cycle: 3
-  figure-traffic-center: true
-  text-traffic-center: true
-  figure-traf-grad1: 원활
-  figure-traf-grad2: 지체
-  figure-traf-grad3: 정체
-  text-traf-grad1: 소통원활
-  text-traf-grad2: 지 체
-  text-traf-grad3: 정 체
-  image-seq-save: false
-  font-size-ratio: 1.35
-  check-new-form: true
-  download-bitmap-form: false
-  use-parking: false
-
-communication:
-  listen-port: 30200
-  dump-recv: true
-  dump-send: true
-  subscription-status: true
-  subscription-status-cycle: 30
-  esb-server: 192.168.20.99
-  esb-port: 9904
 
 jasypt:
   encryptor:

+ 63 - 0
src/main/resources/mybatis/mapper/NodeLinkMapper.xml

@@ -72,4 +72,67 @@
     ]]>
     </update>
 
+    <update id="updateBisVehLoc" parameterType="com.its.bis.entity.TbBisVehLoc">
+    <![CDATA[
+        MERGE INTO TB_BIS_VEH_LOC L
+        USING (SELECT #{obj.DEVICE_ID}    AS DEVICE_ID,
+                      #{obj.CLCT_DT}      AS CLCT_DT,
+                      #{obj.LOC_TYPE}     AS LOC_TYPE,
+                      #{obj.SPEED}        AS SPEED,
+                      #{obj.HEGT}         AS HEGT,
+                      #{obj.ANGLE}        AS ANGLE,
+                      #{obj.LNG}          AS LNG,
+                      #{obj.LAT}          AS LAT,
+                      #{obj.PASS_NODE_ID} AS PASS_NODE_ID
+                 FROM DUAL) M
+        ON (L.DEVICE_ID = M.DEVICE_ID)
+        WHEN MATCHED THEN
+            UPDATE SET L.CLCT_DT      = M.CLCT_DT,
+                       L.LOC_TYPE     = M.LOC_TYPE,
+                       L.SPEED        = M.SPEED,
+                       L.HEGT         = M.HEGT,
+                       L.ANGLE        = M.ANGLE,
+                       L.LNG          = M.LNG,
+                       L.LAT          = M.LAT,
+                       L.PASS_NODE_ID = M.PASS_NODE_ID
+        WHEN NOT MATCHED THEN
+            INSERT (DEVICE_ID,
+                    CLCT_DT,
+                    LOC_TYPE,
+                    SPEED,
+                    HEGT,
+                    ANGLE,
+                    LNG,
+                    LAT,
+                    PASS_NODE_ID )
+            VALUES (M.DEVICE_ID,
+                    M.CLCT_DT,
+                    M.LOC_TYPE,
+                    M.SPEED,
+                    M.HEGT,
+                    M.ANGLE,
+                    M.LNG,
+                    M.LAT,
+                    M.PASS_NODE_ID )
+        ]]>
+    </update>
+
+    <insert id="insertBisLinkTrafClct" parameterType="com.its.bis.entity.TbBisLinkTrafClct">
+    <![CDATA[
+        INSERT INTO TB_BIS_LINK_TRAF_CLCT (
+            CLCT_DT,
+            LINK_ID,
+            DEVICE_ID,
+            SPED,
+            TRVL_HH )
+        VALUES (
+           #{obj.CLCT_DT},
+           #{obj.LINK_ID},
+           #{obj.DEVICE_ID},
+           #{obj.SPED},
+           #{obj.TRVL_HH}
+        )
+        ]]>
+    </insert>
+
 </mapper>