Quellcode durchsuchen

拉铆参数类型可在UI配置
- 设备信息显示弹窗新增"上传参数类型"下拉(A/B/C/D)
- 类型持久化到project_config.json的uiOverride.prodParamsType
- ProdDataCollector每次采集时读取当前配置作为type字段

wangxichen vor 2 Wochen
Ursprung
Commit
7a1fddfc30

+ 31 - 0
src/com/mes/core/ProjectConfigManager.java

@@ -136,6 +136,8 @@ public class ProjectConfigManager {
     private String  deviceRow2LabelOverride;
     // 物料码输入框显隐覆盖
     private Boolean showMaterialInputOverride;
+    // 拉铆过程参数上传类型 (A/B/C/D),默认 A
+    private String prodParamsType = "A";
     private final List<Listener> listeners = new ArrayList<>();
 
     private ProjectConfigManager() {
@@ -220,6 +222,8 @@ public class ProjectConfigManager {
                 deviceRow2EnabledOverride = uiObj.getBoolean("deviceRow2Enabled");
                 deviceRow2LabelOverride = trimToNull(uiObj.getString("deviceRow2Label"));
                 showMaterialInputOverride = uiObj.getBoolean("showMaterialInput");
+                String pt = trimToNull(uiObj.getString("prodParamsType"));
+                if (pt != null) prodParamsType = pt.toUpperCase();
             }
             log.info("[ProjectConfig] 加载成功: line={}, product={}, ip={}, station={}, lineSn={}, features={}",
                     currentLineId, currentProductId, deviceIp, stationCodeOverride, lineSnOverride, featuresOverride);
@@ -247,6 +251,7 @@ public class ProjectConfigManager {
             if (deviceRow2EnabledOverride != null) uiObj.put("deviceRow2Enabled", deviceRow2EnabledOverride);
             if (deviceRow2LabelOverride != null)   uiObj.put("deviceRow2Label", deviceRow2LabelOverride);
             if (showMaterialInputOverride != null) uiObj.put("showMaterialInput", showMaterialInputOverride);
+            uiObj.put("prodParamsType", prodParamsType);
             if (!uiObj.isEmpty()) root.put("uiOverride", uiObj);
             if (!featuresOverride.isEmpty()) {
                 root.put("featuresOverride", featuresOverride);
@@ -439,6 +444,32 @@ public class ProjectConfigManager {
 
     public Boolean getDeviceRow1EnabledOverride() { return deviceRow1EnabledOverride; }
 
+    /**
+     * 拉铆过程参数上传类型 (A/B/C/D),默认 A
+     */
+    public String getProdParamsType() {
+        return prodParamsType != null ? prodParamsType : "A";
+    }
+
+    /**
+     * 设置拉铆过程参数上传类型
+     * @param type 有效值 A/B/C/D(大小写不敏感,其它值忽略)
+     */
+    public void setProdParamsType(String type) {
+        if (type == null) return;
+        String t = type.trim().toUpperCase();
+        if (t.isEmpty()) return;
+        if (!"A".equals(t) && !"B".equals(t) && !"C".equals(t) && !"D".equals(t)) {
+            log.warn("[ProjectConfig] 无效的拉铆参数类型: {}, 忽略", type);
+            return;
+        }
+        if (t.equals(this.prodParamsType)) return;
+        String old = this.prodParamsType;
+        this.prodParamsType = t;
+        save();
+        log.info("[ProjectConfig] 修改拉铆参数类型: {} -> {}", old, t);
+    }
+
     // ========== 设备连接覆盖 ==========
 
     public Boolean getDeviceEnabledOverride() { return deviceEnabledOverride; }

+ 2 - 1
src/com/mes/prod/ProdDataCollector.java

@@ -65,7 +65,8 @@ public class ProdDataCollector {
                 ProdRecord record = new ProdRecord();
                 record.setGw(context.getStationCode());
                 record.setLineSn(context.getLineSn());
-                record.setType("A");
+                // 上传类型由 UI 配置决定("设备信息显示" 弹窗,默认 A)
+                record.setType(com.mes.core.ProjectConfigManager.getInstance().getProdParamsType());
                 record.setSn(productSn);
                 record.setFout(fout);
                 record.setSout(sout);

+ 20 - 2
src/com/mes/ui/MainFrame.java

@@ -2045,6 +2045,11 @@ public class MainFrame extends JFrame {
         JCheckBox showMaterial = new JCheckBox("显示物料码输入框", config.isShowMaterialInput());
         showMaterial.setFont(new Font("微软雅黑", Font.PLAIN, 16));
 
+        // 上传参数类型(A/B/C/D)
+        JComboBox<String> typeCombo = new JComboBox<>(new String[]{"A", "B", "C", "D"});
+        typeCombo.setSelectedItem(pc.getProdParamsType());
+        typeCombo.setFont(new Font("微软雅黑", Font.PLAIN, 16));
+
         JPanel panel = new JPanel(new java.awt.GridBagLayout());
         java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
         gbc.insets = new Insets(4, 4, 4, 4);
@@ -2065,10 +2070,17 @@ public class MainFrame extends JFrame {
         gbc.gridx = 1; gbc.fill = java.awt.GridBagConstraints.HORIZONTAL; gbc.weightx = 1;
         labelB.setPreferredSize(new Dimension(160, 26));
         panel.add(labelB, gbc);
-        // 提示
+        // 物料码输入框显隐
         gbc.gridx = 0; gbc.gridy = 4; gbc.gridwidth = 2; gbc.fill = java.awt.GridBagConstraints.NONE;
         panel.add(showMaterial, gbc);
-        gbc.gridy = 5;
+        // 上传参数类型 (A/B/C/D)
+        gbc.gridy = 5; gbc.gridwidth = 1;
+        panel.add(new JLabel("上传参数类型:"), gbc);
+        gbc.gridx = 1;
+        typeCombo.setPreferredSize(new Dimension(80, 26));
+        panel.add(typeCombo, gbc);
+        // 提示
+        gbc.gridx = 0; gbc.gridy = 6; gbc.gridwidth = 2;
         JLabel tip = new JLabel("<html><font color='gray' size='3'>寄存器地址需改 station.yaml</font></html>");
         panel.add(tip, gbc);
 
@@ -2081,6 +2093,12 @@ public class MainFrame extends JFrame {
                 enableB.isSelected(), labelB.getText(),
                 showMaterial.isSelected());
 
+        // 保存上传参数类型
+        Object sel = typeCombo.getSelectedItem();
+        if (sel != null) {
+            pc.setProdParamsType(sel.toString());
+        }
+
         // 重新加载 config 让 UI 覆盖生效
         StationConfig.reload();
         this.config = StationConfig.getInstance();