From 23f02e6b45dd7cf0ab2e7827144913ca59575ea4 Mon Sep 17 00:00:00 2001
From: jinlin <jinlin>
Date: 星期二, 04 三月 2025 18:59:23 +0800
Subject: [PATCH] jar

---
 src/main/java/com/example/client/service/Level1AddOrUpdate.java                            |    2 
 src/main/java/com/example/client/service/Level2ManageService.java                          |   35 
 src/main/resources/mapper/teamgroup/SysTeamGroupClassDao.xml                               |   19 
 src/main/java/com/example/client/service/UserManageService.java                            |   16 
 src/main/java/com/example/server/progressTrack/Dto/StatistDismantDto.java                  |   19 
 src/main/java/com/example/client/service/Level3ViewService.java                            |    4 
 src/main/java/com/example/client/utils/ComplexTable.java                                   |    9 
 src/main/java/com/example/client/service/ExportDismantTrackService.java                    |  217 +++
 src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel2ListService.java |   46 
 src/main/java/com/example/client/service/SubunitService.java                               |  344 +++++
 src/main/resources/templateFile/二级网络图导入模板.xlsx                                             |    0 
 src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel2ListDao.xml                     |    2 
 src/main/java/com/example/server/progressTrack/model/DjJdgzDismantTrack.java               |   21 
 src/main/java/com/example/server/progressTrack/dao/DjJdgzDismantTrackDao.java              |    7 
 src/main/java/com/example/client/Main.java                                                 |    8 
 src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel2ListDao.java         |    3 
 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/utils/CommonTable.java                                    |   38 
 src/main/java/com/example/client/utils/ComplexTableUI.java                                 |  223 ++-
 src/main/java/com/example/client/service/TeamGroupManageService.java                       |  183 --
 src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java                       |   12 
 src/main/java/com/example/client/service/ImportDismantTrackService.java                    |  269 ++++
 src/main/java/com/example/client/service/StatisDismantService.java                         |   92 +
 src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java                      |  170 ++
 src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java      |  377 ++++++
 src/main/java/com/example/server/utils/DownLoadTmpFile.java                                |    2 
 src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml                         |   31 
 src/main/java/com/example/client/service/Level2AddOrUpdate.java                            |   70 
 src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java                   |    2 
 src/main/resources/templateFile/三级网络图导入模板.xlsx                                             |    0 
 src/main/java/com/example/client/service/DismantTrackService.java                          |  378 +++--
 src/main/java/com/example/client/service/TrackRecordManageService.java                     |    4 
 src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java             |    4 
 src/main/java/com/example/server/entity/FieldMetaObjectHandler.java                        |   11 
 src/main/resources/config.properties                                                       |    1 
 src/main/java/com/example/client/service/ImportLevel2Service.java                          |    2 
 src/main/java/com/example/client/service/ImportLevel3Service.java                          |   34 
 src/main/java/com/example/client/service/Level3ManageService.java                          |  188 ++
 src/main/java/com/example/client/service/SubunitAddOrUpdate.java                           |  214 +++
 src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java          |    3 
 src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java     |  223 ++-
 src/main/resources/db/csiczb1.db                                                           |    0 
 src/main/resources/templateFile/子部件导入模板.xlsx                                               |    0 
 src/main/java/com/example/server/teamGroup/service/SysTeamGroupClassService.java           |    4 
 src/main/java/com/example/client/service/UserAddOrUpdate.java                              |   21 
 src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java          |    6 
 src/main/resources/mapper/progressTrack/DjJdgzDismantTrackDao.xml                          |   99 +
 src/main/java/com/example/server/progressTrack/model/TeamEntity.java                       |   24 
 src/main/java/com/example/client/service/StatisReportsService.java                         |    5 
 src/main/java/com/example/server/DataSync/service/DataSyncService.java                     |    4 
 src/main/java/com/example/client/service/MenuService.java                                  |   15 
 src/main/java/com/example/server/progressTrack/model/DjJdgzTrackRecord.java                |    2 
 src/main/resources/application.yml                                                         |    1 
 54 files changed, 2,803 insertions(+), 674 deletions(-)

diff --git a/src/main/java/com/example/client/Login.java b/src/main/java/com/example/client/Login.java
index f19e7c0..13cd379 100644
--- a/src/main/java/com/example/client/Login.java
+++ b/src/main/java/com/example/client/Login.java
@@ -47,6 +47,7 @@
         String password = "admin";
         String site = "";
         String teamGroup = "";
+        String team = "";
 
         String path = Login.class.getClassLoader().getResource("config.properties").getPath();
         InputStream inStream = null;
@@ -70,9 +71,10 @@
             password = properties.get("password").toString();
             site = properties.get("site").toString();
             teamGroup = properties.get("teamGroup").toString();
+            team = properties.get("team").toString();
         } catch (IOException e) {
             e.printStackTrace();
-        }finally {
+        } finally {
             if (reader != null) {
                 try {
                     reader.close();
@@ -136,6 +138,7 @@
 
         String finalSite = site;
         String finalTeamGroup = teamGroup;
+        String finalTeam = team;
         loginButton.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -144,7 +147,7 @@
                 String str = String.valueOf(password); //灏哻har鏁扮粍杞寲涓簊tring绫诲瀷
 
 
-                user = userService.login(name,str);
+                user = userService.login(name, str);
                 exist = user.getExist();
 
 
@@ -165,7 +168,6 @@
                         }
                         properties.setProperty("userName", name);
                         properties.setProperty("password", str);
-                        properties.setProperty("url", "11");
                         properties.store(outputStream, "rxkj");
                         outputStream.close();
                     } catch (FileNotFoundException ex) {
@@ -173,7 +175,7 @@
                     } catch (IOException ep) {
                         ep.printStackTrace();
                     }
-
+                    user.setBoatfleet(finalTeam);
                     CacheUtils.put("user", "user", user);
                     CacheUtils.put("site", "site", finalSite);
                     CacheUtils.put("teamGroup", "teamGroup", finalTeamGroup);
diff --git a/src/main/java/com/example/client/Main.java b/src/main/java/com/example/client/Main.java
index 6776972..4bd5742 100644
--- a/src/main/java/com/example/client/Main.java
+++ b/src/main/java/com/example/client/Main.java
@@ -64,14 +64,8 @@
         Font font = new Font("瀹嬩綋", Font.BOLD, 23);
         setUIFontService.setFont(font);
 
-        try {
-            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
         JPopupMenu.setDefaultLightWeightPopupEnabled(false);
-        
+
         JFrame frame = new JFrame("杩涘害璺熻釜");
         frame.setSize(width, height);
         frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
diff --git a/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java b/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java
new file mode 100644
index 0000000..cf8ac81
--- /dev/null
+++ b/src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java
@@ -0,0 +1,170 @@
+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.ComplexTable;
+import com.example.server.cabin.service.CabinService;
+import com.example.server.progressTrack.Dto.StatistReportsDto;
+import com.example.server.progressTrack.model.DjJdgzDismantTrack;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
+import com.example.server.progressTrack.service.DjJdgzDismantTrackService;
+import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
+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;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class DismantTrackAddOrUpdate {
+    @Autowired
+    private ExportDismantTrackService exportDismantTrackService;
+    @Autowired
+    private ImportDismantTrackService importDismantTrackService;
+    @Autowired
+    private DjJdgzDismantTrackService djJdgzDismantTrackService;
+    @Autowired
+    private StatisDismantService statisDismantService;
+    @Autowired
+    private CabinService cabinService;
+    private  JTable trackTable;
+    private   List<ColumnDto> columnDto;
+
+    public JPanel createTrack(Integer width, Integer height, DjJdgzNetworkLevel3 djJdgzNetworkLevel3,JFrame frame) {
+        JPanel panel = new JPanel(new BorderLayout());
+        panel.setPreferredSize(new Dimension(width, height));
+
+        JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+        topJpanel.setPreferredSize(new Dimension(width - 10, 37));
+
+        JPanel centerJpanel = new JPanel();
+        centerJpanel.setPreferredSize(new Dimension(width - 20, height - 100));
+
+        panel.add(centerJpanel, BorderLayout.CENTER);
+        panel.add(topJpanel, BorderLayout.NORTH);
+
+        JButton btnTj = new JButton("缁熻鎶ヨ〃");
+        JButton btnExport = new JButton("瀵煎嚭鎷嗗嵏鎶ヨ〃");
+        JButton btnSave = new JButton("淇濆瓨");
+        JButton btnImport = new JButton("鎵归噺瀵煎叆");
+
+        topJpanel.add(btnTj);
+        topJpanel.add(btnExport);
+        topJpanel.add(btnSave);
+        topJpanel.add(btnImport);
+
+        List<DjJdgzDismantTrack> list = djJdgzDismantTrackService.getList(djJdgzNetworkLevel3.getId(), null);
+        List<TableButton> buttonList = new ArrayList<>();
+        buttonList.add(new TableButton("edit", "缂栬緫"));
+        JComboBoxItem[] cabinList = cabinService.getList();
+        JComboBoxItem[] statusList = {
+                new JComboBoxItem(0, "杩涜涓�"),
+                new JComboBoxItem(1, "宸插畬鎴�"),
+        };
+
+        // 鍒涘缓宸︿晶琛ㄦ牸
+        //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
+        columnDto = new ArrayList<>();
+        columnDto.add(new ColumnDto("搴忓彿", "", 50, "autoCreate", false, null, null));
+        columnDto.add(new ColumnDto("鑸卞", "cabinId", 120, "dict", false, null, cabinList));
+        columnDto.add(new ColumnDto("閮ㄤ欢鍚嶇О", "name", 200, null, false, null, null));
+        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("鍑鸿埍鏃堕棿", "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("閫�閲嶆椂闂�", "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("鍏ュ簱鏃堕棿", "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));
+        columnDto.add(new ColumnDto("鐘舵��", "status", 120, "dict", true, null, statusList));
+
+        trackTable = CommonTable.createCommonTable(list, columnDto);
+        trackTable.setRowHeight(25);
+        trackTable.setAutoCreateRowSorter(true);
+        trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+
+     /*   Object[][] headerRows = new Object[2][18];
+        headerRows[0] = new Object[]{"搴忓彿","鑸卞","閮ㄤ欢鍚嶇О","鎷嗗嵏闃舵", ComplexTable.mergeCellX,ComplexTable.mergeCellX,ComplexTable.mergeCellX,
+                "鍑鸿埍闃舵",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};
+
+        String[][] body = CommonTable.getRowData(list,columnDto);
+
+        trackTable = new ComplexTable(headerRows,body);
+        CommonTable.setColumnType(columnDto, trackTable);*/
+
+        btnTj.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                statisDismantService.createTable(frame,djJdgzNetworkLevel3.getLevel1NetworkId());
+            }
+        });
+
+        btnExport.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                exportDismantTrackService.openDialog(frame);
+            }
+        });
+
+        btnSave.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                SysUser user = (SysUser) CacheUtils.get("user", "user");
+                if (user.getTeamgroup()==null||user.getTeamgroup().equals(djJdgzNetworkLevel3.getTeamgroupId())){
+                    CommonTable.saveTableList(list, trackTable, columnDto);
+                    djJdgzDismantTrackService.save(list);
+                }else{
+                    JOptionPane.showMessageDialog(null, "涓嶅彲鎿嶄綔鍏朵粬涓撲笟鏁版嵁", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                }
+            }
+        });
+
+        btnImport.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                importDismantTrackService.FileUpload(djJdgzNetworkLevel3.getId(),frame);
+            }
+        });
+
+
+        JScrollPane scrollPane = new JScrollPane(trackTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+        scrollPane.setViewportView(trackTable);
+        scrollPane.setPreferredSize(new Dimension(width - 20, height - 130));
+        centerJpanel.add(scrollPane);
+
+        return panel;
+    }
+    public void refreshTable(Long level3Id){
+        List<DjJdgzDismantTrack> list = djJdgzDismantTrackService.getList(level3Id, null);
+        CommonTable.refreshTable(list, columnDto, trackTable);
+        trackTable.setRowHeight(25);
+        trackTable.setAutoCreateRowSorter(true);
+        trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+    }
+
+}
+
+
+
+
diff --git a/src/main/java/com/example/client/service/DismantTrackService.java b/src/main/java/com/example/client/service/DismantTrackService.java
index 3e5a248..730b9f8 100644
--- a/src/main/java/com/example/client/service/DismantTrackService.java
+++ b/src/main/java/com/example/client/service/DismantTrackService.java
@@ -2,21 +2,14 @@
 
 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.GBC;
-import com.example.client.utils.MultiSelectComboBox;
 import com.example.server.cabin.service.CabinService;
-import com.example.server.progressTrack.Dto.NetworkNodeStatusDto;
-import com.example.server.progressTrack.model.DjJdgzDismantTrack;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
-import com.example.server.progressTrack.model.DjJdgzTrackRecord;
-import com.example.server.progressTrack.service.DjJdgzDismantTrackService;
+import com.example.server.progressTrack.model.DjJdgzShip;
 import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
-import com.example.server.progressTrack.service.NetWorkDiagramService;
+import com.example.server.progressTrack.service.DjJdgzShipService;
 import com.example.server.teamGroup.service.SysTeamGroupClassService;
-import com.mxgraph.swing.mxGraphComponent;
-import com.mxgraph.view.mxGraph;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -24,7 +17,9 @@
 import java.awt.*;
 import java.awt.event.*;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 @Service
@@ -34,50 +29,128 @@
     @Autowired
     private SysTeamGroupClassService sysTeamGroupClassService;
     @Autowired
-    private DjJdgzDismantTrackService djJdgzDismantTrackService;
+    private DismantTrackAddOrUpdate addOrUpdate;
     @Autowired
     private CabinService cabinService;
+    @Autowired
+    private DjJdgzShipService djJdgzShipService;
+    private List<DjJdgzNetworkLevel3> list;
 
-    public JPanel createTable(Integer width, Integer height) {
-        height = height - 100;
+    public JPanel createTable(Integer width, Integer height, JFrame frame) {
         JPanel panel = new JPanel();
+        panel.setPreferredSize(new Dimension(width, height));
 
         JPanel jLeft = new JPanel(new BorderLayout());
-        JPanel top = new JPanel(new BorderLayout());
-        jLeft.setPreferredSize(new Dimension(width / 3 - 20, height));
-        top.setPreferredSize(new Dimension(width / 3 - 20, 100));
+
+        JPanel top = new JPanel();
+
+        jLeft.setPreferredSize(new Dimension(600, height));
+        top.setPreferredSize(new Dimension(600, 100));
+
+        GridBagLayout layout = new GridBagLayout();
+        top.setLayout(layout);
 
         // 鍒涘缓宸︿晶琛ㄦ牸
-        List<ColumnDto> columnDto = new ArrayList<>();
-        List<DjJdgzNetworkLevel3> list = level3Service.getList(null);
 
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
         JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
         JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
         JComboBoxItem[] cabinList = cabinService.getList();
         String[] typeList = new String[]{
-                "鏀硅","鍔犺","鎹㈣","鏀硅繘鎬т慨鐞�"
+                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
+        List<DjJdgzShip> shipList = djJdgzShipService.getList();
+        Map<String, Long> shipMap = new HashMap<>();
+
+        JLabel JLabel0 = new JLabel("宸ョ▼");
+        JComboBox comboBox = new JComboBox();
+
+        comboBox.setPreferredSize(new Dimension(112, 28));
+        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());
 
         JLabel JLabel1 = new JLabel("閮ㄩ棬");
         JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>(deptList);
-        comboBox1.setPreferredSize(new Dimension(100, 28));
+        comboBox1.setPreferredSize(new Dimension(112, 28));
 
         JComboBoxItem[] teamList1 = sysTeamGroupClassService.getTeamList(deptList[0].getId());
 
         JLabel JLabel2 = new JLabel("涓撲笟");
         JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>(teamList1);
-        comboBox2.setPreferredSize(new Dimension(100, 28));
+        comboBox2.setPreferredSize(new Dimension(112, 28));
 
-        JLabel JLabel3= new JLabel("鑸卞");
-        JComboBox<JComboBoxItem> comboBox3 = new JComboBox(cabinList);
-        comboBox3.setPreferredSize(new Dimension(100, 28));
+        JLabel JLabel3 = new JLabel("鑸卞");
+        JComboBox<JComboBoxItem> comboBox3 = new JComboBox<>(cabinList);
+        comboBox3.setPreferredSize(new Dimension(112, 28));
 
         JLabel JLabel4 = new JLabel("绫诲埆");
         JComboBox<String> comboBox4 = new JComboBox<>(typeList);
-        comboBox3.setPreferredSize(new Dimension(100, 28));
+        comboBox4.setPreferredSize(new Dimension(112, 28));
 
-        JTextField sb = new JTextField();
+        JTextField sb = new JTextField(10);
+        JButton query = new JButton("鏌ヨ");
+
+        top.add(JLabel0, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(JLabel1, new GBC(2, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox1, new GBC(3, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(JLabel2, new GBC(4, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox2, new GBC(5, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        top.add(JLabel3, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox3, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(JLabel4, new GBC(2, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox4, new GBC(3, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(sb, new GBC(4, 1, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(query, new GBC(6, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        jLeft.add(top, BorderLayout.NORTH);
+
+        List<ColumnDto> columnDto = new ArrayList<>();
+        list = level3Service.getList(null, deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],null);
+
+        columnDto.add(new ColumnDto("搴忓彿", "", 60, "autoCreate", false, null, null));
+        columnDto.add(new ColumnDto("璁惧鍚嶇О", "name", 112, null, false, null, null));
+        columnDto.add(new ColumnDto("閮ㄩ棬", "deptId", 100, "dict", false, null, deptList));
+        columnDto.add(new ColumnDto("涓撲笟", "teamgroupId", 100, "dict", false, null, teamList));
+        columnDto.add(new ColumnDto("鑸卞", "cabinId", 100, "dict", false, null, cabinList));
+        columnDto.add(new ColumnDto("绫诲埆", "type", 100, null, false, null, null));
+
+        JTable subTable = CommonTable.createCommonTable(list, columnDto);
+        subTable.setRowHeight(25);
+        subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
+
+        comboBox.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId());
+                        }
+                    }
+                });
+            }
+        });
 
         comboBox1.addItemListener(new ItemListener() {
             @Override
@@ -89,42 +162,149 @@
 
                         JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(selectedId);
                         comboBox2.setModel(new DefaultComboBoxModel<>(teamList));
-                        comboBox2.setSelectedIndex(-1);
+                        comboBox2.setSelectedIndex(0);
+
+                        String content = comboBox.getSelectedItem().toString();
+                        JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                        JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                        JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                        String type = comboBox4.getSelectedItem().toString();
+
+                        Long shipId = shipMap.get(content);
+                        list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                        CommonTable.refreshTable(list, columnDto, subTable);
+                        subTable.setRowHeight(25);
+                        subTable.setAutoCreateRowSorter(true);
+                        subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                        subTable.addMouseListener(new MouseAdapter() {
+                            public void mouseClicked(MouseEvent e) {
+                                // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                                if (e.getButton() == MouseEvent.BUTTON1) {
+                                    // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                                    int r = subTable.getSelectedRow();
+                                    DjJdgzNetworkLevel3 data = list.get(r);
+                                    addOrUpdate.refreshTable(data.getId());
+                                }
+                            }
+                        });
                     }
                 }
             }
         });
-        top.add(JLabel1, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        top.add(comboBox1, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-        top.add(JLabel2, new GBC(2, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        top.add(comboBox2, new GBC(3, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        comboBox2.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
 
-        top.add(JLabel3, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        top.add(comboBox3, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-        top.add(JLabel4, new GBC(2, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        top.add(comboBox4, new GBC(3, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
 
-        top.add(sb, new GBC(0, 2, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId());
+                        }
+                    }
+                });
+            }
+        });
+        comboBox3.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
 
-        jLeft.add(top,BorderLayout.NORTH);
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
 
-        columnDto.add(new ColumnDto("搴忓彿", "", width / 20 - 10, "autoCreate", false, null,null));
-        columnDto.add(new ColumnDto("閮ㄩ棬", "deptId", width / 18, "dict", false, null,deptList));
-        columnDto.add(new ColumnDto("涓撲笟", "teamgroupId", width / 18, "dict", false, null,teamList));
-        columnDto.add(new ColumnDto("鑸卞", "cabinId", width / 18, "dicts", false, null,cabinList));
-        columnDto.add(new ColumnDto("绫诲埆", "type", width / 18, null, false, null,null));
-        columnDto.add(new ColumnDto("璁惧鍚嶇О", "name", width / 18, null, false, null,null));
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId());
+                        }
+                    }
+                });
+            }
+        });
+        comboBox4.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
 
-        JTable subTable = CommonTable.createCommonTable(list, columnDto);
-        subTable.setRowHeight(25);
-        subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId());
+                        }
+                    }
+                });
+            }
+        });
+
+        query.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                list = level3Service.getList(null, null, null, null, null,sb.getText());
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId());
+                        }
+                    }
+                });
+            }
+        });
 
         JScrollPane scrollTable = new JScrollPane(subTable);
         jLeft.add(scrollTable, BorderLayout.CENTER);
 
-        JTable trackTable = new JTable();
-        JPanel track = this.createTrack(width,height,list.get(0),trackTable);
-        trackTable.setPreferredSize(new Dimension(width - width / 3, height));
+        JPanel track = addOrUpdate.createTrack(width - 620, height, list.get(0),frame);
+
 
         // 鍒涘缓姘村钩鍒嗗壊闈㈡澘
         JSplitPane hSplitPane = new JSplitPane(
@@ -132,7 +312,7 @@
                 jLeft,
                 track
         );
-        hSplitPane.setDividerLocation(width / 4);
+        hSplitPane.setDividerLocation(620);
         hSplitPane.setDividerSize(10);
         hSplitPane.setOneTouchExpandable(true);
         hSplitPane.setContinuousLayout(true);
@@ -146,108 +326,10 @@
                     // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
                     int r = subTable.getSelectedRow();
                     DjJdgzNetworkLevel3 data = list.get(r);
+                    addOrUpdate.refreshTable(data.getId());
                 }
             }
         });
-
-        return panel;
-    }
-
-    private JPanel createTrack(Integer width, Integer height, DjJdgzNetworkLevel3 djJdgzNetworkLevel3, JTable trackTable) {
-        JPanel panel = new JPanel();
-
-        JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
-        topJpanel.setPreferredSize(new Dimension(width, 37));
-        topJpanel.setBackground(Color.WHITE);
-
-        JPanel centerJpanel = new JPanel();
-        centerJpanel.setPreferredSize(new Dimension(width - 20, height - 100));
-        centerJpanel.setBackground(Color.WHITE);
-        panel.add(topJpanel, BorderLayout.NORTH);
-        panel.add(centerJpanel, BorderLayout.CENTER);
-
-        JComboBoxItem[] cabinList = cabinService.getList();
-        String[] typeList = new String[]{
-                "鏀硅","鍔犺","鎹㈣","鏀硅繘鎬т慨鐞�"
-        };
-
-        JComboBox<JComboBoxItem> comboBox = new JComboBox(cabinList);
-        comboBox.setPreferredSize(new Dimension(100, 28));
-
-        JComboBox<String> comboBox2 = new JComboBox<>(typeList);
-        comboBox2.setPreferredSize(new Dimension(100, 28));
-
-        JButton btnTj = new JButton("缁熻鎶ヨ〃");
-        JButton btnExport = new JButton("瀵煎嚭鎷嗗嵏鎶ヨ〃");
-
-        topJpanel.add(btnTj);
-        topJpanel.add(btnExport);
-        topJpanel.add(comboBox);
-        topJpanel.add(comboBox2);
-
-        comboBox.setPreferredSize(new Dimension(300, 28));
-        comboBox2.setPreferredSize(new Dimension(300, 28));
-
-        List<DjJdgzDismantTrack> list = djJdgzDismantTrackService.getList(djJdgzNetworkLevel3.getId(),null);
-        List<TableButton> buttonList = new ArrayList<>();
-        buttonList.add(new TableButton("edit", "缂栬緫"));
-
-        // 鍒涘缓宸︿晶琛ㄦ牸
-        List<ColumnDto> columnDto = new ArrayList<>();
-        //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
-        columnDto.add(new ColumnDto("搴忓彿", "", 50, "autoCreate", false, null, null));
-        columnDto.add(new ColumnDto("閮ㄩ棬", "deptId", 160, null, false, null, null));
-        columnDto.add(new ColumnDto("涓撲笟", "teamgroupId", 160, null, false, null, null));
-        columnDto.add(new ColumnDto("鑸卞", "cabinId", 120, null, false, null, null));
-        columnDto.add(new ColumnDto("閮ㄤ欢鍚嶇О", "name", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鎷嗗嵏鏃堕棿", "dismantTime", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鎷嗗嵏鍗曚綅", "dismantUnit", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鎷嗗嵏浜哄憳", "dismantStaff", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鎷嗗嵏鍔╀慨鑹囧憳", "dismantAssistant", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鍑鸿埍鏃堕棿", "exitTime", 200, "", true, buttonList, null));
-        columnDto.add(new ColumnDto("鍑鸿埍鍗曚綅", "exitUnit", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鍑鸿埍浜哄憳", "exitStaff", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鍑鸿埍鍔╀慨鑹囧憳", "exitAssistant", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("閫�閲嶆椂闂�", "returnWeightTime", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("绉伴噸鍛�", "weigher", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("閫�閲嶉噸閲�", "returnWeight", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("閫�閲嶅姪淇墖鍛�", "returnWeightAssistant", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鍏ュ簱鏃堕棿", "warehouseTime", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("鍏ュ簱浜哄憳", "warehouseStaff", 200, null, false, null, null));
-        columnDto.add(new ColumnDto("褰撳墠瀛樻斁浣嶇疆", "currentLocation", 200, null, false, null, null));
-
-        trackTable = CommonTable.createCommonTable(list, columnDto);
-        trackTable.setRowHeight(25);
-        trackTable.setAutoCreateRowSorter(true);
-        trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-
-        trackTable.addMouseListener(new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-
-            }
-        });
-
-        btnTj.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-
-            }
-        });
-
-        btnExport.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-
-            }
-        });
-
-
-        JScrollPane scrollPane = new JScrollPane(trackTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
-        scrollPane.setViewportView(trackTable);
-        scrollPane.getViewport().setBackground(Color.WHITE);
-        scrollPane.setPreferredSize(new Dimension(width - 20, height - 120));
-        centerJpanel.add(scrollPane);
 
         return panel;
     }
diff --git a/src/main/java/com/example/client/service/ExportDismantTrackService.java b/src/main/java/com/example/client/service/ExportDismantTrackService.java
new file mode 100644
index 0000000..3dfd520
--- /dev/null
+++ b/src/main/java/com/example/client/service/ExportDismantTrackService.java
@@ -0,0 +1,217 @@
+package com.example.client.service;
+
+import com.example.client.dto.JComboBoxItem;
+import com.example.client.utils.CommonTable;
+import com.example.client.utils.GBC;
+import com.example.client.utils.RequiredLabel;
+import com.example.server.progressTrack.service.*;
+import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import org.jdesktop.swingx.JXDatePicker;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.io.File;
+import java.util.Date;
+
+@Service
+public class ExportDismantTrackService {
+    @Autowired
+    private DjJdgzDismantTrackService djJdgzDismantTrackService;
+    @Autowired
+    private DjJdgzNetworkLevel1Service level1Service;
+    @Autowired
+    private DjJdgzNetworkLevel3Service djJdgzNetworkLevel3Service;
+    @Autowired
+    private DjJdgzNetworkLevel3ListService djJdgzNetworkLevel3ListService;
+    @Autowired
+    private SysTeamGroupClassService sysTeamGroupClassService;
+
+    public void openDialog(JFrame jFrame) {
+        JFrame frame1 = new JFrame("鎷嗗嵏杩涘害琛ㄥ鍑烘潯浠�");
+        frame1.setSize(1000, 600);
+        frame1.setResizable(false);
+        frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+        frame1.setLocationRelativeTo(null);
+        frame1.setVisible(true);
+        frame1.addWindowListener(new WindowAdapter() {
+            //娣诲姞绗簩涓晫闈㈢殑鍏抽棴浜嬩欢:
+            public void windowClosing(WindowEvent e) {
+                //娣诲姞浜嬩欢:
+                jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
+
+        GridBagLayout layout = new GridBagLayout();
+        frame1.setLayout(layout);
+
+        JComboBoxItem[] statusList = {
+                new JComboBoxItem(0, "杩涜涓�"),
+                new JComboBoxItem(1, "宸插畬鎴�"),
+        };
+        JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
+        JComboBoxItem[] teamGroupList = sysTeamGroupClassService.getList();
+
+        JComboBoxItem[] projectList = level1Service.getProjectList();
+        RequiredLabel JLabel0 = new RequiredLabel("璇烽�夋嫨宸ョ▼");
+        JComboBox<JComboBoxItem> comboBox = new JComboBox<>(projectList);
+        comboBox.setPreferredSize(new Dimension(300, 28));
+        comboBox.setSelectedIndex(-1);
+
+        JLabel JLabel01 = new JLabel("閮ㄩ棬");
+        JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>(deptList);
+        comboBox1.setPreferredSize(new Dimension(300, 28));
+        comboBox1.setSelectedIndex(-1);
+
+        JLabel JLabel1 = new JLabel("璇烽�夋嫨涓撲笟");
+        JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>();
+        comboBox2.setPreferredSize(new Dimension(300, 28));
+        comboBox2.setSelectedIndex(-1);
+
+        JLabel JLabel2 = new JLabel("璇烽�夋嫨璁惧");
+        JComboBox<JComboBoxItem> comboBox3 = new JComboBox<>();
+        comboBox3.setPreferredSize(new Dimension(300, 28));
+        comboBox3.setSelectedIndex(-1);
+
+        JLabel JLabel4 = new JLabel("璇烽�夋嫨瀹屾垚鎯呭喌");
+        JComboBox<JComboBoxItem> comboBox5 = new JComboBox<>(statusList);
+        comboBox5.setPreferredSize(new Dimension(300, 28));
+        comboBox5.setSelectedIndex(-1);
+
+        comboBox.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    JComboBoxItem selectedItem = (JComboBoxItem) comboBox.getSelectedItem();
+                    JComboBoxItem selectedItem1 = (JComboBoxItem) comboBox1.getSelectedItem();
+                    JComboBoxItem selectedItem2 = (JComboBoxItem) comboBox2.getSelectedItem();
+
+                    Long projectId = selectedItem == null ? null : selectedItem.getId();
+                    Long deptId = selectedItem1 == null ? null : selectedItem1.getId();
+                    Long teamId = selectedItem2 == null ? null : selectedItem2.getId();
+
+                    JComboBoxItem[] level3List = djJdgzNetworkLevel3Service.getListByExport(projectId, deptId, teamId);
+                    comboBox3.setModel(new DefaultComboBoxModel<>(level3List));
+                    comboBox3.setSelectedIndex(-1);
+                }
+            }
+        });
+
+        comboBox1.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    JComboBoxItem selectedItem = (JComboBoxItem) comboBox.getSelectedItem();
+                    JComboBoxItem selectedItem1 = (JComboBoxItem) comboBox1.getSelectedItem();
+                    JComboBoxItem selectedItem2 = (JComboBoxItem) comboBox2.getSelectedItem();
+
+                    Long projectId = selectedItem == null ? null : selectedItem.getId();
+                    Long deptId = selectedItem1 == null ? null : selectedItem1.getId();
+                    Long teamId = selectedItem2 == null ? null : selectedItem2.getId();
+
+                    JComboBoxItem[] level3List = djJdgzNetworkLevel3Service.getListByExport(projectId, deptId, teamId);
+                    comboBox3.setModel(new DefaultComboBoxModel<>(level3List));
+                    comboBox3.setSelectedIndex(-1);
+                }
+            }
+        });
+        comboBox2.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    JComboBoxItem selectedItem = (JComboBoxItem) comboBox.getSelectedItem();
+                    JComboBoxItem selectedItem1 = (JComboBoxItem) comboBox1.getSelectedItem();
+                    JComboBoxItem selectedItem2 = (JComboBoxItem) comboBox2.getSelectedItem();
+
+                    Long projectId = selectedItem == null ? null : selectedItem.getId();
+                    Long deptId = selectedItem1 == null ? null : selectedItem1.getId();
+                    Long teamId = selectedItem2 == null ? null : selectedItem2.getId();
+
+                    JComboBoxItem[] level3List = djJdgzNetworkLevel3Service.getListByExport(projectId, deptId, teamId);
+                    comboBox3.setModel(new DefaultComboBoxModel<>(level3List));
+                    comboBox3.setSelectedIndex(-1);
+                }
+            }
+        });
+
+        JButton exportButton = new JButton("瀵煎嚭");
+
+        frame1.add(JLabel0, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(comboBox, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        frame1.add(JLabel01, 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(JLabel1, new GBC(0, 2, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(comboBox2, new GBC(1, 2, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        frame1.add(JLabel2, new GBC(0, 3, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(comboBox3, new GBC(1, 3, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        frame1.add(JLabel4, new GBC(0, 4, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(comboBox5, new GBC(1, 4, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        frame1.add(exportButton, new GBC(0, 5, 2, 1).setWeight(0, 0));
+
+        exportButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                JComboBoxItem projectItem = (JComboBoxItem) comboBox.getSelectedItem();
+                JComboBoxItem deptItem = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem teamGroupItem = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem level3NetworkItem = (JComboBoxItem) comboBox3.getSelectedItem();
+
+                JComboBoxItem statusItem = (JComboBoxItem) comboBox5.getSelectedItem();
+
+
+
+                Long level1NetworkId = null;
+                Long deptId = null;
+                Long teamGroupId = null;
+                Long level3NetworkId = null;
+                Long level3NodeId = null;
+                Integer status = null;
+
+                if (projectItem != null) {
+                    level1NetworkId = projectItem.getId();
+                } else {
+                    JOptionPane.showMessageDialog(null, "娌℃湁閫夋嫨宸ョ▼", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                    return;
+                }
+                if (teamGroupItem != null) {
+                    teamGroupId = teamGroupItem.getId();
+                }
+                if (level3NetworkItem != null) {
+                    level3NetworkId = level3NetworkItem.getId();
+                }
+                if (deptItem != null) {
+                    deptId = deptItem.getId();
+                }
+                if (statusItem != null) {
+                    status = Math.toIntExact(statusItem.getId());
+                }
+
+                String filePath = "鎷嗗嵏杩涘害鎶ヨ〃.xlsx";
+                djJdgzDismantTrackService.exportExcel(filePath,deptId, teamGroupId, level1NetworkId, level3NetworkId, status);
+                JFileChooser fileChooser = new JFileChooser();
+                fileChooser.setSelectedFile(new File(filePath));
+                int result = fileChooser.showSaveDialog(frame1);
+
+                if (result == JFileChooser.APPROVE_OPTION) {
+                    File selectedFile = fileChooser.getSelectedFile();
+                    // 灏嗘枃浠剁Щ鍔ㄥ埌鐢ㄦ埛閫夋嫨鐨勪綅缃�
+                    File originalFile = new File(filePath);
+                    originalFile.renameTo(selectedFile);
+                    JOptionPane.showMessageDialog(frame1, "鏂囦欢瀵煎嚭鎴愬姛");
+                } else {
+                    JOptionPane.showMessageDialog(frame1, "鏂囦欢瀵煎嚭鍙栨秷");
+                }
+            }
+        });
+
+    }
+}
+
diff --git a/src/main/java/com/example/client/service/ImportDismantTrackService.java b/src/main/java/com/example/client/service/ImportDismantTrackService.java
new file mode 100644
index 0000000..3f555e1
--- /dev/null
+++ b/src/main/java/com/example/client/service/ImportDismantTrackService.java
@@ -0,0 +1,269 @@
+package com.example.client.service;
+
+import com.example.client.dto.ColumnDto;
+import com.example.client.dto.JComboBoxItem;
+import com.example.client.utils.*;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
+import com.example.server.progressTrack.service.*;
+import com.example.server.utils.DownLoadTmpFile;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableModel;
+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.io.File;
+import java.util.Date;
+import java.util.List;
+
+
+@Service
+public class ImportDismantTrackService {
+    private JTable table;
+    private JFrame frame;
+    @Value("${data.imgDir}")
+    private String imgPath;
+    private File selectedFiles;
+    @Value("${data.tmp-path}")
+    private String tmpPath;
+    @Autowired
+    DjJdgzDismantTrackService djJdgzDismantTrackService;
+    @Autowired
+    SubunitAddOrUpdate addOrUpdate;
+
+
+    public void FileUpload(Long level3Id, JFrame jFrame) {
+        frame = new JFrame("瀵煎叆");
+        frame.setSize(500, 300);
+        frame.setResizable(true);
+        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+        frame.setLocationRelativeTo(null);
+        frame.setVisible(true);
+        GridBagLayout layout = new GridBagLayout();
+        frame.setLayout(layout);
+
+        table = new JTable();
+        table.setRowHeight(40);
+        DefaultTableModel model = new DefaultTableModel();
+        String[] columnIdentifiers = {"鏂囦欢鍦板潃", "鎿嶄綔"};//琛ㄥご
+
+
+        JButton downloadbtn = new JButton("瀛愰儴浠舵ā鏉夸笅杞�");
+
+
+        downloadbtn.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                DownLoadTmpFile.down(tmpPath + "瀛愰儴浠跺鍏ユā鏉�.xlsx", frame);
+            }
+        });
+
+        JScrollPane scrolltable = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+
+        scrolltable.setViewportView(table);
+        scrolltable.getViewport().setBackground(Color.WHITE);
+
+        JButton browseButton = new JButton("閫夋嫨鏂囦欢");
+        JButton uploadButton = new JButton("涓婁紶鏂囦欢");
+
+
+        frame.add(downloadbtn, new GBC(0, 0, 2, 1).setFill(GBC.BOTH).setInsets(5));
+
+        frame.add(browseButton, new GBC(0, 1, 1, 1).setWeight(0, 1).setInsets(5));
+        frame.add(scrolltable, new GBC(1, 1, 3, 1).setFill(GBC.BOTH).setWeight(0, 1).setInsets(5));
+
+        frame.add(uploadButton, new GBC(0, 2, 4, 1).setWeight(1, 0));
+
+        browseButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                Boolean flag = true;
+                // 淇濆瓨褰撳墠鐨勫瑙傝缃�
+                LookAndFeel savedLookAndFeel = UIManager.getLookAndFeel();
+
+                // 璁剧疆鏂囦欢閫夋嫨鍣ㄥ瑙�
+                try {
+                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                }
+
+                JFileChooser fileChooser = new JFileChooser();
+
+                fileChooser.setDialogTitle("閫夋嫨鏂囦欢");
+                fileChooser.setPreferredSize(new Dimension(800, 500));
+
+
+                fileChooser.setMultiSelectionEnabled(true);
+
+                //鎭㈠澶栬锛岄伩鍏嶆敼鍙樻墍鏈夌粍浠跺瑙�
+                try {
+                    UIManager.setLookAndFeel(savedLookAndFeel);
+                } catch (UnsupportedLookAndFeelException ed) {
+                    ed.printStackTrace();
+                }
+
+                int result = fileChooser.showOpenDialog(frame);
+                if (result == JFileChooser.FILES_ONLY) {
+                    selectedFiles = fileChooser.getSelectedFile();
+
+                    Integer oldNum = model.getRowCount();
+                    String[][] data = new String[oldNum + 1][2];
+                    for (int i = 0; i < oldNum; i++) {
+                        data[i][0] = model.getValueAt(i, 0).toString();
+                    }
+
+                    String suffix = selectedFiles.getName().substring(selectedFiles.getName().lastIndexOf("."));
+                    if (suffix.equals(".xlsx") || suffix.equals(".xls")) {
+                        data[oldNum][0] = selectedFiles.getPath();
+                    } else {
+                        flag = false;
+
+                    }
+
+                    if (!flag) {
+                        JOptionPane.showMessageDialog(null, "鍙兘涓婁紶.xlsx鎴�.xls鐨勬枃浠讹紝涓斾笉瓒呰繃2G", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                        return;
+                    }
+
+                    model.setDataVector(data, columnIdentifiers);
+                    table.setModel(model);
+                    table.getColumnModel().getColumn(0).setPreferredWidth(600);
+                    table.getColumnModel().getColumn(1).setPreferredWidth(100);
+
+
+                    table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
+                    table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
+                    table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null, null));
+
+                } else {
+                    Object[] options = {"OK ", "CANCEL "};
+                    JOptionPane.showOptionDialog(null, "閫夋嫨鐨勬枃浠朵笉姝g‘ ", "鎻愮ず", JOptionPane.DEFAULT_OPTION,
+                            JOptionPane.WARNING_MESSAGE, null, options, options[0]);
+                }
+            }
+        });
+        uploadButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                // 鍒涘缓鏃嬭浆绛夊緟妗嗙殑瀹炰緥锛堝亣璁網aitUtil鏄竴涓嚜瀹氫箟鐨凷wing缁勪欢锛�
+                final WaitUtil waitUtil = new WaitUtil(imgPath, "鏂囦欢姝e湪瀵煎叆锛岃绋嶅��");
+
+                // 寮�濮嬩笂浼犳枃浠剁殑寮傛浠诲姟
+                SwingWorker<String, Void> sw = new SwingWorker<String, Void>() {
+                    @Override
+                    protected String doInBackground() throws Exception {
+                        // 涓婁紶鏂囦欢鐨勯�昏緫
+                        StringBuilder result = new StringBuilder();
+
+                        // 浠庣涓�鍒楋紙绱㈠紩涓�0锛夎幏鍙栨暟鎹�
+                        String data = model.getValueAt(0, 0).toString();
+                        // 灏嗘暟鎹拰鎹㈣绗︽嫾鎺ュ埌StringBuilder涓�
+                        result.append(data);
+
+
+                        String filePath = result.toString();
+                        String flag = djJdgzDismantTrackService.importExcel(filePath);
+                        return flag;
+                    }
+
+                    @Override
+                    protected void done() {
+                        try {
+                            // 鑾峰彇涓婁紶缁撴灉锛堝湪杩欎釜渚嬪瓙涓紝鎴戜滑鍋囪涓婁紶鏂规硶杩斿洖Boolean绫诲瀷锛�
+                            String uploadSucceeded = get();
+
+                            // 鍒锋柊琛ㄦ牸鏁版嵁锛堝鏋滀笂浼犳垚鍔燂級
+                            if (uploadSucceeded.equals("true")) {
+                                waitUtil.dispose();
+                                frame.dispose();
+                                addOrUpdate.refreshTable(level3Id, jFrame);
+                                System.out.println("瀵煎叆鎴愬姛鏃堕棿" + new Date());
+                            } else {
+                                waitUtil.dispose();
+                                JOptionPane.showMessageDialog(null, uploadSucceeded, "鎻愮ず", JOptionPane.ERROR_MESSAGE);
+                            }
+
+                        } catch (Exception ex) {
+                            ex.printStackTrace();
+                            waitUtil.dispose();
+                        }
+                    }
+                };
+                // 鎵ц寮傛浠诲姟
+                sw.execute();
+                waitUtil.setVisible(true);
+            }
+        });
+
+        scrolltable.setTransferHandler(new TransferHandler() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public boolean importData(JComponent comp, Transferable t) {
+                try {
+                    Boolean flag = true;
+                    Object o = t.getTransferData(DataFlavor.javaFileListFlavor);
+                    String filepath = o.toString();
+                    if (filepath.startsWith("[")) {
+                        filepath = filepath.substring(1);
+                    }
+                    if (filepath.endsWith("]")) {
+                        filepath = filepath.substring(0, filepath.length() - 1);
+                    }
+                    String[] filepathArr = filepath.split(", ");
+                    Integer oldNum = model.getRowCount();
+                    String[][] data = new String[oldNum + filepathArr.length][2];
+                    for (int i = 0; i < oldNum; i++) {
+                        data[i][0] = model.getValueAt(i, 0).toString();
+                    }
+                    for (int i = 0; i < filepathArr.length; i++) {
+                        if (filepathArr[i].contains(".xlsx") || filepathArr[i].contains(".xls")) {
+                            data[i + oldNum][0] = filepathArr[i];
+                        } else {
+                            flag = false;
+                            break;
+                        }
+                    }
+                    if (!flag) {
+                        JOptionPane.showMessageDialog(null, "鍙兘涓婁紶.xlsx鎴�.xls鐨勬枃浠讹紝涓斾笉瓒呰繃2G\"", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                        return flag;
+                    }
+                    model.setDataVector(data, columnIdentifiers);
+                    table.setModel(model);
+                    table.getColumnModel().getColumn(0).setPreferredWidth(650);
+                    table.getColumnModel().getColumn(1).setPreferredWidth(80);
+
+                    table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
+                    table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
+                    table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null, null));
+                    return true;
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                return false;
+            }
+
+            @Override
+            public boolean canImport(JComponent comp, DataFlavor[] flavors) {
+                for (int i = 0; i < flavors.length; i++) {
+                    if (DataFlavor.javaFileListFlavor.equals(flavors[i])) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        });
+    }
+
+}
+
+
+
diff --git a/src/main/java/com/example/client/service/ImportLevel2Service.java b/src/main/java/com/example/client/service/ImportLevel2Service.java
index 4ce0d88..105b367 100644
--- a/src/main/java/com/example/client/service/ImportLevel2Service.java
+++ b/src/main/java/com/example/client/service/ImportLevel2Service.java
@@ -183,7 +183,7 @@
                                 frame.dispose();
                                 List<DjJdgzNetworkLevel2List> list = level2ListService.getList(netWorkId);
                                 CommonTable.refreshTable(list,columnDto,subTable);
-                                level2ListService.save(netWorkId,jPanel,graph);
+                                level2ListService.saveDiagram(netWorkId,jPanel,graph);
                                 System.out.println("瀵煎叆鎴愬姛鏃堕棿" + new Date());
                             } else {
                                 waitUtil.dispose();
diff --git a/src/main/java/com/example/client/service/ImportLevel3Service.java b/src/main/java/com/example/client/service/ImportLevel3Service.java
index 18236cf..b941bef 100644
--- a/src/main/java/com/example/client/service/ImportLevel3Service.java
+++ b/src/main/java/com/example/client/service/ImportLevel3Service.java
@@ -3,19 +3,17 @@
 import com.example.client.dto.ColumnDto;
 import com.example.client.dto.JComboBoxItem;
 import com.example.client.utils.*;
-import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List;
+import com.example.server.cabin.service.CabinService;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
 import com.example.server.progressTrack.service.*;
+import com.example.server.teamGroup.service.SysTeamGroupClassService;
 import com.example.server.utils.DownLoadTmpFile;
-import com.mxgraph.view.mxGraph;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.swing.*;
-import javax.swing.event.ChangeEvent;
 import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableCellRenderer;
 import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
@@ -44,11 +42,15 @@
     @Autowired
     private DjJdgzNetworkLevel2Service level2Service;
     @Autowired
-    private DjJdgzNetworkLevel1ListService level1ListService;
+    private SysTeamGroupClassService sysTeamGroupClassService;
+    @Autowired
+    private CabinService cabinService;
     @Autowired
     private DjJdgzNetworkLevel1Service level1Service;
+    @Value("${data.tmp-path}")
+    private String tmpPath;
 
-    public void FileUpload(List<ColumnDto> columnDto, JTable subTable,JFrame jFrame) {
+    public void FileUpload(List<ColumnDto> columnDto, JTable subTable, JFrame jFrame) {
         frame = new JFrame("瀵煎叆");
         frame.setSize(900, 600);
         frame.setResizable(true);
@@ -149,7 +151,7 @@
         downloadbtn.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                DownLoadTmpFile.down("涓夌骇缃戠粶鍥惧鍏ユā鏉�.xlsx",frame);
+                DownLoadTmpFile.down(tmpPath + "涓夌骇缃戠粶鍥惧鍏ユā鏉�.xlsx", frame);
             }
         });
 
@@ -237,7 +239,7 @@
 
                     table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
                     table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
-                    table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null,null));
+                    table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null, null));
 
                 } else {
                     Object[] options = {"OK ", "CANCEL "};
@@ -266,7 +268,7 @@
 
 
                         String filePath = result.toString();
-                        String flag = level3Service.importDiagramFromExcel(filePath,level1Id[0],level2Id[0],level2NodeId[0] );
+                        String flag = level3Service.importDiagramFromExcel(filePath, level1Id[0], level2Id[0], level2NodeId[0]);
                         return flag;
                     }
 
@@ -280,9 +282,15 @@
                             if (uploadSucceeded.equals("true")) {
                                 waitUtil.dispose();
                                 frame.dispose();
-                                List<DjJdgzNetworkLevel3> list = level3Service.getList(null);
-                                CommonTable.refreshTable(list,columnDto,subTable);
-                                level3ManageService.tableModelListener(list,subTable,jFrame);
+                                JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
+                                JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
+                                JComboBoxItem[] cabinList = cabinService.getList();
+                                String[] typeList = new String[]{
+                                        "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
+                                };
+                                List<DjJdgzNetworkLevel3> list = level3Service.getList(null, deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],null);
+                                CommonTable.refreshTable(list, columnDto, subTable);
+                                level3ManageService.tableModelListener(list, subTable, jFrame);
                                 System.out.println("瀵煎叆鎴愬姛鏃堕棿" + new Date());
                             } else {
                                 waitUtil.dispose();
@@ -341,7 +349,7 @@
 
                     table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
                     table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
-                    table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null,null));
+                    table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null, null));
                     return true;
                 } catch (Exception e) {
                     e.printStackTrace();
diff --git a/src/main/java/com/example/client/service/Level1AddOrUpdate.java b/src/main/java/com/example/client/service/Level1AddOrUpdate.java
index 9637308..1f313d9 100644
--- a/src/main/java/com/example/client/service/Level1AddOrUpdate.java
+++ b/src/main/java/com/example/client/service/Level1AddOrUpdate.java
@@ -95,6 +95,8 @@
                 if (newValue.equals("del")) {
                     DefaultTableModel model = (DefaultTableModel) subTable.getModel();
                     model.removeRow(row);
+                    DjJdgzNetworkLevel1List djJdgzNetworkLevel1List = list.get(row);
+                    level1ListService.deleteLogic(djJdgzNetworkLevel1List.getId());
                     list.remove(row);
                 } else {
 
diff --git a/src/main/java/com/example/client/service/Level2AddOrUpdate.java b/src/main/java/com/example/client/service/Level2AddOrUpdate.java
index a65d3ce..4c154c0 100644
--- a/src/main/java/com/example/client/service/Level2AddOrUpdate.java
+++ b/src/main/java/com/example/client/service/Level2AddOrUpdate.java
@@ -68,10 +68,11 @@
         JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "yyyy-MM-dd");
         timeSpinner.setEditor(timeEditor);
 
-   /*     JButton btnInsert = new JButton("鏂板");*/
+        JButton btnInsert = new JButton("鏂板");
         JButton btnImport = new JButton("瀵煎叆鏁版嵁");
+        JButton btnSave= new JButton("淇濆瓨");
 
-        JLabel  label1 = new JLabel("璧峰鏃堕棿");
+       /* JLabel  label1 = new JLabel("璧峰鏃堕棿");
         JXDatePicker beginDate = new JXDatePicker();
         beginDate.setPreferredSize(new Dimension(180, 28));
         SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd");
@@ -98,17 +99,11 @@
             lineNum.setText(String.valueOf(data.getLineNodeNum()));
         }else{
             lineNum.setText("10");
-        }
+        }*/
 
-        topJpanel.add(btnImport, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        topJpanel.add(label1, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        topJpanel.add(beginDate, new GBC(2, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-
-        topJpanel.add(label2, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        topJpanel.add(diagramWidth, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-        topJpanel.add(label3, new GBC(2, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-        topJpanel.add(lineNum, new GBC(3, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-
+        topJpanel.add(btnInsert, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        topJpanel.add(btnImport, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        topJpanel.add(btnSave, new GBC(2, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
         // 鍒涘缓瀛愯〃鏍�
         List<ColumnDto> columnDto = new ArrayList<>();
@@ -117,16 +112,41 @@
 
 /*        List<TableButton> buttonList = new ArrayList<>();
         buttonList.add(new TableButton("del", "鍒犻櫎"));*/
-
+        List<TableButton> buttonList = new ArrayList<>();
+        buttonList.add(new TableButton("del", "鍒犻櫎"));
 
         columnDto.add(new ColumnDto("搴忓彿", "", 50, "autoCreate", false, null,null));
-        columnDto.add(new ColumnDto("宸ョ▼涓撲笟", "majorName", 180, null, false, null,null));
+        //columnDto.add(new ColumnDto("宸ョ▼涓撲笟", "majorName", 180, null, false, null,null));
         columnDto.add(new ColumnDto("鑺傜偣鍚嶇О", "ProcessName", 160, null, false, null,null));
         columnDto.add(new ColumnDto("瑕佹眰瀹屾垚鏃堕棿", "requiredCompletionTime", 120, null, false, null,null));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", 85, "", true, buttonList,null));
 
         JTable subTable = CommonTable.createCommonTable(list, columnDto);
         subTable.setRowHeight(25);
         subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
+
+        subTable.getModel().addTableModelListener(e -> {
+            // 妫�鏌ヤ簨浠剁被鍨�
+            if (e.getType() == TableModelEvent.UPDATE) {
+                // 鑾峰彇鍙樺寲鐨勮鍜屽垪
+                int row = e.getFirstRow();
+                int column = e.getColumn();
+
+                // 鑾峰彇鏂扮殑鍊�
+                Object newValue = subTable.getModel().getValueAt(row, column);
+                // 杈撳嚭鍙樺寲淇℃伅
+                if (newValue.equals("del")) {
+                    DefaultTableModel model = (DefaultTableModel) subTable.getModel();
+                    model.removeRow(row);
+                    DjJdgzNetworkLevel2List djJdgzNetworkLevel2List = list.get(row);
+                    level2ListService.deleteLogic(djJdgzNetworkLevel2List.getId());
+                    list.remove(row);
+                } else {
+
+                }
+                System.out.println("鍗曞厓鏍煎彉鍖�: 琛�=" + row + ", 鍒�=" + column + ", 鏂板��=" + newValue);
+            }
+        });
 
         JScrollPane scrollTable = new JScrollPane(subTable);
         jLeft.add(topJpanel, BorderLayout.NORTH);
@@ -167,12 +187,30 @@
             }
         });
 
+        btnInsert.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                TableModel model = subTable.getModel();
+                DefaultTableModel defaultModel = (DefaultTableModel) model;
+                int columnCount = subTable.getColumnCount();
+                Object[] emptyRow = new Object[columnCount];
+                defaultModel.addRow(emptyRow);
+                list.add(new DjJdgzNetworkLevel2List());
+            }
+        });
 
-        mxGraph finalGraph1 = graph;
+        btnSave.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                CommonTable.saveTableList(list,subTable,columnDto);
+                level2ListService.save(list,data.getId(),diagram, finalGraph);
+            }
+        });
+
         btnImport.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                importService.FileUpload(data.getId(),columnDto,subTable,diagram,finalGraph1);
+                importService.FileUpload(data.getId(),columnDto,subTable,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 a4f3bf8..55261b3 100644
--- a/src/main/java/com/example/client/service/Level2ManageService.java
+++ b/src/main/java/com/example/client/service/Level2ManageService.java
@@ -15,6 +15,7 @@
 import com.example.server.utils.DownLoadTmpFile;
 import org.jdesktop.swingx.JXDatePicker;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.swing.*;
@@ -47,6 +48,8 @@
     private List<DjJdgzNetworkLevel2> list;
     private Map<String, Long> shipMap = new HashMap<>();
     private List<ColumnDto> columnDto;
+    @Value("${data.tmp-path}")
+    private String tmpPath;
 
 
     public JPanel createTable(Integer width, Integer height, JFrame jFrame) {
@@ -79,10 +82,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("涓�绾х綉缁滃浘鑺傜偣鍚嶇О", "processName", (width - 10) / 4, null, 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("涓�绾х綉缁滃浘鑺傜偣鍚嶇О", "processName", (width - 10) / 4, null, false, null, null));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", (width - 10) / 4, "", true, buttonList, null));
 
         table = CommonTable.createCommonTable(list, columnDto);
         table.setRowHeight(25);
@@ -96,13 +99,13 @@
                 Long shipId = shipMap.get(content);
                 list = level2Service.getList(shipId);
                 if (!isFirstLoadData[0]) {
-                    CommonTable.refreshTable(list, columnDto,table);
+                    CommonTable.refreshTable(list, columnDto, table);
                     table.setRowHeight(25);
                     table.setAutoCreateRowSorter(true);
                     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
-                    tableModelListener(table,jFrame);
-                }else{
+                    tableModelListener(table, jFrame);
+                } else {
                     isFirstLoadData[0] = false;
                 }
             }
@@ -114,7 +117,7 @@
         }
         comboBox.setSelectedItem(shipList.get(0).getShipNo());
 
-        tableModelListener(table,jFrame);
+        tableModelListener(table, jFrame);
 
         btnInsert.addActionListener(new ActionListener() {
             @Override
@@ -125,7 +128,7 @@
         btnDown.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                DownLoadTmpFile.down("浜岀骇缃戠粶鍥惧鍏ユā鏉�.xlsx",jFrame);
+                DownLoadTmpFile.down(tmpPath + "浜岀骇缃戠粶鍥惧鍏ユā鏉�.xlsx", jFrame);
             }
         });
 
@@ -185,7 +188,7 @@
 
         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));
@@ -202,17 +205,17 @@
             data.setLevel1NodeId(level1Node.getId());
             level2Service.insert(data);
             list = level2Service.getList(level1Data.getShipId());
-            CommonTable.refreshTable(list,columnDto,table);
+            CommonTable.refreshTable(list, columnDto, table);
             table.setRowHeight(25);
             table.setAutoCreateRowSorter(true);
             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) {
@@ -223,11 +226,11 @@
                 // 鑾峰彇鏂扮殑鍊�
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
-                if (newValue.equals("edit")){
+                if (newValue.equals("edit")) {
                     DjJdgzNetworkLevel2 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/Level3AddOrUpdate.java b/src/main/java/com/example/client/service/Level3AddOrUpdate.java
index 61b7ef0..157af61 100644
--- a/src/main/java/com/example/client/service/Level3AddOrUpdate.java
+++ b/src/main/java/com/example/client/service/Level3AddOrUpdate.java
@@ -6,6 +6,7 @@
 import com.example.client.utils.CellComboBoxEditor;
 import com.example.client.utils.CellComboBoxRenderer;
 import com.example.client.utils.CommonTable;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3List;
 import com.example.server.progressTrack.service.DjJdgzNetworkLevel3ListService;
@@ -105,6 +106,8 @@
                 if (newValue.equals("del")) {
                     DefaultTableModel model = (DefaultTableModel) subTable.getModel();
                     model.removeRow(row);
+                    DjJdgzNetworkLevel3List djJdgzNetworkLevel3List = finalList.get(row);
+                    level3ListService.deleteLogic(djJdgzNetworkLevel3List.getId());
                     finalList.remove(row);
                 } else {
                    /* if (column == 1 && newValue instanceof Integer) {
diff --git a/src/main/java/com/example/client/service/Level3ManageService.java b/src/main/java/com/example/client/service/Level3ManageService.java
index dd7bfb1..ac2ab59 100644
--- a/src/main/java/com/example/client/service/Level3ManageService.java
+++ b/src/main/java/com/example/client/service/Level3ManageService.java
@@ -58,9 +58,12 @@
     public JPanel createTable(Integer width, Integer height, JFrame jFrame) {
         JPanel panel = new JPanel();
 
-        JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
-        topJpanel.setPreferredSize(new Dimension(width, 37));
+        JPanel topJpanel = new JPanel();
+        GridBagLayout layout = new GridBagLayout();
+        topJpanel.setLayout(layout);
+        topJpanel.setPreferredSize(new Dimension(width, 100));
         topJpanel.setBackground(Color.WHITE);
+
         JPanel centerJpanel = new JPanel();
         centerJpanel.setPreferredSize(new Dimension(width - 20, height - 100));
         centerJpanel.setBackground(Color.WHITE);
@@ -68,24 +71,62 @@
         panel.add(centerJpanel, BorderLayout.CENTER);
 
         List<DjJdgzShip> shipList = djJdgzShipService.getList();
+        JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
+        JComboBoxItem[] cabinList = cabinService.getList();
+        JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
+        String[] typeList = new String[]{
+                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
+        };
+
+        JLabel JLabel0 = new JLabel("宸ョ▼");
         JComboBox comboBox = new JComboBox();
+        comboBox.setPreferredSize(new Dimension(185, 28));
+
+        JLabel JLabel1 = new JLabel("閮ㄩ棬");
+        JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>(deptList);
+        comboBox1.setPreferredSize(new Dimension(185, 28));
+
+        JComboBoxItem[] teamList1 = sysTeamGroupClassService.getTeamList(deptList[0].getId());
+
+        JLabel JLabel2 = new JLabel("涓撲笟");
+        JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>(teamList1);
+        comboBox2.setPreferredSize(new Dimension(185, 28));
+
+        JLabel JLabel3 = new JLabel("鑸卞");
+        JComboBox<JComboBoxItem> comboBox3 = new JComboBox<>(cabinList);
+        comboBox3.setPreferredSize(new Dimension(185, 28));
+
+        JLabel JLabel4 = new JLabel("绫诲埆");
+        JComboBox<String> comboBox4 = new JComboBox<>(typeList);
+        comboBox4.setPreferredSize(new Dimension(185, 28));
+
+        JTextField sb = new JTextField(16);
+        JButton query = new JButton("鏌ヨ");
+
         JButton btnInsert = new JButton("鏂板");
         JButton btnImport = new JButton("瀵煎叆");
 
-        topJpanel.add(comboBox);
-        topJpanel.add(btnInsert);
-        topJpanel.add(btnImport);
+        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));
+        topJpanel.add(JLabel1, new GBC(2, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        topJpanel.add(comboBox1, new GBC(3, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        topJpanel.add(JLabel2, new GBC(4, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        topJpanel.add(comboBox2, new GBC(5, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        topJpanel.add(JLabel3, new GBC(6, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        topJpanel.add(comboBox3, new GBC(7, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        topJpanel.add(JLabel4, new GBC(8, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        topJpanel.add(comboBox4, new GBC(9, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        comboBox.setPreferredSize(new Dimension(300, 28));
+        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(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());
+        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", "鍒犻櫎"));
 
-        JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
-        JComboBoxItem[] cabinList = cabinService.getList();
-        JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
 
         columnDto = new ArrayList<>();
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
@@ -93,7 +134,7 @@
         columnDto.add(new ColumnDto("宸ョ▼", "ProjectName", (width - 10) / 10, null, false, null, null));
         columnDto.add(new ColumnDto("閮ㄩ棬", "deptId", (width - 10) / 10, "dict", false, null, deptList));
         columnDto.add(new ColumnDto("涓撲笟", "teamgroupId", (width - 10) / 10, "dict", false, null, teamList));
-        columnDto.add(new ColumnDto("鑸卞", "cabinId", (width - 10) / 10, "dicts", false, null, cabinList));
+        columnDto.add(new ColumnDto("鑸卞", "cabinId", (width - 10) / 10, "dict", false, null, cabinList));
         columnDto.add(new ColumnDto("绫诲埆", "type", (width - 10) / 10, null, false, null, null));
         columnDto.add(new ColumnDto("涓�绾х綉缁滃浘鑺傜偣鍚嶇О", "level1NodeName", (width - 10) / 10, null, false, null, null));
         columnDto.add(new ColumnDto("浜岀骇缃戠粶鍥捐妭鐐瑰悕绉�", "level2NodeName", (width - 10) / 10, null, false, null, null));
@@ -105,22 +146,120 @@
         table.setAutoCreateRowSorter(true);
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
-        final Boolean[] isFirstLoadData = {true};
         comboBox.addItemListener(new ItemListener() {
             public void itemStateChanged(final ItemEvent event) {
                 String content = comboBox.getSelectedItem().toString();
-                Long shipId = shipMap.get(content);
-                list = level3Service.getList(shipId);
-                if (!isFirstLoadData[0]) {
-                    CommonTable.refreshTable(list, columnDto, table);
-                    table.setRowHeight(25);
-                    table.setAutoCreateRowSorter(true);
-                    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
 
-                    tableModelListener(list, table, jFrame);
-                } else {
-                    isFirstLoadData[0] = false;
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, table);
+                table.setRowHeight(25);
+                table.setAutoCreateRowSorter(true);
+                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                tableModelListener(list, table, jFrame);
+            }
+        });
+        comboBox1.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    JComboBoxItem selectedItem = (JComboBoxItem) comboBox1.getSelectedItem();
+                    if (selectedItem != null) {
+                        long selectedId = selectedItem.getId();
+
+                        JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(selectedId);
+                        comboBox2.setModel(new DefaultComboBoxModel<>(teamList));
+                        comboBox2.setSelectedIndex(0);
+
+                        String content = comboBox.getSelectedItem().toString();
+                        JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                        JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                        JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                        String type = comboBox4.getSelectedItem().toString();
+
+                        Long shipId = shipMap.get(content);
+                        list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+                        CommonTable.refreshTable(list, columnDto, table);
+                        table.setRowHeight(25);
+                        table.setAutoCreateRowSorter(true);
+                        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+                        tableModelListener(list, table, jFrame);
+                    }
                 }
+            }
+        });
+
+        comboBox2.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, table);
+                table.setRowHeight(25);
+                table.setAutoCreateRowSorter(true);
+                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                tableModelListener(list, table, jFrame);
+            }
+        });
+        comboBox3.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, table);
+                table.setRowHeight(25);
+                table.setAutoCreateRowSorter(true);
+                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                tableModelListener(list, table, jFrame);
+            }
+        });
+        comboBox4.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, table);
+                table.setRowHeight(25);
+                table.setAutoCreateRowSorter(true);
+                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                tableModelListener(list, table, jFrame);
+            }
+        });
+
+        query.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                list = level3Service.getList(null, null, null, null, null,sb.getText());
+
+                CommonTable.refreshTable(list, columnDto, table);
+                table.setRowHeight(25);
+                table.setAutoCreateRowSorter(true);
+                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                tableModelListener(list, table, jFrame);
             }
         });
 
@@ -175,8 +314,9 @@
         JComboBoxItem[] projectList = level1Service.getProjectList();
         JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
         JComboBoxItem[] cabinList = cabinService.getList();
+        JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
         String[] typeList = new String[]{
-                "鏀硅","鍔犺","鎹㈣","鏀硅繘鎬т慨鐞�"
+                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
         };
 
         JLabel JLabel1 = new JLabel("宸ョ▼");
@@ -311,7 +451,7 @@
             data.setCabinId(String.valueOf(selectedIds));
             data.setType(comboBox6.getSelectedItem().toString());
             level3Service.insert(data);
-            list = level3Service.getList(level1Data.getShipId());
+            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);
             table.setAutoCreateRowSorter(true);
diff --git a/src/main/java/com/example/client/service/Level3ViewService.java b/src/main/java/com/example/client/service/Level3ViewService.java
index 68da101..c8f0643 100644
--- a/src/main/java/com/example/client/service/Level3ViewService.java
+++ b/src/main/java/com/example/client/service/Level3ViewService.java
@@ -3,9 +3,7 @@
 import com.example.client.dto.ColumnDto;
 import com.example.client.utils.CommonTable;
 import com.example.server.progressTrack.Dto.NetworkNodeStatusDto;
-import com.example.server.progressTrack.model.DjJdgzNetworkLevel2;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
-import com.example.server.progressTrack.service.DjJdgzNetworkLevel2Service;
 import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
 import com.example.server.progressTrack.service.NetWorkDiagramService;
 import com.mxgraph.swing.mxGraphComponent;
@@ -43,7 +41,7 @@
 
         // 鍒涘缓瀛愯〃鏍�
         List<ColumnDto> columnDto = new ArrayList<>();
-        List<DjJdgzNetworkLevel3> list = level3Service.getList(null);
+        List<DjJdgzNetworkLevel3> list = level3Service.getList(null, null, null, null, null,null);
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
 
 
diff --git a/src/main/java/com/example/client/service/MenuService.java b/src/main/java/com/example/client/service/MenuService.java
index db58a9e..1d1560a 100644
--- a/src/main/java/com/example/client/service/MenuService.java
+++ b/src/main/java/com/example/client/service/MenuService.java
@@ -37,6 +37,12 @@
     private DataSyncManageService dataSyncManageService;
     @Autowired
     private UserManageService userManageService;
+    @Autowired
+    private DismantTrackService dismantTrackService;
+    @Autowired
+    private  SubunitService subunitService;
+    @Autowired
+    private  TeamGroupManageService teamGroupManageService;
 
     @Autowired
     private Main main;
@@ -107,6 +113,15 @@
                     } else if (nodeName.equals("鐢ㄦ埛绠$悊")) {
                         JPanel user = userManageService.createTable(width, height, frame);
                         main.showTab("鐢ㄦ埛绠$悊", user, tree);
+                    } else if (nodeName.equals("鎷嗗嵏杩涘害琛�")) {
+                        JPanel dismantTrack = dismantTrackService.createTable(width, height, frame);
+                        main.showTab("鎷嗗嵏杩涘害琛�", dismantTrack, tree);
+                    }else if (nodeName.equals("瀛愰儴浠堕厤缃�")) {
+                        JPanel subunit = subunitService.createTable(width, height, frame);
+                        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/StatisDismantService.java b/src/main/java/com/example/client/service/StatisDismantService.java
new file mode 100644
index 0000000..8b4b196
--- /dev/null
+++ b/src/main/java/com/example/client/service/StatisDismantService.java
@@ -0,0 +1,92 @@
+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.StatistReportsDto;
+import com.example.server.progressTrack.service.DjJdgzDismantTrackService;
+import com.example.server.progressTrack.service.DjJdgzTrackRecordService;
+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 StatisDismantService {
+    @Autowired
+    private DjJdgzDismantTrackService djJdgzDismantTrackService;
+
+    public void createTable(JFrame jFrame,Long level1Id) {
+        JFrame frame1 = new JFrame("缁熻鎶ヨ〃");
+        frame1.setSize(1200, 700);
+        frame1.setResizable(false);
+        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<ColumnDto> columnDto = new ArrayList<>();
+        List<StatistDismantDto> list = djJdgzDismantTrackService.getStatist(level1Id);
+
+        //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
+      /*  columnDto.add(new ColumnDto("鐝粍涓撲笟", "TeamGroupName", 280, null, false, null,null));
+        columnDto.add(new ColumnDto("椤圭洰鎬绘暟", "AllNum", 150, null, false, null,null));
+        columnDto.add(new ColumnDto("杩涜涓�", "JxzNum", 150, null, false, null,null));
+        columnDto.add(new ColumnDto("涓存湡", "LqNum", 150, null, false, null,null));
+        columnDto.add(new ColumnDto("閫炬湡", "YqNum", 150, null, false, null,null));
+        columnDto.add(new ColumnDto("姝e父瀹屾垚", "ZcwcNum", 150, null, false, null,null));
+        columnDto.add(new ColumnDto("瓒呮湡瀹屾垚", "CqwcNum", 150, null, false, null,null));
+
+
+        table = CommonTable.createCommonTable(list, columnDto);
+
+
+        table.setRowHeight(25);
+        table.setAutoCreateRowSorter(true);
+        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        JScrollPane scrollTable = new JScrollPane(table);*/
+        //frame1.add(scrollTable);
+
+
+
+        Object[][] headerRows = new Object[2][9];
+        headerRows[0] = new Object[]{"閮ㄩ棬/涓撲笟","鎬绘暟",ComplexTable.mergeCellX,"鎷嗗嵏杩涘害瀹屾垚",ComplexTable.mergeCellX,"瀛愰儴浠�",ComplexTable.mergeCellX,ComplexTable.mergeCellX,ComplexTable.mergeCellX,};
+        //姝ゅ2-5鏄笉浼氭樉绀哄嚭鏉ョ殑锛屽洜涓�1-4鍚戜笅鍚堝苟浜嗕竴琛� + 鍚戝彸鍚堝苟浜嗕竴鍒�  锛� 鑰�2-5琚繖涓煩褰㈣寖鍥村寘鎷簡
+        headerRows[1] = new Object[]{ComplexTable.mergeCellY, "璁惧","瀛愰儴浠�","璁惧","瀛愰儴浠�","宸叉媶鍗�","宸插嚭鑸�","宸查��閲�","宸插叆搴�"};
+
+        String[][] body = new String[list.size()][9];
+
+        for (int i = 0; i < list.size(); i++) {
+            StatistDismantDto data =list.get(i);
+            body[i][0] = data.getName();
+            body[i][1] = String.valueOf(data.getSbsl());
+            body[i][2] = String.valueOf(data.getZbjsl());
+            body[i][3] = String.valueOf(data.getSbcxsl());
+            body[i][4] = String.valueOf(data.getZbjcxsl());
+            body[i][5] = String.valueOf(data.getDismantsl());
+            body[i][6] = String.valueOf(data.getExitsl());
+            body[i][7] = String.valueOf(data.getReturnsl());
+            body[i][8] = String.valueOf(data.getWarehousesl());
+        }
+
+        JScrollPane scrollTable = new JScrollPane(new ComplexTable(headerRows , body,130));
+        frame1.add(scrollTable);
+        frame1.setVisible(true);
+    }
+
+}
+
+
+
+
diff --git a/src/main/java/com/example/client/service/StatisReportsService.java b/src/main/java/com/example/client/service/StatisReportsService.java
index 62b8daf..f09c93e 100644
--- a/src/main/java/com/example/client/service/StatisReportsService.java
+++ b/src/main/java/com/example/client/service/StatisReportsService.java
@@ -70,7 +70,7 @@
 
 
 
-        Object[][] headerRows = new Object[list.size()][7];
+        Object[][] headerRows = new Object[2][7];
         headerRows[0] = new Object[]{"鐝粍涓撲笟","椤圭洰鎬绘暟","鏈畬鎴�",ComplexTable.mergeCellX,ComplexTable.mergeCellX,"宸插畬鎴�",ComplexTable.mergeCellX};
         //姝ゅ2-5鏄笉浼氭樉绀哄嚭鏉ョ殑锛屽洜涓�1-4鍚戜笅鍚堝苟浜嗕竴琛� + 鍚戝彸鍚堝苟浜嗕竴鍒�  锛� 鑰�2-5琚繖涓煩褰㈣寖鍥村寘鎷簡
         headerRows[1] = new Object[]{ComplexTable.mergeCellY, ComplexTable.mergeCellY ,"杩涜涓�","涓存湡","閫炬湡","姝e父瀹屾垚","瓒呮湡瀹屾垚"};
@@ -87,7 +87,8 @@
             body[i][5] = String.valueOf(data.getZcwcNum());
             body[i][6] = String.valueOf(data.getCqwcNum());
         }
-        JScrollPane scrollTable = new JScrollPane(new ComplexTable(headerRows , body));
+
+        JScrollPane scrollTable = new JScrollPane(new ComplexTable(headerRows , body,171));
         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
new file mode 100644
index 0000000..88e566d
--- /dev/null
+++ b/src/main/java/com/example/client/service/SubunitAddOrUpdate.java
@@ -0,0 +1,214 @@
+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.BoxIteUtils;
+import com.example.client.utils.CommonTable;
+import com.example.client.utils.GBC;
+import com.example.server.cabin.service.CabinService;
+import com.example.server.progressTrack.model.DjJdgzDismantTrack;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
+import com.example.server.progressTrack.service.DjJdgzDismantTrackService;
+import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
+import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import com.example.server.user.model.SysUser;
+import com.example.server.utils.CacheUtils;
+import org.apache.commons.lang3.StringUtils;
+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 java.awt.*;
+import java.awt.event.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class SubunitAddOrUpdate {
+    @Autowired
+    private DjJdgzNetworkLevel3Service level3Service;
+    @Autowired
+    private SysTeamGroupClassService sysTeamGroupClassService;
+    @Autowired
+    private DjJdgzDismantTrackService djJdgzDismantTrackService;
+    @Autowired
+    private ImportDismantTrackService importDismantTrackService;
+    @Autowired
+    private CabinService cabinService;
+    private List<ColumnDto> columnDto;
+    private JTable trackTable;
+
+    public JPanel createTrack(Integer width, Integer height, DjJdgzNetworkLevel3 djJdgzNetworkLevel3,JFrame frame) {
+        JPanel panel = new JPanel();
+        panel.setPreferredSize(new Dimension(width, height));
+        JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+        topJpanel.setPreferredSize(new Dimension(width - 10, 37));
+
+        JPanel centerJpanel = new JPanel();
+        centerJpanel.setPreferredSize(new Dimension(width - 20, height - 100));
+        panel.add(topJpanel, BorderLayout.NORTH);
+        panel.add(centerJpanel, BorderLayout.CENTER);
+
+        JButton btnInsert = new JButton("鏂板");
+
+
+        topJpanel.add(btnInsert);
+
+        JComboBoxItem[] cabinList = cabinService.getList();
+        List<DjJdgzDismantTrack> list = djJdgzDismantTrackService.getList(djJdgzNetworkLevel3.getId(), null);
+        List<TableButton> buttonList = new ArrayList<>();
+        buttonList.add(new TableButton("edit", "缂栬緫"));
+        buttonList.add(new TableButton("del", "鍒犻櫎"));
+
+        // 鍒涘缓宸︿晶琛ㄦ牸
+        columnDto = new ArrayList<>();
+
+        //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
+        columnDto.add(new ColumnDto("搴忓彿", "", 200, "autoCreate", false, null, null));
+        columnDto.add(new ColumnDto("鑸卞", "cabinId", 200, "dict", false, null, cabinList));
+        columnDto.add(new ColumnDto("閮ㄤ欢鍚嶇О", "name", 200, null, false, null, null));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", 200, "", true, buttonList, null));
+
+        trackTable = CommonTable.createCommonTable(list, columnDto);
+        trackTable.setPreferredSize(new Dimension(width , height));
+        trackTable.setRowHeight(25);
+        trackTable.setAutoCreateRowSorter(true);
+        trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+        tableModelListener(trackTable, frame,list,columnDto);
+
+        btnInsert.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                SysUser user = (SysUser) CacheUtils.get("user", "user");
+                if (user.getTeamgroup()==null||user.getTeamgroup().equals(djJdgzNetworkLevel3.getTeamgroupId())) {
+                    DjJdgzDismantTrack djJdgzDismantTrack = new DjJdgzDismantTrack();
+                    djJdgzDismantTrack.setLevel3NetworkId(djJdgzNetworkLevel3.getId());
+                    insert(frame,djJdgzDismantTrack);
+                }else{
+                    JOptionPane.showMessageDialog(null, "涓嶅彲鎿嶄綔鍏朵粬涓撲笟鏁版嵁", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                }
+
+
+            }
+        });
+
+
+        JScrollPane scrollPane = new JScrollPane(trackTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+        scrollPane.setViewportView(trackTable);
+        scrollPane.setPreferredSize(new Dimension(width - 20, height - 130));
+        centerJpanel.add(scrollPane);
+
+        return panel;
+    }
+
+    private void insert(JFrame jFrame, DjJdgzDismantTrack data) {
+        if (data.getLevel3NetworkId()==null){
+            JOptionPane.showMessageDialog(null, "娌℃湁閫夋嫨璁惧", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+            return;
+        }
+        JFrame frame1 = new JFrame("鏂板瀛愰儴浠�");
+        frame1.setSize(470, 430);
+        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);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+            }
+        });
+        GridBagLayout layout = new GridBagLayout();
+        frame1.setLayout(layout);
+
+        JComboBoxItem[] cabinList = cabinService.getList();
+
+        JLabel JLabel1 = new JLabel("鑸卞");
+        JComboBox<JComboBoxItem> comboBox0 = new JComboBox<>(cabinList);
+        comboBox0.setPreferredSize(new Dimension(185, 28));
+        comboBox0.setSelectedIndex(-1);
+        if(data.getCabinId()!=null){
+            comboBox0.setSelectedItem(BoxIteUtils.GetSelectItemById(cabinList, data.getCabinId()));
+        }
+
+        JLabel JLabel8 = new JLabel("瀛愰儴浠跺悕绉�");
+        JTextField subunitName = new JTextField(16);
+        if (StringUtils.isNotBlank(data.getName())) {
+            subunitName.setText(data.getName());
+        }
+
+
+        JButton btnSave = new JButton("纭畾");
+
+        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(JLabel8, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(subunitName, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        frame1.add(btnSave, new GBC(0, 2, 2, 1).setWeight(1, 0));
+
+        btnSave.addActionListener((e) -> {
+            JComboBoxItem cabin = (JComboBoxItem) comboBox0.getSelectedItem();
+
+            String name = subunitName.getText();
+            data.setCabinId(cabin.getId());
+            data.setName(name);
+            List<DjJdgzDismantTrack> list = new ArrayList<>();
+            list.add(data);
+            djJdgzDismantTrackService.save(list);
+
+            frame1.dispose();
+            jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
+        });
+    }
+    public void refreshTable(Long level3Id,JFrame jFrame){
+        List<DjJdgzDismantTrack> list = djJdgzDismantTrackService.getList(level3Id, null);
+        CommonTable.refreshTable(list, columnDto, trackTable);
+        trackTable.setRowHeight(25);
+        trackTable.setAutoCreateRowSorter(true);
+        trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        tableModelListener(trackTable, jFrame,list,columnDto);
+    }
+
+    public void tableModelListener(JTable table,JFrame jFrame,List<DjJdgzDismantTrack> list,List<ColumnDto> columnDto){
+        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("edit")){
+                    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) {
+                        DefaultTableModel model = (DefaultTableModel) table.getModel();
+                        DjJdgzDismantTrack data = list.get(row);
+                        djJdgzDismantTrackService.deleteLogic(data.getId());
+                        list.remove(row);
+                        model.removeRow(row);
+                    }
+                }
+                System.out.println("鍗曞厓鏍煎彉鍖�: 琛�=" + row + ", 鍒�=" + column + ", 鏂板��=" + newValue);
+            }
+        });
+    }
+
+}
+
+
+
+
diff --git a/src/main/java/com/example/client/service/SubunitService.java b/src/main/java/com/example/client/service/SubunitService.java
new file mode 100644
index 0000000..d77b425
--- /dev/null
+++ b/src/main/java/com/example/client/service/SubunitService.java
@@ -0,0 +1,344 @@
+package com.example.client.service;
+
+import com.example.client.dto.ColumnDto;
+import com.example.client.dto.JComboBoxItem;
+import com.example.client.utils.CommonTable;
+import com.example.client.utils.GBC;
+import com.example.server.cabin.service.CabinService;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
+import com.example.server.progressTrack.model.DjJdgzShip;
+import com.example.server.progressTrack.service.DjJdgzDismantTrackService;
+import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
+import com.example.server.progressTrack.service.DjJdgzShipService;
+import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class SubunitService {
+    @Autowired
+    private DjJdgzNetworkLevel3Service level3Service;
+    @Autowired
+    private SysTeamGroupClassService sysTeamGroupClassService;
+    @Autowired
+    private DjJdgzDismantTrackService djJdgzDismantTrackService;
+    @Autowired
+    private CabinService cabinService;
+    @Autowired
+    private DjJdgzShipService djJdgzShipService;
+    @Autowired
+    private SubunitAddOrUpdate addOrUpdate;
+
+    private List<DjJdgzNetworkLevel3> list;
+
+    public JPanel createTable(Integer width, Integer height, JFrame frame) {
+        JPanel panel = new JPanel();
+        panel.setPreferredSize(new Dimension(width, height));
+
+        JPanel jLeft = new JPanel(new BorderLayout());
+
+        JPanel top = new JPanel();
+        GridBagLayout layout = new GridBagLayout();
+        top.setLayout(layout);
+
+        jLeft.setPreferredSize(new Dimension(width / 2 - 20, height));
+        top.setPreferredSize(new Dimension(width / 2 - 20, 100));
+
+        // 鍒涘缓宸︿晶琛ㄦ牸
+
+        //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
+        JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
+        JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
+        JComboBoxItem[] cabinList = cabinService.getList();
+        String[] typeList = new String[]{
+                "鏀硅", "鍔犺", "鎹㈣", "鏀硅繘鎬т慨鐞�"
+        };
+        List<DjJdgzShip> shipList = djJdgzShipService.getList();
+        Map<String, Long> shipMap = new HashMap<>();
+
+        JLabel JLabel0 = new JLabel("宸ョ▼");
+        JComboBox comboBox = new JComboBox();
+
+        comboBox.setPreferredSize(new Dimension(160, 28));
+        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());
+
+        JLabel JLabel1 = new JLabel("閮ㄩ棬");
+        JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>(deptList);
+        comboBox1.setPreferredSize(new Dimension(160, 28));
+
+        JComboBoxItem[] teamList1 = sysTeamGroupClassService.getTeamList(deptList[0].getId());
+
+        JLabel JLabel2 = new JLabel("涓撲笟");
+        JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>(teamList1);
+        comboBox2.setPreferredSize(new Dimension(170, 28));
+
+        JLabel JLabel3 = new JLabel("鑸卞");
+        JComboBox<JComboBoxItem> comboBox3 = new JComboBox<>(cabinList);
+        comboBox3.setPreferredSize(new Dimension(160, 28));
+
+        JLabel JLabel4 = new JLabel("绫诲埆");
+        JComboBox<String> comboBox4 = new JComboBox<>(typeList);
+        comboBox4.setPreferredSize(new Dimension(160, 28));
+
+        JTextField sb = new JTextField(12);
+        JButton query = new JButton("鏌ヨ");
+
+        top.add(JLabel0, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(JLabel1, new GBC(2, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox1, new GBC(3, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(JLabel2, new GBC(4, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox2, new GBC(5, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+        top.add(JLabel3, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox3, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(JLabel4, new GBC(2, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        top.add(comboBox4, new GBC(3, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(sb, new GBC(4, 1, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        top.add(query, new GBC(6, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+
+
+        jLeft.add(top, BorderLayout.NORTH);
+
+        List<ColumnDto> columnDto = new ArrayList<>();
+        list = level3Service.getList(null, deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],null);
+
+        columnDto.add(new ColumnDto("搴忓彿", "", 60, "autoCreate", false, null, null));
+        columnDto.add(new ColumnDto("璁惧鍚嶇О", "name", 180, null, false, null, null));
+        columnDto.add(new ColumnDto("閮ㄩ棬", "deptId", 180, "dict", false, null, deptList));
+        columnDto.add(new ColumnDto("涓撲笟", "teamgroupId", 180, "dict", false, null, teamList));
+        columnDto.add(new ColumnDto("鑸卞", "cabinId", 180, "dict", false, null, cabinList));
+        columnDto.add(new ColumnDto("绫诲埆", "type", 180, null, false, null, null));
+
+        JTable subTable = CommonTable.createCommonTable(list, columnDto);
+        subTable.setRowHeight(25);
+        subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
+
+        comboBox.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId(),frame);
+                        }
+                    }
+                });
+            }
+        });
+
+        comboBox1.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    JComboBoxItem selectedItem = (JComboBoxItem) comboBox1.getSelectedItem();
+                    if (selectedItem != null) {
+                        long selectedId = selectedItem.getId();
+
+                        JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(selectedId);
+                        comboBox2.setModel(new DefaultComboBoxModel<>(teamList));
+                        comboBox2.setSelectedIndex(0);
+
+                        String content = comboBox.getSelectedItem().toString();
+                        JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                        JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                        JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                        String type = comboBox4.getSelectedItem().toString();
+
+                        Long shipId = shipMap.get(content);
+                        list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                        CommonTable.refreshTable(list, columnDto, subTable);
+                        subTable.setRowHeight(25);
+                        subTable.setAutoCreateRowSorter(true);
+                        subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                        subTable.addMouseListener(new MouseAdapter() {
+                            public void mouseClicked(MouseEvent e) {
+                                // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                                if (e.getButton() == MouseEvent.BUTTON1) {
+                                    // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                                    int r = subTable.getSelectedRow();
+                                    DjJdgzNetworkLevel3 data = list.get(r);
+                                    addOrUpdate.refreshTable(data.getId(),frame);
+                                }
+                            }
+                        });
+                    }
+                }
+            }
+        });
+        comboBox2.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId(),frame);
+                        }
+                    }
+                });
+            }
+        });
+        comboBox3.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId(),frame);
+                        }
+                    }
+                });
+            }
+        });
+        comboBox4.addItemListener(new ItemListener() {
+            public void itemStateChanged(final ItemEvent event) {
+                String content = comboBox.getSelectedItem().toString();
+                JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
+                JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
+                JComboBoxItem cabin = (JComboBoxItem) comboBox3.getSelectedItem();
+                String type = comboBox4.getSelectedItem().toString();
+
+                Long shipId = shipMap.get(content);
+                list = level3Service.getList(shipId, dept.getId(), team.getId(), cabin.getId(), type,null);
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId(),frame);
+                        }
+                    }
+                });
+            }
+        });
+
+        query.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                list = level3Service.getList(null, null, null, null, null,sb.getText());
+
+                CommonTable.refreshTable(list, columnDto, subTable);
+                subTable.setRowHeight(25);
+                subTable.setAutoCreateRowSorter(true);
+                subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+                subTable.addMouseListener(new MouseAdapter() {
+                    public void mouseClicked(MouseEvent e) {
+                        // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                        if (e.getButton() == MouseEvent.BUTTON1) {
+                            // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                            int r = subTable.getSelectedRow();
+                            DjJdgzNetworkLevel3 data = list.get(r);
+                            addOrUpdate.refreshTable(data.getId(),frame);
+                        }
+                    }
+                });
+            }
+        });
+
+
+        JScrollPane scrollTable = new JScrollPane(subTable);
+        jLeft.add(scrollTable, BorderLayout.CENTER);
+
+        JPanel track = addOrUpdate.createTrack(width / 2, height, list.get(0),  frame);
+
+
+        // 鍒涘缓姘村钩鍒嗗壊闈㈡澘
+        JSplitPane hSplitPane = new JSplitPane(
+                JSplitPane.HORIZONTAL_SPLIT,
+                jLeft,
+                track
+        );
+        hSplitPane.setDividerLocation(width / 2);
+        hSplitPane.setDividerSize(10);
+        hSplitPane.setOneTouchExpandable(true);
+        hSplitPane.setContinuousLayout(true);
+        panel.add(hSplitPane,BorderLayout.CENTER);
+
+        subTable.addMouseListener(new MouseAdapter() {
+            public void mouseClicked(MouseEvent e) {
+                // 浠呭綋榧犳爣宸﹂敭鍗曞嚮鏃跺搷搴�
+                if (e.getButton() == MouseEvent.BUTTON1) {
+                    // 寰楀埌閫変腑鐨勮鍒楃殑绱㈠紩鍊�
+                    int r = subTable.getSelectedRow();
+                    DjJdgzNetworkLevel3 data = list.get(r);
+                    addOrUpdate.refreshTable(data.getId(),frame);
+                }
+            }
+        });
+
+        return panel;
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/example/client/service/TeamGroupManageService.java b/src/main/java/com/example/client/service/TeamGroupManageService.java
index 29933c9..4b5ed0d 100644
--- a/src/main/java/com/example/client/service/TeamGroupManageService.java
+++ b/src/main/java/com/example/client/service/TeamGroupManageService.java
@@ -4,45 +4,35 @@
 import com.example.client.dto.JComboBoxItem;
 import com.example.client.model.TableButton;
 import com.example.client.utils.CommonTable;
-import com.example.client.utils.GBC;
-import com.example.server.progressTrack.model.DjJdgzNetworkLevel1;
-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 com.example.server.boatFleet.service.BoatFleetService;
+import com.example.server.teamGroup.model.SysTeamGroupClass;
+import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import com.example.server.user.model.SysUser;
+import com.example.server.user.service.UserService;
 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 java.awt.*;
-import java.awt.event.*;
-import java.text.SimpleDateFormat;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 
 @Service
 public class TeamGroupManageService {
     @Autowired
-    private DjJdgzNetworkLevel1Service level1Service;
-    @Autowired
-    private DjJdgzShipService djJdgzShipService;
-    @Autowired
-    private Level1AddOrUpdate addOrUpdate; // 娉ㄥ叆 AddOrupdate 瀹炰緥
+    private SysTeamGroupClassService sysTeamGroupClassService;
 
     private JTable table;
-    private List<DjJdgzNetworkLevel1> list;
-    private Map<String, Long> shipMap = new HashMap<>();
     private List<ColumnDto> columnDto;
 
     public JPanel createTable(Integer width, Integer height, JFrame jFrame) {
         JPanel panel = new JPanel();
-
+        List<SysTeamGroupClass> list;
         JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
         topJpanel.setPreferredSize(new Dimension(width, 37));
         topJpanel.setBackground(Color.WHITE);
@@ -52,66 +42,37 @@
         panel.add(topJpanel, BorderLayout.NORTH);
         panel.add(centerJpanel, BorderLayout.CENTER);
 
-        List<DjJdgzShip> shipList = djJdgzShipService.getList();
-        JComboBox comboBox = new JComboBox();
         JButton btnInsert = new JButton("鏂板");
 
-        topJpanel.add(comboBox);
         topJpanel.add(btnInsert);
 
-        comboBox.setPreferredSize(new Dimension(300, 28));
 
-        list = level1Service.getList(shipList.get(0).getId());
         List<TableButton> buttonList = new ArrayList<>();
         buttonList.add(new TableButton("edit", "缂栬緫"));
         buttonList.add(new TableButton("del", "鍒犻櫎"));
+        list = sysTeamGroupClassService.getListByTree();
 
         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) / 3, "autoCreate", false, null,null));
+        columnDto.add(new ColumnDto("閮ㄩ棬/涓撲笟", "name", (width - 3) / 3, null, false, null,null));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", (width - 10) / 3, "", true, buttonList,null));
 
         table = CommonTable.createCommonTable(list, columnDto);
         table.setRowHeight(25);
         table.setAutoCreateRowSorter(true);
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
-        final Boolean[] isFirstLoadData = {true};
-        comboBox.addItemListener(new ItemListener() {
-            public void itemStateChanged(final ItemEvent event) {
-                String content = comboBox.getSelectedItem().toString();
-                Long shipId = shipMap.get(content);
-                list = level1Service.getList(shipId);
-                if (!isFirstLoadData[0]) {
-                    CommonTable.refreshTable(list, columnDto,table);
-                    table.setRowHeight(25);
-                    table.setAutoCreateRowSorter(true);
-                    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        //tableModelListener(table,jFrame,list);
 
-                    tableModelListener(table,jFrame);
-                }else{
-                    isFirstLoadData[0] = false;
-                }
-            }
-        });
-
-        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);
-
-        btnInsert.addActionListener(new ActionListener() {
+       /* btnInsert.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                SysUser data = new SysUser();
+                addOrUpdate.openDialog(data,jFrame, columnDto,table);
                 jFrame.setEnabled(false);
-                insert(jFrame);
             }
-        });
+        });*/
 
         JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane.setViewportView(table);
@@ -122,103 +83,7 @@
         return panel;
     }
 
-    private void insert(JFrame jFrame) {
-        JFrame frame1 = new JFrame("鏂板涓�绾х綉缁滃浘");
-        frame1.setSize(350, 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);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
-            }
-        });
-        GridBagLayout layout = new GridBagLayout();
-        frame1.setLayout(layout);
-        JComboBoxItem[] shipList = djJdgzShipService.getListByItem();
-        JComboBoxItem[] levelList = {
-                new JComboBoxItem(1, "涓�绾�"),
-                new JComboBoxItem(2, "浜岀骇"),
-                new JComboBoxItem(3, "涓夌骇"),
-        };
-
-        JLabel JLabel1 = new JLabel("鐜勫彿");
-        JComboBox<JComboBoxItem> comboBox0 = new JComboBox<>(shipList);
-        comboBox0.setPreferredSize(new Dimension(185, 28));
-
-        JLabel JLabel2 = new JLabel("淇悊绛夌骇");
-        JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>(levelList);
-        comboBox1.setPreferredSize(new Dimension(185, 28));
-
-
-        JLabel JLabel3 = new JLabel("骞翠唤");
-        JSpinner yearPicker = new JSpinner(new SpinnerNumberModel(2024, 1900, 2100, 1)); // 褰撳墠骞翠唤涓�2024锛岃寖鍥翠负1900-2100锛屾闀夸负1
-        yearPicker.setPreferredSize(new Dimension(185, 28));
-        Font font = new Font("瀹嬩綋", Font.BOLD, 23);
-        yearPicker.setFont(font);
-        JSpinner.NumberEditor editor1 = new JSpinner.NumberEditor(yearPicker, "#");
-        JTextField textField = editor1.getTextField();
-        textField.setHorizontalAlignment(JTextField.LEFT); // 鏂囧瓧灞呭彸
-        textField.setFont(font); // 璁剧疆瀛椾綋
-        yearPicker.setEditor(editor1);
-
-
-        JLabel JLabel4 = new JLabel("璧峰鏃堕棿");
-        JXDatePicker beginDate = new JXDatePicker();
-        beginDate.setPreferredSize(new Dimension(185, 28));
-        SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd");
-        beginDate.setFormats(sdFormat);
-        beginDate.setDate(null);
-        beginDate.addActionListener(e -> {
-            // 鍋滄鍗曞厓鏍肩紪杈戯紝鍏抽棴寮瑰嚭绐楀彛
-            TableCellEditor editor = table.getCellEditor();
-            if (editor != null) {
-                editor.stopCellEditing();
-            }
-        });
-
-        JButton btnSave = new JButton("淇濆瓨");
-
-        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(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(beginDate, new GBC(1, 3, 1, 1).setAnchor(GBC.NORTHWEST).setInsets(5));
-
-        frame1.add(btnSave, new GBC(0, 4, 2, 1).setWeight(1, 0));
-
-        btnSave.addActionListener((e) -> {
-            JComboBoxItem ship = (JComboBoxItem) comboBox0.getSelectedItem();
-            JComboBoxItem level = (JComboBoxItem) comboBox1.getSelectedItem();
-            DjJdgzNetworkLevel1 data = new DjJdgzNetworkLevel1();
-            data.setShipId(ship.getId());
-            data.setMaintainLevel(Math.toIntExact(level.getId()));
-            data.setStartDate(sdFormat.format(beginDate.getDate()));
-            data.setYear((Integer) yearPicker.getValue());
-            data.setAdventDay(7);
-            data.setProjectName(ship.getName()+"-"+yearPicker.getValue() + "-" + level.getName());
-            level1Service.insert(data);
-            list = level1Service.getList(ship.getId());
-            CommonTable.refreshTable(list,columnDto,table);
-            table.setRowHeight(25);
-            table.setAutoCreateRowSorter(true);
-            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-            tableModelListener(table,jFrame);
-            frame1.dispose();
-            jFrame.setEnabled(true);//灏嗕富鐣岄潰鍐嶈缃负鍙搷浣滅殑
-        });
-    }
-
-    public void tableModelListener(JTable table,JFrame jFrame){
+ /*   public void tableModelListener(JTable table,JFrame jFrame,List<SysUser> list){
         table.getModel().addTableModelListener(e -> {
             // 妫�鏌ヤ簨浠剁被鍨�
             if (e.getType() == TableModelEvent.UPDATE) {
@@ -230,15 +95,15 @@
                 Object newValue = table.getModel().getValueAt(row, column);
                 // 杈撳嚭鍙樺寲淇℃伅
                 if (newValue.equals("edit")){
-                    DjJdgzNetworkLevel1 data = list.get(row);
-                    addOrUpdate.openDialog(data,jFrame);
+                    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) {
                         DefaultTableModel model = (DefaultTableModel) table.getModel();
-                        DjJdgzNetworkLevel1 data = list.get(row);
-                        level1Service.deleteLevel1(data.getId());
+                        SysUser data = list.get(row);
+                        userService.deleteLogic(data.getId());
                         list.remove(row);
                         model.removeRow(row);
                     }
@@ -247,7 +112,7 @@
             }
         });
     }
-
+*/
 
 }
 
diff --git a/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java b/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java
index ae76baf..5a3bc23 100644
--- a/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java
@@ -10,10 +10,13 @@
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3List;
 import com.example.server.progressTrack.model.DjJdgzTrackRecord;
 import com.example.server.progressTrack.service.DjJdgzNetworkLevel3ListService;
+import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service;
 import com.example.server.progressTrack.service.DjJdgzTrackRecordService;
 import com.example.server.progressTrack.service.NetWorkDiagramService;
 import com.example.server.sysOss.model.SysOss;
 import com.example.server.teamGroup.service.SysTeamGroupClassService;
+import com.example.server.user.model.SysUser;
+import com.example.server.utils.CacheUtils;
 import com.mxgraph.swing.mxGraphComponent;
 import com.mxgraph.view.mxGraph;
 import org.apache.commons.lang3.StringUtils;
@@ -36,6 +39,8 @@
 public class TrackRecordAddOrUpdate {
     @Autowired
     private DjJdgzTrackRecordService djJdgzTrackRecordService;
+    @Autowired
+    private DjJdgzNetworkLevel3Service djJdgzNetworkLevel3Service;
     @Autowired
     private TrackRecordManageService trackRecordManageService;
     @Autowired
@@ -285,6 +290,13 @@
         saveButton.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
+                SysUser user = (SysUser) CacheUtils.get("user", "user");
+                DjJdgzNetworkLevel3 level3 = djJdgzNetworkLevel3Service.get(data.getLevel3NetworkId());
+                if (user.getTeamgroup()!=null && !user.getTeamgroup().equals(level3.getTeamgroupId())){
+                    JOptionPane.showMessageDialog(null, "涓嶅彲鎿嶄綔鍏朵粬涓撲笟鏁版嵁", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
+                    return;
+                }
+
                 JComboBoxItem trackMethod = (JComboBoxItem) comboBox0.getSelectedItem();
                 JComboBoxItem currentStatus = (JComboBoxItem) comboBox1.getSelectedItem();
                 JComboBoxItem hasDelayRisk = (JComboBoxItem) comboBox2.getSelectedItem();
diff --git a/src/main/java/com/example/client/service/TrackRecordManageService.java b/src/main/java/com/example/client/service/TrackRecordManageService.java
index 913dfc1..52c1c2c 100644
--- a/src/main/java/com/example/client/service/TrackRecordManageService.java
+++ b/src/main/java/com/example/client/service/TrackRecordManageService.java
@@ -129,7 +129,7 @@
         columnDto.add(new ColumnDto("鎬绘壙淇崟浣�", "generalRepair", 180, null, false, null, null));
         columnDto.add(new ColumnDto("鍒嗘壙淇崟浣�", "repair", 180, null, false, null, null));
         columnDto.add(new ColumnDto("璺熻釜璁板綍", "", 100, "", true, buttonList, null));
-        columnDto.add(new ColumnDto("鍘嗗彶璁板綍", "trackNum", 50, null, false, null, null));
+        columnDto.add(new ColumnDto("鍘嗗彶璁板綍", "trackNum", 100, null, false, null, null));
         columnDto.add(new ColumnDto("瀹屾垚鏃堕棿", "actualCompletion", 200, null, false, null, null));
         columnDto.add(new ColumnDto("闄勪欢", "fileName", 200, null, false, null, null));
         columnDto.add(new ColumnDto("澶囨敞", "remark", 120, null, false, null, null));
@@ -187,7 +187,7 @@
         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, height - 120));
+        scrollPane.setPreferredSize(new Dimension(width - 20, height - 130));
         centerJpanel.add(scrollPane);
 
         return panel;
diff --git a/src/main/java/com/example/client/service/UserAddOrUpdate.java b/src/main/java/com/example/client/service/UserAddOrUpdate.java
index 305717f..bbd3da8 100644
--- a/src/main/java/com/example/client/service/UserAddOrUpdate.java
+++ b/src/main/java/com/example/client/service/UserAddOrUpdate.java
@@ -76,12 +76,12 @@
             passWord.setText(data.getPassword());
         }
 
-        JLabel JLabel3 = new JLabel("鎵�灞濼闃�");
+      /*  JLabel JLabel3 = new JLabel("鎵�灞濼闃�");
         JComboBox<JComboBoxItem> comboBox = new JComboBox<>(boatList);
         if(StringUtils.isNotBlank(data.getBoatfleet())){
             comboBox.setSelectedItem(BoxIteUtils.GetSelectItemById(boatList, data.getBoatFleetId()));
         }
-
+*/
         JLabel JLabel4 = new JLabel("鎵�灞為儴闂�");
         JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>(deptList);
         if(StringUtils.isNotBlank(data.getDept())){
@@ -126,27 +126,26 @@
         frame1.add(JLabel2, new GBC(0, 2, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         frame1.add(passWord, new GBC(1, 2, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        frame1.add(JLabel3, new GBC(0, 3, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        /*frame1.add(JLabel3, new GBC(0, 3, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
         frame1.add(comboBox, new GBC(1, 3, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+*/
+        frame1.add(JLabel4, new GBC(0, 3, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(comboBox1, new GBC(1, 3, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        frame1.add(JLabel4, new GBC(0, 4, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        frame1.add(comboBox1, new GBC(1, 4, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
+        frame1.add(JLabel5, new GBC(0, 4, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
+        frame1.add(comboBox2, new GBC(1, 4, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
 
-        frame1.add(JLabel5, new GBC(0, 5, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
-        frame1.add(comboBox2, new GBC(1, 5, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
-
-        frame1.add(saveButton, new GBC(0, 6, 1, 1).setWeight(0, 0));
+        frame1.add(saveButton, new GBC(0, 5, 1, 1).setWeight(0, 0));
 
         saveButton.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                JComboBoxItem boat = (JComboBoxItem) comboBox.getSelectedItem();
                 JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem();
                 JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem();
 
                 data.setDept(String.valueOf(dept.getId()));
                 data.setTeamgroup(String.valueOf(team.getId()));
-                data.setBoatfleet(String.valueOf(boat.getId()));
+                //data.setBoatfleet(String.valueOf(boat.getId()));
                 data.setUsername(userName.getText());
                 data.setNickName(nickName.getText());
                 data.setPassword(passWord.getText());
diff --git a/src/main/java/com/example/client/service/UserManageService.java b/src/main/java/com/example/client/service/UserManageService.java
index ceda20b..63cfdb2 100644
--- a/src/main/java/com/example/client/service/UserManageService.java
+++ b/src/main/java/com/example/client/service/UserManageService.java
@@ -75,14 +75,14 @@
 
         columnDto = new ArrayList<>();
         //columnDto.add(new ColumnDto("ID", "id", -1, null,false));
-        columnDto.add(new ColumnDto("搴忓彿", "", (width - 10) / 8, "autoCreate", false, null,null));
-        columnDto.add(new ColumnDto("鐢ㄦ埛鍚�", "username", (width - 10) / 8, null, false, null,null));
-        columnDto.add(new ColumnDto("鏄电О", "nickName", (width - 10) / 8, null, false, null,null));
-        columnDto.add(new ColumnDto("瀵嗙爜", "password", (width - 10) / 8, null, false, null,null));
-        columnDto.add(new ColumnDto("鎵�灞濼闃�", "boatFleetId", (width - 10) / 8, "dict", true, null,boatList));
-        columnDto.add(new ColumnDto("鎵�灞為儴闂�", "deptId", (width - 10) / 8, "dict", true, null,deptList));
-        columnDto.add(new ColumnDto("鎵�灞炰笓涓�", "teamgroupId", (width - 10) / 8, "dict", true, null,teamList));
-        columnDto.add(new ColumnDto("鎿嶄綔", "", (width - 10) / 8, "", true, buttonList,null));
+        columnDto.add(new ColumnDto("搴忓彿", "", (width - 10) / 7, "autoCreate", false, null,null));
+        columnDto.add(new ColumnDto("鐢ㄦ埛鍚�", "username", (width - 10) / 7, null, false, null,null));
+        columnDto.add(new ColumnDto("鏄电О", "nickName", (width - 10) / 7, null, false, null,null));
+        columnDto.add(new ColumnDto("瀵嗙爜", "password", (width - 10) / 7, null, false, null,null));
+        //columnDto.add(new ColumnDto("鎵�灞濼闃�", "boatFleetId", (width - 10) / 8, "dict", true, null,boatList));
+        columnDto.add(new ColumnDto("鎵�灞為儴闂�", "deptId", (width - 10) / 7, "dict", true, null,deptList));
+        columnDto.add(new ColumnDto("鎵�灞炰笓涓�", "teamgroupId", (width - 10) / 7, "dict", true, null,teamList));
+        columnDto.add(new ColumnDto("鎿嶄綔", "", (width - 10) / 7, "", true, buttonList,null));
 
         table = CommonTable.createCommonTable(list, columnDto);
         table.setRowHeight(25);
diff --git a/src/main/java/com/example/client/utils/CommonTable.java b/src/main/java/com/example/client/utils/CommonTable.java
index f9e4232..6321b72 100644
--- a/src/main/java/com/example/client/utils/CommonTable.java
+++ b/src/main/java/com/example/client/utils/CommonTable.java
@@ -37,7 +37,7 @@
             }
         };
         table.setModel(dataModel);
-        setColumnType(dtoList,table);
+        setColumnType(dtoList, table);
 
         return table;
     }
@@ -87,41 +87,16 @@
                 table.getColumnModel().getColumn(j).setCellRenderer(new CellComboBoxRenderer(itemMap));
                 table.getColumnModel().getColumn(j).setCellEditor(new CellComboBoxEditor(comboBox, itemMap));
             }
-            if ("dicts".equals(dtoList.get(j).getColumnType())) {
-                Map<Long, JComboBoxItem> itemMap = new HashMap<>();
-                JComboBoxItem[] dictList = dtoList.get(j).getDictList();
-                for (JComboBoxItem item : dictList) {
-                    itemMap.put(item.getId(), item);
-                }
-
-                // 鍒涘缓 JComboBox 骞舵坊鍔� Item 瀵硅薄
-                JComboBox<JComboBoxItem> comboBox = new JComboBox<>(dictList);
-
-                // 璁剧疆鑷畾涔夋覆鏌撳櫒
-                comboBox.setRenderer(new BasicComboBoxRenderer() {
-                    @Override
-                    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-                        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-                        if (value instanceof JComboBoxItem) {
-                            JComboBoxItem item = (JComboBoxItem) value;
-                            setText(item.getName()); // 鏄剧ず name
-                        }
-                        return this;
-                    }
-                });
-                table.getColumnModel().getColumn(j).setCellRenderer(new CellComboBoxRenderer(itemMap));
-                table.getColumnModel().getColumn(j).setCellEditor(new CellComboBoxEditor(comboBox, itemMap));
-            }
         }
     }
 
     public static void refreshTable(List<?> list, List<ColumnDto> dtoList, JTable table) {
         TableModel dataModel = createCommonTableModel(list, dtoList);
         table.setModel(dataModel);
-        setColumnType(dtoList,table);
+        setColumnType(dtoList, table);
     }
 
-    public static TableModel createCommonTableModel(List<?> list, List<ColumnDto> dtoList) {
+    public static String[][] getRowData(List<?> list, List<ColumnDto> dtoList) {
         String[][] rowData = new String[list.size()][dtoList.size()];
 
         for (int i = 0; i < list.size(); i++) {
@@ -143,8 +118,6 @@
                         rowData[i][j] = valueStr;
                     } else if (dtoList.get(j).getColumnType().equals("dict")) {
                         rowData[i][j] = valueStr;
-                    } else if (dtoList.get(j).getColumnType().equals("dicts")) {
-                        rowData[i][j] = valueStr;
                     } else if (dtoList.get(j).getColumnType().equals("autoCreate")) {
                         rowData[i][j] = "" + (i + 1);
                     }
@@ -153,6 +126,11 @@
                 }
             }
         }
+        return rowData;
+    }
+
+    public static TableModel createCommonTableModel(List<?> list, List<ColumnDto> dtoList) {
+        String[][] rowData = getRowData(list, dtoList);
         String[] columnNames = new String[dtoList.size()];
         for (int j = 0; j < dtoList.size(); j++) {
             columnNames[j] = dtoList.get(j).getColumnDesc();
diff --git a/src/main/java/com/example/client/utils/ComplexTable.java b/src/main/java/com/example/client/utils/ComplexTable.java
index 4aa369f..ddece2a 100644
--- a/src/main/java/com/example/client/utils/ComplexTable.java
+++ b/src/main/java/com/example/client/utils/ComplexTable.java
@@ -10,17 +10,18 @@
     public final static Object mergeCellX = "mergeCellX";//鏍囪瘑鍗曞厓鏍兼槸鍚﹁琚í鍚戝悎骞�
     public final static Object mergeCellY = "mergeCellY";//鏍囪瘑鍗曞厓鏍兼槸鍚﹁琚旱鍚戝悎骞�
 
-    public ComplexTable(Object[][] headerRows, Object[][] body) {
-        super(new DefaultTableModel(body, headerRows[0]));
+    public ComplexTable(Object[][] headerRows, Object[][] body,Integer width) {
+        super(new DefaultTableModel(body, headerRows[1]));
 //		super( 0 , headerRows[0].length );
         this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         this.setEnabled(false);
+
         //璁剧疆table鍐呭灞呬腑
         DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
         tcr.setHorizontalAlignment(JLabel.CENTER);// 杩欏彞鍜屼笂鍙ヤ綔鐢ㄤ竴鏍�
         this.setDefaultRenderer(Object.class, tcr);
-        for (int i = 0; i < 7; i++) {
-            this.getColumnModel().getColumn(i).setPreferredWidth(171);
+        for (int i = 0; i < headerRows[1].length; i++) {
+            this.getColumnModel().getColumn(i).setPreferredWidth(width);
         }
         this.setRowHeight(25);
         //璁剧疆琛ㄥごUI
diff --git a/src/main/java/com/example/client/utils/ComplexTableUI.java b/src/main/java/com/example/client/utils/ComplexTableUI.java
index 2d0aa81..bf7ad28 100644
--- a/src/main/java/com/example/client/utils/ComplexTableUI.java
+++ b/src/main/java/com/example/client/utils/ComplexTableUI.java
@@ -12,130 +12,153 @@
  * @author 闆烽攱
  * @Date 2019骞�5鏈�27鏃�
  */
+import javax.swing.*;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+import java.awt.*;
+import java.awt.event.MouseEvent;
+
 public class ComplexTableUI extends BasicTableUI {
-    private Object[][] headerRows;
+    private Object[][] headerRows; // 琛ㄥご鏁版嵁锛岀敤浜庡垽鏂悎骞堕�昏緫
     private JTable table;
-    private int singleRowHeight;
-    public ComplexTableUI(Object[][] headerRows,JTable table){
+    private int singleRowHeight; // 姣忚鐨勯珮搴�
+    private int headerHeight; // 琛ㄥご鐨勬�婚珮搴�
+
+    public ComplexTableUI(Object[][] headerRows, JTable table) {
         this.headerRows = headerRows;
         this.table = table;
-        //鑾峰彇鍗曡鐨勯珮搴︼紝涓嶈兘浣跨敤header.getHeight()鑾峰彇楂樺害锛屽洜涓烘鏃惰〃澶磋繕娌″垵濮嬪寲瀹屾瘯锛岃幏鍙栧嚭鏉ョ殑楂樺害鏄�0
-        this.singleRowHeight = table.getRowHeight();
-//		System.out.println(table.getRowHeight());
-
-        JTableHeader tableHeader = table.getTableHeader();
-        //璁剧疆琛ㄥご涓嶅厑璁告嫋鍔� 銆佺敱浜庡悎骞朵簡鍗曞厓鏍硷紝鎷栧姩涔嬪悗浼氫贡
-        tableHeader.setReorderingAllowed(false);
-        //璁剧疆琛ㄥご鏁翠綋楂樺害銆佸搴�
-        tableHeader.setPreferredSize(new Dimension(table.getWidth(), singleRowHeight * headerRows.length ));
+        this.singleRowHeight = table.getRowHeight(); // 鑾峰彇鍗曡楂樺害
+        this.headerHeight = singleRowHeight * headerRows.length; // 璁$畻琛ㄥご鎬婚珮搴�
     }
 
-    /**
-     * 閲嶅啓BasicTableHeaderUI.paint鐨勬柟娉曟槸鏈�閲嶈鐨勯儴鍒�
-     */
+    @Override
+    public void installUI(JComponent c) {
+        super.installUI(c);
+        // 绂佺敤鍒楃殑鎷栧姩锛屽洜涓哄悎骞跺崟鍏冩牸鍙兘瀵艰嚧甯冨眬娣蜂贡
+        table.getTableHeader().setReorderingAllowed(false);
+    }
+
     @Override
     public void paint(Graphics g, JComponent c) {
-        for( int row = 0 ; row < headerRows.length ; row++ ){
-            Object[] headerRow = headerRows[row];
-            for( int col = 0 ; col < headerRow.length ; col++ ){
-                Object cell = headerRow[col];
-                //濡傛灉鍗曞厓鏍间负鍚堝苟绫诲崟鍏冩牸銆佽幏鍙栧叾涓婃柟鏄疿鍚堝苟绫诲崟鍏冩牸 + 宸﹁竟鏄痀鍚堝苟绫诲崟鍏冩牸锛岄偅涔堣鍗曞厓鏍间笉闇�瑕佸湪绐楀彛灞曠ず
-                if( cell == ComplexTable.mergeCellX || cell == ComplexTable.mergeCellY || ( col > 0 && row > 0 && headerRow[col - 1] == ComplexTable.mergeCellY && headerRows[row-1][col] == ComplexTable.mergeCellX )  )
-                    continue;
-                Rectangle rect = this.getCellRect(row, col);
-                String text = cell == null ? "" : cell.toString();
+        super.paint(g, c); // 缁樺埗榛樿鐨勮〃鏍煎唴瀹�
+
+        // 閬嶅巻琛ㄦ牸涓讳綋鐨勬瘡涓�琛屽拰姣忎竴鍒�
+        for (int row = 0; row < table.getRowCount(); row++) {
+            for (int col = 0; col < table.getColumnCount(); col++) {
+                if (isMergedCell(row, col)) {
+                    continue; // 璺宠繃琚悎骞剁殑鍗曞厓鏍�
+                }
+
+                // 鑾峰彇鍗曞厓鏍肩殑缁樺埗鍖哄煙
+                Rectangle rect = getCellRect(row, col);
+                // 鑾峰彇鍗曞厓鏍煎唴瀹�
+                Object value = table.getValueAt(row, col);
+                String text = value == null ? "" : value.toString();
+
+                // 缁樺埗鍗曞厓鏍�
                 paintCell(g, rect, text);
             }
         }
-
     }
 
     /**
-     * 鑾峰彇褰撳墠鍗曞厓鏍奸渶瑕佸崰澶氬皯涓崟浣嶏紝姣斿姝ゆ椂鐨剅ow+1琛宑ol鍒楃殑鍊�=mergeCell锛岄偅涔堣鏄庡綋鍓嶅崟鍏冩牸闇�瑕佸崰2琛�
-     * @param row
-     * @param col
-     * @return
+     * 鍒ゆ柇鍗曞厓鏍兼槸鍚﹁鍚堝苟
      */
-    private Rectangle getCellRect(int row , int col){
-        int mergeRowNum = 1;
-        int nextRow = row;
-        //鍒ゆ柇鍑簓杞存柟鍚戝悎骞朵簡鍑犺
-        while( ++nextRow < headerRows.length ){
-            Object nextRowCell = headerRows[nextRow][col];
-            if( nextRowCell == ComplexTable.mergeCellY )
-                mergeRowNum++;
-            else
-                break;
-        }
-        int mergeCellNum = 1;
-        int nextCol = col;
-        Object[] headerRow = headerRows[row];
-        //鍒ゆ柇x杞存柟鍚戝悎骞朵簡鍑犲垪
-        while( ++nextCol < headerRow.length ){
-            Object nextCell = headerRow[nextCol];
-            if( nextCell == ComplexTable.mergeCellX )
-                mergeCellNum++;
-            else
-                break;
+    private boolean isMergedCell(int row, int col) {
+        // 绀轰緥锛氬亣璁惧悎骞堕�昏緫鍩轰簬琛ㄦ牸涓讳綋鏁版嵁
+        Object cellValue = table.getValueAt(row, col);
+        return cellValue == ComplexTable.mergeCellX || cellValue == ComplexTable.mergeCellY;
+    }
+
+    /**
+     * 鑾峰彇鍗曞厓鏍肩殑缁樺埗鍖哄煙
+     */
+    private Rectangle getCellRect(int row, int col) {
+        // 鑾峰彇榛樿鍗曞厓鏍煎尯鍩�
+        Rectangle rect = table.getCellRect(row, col, false);
+
+        // 璋冩暣 y 鍧愭爣锛岃�冭檻琛ㄥご楂樺害
+        rect.y += headerHeight;
+
+        // 濡傛灉闇�瑕佸悎骞跺崟鍏冩牸锛岃皟鏁村尯鍩熷ぇ灏�
+        if (isMergedCell(row, col)) {
+            int mergeRowNum = getMergeRowNum(row, col);
+            int mergeColNum = getMergeColNum(row, col);
+            rect.height = getCellHeight(mergeRowNum);
+            rect.width = getCellWidth(col, mergeColNum);
         }
 
-        //寰楀埌涓�涓崟鍏冩牸锛岃捣鐐瑰潗鏍囥�佸搴︺�侀珮搴�
-        Rectangle rect = new Rectangle();
-        rect.height = this.getCellHeight(mergeRowNum);
-        rect.width = this.getCellWidth( col , mergeCellNum);
-        rect.y = this.getCellY(row);
-        rect.x = this.getCellX( col );
         return rect;
     }
 
-    //鏍规嵁鍚堝苟琛屾暟寰楀埌鍗曞厓鏍肩殑楂樺害
-    private int getCellHeight( int mergeRowNum ){
-        int height = 0;
-        for( int i = 0 ; i < mergeRowNum ; i++ )
-            height += singleRowHeight;
-        return height;
-    }
-    //鏍规嵁鍚堝苟鍒楁暟寰楀埌鍗曞厓鏍煎搴�
-    private int getCellWidth( int column , int mergeCellNum ){
-        int width = 0;
-        TableColumnModel colModel = table.getColumnModel();
-        for( int i = 0 ; i < mergeCellNum ; i++ ){
-            width += colModel.getColumn( column + i ).getWidth();
+    /**
+     * 鑾峰彇鍚堝苟鐨勮鏁�
+     */
+    private int getMergeRowNum(int row, int col) {
+        int mergeRowNum = 1;
+        for (int nextRow = row + 1; nextRow < table.getRowCount(); nextRow++) {
+            Object nextRowCell = table.getValueAt(nextRow, col);
+            if (nextRowCell == ComplexTable.mergeCellY) {
+                mergeRowNum++;
+            } else {
+                break;
+            }
         }
-        return width;
-    }
-    //鏍规嵁鍗曞厓鏍兼墍鍦ㄥ垪寰楀埌x杞村潗鏍�
-    private int getCellX( int column ){
-        int width = 0;
-        TableColumnModel colModel = table.getColumnModel();
-        for( int i = 0 ; i < column ; i++ ){
-            width += colModel.getColumn( i ).getWidth();
-        }
-        return width;
-    }
-    //鏍规嵁鍗曞厓鏍兼墍鍦ㄨ寰楀埌y杞村潗鏍�
-    private int getCellY( int row ){
-        int height = 0;
-        for( int i = 0 ; i < row ; i++ ){
-            height += singleRowHeight;
-        }
-        return height;
+        return mergeRowNum;
     }
 
-    //寰楀埌鍏锋湁鎸囧畾鏂囨湰鐨勬爣绛�
-    private JLabel getComponent(String text){
+    /**
+     * 鑾峰彇鍚堝苟鐨勫垪鏁�
+     */
+    private int getMergeColNum(int row, int col) {
+        int mergeColNum = 1;
+        for (int nextCol = col + 1; nextCol < table.getColumnCount(); nextCol++) {
+            Object nextCell = table.getValueAt(row, nextCol);
+            if (nextCell == ComplexTable.mergeCellX) {
+                mergeColNum++;
+            } else {
+                break;
+            }
+        }
+        return mergeColNum;
+    }
+
+    /**
+     * 鏍规嵁鍚堝苟琛屾暟璁$畻鍗曞厓鏍奸珮搴�
+     */
+    private int getCellHeight(int mergeRowNum) {
+        return mergeRowNum * singleRowHeight;
+    }
+
+    /**
+     * 鏍规嵁鍚堝苟鍒楁暟璁$畻鍗曞厓鏍煎搴�
+     */
+    private int getCellWidth(int col, int mergeColNum) {
+        TableColumnModel colModel = table.getColumnModel();
+        int width = 0;
+        for (int i = 0; i < mergeColNum; i++) {
+            width += colModel.getColumn(col + i).getWidth();
+        }
+        return width;
+    }
+
+    /**
+     * 缁樺埗鍗曞厓鏍�
+     */
+    private void paintCell(Graphics g, Rectangle rect, String text) {
+        Component component = getComponent(text);
+        rendererPane.paintComponent(g, component, table, rect.x, rect.y,
+                rect.width, rect.height, true);
+    }
+
+    /**
+     * 鍒涘缓鐢ㄤ簬缁樺埗鐨勭粍浠�
+     */
+    private JLabel getComponent(String text) {
         JLabel label = new JLabel(text, JLabel.CENTER);
-        Font font = new Font("瀹嬩綋", Font.BOLD, 23);
+        Font font = new Font("瀹嬩綋", Font.PLAIN, 16);
         label.setFont(font);
-        label.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
+        label.setBorder(UIManager.getBorder("Table.cellBorder"));
         return label;
     }
-
-    private void paintCell(Graphics g, Rectangle cellRect , String text) {
-        Component component = this.getComponent(text);
-        rendererPane.paintComponent(g, component, table, cellRect.x, cellRect.y,
-                cellRect.width, cellRect.height, true);
-    }
-
-}
-
+}
\ No newline at end of file
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 429e4e9..121f264 100644
--- a/src/main/java/com/example/server/DataSync/service/DataSyncService.java
+++ b/src/main/java/com/example/server/DataSync/service/DataSyncService.java
@@ -155,12 +155,14 @@
             syncTable("dj_jdgz_network_level3_list");
             syncTable("dj_jdgz_track_record");
             syncTable("dj_sys_oss");
+            syncTable("dj_jdgz_dismant_track");
         } else if ("TD".equals(mySite)) {
             if ("TD".equals(otherSite)) {
                 syncTable("dj_jdgz_network_level3");
                 syncTable("dj_jdgz_network_level3_list");
                 syncTable("dj_jdgz_track_record");
                 syncTable("dj_sys_oss");
+                syncTable("dj_jdgz_dismant_track");
             } else if ("宸ヤ綔缁�".equals(otherSite)) {
                 syncTable("dj_jdgz_handover");
                 syncTable("dj_jdgz_network_level1");
@@ -171,6 +173,7 @@
                 syncTable("dj_jdgz_network_level3_list");
                 syncTable("dj_jdgz_track_record");
                 syncTable("dj_sys_oss");
+                syncTable("dj_jdgz_dismant_track");
             }
         } else if ("鍘傚".equals(mySite)) {
             syncTable("dj_jdgz_handover");
@@ -182,6 +185,7 @@
             syncTable("dj_jdgz_network_level3_list");
             syncTable("dj_jdgz_track_record");
             syncTable("dj_sys_oss");
+            syncTable("dj_jdgz_dismant_track");
         }
     }
 
diff --git a/src/main/java/com/example/server/entity/FieldMetaObjectHandler.java b/src/main/java/com/example/server/entity/FieldMetaObjectHandler.java
index 681cbd6..823c875 100644
--- a/src/main/java/com/example/server/entity/FieldMetaObjectHandler.java
+++ b/src/main/java/com/example/server/entity/FieldMetaObjectHandler.java
@@ -12,6 +12,7 @@
 import com.example.client.entity.PlatformEntity;
 import com.example.client.entity.PlatformLogEntity;
 import com.example.client.entity.TenantEntity;
+import com.example.server.progressTrack.model.TeamEntity;
 import com.example.server.user.model.SysUser;
 import com.example.server.utils.CacheUtils;
 import org.apache.ibatis.reflection.MetaObject;
@@ -37,6 +38,12 @@
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         // 灏嗗綋鍓嶆棩鏈熸牸寮忓寲涓哄瓧绗︿覆
         String date = currentDate.format(formatter);
+
+        if (object instanceof TeamEntity) {
+            TeamEntity entity = (TeamEntity) object;
+            entity.setCreateTeam(user.getBoatfleet());// 鍒涘缓鑰�
+            entity.setUpdateTeam(user.getBoatfleet());// 鍒涘缓鑰�
+        }
 
         if (object instanceof PlatformLogEntity) {
             PlatformLogEntity entity = (PlatformLogEntity) object;
@@ -69,6 +76,10 @@
             entity.setUpdateDate(date);// 鏇存柊鏃堕棿
         }
 
+        if (object instanceof TeamEntity) {
+            TeamEntity entity = (TeamEntity) object;
+            entity.setUpdateTeam(user.getBoatfleet());// 鍒涘缓鑰�
+        }
     }
 
     private boolean isEmpty(Long value) {
diff --git a/src/main/java/com/example/server/progressTrack/Dto/StatistDismantDto.java b/src/main/java/com/example/server/progressTrack/Dto/StatistDismantDto.java
new file mode 100644
index 0000000..c288c71
--- /dev/null
+++ b/src/main/java/com/example/server/progressTrack/Dto/StatistDismantDto.java
@@ -0,0 +1,19 @@
+package com.example.server.progressTrack.Dto;
+
+import lombok.Data;
+
+/**
+ * @author 14539
+ */
+@Data
+public class StatistDismantDto {
+    private String name;
+    private Integer sbsl;
+    private Integer zbjsl;
+    private Integer zbjcxsl;
+    private Integer sbcxsl;
+    private Integer dismantsl;
+    private Integer exitsl;
+    private Integer returnsl;
+    private Integer warehousesl;
+}
diff --git a/src/main/java/com/example/server/progressTrack/dao/DjJdgzDismantTrackDao.java b/src/main/java/com/example/server/progressTrack/dao/DjJdgzDismantTrackDao.java
index f78d96d..3ddbb97 100644
--- a/src/main/java/com/example/server/progressTrack/dao/DjJdgzDismantTrackDao.java
+++ b/src/main/java/com/example/server/progressTrack/dao/DjJdgzDismantTrackDao.java
@@ -2,6 +2,7 @@
 
 
 import com.example.server.dao.BaseDao;
+import com.example.server.progressTrack.Dto.StatistDismantDto;
 import com.example.server.progressTrack.model.DjJdgzDismantTrack;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -19,4 +20,10 @@
 
 
     List<DjJdgzDismantTrack> getList(Long level3Id, Long cabinId);
+
+    void deleteByName(String name);
+
+    List<DjJdgzDismantTrack> getdata(Long deptId, Long teamGroupId, Long level1NetworkId, Long level3NetworkId, Integer status);
+
+    List<StatistDismantDto> getStatist(Long level1Id);
 }
diff --git a/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel2ListDao.java b/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel2ListDao.java
index ce1684b..70d69f0 100644
--- a/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel2ListDao.java
+++ b/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel2ListDao.java
@@ -4,6 +4,7 @@
 import com.example.server.dao.BaseDao;
 import com.example.server.progressTrack.Dto.DiagramMajorDto;
 import com.example.server.progressTrack.Dto.DiagramNode2Dto;
+import com.example.server.progressTrack.Dto.DiagramNodeDto;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -31,7 +32,7 @@
 
     List<DjJdgzNetworkLevel2List> getByLevel1Node(Long level1NodeId);
 
-    List<DiagramNode2Dto> getNodeList(Long networkId);
+    List<DiagramNodeDto> getNodeList(Long networkId);
 
     List<DiagramMajorDto> getMajorList(Long networkId);
 
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 dacc786..f46d382 100644
--- a/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java
+++ b/src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java
@@ -19,7 +19,7 @@
 @Mapper
 public interface DjJdgzNetworkLevel3Dao extends BaseDao<DjJdgzNetworkLevel3> {
 
-    List<DjJdgzNetworkLevel3> getList(Long shipId);
+    List<DjJdgzNetworkLevel3> getList(Long shipId, Long deptId, Long teamId, Long cabinId, String type,String name);
     List<NetworkNodeStatusDto> getNodeStatusData(Long id);
 
     void deleteLevel3(Long id);
@@ -30,4 +30,6 @@
     JComboBoxItem[] getListByLevel1(Long level1NetworkId);
 
     void deleteByTeamGroup(Long teamGroupId, String name);
+
+    JComboBoxItem[] getListByExport(Long projectId, Long deptId, Long teamId);
 }
diff --git a/src/main/java/com/example/server/progressTrack/model/DjJdgzDismantTrack.java b/src/main/java/com/example/server/progressTrack/model/DjJdgzDismantTrack.java
index 8515e91..20a44e2 100644
--- a/src/main/java/com/example/server/progressTrack/model/DjJdgzDismantTrack.java
+++ b/src/main/java/com/example/server/progressTrack/model/DjJdgzDismantTrack.java
@@ -17,7 +17,7 @@
 @Data
 @EqualsAndHashCode(callSuper=false)
 @TableName("dj_jdgz_dismant_track")
-public class DjJdgzDismantTrack extends PlatformEntity {
+public class DjJdgzDismantTrack extends TeamEntity {
 	private static final long serialVersionUID = 1L;
 
 	@ApiModelProperty(value = "涓夌骇缃戠粶鍥綢D")
@@ -71,11 +71,25 @@
 	@ApiModelProperty(value = "鍏ュ簱浜哄憳")
 	private String warehouseStaff;
 
-	@ApiModelProperty(value = "鍏ュ簱浣嶇疆")
+	@ApiModelProperty(value = "褰撳墠浣嶇疆")
 	private String currentLocation;
+
+	@ApiModelProperty(value = "鐘舵��")
+	private Integer status;
 
 	@TableField(exist = false)
 	private String cabinName;
+
+	@TableField(exist = false)
+	private String deptName;
+	@TableField(exist = false)
+	private String teamGroupName;
+	@TableField(exist = false)
+	private String Level1NodeName;
+	@TableField(exist = false)
+	private String Level2NodeName;
+	@TableField(exist = false)
+	private String Level3NetworkName;
 
 	@TableField(exist = false)
 	private Long deptId;
@@ -83,4 +97,7 @@
 	@TableField(exist = false)
 	private Long teamgroupId;
 
+	@TableField(exist = false)
+	private String currStatus;
+
 }
diff --git a/src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java b/src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java
index 23bf567..c54a0c5 100644
--- a/src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java
+++ b/src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java
@@ -25,12 +25,6 @@
 	@ApiModelProperty(value = "缃戠粶鍥綢D")
 	private Long networkId;
 
-	@ApiModelProperty(value = "宸ョ▼涓撲笟ID")
-	private Long majorId;
-
-	@ApiModelProperty(value = "宸ョ▼涓撲笟鍚嶇О")
-	private String majorName;
-
 	@ApiModelProperty(value = "杩囩▼鍚嶇О")
 	private String processName;
 
diff --git a/src/main/java/com/example/server/progressTrack/model/DjJdgzTrackRecord.java b/src/main/java/com/example/server/progressTrack/model/DjJdgzTrackRecord.java
index 0fd0dc9..a52d614 100644
--- a/src/main/java/com/example/server/progressTrack/model/DjJdgzTrackRecord.java
+++ b/src/main/java/com/example/server/progressTrack/model/DjJdgzTrackRecord.java
@@ -18,7 +18,7 @@
 @Data
 @EqualsAndHashCode(callSuper=false)
 @TableName("dj_jdgz_track_record")
-public class DjJdgzTrackRecord extends BusiEntity {
+public class DjJdgzTrackRecord extends TeamEntity {
 	private static final long serialVersionUID = 1L;
 
 	@ApiModelProperty(value = "涓夌骇缃戠粶鍥綢D")
diff --git a/src/main/java/com/example/server/progressTrack/model/TeamEntity.java b/src/main/java/com/example/server/progressTrack/model/TeamEntity.java
new file mode 100644
index 0000000..38411d1
--- /dev/null
+++ b/src/main/java/com/example/server/progressTrack/model/TeamEntity.java
@@ -0,0 +1,24 @@
+package com.example.server.progressTrack.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.example.client.entity.CompanyEntity;
+import com.example.client.entity.IBusiLevel;
+import com.example.server.entity.BusiEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 涓氬姟绫伙紝鍒伴儴闂ㄥ眰绾�
+ */
+@Data
+public class TeamEntity extends BusiEntity {
+
+    @ApiModelProperty(value = "鏇存柊T闃�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateTeam;
+
+    @ApiModelProperty(value = "鍒涘缓T闃�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String createTeam;
+}
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 7b8a17b..b222e69 100644
--- a/src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java
+++ b/src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java
@@ -1,26 +1,393 @@
 package com.example.server.progressTrack.service;
 
+import com.example.client.dto.ColumnDto;
+import com.example.client.dto.JComboBoxItem;
 import com.example.client.service.BaseService;
-import com.example.client.utils.UUIDUtil;
+import com.example.server.ExportExcel.dto.ExcelColumnDto;
+import com.example.server.ExportExcel.dto.ExprotExcelDto;
+import com.example.server.ExportExcel.method.ExcelExport;
+import com.example.server.cabin.service.CabinService;
+import com.example.server.progressTrack.Dto.StatistDismantDto;
 import com.example.server.progressTrack.dao.DjJdgzDismantTrackDao;
-import com.example.server.progressTrack.dao.DjJdgzHandoverDao;
 import com.example.server.progressTrack.model.DjJdgzDismantTrack;
-import com.example.server.progressTrack.model.DjJdgzHandover;
+import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
+import com.example.server.progressTrack.model.DjJdgzTrackRecord;
+import com.example.server.utils.FileUtils;
+import com.example.server.utils.ImportUtil;
+import com.example.server.utils.TreeFieldUtils;
+import com.example.server.utils.UUIDUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 /**
  * dj_jdgz_track_record
  *
- * @author zt generator 
+ * @author zt generator
  * @since 1.0.0 2024-12-17
  */
 @Service
 public class DjJdgzDismantTrackService extends BaseService<DjJdgzDismantTrackDao, DjJdgzDismantTrack> {
+    @Autowired
+    DjJdgzNetworkLevel3Service djJdgzNetworkLevel3Service;
+    @Autowired
+    CabinService cabinService;
 
     public List<DjJdgzDismantTrack> getList(Long level3Id, Long cabinId) {
-        return baseDao.getList(level3Id,cabinId);
+        return baseDao.getList(level3Id, cabinId);
+    }
+
+    public void save(List<DjJdgzDismantTrack> list) {
+        for (DjJdgzDismantTrack data : list) {
+            if (data.getId() != null) {
+                this.update(data);
+            } else {
+                this.insert(data);
+            }
+        }
+
+    }
+
+    public String importExcel(String path) {
+        String result = "true";
+        Integer sum = 0; // 鎬诲叡鐨勬潯鏁�
+        Integer suc = 0; // 鎴愬姛鐨勬潯鏁�
+        Integer err = 0; // 澶辫触鐨勬潯鏁�
+        Map<String, Object> errMap = new HashMap<>();
+        MultipartFile mutFile = null;
+        try {
+            mutFile = FileUtils.convertFileToMultipartFile(path);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        String sheetName = null;
+        int row1 = 0;
+        try {
+            // 鑾峰彇瀵煎叆鏂囦欢鐨勫悗缂�鍚�
+            String fileName = mutFile.getOriginalFilename();
+            Workbook workbook = null;
+            //瑙e喅excel鐗堟湰闂
+            if (fileName != null && fileName.endsWith(".xls")) {
+                workbook = new HSSFWorkbook(mutFile.getInputStream());
+            } else if (fileName != null && fileName.endsWith(".xlsx")) {
+                workbook = new XSSFWorkbook(mutFile.getInputStream());
+            }
+            assert workbook != null; //鏂█濡傛灉[boolean琛ㄨ揪寮廬涓簍rue锛屽垯绋嬪簭缁х画鎵ц銆� 濡傛灉涓篺alse锛屽垯绋嬪簭鎶涘嚭AssertionError锛屽苟缁堟鎵ц銆�
+
+            Sheet sheet = workbook.getSheetAt(0);
+            int num = sheet.getLastRowNum(); // 涓�鍏辨湁澶氬皯琛�
+            sheetName = sheet.getSheetName(); //鑾峰彇褰撳墠sheet鍚嶇О
+            sum = sum + num;
+
+            List<DjJdgzNetworkLevel3> list = djJdgzNetworkLevel3Service.getList(null, null, null, null, null,null);
+            JComboBoxItem[] list1 = cabinService.getList();
+
+
+            Map<String, Long> level3Map = new HashMap<>();
+            Map<String, Long> cabinMap = new HashMap<>();
+            Map<String, Integer> statusMap = new HashMap<>();
+            statusMap.put("杩涜涓�",0);
+            statusMap.put("宸插畬鎴�",1);
+
+            for (DjJdgzNetworkLevel3 level3 : list) {
+                level3Map.put(level3.getName(), level3.getId());
+            }
+            for (JComboBoxItem item : list1) {
+                cabinMap.put(item.getName(), item.getId());
+            }
+
+            String curSbName = "";
+            Long curSbId = null;
+
+            for (int j = 1; j <= num; j++) {
+                DjJdgzDismantTrack data = new DjJdgzDismantTrack();
+
+                boolean isErr = false;
+                row1 = j + 1;
+                String pattern = "yyyy-MM-dd";
+                Row row = sheet.getRow(j);
+
+                String sbName = ImportUtil.getCellValue(row, 0, pattern);
+                String name = ImportUtil.getCellValue(row, 1, pattern);
+                String cabin = ImportUtil.getCellValue(row, 2, pattern);
+                String cxTime = ImportUtil.getCellValue(row, 3, pattern);
+                String cxUnit = ImportUtil.getCellValue(row, 4, pattern);
+                String cxStaff = ImportUtil.getCellValue(row, 5, pattern);
+                String cxAssis = ImportUtil.getCellValue(row, 6, pattern);
+                String ccTime = ImportUtil.getCellValue(row, 7, pattern);
+                String ccUnit = ImportUtil.getCellValue(row, 8, pattern);
+                String ccStaff = ImportUtil.getCellValue(row, 9, pattern);
+                String ccAssis = ImportUtil.getCellValue(row, 10, pattern);
+                String tzTime = ImportUtil.getCellValue(row, 11, pattern);
+                String czr = ImportUtil.getCellValue(row, 12, pattern);
+                String tzWeight = ImportUtil.getCellValue(row, 13, pattern);
+                String tzAssis = ImportUtil.getCellValue(row, 14, pattern);
+                String rkTime = ImportUtil.getCellValue(row, 15, pattern);
+                String rkStaff = ImportUtil.getCellValue(row, 16, pattern);
+                String local = ImportUtil.getCellValue(row, 17, pattern);
+                String statusStr = ImportUtil.getCellValue(row, 18, pattern);
+
+                if (StringUtils.isBlank(sbName)) {
+                    if (StringUtils.isBlank(curSbName)) {
+                        result = "绗�" + j + "琛�" + "璁惧涓嶈兘涓虹┖";
+                        isErr = true;
+                    } else {
+                        sbName = curSbName;
+                        curSbId = level3Map.get(sbName);
+                    }
+                } else {
+                    if (StringUtils.isBlank(curSbName) || !sbName.equals(curSbName)) {
+                        curSbName = sbName;
+                        if (level3Map.get(curSbName) == null) {
+                            result = "绗�" + j + "琛�" + "璁惧涓嶅瓨鍦�";
+                            isErr = true;
+                        } else {
+                            curSbId = level3Map.get(curSbName);
+                        }
+                    }
+                }
+
+                Long id = UUIDUtil.generateId();
+                if (StringUtils.isEmpty(name)) {
+                    result = "绗�" + j + "琛�" + "瀛愰儴浠跺悕绉颁笉鑳戒负绌�";
+                    isErr = true;
+                } else {
+                    data.setId(id);
+                    data.setName(name);
+                    data.setLevel3NetworkId(curSbId);
+                    baseDao.deleteByName(name);
+                }
+
+                if (StringUtils.isEmpty(cabin)) {
+                    result = "绗�" + j + "琛�" + "鑸卞涓嶈兘涓虹┖";
+                    isErr = true;
+                } else {
+                    if (cabinMap.get(cabin) == null) {
+                        result = "绗�" + j + "琛�" + "鑸卞涓嶅瓨鍦�";
+                        isErr = true;
+                    } else {
+                        Long cabinId = cabinMap.get(cabin);
+                        data.setCabinId(cabinId);
+                    }
+                }
+
+                if (StringUtils.isNotBlank(cxTime)) {
+                    if (cxTime.matches("[0-9/]+")) {
+                        cxTime = cxTime.replace("/", "-");
+                        data.setDismantTime(cxTime);
+                    } else if (cxTime.matches("[0-9.]+")) {
+                        cxTime = cxTime.replace(".", "-");
+                        data.setDismantTime(cxTime);
+                    } else if (cxTime.matches("[0-9-]+")) {
+                        data.setDismantTime(cxTime);
+                    } else {
+                        result = "绗�" + j + "琛�" + "鎷嗗嵏鏃堕棿鏃ユ湡鏍煎紡涓嶈鑼�";
+                        isErr = true;
+                    }
+                }
+
+                if (StringUtils.isNotBlank(cxUnit)) {
+                    data.setDismantUnit(cxUnit);
+                }
+                if (StringUtils.isNotBlank(cxStaff)) {
+                    data.setDismantStaff(cxStaff);
+                }
+                if (StringUtils.isNotBlank(cxAssis)) {
+                    data.setDismantAssistant(cxAssis);
+                }
+
+                if (StringUtils.isNotBlank(ccTime)) {
+                    if (ccTime.matches("[0-9/]+")) {
+                        ccTime = ccTime.replace("/", "-");
+                        data.setExitTime(ccTime);
+                    } else if (ccTime.matches("[0-9.]+")) {
+                        ccTime = ccTime.replace(".", "-");
+                        data.setExitTime(ccTime);
+                    } else if (ccTime.matches("[0-9-]+")) {
+                        data.setExitTime(ccTime);
+                    } else {
+                        result = "绗�" + j + "琛�" + "鍑鸿埍鏃堕棿鏃ユ湡鏍煎紡涓嶈鑼�";
+                        isErr = true;
+                    }
+                }
+
+                if (StringUtils.isNotBlank(ccUnit)) {
+                    data.setExitUnit(ccUnit);
+                }
+                if (StringUtils.isNotBlank(ccStaff)) {
+                    data.setExitStaff(ccStaff);
+                }
+                if (StringUtils.isNotBlank(ccAssis)) {
+                    data.setExitAssistant(ccAssis);
+                }
+
+                if (StringUtils.isNotBlank(tzTime)) {
+                    if (tzTime.matches("[0-9/]+")) {
+                        tzTime = tzTime.replace("/", "-");
+                        data.setReturnWeightTime(tzTime);
+                    } else if (tzTime.matches("[0-9.]+")) {
+                        tzTime = tzTime.replace(".", "-");
+                        data.setReturnWeightTime(tzTime);
+                    } else if (tzTime.matches("[0-9-]+")) {
+                        data.setReturnWeightTime(tzTime);
+                    } else {
+                        result = "绗�" + j + "琛�" + "閫�閲嶆椂闂存棩鏈熸牸寮忎笉瑙勮寖";
+                        isErr = true;
+                    }
+                }
+
+                if (StringUtils.isNotBlank(czr)) {
+                    data.setWeigher(czr);
+                }
+                if (StringUtils.isNotBlank(tzWeight)) {
+                    data.setReturnWeight(tzWeight);
+                }
+                if (StringUtils.isNotBlank(tzAssis)) {
+                    data.setReturnWeightAssistant(tzAssis);
+                }
+
+                if (StringUtils.isNotBlank(rkTime)) {
+                    if (rkTime.matches("[0-9/]+")) {
+                        rkTime = rkTime.replace("/", "-");
+                        data.setWarehouseTime(rkTime);
+                    } else if (rkTime.matches("[0-9.]+")) {
+                        rkTime = rkTime.replace(".", "-");
+                        data.setWarehouseTime(rkTime);
+                    } else if (rkTime.matches("[0-9-]+")) {
+                        data.setWarehouseTime(rkTime);
+                    } else {
+                        result = "绗�" + j + "琛�" + "鍏ュ簱鏃堕棿鏃ユ湡鏍煎紡涓嶈鑼�";
+                        isErr = true;
+                    }
+                }
+
+                if (StringUtils.isNotBlank(rkStaff)) {
+                    data.setWarehouseStaff(rkStaff);
+                }
+
+                if (StringUtils.isNotBlank(local)) {
+                    data.setCurrentLocation(local);
+                }
+                if (StringUtils.isNotBlank(statusStr)) {
+                    data.setStatus(statusMap.get(statusStr));
+                }
+
+                if (!isErr) {
+                    this.insert(data);
+                }
+                if (isErr) {
+                    err++;
+                    continue;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            result = "瀵煎叆" + row1 + "琛屾暟鎹椂妫�娴嬪埌寮傚父锛屼腑鏂鍏ユ搷浣溿��";
+        }
+
+        suc = sum - err;
+
+        return result;
+    }
+
+    public void exportExcel(String filePath, Long deptId, Long teamGroupId, Long level1NetworkId, Long level3NetworkId, Integer status) {
+        List<ExprotExcelDto> dtos = new ArrayList<>();
+
+        Map<Integer, String> statusMap = new HashMap<>();
+        statusMap.put(0, "杩涜涓�");
+        statusMap.put(1, "宸插畬鎴�");
+
+        ExprotExcelDto dto = new ExprotExcelDto();
+        dto.setSheetName("鎷嗗嵏杩涘害鏄庣粏");
+        List<ExcelColumnDto> columnDto = new ArrayList<>();
+
+        columnDto.add(new ExcelColumnDto("涓�绾ц妭鐐�", "Level1NodeName", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("浜岀骇鑺傜偣", "Level2NodeName", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("璁惧鍚嶇О", "Level3NetworkName", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("閮ㄩ棬", "deptName", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("涓撲笟", "teamGroupName", 20, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("鑸卞", "cabinName", 10, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("瀛愰儴浠跺悕绉�", "name", 25, HorizontalAlignment.LEFT));
+        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("鍑鸿埍鏃堕棿", "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("閫�閲嶆椂闂�", "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("鍏ュ簱鏃堕棿", "warehouseTime", 15, HorizontalAlignment.CENTER));
+        columnDto.add(new ExcelColumnDto("鍏ュ簱浜哄憳", "warehouseStaff", 15, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("褰撳墠瀛樻斁浣嶇疆", "currentLocation", 15, HorizontalAlignment.LEFT));
+        columnDto.add(new ExcelColumnDto("鐘舵��", "currStatus", 10, HorizontalAlignment.CENTER));
+
+        List<DjJdgzDismantTrack> list = baseDao.getdata(deptId,teamGroupId, level1NetworkId, level3NetworkId, status);
+
+        for (int i = 0; i < list.size(); i++) {
+            DjJdgzDismantTrack data = list.get(i);
+
+            if (data.getStatus() != null) {
+                data.setCurrStatus(statusMap.get(data.getStatus()));
+            }
+        }
+        String[] filed = {"Level1NodeName", "Level2NodeName", "Level3NetworkName"};
+        TreeFieldUtils.build(list, filed);
+        dto.setColumnDto(columnDto);
+        //dto.setValues(content);
+        dto.setDataList(list);
+
+
+       /* ExprotExcelDto dto2 = new ExprotExcelDto();
+        dto2.setSheetName("鑺傜偣姹囨��");
+        List<ExcelColumnDto> columnDto2 = new ArrayList<>();
+        List<DjJdgzTrackRecord> list2 = baseDao.getSummaryData(teamgroupId, level1NetworkId, level3NetworkId, level3NodeId, status, beginDate, endDate, istq);
+
+
+        columnDto2.add(new ExcelColumnDto("涓�绾ц妭鐐�", "Level1NodeName", 25, HorizontalAlignment.LEFT));
+        columnDto2.add(new ExcelColumnDto("浜岀骇鑺傜偣", "Level2NodeName", 25, HorizontalAlignment.LEFT));
+        columnDto2.add(new ExcelColumnDto("涓夌骇缃戠粶鍚嶇О\n" + "锛堣澶囧悕绉帮級", "Level3NetworkName", 25, HorizontalAlignment.LEFT));
+        columnDto2.add(new ExcelColumnDto("涓夌骇鑺傜偣", "Level3NodeName", 15, HorizontalAlignment.LEFT));
+        columnDto2.add(new ExcelColumnDto("璁″垝\n" + "瀹屾垚鏃堕棿", "RequiredCompletionTime", 12, HorizontalAlignment.CENTER));
+        columnDto2.add(new ExcelColumnDto("鏄惁鑴辨湡", "Istq", 5, HorizontalAlignment.CENTER));
+        columnDto2.add(new ExcelColumnDto("鑴辨湡娆℃暟", "Tqcs", 5, HorizontalAlignment.RIGHT));
+        columnDto2.add(new ExcelColumnDto("鏈�澶ч璁n" + "瀹屾垚鏃堕棿", "Maxtime", 12, HorizontalAlignment.CENTER));
+        columnDto2.add(new ExcelColumnDto("鏈�澶ц劚鏈熷ぉ鏁�", "MaxDay", 10, HorizontalAlignment.RIGHT));
+        columnDto2.add(new ExcelColumnDto("鏈�鏂伴璁n" + "瀹屾垚鏃堕棿", "Zxtime", 12, HorizontalAlignment.CENTER));
+        columnDto2.add(new ExcelColumnDto("鏈�鏂拌劚鏈熷ぉ鏁�", "ZxDay", 10, HorizontalAlignment.RIGHT));
+
+        TreeFieldUtils.build(list2, filed);
+        dto2.setColumnDto(columnDto2);
+        //dto2.setValues(content2);
+        dto2.setDataList(list2);*/
+
+        dtos.add(dto);
+        //dtos.add(dto2);
+        try {
+            ExcelExport.getHSSFWorkbook(filePath, dtos);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public List<StatistDismantDto> getStatist(Long level1Id) {
+        return baseDao.getStatist(level1Id);
     }
 }
diff --git a/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel2ListService.java b/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel2ListService.java
index 3478a9f..19d4d01 100644
--- a/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel2ListService.java
+++ b/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel2ListService.java
@@ -7,6 +7,7 @@
 import com.example.server.major.service.SysMajorService;
 import com.example.server.progressTrack.Dto.DiagramMajorDto;
 import com.example.server.progressTrack.Dto.DiagramNode2Dto;
+import com.example.server.progressTrack.Dto.DiagramNodeDto;
 import com.example.server.progressTrack.dao.DjJdgzNetworkLevel2ListDao;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel1;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List;
@@ -92,14 +93,10 @@
         baseDao.updateData(djJdgzNetworkLevel2List.getId(), djJdgzNetworkLevel2List.getExpireSituation());
     }
 
-    public void save(Long networkId, JPanel jPanel, mxGraph graph) {
+    public void saveDiagram(Long networkId, JPanel jPanel, mxGraph graph) {
+        List<DiagramNodeDto> list2 = baseDao.getNodeList(networkId);
+        String simpleDiagram = netWorkDiagramService.createSimpleDiagram(list2);
         DjJdgzNetworkLevel2 level2 = djJdgzNetworkLevel2Service.get(networkId);
-        DjJdgzNetworkLevel1 level1 = djJdgzNetworkLevel1Service.get(level2.getLevel1NetworkId());
-
-        List<DiagramMajorDto> majorList = baseDao.getMajorList(networkId);
-        List<DiagramNode2Dto> node2List = baseDao.getNodeList(networkId);
-        String simpleDiagram = netWorkDiagramService.createDiagram(majorList,node2List,level1.getStartDate(),5000,10);
-
         level2.setContent(simpleDiagram);
         djJdgzNetworkLevel2Service.update(level2);
         netWorkDiagramService.getCsDiagram(graph,simpleDiagram,null,jPanel.getWidth(),jPanel.getHeight());
@@ -146,7 +143,6 @@
             sheetName = sheet.getSheetName(); //鑾峰彇褰撳墠sheet鍚嶇О
             sum = sum + num;
 
-            Map<String, Long> mapMajors = new HashMap<>();
             for (int j = 1; j < num; j++) {
                 DjJdgzNetworkLevel2List data = new DjJdgzNetworkLevel2List();
                 data.setNetworkId(projectId);
@@ -155,28 +151,10 @@
                 row1 = j + 1;
                 String pattern = "yyyy-MM-dd";
                 Row row = sheet.getRow(j);
-                Map<String, String> mapMajor = sysMajorService.getMapMajor(false, String.valueOf(20000), null, "");
 
 
-                String majorName = ImportUtil.getCellValue(row, 0, pattern); //宸ョ▼涓撲笟
-                String processName = ImportUtil.getCellValue(row, 1, pattern); // 杩囩▼鍚嶇О
-                String requiredCompletionTime = ImportUtil.getCellValue(row, 2, pattern); // 瑕佹眰瀹屾垚鏃堕棿
-
-
-                if (StringUtils.isEmpty(majorName)) {
-                    isErr = true;
-                    result = "绗�"+j+"琛�"+"涓撲笟涓嶈兘涓虹┖";
-                } else {
-                    String majorIdStr = mapMajor.get(majorName);
-                    if (majorIdStr == null) {
-                        isErr = true;
-                        result = "绗�"+j+"琛�"+"涓撲笟涓嶅瓨鍦�";
-                    } else {
-                        data.setMajorId(Convert.toLong(majorIdStr));
-                    }
-
-                }
-                data.setMajorName(majorName);
+                String processName = ImportUtil.getCellValue(row, 0, pattern); // 杩囩▼鍚嶇О
+                String requiredCompletionTime = ImportUtil.getCellValue(row, 1, pattern); // 瑕佹眰瀹屾垚鏃堕棿
 
                 if (StringUtils.isEmpty(processName)) {
                     isErr = true;
@@ -235,6 +213,18 @@
         return baseDao.getNode(networkId);
     }
 
+    public void save(List<DjJdgzNetworkLevel2List> list, Long networkId, JPanel jPanel, mxGraph finalGraph) {
+        for (DjJdgzNetworkLevel2List data : list){
+            data.setNetworkId(networkId);
+            if (data.getId()!=null){
+                this.update(data);
+            }else{
+                this.insert(data);
+            }
+        }
+        this.saveDiagram(networkId,jPanel,finalGraph);
+    }
+
  /*   public String getDiagram(Long networkId, Date startDate, Integer diagramWidth, Integer lineNodeNum) {
         List<DiagramMajorDto> majorList = baseDao.getMajorList(networkId);
         List<DiagramNode2Dto> node2List = baseDao.getNodeList(networkId);
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 557a72c..d4bbe69 100644
--- a/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java
+++ b/src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java
@@ -2,6 +2,7 @@
 
 import com.example.client.dto.JComboBoxItem;
 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.dao.DjJdgzNetworkLevel3Dao;
 import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
@@ -39,13 +40,15 @@
     DjJdgzNetworkLevel3ListService DjJdgzNetworkLevel3ListService;
     @Autowired
     SysTeamGroupClassService sysTeamGroupClassService;
+    @Autowired
+    CabinService cabinService;
 
 
     @Value("${zt.oss.local-path}")
     private String path;
 
-    public List<DjJdgzNetworkLevel3> getList(Long shipId) {
-        List<DjJdgzNetworkLevel3> list = baseDao.getList(shipId);
+    public List<DjJdgzNetworkLevel3> getList(Long shipId, Long deptId, Long teamId, Long cabinId, String type, String name) {
+        List<DjJdgzNetworkLevel3> list = baseDao.getList(shipId, deptId, teamId, cabinId, type, name);
         return list;
     }
 
@@ -120,15 +123,33 @@
             sum = sum + num;
 
             Map<Integer, String> mapProcessName = new HashMap<>();
-            mapProcessName.put(1,"璁惧鎷嗗嵏鍑鸿埍");
-            mapProcessName.put(2,"璁惧鍒嗕氦");
-            mapProcessName.put(3,"鎷嗘閴村畾");
-            mapProcessName.put(4,"璁惧杩斿巶");
-            mapProcessName.put(5,"鍥炶");
+            mapProcessName.put(1, "璁惧鎷嗗嵏鍑鸿埍");
+            mapProcessName.put(2, "璁惧鍒嗕氦");
+            mapProcessName.put(3, "鎷嗘閴村畾");
+            mapProcessName.put(4, "璁惧杩斿巶");
+            mapProcessName.put(5, "鍥炶");
 
             Map<String, String> mapTeamGroup = sysTeamGroupClassService.getMapGroup(false, "hld");
+            JComboBoxItem[] cabinList = cabinService.getList();
+            JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
+            JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
+
+            Map<String, Long> cabinMap = new HashMap<>();
+            Map<String, Long> deptMap = new HashMap<>();
+            Map<String, Long> teamMap = new HashMap<>();
+
+            for (JComboBoxItem item : cabinList) {
+                cabinMap.put(item.getName(), item.getId());
+            }
+            for (JComboBoxItem item : deptList) {
+                deptMap.put(item.getName(), item.getId());
+            }
+            for (JComboBoxItem item : teamList) {
+                teamMap.put(item.getName(), item.getId());
+            }
 
             for (int j = 1; j <= num; j++) {
+                int sort = 0;
                 DjJdgzNetworkLevel3 data = new DjJdgzNetworkLevel3();
                 DjJdgzNetworkLevel3List node = new DjJdgzNetworkLevel3List();
 
@@ -138,206 +159,247 @@
                 Row row = sheet.getRow(j);
 
                 String name = ImportUtil.getCellValue(row, 0, pattern);
-                String teamGroup = ImportUtil.getCellValue(row, 1, pattern);
-                String time1 = ImportUtil.getCellValue(row, 2, pattern);
-                String time2 = ImportUtil.getCellValue(row, 3, pattern);
-                String time3 = ImportUtil.getCellValue(row, 4, pattern);
-                String time4 = ImportUtil.getCellValue(row, 5, pattern);
-                String time5 = ImportUtil.getCellValue(row, 6, pattern);
-                String repairUnit = ImportUtil.getCellValue(row, 7, pattern);
-                String repairUnitDirector = ImportUtil.getCellValue(row, 8, pattern);
-                String repairUnitContact = ImportUtil.getCellValue(row, 9, pattern);
-                String generalRepairUnit = ImportUtil.getCellValue(row, 10, pattern);
-                String generalRepairUnitDirector = ImportUtil.getCellValue(row, 11, pattern);
-                String generalRepairUnitContact = ImportUtil.getCellValue(row, 12, pattern);
+                String deptStr = ImportUtil.getCellValue(row, 1, pattern);
+                String teamGroupStr = ImportUtil.getCellValue(row, 2, pattern);
+                String cabinStr = ImportUtil.getCellValue(row, 3, pattern);
+                String typeStr = ImportUtil.getCellValue(row, 4, pattern);
+                String time1 = ImportUtil.getCellValue(row, 5, pattern);
+                String time2 = ImportUtil.getCellValue(row, 6, pattern);
+                String time3 = ImportUtil.getCellValue(row, 7, pattern);
+                String time4 = ImportUtil.getCellValue(row, 8, pattern);
+                String time5 = ImportUtil.getCellValue(row, 9, pattern);
+                String repairUnit = ImportUtil.getCellValue(row, 10, pattern);
+                String repairUnitDirector = ImportUtil.getCellValue(row, 11, pattern);
+                String repairUnitContact = ImportUtil.getCellValue(row, 12, pattern);
+                String generalRepairUnit = ImportUtil.getCellValue(row, 13, pattern);
+                String generalRepairUnitDirector = ImportUtil.getCellValue(row, 14, pattern);
+                String generalRepairUnitContact = ImportUtil.getCellValue(row, 15, pattern);
 
                 Long id = UUIDUtil.generateId();
                 if (StringUtils.isEmpty(name)) {
-                    result = "绗�"+j+"琛�"+"璁惧鍚嶇О涓嶈兘涓虹┖";
+                    result = "绗�" + j + "琛�" + "璁惧鍚嶇О涓嶈兘涓虹┖";
                     isErr = true;
+                    continue;
                 } else {
                     data.setId(id);
+                    node.setNetworkId(id);
                     data.setName(name);
                     data.setLevel1NetworkId(level1NetworkId);
                     data.setLevel2NetworkId(level2NetworkId);
                     data.setLevel2NodeId(level2NodeId);
                 }
 
-                if (StringUtils.isEmpty(teamGroup)) {
-                    result = "绗�"+j+"琛�"+"涓撲笟涓嶈兘涓虹┖";
+                if (StringUtils.isEmpty(deptStr)) {
+                    result = "绗�" + j + "琛�" + "閮ㄩ棬涓嶈兘涓虹┖";
                     isErr = true;
+                    continue;
                 } else {
-                    Long teamGroupId = Long.valueOf(mapTeamGroup.get(teamGroup));
-                    //鍒犻櫎鏁版嵁搴撲腑鐩稿悓涓撲笟鍙婄浉鍚屼笁绾х綉缁滃浘鏁版嵁
-                    baseDao.deleteByTeamGroup(teamGroupId, name);
-
-                    node.setTeamgroupId(teamGroupId);
-                    node.setTeamgroupName(teamGroup);
-                    node.setNetworkId(id);
+                    if (deptMap.get(deptStr) == null) {
+                        result = "绗�" + j + "琛�" + "閮ㄩ棬涓嶅瓨鍦�";
+                        isErr = true;
+                        continue;
+                    } else {
+                        Long deptId = deptMap.get(deptStr);
+                        data.setDeptId(deptId);
+                    }
                 }
 
-                if (StringUtils.isEmpty(time1)) {
-                    result = "绗�"+j+"琛�"+"绗�"+1+"涓�"+"鑺傜偣鏃堕棿涓嶈兘涓虹┖";
+                if (StringUtils.isEmpty(teamGroupStr)) {
+                    result = "绗�" + j + "琛�" + "涓撲笟涓嶈兘涓虹┖";
                     isErr = true;
+                    continue;
                 } else {
+                    if (teamMap.get(teamGroupStr) == null) {
+                        result = "绗�" + j + "琛�" + "涓撲笟涓嶅瓨鍦�";
+                        isErr = true;
+                        continue;
+                    } else {
+                        Long teamId = teamMap.get(teamGroupStr);
+                        data.setTeamgroupId(teamId);
+                        data.setTeamgroupName(teamGroupStr);
+                    }
+                }
+
+                if (StringUtils.isEmpty(cabinStr)) {
+                    result = "绗�" + j + "琛�" + "鑸卞涓嶈兘涓虹┖";
+                    isErr = true;
+                    continue;
+                } else {
+                    String[] cabins = cabinStr.split(",");
+
+                    // 鐢ㄤ簬瀛樺偍鎷兼帴鍚庣殑 id
+                    StringBuilder idBuilder = new StringBuilder();
+
+                    // 閬嶅巻姣忎釜閿�
+                    for (String key : cabins) {
+                        key = key.trim(); // 鍘婚櫎鍙兘鐨勭┖鏍�
+                        Long cabinId = cabinMap.get(key);
+                        // 濡傛灉閿湪 Map 涓瓨鍦�
+                        if (cabinId != null) {
+                            if (idBuilder.length() > 0) {
+                                idBuilder.append(","); // 娣诲姞鍒嗛殧绗�
+                            }
+                            idBuilder.append(cabinId); // 娣诲姞 id
+                        } else {
+                            result = "绗�" + j + "琛�" + "鑸卞涓嶅瓨鍦�";
+                            isErr = true;
+                            continue;
+                        }
+                    }
+                    data.setCabinId(idBuilder.toString());
+                }
+
+                if (StringUtils.isNotBlank(time1)) {
                     if (time1.matches("[0-9/]+")) {
                         time1 = time1.replace("/", "-");
                         node.setRequiredCompletionTime(time1);
                         node.setProcessName(mapProcessName.get(1));
-                        node.setSort(1);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time1.matches("[0-9.]+")) {
                         time1 = time1.replace(".", "-");
                         node.setRequiredCompletionTime(time1);
                         node.setProcessName(mapProcessName.get(1));
-                        node.setSort(1);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time1.matches("[0-9-]+")) {
                         node.setRequiredCompletionTime(time1);
                         node.setProcessName(mapProcessName.get(1));
-                        node.setSort(1);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else {
-                        result = "绗�"+j+"琛�"+"绗�"+1+"涓�"+"鑺傜偣鏃堕棿鏃ユ湡鏍煎紡涓嶈鑼�";
+                        result = "绗�" + j + "琛�" + "绗�" + 1 + "涓�" + "鑺傜偣鏃堕棿鏃ユ湡鏍煎紡涓嶈鑼�";
                         isErr = true;
                     }
                 }
 
-                if (StringUtils.isEmpty(time2)) {
-                    result = "绗�"+j+"琛�"+"绗�"+2+"涓�"+"鑺傜偣鏃堕棿涓嶈兘涓虹┖";
-                    isErr = true;
-                } else {
-                    if (node.getId()!=null){
+                if (StringUtils.isNotBlank(time2)) {
+                    if (node.getId() != null) {
                         node.setId(null);
                     }
                     if (time2.matches("[0-9/]+")) {
                         node.setRequiredCompletionTime(time2);
                         node.setProcessName(mapProcessName.get(2));
-                        node.setSort(2);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time2.matches("[0-9.]+")) {
                         time2 = time2.replace(".", "-");
                         node.setRequiredCompletionTime(time2);
                         node.setProcessName(mapProcessName.get(2));
-                        node.setSort(2);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time2.matches("[0-9-]+")) {
                         node.setRequiredCompletionTime(time2);
                         node.setProcessName(mapProcessName.get(2));
-                        node.setSort(2);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else {
-                        result = "绗�"+j+"琛�"+"绗�"+2+"涓�"+"鑺傜偣鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
+                        result = "绗�" + j + "琛�" + "绗�" + 2 + "涓�" + "鑺傜偣鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
                         isErr = true;
                     }
                 }
 
-                if (StringUtils.isEmpty(time3)) {
-                    result = "绗�"+j+"琛�"+"绗�"+3+"涓�"+"鑺傜偣鏃堕棿涓嶈兘涓虹┖";
-                    isErr = true;
-                } else {
-                    if (node.getId()!=null){
+                if (StringUtils.isNotBlank(time3)) {
+                    if (node.getId() != null) {
                         node.setId(null);
                     }
                     if (time3.matches("[0-9/]+")) {
                         time3 = time3.replace("/", "-");
                         node.setRequiredCompletionTime(time3);
                         node.setProcessName(mapProcessName.get(3));
-                        node.setSort(3);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time3.matches("[0-9.]+")) {
                         time3 = time3.replace(".", "-");
                         node.setRequiredCompletionTime(time3);
                         node.setProcessName(mapProcessName.get(3));
-                        node.setSort(3);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time3.matches("[0-9-]+")) {
                         node.setRequiredCompletionTime(time3);
                         node.setProcessName(mapProcessName.get(3));
-                        node.setSort(3);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else {
-                        result = "绗�"+j+"琛�"+"绗�"+3+"涓�"+"鑺傜偣鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
+                        result = "绗�" + j + "琛�" + "绗�" + 3 + "涓�" + "鑺傜偣鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
                         isErr = true;
                     }
                 }
 
-                if (StringUtils.isEmpty(time4)) {
-                    result = "绗�"+j+"琛�"+"绗�"+4+"涓�"+"鑺傜偣鏃堕棿涓嶈兘涓虹┖";
-                    isErr = true;
-                } else {
-                    if (node.getId()!=null){
+                if (StringUtils.isNotBlank(time4)) {
+                    if (node.getId() != null) {
                         node.setId(null);
                     }
                     if (time4.matches("[0-9/]+")) {
                         time4 = time4.replace("/", "-");
                         node.setRequiredCompletionTime(time4);
                         node.setProcessName(mapProcessName.get(4));
-                        node.setSort(4);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time4.matches("[0-9.]+")) {
                         time4 = time4.replace(".", "-");
                         node.setRequiredCompletionTime(time4);
                         node.setProcessName(mapProcessName.get(4));
-                        node.setSort(4);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time4.matches("[0-9-]+")) {
                         node.setRequiredCompletionTime(time4);
                         node.setProcessName(mapProcessName.get(4));
-                        node.setSort(4);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else {
-                        result = "绗�"+j+"琛�"+"绗�"+4+"涓�"+"鑺傜偣鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
+                        result = "绗�" + j + "琛�" + "绗�" + 4 + "涓�" + "鑺傜偣鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
                         isErr = true;
                     }
                 }
 
-                if (StringUtils.isEmpty(time5)) {
-                    result = "绗�"+j+"琛�"+"绗�"+5+"涓�"+"鑺傜偣鏃堕棿涓嶈兘涓虹┖";
-                    isErr = true;
-                } else {
-                    if (node.getId()!=null){
+                if (StringUtils.isNotBlank(time5)) {
+                    if (node.getId() != null) {
                         node.setId(null);
                     }
                     if (time5.matches("[0-9/]+")) {
                         time5 = time5.replace("/", "-");
                         node.setRequiredCompletionTime(time5);
                         node.setProcessName(mapProcessName.get(5));
-                        node.setSort(5);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time5.matches("[0-9.]+")) {
                         time5 = time5.replace(".", "-");
                         node.setRequiredCompletionTime(time5);
                         node.setProcessName(mapProcessName.get(5));
-                        node.setSort(5);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else if (time5.matches("[0-9-]+")) {
                         node.setRequiredCompletionTime(time5);
                         node.setProcessName(mapProcessName.get(5));
-                        node.setSort(5);
+                        node.setSort(sort + 1);
                         DjJdgzNetworkLevel3ListService.insert(node);
                     } else {
-                        result = "绗�"+j+"琛�"+"绗�"+5+"涓�"+"瑕佹眰瀹屾垚鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
+                        result = "绗�" + j + "琛�" + "绗�" + 5 + "涓�" + "瑕佹眰瀹屾垚鏃堕棿鐨勬棩鏈熸牸寮忎笉瑙勮寖";
                         isErr = true;
                     }
                 }
 
-                if(StringUtils.isNotBlank(generalRepairUnit)){
+
+                if (StringUtils.isNotBlank(typeStr)) {
+                    data.setType(typeStr);
+                }
+                if (StringUtils.isNotBlank(generalRepairUnit)) {
                     data.setGeneralRepairUnit(generalRepairUnit);
                 }
-                if(StringUtils.isNotBlank(generalRepairUnitContact)){
+                if (StringUtils.isNotBlank(generalRepairUnitContact)) {
                     data.setGeneralRepairUnitContact(generalRepairUnitContact);
                 }
-                if(StringUtils.isNotBlank(generalRepairUnitDirector)){
+                if (StringUtils.isNotBlank(generalRepairUnitDirector)) {
                     data.setGeneralRepairUnitDirector(generalRepairUnitDirector);
                 }
-                if(StringUtils.isNotBlank(generalRepairUnit)){
+                if (StringUtils.isNotBlank(generalRepairUnit)) {
                     data.setRepairUnit(repairUnit);
                 }
-                if(StringUtils.isNotBlank(generalRepairUnit)){
+                if (StringUtils.isNotBlank(generalRepairUnit)) {
                     data.setRepairUnitContact(repairUnitContact);
                 }
-                if(StringUtils.isNotBlank(generalRepairUnit)){
+                if (StringUtils.isNotBlank(generalRepairUnit)) {
                     data.setRepairUnitDirector(repairUnitDirector);
                 }
 
@@ -354,13 +416,18 @@
             }
         } catch (Exception e) {
             e.printStackTrace();
-            result = "瀵煎叆"+row1+"琛屾暟鎹椂妫�娴嬪埌寮傚父锛屼腑鏂鍏ユ搷浣溿��";
+            result = "瀵煎叆" + row1 + "琛屾暟鎹椂妫�娴嬪埌寮傚父锛屼腑鏂鍏ユ搷浣溿��";
         }
 
         suc = sum - err;
 
         return result;
     }
+
+    public JComboBoxItem[] getListByExport(Long projectId, Long deptId, Long teamId) {
+        JComboBoxItem[] list = baseDao.getListByExport(projectId, deptId, teamId);
+        return list;
+    }
   /*  public void exportExcelTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {
         String excelName="涓夌骇缃戠粶鍥炬壒閲忔ā鐗�";
         String excelPath = path + "template/jx-model/" + excelName + ".xlsx"; //妯℃澘璺緞
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 eeb3f99..3414286 100644
--- a/src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java
+++ b/src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java
@@ -1451,14 +1451,13 @@
 
     public Object createInsertVertex(mxGraph graph, JSONObject jsonObject, Integer defX, Integer defY, StatusEnum status) {
         Object parent = graph.getDefaultParent();
-
         String shapeValue = jsonObject.get("shape").toString();
         Object graphObject = null;
         switch (shapeValue) {
             case "custom-circle":
             case "custom-circle1":
                 String text = (String) JsonUtils2.getJsonValueByPath(jsonObject, "attrs/text/text".split("/"));
-                String title = (String) JsonUtils2.getJsonValueByPath(jsonObject, "attrs/title/text".split("/"));
+                //String title = (String) JsonUtils2.getJsonValueByPath(jsonObject, "attrs/title/text".split("/"));
                 String idValue = jsonObject.get("id").toString();
 
                 Integer x = (Integer) JsonUtils2.getJsonValueByPath(jsonObject, "position/x".split("/")) + defX;
diff --git a/src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java b/src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java
index 63b4e32..30692a5 100644
--- a/src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java
+++ b/src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java
@@ -38,4 +38,6 @@
     JComboBoxItem[] getTeamList(Long pid);
 
     JComboBoxItem[] getDeptList();
+
+    List<SysTeamGroupClass> getListByTree();
 }
diff --git a/src/main/java/com/example/server/teamGroup/service/SysTeamGroupClassService.java b/src/main/java/com/example/server/teamGroup/service/SysTeamGroupClassService.java
index deb4908..ebb2c28 100644
--- a/src/main/java/com/example/server/teamGroup/service/SysTeamGroupClassService.java
+++ b/src/main/java/com/example/server/teamGroup/service/SysTeamGroupClassService.java
@@ -201,4 +201,8 @@
     public JComboBoxItem[] getDeptList() {
         return baseDao.getDeptList();
     }
+
+    public List<SysTeamGroupClass> getListByTree() {
+        return baseDao.getListByTree();
+    }
 }
diff --git a/src/main/java/com/example/server/utils/DownLoadTmpFile.java b/src/main/java/com/example/server/utils/DownLoadTmpFile.java
index 86bd15a..84047c0 100644
--- a/src/main/java/com/example/server/utils/DownLoadTmpFile.java
+++ b/src/main/java/com/example/server/utils/DownLoadTmpFile.java
@@ -1,6 +1,7 @@
 package com.example.server.utils;
 
 import com.example.Application;
+import org.springframework.beans.factory.annotation.Value;
 
 import javax.swing.*;
 import java.io.*;
@@ -9,7 +10,6 @@
 
 public class DownLoadTmpFile {
     public static void down(String name,JFrame frame1){
-        name = "templateFile/" + name;
         InputStream inputStream = Application.class.getClassLoader().getResourceAsStream(name);
 
         if (inputStream == null) {
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 356581b..d213c7e 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -15,6 +15,7 @@
   line-nodes: 10
   area-width: 5000
   configPath: config.properties
+  tmp-path: templateFile/
 
 spring:
   profiles:
diff --git a/src/main/resources/config.properties b/src/main/resources/config.properties
index 7e94a10..feb2fb0 100644
--- a/src/main/resources/config.properties
+++ b/src/main/resources/config.properties
@@ -1,4 +1,5 @@
 userName=root
 password=root
 site=宸ヤ綔缁�
+team=1TD
 teamGroup=null
\ No newline at end of file
diff --git a/src/main/resources/db/csiczb1.db b/src/main/resources/db/csiczb1.db
index 35da3df..806a92c 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/DjJdgzDismantTrackDao.xml b/src/main/resources/mapper/progressTrack/DjJdgzDismantTrackDao.xml
index 32c483a..c5f36d1 100644
--- a/src/main/resources/mapper/progressTrack/DjJdgzDismantTrackDao.xml
+++ b/src/main/resources/mapper/progressTrack/DjJdgzDismantTrackDao.xml
@@ -2,6 +2,9 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="com.example.server.progressTrack.dao.DjJdgzDismantTrackDao">
+    <delete id="deleteByName">
+        update dj_jdgz_dismant_track set is_delete=1 where name = #{name}
+    </delete>
 
     <select id="getList" resultType="com.example.server.progressTrack.model.DjJdgzDismantTrack">
         select *
@@ -12,4 +15,100 @@
             and cabin_id = ${cabinId}
         </if>
     </select>
+    <select id="getdata" resultType="com.example.server.progressTrack.model.DjJdgzDismantTrack">
+        SELECT
+        a.*,
+        k.name as cabinName,
+        h.name as teamGroupName,
+        b.name as deptName,
+        c.`NAME` as level3NetworkName,
+        d.PROCESS_NAME AS level2NodeName,
+        f.PROCESS_NAME AS level1NodeName
+        FROM
+        dj_jdgz_dismant_track a
+        LEFT JOIN dj_jdgz_network_level3 c ON c.id = a.LEVEL3_NETWORK_ID
+        LEFT JOIN dj_jdgz_network_level2_list d ON d.id = c.LEVEL2_NODE_ID
+        LEFT JOIN dj_jdgz_network_level2 e ON e.id = d.NETWORK_ID
+        LEFT JOIN dj_jdgz_network_level1_list f ON f.id = e.LEVEL1_NODE_ID
+        LEFT JOIN dj_jdgz_network_level1 g ON g.id = c.LEVEL1_NETWORK_ID
+        LEFT JOIN dj_sys_teamgroup_class h ON h.id = c.TEAMGROUP_ID
+        LEFT JOIN dj_sys_teamgroup_class b ON b.id = c.dept_id
+        LEFT JOIN cabin k ON k.id = a.cabin_id
+        WHERE
+        a.IS_DELETE = 0
+        <if test="deptId!=null and deptId!=''">
+            AND c.dept_id = ${deptId}
+        </if>
+        <if test="teamGroupId!=null and teamGroupId!=''">
+            AND c.TEAMGROUP_ID = ${teamGroupId}
+        </if>
+        <if test="level3NetworkId!=null">
+            AND a.LEVEL3_NETWORK_ID = ${level3NetworkId}
+        </if>
+
+        <if test="status==1">
+            AND a.CURRENT_STATUS = 1
+        </if>
+        <if test="status==0">
+            and (a.CURRENT_STATUS IS null OR a.CURRENT_STATUS = 0)
+        </if>
+        AND c.IS_DELETE = 0
+        AND d.IS_DELETE = 0
+        AND e.IS_DELETE = 0
+        AND f.IS_DELETE = 0
+        AND g.IS_DELETE = 0
+        AND k.IS_DELETE = 0
+        AND g.id = ${level1NetworkId}
+        ORDER BY
+        f.SORT,
+        d.SORT,
+        b.UPDATE_DATE
+    </select>
+    <select id="getStatist" resultType="com.example.server.progressTrack.Dto.StatistDismantDto">
+        select a.*,
+               sum(case when c.status=1 then 1 else 0 end) as sbcxsl
+        from (
+                 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 b.LEVEL3_NETWORK_ID) as sbsl,
+                        count(DISTINCT b.dismant_id) as zbjsl,
+                        sum(case when b.status=1 then 1 else 0 end) as zbjcxsl,
+                        sum( CASE WHEN dismant_time IS NULL THEN 0 ELSE 1 END ) AS dismantsl,
+                        sum( CASE WHEN exit_time IS NULL THEN 0 ELSE 1 END ) AS exitsl,
+                        sum( CASE WHEN return_weight_time IS NULL THEN 0 ELSE 1 END ) AS returnsl,
+                        sum( CASE WHEN warehouse_time IS NULL THEN 0 ELSE 1 END ) AS warehousesl
+                 from dj_sys_teamgroup_class  a
+                          left join (
+                     select a.id as id2 ,a.pid as pid2 ,c.LEVEL3_NETWORK_ID,
+                            c.id as dismant_id,c.status,
+                            c.dismant_time,
+                            c.exit_time,
+                            c.return_weight_time,
+                            c.warehouse_time
+                     from 	dj_sys_teamgroup_class  a,dj_jdgz_network_level3 b,dj_jdgz_dismant_track c
+                     where a.IS_DELETE= 0 and b.IS_DELETE = 0 and c.is_delete = 0
+                       and a.AREA = 'hld'
+                       and b.TEAMGROUP_ID = a.id
+                       and c.LEVEL3_NETWORK_ID = b.id
+                       and b.LEVEL1_NETWORK_ID = ${level1Id}
+                 ) b on a.id=b.id2 or a.id = b.pid2
+                 where a.AREA = 'hld' and a.IS_DELETE = 0
+                 group by a.id,a.NAME
+             ) a
+                 left join (
+            select a.id as id2 ,a.pid as pid2,
+                   case when EXISTS(select 1 from dj_jdgz_dismant_track c where c.LEVEL3_NETWORK_ID=b.id
+                                    and (status=0 or status is null) and is_delete = 0) or not
+                             EXISTS(select 1 from dj_jdgz_dismant_track c where c.LEVEL3_NETWORK_ID=b.id
+                                    and status=1 and is_delete = 0)then 0 else 1 end as status
+            from dj_sys_teamgroup_class  a  ,dj_jdgz_network_level3 b
+            where a.IS_DELETE= 0 and b.IS_DELETE = 0
+              and a.AREA = 'hld'
+              and b.TEAMGROUP_ID = a.id
+              and b.LEVEL1_NETWORK_ID = ${level1Id}
+        ) c on a.id=c.id2 or a.id = c.pid2
+        group by a.id,a.NAME
+        order by sort
+    </select>
 </mapper>
diff --git a/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel2ListDao.xml b/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel2ListDao.xml
index b9a619e..440d63b 100644
--- a/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel2ListDao.xml
+++ b/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel2ListDao.xml
@@ -99,7 +99,7 @@
             and b.is_delete = 0
             and a.level1_node_id = ${level1NodeId}
     </select>
-    <select id="getNodeList" resultType="com.example.server.progressTrack.Dto.DiagramNode2Dto">
+    <select id="getNodeList" resultType="com.example.server.progressTrack.Dto.DiagramNodeDto">
         select a.*
         from dj_jdgz_network_level2_list a
         where
diff --git a/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml b/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml
index efaffc1..ff2aa69 100644
--- a/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml
+++ b/src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml
@@ -40,6 +40,21 @@
             <if test="shipId!=null">
                 and c.ship_id = ${shipId}
             </if>
+            <if test="deptId!=null">
+                and a.dept_id = ${deptId}
+            </if>
+            <if test="teamId!=null">
+                and a.TEAMGROUP_ID = ${teamId}
+            </if>
+            <if test="cabinId!=null">
+                and a.cabin_id  LIKE '%${cabinId}%'
+            </if>
+            <if test="type!=null and type!=''">
+                and a.type  = #{type}
+            </if>
+            <if test="name!=null and name!=''">
+                and a.name  LIKE '%${name}%'
+            </if>
         group by a.id
     </select>
 
@@ -62,6 +77,22 @@
         where is_delete = 0
           and LEVEL1_network_id = ${level1NetworkId}
     </select>
+    <select id="getListByExport" resultType="com.example.client.dto.JComboBoxItem">
+        SELECT
+        a.*
+        FROM `dj_jdgz_network_level3` a
+        where
+        a.is_delete = 0
+        <if test="projectId!=null">
+            and a.LEVEL1_network_id = ${projectId}
+        </if>
+        <if test="deptId!=null">
+            and a.dept_id = ${deptId}
+        </if>
+        <if test="teamId!=null">
+            and a.TEAMGROUP_ID = ${teamId}
+        </if>
+    </select>
 
 
 </mapper>
diff --git a/src/main/resources/mapper/teamgroup/SysTeamGroupClassDao.xml b/src/main/resources/mapper/teamgroup/SysTeamGroupClassDao.xml
index 95fd482..a52152f 100644
--- a/src/main/resources/mapper/teamgroup/SysTeamGroupClassDao.xml
+++ b/src/main/resources/mapper/teamgroup/SysTeamGroupClassDao.xml
@@ -130,4 +130,23 @@
         ORDER BY
             a.sort;
     </select>
+    <select id="getListByTree" resultType="com.example.server.teamGroup.model.SysTeamGroupClass">
+        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 sort2
+        FROM
+            dj_sys_teamgroup_class a
+        WHERE
+            a.AREA = 'hld'
+          AND a.IS_DELETE = 0
+        ORDER BY sort2
+    </select>
 </mapper>
diff --git "a/src/main/resources/templateFile/\344\270\211\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/src/main/resources/templateFile/\344\270\211\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
index 5b103ae..0da9a9b 100644
--- "a/src/main/resources/templateFile/\344\270\211\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
+++ "b/src/main/resources/templateFile/\344\270\211\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git "a/src/main/resources/templateFile/\344\272\214\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/src/main/resources/templateFile/\344\272\214\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
index b7fd91c..c2cc666 100644
--- "a/src/main/resources/templateFile/\344\272\214\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
+++ "b/src/main/resources/templateFile/\344\272\214\347\272\247\347\275\221\347\273\234\345\233\276\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git "a/src/main/resources/templateFile/\345\255\220\351\203\250\344\273\266\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/src/main/resources/templateFile/\345\255\220\351\203\250\344\273\266\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..6c8c443
--- /dev/null
+++ "b/src/main/resources/templateFile/\345\255\220\351\203\250\344\273\266\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ

--
Gitblit v1.9.1