jar
jinlin
2025-03-04 23f02e6b45dd7cf0ab2e7827144913ca59575ea4
jar
45个文件已修改
9个文件已添加
3477 ■■■■ 已修改文件
src/main/java/com/example/client/Login.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/Main.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/DismantTrackService.java 378 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/ExportDismantTrackService.java 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/ImportDismantTrackService.java 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/ImportLevel2Service.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/ImportLevel3Service.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/Level1AddOrUpdate.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/Level2AddOrUpdate.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/Level2ManageService.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/Level3AddOrUpdate.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/Level3ManageService.java 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/Level3ViewService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/MenuService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/StatisDismantService.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/StatisReportsService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/SubunitAddOrUpdate.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/SubunitService.java 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/TeamGroupManageService.java 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/TrackRecordAddOrUpdate.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/TrackRecordManageService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/UserAddOrUpdate.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/service/UserManageService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/utils/CommonTable.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/utils/ComplexTable.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/client/utils/ComplexTableUI.java 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/DataSync/service/DataSyncService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/entity/FieldMetaObjectHandler.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/Dto/StatistDismantDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/dao/DjJdgzDismantTrackDao.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel2ListDao.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/dao/DjJdgzNetworkLevel3Dao.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/model/DjJdgzDismantTrack.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/model/DjJdgzTrackRecord.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/model/TeamEntity.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/service/DjJdgzDismantTrackService.java 377 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel2ListService.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/service/DjJdgzNetworkLevel3Service.java 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/progressTrack/service/NetWorkDiagramService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/teamGroup/service/SysTeamGroupClassService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/example/server/utils/DownLoadTmpFile.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/db/csiczb1.db 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/progressTrack/DjJdgzDismantTrackDao.xml 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel2ListDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/progressTrack/DjJdgzNetworkLevel3Dao.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/teamgroup/SysTeamGroupClassDao.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templateFile/三级网络图导入模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templateFile/二级网络图导入模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templateFile/子部件导入模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
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); //将char数组转化为string类型
                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);
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);
src/main/java/com/example/client/service/DismantTrackAddOrUpdate.java
New file
@@ -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);
    }
}
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;
    }
src/main/java/com/example/client/service/ExportDismantTrackService.java
New file
@@ -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, "文件导出取消");
                }
            }
        });
    }
}
src/main/java/com/example/client/service/ImportDismantTrackService.java
New file
@@ -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, "选择的文件不正确 ", "提示", JOptionPane.DEFAULT_OPTION,
                            JOptionPane.WARNING_MESSAGE, null, options, options[0]);
                }
            }
        });
        uploadButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // åˆ›å»ºæ—‹è½¬ç­‰å¾…框的实例(假设WaitUtil是一个自定义的Swing组件)
                final WaitUtil waitUtil = new WaitUtil(imgPath, "文件正在导入,请稍候");
                // å¼€å§‹ä¸Šä¼ æ–‡ä»¶çš„异步任务
                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;
            }
        });
    }
}
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();
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();
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 {
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);
            }
        });
    }
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();
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) {
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);
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));
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);
                    }
                }
            }
src/main/java/com/example/client/service/StatisDismantService.java
New file
@@ -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("正常完成", "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);
    }
}
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 ,"进行中","临期","逾期","正常完成","超期完成"};
@@ -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);
    }
src/main/java/com/example/client/service/SubunitAddOrUpdate.java
New file
@@ -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);
            }
        });
    }
}
src/main/java/com/example/client/service/SubunitService.java
New file
@@ -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;
    }
}
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 @@
            }
        });
    }
*/
}
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();
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;
src/main/java/com/example/client/service/UserAddOrUpdate.java
@@ -76,12 +76,12 @@
            passWord.setText(data.getPassword());
        }
        JLabel JLabel3 = new JLabel("所属T队");
      /*  JLabel JLabel3 = new JLabel("所属T队");
        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());
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("所属T队", "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("所属T队", "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);
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();
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
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];
                //如果单元格为合并类单元格、获取其上方是X合并类单元格 + å·¦è¾¹æ˜¯Y合并类单元格,那么该单元格不需要在窗口展示
                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);
            }
        }
    }
    /**
     * èŽ·å–å½“å‰å•å…ƒæ ¼éœ€è¦å å¤šå°‘ä¸ªå•ä½ï¼Œæ¯”å¦‚æ­¤æ—¶çš„row+1行col列的值=mergeCell,那么说明当前单元格需要占2行
     * @param row
     * @param col
     * @return
     * åˆ¤æ–­å•元格是否被合并
     */
    private Rectangle getCellRect(int row , int col){
        int mergeRowNum = 1;
        int nextRow = row;
        //判断出y轴方向合并了几行
        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);
    }
}
}
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");
        }
    }
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) {
src/main/java/com/example/server/progressTrack/Dto/StatistDismantDto.java
New file
@@ -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;
}
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);
}
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);
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);
}
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 = "三级网络图ID")
@@ -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;
}
src/main/java/com/example/server/progressTrack/model/DjJdgzNetworkLevel2List.java
@@ -25,12 +25,6 @@
    @ApiModelProperty(value = "网络图ID")
    private Long networkId;
    @ApiModelProperty(value = "工程专业ID")
    private Long majorId;
    @ApiModelProperty(value = "工程专业名称")
    private String majorName;
    @ApiModelProperty(value = "过程名称")
    private String processName;
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 = "三级网络图ID")
src/main/java/com/example/server/progressTrack/model/TeamEntity.java
New file
@@ -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;
}
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;
            //解决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表达式]为true,则程序继续执行。 å¦‚果为false,则程序抛出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);
    }
}
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);
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"; //模板路径
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;
src/main/java/com/example/server/teamGroup/dao/SysTeamGroupClassDao.java
@@ -38,4 +38,6 @@
    JComboBoxItem[] getTeamList(Long pid);
    JComboBoxItem[] getDeptList();
    List<SysTeamGroupClass> getListByTree();
}
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();
    }
}
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) {
src/main/resources/application.yml
@@ -15,6 +15,7 @@
  line-nodes: 10
  area-width: 5000
  configPath: config.properties
  tmp-path: templateFile/
spring:
  profiles:
src/main/resources/config.properties
@@ -1,4 +1,5 @@
userName=root
password=root
site=工作组
team=1TD
teamGroup=null
src/main/resources/db/csiczb1.db
Binary files differ
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>
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
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>
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>
src/main/resources/templateFile/Èý¼¶ÍøÂçͼµ¼ÈëÄ£°å.xlsx
Binary files differ
src/main/resources/templateFile/¶þ¼¶ÍøÂçͼµ¼ÈëÄ£°å.xlsx
Binary files differ
src/main/resources/templateFile/×Ó²¿¼þµ¼ÈëÄ£°å.xlsx
Binary files differ