|
|
@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.github.s7connector.api.S7Connector;
|
|
|
import com.mes.component.MesRadio;
|
|
|
import com.mes.component.MesWebView;
|
|
|
+import com.mes.component.ProductTypePanel;
|
|
|
import com.mes.netty.NettyClient;
|
|
|
import com.mes.util.DateLocalUtils;
|
|
|
import com.mes.util.HttpUtils;
|
|
|
@@ -98,6 +99,16 @@ public class MesClient extends JFrame {
|
|
|
|
|
|
public static JLabel fxlabel;
|
|
|
|
|
|
+ //新增字段
|
|
|
+ public static ProductTypePanel productTypePanel;
|
|
|
+ public static JLabel productTypeCurrentLabel;
|
|
|
+ public static final int PRODUCT_SN_LENGTH = 32;
|
|
|
+ public static final String PREFIX_ZJ = "000020021815-01000016"; //智界
|
|
|
+ public static final String PREFIX_SJ = "000020022029-01000016"; //尚界
|
|
|
+ public static final String PRODUCT_TYPE_SWITCH_PASSWORD = "503833";
|
|
|
+ public static final String PRODUCT_TYPE_ZJ = ProductTypePanel.TYPE_ZJ;
|
|
|
+ public static final String PRODUCT_TYPE_SJ = ProductTypePanel.TYPE_SJ;
|
|
|
+
|
|
|
public static JLabel spindleSpeedLabel;
|
|
|
public static JLabel feedSpeedLabel;
|
|
|
public static JLabel pressureLabel;
|
|
|
@@ -293,6 +304,7 @@ public class MesClient extends JFrame {
|
|
|
}
|
|
|
|
|
|
public static void initWarehouseData(){
|
|
|
+ loadProductTypeFromDb(); //新增
|
|
|
resetScanA();
|
|
|
}
|
|
|
|
|
|
@@ -388,6 +400,7 @@ public class MesClient extends JFrame {
|
|
|
//弹窗扫工件码
|
|
|
String scanBarcode = JOptionPane.showInputDialog(null, scanBarcodeTitle);
|
|
|
if(scanBarcode!=null&&!scanBarcode.equalsIgnoreCase("")) {
|
|
|
+ scanBarcode = scanBarcode.trim(); //生产类型新增
|
|
|
//获取用户
|
|
|
getUser();
|
|
|
//获取扫码内容36位
|
|
|
@@ -402,6 +415,21 @@ public class MesClient extends JFrame {
|
|
|
//刷新界面
|
|
|
mesClientFrame.repaint();
|
|
|
|
|
|
+ //生产类型新增
|
|
|
+ String validateMsg = validateProductSnMessage(scanBarcode);
|
|
|
+ if (validateMsg != null) {
|
|
|
+ check_quality_result = false;
|
|
|
+ work_status = 0;
|
|
|
+ MesClient.finish_ok_bt.setEnabled(false);
|
|
|
+ MesClient.finish_ng_bt.setEnabled(false);
|
|
|
+ MesClient.f_scan_data_bt_1.setEnabled(true);
|
|
|
+ updateProductTypePanelEnabled(true);
|
|
|
+ MesClient.setMenuStatus(validateMsg, -1);
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ updateProductTypePanelEnabled(false);
|
|
|
+
|
|
|
if(!tcp_connect_flag) {
|
|
|
MesClient.setMenuStatus("设备未连接Mes服务器",-1);
|
|
|
// JOptionPane.showMessageDialog(mesClientFrame,"设备未连接Mes服务器","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
@@ -693,6 +721,13 @@ public class MesClient extends JFrame {
|
|
|
String sn = getBarcode(product_sn.getText());
|
|
|
getUser();
|
|
|
|
|
|
+ //生产类型新增
|
|
|
+ String validateMsg = validateProductSnMessage(sn);
|
|
|
+ if (validateMsg != null) {
|
|
|
+ MesClient.setMenuStatus(validateMsg, -1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
String qret = "OK";
|
|
|
Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
if(!sendret){
|
|
|
@@ -721,6 +756,13 @@ public class MesClient extends JFrame {
|
|
|
|
|
|
String sn = getBarcode(product_sn.getText());
|
|
|
getUser();
|
|
|
+
|
|
|
+ String validateMsg = validateProductSnMessage(sn);
|
|
|
+ if (validateMsg != null) {
|
|
|
+ MesClient.setMenuStatus(validateMsg, -1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
String qret = "NG";
|
|
|
Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
if(!sendret){
|
|
|
@@ -750,6 +792,46 @@ public class MesClient extends JFrame {
|
|
|
searchScrollPaneDj = new JScrollPane(indexPanelC);
|
|
|
indexPanelC.setLayout(null);
|
|
|
|
|
|
+ //新增的面板
|
|
|
+ JPanel indexPanelProductType = new JPanel();
|
|
|
+ indexPanelProductType.setLayout(null);
|
|
|
+ JScrollPane productTypeScrollPane = new JScrollPane(indexPanelProductType);
|
|
|
+
|
|
|
+ JLabel productTypeTitle = new JLabel("生产类型设置");
|
|
|
+ productTypeTitle.setFont(new Font("微软雅黑", Font.BOLD, 28));
|
|
|
+ productTypeTitle.setForeground(new Color(64, 64, 64));
|
|
|
+ productTypeTitle.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
+ productTypeTitle.setBounds(81, 80, 810, 50);
|
|
|
+ indexPanelProductType.add(productTypeTitle);
|
|
|
+
|
|
|
+ JLabel productTypeHint = new JLabel("请选择当前生产的工件类型,切换后将保存到本地并用于扫码校验");
|
|
|
+ productTypeHint.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
+ productTypeHint.setForeground(new Color(140, 140, 140));
|
|
|
+ productTypeHint.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
+ productTypeHint.setBounds(81, 140, 810, 40);
|
|
|
+ indexPanelProductType.add(productTypeHint);
|
|
|
+
|
|
|
+ productTypePanel = new ProductTypePanel(PRODUCT_TYPE_SWITCH_PASSWORD);
|
|
|
+ productTypePanel.setBounds(276, 210, 420, 72);
|
|
|
+ productTypePanel.setOnChangeListener(() -> {
|
|
|
+ if (work_status == 0) {
|
|
|
+ saveProductTypeToDb();
|
|
|
+ setMenuStatus("当前生产类型:" + getProductTypeName() + ",请扫工件码", 0);
|
|
|
+ }
|
|
|
+ refreshProductTypeCurrentLabel();
|
|
|
+ });
|
|
|
+ indexPanelProductType.add(productTypePanel);
|
|
|
+
|
|
|
+ productTypeCurrentLabel = new JLabel();
|
|
|
+ productTypeCurrentLabel.setFont(new Font("微软雅黑", Font.PLAIN, 22));
|
|
|
+ productTypeCurrentLabel.setForeground(new Color(64, 64, 64));
|
|
|
+ productTypeCurrentLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
+ productTypeCurrentLabel.setBounds(81, 310, 810, 40);
|
|
|
+ refreshProductTypeCurrentLabel();
|
|
|
+ indexPanelProductType.add(productTypeCurrentLabel);
|
|
|
+
|
|
|
+ tabbedPane.addTab("生产类型", new ImageIcon(MesClient.class.getResource("/bg/menu_setting.png")), productTypeScrollPane, null);
|
|
|
+
|
|
|
tabbedPane.addTab("开班点检", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), searchScrollPaneDj, null);
|
|
|
|
|
|
|
|
|
@@ -774,6 +856,82 @@ public class MesClient extends JFrame {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private static String validateProductSnMessage(String sn) {
|
|
|
+ if (sn == null || sn.isEmpty()) {
|
|
|
+ return "工件码为空,请重试";
|
|
|
+ }
|
|
|
+ if (sn.length() != PRODUCT_SN_LENGTH) {
|
|
|
+ return "工件码长度须为32位,当前" + sn.length() + "位";
|
|
|
+ }
|
|
|
+ String prefix = getProductSnPrefix();
|
|
|
+ if (!sn.startsWith(prefix)) {
|
|
|
+ return "工件码前缀与当前类型(" + getProductTypeName() + ")不匹配,当前工件码为" + getProductTypeNameBySn(sn);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void updateProductTypePanelEnabled(boolean enabled) {
|
|
|
+ if (productTypePanel != null) {
|
|
|
+ productTypePanel.setEnabled(enabled);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void loadProductTypeFromDb() {
|
|
|
+ if (productTypePanel == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String savedType = JdbcUtils.getClientConfig(
|
|
|
+ JdbcUtils.getProductTypeConfigKey(mes_gw),
|
|
|
+ PRODUCT_TYPE_ZJ
|
|
|
+ );
|
|
|
+ if (PRODUCT_TYPE_SJ.equals(savedType)) {
|
|
|
+ productTypePanel.setResult(PRODUCT_TYPE_SJ);
|
|
|
+ } else {
|
|
|
+ productTypePanel.setResult(PRODUCT_TYPE_ZJ);
|
|
|
+ }
|
|
|
+ refreshProductTypeCurrentLabel();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void refreshProductTypeCurrentLabel() {
|
|
|
+ if (productTypeCurrentLabel != null) {
|
|
|
+ productTypeCurrentLabel.setText("当前选择:" + getProductTypeName() + "(前缀 " + getProductSnPrefix() + ")");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void saveProductTypeToDb() {
|
|
|
+ if (productTypePanel == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JdbcUtils.saveClientConfig(
|
|
|
+ JdbcUtils.getProductTypeConfigKey(mes_gw),
|
|
|
+ productTypePanel.getResult()
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getProductSnPrefix() {
|
|
|
+ if (productTypePanel != null && PRODUCT_TYPE_SJ.equals(productTypePanel.getResult())) {
|
|
|
+ return PREFIX_SJ;
|
|
|
+ }
|
|
|
+ return PREFIX_ZJ;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getProductTypeName() {
|
|
|
+ if (productTypePanel != null) {
|
|
|
+ return productTypePanel.getTypeName();
|
|
|
+ }
|
|
|
+ return "智界";
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String getProductTypeNameBySn(String sn) {
|
|
|
+ if (sn.startsWith(PREFIX_SJ)) {
|
|
|
+ return "尚界";
|
|
|
+ }
|
|
|
+ if (sn.startsWith(PREFIX_ZJ)) {
|
|
|
+ return "智界";
|
|
|
+ }
|
|
|
+ return "未知";
|
|
|
+ }
|
|
|
+
|
|
|
public static void setMenuStatus(String msg,int error){
|
|
|
if(error == 0){
|
|
|
MesClient.status_menu.setForeground(Color.GREEN);
|