wangxichen před 5 dny
rodič
revize
96271b2059

+ 68 - 3
src/com/mes/component/WorkJPanel70Xh.java

@@ -125,6 +125,14 @@ public class WorkJPanel70Xh extends JPanel {
 
     public String cacheName = "";
 
+    public static final int SN_LENGTH = 16; // 工件码长度
+
+    // 手动输入(测试用,模拟扫码枪),由 设置->扫码手动输入 开关控制显示
+    public JLabel manualLabel;
+    public JTextField manualSnField;
+    public JButton manualSubmitBtn;
+    public volatile String pendingManualSn = ""; // 待使用的手动码,下次扫码请求时消费
+
     public WorkJPanel70Xh(String position){
         this("OP080", position); // 默认反面换型台(原OP070配置)
     }
@@ -313,6 +321,29 @@ public class WorkJPanel70Xh extends JPanel {
         transfertodevicelabel.setBounds(workWidth*2/3, 150, workWidth/3, 30);
         this.add(transfertodevicelabel);
 
+        // 手动输入行(占用原加工行位置,该行在换型台未使用)
+        manualLabel = new JLabel("手动");
+        manualLabel.setHorizontalAlignment(SwingConstants.CENTER);
+        manualLabel.setForeground(Color.BLACK);
+        manualLabel.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        manualLabel.setBounds(0, 100, workWidth/5, 40);
+        this.add(manualLabel);
+
+        manualSnField = new JTextField("");
+        manualSnField.setHorizontalAlignment(SwingConstants.CENTER);
+        manualSnField.setForeground(Color.BLACK);
+        manualSnField.setFont(new Font("微软雅黑", Font.PLAIN, 16));
+        manualSnField.setBounds(workWidth/5, 100, workWidth*3/5, 40);
+        manualSnField.addActionListener(e -> submitManualSn()); // 回车提交
+        this.add(manualSnField);
+
+        manualSubmitBtn = new JButton("确认");
+        manualSubmitBtn.setFont(new Font("微软雅黑", Font.PLAIN, 22));
+        manualSubmitBtn.setBounds(workWidth*4/5 + 10, 100, workWidth/5 - 10, 40);
+        manualSubmitBtn.addActionListener(e -> submitManualSn());
+        this.add(manualSubmitBtn);
+
+        setManualMode(MesClient.manualScanEnabled);
 
         formatElementUI();
         startOprnoTimer();
@@ -450,13 +481,47 @@ public class WorkJPanel70Xh extends JPanel {
         }, 100,1500);
     }
 
+    // 显示/隐藏手动输入行;关闭时丢弃未使用的手动码
+    public void setManualMode(boolean enabled){
+        manualLabel.setVisible(enabled);
+        manualSnField.setVisible(enabled);
+        manualSubmitBtn.setVisible(enabled);
+        if(enabled){
+            return;
+        }
+        manualSnField.setText("");
+        if(!pendingManualSn.isEmpty()){
+            pendingManualSn = "";
+            setMenuStatus("已关闭手动输入,未使用的手动码已丢弃", 0);
+        }
+    }
+
+    // 提交手动码:校验长度后挂起,等下一次扫码请求时当作扫码结果
+    public void submitManualSn(){
+        String sn = manualSnField.getText().trim();
+        if(sn.length() != SN_LENGTH){
+            setMenuStatus("手动码需为"+SN_LENGTH+"位,当前"+sn.length()+"位", -1);
+            return;
+        }
+        pendingManualSn = sn;
+        manualSnField.setText("");
+        log.info(oprno+pos+"手动输入工件码:"+sn+",操作人:"+MesClient.user_menu.getText());
+        setMenuStatus("手动码已就绪,等待扫码请求:"+sn, 0);
+    }
+
     public void barCode2(){
-        String sn = readQrcode();
-        log.info("真扫码执行:"+sn);
+        // 有手动码时优先使用并跳过本次扫码枪,用完即清;无手动码时扫码枪照常工作
+        String manualSn = pendingManualSn;
+        boolean isManual = !manualSn.isEmpty();
+        if(isManual){
+            pendingManualSn = "";
+        }
+        String sn = isManual ? manualSn : readQrcode();
+        log.info((isManual ? "手动码执行:" : "真扫码执行:")+sn);
         MesClient.preSn = sn.trim();    //存为全局码
         log.info("全局码结果:"+MesClient.preSn);
         MesClient.setMenuStatus("工件码:"+sn, 0);
-        if(sn.length() != 19){
+        if(sn.length() != SN_LENGTH){
             //TODO  无扫码结果
 //            MesClient.setMenuStatus("无扫码结果", -1);
         }else{

+ 1 - 1
src/com/mes/component/WorkJPanelOP70.java

@@ -577,7 +577,7 @@ public class WorkJPanelOP70 extends JPanel {
         preSn = sn.trim();
         log.info("preSn:"+preSn);
         MesClient.setMenuStatus("工件码:"+sn, 0);
-        if(sn.length() != 19){
+        if(sn.length() != WorkJPanel70Xh.SN_LENGTH){
 //            MesClient.setMenuStatus("扫码结果为空", -1);
         }else{
             finallySn = sn;   //全局码

+ 22 - 0
src/com/mes/ui/MesClient.java

@@ -100,6 +100,9 @@ public class MesClient extends JFrame {
     public static int scanFlag3 = 0;
     public static int scanFlag4 = 0;
 
+    // 扫码手动输入开关(测试用,模拟扫码枪输入),每次启动默认关闭
+    public static volatile boolean manualScanEnabled = false;
+
 
     public static void main(String[] args) {
         EventQueue.invokeLater(new Runnable() {
@@ -251,6 +254,19 @@ public class MesClient extends JFrame {
         });
 //        settingMenu.add(resetTcpMenu_1);
 
+        // 扫码手动输入开关:开启绿色/关闭红色,开启后换型台面板显示手动输入行
+        JMenuItem manualScanMenu = new JMenuItem();
+        manualScanMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        refreshManualScanMenu(manualScanMenu);
+        manualScanMenu.addActionListener(e -> {
+            manualScanEnabled = !manualScanEnabled;
+            log.info("扫码手动输入" + (manualScanEnabled ? "已开启" : "已关闭") + ",操作人:" + user_menu.getText());
+            refreshManualScanMenu(manualScanMenu);
+            if (workJPanel70XhFront != null) workJPanel70XhFront.setManualMode(manualScanEnabled);
+            if (workJPanel70Xh != null) workJPanel70Xh.setManualMode(manualScanEnabled);
+        });
+        settingMenu.add(manualScanMenu);
+
         contentPane = new JPanel();
         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
         setContentPane(contentPane);
@@ -545,6 +561,12 @@ public class MesClient extends JFrame {
         });
     }
 
+    // 按开关状态刷新菜单项文字和颜色
+    private static void refreshManualScanMenu(JMenuItem item){
+        item.setText("扫码手动输入:" + (manualScanEnabled ? "已开启" : "已关闭"));
+        item.setForeground(manualScanEnabled ? new Color(0, 160, 0) : Color.RED);
+    }
+
     public static void setMenuStatus(String msg,int error){
         if(error == 0){
             MesClient.status_menu.setForeground(Color.GREEN);

+ 7 - 3
src/com/mes/util/JdbcUtils.java

@@ -18,13 +18,18 @@ public class JdbcUtils {
 	public static Connection conn = null;
 	public static String Drivde="org.sqlite.JDBC";
 	public static String DATABASE_URL="jdbc:sqlite:mes_db.db";
+	// 表结构是否已初始化,建表只需执行一次
+	private static volatile boolean tablesInited = false;
 
 	public static Connection getConn(){
 		try {
 			Class.forName(Drivde);// 加载驱动,连接sqlite的jdbc
 			conn = DriverManager.getConnection(DATABASE_URL);//连接数据库zhou.db,不存在则创建
-			log.info("连接到SQLite数据库成功!");
-			create_bw_record();//初始化结构表
+			if (!tablesInited) {
+				log.info("连接到SQLite数据库成功!");
+				create_bw_record();//初始化结构表
+				tablesInited = true;
+			}
 			//create_measure_data();//初始化测试数据表
 		} catch (Exception e) {
 			// TODO Auto-generated catch block
@@ -95,7 +100,6 @@ public class JdbcUtils {
 				"   record_time DATETIME,                 -- 记录时间\n" +
 				"   UNIQUE (sn)                 -- 唯一索引\n" +
 				")";
-		System.err.println(cache);
 		statement.executeUpdate(cache);
 
 		statement.close();

+ 3 - 3
src/resources/config/config.properties

@@ -1,5 +1,5 @@
-mes.server_ip=127.0.0.1
-#mes.server_ip=192.168.17.170
+#mes.server_ip=127.0.0.1
+mes.server_ip=192.168.17.170
 mes.line_sn=CZ060
 # east=?? west=??
-mes.line_pos=west
+mes.line_pos=east