From 77d58298d00c11ade8862ca8acb0fdef5a45322e Mon Sep 17 00:00:00 2001
From: jinlin <jinlin>
Date: 星期五, 21 三月 2025 17:39:38 +0800
Subject: [PATCH] 修改

---
 src/main/java/com/example/client/service/Level1AddOrUpdate.java                        |    3 
 src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java                   |    2 
 src/main/java/com/example/client/service/Level2ManageService.java                      |    4 
 src/main/java/com/example/client/service/ImportDismantTrackService.java                |   13 
 src/main/java/com/example/client/utils/Compute.java                                    |    4 
 src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java                  |   18 +
 src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java  |    6 
 src/main/java/com/example/client/service/HandoverAddOrUpdate.java                      |    6 
 src/main/java/com/example/client/service/UserManageService.java                        |    5 
 src/main/java/com/example/server/utils/DownLoadTmpFile.java                            |    1 
 src/main/java/com/example/client/service/HandoverService.java                          |    8 
 src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml                     |   54 ++++
 src/main/java/com/example/client/service/Level2AddOrUpdate.java                        |    3 
 src/main/java/com/example/client/service/ExportDismantTrackService.java                |    8 
 src/main/java/com/example/client/service/DismantTrackService.java                      |    6 
 src/main/java/com/example/client/service/SubunitService.java                           |    5 
 src/main/java/com/example/client/service/TrackRecordManageService.java                 |   25 +
 src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java         |    3 
 src/main/java/com/example/client/service/ImportLevel2Service.java                      |    1 
 src/main/java/com/example/client/service/ImportLevel3Service.java                      |   13 
 src/main/java/com/example/server/progressTrack/service/DjJdgzShipService.java          |   10 
 src/main/java/com/example/client/service/Level3ManageService.java                      |   44 ++-
 src/main/java/com/example/client/service/StatisProductService.java                     |   60 +++++
 src/main/java/com/example/client/service/SubunitAddOrUpdate.java                       |    3 
 src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java      |    8 
 src/main/java/com/example/client/service/ShipManageService.java                        |  149 +++++++++++++
 src/main/java/com/example/server/progressTrack/Dto/StatistProductDto.java              |   17 +
 src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java |    5 
 src/main/resources/db/csiczb1.db                                                       |    0 
 src/main/java/com/example/client/service/UserAddOrUpdate.java                          |    2 
 src/main/java/com/example/client/service/Level1ViewService.java                        |   17 +
 src/main/java/com/example/client/service/Level1ManageService.java                      |   59 +++--
 src/main/java/com/example/client/service/ImportTrackRecordService.java                 |   17 +
 src/main/java/com/example/client/service/Level2ViewService.java                        |    5 
 src/main/java/com/example/client/service/Level3View2Service.java                       |   23 +
 src/main/java/com/example/server/DataSync/service/DataSyncService.java                 |    1 
 src/main/java/com/example/client/service/MenuService.java                              |   16 +
 src/main/resources/mapper/user/UserDao.xml                                             |    6 
 src/main/java/com/example/client/service/Level3AddOrUpdate.java                        |    3 
 src/main/java/com/example/client/Login.java                                            |   10 
 src/main/java/com/example/client/service/TeamGroupManageService.java                   |    4 
 41 files changed, 524 insertions(+), 123 deletions(-)

diff --git a/src/main/java/com/example/client/Login.java b/src/main/java/com/example/client/Login.java
index 45af729..be1237b 100644
--- a/src/main/java/com/example/client/Login.java
+++ b/src/main/java/com/example/client/Login.java
@@ -152,6 +152,7 @@
                 user = userService.login(name, str);
                 exist = user.getExist();
                 Boolean exit2 = true;
+                Boolean exit3 = true;
                 if (StringUtils.isNotBlank(user.getTeamgroup())) {
                     if (StringUtils.isNotBlank(finalTeamGroup1) && !finalTeamGroup1.equals("null")) {
                         if (!finalTeamGroup1.contains(user.getTeamgroup())) {
@@ -159,12 +160,21 @@
                         }
                     }
                 }
+                if (user.getNickName().equals("宸ヤ綔缁�")){
+                    if(!"宸ヤ綔缁�".equals(finalSite)){
+                        exit3 = false;
+                    }
+                }
 
                 if (exist) {
                     if (!exit2) {
                         JOptionPane.showMessageDialog(null, "褰撳墠鏈哄櫒涓嶆敮鎸佽涓撲笟鐢ㄦ埛鐧诲綍", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
                         return;
                     }
+                    if (!exit3) {
+                        JOptionPane.showMessageDialog(null, "褰撳墠鏈哄櫒涓嶆敮鎸佸伐浣滅粍鐢ㄦ埛鐧诲綍", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                        return;
+                    }
                     try {
                         String path = Login.class.getClassLoader().getResource("config.properties").getPath();
                         OutputStream outputStream = null;
diff --git a/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java b/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java
index 10d95ee..82459a0 100644
--- a/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java
@@ -90,15 +90,15 @@
         columnDto.add(new ColumnDto("鎷嗗嵏鏃堕棿", "dismantTime", 130, "selectDate", true, null, null));
         columnDto.add(new ColumnDto("鎷嗗嵏鍗曚綅", "dismantUnit", 120, null, true, null, null));
         columnDto.add(new ColumnDto("鎷嗗嵏浜哄憳", "dismantStaff", 120, null, true, null, null));
-        columnDto.add(new ColumnDto("鎷嗗嵏鍔╀慨鑹囧憳", "dismantAssistant", 180, null, true, null, null));
+        columnDto.add(new ColumnDto("鎷嗗嵏鍔╀慨T鍛�", "dismantAssistant", 180, null, true, null, null));
         columnDto.add(new ColumnDto("鍑鸿埍鏃堕棿", "exitTime", 130, "selectDate", true, null, null));
         columnDto.add(new ColumnDto("鍑鸿埍鍗曚綅", "exitUnit", 120, null, true, null, null));
         columnDto.add(new ColumnDto("鍑鸿埍浜哄憳", "exitStaff", 120, null, true, null, null));
-        columnDto.add(new ColumnDto("鍑鸿埍鍔╀慨鑹囧憳", "exitAssistant", 180, null, true, null, null));
+        columnDto.add(new ColumnDto("鍑鸿埍鍔╀慨T鍛�", "exitAssistant", 180, null, true, null, null));
         columnDto.add(new ColumnDto("閫�閲嶆椂闂�", "returnWeightTime", 130, "selectDate", true, null, null));
         columnDto.add(new ColumnDto("绉伴噸鍛�", "weigher", 120, null, true, null, null));
         columnDto.add(new ColumnDto("閫�閲嶉噸閲�", "returnWeight", 120, null, true, null, null));
-        columnDto.add(new ColumnDto("閫�閲嶅姪淇墖鍛�", "returnWeightAssistant", 180, null, true, null, null));
+        columnDto.add(new ColumnDto("閫�閲嶅姪淇甌鍛�", "returnWeightAssistant", 180, null, true, null, null));
         columnDto.add(new ColumnDto("鍏ュ簱鏃堕棿", "warehouseTime", 130, "selectDate", true, null, null));
         columnDto.add(new ColumnDto("鍏ュ簱浜哄憳", "warehouseStaff", 120, null, true, null, null));
         columnDto.add(new ColumnDto("褰撳墠瀛樻斁浣嶇疆", "currentLocation", 160, null, true, null, null));
@@ -114,8 +114,8 @@
                 "鍑鸿埍闃舵",ComplexTable.mergeCellX,ComplexTable.mergeCellX,ComplexTable.mergeCellX,"閫�閲嶉樁娈�",ComplexTable.mergeCellX,ComplexTable.mergeCellX,ComplexTable.mergeCellX,
                 "鍏ュ簱闃舵",ComplexTable.mergeCellX,"褰撳墠瀛樻斁浣嶇疆"};
         //姝ゅ2-5鏄笉浼氭樉绀哄嚭鏉ョ殑锛屽洜涓�1-4鍚戜笅鍚堝苟浜嗕竴琛� + 鍚戝彸鍚堝苟浜嗕竴鍒�  锛� 鑰�2-5琚繖涓煩褰㈣寖鍥村寘鎷簡
-        headerRows[1] = new Object[]{ComplexTable.mergeCellY, ComplexTable.mergeCellY ,ComplexTable.mergeCellY ,"鏃堕棿","鍗曚綅","浜哄憳","鍔╀慨鑹囧憳",
-                "鏃堕棿","鍗曚綅","浜哄憳","鍔╀慨鑹囧憳","鏃堕棿","绉伴噸鍛�","閲嶉噺","鍔╀慨鑹囧憳","鏃堕棿","浜哄憳",ComplexTable.mergeCellY};
+        headerRows[1] = new Object[]{ComplexTable.mergeCellY, ComplexTable.mergeCellY ,ComplexTable.mergeCellY ,"鏃堕棿","鍗曚綅","浜哄憳","鍔╀慨T鍛�",
+                "鏃堕棿","鍗曚綅","浜哄憳","鍔╀慨T鍛�","鏃堕棿","绉伴噸鍛�","閲嶉噺","鍔╀慨T鍛�","鏃堕棿","浜哄憳",ComplexTable.mergeCellY};
 
         String[][] body = CommonTable.getRowData(list,columnDto);
 
@@ -125,12 +125,14 @@
         btnTjz.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                frame.setEnabled(false);
                 statisDismantService.createTable(frame,nowLevel3.getLevel1NetworkId());
             }
         });
         btnTj.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                frame.setEnabled(false);
                 statisDismant2Service.createTable(frame,nowLevel3.getLevel1NetworkId());
             }
         });
@@ -138,6 +140,7 @@
         btnExport.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                frame.setEnabled(false);
                 exportDismantTrackService.openDialog(frame);
             }
         });
@@ -145,7 +148,9 @@
         btnSave.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                trackTable.getCellEditor().stopCellEditing();
+                if (trackTable.isEditing()) {
+                    trackTable.getCellEditor().stopCellEditing();
+                }
                 SysUser user = (SysUser) CacheUtils.get("user", "user");
                 if (user.getTeamgroup()==null||user.getTeamgroup().equals(nowLevel3.getTeamgroupId().toString())){
                     CommonTable.saveTableList(list, trackTable, columnDto);
@@ -159,6 +164,7 @@
         btnImport.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                frame.setEnabled(false);
                 importDismantTrackService.FileUpload(nowLevel3.getId(),frame);
             }
         });
diff --git a/src/main/java/com/example/client/service/DismantTrackService.java b/src/main/java/com/example/client/service/DismantTrackService.java
index d0d0fbd..65d23d4 100644
--- a/src/main/java/com/example/client/service/DismantTrackService.java
+++ b/src/main/java/com/example/client/service/DismantTrackService.java
@@ -62,7 +62,7 @@
         JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
         JComboBoxItem[] cabinList = cabinService.getList();
         String[] typeList = new String[]{
-                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�", ""
+                "","鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
         List<DjJdgzShip> shipList = djJdgzShipService.getList();
         Map<String, Long> shipMap = new HashMap<>();
@@ -114,6 +114,10 @@
 
         List<ColumnDto> columnDto = new ArrayList<>();
         list = level3Service.getList(null, deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0], null);
+        if (list == null || list.size() == 0) {
+            JOptionPane.showMessageDialog(null, "杩樻湭褰曞叆涓夌骇缃戠粶鍥炬暟鎹�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
 
         columnDto.add(new ColumnDto("搴忓彿", "", 60, "autoCreate", false, null, null));
         columnDto.add(new ColumnDto("璁惧鍚嶇О", "name", 200, null, false, null, null));
diff --git a/src/main/java/com/example/client/service/ExportDismantTrackService.java b/src/main/java/com/example/client/service/ExportDismantTrackService.java
index 96a8d58..d1e2e63 100644
--- a/src/main/java/com/example/client/service/ExportDismantTrackService.java
+++ b/src/main/java/com/example/client/service/ExportDismantTrackService.java
@@ -65,8 +65,10 @@
         comboBox1.setPreferredSize(new Dimension(300, 28));
         comboBox1.setSelectedIndex(-1);
 
+        JComboBoxItem[] teamList1 = sysTeamGroupClassService.getTeamList(deptList[0].getId());
+
         JLabel JLabel1 = new JLabel("璇烽�夋嫨涓撲笟");
-        JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>();
+        JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>(teamList1);
         comboBox2.setPreferredSize(new Dimension(300, 28));
         comboBox2.setSelectedIndex(-1);
 
@@ -111,6 +113,10 @@
                     Long deptId = selectedItem1 == null ? null : selectedItem1.getId();
                     Long teamId = selectedItem2 == null ? null : selectedItem2.getId();
 
+
+                    JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(deptId);
+                    comboBox2.setModel(new DefaultComboBoxModel<>(teamList));
+                    comboBox2.setSelectedIndex(0);
                     JComboBoxItem[] level3List = djJdgzNetworkLevel3Service.getListByExport(projectId, deptId, teamId);
                     comboBox3.setModel(new DefaultComboBoxModel<>(level3List));
                     comboBox3.setSelectedIndex(-1);
diff --git a/src/main/java/com/example/client/service/HandoverAddOrUpdate.java b/src/main/java/com/example/client/service/HandoverAddOrUpdate.java
index a0c3fdf..51d282c 100644
--- a/src/main/java/com/example/client/service/HandoverAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/HandoverAddOrUpdate.java
@@ -65,13 +65,13 @@
             comboBox.setSelectedItem(new JComboBoxItem(data.getLevel1NetworkId(),data.getProjectName()));
         }
 
-        JLabel JLabel1 = new JLabel("浜ゆ柟鑹囬槦");
+        JLabel JLabel1 = new JLabel("浜ゆ柟T闃�");
         JTextField currentTeamDesc = new JTextField(16);
         if (StringUtils.isNotBlank(data.getCurrentTeam())) {
             currentTeamDesc.setText(data.getCurrentTeam());
         }
 
-        JLabel JLabel2 = new JLabel("鎺ユ柟鑹囬槦");
+        JLabel JLabel2 = new JLabel("鎺ユ柟T闃�");
         JTextField handoverTeamDesc = new JTextField(16);
         if (StringUtils.isNotBlank(data.getHandoverTeam())) {
             handoverTeamDesc.setText(data.getHandoverTeam());
@@ -125,7 +125,7 @@
         // 灏� JTextArea 娣诲姞鍒� JTabbedPane
         tabbedPane.addTab("涓撲笟浜ゆ帴璇存槑", professionalScrollPane);
         tabbedPane.addTab("閮ㄩ棬浜ゆ帴璇存槑", departmentScrollPane);
-        tabbedPane.addTab("鑹囬槦浜ゆ帴璇存槑", tdScrollPane);
+        tabbedPane.addTab("T闃熶氦鎺ヨ鏄�", tdScrollPane);
 
         if (StringUtils.isNotBlank(data.getProfessExplan())) {
             professExplan.setText(data.getProfessExplan());
diff --git a/src/main/java/com/example/client/service/HandoverService.java b/src/main/java/com/example/client/service/HandoverService.java
index e459d71..10e7178 100644
--- a/src/main/java/com/example/client/service/HandoverService.java
+++ b/src/main/java/com/example/client/service/HandoverService.java
@@ -73,8 +73,8 @@
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
         columnDto.add(new ColumnDto("搴忓彿", "", (width - 10) / 7, "autoCreate", false, null,null));
         columnDto.add(new ColumnDto("宸ョ▼", "ProjectName", (width - 10) / 7, null, false, null,null));
-        columnDto.add(new ColumnDto("浜ゆ柟鑹囬槦", "currentTeam", (width - 10) / 7, null, false, null,null));
-        columnDto.add(new ColumnDto("鎺ユ柟鑹囬槦", "handoverTeam", (width - 10) / 7, null, false, null,null));
+        columnDto.add(new ColumnDto("浜ゆ柟T闃�", "currentTeam", (width - 10) / 7, null, false, null,null));
+        columnDto.add(new ColumnDto("鎺ユ柟T闃�", "handoverTeam", (width - 10) / 7, null, false, null,null));
         columnDto.add(new ColumnDto("浜ゆ帴鏃堕棿", "handoverTime", (width - 10) / 7, "selectDate", false, null,null));
       /*  columnDto.add(new ColumnDto("浜ゆ帴鎯呭喌璇存槑", "handoverSituation", (width - 10) / 8, null, false, null,null));
       */  columnDto.add(new ColumnDto("闄勪欢", "fileName", (width - 10) / 7, "", false, null,null));
@@ -104,9 +104,9 @@
         btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 DjJdgzHandover data = new DjJdgzHandover();
                 addOrUpdate.openDialog(data,jFrame, columnDto,table);
-                jFrame.setEnabled(false);
             }
         });
 
@@ -131,9 +131,9 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")){
+                    jFrame.setEnabled(false);
                     DjJdgzHandover data = list.get(row);
                     addOrUpdate.openDialog(data,jFrame,columnDto,table);
-                    jFrame.setEnabled(false);
                 }else if(newValue.equals("del")) {
                     int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
                     if (n == 0) {
diff --git a/src/main/java/com/example/client/service/ImportDismantTrackService.java b/src/main/java/com/example/client/service/ImportDismantTrackService.java
index 3f555e1..fbd27a6 100644
--- a/src/main/java/com/example/client/service/ImportDismantTrackService.java
+++ b/src/main/java/com/example/client/service/ImportDismantTrackService.java
@@ -15,10 +15,7 @@
 import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
+import java.awt.event.*;
 import java.io.File;
 import java.util.Date;
 import java.util.List;
@@ -46,6 +43,13 @@
         frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
+        frame.addWindowListener(new WindowAdapter() {
+            //娣诲姞绗簩涓晫闈㈢殑鍏抽棴浜嬩欢:
+            public void windowClosing(WindowEvent e) {
+                //娣诲姞浜嬩欢:
+                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
         GridBagLayout layout = new GridBagLayout();
         frame.setLayout(layout);
 
@@ -184,6 +188,7 @@
                             if (uploadSucceeded.equals("true")) {
                                 waitUtil.dispose();
                                 frame.dispose();
+                                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
                                 addOrUpdate.refreshTable(level3Id, jFrame);
                                 System.out.println("瀵煎叆鎴愬姛鏃堕棿" + new Date());
                             } else {
diff --git a/src/main/java/com/example/client/service/ImportLevel2Service.java b/src/main/java/com/example/client/service/ImportLevel2Service.java
index 105b367..6cca234 100644
--- a/src/main/java/com/example/client/service/ImportLevel2Service.java
+++ b/src/main/java/com/example/client/service/ImportLevel2Service.java
@@ -56,6 +56,7 @@
         frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
+
         GridBagLayout layout = new GridBagLayout();
         frame.setLayout(layout);
 
diff --git a/src/main/java/com/example/client/service/ImportLevel3Service.java b/src/main/java/com/example/client/service/ImportLevel3Service.java
index 2687805..a685101 100644
--- a/src/main/java/com/example/client/service/ImportLevel3Service.java
+++ b/src/main/java/com/example/client/service/ImportLevel3Service.java
@@ -17,10 +17,7 @@
 import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
+import java.awt.event.*;
 import java.io.File;
 import java.util.Date;
 import java.util.List;
@@ -57,6 +54,13 @@
         frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
+        frame.addWindowListener(new WindowAdapter() {
+            //娣诲姞绗簩涓晫闈㈢殑鍏抽棴浜嬩欢:
+            public void windowClosing(WindowEvent e) {
+                //娣诲姞浜嬩欢:
+                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
         GridBagLayout layout = new GridBagLayout();
         frame.setLayout(layout);
 
@@ -286,6 +290,7 @@
                             if (uploadSucceeded.equals("true")) {
                                 waitUtil.dispose();
                                 frame.dispose();
+                                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
                                 JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
                                 JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
                                 JComboBoxItem[] cabinList = cabinService.getList();
diff --git a/src/main/java/com/example/client/service/ImportTrackRecordService.java b/src/main/java/com/example/client/service/ImportTrackRecordService.java
index 952b9c8..2d8bb90 100644
--- a/src/main/java/com/example/client/service/ImportTrackRecordService.java
+++ b/src/main/java/com/example/client/service/ImportTrackRecordService.java
@@ -17,10 +17,7 @@
 import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
+import java.awt.event.*;
 import java.io.File;
 import java.util.Date;
 import java.util.List;
@@ -62,6 +59,13 @@
         frame.setVisible(true);
         GridBagLayout layout = new GridBagLayout();
         frame.setLayout(layout);
+        frame.addWindowListener(new WindowAdapter() {
+            //娣诲姞绗簩涓晫闈㈢殑鍏抽棴浜嬩欢:
+            public void windowClosing(WindowEvent e) {
+                //娣诲姞浜嬩欢:
+                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
 
         table = new JTable();
         table.setRowHeight(40);
@@ -310,12 +314,13 @@
                             if (uploadSucceeded.equals("true")) {
                                 waitUtil.dispose();
                                 frame.dispose();
+                                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
                                 JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
                                 JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
                                 JComboBoxItem[] cabinList = cabinService.getList();
                                 String[] typeList = new String[]{
-                                        "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�", ""
-                                };
+                "","鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
+        };
                                 List<DjJdgzTrackRecord> list = djJdgzTrackRecordService.getList(level1Id[0], deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0], 0, null);
                                 CommonTable.refreshTable(list, columnDto, subTable);
                                 trackRecordManageService.tableModelListener(subTable, jFrame, list);
diff --git a/src/main/java/com/example/client/service/Level1AddOrUpdate.java b/src/main/java/com/example/client/service/Level1AddOrUpdate.java
index a07c000..c6f34df 100644
--- a/src/main/java/com/example/client/service/Level1AddOrUpdate.java
+++ b/src/main/java/com/example/client/service/Level1AddOrUpdate.java
@@ -159,6 +159,9 @@
         btnSave.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                if (subTable.isEditing()) {
+                    subTable.getCellEditor().stopCellEditing();
+                }
                 CommonTable.saveTableList(list,subTable,columnDto);
                 level1ListService.save(list,data.getId(),diagram, finalGraph1);
             }
diff --git a/src/main/java/com/example/client/service/Level1ManageService.java b/src/main/java/com/example/client/service/Level1ManageService.java
index a393660..24e8813 100644
--- a/src/main/java/com/example/client/service/Level1ManageService.java
+++ b/src/main/java/com/example/client/service/Level1ManageService.java
@@ -34,6 +34,8 @@
     @Autowired
     private DjJdgzShipService djJdgzShipService;
     @Autowired
+    private ShipManageService shipManageService;
+    @Autowired
     private Level1AddOrUpdate addOrUpdate; // 娉ㄥ叆 AddOrupdate 瀹炰緥
 
     private JTable table;
@@ -49,7 +51,7 @@
         topJpanel.setBackground(Color.WHITE);
         JPanel centerJpanel = new JPanel();
 
-        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40,jFrame)));
+        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40, jFrame)));
         centerJpanel.setBackground(Color.WHITE);
         panel.add(topJpanel, BorderLayout.NORTH);
         panel.add(centerJpanel, BorderLayout.CENTER);
@@ -57,9 +59,11 @@
         List<DjJdgzShip> shipList = djJdgzShipService.getList();
         JComboBox comboBox = new JComboBox();
         JButton btnInsert = new JButton("鏂板");
+        JButton btnShip = new JButton("X鍙风鐞�");
 
         topJpanel.add(comboBox);
         topJpanel.add(btnInsert);
+        topJpanel.add(btnShip);
 
         comboBox.setPreferredSize(new Dimension(300, 28));
 
@@ -70,10 +74,10 @@
 
         columnDto = new ArrayList<>();
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
-        columnDto.add(new ColumnDto("搴忓彿", "", (width - 10) / 4, "autoCreate", false, null,null));
-        columnDto.add(new ColumnDto("宸ョ▼", "ProjectName", (width - 10) / 4, null, false, null,null));
-        columnDto.add(new ColumnDto("璧峰鏃堕棿", "StartDate", (width - 10) / 4, "selectDate", false, null,null));
-        columnDto.add(new ColumnDto("鎿嶄綔", "", (width - 10) / 4, "", true, buttonList,null));
+        columnDto.add(new ColumnDto("搴忓彿", "", (width - 10) / 4, "autoCreate", false, null, null));
+        columnDto.add(new ColumnDto("宸ョ▼", "ProjectName", (width - 10) / 4, null, false, null, null));
+        columnDto.add(new ColumnDto("璧峰鏃堕棿", "StartDate", (width - 10) / 4, "selectDate", false, null, null));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", (width - 10) / 4, "", true, buttonList, null));
 
         table = CommonTable.createCommonTable(list, columnDto);
         table.setRowHeight(25);
@@ -87,13 +91,13 @@
                 Long shipId = shipMap.get(content);
                 list = level1Service.getList(shipId);
                 if (!isFirstLoadData[0]) {
-                    CommonTable.refreshTable(list, columnDto,table);
+                    CommonTable.refreshTable(list, columnDto, table);
                     table.setRowHeight(25);
 
                     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
-                    tableModelListener(table,jFrame);
-                }else{
+                    tableModelListener(table, jFrame);
+                } else {
                     isFirstLoadData[0] = false;
                 }
             }
@@ -102,10 +106,10 @@
         for (int i = 0; i < shipList.size(); i++) {
             shipMap.put(shipList.get(i).getShipNo(), shipList.get(i).getId());
             comboBox.addItem(shipList.get(i).getShipNo());
-         }
+        }
         comboBox.setSelectedItem(shipList.get(0).getShipNo());
 
-        tableModelListener(table,jFrame);
+        tableModelListener(table, jFrame);
 
         btnInsert.addActionListener(new ActionListener() {
             @Override
@@ -114,17 +118,24 @@
                 insert(jFrame);
             }
         });
+        btnShip.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
+                shipManageService.createTable(jFrame);
+            }
+        });
 
         JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane.setViewportView(table);
         scrollPane.getViewport().setBackground(Color.WHITE);
-        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40,jFrame)));
+        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40, jFrame)));
         centerJpanel.add(scrollPane);
         jFrame.addComponentListener(new ComponentAdapter() {
             @Override
             public void componentResized(ComponentEvent e) {
-                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40,jFrame)));
-                scrollPane.setPreferredSize(new Dimension(width - 20,Compute.ComputeHeightWithScroll(40,jFrame)));
+                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40, jFrame)));
+                scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(40, jFrame)));
                 centerJpanel.revalidate();
                 centerJpanel.repaint();
                 scrollPane.revalidate();
@@ -158,7 +169,7 @@
                 new JComboBoxItem(1L, "涓夌骇"),
         };
 
-        JLabel JLabel1 = new JLabel("鐜勫彿");
+        JLabel JLabel1 = new JLabel("X鍙�");
         JComboBox<JComboBoxItem> comboBox0 = new JComboBox<>(shipList);
         comboBox0.setPreferredSize(new Dimension(185, 28));
 
@@ -195,16 +206,16 @@
 
         JButton btnSave = new JButton("淇濆瓨");
 
-        frame1.add(JLabel1, new GBC(0, 0,1,1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(JLabel1, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         frame1.add(comboBox0, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
         frame1.add(JLabel2, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         frame1.add(comboBox1, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        frame1.add(JLabel3, new GBC(0, 2,1,1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(JLabel3, new GBC(0, 2, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         frame1.add(yearPicker, new GBC(1, 2, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        frame1.add(JLabel4, new GBC(0, 3,1,1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(JLabel4, new GBC(0, 3, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         frame1.add(beginDate, new GBC(1, 3, 1, 1).setAnchor(GBC.NORTHWEST).setInsets(5));
 
         frame1.add(btnSave, new GBC(0, 4, 2, 1).setWeight(1, 0));
@@ -218,20 +229,20 @@
             data.setStartDate(sdFormat.format(beginDate.getDate()));
             data.setYear((Integer) yearPicker.getValue());
             data.setAdventDay(7);
-            data.setProjectName(level.getName()+"淇悊"+ship.getName()+"椤圭洰");
+            data.setProjectName(level.getName() + "淇悊" + ship.getName() + "椤圭洰");
             level1Service.insert(data);
             list = level1Service.getList(ship.getId());
-            CommonTable.refreshTable(list,columnDto,table);
+            CommonTable.refreshTable(list, columnDto, table);
             table.setRowHeight(25);
 
             table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-            tableModelListener(table,jFrame);
+            tableModelListener(table, jFrame);
             frame1.dispose();
             jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
         });
     }
 
-    public void tableModelListener(JTable table,JFrame jFrame){
+    public void tableModelListener(JTable table, JFrame jFrame) {
         table.getModel().addTableModelListener(e -> {
             // 妫�鏌ヤ簨浠剁被鍨�
             if (e.getType() == TableModelEvent.UPDATE) {
@@ -242,11 +253,11 @@
                 // 鑾峰彇鏂扮殑鍊�
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
-                if (newValue.equals("edit")){
+                if (newValue.equals("edit")) {
                     DjJdgzNetworkLevel1 data = list.get(row);
-                    addOrUpdate.openDialog(data,jFrame);
+                    addOrUpdate.openDialog(data, jFrame);
                     jFrame.setEnabled(false);
-                }else if(newValue.equals("del")) {
+                } else if (newValue.equals("del")) {
                     int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
                     if (n == 0) {
                         DefaultTableModel model = (DefaultTableModel) table.getModel();
diff --git a/src/main/java/com/example/client/service/Level1ViewService.java b/src/main/java/com/example/client/service/Level1ViewService.java
index 282e15b..3280d15 100644
--- a/src/main/java/com/example/client/service/Level1ViewService.java
+++ b/src/main/java/com/example/client/service/Level1ViewService.java
@@ -41,10 +41,11 @@
     private NetWorkDiagramService netWorkDiagramService;
 
     public JPanel createTable(Integer width, Integer height, JFrame frame) {
-        height = height - 100;
-        JPanel panel = new JPanel();
+        JPanel panel = new JPanel(new BorderLayout());
+        panel.setPreferredSize(new Dimension(width, height));
 
-        JPanel jLeft = new JPanel(new BorderLayout());
+
+        JPanel jLeft = new JPanel();
         jLeft.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeight(0, frame)));
 
         JPanel diagram = new JPanel(new BorderLayout());
@@ -56,6 +57,10 @@
         List<DjJdgzNetworkLevel1> list = level1Service.getList(null);
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
 
+        if (list == null || list.size() == 0) {
+            JOptionPane.showMessageDialog(null, "杩樻湭褰曞叆涓�绾х綉缁滃浘鏁版嵁", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
 
         columnDto.add(new ColumnDto("搴忓彿", "", width / 8 - 10, "autoCreate", false, null, null));
         columnDto.add(new ColumnDto("宸ョ▼", "ProjectName", width / 8, null, false, null, null));
@@ -66,12 +71,12 @@
 
         JScrollPane scrollTable = new JScrollPane(subTable);
         scrollTable.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeightWithScroll(0, frame)));
-        jLeft.add(scrollTable, BorderLayout.CENTER);
+        jLeft.add(scrollTable);
         frame.addComponentListener(new ComponentAdapter() {
             @Override
             public void componentResized(ComponentEvent e) {
-                jLeft.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeight(40, frame)));
-                scrollTable.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeightWithScroll(40, frame)));
+                jLeft.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeight(0, frame)));
+                scrollTable.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeightWithScroll(0, frame)));
                 jLeft.revalidate();
                 jLeft.repaint();
                 scrollTable.revalidate();
diff --git a/src/main/java/com/example/client/service/Level2AddOrUpdate.java b/src/main/java/com/example/client/service/Level2AddOrUpdate.java
index 709dd5e..90bc52b 100644
--- a/src/main/java/com/example/client/service/Level2AddOrUpdate.java
+++ b/src/main/java/com/example/client/service/Level2AddOrUpdate.java
@@ -202,6 +202,9 @@
         btnSave.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                if (subTable.isEditing()) {
+                    subTable.getCellEditor().stopCellEditing();
+                }
                 CommonTable.saveTableList(list,subTable,columnDto);
                 level2ListService.save(list,data.getId(),diagram, finalGraph);
             }
diff --git a/src/main/java/com/example/client/service/Level2ManageService.java b/src/main/java/com/example/client/service/Level2ManageService.java
index 0437fd8..c39131d 100644
--- a/src/main/java/com/example/client/service/Level2ManageService.java
+++ b/src/main/java/com/example/client/service/Level2ManageService.java
@@ -123,12 +123,14 @@
         btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 insert(jFrame);
             }
         });
         btnDown.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 DownLoadTmpFile.down(tmpPath + "浜岀骇缃戠粶鍥惧鍏ユā鏉�.xlsx", jFrame);
             }
         });
@@ -239,9 +241,9 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")) {
+                    jFrame.setEnabled(false);
                     DjJdgzNetworkLevel2 data = list.get(row);
                     addOrUpdate.openDialog(data, jFrame);
-                    jFrame.setEnabled(false);
                 } else if (newValue.equals("del")) {
                     int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
                     if (n == 0) {
diff --git a/src/main/java/com/example/client/service/Level2ViewService.java b/src/main/java/com/example/client/service/Level2ViewService.java
index 73e5165..da28ef8 100644
--- a/src/main/java/com/example/client/service/Level2ViewService.java
+++ b/src/main/java/com/example/client/service/Level2ViewService.java
@@ -43,7 +43,10 @@
         List<ColumnDto> columnDto = new ArrayList<>();
         List<DjJdgzNetworkLevel2> list = level2Service.getList(null);
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
-
+        if (list == null || list.size() == 0) {
+            JOptionPane.showMessageDialog(null, "杩樻湭褰曞叆浜岀骇缃戠粶鍥炬暟鎹�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
 
         columnDto.add(new ColumnDto("搴忓彿", "", 120, "autoCreate", false, null, null));
         columnDto.add(new ColumnDto("宸ョ▼", "ProjectName", 145, null, false, null, null));
diff --git a/src/main/java/com/example/client/service/Level3AddOrUpdate.java b/src/main/java/com/example/client/service/Level3AddOrUpdate.java
index 5c9f56c..85ebd59 100644
--- a/src/main/java/com/example/client/service/Level3AddOrUpdate.java
+++ b/src/main/java/com/example/client/service/Level3AddOrUpdate.java
@@ -161,6 +161,9 @@
         btnSave.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                if (subTable.isEditing()) {
+                    subTable.getCellEditor().stopCellEditing();
+                }
                 CommonTable.saveTableList(finalList, subTable, columnDto);
                 level3ListService.save(finalList, data.getId(), diagram, finalGraph1);
             }
diff --git a/src/main/java/com/example/client/service/Level3ManageService.java b/src/main/java/com/example/client/service/Level3ManageService.java
index b4c719c..bdbb552 100644
--- a/src/main/java/com/example/client/service/Level3ManageService.java
+++ b/src/main/java/com/example/client/service/Level3ManageService.java
@@ -13,6 +13,7 @@
 import com.example.server.progressTrack.model.DjJdgzShip;
 import com.example.server.progressTrack.service.*;
 import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -58,7 +59,7 @@
 
     public JPanel createTable(Integer width, Integer height, JFrame jFrame) {
         JPanel panel = new JPanel();
-        panel.setPreferredSize(new Dimension(width,height));
+        panel.setPreferredSize(new Dimension(width, height));
 
         JPanel topJpanel = new JPanel();
         GridBagLayout layout = new GridBagLayout();
@@ -67,7 +68,7 @@
         topJpanel.setBackground(Color.WHITE);
 
         JPanel centerJpanel = new JPanel();
-        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(100,jFrame)));
+        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(105, jFrame)));
         centerJpanel.setBackground(Color.WHITE);
         panel.add(topJpanel, BorderLayout.NORTH);
         panel.add(centerJpanel, BorderLayout.CENTER);
@@ -77,7 +78,7 @@
         JComboBoxItem[] cabinList = cabinService.getList();
         JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
         String[] typeList = new String[]{
-                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�",""
+                "","鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
 
         JLabel JLabel0 = new JLabel("宸ョ▼");
@@ -124,7 +125,7 @@
         topJpanel.add(btnInsert, new GBC(3, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         topJpanel.add(btnImport, new GBC(4, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        list = level3Service.getList(shipList.get(0).getId(), deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],null);
+        list = level3Service.getList(shipList.get(0).getId(), deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0], null);
         List<TableButton> buttonList = new ArrayList<>();
         buttonList.add(new TableButton("edit", "缂栬緫"));
         buttonList.add(new TableButton("del", "鍒犻櫎"));
@@ -148,6 +149,11 @@
 
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
+        for (int i = 0; i < shipList.size(); i++) {
+            shipMap.put(shipList.get(i).getShipNo(), shipList.get(i).getId());
+            comboBox.addItem(shipList.get(i).getShipNo());
+        }
+        comboBox.setSelectedItem(shipList.get(0).getShipNo());
         comboBox.addItemListener(new ItemListener() {
             public void itemStateChanged(final ItemEvent event) {
                 String content = comboBox.getSelectedItem().toString();
@@ -157,7 +163,7 @@
                 String type = comboBox4.getSelectedItem().toString();
 
                 Long shipId = shipMap.get(content);
-                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type, null);
 
                 CommonTable.refreshTable(list, columnDto, table);
                 table.setRowHeight(25);
@@ -184,7 +190,7 @@
                         String type = comboBox4.getSelectedItem().toString();
 
                         Long shipId = shipMap.get(content);
-                        list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+                        list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type, null);
                         CommonTable.refreshTable(list, columnDto, table);
                         table.setRowHeight(25);
 
@@ -205,7 +211,7 @@
                 String type = comboBox4.getSelectedItem().toString();
 
                 Long shipId = shipMap.get(content);
-                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type, null);
 
                 CommonTable.refreshTable(list, columnDto, table);
                 table.setRowHeight(25);
@@ -223,7 +229,7 @@
                 String type = comboBox4.getSelectedItem().toString();
 
                 Long shipId = shipMap.get(content);
-                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type, null);
 
                 CommonTable.refreshTable(list, columnDto, table);
                 table.setRowHeight(25);
@@ -241,7 +247,7 @@
                 String type = comboBox4.getSelectedItem().toString();
 
                 Long shipId = shipMap.get(content);
-                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type, null);
 
                 CommonTable.refreshTable(list, columnDto, table);
                 table.setRowHeight(25);
@@ -254,7 +260,7 @@
         query.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                list = level3Service.getList(null, null, null, null, null,sb.getText());
+                list = level3Service.getList(null, null, null, null, null, sb.getText());
 
                 CommonTable.refreshTable(list, columnDto, table);
                 table.setRowHeight(25);
@@ -264,17 +270,12 @@
             }
         });
 
-        for (int i = 0; i < shipList.size(); i++) {
-            shipMap.put(shipList.get(i).getShipNo(), shipList.get(i).getId());
-            comboBox.addItem(shipList.get(i).getShipNo());
-        }
-        comboBox.setSelectedItem(shipList.get(0).getShipNo());
-
         tableModelListener(list, table, jFrame);
 
         btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 insert(jFrame);
             }
         });
@@ -282,6 +283,7 @@
         btnImport.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 importService.FileUpload(columnDto, table, jFrame);
             }
         });
@@ -289,13 +291,13 @@
         JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane.setViewportView(table);
         scrollPane.getViewport().setBackground(Color.WHITE);
-        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(100,jFrame)));
+        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(105, jFrame)));
         centerJpanel.add(scrollPane);
         jFrame.addComponentListener(new ComponentAdapter() {
             @Override
             public void componentResized(ComponentEvent e) {
-                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(100,jFrame)));
-                scrollPane.setPreferredSize(new Dimension(width - 20,Compute.ComputeHeightWithScroll(100,jFrame)));
+                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(105, jFrame)));
+                scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(105, jFrame)));
                 centerJpanel.revalidate();
                 centerJpanel.repaint();
                 scrollPane.revalidate();
@@ -328,7 +330,7 @@
         JComboBoxItem[] cabinList = cabinService.getList();
         JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
         String[] typeList = new String[]{
-                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�",""
+                "","鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
 
         JLabel JLabel1 = new JLabel("宸ョ▼");
@@ -463,7 +465,7 @@
             data.setCabinId(String.valueOf(selectedIds));
             data.setType(comboBox6.getSelectedItem().toString());
             level3Service.insert(data);
-            list = level3Service.getList(level1Data.getShipId(), deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],null);
+            list = level3Service.getList(level1Data.getShipId(), deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0], null);
             CommonTable.refreshTable(list, columnDto, table);
             table.setRowHeight(25);
 
diff --git a/src/main/java/com/example/client/service/Level3View2Service.java b/src/main/java/com/example/client/service/Level3View2Service.java
index e6ded97..dee2b1c 100644
--- a/src/main/java/com/example/client/service/Level3View2Service.java
+++ b/src/main/java/com/example/client/service/Level3View2Service.java
@@ -34,6 +34,8 @@
     private SysTeamGroupClassService sysTeamGroupClassService;
     @Autowired
     private CabinService cabinService;
+    @Autowired
+    private StatisProductService statisProductService;
 
     private JTable table;
     private List<TableNodeDto> list;
@@ -51,7 +53,7 @@
         topJpanel.setBackground(Color.WHITE);
 
         JPanel centerJpanel = new JPanel();
-        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(100,frame)));
+        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(95,frame)));
         centerJpanel.setBackground(Color.WHITE);
         panel.add(topJpanel, BorderLayout.NORTH);
         panel.add(centerJpanel, BorderLayout.CENTER);
@@ -61,7 +63,7 @@
         JComboBoxItem[] cabinList = cabinService.getList();
         JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
         String[] typeList = new String[]{
-                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�", ""
+                "","鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
 
         JLabel JLabel0 = new JLabel("宸ョ▼");
@@ -98,7 +100,7 @@
 
         // 鍒涘缓涓嬫媺妗�
         ColorDescriptionComboBox comboBox5 = new ColorDescriptionComboBox(colorDescriptions);
-
+        JButton btnTjz = new JButton("璁惧杩涘害缁熻鎬昏〃");
 
         topJpanel.add(JLabel0, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         topJpanel.add(comboBox, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
@@ -114,6 +116,7 @@
         topJpanel.add(sb, new GBC(0, 1, 2, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         topJpanel.add(query, new GBC(2, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
         topJpanel.add(comboBox5, new GBC(3, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        topJpanel.add(btnTjz, new GBC(5, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
         list = level3Service.getNodeList(shipList.get(0).getId(), deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0], null);
 
@@ -279,17 +282,25 @@
         }
         comboBox.setSelectedItem(shipList.get(0).getShipNo());
 
+        btnTjz.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                String content = comboBox.getSelectedItem().toString();
+                Long shipId = shipMap.get(content);
+                statisProductService.createTable(frame,shipId);
+            }
+        });
 
         JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane.setViewportView(table);
         scrollPane.getViewport().setBackground(Color.WHITE);
-        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(100,frame)));
+        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(95,frame)));
         centerJpanel.add(scrollPane);
         frame.addComponentListener(new ComponentAdapter() {
             @Override
             public void componentResized(ComponentEvent e) {
-                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(100,frame)));
-                scrollPane.setPreferredSize(new Dimension(width - 20,Compute.ComputeHeightWithScroll(100,frame)));
+                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(95,frame)));
+                scrollPane.setPreferredSize(new Dimension(width - 20,Compute.ComputeHeightWithScroll(95,frame)));
                 centerJpanel.revalidate();
                 centerJpanel.repaint();
                 scrollPane.revalidate();
diff --git a/src/main/java/com/example/client/service/MenuService.java b/src/main/java/com/example/client/service/MenuService.java
index 301085b..c1bda51 100644
--- a/src/main/java/com/example/client/service/MenuService.java
+++ b/src/main/java/com/example/client/service/MenuService.java
@@ -94,13 +94,17 @@
                         main.showTab("涓�绾х綉缁滃浘绠$悊", level1Manage, tree);
                     } else if (nodeName.equals("涓�绾х綉缁滃浘鏌ョ湅")) {
                         JPanel level1View = level1ViewService.createTable(width, height,frame);
-                        main.showTab("涓�绾х綉缁滃浘鏌ョ湅", level1View, tree);
+                        if(level1View!=null){
+                            main.showTab("涓�绾х綉缁滃浘鏌ョ湅", level1View, tree);
+                        }
                     } else if (nodeName.equals("浜岀骇缃戠粶鍥剧鐞�")) {
                         JPanel level2Manage = level2ManageService.createTable(width, height, frame);
                         main.showTab("浜岀骇缃戠粶鍥剧鐞�", level2Manage, tree);
                     } else if (nodeName.equals("浜岀骇缃戠粶鍥炬煡鐪�")) {
                         JPanel level2View = level2ViewService.createTable(width, height,frame);
-                        main.showTab("浜岀骇缃戠粶鍥炬煡鐪�", level2View, tree);
+                        if(level2View!=null){
+                            main.showTab("浜岀骇缃戠粶鍥炬煡鐪�", level2View, tree);
+                        }
                     } else if (nodeName.equals("涓夌骇缃戠粶鍥剧鐞�")) {
                         JPanel level3Manage = level3ManageService.createTable(width, height, frame);
                         main.showTab("涓夌骇缃戠粶鍥剧鐞�", level3Manage, tree);
@@ -124,10 +128,14 @@
                         main.showTab("鐢ㄦ埛绠$悊", user, tree);
                     } else if (nodeName.equals("鎷嗗嵏杩涘害琛�")) {
                         JPanel dismantTrack = dismantTrackService.createTable(width, height, frame);
-                        main.showTab("鎷嗗嵏杩涘害琛�", dismantTrack, tree);
+                        if(dismantTrack!=null){
+                            main.showTab("鎷嗗嵏杩涘害琛�", dismantTrack, tree);
+                        }
                     }else if (nodeName.equals("瀛愰儴浠堕厤缃�")) {
                         JPanel subunit = subunitService.createTable(width, height, frame);
-                        main.showTab("瀛愰儴浠堕厤缃�", subunit, tree);
+                        if(subunit!=null){
+                            main.showTab("瀛愰儴浠堕厤缃�", subunit, tree);
+                        }
                     }else if (nodeName.equals("涓撲笟绠$悊")) {
                         JPanel teamGroup = teamGroupManageService.createTable(width, height, frame);
                         main.showTab("涓撲笟绠$悊", teamGroup, tree);
diff --git a/src/main/java/com/example/client/service/ShipManageService.java b/src/main/java/com/example/client/service/ShipManageService.java
new file mode 100644
index 0000000..55bfd9c
--- /dev/null
+++ b/src/main/java/com/example/client/service/ShipManageService.java
@@ -0,0 +1,149 @@
+package com.example.client.service;
+
+import com.example.client.dto.ColumnDto;
+import com.example.client.dto.JComboBoxItem;
+import com.example.client.model.TableButton;
+import com.example.client.utils.CommonTable;
+import com.example.client.utils.Compute;
+import com.example.client.utils.GBC;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel1;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List;
+import com.example.server.progressTrack.model.DjJdgzShip;
+import com.example.server.progressTrack.service.DjJdgzNetworkLevel1Service;
+import com.example.server.progressTrack.service.DjJdgzShipService;
+import org.jdesktop.swingx.JXDatePicker;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.swing.*;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.awt.event.*;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class ShipManageService {
+    @Autowired
+    private DjJdgzShipService djJdgzShipService;
+
+    private JTable table;
+    private List<ColumnDto> columnDto;
+
+    public void createTable(JFrame jFrame) {
+        JFrame frame1 = new JFrame("鏂板涓�绾х綉缁滃浘");
+        frame1.setSize(400, 400);
+        frame1.setResizable(true);
+        frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+        frame1.setLocationRelativeTo(null);
+        frame1.setVisible(true);
+        frame1.addWindowListener(new WindowAdapter() {
+            //娣诲姞绗簩涓晫闈㈢殑鍏抽棴浜嬩欢:
+            public void windowClosing(WindowEvent e) {
+                //娣诲姞浜嬩欢:
+                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
+
+        JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+        topJpanel.setPreferredSize(new Dimension(350, 40));
+        topJpanel.setBackground(Color.WHITE);
+        JPanel centerJpanel = new JPanel();
+
+        centerJpanel.setPreferredSize(new Dimension(350, 350));
+        centerJpanel.setBackground(Color.WHITE);
+        frame1.add(topJpanel, BorderLayout.NORTH);
+        frame1.add(centerJpanel, BorderLayout.CENTER);
+
+        List<DjJdgzShip> shipList = djJdgzShipService.getList();
+        JButton btnInsert = new JButton("鏂板");
+        JButton btnSave = new JButton("淇濆瓨");
+
+        topJpanel.add(btnInsert);
+        topJpanel.add(btnSave);
+
+        List<TableButton> buttonList = new ArrayList<>();
+        buttonList.add(new TableButton("del", "鍒犻櫎"));
+
+        columnDto = new ArrayList<>();
+        //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
+        columnDto.add(new ColumnDto("搴忓彿", "", 115 , "autoCreate", false, null,null));
+        columnDto.add(new ColumnDto("X鍙�", "shipNo", 115, null, true, null,null));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", 115, "", true, buttonList,null));
+
+        table = CommonTable.createCommonTable(shipList, columnDto);
+        table.setRowHeight(25);
+
+        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+        tableModelListener(table,jFrame,shipList);
+
+        btnInsert.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                TableModel model = table.getModel();
+                DefaultTableModel defaultModel = (DefaultTableModel) model;
+                int columnCount = table.getColumnCount();
+                Object[] emptyRow = new Object[columnCount];
+                defaultModel.addRow(emptyRow);
+                shipList.add(new DjJdgzShip());
+            }
+        });
+        btnSave.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (table.isEditing()) {
+                    table.getCellEditor().stopCellEditing();
+                }
+                CommonTable.saveTableList(shipList,table,columnDto);
+                djJdgzShipService.save(shipList);
+            }
+        });
+
+        JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+        scrollPane.setViewportView(table);
+        scrollPane.getViewport().setBackground(Color.WHITE);
+        scrollPane.setPreferredSize(new Dimension(350, 300));
+        centerJpanel.add(scrollPane);
+
+    }
+
+    public void tableModelListener(JTable table, JFrame jFrame, List<DjJdgzShip> shipList){
+        table.getModel().addTableModelListener(e -> {
+            // 妫�鏌ヤ簨浠剁被鍨�
+            if (e.getType() == TableModelEvent.UPDATE) {
+                // 鑾峰彇鍙樺寲鐨勮鍜屽垪
+                int row = e.getFirstRow();
+                int column = e.getColumn();
+
+                // 鑾峰彇鏂扮殑鍊�
+                Object newValue = table.getModel().getValueAt(row, column);
+                // 杈撳嚭鍙樺寲淇℃伅
+               if(newValue.equals("del")) {
+                    int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
+                    if (n == 0) {
+                        DefaultTableModel model = (DefaultTableModel) table.getModel();
+                        DjJdgzShip data = shipList.get(row);
+                        djJdgzShipService.deleteLogic(data.getId());
+                        shipList.remove(row);
+                        model.removeRow(row);
+                    }
+                }
+                System.out.println("鍗曞厓鏍煎彉鍖�: 琛�=" + row + ", 鍒�=" + column + ", 鏂板��=" + newValue);
+            }
+        });
+    }
+
+
+}
+
+
+
+
diff --git a/src/main/java/com/example/client/service/StatisProductService.java b/src/main/java/com/example/client/service/StatisProductService.java
new file mode 100644
index 0000000..f991dbc
--- /dev/null
+++ b/src/main/java/com/example/client/service/StatisProductService.java
@@ -0,0 +1,60 @@
+package com.example.client.service;
+
+import com.example.client.dto.ColumnDto;
+import com.example.client.utils.ComplexTable;
+import com.example.server.progressTrack.Dto.StatistDismantDto;
+import com.example.server.progressTrack.Dto.StatistProductDto;
+import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.swing.*;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class StatisProductService {
+    @Autowired
+    DjJdgzNetworkLevel3Service djJdgzNetworkLevel3Service;
+    public void createTable(JFrame jFrame, Long level1Id) {
+        JFrame frame1 = new JFrame("璁惧杩涘害缁熻鎬昏〃");
+        frame1.setSize(1500, 800);
+        frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+        frame1.setLocationRelativeTo(null);
+        frame1.setVisible(true);
+        frame1.addWindowListener(new WindowAdapter() {
+            //娣诲姞绗簩涓晫闈㈢殑鍏抽棴浜嬩欢:
+            public void windowClosing(WindowEvent e) {
+                //娣诲姞浜嬩欢:
+                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
+
+        List<StatistProductDto> list = djJdgzNetworkLevel3Service.getStatist(level1Id);
+
+        Object[][] headerRows = new Object[2][9];
+        headerRows[0] = new Object[]{"閮ㄩ棬/涓撲笟","鍚勮妭鐐圭殑璁惧涓暟", ComplexTable.mergeCellX,ComplexTable.mergeCellX,ComplexTable.mergeCellX,ComplexTable.mergeCellX,"鑺傜偣鍏ㄩ儴瀹屾垚涓暟"};
+        //姝ゅ2-5鏄笉浼氭樉绀哄嚭鏉ョ殑锛屽洜涓�1-4鍚戜笅鍚堝苟浜嗕竴琛� + 鍚戝彸鍚堝苟浜嗕竴鍒�  锛� 鑰�2-5琚繖涓煩褰㈣寖鍥村寘鎷簡
+        headerRows[1] = new Object[]{ComplexTable.mergeCellY, "璁惧鎷嗗嵏鍑鸿埍","璁惧鍒嗕氦","鎷嗘閴村畾","璁惧杩斿巶","鍥炶",ComplexTable.mergeCellY};
+
+        String[][] body = new String[list.size()][9];
+
+        for (int i = 0; i < list.size(); i++) {
+            StatistProductDto data =list.get(i);
+            body[i][0] = data.getName();
+            body[i][1] = String.valueOf(data.getCxsl());
+            body[i][2] = String.valueOf(data.getFcsl());
+            body[i][3] = String.valueOf(data.getJdsl());
+            body[i][4] = String.valueOf(data.getFcsl());
+            body[i][5] = String.valueOf(data.getHzsl());
+            body[i][6] = String.valueOf(data.getWcsl());
+        }
+
+        JScrollPane scrollTable = new JScrollPane(new ComplexTable(headerRows , body,210));
+        frame1.add(scrollTable);
+        frame1.setVisible(true);
+    }
+
+}
diff --git a/src/main/java/com/example/client/service/SubunitAddOrUpdate.java b/src/main/java/com/example/client/service/SubunitAddOrUpdate.java
index 426fb07..1d91113 100644
--- a/src/main/java/com/example/client/service/SubunitAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/SubunitAddOrUpdate.java
@@ -88,6 +88,7 @@
         btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                frame.setEnabled(false);
                 SysUser user = (SysUser) CacheUtils.get("user", "user");
                 if (user.getTeamgroup()==null||user.getTeamgroup().equals(nowLevel3.getTeamgroupId().toString())) {
                     DjJdgzDismantTrack djJdgzDismantTrack = new DjJdgzDismantTrack();
@@ -203,9 +204,9 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")){
+                    jFrame.setEnabled(false);
                     DjJdgzDismantTrack data = list.get(row);
                     insert(jFrame,data);
-                    jFrame.setEnabled(false);
                 }else if(newValue.equals("del")) {
                     int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
                     if (n == 0) {
diff --git a/src/main/java/com/example/client/service/SubunitService.java b/src/main/java/com/example/client/service/SubunitService.java
index e6161b0..65f2412 100644
--- a/src/main/java/com/example/client/service/SubunitService.java
+++ b/src/main/java/com/example/client/service/SubunitService.java
@@ -122,6 +122,11 @@
         List<ColumnDto> columnDto = new ArrayList<>();
         list = level3Service.getList(null, deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],null);
 
+        if (list == null || list.size() == 0) {
+            JOptionPane.showMessageDialog(null, "杩樻湭褰曞叆涓夌骇缃戠粶鍥炬暟鎹�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
+
         columnDto.add(new ColumnDto("搴忓彿", "", 60, "autoCreate", false, null, null));
         columnDto.add(new ColumnDto("璁惧鍚嶇О", "name", 152, null, false, null, null));
         columnDto.add(new ColumnDto("閮ㄩ棬", "deptId", 152, "dict", false, null, deptList));
diff --git a/src/main/java/com/example/client/service/TeamGroupManageService.java b/src/main/java/com/example/client/service/TeamGroupManageService.java
index 3f7236e..194c897 100644
--- a/src/main/java/com/example/client/service/TeamGroupManageService.java
+++ b/src/main/java/com/example/client/service/TeamGroupManageService.java
@@ -69,9 +69,9 @@
         btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 SysTeamGroupClass data = new SysTeamGroupClass();
                 addOrUpdate.openDialog(data,jFrame, columnDto,table);
-                jFrame.setEnabled(false);
             }
         });
 
@@ -96,9 +96,9 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")){
+                    jFrame.setEnabled(false);
                     SysTeamGroupClass data = list.get(row);
                     addOrUpdate.openDialog(data,jFrame, columnDto,table);
-                    jFrame.setEnabled(false);
                 }else if(newValue.equals("del")) {
                     int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
                     if (n == 0) {
diff --git a/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java b/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java
index 319a680..f78ed46 100644
--- a/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java
@@ -100,7 +100,7 @@
             trackLocatDesc.setText(data.getTrackLocation());
         }
 
-        JLabel JLabel3 = new JLabel("璺熻釜浜�(鑹囨柟)");
+        JLabel JLabel3 = new JLabel("璺熻釜浜�(T鏂�)");
         JTextField trackPersonDesc = new JTextField(16);
         if (StringUtils.isNotBlank(data.getTrackPerson())) {
             trackPersonDesc.setText(data.getTrackPerson());
diff --git a/src/main/java/com/example/client/service/TrackRecordManageService.java b/src/main/java/com/example/client/service/TrackRecordManageService.java
index 363d012..d119af6 100644
--- a/src/main/java/com/example/client/service/TrackRecordManageService.java
+++ b/src/main/java/com/example/client/service/TrackRecordManageService.java
@@ -10,6 +10,8 @@
 import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
 import com.example.server.progressTrack.service.DjJdgzTrackRecordService;
 import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import com.example.server.user.model.SysUser;
+import com.example.server.utils.CacheUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -61,7 +63,7 @@
         topJpanel.setBackground(Color.WHITE);
 
         JPanel centerJpanel = new JPanel();
-        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(100,jFrame)));
+        centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(105, jFrame)));
         centerJpanel.setBackground(Color.WHITE);
         panel.add(topJpanel, BorderLayout.NORTH);
         panel.add(centerJpanel, BorderLayout.CENTER);
@@ -77,7 +79,7 @@
 
         JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
         String[] typeList = new String[]{
-                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�", ""
+                "","鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
 
         JLabel JLabel0 = new JLabel("宸ョ▼");
@@ -248,6 +250,7 @@
         btnImport.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem();
                 importTrackRecordService.FileUpload(columnDto, table, jFrame);
             }
@@ -288,7 +291,7 @@
 
         String[] items = itemList.toArray(new String[0]);
         columnModel = table.getColumnModel();
-        MultiSelectComboBox2 mulcomboBox = new MultiSelectComboBox2(items,columnDto,columnModel);
+        MultiSelectComboBox2 mulcomboBox = new MultiSelectComboBox2(items, columnDto, columnModel);
 
 /*        final Integer[] lastIndex = {-1};
         mulcomboBox.addItemListener(new ItemListener() {
@@ -350,6 +353,7 @@
                         Object cellValue = table.getValueAt(row, column);
                         Integer value = Integer.parseInt(cellValue.toString());
                         if (value > 0) {
+                            jFrame.setEnabled(false);
                             DjJdgzTrackRecord djJdgzTrackRecord = list.get(row);
                             history(jFrame, djJdgzTrackRecord.getLevel3NodeId());
                         }
@@ -361,6 +365,7 @@
         btnTj.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem();
                 statistReportsService.createTable(jFrame, selectedItemNow.getId());
             }
@@ -368,6 +373,7 @@
         btnJc.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem();
                 progressPromptService.createTable(jFrame, selectedItemNow.getId());
             }
@@ -375,6 +381,7 @@
         btnExport.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 exportTrackRecordService.openDialog(jFrame);
             }
         });
@@ -383,13 +390,13 @@
         JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane.setViewportView(table);
         scrollPane.getViewport().setBackground(Color.WHITE);
-        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(100,jFrame)));
+        scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(105, jFrame)));
         centerJpanel.add(scrollPane);
         jFrame.addComponentListener(new ComponentAdapter() {
             @Override
             public void componentResized(ComponentEvent e) {
-                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(100,jFrame)));
-                scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(100,jFrame)));
+                centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(105, jFrame)));
+                scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(105, jFrame)));
                 centerJpanel.revalidate();
                 centerJpanel.repaint();
                 scrollPane.revalidate();
@@ -470,6 +477,7 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")) {
+                    jFrame.setEnabled(false);
                     DjJdgzTrackRecord data = recordList.get(row);
                     Long level1Id = data.getLevel1NetworkId();
                     data.setProcessName(data.getLevel3NodeName());
@@ -488,7 +496,6 @@
                         data.setRepairUnitContact(level3.getRepairUnitContact());
                     }
                     addOrUpdate.openDialog(data, jFrame, level1Id, columnDto, table);
-                    jFrame.setEnabled(false);
                 } else {
 
                 }
@@ -518,7 +525,9 @@
                 int row = table.rowAtPoint(e.getPoint());
                 int col = table.columnAtPoint(e.getPoint());
                 DjJdgzTrackRecord djJdgzTrackRecord = list.get(row);
-                if (djJdgzTrackRecord.getCurrentStatus() == 1) {
+                String site = (String) CacheUtils.get("site", "site");
+
+                if (djJdgzTrackRecord.getCurrentStatus() == 1 && site.equals("宸ヤ綔缁�")) {
                     table.setRowSelectionInterval(row, row);
                     popupMenu.show(e.getComponent(), e.getX(), e.getY());
                     menuItem1.addActionListener(ex -> {
diff --git a/src/main/java/com/example/client/service/UserAddOrUpdate.java b/src/main/java/com/example/client/service/UserAddOrUpdate.java
index bbd3da8..d9fc1bd 100644
--- a/src/main/java/com/example/client/service/UserAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/UserAddOrUpdate.java
@@ -56,8 +56,6 @@
 
         JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
 
-        JComboBoxItem[] boatList = boatFleetService.getBoatList();
-
         JLabel JLabel0 = new JLabel("鐢ㄦ埛鍚�");
         JTextField userName = new JTextField(16);
         if (StringUtils.isNotBlank(data.getUsername())) {
diff --git a/src/main/java/com/example/client/service/UserManageService.java b/src/main/java/com/example/client/service/UserManageService.java
index bc39772..cbb42f2 100644
--- a/src/main/java/com/example/client/service/UserManageService.java
+++ b/src/main/java/com/example/client/service/UserManageService.java
@@ -71,7 +71,6 @@
 
         JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
 
-        JComboBoxItem[] boatList = boatFleetService.getBoatList();
 
         columnDto = new ArrayList<>();
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
@@ -93,9 +92,9 @@
         btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                jFrame.setEnabled(false);
                 SysUser data = new SysUser();
                 addOrUpdate.openDialog(data,jFrame, columnDto,table);
-                jFrame.setEnabled(false);
             }
         });
 
@@ -120,9 +119,9 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")){
+                    jFrame.setEnabled(false);
                     SysUser data = list.get(row);
                     addOrUpdate.openDialog(data,jFrame, columnDto,table);
-                    jFrame.setEnabled(false);
                 }else if(newValue.equals("del")) {
                     int n = JOptionPane.showConfirmDialog(null, "鏄惁鍒犻櫎?", "鎻愮ず", JOptionPane.YES_NO_OPTION);
                     if (n == 0) {
diff --git a/src/main/java/com/example/client/utils/Compute.java b/src/main/java/com/example/client/utils/Compute.java
index 4216855..71ccf91 100644
--- a/src/main/java/com/example/client/utils/Compute.java
+++ b/src/main/java/com/example/client/utils/Compute.java
@@ -26,13 +26,13 @@
     }*/
     public static Integer ComputeHeight(Integer topHeight, JFrame frame){
         int height = frame.getSize().height;
-        Integer panelHeight = height - 70 - topHeight;
+        Integer panelHeight = height - 65 - topHeight;
 
         return panelHeight;
     }
     public static Integer ComputeHeightWithScroll(Integer topHeight, JFrame frame){
         int height = frame.getSize().height;
-        Integer panelHeight = height - 100 - topHeight;
+        Integer panelHeight = height - 95 - topHeight;
 
         return panelHeight;
     }
diff --git a/src/main/java/com/example/server/DataSync/service/DataSyncService.java b/src/main/java/com/example/server/DataSync/service/DataSyncService.java
index 3a6f4a8..df6ec49 100644
--- a/src/main/java/com/example/server/DataSync/service/DataSyncService.java
+++ b/src/main/java/com/example/server/DataSync/service/DataSyncService.java
@@ -201,6 +201,7 @@
                 syncTable("dj_jdgz_dismant_track");
                 syncTable("dj_sys_teamgroup_class");
                 syncTable("sys_user");
+                syncTable("dj_jdgz_ship");
             }
         } else if ("鍘傚".equals(mySite)) {
             syncTable("dj_jdgz_handover");
diff --git a/src/main/java/com/example/server/progressTrack/Dto/StatistProductDto.java b/src/main/java/com/example/server/progressTrack/Dto/StatistProductDto.java
new file mode 100644
index 0000000..6996c36
--- /dev/null
+++ b/src/main/java/com/example/server/progressTrack/Dto/StatistProductDto.java
@@ -0,0 +1,17 @@
+package com.example.server.progressTrack.Dto;
+
+import lombok.Data;
+
+/**
+ * @author 14539
+ */
+@Data
+public class StatistProductDto {
+    private String name;
+    private Integer cxsl;
+    private Integer fjsl;
+    private Integer jdsl;
+    private Integer fcsl;
+    private Integer hzsl;
+    private Integer wcsl;
+}
diff --git a/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java b/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java
index 1e6646a..9ac4ef1 100644
--- a/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java
+++ b/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java
@@ -3,6 +3,7 @@
 import com.example.client.dto.JComboBoxItem;
 import com.example.server.dao.BaseDao;
 import com.example.server.progressTrack.Dto.NetworkNodeStatusDto;
+import com.example.server.progressTrack.Dto.StatistProductDto;
 import com.example.server.progressTrack.Dto.TableNodeDto;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
 import org.apache.ibatis.annotations.Mapper;
@@ -35,4 +36,6 @@
     JComboBoxItem[] getListByExport(Long projectId, Long deptId, Long teamId);
 
     List<TableNodeDto> getNodeList(Long shipId, Long deptId, Long teamId, Long cabinId, String type, String name);
+
+    List<StatistProductDto> getStatist(Long level1Id);
 }
diff --git a/src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java b/src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java
index 17913eb..6cd95d9 100644
--- a/src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java
+++ b/src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java
@@ -325,15 +325,15 @@
         columnDto.add(new ExcelColumnDto("鎷嗗嵏鏃堕棿", "dismantTime", 15, HorizontalAlignment.CENTER));
         columnDto.add(new ExcelColumnDto("鎷嗗嵏鍗曚綅", "dismantUnit", 25, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("鎷嗗嵏浜哄憳", "dismantStaff", 15, HorizontalAlignment.LEFT));
-        columnDto.add(new ExcelColumnDto("鎷嗗嵏鍔╀慨鑹囧憳", "dismantAssistant", 10, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("鎷嗗嵏鍔╀慨T鍛�", "dismantAssistant", 10, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("鍑鸿埍鏃堕棿", "exitTime", 10, HorizontalAlignment.CENTER));
         columnDto.add(new ExcelColumnDto("鍑鸿埍鍗曚綅", "exitUnit", 10, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("鍑鸿埍浜哄憳", "exitStaff", 15, HorizontalAlignment.LEFT));
-        columnDto.add(new ExcelColumnDto("鍑鸿埍鍔╀慨鑹囧憳", "exitAssistant", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("鍑鸿埍鍔╀慨T鍛�", "exitAssistant", 20, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("閫�閲嶆椂闂�", "returnWeightTime", 20, HorizontalAlignment.CENTER));
         columnDto.add(new ExcelColumnDto("绉伴噸鍛�", "weigher", 15, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("閫�閲嶉噸閲�", "returnWeight", 15, HorizontalAlignment.RIGHT));
-        columnDto.add(new ExcelColumnDto("閫�閲嶅姪淇墖鍛�", "returnWeightAssistant", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("閫�閲嶅姪淇甌鍛�", "returnWeightAssistant", 20, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("鍏ュ簱鏃堕棿", "warehouseTime", 15, HorizontalAlignment.CENTER));
         columnDto.add(new ExcelColumnDto("鍏ュ簱浜哄憳", "warehouseStaff", 15, HorizontalAlignment.LEFT));
         columnDto.add(new ExcelColumnDto("褰撳墠瀛樻斁浣嶇疆", "currentLocation", 15, HorizontalAlignment.LEFT));
diff --git a/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java b/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java
index 4f1382d..fe05030 100644
--- a/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java
+++ b/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java
@@ -4,6 +4,7 @@
 import com.example.client.service.BaseService;
 import com.example.server.cabin.service.CabinService;
 import com.example.server.progressTrack.Dto.NetworkNodeStatusDto;
+import com.example.server.progressTrack.Dto.StatistProductDto;
 import com.example.server.progressTrack.Dto.TableNodeDto;
 import com.example.server.progressTrack.dao.DjJdgzNetworkLevel3Dao;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
@@ -50,6 +51,10 @@
     @Value("${zt.oss.local-path}")
     private String path;
 
+    public List<StatistProductDto> getStatist(Long level1Id) {
+        return baseDao.getStatist(level1Id);
+    }
+
     enum StatusEnum {zy, jxz, lq, yq, zcwc, cqwc}
 
     String[] fillColorArr = {"#e5e5e5", "#3498DB", "#F1C40F", "#E74C3C", "#2ECC71", "#006400"};
diff --git a/src/main/java/com/example/server/progressTrack/service/DjJdgzShipService.java b/src/main/java/com/example/server/progressTrack/service/DjJdgzShipService.java
index cc60e98..27d3bd6 100644
--- a/src/main/java/com/example/server/progressTrack/service/DjJdgzShipService.java
+++ b/src/main/java/com/example/server/progressTrack/service/DjJdgzShipService.java
@@ -35,4 +35,14 @@
     public JComboBoxItem[] getListByItem() {
         return baseDao.getListByItem();
     }
+
+    public void save(List<DjJdgzShip> shipList) {
+        for (DjJdgzShip ship:shipList){
+            if (ship.getId()!=null){
+                this.update(ship);
+            }else{
+                this.insert(ship);
+            }
+        }
+    }
 }
diff --git a/src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java b/src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java
index ffd8672..78a5b2a 100644
--- a/src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java
+++ b/src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java
@@ -136,7 +136,7 @@
             ) {
                 JSONObject jsonObject = dialgramJsonArray.getJSONObject(i);
                 String shape = jsonObject.get("shape").toString();
-                StatusEnum status = StatusEnum.jxz;//StatusEnum.wqd;
+                StatusEnum status = StatusEnum.jxz;
                 if (shape.equals("custom-text")) {
                     JsonUtils2.setJsonValueByPath(jsonObject, "attrs/body/fill".split("/"), fillColorArr[StatusEnum.zy.ordinal()]);
                     JsonUtils2.setJsonValueByPath(jsonObject, "attrs/text/fill".split("/"), fontColorArr[StatusEnum.zy.ordinal()]);
@@ -1066,7 +1066,7 @@
                 JSONObject jsonObject = modelJsonArray.getJSONObject(i);
                 if (jsonObject.get("shape").equals("custom-circle")) {
                     Object nodeMarker = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/"));
-                    if ("涓撲笟".equals(nodeMarker)) {
+                   /* if ("涓撲笟".equals(nodeMarker)) {
                         fillColorArr[StatusEnum.zy.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString();
                         fontColorArr[StatusEnum.zy.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString();
                     }
@@ -1089,7 +1089,7 @@
                     if ("瓒呮湡瀹屾垚".equals(nodeMarker)) {
                         fillColorArr[StatusEnum.cqwc.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/body/fill".split("/")).toString();
                         fontColorArr[StatusEnum.cqwc.ordinal()] = JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/fill".split("/")).toString();
-                    }
+                    }*/
                     if ("闃舵鍚嶇О".equals(nodeMarker)) {
                         networkDiagramPetsDto.getCirclePet().setJson(jsonObject.toString());
                         int width = Convert.toInt(JsonUtils2.getJsonValueByPath(jsonObject, "size/width".split("/")).toString());
@@ -1305,7 +1305,7 @@
         for (int i = 0; i < jsonArray.size(); i++) {
             String shapeValue = jsonArray.getJSONObject(i).get("shape").toString();
             String idValue = jsonArray.getJSONObject(i).get("id").toString();
-            StatusEnum status = StatusEnum.jxz;//StatusEnum.wqd;
+            StatusEnum status = StatusEnum.jxz;
             if (!shapeValue.equals("edge")) {
                 status = statusMap.get(Long.parseLong(idValue));
                 if ("1888761224410202114".equals(idValue)) {
diff --git a/src/main/java/com/example/server/utils/DownLoadTmpFile.java b/src/main/java/com/example/server/utils/DownLoadTmpFile.java
index 73e175b..23ab479 100644
--- a/src/main/java/com/example/server/utils/DownLoadTmpFile.java
+++ b/src/main/java/com/example/server/utils/DownLoadTmpFile.java
@@ -62,6 +62,7 @@
             // 濡傛灉鐢ㄦ埛鍙栨秷鎿嶄綔锛屼笉鏄剧ず棰濆鎻愮ず
             tempFile.delete(); // 鍒犻櫎涓存椂鏂囦欢
         }
+        frame1.setEnabled(true);
     }
 
     public static void buildTrack(List<DjJdgzTrackRecord> list, String path, JFrame frame1) {
diff --git a/src/main/resources/db/csiczb1.db b/src/main/resources/db/csiczb1.db
index 26c365e..58d6a93 100644
--- a/src/main/resources/db/csiczb1.db
+++ b/src/main/resources/db/csiczb1.db
Binary files differ
diff --git a/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml b/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml
index dad57e4..ffa642e 100644
--- a/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml
+++ b/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml
@@ -125,6 +125,60 @@
             and b.name LIKE '%${name}%'
         </if>
     </select>
+    <select id="getStatist" resultType="com.example.server.progressTrack.Dto.StatistProductDto">
+        SELECT
+            a.id,
+            CASE WHEN a.pid = 0 THEN a.NAME ELSE '    ' || a.NAME END AS name,
+            CASE WHEN a.pid = 0 THEN '' || a.id ELSE '' || a.pid || a.SORT END AS sort,
+            COUNT(DISTINCT CASE WHEN fvp.process_name = '璁惧鎷嗗嵏鍑鸿埍' THEN b.id END) AS cxsl,
+            COUNT(DISTINCT CASE WHEN fvp.process_name = '璁惧鍒嗕氦' THEN b.id END) AS fjsl,
+            COUNT(DISTINCT CASE WHEN fvp.process_name = '鎷嗘閴村畾' THEN b.id END) AS jdsl,
+            COUNT(DISTINCT CASE WHEN fvp.process_name = '璁惧杩斿巶' THEN b.id END) AS fcsl,
+            COUNT(DISTINCT CASE WHEN fvp.process_name = '鍥炶' THEN b.id END) AS hzsl,
+            COUNT(DISTINCT CASE WHEN all_complete.network_id IS NOT NULL THEN b.id END) AS wcsl
+        FROM
+            dj_sys_teamgroup_class a
+            left JOIN
+            dj_jdgz_network_level3 b ON a.id = b.TEAMGROUP_ID OR a.id = b.DEPT_ID
+            LEFT JOIN dj_jdgz_network_level1 d on d.ID = b.LEVEL1_NETWORK_ID
+                LEFT JOIN (
+                SELECT
+                    network_id,
+                    process_name
+                FROM (
+                         SELECT
+                             c.network_id,
+                             c.process_name,
+                             c.CURRENT_STATUS,
+                             ROW_NUMBER() OVER (
+                                 PARTITION BY c.network_id
+                                 ORDER BY c.sort
+                                 ) AS rn
+                         FROM
+                             dj_jdgz_network_level3_list c
+                         WHERE
+                             (c.CURRENT_STATUS = 0 OR c.CURRENT_STATUS IS NULL) and c.is_delete = 0
+                     ) AS ranked_processes
+                WHERE
+                    ranked_processes.rn = 1
+            ) AS fvp ON b.id = fvp.network_id
+                LEFT JOIN (
+                SELECT
+                    network_id
+                FROM
+                    dj_jdgz_network_level3_list
+                GROUP BY
+                    network_id
+                HAVING
+                    COUNT(CASE WHEN CURRENT_STATUS = 1 THEN 1 END) = COUNT(*)
+            ) AS all_complete ON b.id = all_complete.network_id
+        WHERE
+            a.AREA = 'hld' AND a.IS_DELETE = 0 and d.ship_id = ${level1Id} and d.is_delete =0 and b.is_delete =0
+        GROUP BY
+            a.id, a.name
+        ORDER BY
+            sort;
+    </select>
 
 
 </mapper>
diff --git a/src/main/resources/mapper/user/UserDao.xml b/src/main/resources/mapper/user/UserDao.xml
index 954035a..02ad48e 100644
--- a/src/main/resources/mapper/user/UserDao.xml
+++ b/src/main/resources/mapper/user/UserDao.xml
@@ -18,21 +18,17 @@
             c.id AS deptId,
             b.id AS teamgroupId,
             b.Name AS teamgroup,
-            d.name AS boatFleet,
-            d.id AS boatFleetId
+            a.boat_fleet || 'T' as boatFleet
         FROM
             sys_user a
                 LEFT JOIN
             dj_sys_teamgroup_class b ON b.id = a.teamgroup
                 LEFT JOIN
             dj_sys_teamgroup_class c ON c.id = b.PID
-                LEFT JOIN
-            boat_fleet d ON d.id = a.boat_fleet
         WHERE
             a.is_delete = 0
           AND (b.is_delete = 0 OR b.id IS NULL)
           AND (c.is_delete = 0 OR c.id IS NULL)
-          AND (d.is_delete = 0 OR d.id IS NULL);
     </select>
     <select id="login" resultType="com.example.server.user.model.SysUser">
         SELECT *,COUNT(*) > 0 as exist

--
Gitblit v1.9.1