shjung 3 gadi atpakaļ
vecāks
revīzija
eec3fe094a

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

@@ -47,6 +47,11 @@ public final class SysUtils
 		Date dtLog = new Date();
 		return sdfDate.format(dtLog);
 	}
+	public static String getSysTimeStrMMDD() {
+		SimpleDateFormat sdfDate = new SimpleDateFormat("MM-dd HH:mm:ss");
+		Date dtLog = new Date();
+		return sdfDate.format(dtLog);
+	}
 
 	public static int gapTime(String startTm, String endTm, int calcType) {
 

+ 33 - 0
src/main/java/com/its/vds/UI/CtlrSttsDetlTableCellRenderer.java

@@ -0,0 +1,33 @@
+package com.its.vds.UI;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableCellRenderer;
+import java.awt.*;
+
+public class CtlrSttsDetlTableCellRenderer extends DefaultTableCellRenderer {
+
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+
+        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+        String commStts = table.getModel().getValueAt(row, 6).toString();
+        if (commStts.equals("Connect")) {
+            cell.setBackground(new Color(255, 255, 255, 255));
+            String door = table.getModel().getValueAt(row, 7).toString();
+            String fan = table.getModel().getValueAt(row, 8).toString();
+            String heater = table.getModel().getValueAt(row, 9).toString();
+            String video = table.getModel().getValueAt(row, 11).toString();
+        } else if (commStts.equals("Login")) {
+            cell.setBackground(new Color(182, 175, 97, 176));
+        } else {
+            cell.setBackground(new Color(182, 97, 97, 176));
+        }
+
+        if (column != 3 && column != 4) {
+            setHorizontalAlignment(SwingConstants.CENTER);
+        } else {
+            setHorizontalAlignment(SwingConstants.LEFT);
+        }
+
+        return cell;
+    }
+}

+ 57 - 0
src/main/java/com/its/vds/UI/CtlrSttsTableCellRenderer.java

@@ -0,0 +1,57 @@
+package com.its.vds.UI;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableCellRenderer;
+import java.awt.*;
+
+public class CtlrSttsTableCellRenderer extends DefaultTableCellRenderer {
+
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+
+        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+        String commStts = table.getModel().getValueAt(row, 6).toString();
+        if (commStts.equals("Connect")) {
+            cell.setBackground(new Color(255, 255, 255, 255));
+            if (column == 7) {
+                String door = table.getModel().getValueAt(row, 7).toString();
+                if (door.equals("열림")) {
+                    cell.setBackground(new Color(255, 0, 0, 176));
+                    cell.setForeground(new Color(255, 255, 255, 255));
+                }
+            }
+            if (column == 8) {
+                String fan = table.getModel().getValueAt(row, 8).toString();
+                if (fan.equals("가동")) {
+                    cell.setBackground(new Color(255, 213, 0, 250));
+                    cell.setForeground(new Color(0, 0, 0, 255));
+                }
+            }
+            if (column == 9) {
+                String heater = table.getModel().getValueAt(row, 9).toString();
+                if (heater.equals("가동")) {
+                    cell.setBackground(new Color(255, 213, 0, 250));
+                    cell.setForeground(new Color(0, 0, 0, 255));
+                }
+            }
+            if (column == 11) {
+                String video = table.getModel().getValueAt(row, 11).toString();
+                if (video.equals("이상")) {
+                    cell.setBackground(new Color(255, 213, 0, 250));
+                    cell.setForeground(new Color(0, 0, 0, 255));
+                }
+            }
+        } else if (commStts.equals("Login")) {
+            cell.setBackground(new Color(182, 175, 97, 176));
+        } else {
+            cell.setBackground(new Color(182, 97, 97, 176));
+        }
+
+        if (column != 3 && column != 4) {
+            setHorizontalAlignment(SwingConstants.CENTER);
+        } else {
+            setHorizontalAlignment(SwingConstants.LEFT);
+        }
+
+        return cell;
+    }
+}

+ 112 - 44
src/main/java/com/its/vds/UI/CtlrSttsTableModel.java

@@ -1,6 +1,7 @@
 package com.its.vds.UI;
 
 import com.its.vds.entity.TbVdsCtlr;
+import com.its.vds.entity.TbVdsCtlrStts;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.swing.table.AbstractTableModel;
@@ -12,9 +13,9 @@ import java.util.List;
 public class CtlrSttsTableModel extends AbstractTableModel {
     private static final long serialVersionUID = 1331132425472559704L;
 
-    private final List<TbVdsCtlr> ctlrList = Collections.synchronizedList(new ArrayList<TbVdsCtlr>());
-    private final String[] header = {
-            "S",
+    private List<TbVdsCtlr> ctlrList = Collections.synchronizedList(new ArrayList<TbVdsCtlr>());
+    private final String[] columnNames = {
+            "#",
             "번호",
             "시설물ID",
             "명칭",
@@ -24,9 +25,30 @@ public class CtlrSttsTableModel extends AbstractTableModel {
             "도어",
             "팬",
             "히터",
+            "온도",
             "Video",
+            "연결 시각",
+            "연결종료 시각"
     };
+    public static final String[] netStateStr = {
+            "Close", "Login", "Connect",
+    };
+
+    public CtlrSttsTableModel(List<TbVdsCtlr> ctlrList) {
+        this.ctlrList = ctlrList;
+
+        int indexCount = 1;
+        for (TbVdsCtlr obj : ctlrList) {
+            obj.setIndex(indexCount++);
+        }
+    }
 
+    @Override
+    public int getColumnCount() {
+        return columnNames.length;
+    }
+
+    @Override
     public int getRowCount() {
         int size = 0;
         synchronized (this.ctlrList) {
@@ -35,77 +57,118 @@ public class CtlrSttsTableModel extends AbstractTableModel {
         return size;
     }
 
-    public int getColumnCount() {
-        return header.length;
-    }
-
-    public String getColumnName(int column) {
-        if (column < header.length) {
-            return header[column];
+    @Override
+    public String getColumnName(int columnIndex) {
+        if (columnIndex < columnNames.length) {
+            return columnNames[columnIndex];
         }
-        return super.getColumnName(column);
+        return super.getColumnName(columnIndex);
     }
 
-    public void setValueAt(TbVdsCtlr cctv, int rowIndex, int columnIndex) {
-        synchronized (this.ctlrList) {
-            TbVdsCtlr info = this.ctlrList.get(rowIndex);
-            switch (columnIndex) {
-                case 4:
-                    //info.setM_stat(cctv.getM_stat());
-                    break;
-            }
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        if (ctlrList.isEmpty()) {
+            return Object.class;
         }
-        fireTableCellUpdated(rowIndex, columnIndex);
-        fireTableDataChanged();
+        return getValueAt(0, columnIndex).getClass();
     }
 
+    @Override
     public Object getValueAt(int rowIndex, int columnIndex) {
-        String ret = "";
+        Object returnValue = null;
         synchronized (this.ctlrList) {
             TbVdsCtlr info = this.ctlrList.get(rowIndex);
             if (info == null) {
                 return "";
             }
 
+            int netState = info.getNetState();
+            TbVdsCtlrStts stts = info.getStts();
+            String door = "-";
+            String fan = "-";
+            String heater = "-";
+            String temper = "-";
+            String video = "-";
+            if ("CMS0".equals(stts.getCMNC_STTS_CD())) {
+                door = "-?-";
+                fan = "-?-";
+                heater = "-?-";
+                temper = "-?-";
+                video = "-?-";
+                if (stts.getCBOX_DOOR_STTS_CD().equals("CDS0")) {
+                    door = "닫힘";
+                } else if (stts.getCBOX_DOOR_STTS_CD().equals("CDS1")) {
+                    door = "열림";
+                }
+                if (stts.getFAN_STTS_CD().equals("PAS0")) {
+                    fan = "가동";
+                } else if (stts.getFAN_STTS_CD().equals("PAS1")) {
+                    fan = "중지";
+                }
+                if (stts.getHETR_STTS_CD().equals("HTS0")) {
+                    heater = "가동";
+                } else if (stts.getHETR_STTS_CD().equals("HTS1")) {
+                    heater = "중지";
+                }
+                if (stts.getVIDEO_INPUT().equals("VDI0")) {
+                    video = "정상";
+                } else if (stts.getHETR_STTS_CD().equals("VDI1")) {
+                    video = "이상";
+                }
+                temper = String.valueOf(stts.getCBOX_TMPR());
+            }
             switch (columnIndex) {
                 case 0:
-                    ret = "";
+                    returnValue = info.getIndex();
                     break;
                 case 1:
-                    ret = info.getVDS_CTLR_NMBR();
+                    returnValue = info.getVDS_CTLR_NMBR();
                     break;
                 case 2:
-                    ret = info.getVDS_CTLR_ID();
+                    returnValue = info.getVDS_CTLR_ID();
                     break;
                 case 3:
-                    ret = info.getVDS_NM();
+                    returnValue = info.getVDS_NM();
                     break;
                 case 4:
-                    ret = info.getVDS_CTLR_IP();
+                    returnValue = info.getVDS_CTLR_IP();
                     break;
                 case 5:
-                    ret = String.valueOf(info.getVDS_CTLR_PORT());
+                    returnValue = String.valueOf(info.getVDS_CTLR_PORT());
                     break;
                 case 6:
-                    ret = "연결";
+                    returnValue = netStateStr[netState];
+                    break;
+                case  7: returnValue = door; break;
+                case  8: returnValue = fan; break;
+                case  9: returnValue = heater; break;
+                case 10: returnValue = temper; break;
+                case 11: returnValue = video; break;
+                case 12:
+                    returnValue = info.getConnectTm();
+                    break;
+                case 13:
+                    returnValue = info.getDisConnectTm();
                     break;
-                default:
-                    String door = "-";
-                    String fan = "-";
-                    String heater = "-";
-                    String video = "-";
-                    if ("CMS0".equals(info.getStts().getCMNC_STTS_CD())) {
-
-                    }
-                    switch(columnIndex) {
-                        case  7: ret = door; break;
-                        case  8: ret = fan; break;
-                        case  9: ret = heater; break;
-                        case 10: ret = video; break;
-                    }
             }
         }
-        return ret;
+        return returnValue;
+    }
+
+    @Override
+    public void setValueAt(Object value, int rowIndex, int columnIndex) {
+        synchronized (this.ctlrList) {
+            TbVdsCtlr obj = ctlrList.get(rowIndex);
+            if (columnIndex == 0) {
+                obj.setIndex((int) value);
+            }
+        }
+    }
+    public void setValueAt(TbVdsCtlr obj, int rowIdx, int colIdx) {
+        synchronized (this.ctlrList) {
+        }
+        fireTableCellUpdated(rowIdx, colIdx);
+        fireTableDataChanged();
     }
 
     public void Add(TbVdsCtlr info) {
@@ -116,4 +179,9 @@ public class CtlrSttsTableModel extends AbstractTableModel {
         }
         fireTableRowsInserted(index, index);
     }
+
+    public void setValue(TbVdsCtlr obj, int viewRow, int modelRow) {
+        fireTableDataChanged();
+    }
+
 }

+ 2 - 2
src/main/java/com/its/vds/UI/MainUI.form

@@ -3,7 +3,7 @@
   <grid id="27dc6" binding="rootPanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
     <margin top="0" left="0" bottom="0" right="0"/>
     <constraints>
-      <xy x="20" y="20" width="841" height="620"/>
+      <xy x="20" y="20" width="979" height="620"/>
     </constraints>
     <properties/>
     <border type="none"/>
@@ -91,7 +91,7 @@
             <properties/>
             <border type="none"/>
             <children>
-              <component id="a0dd1" class="javax.swing.JTable" binding="tblCtlr">
+              <component id="a0dd1" class="javax.swing.JTable" binding="tblCtlrList">
                 <constraints/>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>

+ 83 - 43
src/main/java/com/its/vds/UI/MainUI.java

@@ -9,10 +9,15 @@ import com.its.vds.global.AppRepository;
 import com.its.vds.service.VdsCtlrService;
 import com.sun.management.OperatingSystemMXBean;
 import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 
+import javax.swing.Timer;
 import javax.swing.*;
 import javax.swing.plaf.FontUIResource;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
 import javax.swing.text.StyleContext;
 import java.awt.*;
 import java.awt.datatransfer.Clipboard;
@@ -21,11 +26,10 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
-import java.util.Locale;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
+import java.util.List;
+import java.util.*;
 
+@Slf4j
 @Getter
 public class MainUI {
     private static MainUI _instance = null;
@@ -34,7 +38,8 @@ public class MainUI {
     private Timer timer;
     private Long tick = Long.valueOf(0);
 
-    private CtlrSttsTableModel ctlrSttsTableModel = new CtlrSttsTableModel();
+    private CtlrSttsTableModel ctlrSttsTableModel;
+    private TableCellRenderer cellRenderer = new CtlrSttsTableCellRenderer();
 
     private JPanel rootPanel;
     private JPanel pnlCtlr;
@@ -46,7 +51,7 @@ public class MainUI {
     private JCheckBox chkLogPause;
     private JLabel lblSystime;
     private JPanel pnlStatusBar;
-    private JTable tblCtlr;
+    private JTable tblCtlrList;
     private JTextArea taLog;
     private JButton btnLogCopy;
     private JLabel lblTotal;
@@ -60,6 +65,7 @@ public class MainUI {
 
     public void displaySystime() {
         lblSystime.setText(" " + SysUtils.getSysTimeStr() + "  ");
+        updateCommSttsTotal();
     }
 
     public void displayResource() {
@@ -94,7 +100,7 @@ public class MainUI {
         btnLogDirOpen.setFocusable(false);
         btnLogCopy.setFocusable(false);
 
-        initTblListHeader();
+        //initTblListUI();
 
         btnLogPause.addActionListener(new ActionListener() {
             @Override
@@ -132,30 +138,53 @@ public class MainUI {
     /**
      * 목록 헤더 생성
      */
-    private void initTblListHeader() {
+    private void initTblListUI(List<TbVdsCtlr> ctlrList) {
 
-        tblCtlr.setModel(ctlrSttsTableModel);
-        tblCtlr.setBackground(Color.WHITE);
-        tblCtlr.setSelectionMode(1);
-        //tblCtlr.addMouseListener(new ListMouseListener(null));
-        tblCtlr.getColumnModel().getColumn(0).setPreferredWidth(50);
-        tblCtlr.getColumnModel().getColumn(1).setPreferredWidth(100);
-        tblCtlr.getColumnModel().getColumn(2).setPreferredWidth(100);
-        tblCtlr.getColumnModel().getColumn(3).setPreferredWidth(210);
-        tblCtlr.getColumnModel().getColumn(4).setPreferredWidth(50);
-//
-//        this.defaultTableCellRenderer = new DefaultTableCellRenderer();
-//        this.defaultTableCellRenderer.setHorizontalAlignment(0);
-//        this.defaultTableCellRenderer.setBackground(new Color(255, 220, 220));
-//        this.tableColumnModel = tblCtlr.getColumnModel();
-//        for (int i = 0; i < this.tableColumnModel.getColumnCount(); i++)
-//            this.tableColumnModel.getColumn(i).setCellRenderer(this.defaultTableCellRenderer);
-//        this.tableCellRenderer = new CommTableCellRenderer();
-//        try {
-//            tblCtlr.setDefaultRenderer(Class.forName("java.lang.String"), this.tableCellRenderer);
-//        } catch (ClassNotFoundException ex) {
-//            System.exit(0);
-//        }
+        ctlrSttsTableModel = new CtlrSttsTableModel(ctlrList);
+        tblCtlrList.setModel(ctlrSttsTableModel);
+        tblCtlrList.setBackground(Color.WHITE);
+        tblCtlrList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        //tblCtlrList.setAutoCreateRowSorter(true); // sorting
+
+        //tblCtlrList.addMouseListener(new ListMouseListener(null));
+
+        TableColumnModel getColumnModel = tblCtlrList.getColumnModel();
+        getColumnModel.getColumn(0).setPreferredWidth(30);  //  "S",
+        getColumnModel.getColumn(1).setPreferredWidth(75);  //  "번호",
+        getColumnModel.getColumn(2).setPreferredWidth(75);  //  "시설물ID",
+        getColumnModel.getColumn(3).setPreferredWidth(260); //  "명칭",
+        getColumnModel.getColumn(4).setPreferredWidth(120); //  "IP",
+        getColumnModel.getColumn(5).setPreferredWidth(55);  //  "PORT",
+        getColumnModel.getColumn(6).setPreferredWidth(70);  //  "연결상태",
+        getColumnModel.getColumn(7).setPreferredWidth(50);  //  "도어",
+        getColumnModel.getColumn(8).setPreferredWidth(50);  //  "팬",
+        getColumnModel.getColumn(9).setPreferredWidth(50);  //  "히터",
+        getColumnModel.getColumn(10).setPreferredWidth(50);  //  "온도",
+        getColumnModel.getColumn(11).setPreferredWidth(50); //  "Video",
+        getColumnModel.getColumn(12).setPreferredWidth(120);
+        getColumnModel.getColumn(13).setPreferredWidth(120);
+
+        DefaultTableCellRenderer centerAlign = new DefaultTableCellRenderer();
+        centerAlign.setHorizontalAlignment(JLabel.CENTER);
+        for (int ii = 0; ii < getColumnModel.getColumnCount(); ii++) {
+            getColumnModel.getColumn(ii).setCellRenderer(cellRenderer);
+        }
+    }
+
+    public void updateCommSttsTotal() {
+        int ctlrTotal = 0;
+        int ctlrError = 0;
+        for (Map.Entry<String, TbVdsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+            TbVdsCtlr obj = e.getValue();
+            if (StringUtils.equals("N", obj.getDEL_YN()) && StringUtils.equals("Y", obj.getVALD_YN())) {
+                ctlrTotal++;
+                if (!"CMS0".equals(obj.getStts().getCMNC_STTS_CD())) {
+                    ctlrError++;
+                }
+            }
+        }
+        lblTotal.setText(" " + ctlrTotal + " ");
+        lblError.setText(" " + ctlrError + " ");
     }
 
     public void LoadControllerInfo(VdsCtlrService vdsCtlrService) {
@@ -168,18 +197,29 @@ public class MainUI {
                 ctlrMap.put(Integer.valueOf(obj.getVDS_CTLR_NMBR()), obj);
             }
         }
+        List<TbVdsCtlr> ctlrList = new ArrayList<TbVdsCtlr>(ctlrMap.values());
+        initTblListUI(ctlrList);
+//        for (Map.Entry<Integer, TbVdsCtlr> e : ctlrMap.entrySet()) {
+//            TbVdsCtlr obj = e.getValue();
+//            ctlrSttsTableModel.Add(obj);
+//        }
+        updateCommSttsTotal();
+    }
 
-        int ctlrTotal = ctlrMap.size();
-        int ctlrError = 0;
-        for (Map.Entry<Integer, TbVdsCtlr> e : ctlrMap.entrySet()) {
-            TbVdsCtlr obj = e.getValue();
-            ctlrSttsTableModel.Add(obj);
-            if (!"CMS0".equals(obj.getStts().getCMNC_STTS_CD())) {
-                ctlrError++;
+    public void updateCtlrStts(TbVdsCtlr obj) {
+
+        //CtlrSttsTableModel ctlrSttsTableModel = (CtlrSttsTableModel)tblCtlrList.getModel();
+        for (int ii = 0; ii < ctlrSttsTableModel.getRowCount(); ii++) {
+            if (obj.getVDS_CTLR_ID().equals(ctlrSttsTableModel.getValueAt(ii, 2).toString())) {
+                int modelRow = tblCtlrList.convertRowIndexToModel(ii);
+//                //int viewColumn = tblCtlrList.getSelectedColumn();
+//                int modelColumn = tblCtlrList.convertColumnIndexToModel(4);
+//                Object cell = tblCtlrList.getValueAt(modelRow, modelColumn);
+//                log.error("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: {}", cell);
+                ctlrSttsTableModel.setValue(obj, ii, modelRow);
+                break;
             }
         }
-        lblTotal.setText(" " + ctlrTotal + " ");
-        lblError.setText(" " + ctlrError + " ");
     }
 
     {
@@ -242,10 +282,10 @@ public class MainUI {
         pnlCtlrTitle.add(lblError, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final JScrollPane scrollPane1 = new JScrollPane();
         pnlCtlr.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
-        tblCtlr = new JTable();
-        Font tblCtlrFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tblCtlr.getFont());
-        if (tblCtlrFont != null) tblCtlr.setFont(tblCtlrFont);
-        scrollPane1.setViewportView(tblCtlr);
+        tblCtlrList = new JTable();
+        Font tblCtlrListFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tblCtlrList.getFont());
+        if (tblCtlrListFont != null) tblCtlrList.setFont(tblCtlrListFont);
+        scrollPane1.setViewportView(tblCtlrList);
         pnlLog = new JPanel();
         pnlLog.setLayout(new GridLayoutManager(2, 1, new Insets(0, 4, 0, 4), -1, -1));
         rootPanel.add(pnlLog, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, new Dimension(-1, 250), new Dimension(-1, 250), new Dimension(-1, 250), 0, false));

+ 11 - 44
src/main/java/com/its/vds/VdsCommServerApplication.java

@@ -1,6 +1,7 @@
 package com.its.vds;
 
 import com.its.app.AppUtils;
+import com.its.app.utils.SysUtils;
 import com.its.vds.UI.JTextAreaOutputStream;
 import com.its.vds.UI.MainUI;
 import com.its.vds.config.ProcessConfig;
@@ -73,7 +74,8 @@ public class VdsCommServerApplication implements CommandLineRunner, ApplicationL
     public void run(String... args) throws Exception {
         SwingUtilities.invokeLater(() -> {
             String pathOfImage = "C:\\DEV\\ITS\\01.WINDOWS\\22.01.YONGIN\\JAVA\\vds-comm-server\\src\\main\\resources\\static\\image\\application.png";
-            JFrame frame = new JFrame("VDS 통신 서버");
+            String sysTime = SysUtils.getSysTimeStr();
+            JFrame frame = new JFrame("VDS 통신 서버 - [" + sysTime + "]");
             MainUI UI = new MainUI();
             frame.setIconImage(Toolkit.getDefaultToolkit().getImage(pathOfImage));
             frame.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
@@ -83,6 +85,7 @@ public class VdsCommServerApplication implements CommandLineRunner, ApplicationL
                 @Override
                 public void windowClosing(WindowEvent e) {
                     if (JOptionPane.showConfirmDialog(UI.getRootPanel(), "시스템을 종료 하시겠습니까?", "시스템 종료", 0) == 0){
+                        //terminateApplication();
                         System.exit(0);
                     } else {
                         frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
@@ -90,7 +93,7 @@ public class VdsCommServerApplication implements CommandLineRunner, ApplicationL
                 }
             });
             frame.pack();
-            frame.setBounds(100, 100, 860, 740);
+            frame.setBounds(100, 100, 1000, 800);
             frame.setLocationRelativeTo(null);
             frame.setVisible(true);
 
@@ -98,13 +101,10 @@ public class VdsCommServerApplication implements CommandLineRunner, ApplicationL
             logArea.setText(null);
             JTextAreaOutputStream out = new JTextAreaOutputStream (logArea);
             System.setOut (new PrintStream(out));
-
         });
 
         ProcessConfig processConfig = (ProcessConfig) AppUtils.getBean(ProcessConfig.class);
 
-        //CreateUI();
-
         log.info("");
         log.info("");
         log.info("************************************************************************************");
@@ -157,45 +157,7 @@ public class VdsCommServerApplication implements CommandLineRunner, ApplicationL
         log.error("val1: {}, val2: {}, nval1: {}, nval2: {}, sval1: {}, sval2: {}", val1, val2, nval1, nval2, sval1, sval2);*/
     }
 
-    private void CreateUI() {
-        String pathOfImage = "C:\\DEV\\ITS\\01.WINDOWS\\22.01.YONGIN\\JAVA\\WindowConsole\\src\\application.png";
-//        MainUI UI = new MainUI();//.getInstance();
-//        //JFrame.setDefaultLookAndFeelDecorated(true);
-//        JFrame frame = new JFrame("VDS 통신 서버");
-//        frame.setIconImage(Toolkit.getDefaultToolkit().getImage(pathOfImage));
-//        frame.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
-//        frame.setContentPane(UI.getRootPanel());
-//        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //EXIT_ON_CLOSE, DISPOSE_ON_CLOSE
-//        frame.addWindowListener(new WindowAdapter() {
-//            @Override
-//            public void windowClosing(WindowEvent e) {
-//                if (JOptionPane.showConfirmDialog(UI.getRootPanel(), "시스템을 종료 하시겠습니까?", "시스템 종료", 0) == 0){
-//                    System.exit(0);
-//                } else {
-//                    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
-//                }
-//            }
-//        });
-//
-//        frame.pack();
-//        frame.setBounds(100, 100, 860, 740);
-//        frame.setLocationRelativeTo(null);
-//        //frame.setResizable(false);
-//        frame.setVisible(true);
-//        //UI.initList();
-//
-//        JTextArea logArea = UI.getTaLog();
-//        JTextAreaOutputStream out = new JTextAreaOutputStream (logArea);
-//        System.setOut (new PrintStream(out));
-    }
-
-    /*@PostConstruct
-    private void init() {
-        System.err.println("PostConstruct annotation으로 빈이 완전히 생성된 후에 한 번 수행될 메서드에 붙입니다.");
-    }*/
-    @Override
-    public void onApplicationEvent(ContextClosedEvent event) {
-        log.error("Application Terminated: {}", event.getTimestamp());
+    public void terminateApplication() {
         UnitSystService unitSystService = (UnitSystService) AppUtils.getBean(UnitSystService.class);
         unitSystService.updateUnitSystStts(false);
         VdsCtlrService ctlrService = (VdsCtlrService) AppUtils.getBean(VdsCtlrService.class);
@@ -215,6 +177,11 @@ public class VdsCommServerApplication implements CommandLineRunner, ApplicationL
 //        udpServerCenterComm.getNioEventLoopGroup().shutdownGracefully();
     }
     @Override
+    public void onApplicationEvent(ContextClosedEvent event) {
+        log.error("Application Terminated: {}", event.getTimestamp());
+        terminateApplication();
+    }
+    @Override
     public void afterPropertiesSet() throws Exception {
         //System.err.println("InitializingBean 인터페이스 구현 메서드입니다. 'Bean'이 생성될 때 마다 호출되는 메서드 입니다.");
     }

+ 9 - 3
src/main/java/com/its/vds/entity/TbVdsCtlr.java

@@ -21,6 +21,7 @@ import java.util.*;
 @ToString
 public class TbVdsCtlr {
 
+	private int    index;
 	private String VDS_CTLR_NMBR;
 	private String VDS_CTLR_ID;
 	private String VDS_NM;
@@ -68,6 +69,9 @@ public class TbVdsCtlr {
 	private int imageSize;
 	private ByteBuffer imageBuffer;
 
+	public Integer getId() {
+		return Integer.parseInt(this.VDS_CTLR_NMBR);
+	}
 	public void initDtctClct() {
 		for (Map.Entry<String, TbVdsDtct> e : this.vdsDtctMap.entrySet()) {
 			TbVdsDtct tmp = e.getValue();
@@ -159,12 +163,12 @@ public class TbVdsCtlr {
 	}
 
 	public void setConnectTm() {
-		this.connectTm = SysUtils.getSysTimeStr();
+		this.connectTm = SysUtils.getSysTimeStrMMDD();
 		this.connectCount++;
 	}
 
 	public void setDisConnectTm() {
-		this.disConnectTm = SysUtils.getSysTimeStr();
+		this.disConnectTm = SysUtils.getSysTimeStrMMDD();
 	}
 
 	void initNet() {
@@ -193,10 +197,12 @@ public class TbVdsCtlr {
 	}
 
 	public synchronized void channelClosed() {
+		if (this.netState != NET.CLOSED) {
+			setDisConnectTm();
+		}
 		this.netState = NET.CLOSED;
 		this.channel = null;
 		getStts().initStts(false);
-		setDisConnectTm();
 	}
 
 	/**

+ 1 - 1
src/main/java/com/its/vds/process/DbmsJobProcess.java

@@ -56,7 +56,7 @@ public class DbmsJobProcess extends AbstractDbmsJobProcess {
                     break;
                 case DbmsJobType.DATA_TYPE_DTCT_CLCT:
                     List<voVdsDtctClct> dtctClctList = (List<voVdsDtctClct>)data.getData();
-                    this.vdsDtctDao.updateClct(dtctClctList, data.isHistory());
+                    //this.vdsDtctDao.updateClct(dtctClctList, data.isHistory());
                     this.vdsDtctDao.insertClct(dtctClctList);
 //                    for (voVdsDtctClct vo : dtctClctList) {
 //                        this.vdsDtctMapper.updateVdsDtctClctPnst(vo);   // 수집정보 업데이트

+ 1 - 1
src/main/java/com/its/vds/service/UnitSystService.java

@@ -106,7 +106,7 @@ public class UnitSystService {
             this.sttsMin = min;
         }
 
-        String SYST_STTS_CD = isRun ? "SPS1" : "SPC3";
+        String SYST_STTS_CD = isRun ? "SPS1" : "SPS3";
         this.unitSystStts.setSYST_ID(this.processId);
         this.unitSystStts.setUPDT_DT(SysUtils.getSysTime());
         this.unitSystStts.setSYST_STTS_CD(SYST_STTS_CD);

+ 9 - 0
src/main/java/com/its/vds/xnettcp/vds/VdsTcpClient.java

@@ -1,6 +1,7 @@
 package com.its.vds.xnettcp.vds;
 
 import com.its.app.AppUtils;
+import com.its.vds.UI.MainUI;
 import com.its.vds.config.ControllerCommConfig;
 import com.its.vds.entity.TbVdsCtlr;
 import com.its.vds.xnettcp.vds.codec.VdsTcpClientDecoder;
@@ -112,6 +113,10 @@ public class VdsTcpClient implements Callable<Object> {
         ByteBuffer sendBuff;
         sendBuff = obj.getReqTemperature().getByteBuffer();
         obj.sendData(sendBuff, 0, "vds_Temperature");
+        MainUI mainUI = MainUI.getInstance();
+        if (mainUI != null) {
+            mainUI.updateCtlrStts(obj);
+        }
     }
 
     /**
@@ -126,6 +131,10 @@ public class VdsTcpClient implements Callable<Object> {
             // 클라이언트 연결 종료정보를 운영단말로 전송한다.
             CenterCommResponseService centerCommResponseService = (CenterCommResponseService) AppUtils.getBean(CenterCommResponseService.class);
             centerCommResponseService.notifyStatus(obj, false);
+            MainUI mainUI = MainUI.getInstance();
+            if (mainUI != null) {
+                mainUI.updateCtlrStts(obj);
+            }
         }
         obj.channelClosed();
 

+ 7 - 0
src/main/java/com/its/vds/xnettcp/vds/process/Job_Data.java

@@ -2,6 +2,7 @@ package com.its.vds.xnettcp.vds.process;
 
 import com.its.app.AppUtils;
 import com.its.app.utils.SysUtils;
+import com.its.vds.UI.MainUI;
 import com.its.vds.entity.TbVdsCtlr;
 import com.its.vds.entity.TbVdsDtct;
 import com.its.vds.entity.voVdsDtctClct;
@@ -121,6 +122,7 @@ public class Job_Data implements JobProtocol {
 				dtct.getClct().setSPCE_AVRG_SPED(spc_spd);
 			}
 		}
+
 		//수집한 교통정보를 데이터베이스에 저장
 		List<voVdsDtctClct> dtctClctList = Collections.synchronizedList(new ArrayList<>());
 		for (Map.Entry<String, TbVdsDtct> e : obj.getVdsDtctMap().entrySet()) {
@@ -133,6 +135,11 @@ public class Job_Data implements JobProtocol {
 			dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_DTCT_CLCT, false, dtctClctList));
 		}
 
+		MainUI mainUI = MainUI.getInstance();
+		if (mainUI != null) {
+			mainUI.updateCtlrStts(obj);
+		}
+
 		return 1;
 	}
 

+ 5 - 0
src/main/java/com/its/vds/xnettcp/vds/process/Job_Temperature.java

@@ -2,6 +2,7 @@ package com.its.vds.xnettcp.vds.process;
 
 import com.its.app.AppUtils;
 import com.its.app.utils.SysUtils;
+import com.its.vds.UI.MainUI;
 import com.its.vds.domain.NET;
 import com.its.vds.entity.TbVdsCtlr;
 import com.its.vds.xnettcp.vds.protocol.VdsResFramePacket;
@@ -49,6 +50,10 @@ public class Job_Temperature implements JobProtocol {
 			// 클라이언트 연결 정보를 운영단말로 전송한다.
 			CenterCommResponseService centerCommResponseService = (CenterCommResponseService) AppUtils.getBean(CenterCommResponseService.class);
 			centerCommResponseService.notifyStatus(obj, true);
+			MainUI mainUI = MainUI.getInstance();
+			if (mainUI != null) {
+				mainUI.updateCtlrStts(obj);
+			}
 		}
 
 		return 1;

+ 4 - 1
start.bat

@@ -1 +1,4 @@
-java -jar vds-comm-server-0.0.1-SNAPSHOT.war --spring.config.location=conf//vds-comm-server.properties
+echo off
+chcp 65001
+javaw -jar -Dspring.profiles.active=dev vds-comm-server-0.0.1.jar
+exit

BIN
vds-comm-server-0.0.1.jar


BIN
vds-comm-server.exe


+ 33 - 0
vds-comm-server.txt.jsmooth

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<jsmoothproject>
+<JVMSearchPath>registry</JVMSearchPath>
+<JVMSearchPath>javahome</JVMSearchPath>
+<JVMSearchPath>jrepath</JVMSearchPath>
+<JVMSearchPath>jdkpath</JVMSearchPath>
+<JVMSearchPath>exepath</JVMSearchPath>
+<JVMSearchPath>jview</JVMSearchPath>
+<arguments></arguments>
+<currentDirectory>${EXECUTABLEPATH}</currentDirectory>
+<embeddedJar>true</embeddedJar>
+<executableName>vds-comm-server.exe</executableName>
+<iconLocation>src\main\resources\static\image\application.png</iconLocation>
+<initialMemoryHeap>-1</initialMemoryHeap>
+<jarLocation>vds-comm-server-0.0.1.jar</jarLocation>
+<mainClassName>org.springframework.boot.loader.JarLauncher</mainClassName>
+<maximumMemoryHeap>-1</maximumMemoryHeap>
+<maximumVersion></maximumVersion>
+<minimumVersion>1.8.0</minimumVersion>
+<skeletonName>Console Wrapper</skeletonName>
+<skeletonProperties>
+<key>Message</key>
+<value>Java has not been found on your computer. Do you want to download it?</value>
+</skeletonProperties>
+<skeletonProperties>
+<key>PressKey</key>
+<value>0</value>
+</skeletonProperties>
+<skeletonProperties>
+<key>Debug</key>
+<value>0</value>
+</skeletonProperties>
+</jsmoothproject>