Преглед изворни кода

修复第一次配置不存入本地数据库问题

chefz пре 2 недеља
родитељ
комит
a405d0e255

+ 11 - 0
.project

@@ -14,4 +14,15 @@
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
+	<filteredResources>
+		<filter>
+			<id>1780366037639</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
 </projectDescription>

+ 32 - 12
src/com/mes/ui/MesClient.java

@@ -161,7 +161,7 @@ public class MesClient extends JFrame {
         log.info(mes_gw + ";" + mes_gw_des + ";" + mes_server_ip + ";");
     }
 
-    public static void applyOpConfig(String op, String opName, String ip) {
+    public static boolean applyOpConfig(String op, String opName, String ip) {
         if (op != null) {
             mes_gw = op.trim();
         }
@@ -172,12 +172,9 @@ public class MesClient extends JFrame {
             mes_server_ip = ip.trim();
         }
 
-        try {
-            // 清除旧配置,确保单条记录(本地工位只保留当前配置)
-            JdbcUtils.clearOpIpConfig();
-            JdbcUtils.upsertOpIpConfig(mes_gw, mes_gw_des, mes_server_ip);
-        } catch (Exception e) {
-            log.info("保存工位配置失败: {}", e.getMessage());
+        boolean saved = JdbcUtils.saveOpIpConfig(mes_gw, mes_gw_des, mes_server_ip);
+        if (!saved) {
+            log.error("保存工位配置到本地数据库失败: op={}, ip={}", mes_gw, mes_server_ip);
         }
 
         if (mesClientFrame != null) {
@@ -186,6 +183,7 @@ public class MesClient extends JFrame {
         if (welcomeWin != null) {
             welcomeWin.setTitle("MES系统客户端:" + mes_gw + " - " + mes_gw_des);
         }
+        return saved;
     }
 
     // 打开并切换到“软件设置”页签(实际访问权限由页签切换监听统一控制)
@@ -206,7 +204,15 @@ public class MesClient extends JFrame {
             String opName = cfg[1];
             String ip = cfg[2];
             if (!ip.isEmpty() && !op.isEmpty()) {
-                applyOpConfig(op, opName, ip);
+                mes_gw = op;
+                mes_gw_des = opName;
+                mes_server_ip = ip;
+                if (mesClientFrame != null) {
+                    mesClientFrame.setTitle("MES系统客户端:" + mes_gw + "- " + mes_gw_des);
+                }
+                if (welcomeWin != null) {
+                    welcomeWin.setTitle("MES系统客户端:" + mes_gw + " - " + mes_gw_des);
+                }
             }
         }
 
@@ -277,7 +283,10 @@ public class MesClient extends JFrame {
                 continue;
             }
 
-            applyOpConfig(op, opName, ip);
+            if (!applyOpConfig(op, opName, ip)) {
+                JOptionPane.showMessageDialog(parent, "本地配置保存失败,请重试", "提示窗口", JOptionPane.WARNING_MESSAGE);
+                continue;
+            }
             return true;
         }
     }
@@ -950,7 +959,10 @@ public class MesClient extends JFrame {
                 }
 
                 // 写入本地配置并刷新显示
-                applyOpConfig(op, opName, ip);
+                if (!applyOpConfig(op, opName, ip)) {
+                    JOptionPane.showMessageDialog(mesClientFrame, "本地配置保存失败,请重试", "提示窗口", JOptionPane.WARNING_MESSAGE);
+                    return;
+                }
                 loadSoftwareSettingsFromDb();
                 softwareIpField.setEditable(false);
                 softwareOpField.setEditable(false);
@@ -978,11 +990,19 @@ public class MesClient extends JFrame {
         return panel;
     }
 
-    // 读取并回填“软件设置”页面数据
+    // 读取并回填“软件设置”页面数据(仅从数据库加载到内存,不重复写入)
     private void loadSoftwareSettingsFromDb() {
         String[] cfg = JdbcUtils.getAnyOpIpConfig();
         if (cfg != null && cfg.length >= 3) {
-            applyOpConfig(cfg[0], cfg[1], cfg[2]);
+            if (cfg[0] != null) {
+                mes_gw = cfg[0];
+            }
+            if (cfg[1] != null) {
+                mes_gw_des = cfg[1];
+            }
+            if (cfg[2] != null) {
+                mes_server_ip = cfg[2];
+            }
             softwareOpField.setText(cfg[0]);
             softwareOpNameField.setText(cfg[1]);
             softwareIpField.setText(cfg[2]);

+ 14 - 20
src/com/mes/ui/OprnoUtil.java

@@ -6,28 +6,22 @@ import java.util.Map;
 
 public class OprnoUtil {
     public static String[] xtoprnos = new String[]{
-            "OP070","OP080", "OP100",
-            "OP110", "OP120", "OP130", "OP140", "OP150",
-            "OP160", "OP170", "OP180", "OP190", "OP200",
-            "OP210", "OP220", "OP230", "OP240", "OP250",
-            "OP260", "OP270", "OP280", "OP290", "OP300",
-            "OP310", "OP320", "OP330", "OP340", "OP350",
-            "OP360", "OP370", "OP380", "OP390", "OP400",
-            "OP410", "OP420", "OP430", "OP440", "OP450",
-            "OP460", "OP470", "OP480", "OP490", "OP500",
-            "OP510", "OP520", "OP550"
+            "OP010", "OP020", "OP030", "OP040", "OP051", "OP052", "OP060", "OP070",
+            "OP080", "OP090", "OP100", "OP110", "OP120", "OP130", "OP140", "OP150",
+            "OP160", "OP170", "OP180", "OP190", "OP200", "OP210", "OP220", "OP230",
+            "OP240", "OP250", "OP260", "OP270", "OP281", "OP282", "OP283", "OP284",
+            "OP290", "OP300", "OP310", "OP320", "OP330", "OP340", "OP350", "OP360",
+            "OP370", "OP380", "OP390", "OP400", "OP410", "OP420", "OP430", "OP440",
+            "OP450", "OP460", "OP470", "OP480", "OP490"
     };
     public static String[] xtoprnodes = new String[]{
-            "右边梁镭雕二维码","左边梁防爆阀拉铆","CMT框架一序焊接",
-            "人工补焊", "框架CMT二序焊接", "人工补焊", "焊道检查", "总成正面CNC",
-            "总成反面CNC", "框架去毛刺+清洁", "封堵片焊接+打磨", "边框气密", "焊道补焊",
-            "框架反面涂胶", "液冷板安装", "正面溢胶清理,补胶", "液冷板激光点固", "液冷板水嘴处焊接",
-            "焊道打磨", "液冷板FSW", "匙孔补焊打磨", "总成反面拉铆", "总成正面拉铆1",
-            "总成正面拉铆2", "边梁套筒涂胶+压合", "箱体封堵", "胶水固化", "半成品气密",
-            "补强板安装", "胶水固化", "拆卸补强板压紧工装", "FSW焊道涂胶+双层拉铆螺母涂胶", "人工抹胶",
-            "胶水固化", "反面部件装配", "底护板装配+底部套筒螺母安装", "底护板螺栓复拧", "总成气密",
-            "液冷板气密", "总成正面装配", "总成清洁", "总成检具检验", "模拟客户安装界面(装)",
-            "CCD", "GP12", "称重"
+            "进料检", "入库", "领料", "镭雕二维码", "前后梁压铆", "前后梁压铆螺母柱-涂胶", "左/右前边框与封堵片焊接", "Flyback固定支架安装钢丝牙套",
+            "小总成焊接", "框架CMT焊接", "人工正面补焊", "人工反面补焊", "焊缝铣削打磨", "焊道检验", "框架CNC反面加工", "框架反面清洁去毛刺",
+            "框架找漏", "框架清洁", "框架终检", "液冷板安装", "冷板激光焊", "液冷板FSW", "水嘴、匙孔焊接", "CNC加工箱体正面",
+            "箱体正反面清洁", "封堵片焊接", "总成反面装螺套", "总成反面拉铆", "总成正面装配", "总成正面装配", "总成正面装配", "总成正面拉铆",
+            "安装中吊点", "型腔封堵", "箱体静置", "箱体气密", "液冷板气密检测", "粘贴MPP泡棉", "底护板气密", "底护板安装",
+            "底护板螺栓复拧", "反面终检", "粘贴陶瓷胶带", "总成清洁", "蓝光检测", "总成检具检验", "正面终检", "CCD错漏检",
+            "绝缘耐压检测", "接地点检测", "GP12", "下线拍照", "称重+包装"
     };
     public static String[] lboprnos = new String[]{
             "OP040", "OP050", "OP060", "OP070", "OP080",

+ 49 - 42
src/com/mes/util/JdbcUtils.java

@@ -18,45 +18,26 @@ public class JdbcUtils {
 	public static String DATABASE_URL="jdbc:sqlite:mes_db.db";
     
     public static Connection getConn(){
-        try {
-            Class.forName(Drivde);// 加载驱动,连接sqlite的jdbc
-            conn = DriverManager.getConnection(DATABASE_URL);//连接数据库zhou.db,不存在则创建
-            System.out.println("连接到SQLite数据库成功!");
-            create_bw_record();//初始化结构表
-            //create_measure_data();//初始化测试数据表
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-        	close();//关闭数据库连接
-            e.printStackTrace();
-        }
+        ensureConnection();
         return conn;
     }
 
-	public static void openConnection() {
+	/** 确保数据库连接可用且本地表结构已初始化 */
+	public static void ensureConnection() {
 		try {
-			Class.forName(Drivde);// 加载驱动,连接sqlite的jdbc
-			conn = DriverManager.getConnection(DATABASE_URL);
-		} catch (ClassNotFoundException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-			// 如果连接失败,尝试重连
-			reconnect();
+			if (conn == null || conn.isClosed()) {
+				Class.forName(Drivde);
+				conn = DriverManager.getConnection(DATABASE_URL);
+				log.info("连接到SQLite数据库成功!");
+			}
+			create_bw_record();
+		} catch (Exception e) {
+			log.error("数据库初始化失败: {}", e.getMessage(), e);
 		}
 	}
 
-	private static void reconnect() {
-		try {
-			// 关闭旧连接
-			if (conn != null && !conn.isClosed()) {
-				conn.close();
-			}
-			// 重新建立连接
-			conn = DriverManager.getConnection(DATABASE_URL);
-		} catch (SQLException e) {
-			e.printStackTrace();
-			// 如果重连失败,可以进一步处理异常,比如记录日志、通知管理员等
-		}
+	public static void openConnection() {
+		ensureConnection();
 	}
     
     public static void create_bw_record() throws SQLException {
@@ -94,8 +75,9 @@ public class JdbcUtils {
 			if (op == null || op.trim().isEmpty()) {
 				return null;
 			}
-			if (JdbcUtils.conn == null || JdbcUtils.conn.isClosed()) {
-				JdbcUtils.openConnection();
+			ensureConnection();
+			if (conn == null || conn.isClosed()) {
+				return null;
 			}
 			String sql = "SELECT ip FROM op_ip_config WHERE op = ?";
 			try (PreparedStatement ps = conn.prepareStatement(sql)) {
@@ -118,8 +100,9 @@ public class JdbcUtils {
 			if (op == null || op.trim().isEmpty()) {
 				return null;
 			}
-			if (JdbcUtils.conn == null || JdbcUtils.conn.isClosed()) {
-				JdbcUtils.openConnection();
+			ensureConnection();
+			if (conn == null || conn.isClosed()) {
+				return null;
 			}
 			String sql = "SELECT opname FROM op_ip_config WHERE op = ?";
 			try (PreparedStatement ps = conn.prepareStatement(sql)) {
@@ -143,8 +126,9 @@ public class JdbcUtils {
 			if (op == null || op.trim().isEmpty() || ip == null || ip.trim().isEmpty()) {
 				return false;
 			}
-			if (JdbcUtils.conn == null || JdbcUtils.conn.isClosed()) {
-				JdbcUtils.openConnection();
+			ensureConnection();
+			if (conn == null || conn.isClosed()) {
+				return false;
 			}
 			String sql = "INSERT INTO op_ip_config(op, opname, ip) VALUES(?, ?, ?) " +
 					"ON CONFLICT(op) DO UPDATE SET opname=excluded.opname, ip=excluded.ip";
@@ -162,10 +146,32 @@ public class JdbcUtils {
 		return ret;
 	}
 
+	/** 本地工位只保留一条配置:先写入再清除其它记录,避免 clear 后 upsert 失败导致丢数据 */
+	public static boolean saveOpIpConfig(String op, String opname, String ip) {
+		if (!upsertOpIpConfig(op, opname, ip)) {
+			return false;
+		}
+		try {
+			if (conn == null || conn.isClosed()) {
+				return false;
+			}
+			String sql = "DELETE FROM op_ip_config WHERE op != ?";
+			try (PreparedStatement ps = conn.prepareStatement(sql)) {
+				ps.setString(1, op.trim());
+				ps.executeUpdate();
+			}
+			return true;
+		} catch (Exception e) {
+			log.info("清除多余op_ip_config失败: {}", e.getMessage());
+			return false;
+		}
+	}
+
 	public static boolean clearOpIpConfig() {
 		try {
-			if (JdbcUtils.conn == null || JdbcUtils.conn.isClosed()) {
-				JdbcUtils.openConnection();
+			ensureConnection();
+			if (conn == null || conn.isClosed()) {
+				return false;
 			}
 			String sql = "DELETE FROM op_ip_config";
 			try (PreparedStatement ps = conn.prepareStatement(sql)) {
@@ -180,8 +186,9 @@ public class JdbcUtils {
 
 	public static String[] getAnyOpIpConfig() {
 		try {
-			if (JdbcUtils.conn == null || JdbcUtils.conn.isClosed()) {
-				JdbcUtils.openConnection();
+			ensureConnection();
+			if (conn == null || conn.isClosed()) {
+				return null;
 			}
 			String sql = "SELECT op, opname, ip FROM op_ip_config ORDER BY rowid DESC LIMIT 1";
 			try (PreparedStatement ps = conn.prepareStatement(sql);

+ 0 - 4
src/resources/config/config.properties

@@ -1,5 +1 @@
-#mes.gw=OP355A
-#mes.server_ip=127.0.0.1
-#mes.server_ip=localhost
-#mes.server_ip=192.168.20.99
 mes.line_sn=XT