wu
2023-12-14 f43c5acc73d15a6bc60d6a3cb66b6d750b257dc6
Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes
36个文件已修改
4556 ■■■■■ 已修改文件
CanadaMes-ui/public/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/AutomaticParameterSetting.json 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/ManualJog.json 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Positioning1.json 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/AutomaticParameterSetting.vue 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualJog.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter1.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter2.vue 803 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning1.vue 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning2.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ServoManualone.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Servomanual.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java 154 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/S7control.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/RolePermissionMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 335 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/impl/RolePermissionServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/config.properties 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/sql/canadames.sql 527 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/public/index.html
@@ -5,7 +5,7 @@
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>2.ico">
    <title>北玻mes系统</title>
    <title>NorthGlass-MES-System</title>
  </head>
  <body>
    <noscript>
CanadaMes-ui/src/configuration/AutomaticParameterSetting.json
@@ -110,5 +110,163 @@
      "type": "0",
      "value": ""
    }
  ]
  ],
  [
    {
        "title": {
          "name": "D01~D06输送"
        }
      },
  {
    "name": "最高速度",
    "read": 33,
    "sending": 0,
    "type": "0",
    "unit": "m/min",
    "count":3,
    "value":0
  },
  {
    "name": "高速线速度",
    "read": 11,
    "sending": 0,
    "type": "0",
    "unit": "m/min",
    "value":0
  },
  {
    "name": "低速线速度",
    "read": 11,
    "sending": 0,
    "type": "0",
    "unit": "m/min",
    "value":0
  },
  {
    "name": "手动速度",
    "read": 22,
    "sending": 0,
    "type": "0",
    "unit": "m/min",
    "value":0
  }
],
[
  {
      "title": {
        "name": "A01~A02输送"
      }
    },
{
  "name": "最高速度",
  "read": 33,
  "sending": 0,
  "type": "0",
  "unit": "m/min",
  "count":3,
  "value":0
},
{
  "name": "高速线速度",
  "read": 11,
  "sending": 0,
  "unit": "m/min",
  "type": "0",
  "value":0
},
{
  "name": "低速线速度",
  "read": 11,
  "sending": 0,
  "unit": "m/min",
  "type": "0",
  "value":0
},
{
  "name": "手动速度",
  "read": 22,
  "sending": 0,
  "unit": "m/min",
  "type": "0",
  "value":0
}
],[
{
    "title": {
      "name": "B01~B02输送"
    }
  },
{
"name": "最高速度",
"read": 33,
"sending": 0,
"type": "0",
"unit": "m/min",
"count":3,
"value":0
},
{
"name": "高速线速度",
"read": 11,
"sending": 0,
"type": "0",
"unit": "m/min",
"value":0
},
{
"name": "低速线速度",
"read": 11,
"sending": 0,
"type": "0",
"unit": "m/min",
"value":0
},
{
"name": "手动速度",
"read": 22,
"sending": 0,
"type": "0",
"unit": "m/min",
"value":0
}
]
,[
{
"name": "翻转点动速度",
"read": 33,
"sending": 0,
"type": "0",
"unit": "mm/S",
"count":3,
"value":0
}
],
[
{
"name": "小车点动速度",
"read": 11,
"sending": 0,
"unit": "mm/S",
"type": "0",
"value":0
}
]
]
CanadaMes-ui/src/configuration/ManualJog.json
@@ -65,7 +65,83 @@
    },
    {
      "button": {
        "name": "A01输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01注电泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02输送正向",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02注电泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
@@ -83,51 +159,6 @@
    },
    {
      "button": {
        "name": "B02输送",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01行走点动",
        "value": 0,
        "address": "DB10.0",
@@ -135,6 +166,46 @@
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01翻转气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01升降气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    }, {
      "button": {
        "name": "B01吹气",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B02输送",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B02行走点动",
@@ -170,69 +241,8 @@
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01翻转气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01升降气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01吹气",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01注电泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02注电泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    }
  ]
]
CanadaMes-ui/src/configuration/Positioning1.json
@@ -216,7 +216,114 @@
     
      
     
    ]
    ],
    [
      {
          "title": {
            "name": "B01格位置设定"
          }, "type": "1"
        },
    {
      "name": "1#格地址",
      "read": 33,
      "sending": 0,
      "type": "0",
      "unit": "mm",
      "address":"DB100.0",
      "count":3,
      "value":"0"
    },
    {
      "name": "22#格地址",
      "read": 11,
      "sending": 0,
      "unit": "mm",
      "type": "0"
      ,
      "value":"0"
    },
    {
      "name": "43#格地址",
      "read": 22,
      "sending": 0,
      "unit": "mm",
      "type": "0",
      "value":"0"
    },
    {
      "name": "64#格地址",
      "read": 22,
      "sending": 0,
      "unit": "mm",
      "type": "0",
      "value":"0"
    },
    {
      "name": "85#格地址",
      "read": 22,
      "sending": 0,
      "unit": "mm",
      "type": "0",
      "value":"0"
    }
  ],
  [
      {
          "title": {
            "name": "B02位置设定"
          }, "type": "1"
        },
        {
          "name": "106#格地址",
          "read": 22,
          "sending": 0,
          "unit": "mm",
          "type": "0",
          "value":"0"
        },
        {
          "name": "127#格地址",
          "read": 22,
          "sending": 0,
          "unit": "mm",
          "type": "0",
          "value":"0"
        },
        {
          "name": "148#格地址",
          "read": 22,
          "sending": 0,
          "unit": "mm",
          "type": "0",
          "value":"0"
        },
        {
          "name": "169#格地址",
          "read": 22,
          "sending": 0,
          "unit": "mm",
          "type": "0",
          "value":"0"
        },
        {
          "name": "190#格地址",
          "read": 22,
          "sending": 0,
          "unit": "mm",
          "type": "0",
          "value":"0"
        }
  ]
   
    
CanadaMes-ui/src/lang/locales/en-US.json
@@ -332,6 +332,7 @@
  "Deleted":"Deleted",
  "Glass State":"Glass State",
  "Absent":"Absent",
  "Approximately resettable time":"Approximately resettable time",
    "ServoManualone": {
      "A01 所在格子": "A01 Current Grid",
      "数量": "Quantity",
@@ -359,15 +360,7 @@
    },
    "langParameter1": {
      "A01~A02输送": "A01~A02 Conveying",
      "B01~B02输送": "B01~B02 Conveying",
      "D01~D06输送": "D01~D06 Conveying",
      "翻转点动速度": "Flip Jog Speed",
      "小车点动速度": "Cart Jog Speed",
      "最高速度": "Max Speed",
      "高速线速度": "High-Speed Line Speed",
      "低速线速度": "Low-Speed Line Speed",
      "手动速度": "Manual Speed"
      },
    
        "langParameter2": {
@@ -422,26 +415,27 @@
            "复位": "Reset",
            "未回零": "NotZero",
            "回零": "Zero",
            "目标格子": "Target Grid"
            "目标格子": "Target Grid",
            "格子间距": "GridSpacing",
            "存片接片地址": "StorageReceivingAddress",
            "出片接片地址": "OutgoingReceivingAddress",
            "存片格位置设定": "StorageGridPositionSetting",
            "1#格地址": "grid address1# ",
            "22#格地址": "grid address22#",
            "43#格地址": "grid address43#",
            "64#格地址": "grid address64#",
            "85#格地址": "grid address85#",
            "106#格地址": "grid address106#",
            "127#格地址": "grid address127#",
            "148#格地址": "grid address148#",
            "169#格地址": "grid address169#",
            "190#格地址": "grid address190#",
            "出片格位置设定": "OutgoingGridPositionSetting",
            "B01格位置设定":"B01PositionSetting",
            "B02位置设定":"B02PositionSetting"
            },
            "langPositioning2": {
              "格子间距": "GridSpacing",
              "存片接片地址": "StorageReceivingAddress",
              "出片接片地址": "OutgoingReceivingAddress",
              "存片格位置设定": "StorageGridPositionSetting",
              "1#格地址": "grid address1# ",
              "22#格地址": "grid address22#",
              "43#格地址": "grid address43#",
              "64#格地址": "grid address64#",
              "85#格地址": "grid address85#",
              "106#格地址": "grid address106#",
              "127#格地址": "grid address127#",
              "148#格地址": "grid address148#",
              "169#格地址": "grid address169#",
              "190#格地址": "grid address190#",
              "出片格位置设定": "OutgoingGridPositionSetting",
              "B01格位置设定":"B01PositionSetting",
              "B02位置设定":"B02PositionSetting"
              },  "ManualonePositionlang": {
                "A01手动格子": "A01 Target grid(Manual)",
                "A01定位速度": "A01 TRAVEL POS Velocity manual",
@@ -459,7 +453,7 @@
                "B01当前格子": "B01 Current Grid",
                "B01启动": "B01 Start",
                "复位": "Reset",
                "回零": "Zero",
                "回零": "Home",
                "未回零": "NotZero",
                "B02手动格子": "B02 Target grid(Manual)",
                "B02定位速度": "B02 TRAVEL POS Velocity manual",
@@ -479,14 +473,14 @@
                "故障": "Fault",
                "复位": "Reset",
                "未回零": "NotZero",
                "回零": "Zero",
                "回零": "Home",
                "A02手动位置": "A02 turn Target Angle(Manual)",
                "A02定位速度": "A02 TURN POS Velocity manual",
                "A02翻转实时位置": "A02 turn Actual angle",
                "A02翻转启动": "A02 SERVE TURN",
                "A02复位": "Reset",
                "未回零": "NotZero",
                "回零": "Zero"
                "A02复位": "Reset"
              },
              "AutomaticParameterSettinglang": {
                "A01行走高速角度": "A01 turn Angle1",
@@ -499,7 +493,16 @@
                "A02笼子角度": "A02 turn Angle4",
                "大车自动速度": "A01 A02 TRAVEL POS Velocity AUTO",
                "小车自动速度": "B01 B02 TRAVEL POS Velocity AUTO",
                "自动翻转速度": "A01 A02 TURN POS Velocity AUTO"
                "自动翻转速度": "A01 A02 TURN POS Velocity AUTO",
                "A01~A02输送": "A01~A02 Conveying",
                "B01~B02输送": "B01~B02 Conveying",
                "D01~D06输送": "D01~D06 Conveying",
                "翻转点动速度": "Flip Jog Speed",
                "小车点动速度": "Cart Jog Speed",
                "最高速度": "Max Speed",
                "高速线速度": "High-Speed Line Speed",
                "低速线速度": "Low-Speed Line Speed",
                "手动速度": "Manual Speed"
              },
              "ManualJoglang": {
                "D01输送": "D01 VFD conveyor",
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -324,6 +324,7 @@
  "Deleted":"已删除",
  "Glass State":"玻璃状态",
  "Absent":"不存在",
  "Approximately resettable time":"可复位大概时间",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速",
CanadaMes-ui/src/views/Electrical/AutomaticParameterSetting.vue
@@ -30,37 +30,43 @@
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
      
    </el-breadcrumb>
    <el-row :gutter="20">
      <el-col :span="12" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
        <el-card class="json-block" style="width:585px;">
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row" v-if="item.type === '0'">
              <span class="name" v-if="item.type === '0'" style="width:300px;">{{ item.name }}</span>
              <el-input style="width:250px;" v-if="item.type === '0'" v-model="item.value" class="input-box"
                @keyup.enter.native="submitDataToBackend"></el-input>
                <span v-if="item.unit" :name="item.unit" >{{ item.unit }}</span>
    <el-row :gutter="18" class="card">
      <el-col :span="7" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
        <el-card class="json-block">
          <div class="button-row" style="display: flex; justify-content: space-between;">
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <span v-if="item.title" :name="item.title.name" class="action-button">{{ item.title.name }}</span>
            </div>
          </div>
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" style="width:250px;">{{ item.name }}</span>
              <el-input v-if="item.type === '0'" v-model="item.value" class="input-box"
                @keyup.enter.native="submitDataToBackend"></el-input>
                <span v-if="item.unit" :name="item.unit" >{{ item.unit }}</span>
            </div>
          </div>
        </el-card>
      </el-col>
    </el-row>
@@ -166,13 +172,17 @@
          // console.log(obj);
          const handleMouseMove = throttle(function (event) {
            const inputBox = document.querySelectorAll('.el-card__body');
            const inputBox = document.querySelectorAll('.input-box');
            const target = event.target;
            if (inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
              const parms = obj.params;
              const fanzhuan = obj.fanzhuan;
              const xiaoche = obj.xiaoche;
              const dache = obj.dache1;
              const parms2 = obj.params2;
              const fanzhuan2 = obj.fanzhuan2;
              const xiaoche2 = obj.xiaoche2;
              // console.log('parms:', parms);
              // console.log('fanzhuan:', fanzhuan);
@@ -202,8 +212,40 @@
              if (Array.isArray(dache) && Array.isArray(dache[0]) && dache[0][0] !== undefined) {
                jsonData2[2][0]['value'] = dache[0][0];
              }
            let index2 = 0;
              for (let i =5; i < jsonData2.length; i++) {
                let arr = jsonData2[i];
                for (let j = 0; j < arr.length; j++) {
                  let obj2 = arr[j];
                  if (obj2.type === '0' && Object.prototype.hasOwnProperty.call(obj2, 'value')) {
                    if (Array.isArray(parms2) && Array.isArray(parms2[0]) && parms2[0][index2] !== undefined) {
                      obj2.value = parms2[0][index2];
                      index2++;
                    }
                  }
                }
              }
              if (Array.isArray(fanzhuan2) && Array.isArray(fanzhuan2[0]) && fanzhuan2[0][0] !== undefined) {
                jsonData2[8][0]['value'] = fanzhuan2[0][0];
              }
              if (Array.isArray(xiaoche2) && Array.isArray(xiaoche2[0]) && xiaoche2[0][0] !== undefined) {
                jsonData2[9][0]['value'] = xiaoche2[0][0];
              }
            }
          }, 200);
          }, 50);
          document.addEventListener('mouseover', handleMouseMove);
        };
CanadaMes-ui/src/views/Electrical/ManualJog.vue
@@ -30,27 +30,27 @@
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
      
    </el-breadcrumb>
    <el-row :gutter="40" style="width:100%;">
      <el-col :span="18" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
    <el-row :gutter="40" >
      <el-col :span="16" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
        <el-card class="json-block" style="width:100%;">
          <div class="button-row" style="display: flex; justify-content: flex-start;flex-wrap:wrap;">
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue
@@ -29,19 +29,19 @@
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
@@ -54,7 +54,16 @@
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" style="width:300px;">{{ item.name }}</span>
              <el-input style="width:250px;" v-if="item.state != 0 && item.type === '0'" v-model="item.value"
                <el-input style="width:250px;"  v-if="item.state != 0 && item.type === '0' && groupIndex === 0" v-model="item.value"  @keyup.enter.native="A01start"
                class="input-box"></el-input>
                <el-input style="width:250px;"  v-else-if="item.state != 0 && item.type === '0' && groupIndex === 1" v-model="item.value"  @keyup.enter.native="A02start"
                class="input-box"></el-input>
                <el-input style="width:250px;"  v-else-if="item.state != 0 && item.type === '0' && groupIndex === 2" v-model="item.value"  @keyup.enter.native="B01start"
                class="input-box"></el-input>
                <el-input style="width:250px;"  v-else-if="item.state != 0 && item.type === '0' && groupIndex === 3" v-model="item.value"  @keyup.enter.native="B02start"
                class="input-box"></el-input>
                <el-input style="width:250px;" v-else-if="item.state != 0 && item.type === '0'" v-model="item.value"
                class="input-box"></el-input>
            </div>
          </div>
@@ -75,14 +84,22 @@
        </el-card>
      </el-col>
    </el-row>
 <div class="container">
    <component :is="embeddedComponent"></component>
  </div>
    <!-- <el-button @click="submitDataToBackend">提交数据到后端</el-button> -->
  </div>
</template>
<script>
import LanguageMixin from '../../lang/LanguageMixin'
import data from '../../configuration/Manualoneposition'
import { throttle } from 'lodash';
import ManualonePosition2 from './ManualonePosition2.vue';
let socket;
export default {
  name: "ManualonePosition",
@@ -91,6 +108,7 @@
    return {
      jsonData: data,
      language: this.$i18n.locale,
      embeddedComponent: ManualonePosition2,
      // 加载整个data.json文件作为jsonData
    }
@@ -126,20 +144,114 @@
    },
    A01start(){
      const data = [];
for (let i = 0; i < 1; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
    return { value: item.value };
  });
  const values = inputData.map(item => item.value);
  data.push(values);
}
data.push([], [], [],[],[],[]);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
    },
    A02start(){
      const data = [];
for (let i = 1; i < 2; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
    return { value: item.value };
  });
  const values = inputData.map(item => item.value);
  data.unshift([]);
  data.push(values);
}
data.push([], [], [],[],[]);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
    },
    B01start(){
      const data = [];
for (let i = 2; i < 3; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
    return { value: item.value };
  });
  const values = inputData.map(item => item.value);
  data.unshift([], []);
  data.push(values);
}
//data.unshift([]);
data.push([], [], [],[]);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
    },
    B02start(){
      const data = [];
for (let i = 3; i < 4; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
    return { value: item.value };
  });
  const values = inputData.map(item => item.value);
  data.unshift([], [], []);
  data.push(values);
}
data.push([], [],[]);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
    },
    submitDataToBackend (currentButtonName) {
      if (currentButtonName === 'A01启动' || currentButtonName === 'A01 Start') {
        const data = [];
        for (let i = 0; i < 1; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
  const values = [this.jsonData[0][3].button.value]
          data.push(values);
        }
        data.push([], [], [],[],[],[]);
        data.unshift([], [], [],[],[],[],[]);
@@ -155,77 +267,60 @@
      if (currentButtonName === 'A02启动' || currentButtonName === 'A02 Start') {
        const data = [];
        for (let i = 1; i < 2; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
const values = [this.jsonData[1][3].button.value]
          const values = inputData.map(item => item.value);
          data.unshift([]);
          data.push(values);
        }
        data.push([], [], [],[],[]);
        data.push(values);
      data.unshift([], [], [],[],[],[],[],[]);
        const jsonObject = { data };
      const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('所有Type为0的value:', jsonString);
      socket?.send(jsonString);
      }
      if (currentButtonName === 'B01启动' || currentButtonName === 'B01 Start') {
        const data = [];
        for (let i = 2; i < 3; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
const values = [this.jsonData[2][3].button.value]
          const values = inputData.map(item => item.value);
          data.unshift([], []);
          data.push(values);
        }
        //data.unshift([]);
        data.push([], [], [],[]);
        data.push(values);
      data.unshift([], [], [],[],[],[],[],[],[]);
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      const jsonObject = { data };
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('所有Type为0的value:', jsonString);
      socket?.send(jsonString);
      }
      if (currentButtonName === 'B02启动' || currentButtonName === 'B02 Start') {
        const data = [];
        for (let i = 3; i < 4; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
const values = [this.jsonData[3][3].button.value]
          const values = inputData.map(item => item.value);
          data.unshift([], [], []);
          data.push(values);
        }
        data.push([], [],[]);
        data.push(values);
      data.unshift([], [], [],[],[],[],[],[],[],[]);
        const jsonObject = { data };
      const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('所有Type为0的value:', jsonString);
      socket?.send(jsonString);
      }
@@ -335,7 +430,7 @@
          }
          let obj = JSON.parse(msg.data);
          // console.log(obj);
        // console.log(obj);
          const jsonData2 = this.jsonData;
          const weihuiling = obj.weihuiling;
          const handleMouseMove = throttle(function (event) {
@@ -353,24 +448,6 @@
             
              //改变状态文字
// for (let i = 2; i < jsonData2.length; i++) {
//   let arr6 = jsonData2[i];
//   for (let j = 2; j < arr6.length; j++) {
//     let obj6 = arr6[j];
//     if (obj6.button&& (obj6.button.name === "未回零" || obj6.button.name === "NotZero")) {
//       if ( obj6.button.name.includes("未")&& this.language==="zh-CN") {
//         console.log(obj6.button.name)
//       obj6.button.name =obj6.button.name.replace("未","已") ;
//     }
//     if ( obj6.button.name.includes("NotZero")) {
//       obj6.button.name =obj6.button.name.replace("NotZero","Zero") ;
//     }
//   }
// }
// }
@@ -380,6 +457,8 @@
          document.addEventListener('mouseover', handleMouseMove);
if(obj.zuhe1){
           //更新实时位置
@@ -431,7 +510,7 @@
                for (let j = 2; j < arr2.length; j++) {
                  let obj3 = arr2[j];
                  if (obj3.button) {
                    if (obj3.button && (obj3.button.name === "未回零" || obj3.button.name === "NotZero")) {
                    if (obj3.button && (obj3.button.name === "未回零" || obj3.button.name === "NotZero" || obj3.button.name === "已回零" || obj3.button.name === "Zero")) {
                      obj3.button.value = weihuiling[0][i];
                      //  console.log(obj3.button.value)
                    }
@@ -450,11 +529,19 @@
  for (let j = 0; j < arr.length; j++) {
    let obj = arr[j];
    if (obj.button && obj.button.value===1) {
      if ( obj.button.name.includes("未回零")&& this.language==="zh-CN") {
      if ( obj.button.name==="未回零" && this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("未回零","已回零") ;
    }
    if ( obj.button.name.includes("NotZero")) {
    if ( obj.button.name==="NotZero") {
      obj.button.name =obj.button.name.replace("NotZero","Zero") ;
    }
  }
  if (obj.button && obj.button.value===0) {
      if ( obj.button.name==="已回零"&& this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("已回零","未回零") ;
    }
    if ( obj.button.name==="Zero") {
      obj.button.name =obj.button.name.replace("Zero","NotZero") ;
    }
  }
@@ -462,6 +549,7 @@
}
}
}
        };
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue
@@ -1,14 +1,7 @@
<template>
  <div class="app">
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/alarm" tag="el-button" type="text" active-class="blue-button">{{ $t('Alarm')
      }}</router-link>
      <router-link to="/Electrical/State" tag="el-button" type="text" active-class="blue-button">{{ $t('State')
      }}</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text" active-class="blue-button">{{ $t('Action')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter')
      }}</router-link> -->
    <!-- <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
      }}</router-link>
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
@@ -27,18 +20,12 @@
        $t('ManualonePosition')
      }}</router-link>
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
@@ -47,7 +34,7 @@
        $t('Speed parameter settings')
      }}</router-link>
      
    </el-breadcrumb>
    </el-breadcrumb> -->
    <el-row :gutter="20">
      <el-col :span="12" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
@@ -55,7 +42,12 @@
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" style="width:300px;">{{ item.name }}</span>
              <el-input style="width:250px;" v-if="item.state != 0 && item.type === '0'" v-model="item.value"
                <el-input style="width:250px;"  v-if="item.state != 0 && item.type === '0' && groupIndex === 0" v-model="item.value"  @keyup.enter.native="A01start"
                class="input-box"></el-input>
                <el-input style="width:250px;" v-else-if="item.state != 0 && item.type === '0' && groupIndex === 1" v-model="item.value" @keyup.enter.native="A02start"
                class="input-box"></el-input>
                <el-input style="width:250px;" v-else-if="item.state != 0 && item.type === '0'" v-model="item.value"
                class="input-box"></el-input>
            </div>
          </div>
@@ -125,54 +117,95 @@
    },
    A01start(){
      const data = [];
for (let i = 0; i < 1; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
    return { value: item.value };
  });
  const values = inputData.map(item => item.value);
  data.push(values);
}
data.push([], [], [],[]);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
    },
    A02start(){
      const data = [];
for (let i = 1; i < 2; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
    return { value: item.value };
  });
  const values = inputData.map(item => item.value);
  data.unshift([]);
  data.push(values);
}
data.push([], [], []);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
    },
    //提交方法
    submitDataToBackend (currentButtonName) {
      if (currentButtonName === 'A01翻转启动' || currentButtonName === 'A01 SERVE TURN') {
        const data = [];
        for (let i = 0; i < 1; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
const values = [this.jsonData[0][3].button.value]
          const values = inputData.map(item => item.value);
          data.push(values);
        }
        data.push([], [], [],[]);
        data.push(values);
      data.unshift([], [], [],[],[]);
        const jsonObject = { data };
      const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('所有Type为0的value:', jsonString);
      socket?.send(jsonString);
      }
      if (currentButtonName === 'A02翻转启动' || currentButtonName === 'A02 SERVE TURN') {
        const data = [];
        for (let i = 1; i < 2; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
const values = [this.jsonData[0][3].button.value]
          const values = inputData.map(item => item.value);
          data.unshift([]);
          data.push(values);
        }
        data.push([], [], []);
        data.push(values);
      data.unshift([], [], [],[],[],[]);
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      const jsonObject = { data };
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('所有Type为0的value:', jsonString);
      socket?.send(jsonString);
      }
@@ -319,6 +352,12 @@
          document.addEventListener('mouseover', handleMouseMove);
          if(obj.zuhe1){
  // 遍历guzhang数组
  for (let i = 0; i < jsonData2.length; i++) {
                let arr = jsonData2[i];
@@ -341,7 +380,7 @@
                for (let j = 0; j < arr2.length; j++) {
                  let obj3 = arr2[j];
                  if (obj3.button) {
                    if (obj3.button && (obj3.button.name === "未回零" || obj3.button.name === "NotZero")) {
                    if (obj3.button && (obj3.button.name === "未回零" || obj3.button.name === "NotZero" || obj3.button.name === "已回零" || obj3.button.name === "Zero")) {
                      obj3.button.value = weihuiling[0][i];
                      //  console.log(obj3.button.value)
                    }
@@ -373,11 +412,19 @@
  for (let j = 0; j < arr.length; j++) {
    let obj = arr[j];
    if (obj.button && obj.button.value===1) {
      if ( obj.button.name.includes("未回零")&& this.language==="zh-CN") {
      if ( obj.button.name==="未回零" && this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("未回零","已回零") ;
    }
    if ( obj.button.name.includes("NotZero")) {
    if ( obj.button.name==="NotZero") {
      obj.button.name =obj.button.name.replace("NotZero","Zero") ;
    }
  }
  if (obj.button && obj.button.value===0) {
      if ( obj.button.name==="已回零"&& this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("已回零","未回零") ;
    }
    if ( obj.button.name==="Zero") {
      obj.button.name =obj.button.name.replace("Zero","NotZero") ;
    }
  }
@@ -385,6 +432,8 @@
}
}
}
        };
CanadaMes-ui/src/views/Electrical/Parameter1.vue
@@ -36,13 +36,13 @@
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
CanadaMes-ui/src/views/Electrical/Parameter2.vue
@@ -1,232 +1,337 @@
<template>
    <div class="app">
  <div class="app">
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
        <router-link to="/Electrical/alarm" tag="el-button" type="text" active-class="blue-button">{{ $t('Alarm')
        }}</router-link>
        <router-link to="/Electrical/State" tag="el-button" type="text" active-class="blue-button">{{ $t('State')
        }}</router-link>
        <router-link to="/Electrical/Action" tag="el-button" type="text" active-class="blue-button">{{ $t('Action')
        }}</router-link>
        <!-- <router-link to="/Electrical/Parameter" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter')
      <router-link
        to="/Electrical/alarm"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Alarm") }}</router-link
      >
      <router-link
        to="/Electrical/State"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("State") }}</router-link
      >
      <router-link
        to="/Electrical/Action"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Action") }}</router-link
      >
      <!-- <router-link to="/Electrical/Parameter" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter')
        }}</router-link> -->
        <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
        }}</router-link>
         <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter')
        }}</router-link>
      </el-breadcrumb>
      <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Automatic State')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
      }}</router-link>
       <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link
        to="/Electrical/Sign"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Sign") }}</router-link
      >
      <router-link
        to="/Electrical/Servomanual"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Parameter") }}</router-link
      >
    </el-breadcrumb>
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link
        to="/Electrical/Parameter2"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Automatic State") }}</router-link
      >
      <router-link
        to="/Electrical/ManualJog"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("ManualJog") }}</router-link
      >
      <router-link
        to="/Electrical/ManualonePosition"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("ManualonePosition") }}</router-link
      >
      <router-link
        to="/Electrical/Servomanualone"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Servomanualone") }}</router-link
      >
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
      <router-link
        to="/Electrical/Positioning1"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Address parameter settings") }}</router-link
      >
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
      <!--
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
      }}</router-link> -->
      <router-link
        to="/Electrical/AutomaticParameterSetting"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Speed parameter settings") }}</router-link
      >
    </el-breadcrumb>
    <el-row :gutter="40">
      <el-col :span="6" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex"   style="margin-bottom: -20px;">
        <el-card class="json-block"  style="width:300px;margin-bottom: 2px;">
          <div class="button-row" style="display: flex; justify-content: space-between;">
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <span v-if="item.title" :name="item.title.name" class="action-button" >{{ item.title.name }}</span>
            </div>
          </div>
          <div class="button-row" style="display: flex; justify-content: space-between;">
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <el-button v-if="item.button && language==='en-US'" :name="item.button.name" v-model="item.button.value" class="action-button"
  @click="updateButtonValue(dataGroup, itemIndex);submitDataToBackend(item.button.name)"
  :class="{ 'green-button':  (item.button.value === 0  && item.button.name !==  'Clear ID' ) ,'red-button': item.button.value === 2 && (item.button.name !==  'Clear ID' ) ,'yellow-button': item.button.value === 1 && (item.button.name !==  'Clear ID' ),'id': item.button.value === 1 && (item.button.name ==  'Clear ID' ) }">{{ item.button.name }}</el-button>
  <el-button v-if="item.button && language==='zh-CN'" :name="item.button.name" v-model="item.button.value" class="action-button"
  @click="updateButtonValue(dataGroup, itemIndex);submitDataToBackend(item.button.name)"
  :class="{ 'green-button':  (item.button.value === 0  && item.button.name !==  '清除ID' ) ,'red-button': item.button.value === 2 && (item.button.name !==  '清除ID' ) ,'yellow-button': item.button.value === 1 && (item.button.name !==  '清除ID' ),'id': item.button.value === 1 && (item.button.name ==  '清除ID' ) }">{{ item.button.name }}</el-button>
</div>
          </div>
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" v-if="groupIndex === 12" style="width:250px;">{{ item.name }}</span>
              <span class="name" v-else style="width:150px;">{{ item.name }}</span>
              <el-input v-if="item.type === '0'" v-model="item.value" readonly="readonly"     style="width:300px;" class="input-box"></el-input>
            </div>
          </div>
      <el-col
        :span="6"
        v-for="(dataGroup, groupIndex) in jsonData"
        :key="groupIndex"
        
        style="margin-bottom: -20px;"
      >
        <el-card class="json-block" style="width: 300px; margin-bottom: 2px">
          <div
            class="button-row"
            style="display: flex; justify-content: space-between"
          >
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <span
                v-if="item.title"
                :name="item.title.name"
                class="action-button"
                >{{ item.title.name }}</span
              >
            </div>
          </div>
          <div
            class="button-row"
            style="display: flex; justify-content: space-between"
          >
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <el-button
                v-if="item.button && language === 'en-US'"
                :name="item.button.name"
                v-model="item.button.value"
                class="action-button"
                @click="
                  updateButtonValue(dataGroup, itemIndex);
                  submitDataToBackend(item.button.name);
                "
                :class="{
                  'green-button':
                    item.button.value === 0 && item.button.name !== 'Clear ID',
                  'red-button':
                    item.button.value === 2 && item.button.name !== 'Clear ID',
                  'yellow-button':
                    item.button.value === 1 && item.button.name !== 'Clear ID',
                  id: item.button.value === 1 && item.button.name == 'Clear ID',
                }"
                >{{ item.button.name }}</el-button
              >
              <el-button
                v-if="item.button && language === 'zh-CN'"
                :name="item.button.name"
                v-model="item.button.value"
                class="action-button"
                @click="
                  updateButtonValue(dataGroup, itemIndex);
                  submitDataToBackend(item.button.name);
                "
                :class="{
                  'green-button':
                    item.button.value === 0 && item.button.name !== '清除ID',
                  'red-button':
                    item.button.value === 2 && item.button.name !== '清除ID',
                  'yellow-button':
                    item.button.value === 1 && item.button.name !== '清除ID',
                  id: item.button.value === 1 && item.button.name == '清除ID',
                }"
                >{{ item.button.name }}</el-button
              >
            </div>
          </div>
          <div
            v-for="(item, itemIndex) in dataGroup"
            :key="itemIndex"
            class="item-container"
          >
            <div class="item-row">
              <span
                class="name"
                v-if="groupIndex === 12"
                style="width: 250px"
                >{{ item.name }}</span
              >
              <span class="name" v-else style="width: 150px">{{
                item.name
              }}</span>
              <el-input
                v-if="item.type === '0'"
                v-model="item.value"
                readonly="readonly"
                style="width: 300px"
                class="input-box"
              ></el-input>
            </div>
          </div>
        </el-card>
      </el-col>
    </el-row>
    <!-- <el-button @click="submitDataToBackend">提交数据到后端</el-button> -->
  </div>
  </template>
</template>
  
  <script>
  import LanguageMixin from '../../lang/LanguageMixin'
  import data from '../../configuration/parameter2'
  // import { throttle } from 'lodash';
  let socket;
import LanguageMixin from "../../lang/LanguageMixin";
import data from "../../configuration/parameter2";
// import { throttle } from 'lodash';
let socket;
  // window.onload=function(){
  //   console.log("44");
  // }
  export default {
    destroyed() {
// window.onload=function(){
//   console.log("44");
// }
export default {
  destroyed() {
    socket.close();
  },
  name: "Parameter2",
  mixins: [LanguageMixin],
  data() {
    return {
      jsonData: data ,
      inputValue: '',
      language:this.$i18n.locale,
      jsonData: data,
      inputValue: "",
      language: this.$i18n.locale,
      // 加载整个data.json文件作为jsonData
    }
    };
  },
  activated(){
    this.initWebSocket ();
  activated() {
    this.initWebSocket();
    this.filteredData();
   const language = this.$i18n.locale;
  console.log(language);
  if (language === 'en-US') {
    this.replaceChineseWithEnglish();
  }
  this.$forceUpdate();
    const language = this.$i18n.locale;
    console.log(language);
    if (language === "en-US") {
      this.replaceChineseWithEnglish();
    }
    this.$forceUpdate();
  },
    computed: {
},
  computed: {},
  methods: {
    filteredData() {
    return this.jsonData.map(item => {
      const filteredValue = item.map(obj => {
        if (typeof obj.button !== 'undefined' && typeof obj.button.value !== 'undefined') {
          obj.button.value = obj.button.value.toString().replace(/[^a-zA-Z0-9]/g, '');
        } else if (typeof obj.value !== 'undefined') {
          obj.value = obj.value.toString().replace(/[^a-zA-Z0-9]/g, '');
        }
        return obj;
      return this.jsonData.map((item) => {
        const filteredValue = item.map((obj) => {
          if (
            typeof obj.button !== "undefined" &&
            typeof obj.button.value !== "undefined"
          ) {
            obj.button.value = obj.button.value
              .toString()
              .replace(/[^a-zA-Z0-9]/g, "");
          } else if (typeof obj.value !== "undefined") {
            obj.value = obj.value.toString().replace(/[^a-zA-Z0-9]/g, "");
          }
          return obj;
        });
        return filteredValue;
      });
      return filteredValue;
    });
  },
  updateButtonValue(dataGroup, itemIndex) {
  if (dataGroup[itemIndex].button.value === 0) {
    // 如果当前按钮的值是 0,将其设为 1
    this.$set(dataGroup[itemIndex].button, 'value', 1);
  } else {
    // 否则将其设为 0
    this.$set(dataGroup[itemIndex].button, 'value', 0);
  }
},
    },
    updateButtonValue(dataGroup, itemIndex) {
      if (dataGroup[itemIndex].button.value === 0) {
        // 如果当前按钮的值是 0,将其设为 1
        this.$set(dataGroup[itemIndex].button, "value", 1);
      } else {
        // 否则将其设为 0
        this.$set(dataGroup[itemIndex].button, "value", 0);
      }
    },
    submitDataToBackend(currentButtonName) {
      if (currentButtonName === "清除ID" || currentButtonName === "Clear ID") {
        const data2 = [];
        const resetButtonValues = this.jsonData
          .map((item) => {
            const buttonItem = item.find(
              (subItem) =>
                subItem.button &&
                ["清除ID", "Clear ID"].includes(subItem.button.name)
            );
            return buttonItem ? buttonItem.button.value : null;
          })
          .filter((value) => value !== null);
        // 将得到的值添加到 data 数组中
        data2.push(resetButtonValues.flat());
        data2.push([]);
        // 在 data2 数组前面添加两个空数组
  if (currentButtonName === '清除ID'  || currentButtonName === 'Clear ID' ) {
  const data2 = [];
  const resetButtonValues = this.jsonData.map(item => {
    const buttonItem = item.find(subItem => subItem.button && ['清除ID', 'Clear ID'].includes(subItem.button.name));
        // 创建 jsonObject2 对象,并添加 data2 属性
        const jsonObject2 = { data: data2 };
    return buttonItem ? buttonItem.button.value : null;
  }).filter(value => value !== null);
        // 提交数据到后端
        const jsonString2 = JSON.stringify(jsonObject2);
        console.log("所有Type为0的value:", jsonString2);
        socket?.send(jsonString2);
      }
  // 将得到的值添加到 data 数组中
  data2.push(resetButtonValues.flat());
  data2.push([]);
  // 在 data2 数组前面添加两个空数组
      if (
        currentButtonName === "Abort/ResumeTasks" ||
        currentButtonName === "急停后中止/继续选择"
      ) {
        const data3 = [];
        const resetButtonValues3 = [this.jsonData[13][0].button.value];
  // 创建 jsonObject2 对象,并添加 data2 属性
  const jsonObject2 = { data: data2 };
        // 将得到的值添加到 data 数组中
        data3.push(resetButtonValues3.flat());
        data3.unshift([]);
        // 在 data3 数组前面添加两个空数组
  // 提交数据到后端
  const jsonString2 = JSON.stringify(jsonObject2);
  console.log('所有Type为0的value:', jsonString2);
  socket?.send(jsonString2);
}
        // 创建 jsonObject3 对象,并添加 data3 属性
        const jsonObject3 = { data: data3 };
if (currentButtonName === 'Abort/ResumeTasks' || currentButtonName === '急停后中止/继续选择') {
  const data3 = [];
  const resetButtonValues3 = [this.jsonData[13][0].button.value];
  // 将得到的值添加到 data 数组中
  data3.push(resetButtonValues3.flat());
  data3.unshift([]);
  // 在 data3 数组前面添加两个空数组
  // 创建 jsonObject3 对象,并添加 data3 属性
  const jsonObject3 = { data: data3 };
  // 提交数据到后端
  const jsonString3 = JSON.stringify(jsonObject3);
  console.log('急停后中止/继续选择:', jsonString3);
  socket?.send(jsonString3);
  // setTimeout(()=>
  //   window.location.reload(),2000
  // )
}
},
    initWebSocket () {
        // 提交数据到后端
        const jsonString3 = JSON.stringify(jsonObject3);
        console.log("急停后中止/继续选择:", jsonString3);
        socket?.send(jsonString3);
        // setTimeout(()=>
        //   window.location.reload(),2000
        // )
      }
    },
    initWebSocket() {
      let viewname = "Parameter2";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + this.$t('ip')+":8888" + "/springboot-vue3/api/talk/" + viewname;
        let socketUrl =
          "ws://" +
          this.$t("ip") +
          ":8888" +
          "/springboot-vue3/api/talk/" +
          viewname;
        if (socket != null) {
          socket.close();
@@ -243,156 +348,138 @@
        // 收到消息
        socket.onmessage = (msg) => {
  if (!msg.data) {
    return; // 如果收到空数据,则直接返回,不执行后续逻辑
  }
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
  let obj = JSON.parse(msg.data);
  const jsonData2 = this.jsonData;
          let obj = JSON.parse(msg.data);
      const parms = obj.params;
          const jsonData2 = this.jsonData;
     console.log(obj);
          const parms = obj.params;
          console.log(obj);
          // const handleMouseMove = throttle(function(event) {
          // const inputBox = document.querySelectorAll('.id');
          // const target = event.target;
  // const handleMouseMove = throttle(function(event) {
  // const inputBox = document.querySelectorAll('.id');
  // const target = event.target;
          // if (parms && inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
          //急停按钮
          jsonData2[13][0].button.value = obj.jiting[0][0];
  // if (parms && inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
//急停按钮
    // jsonData2[13][0].button.value = obj.jiting[0][0];
          //清除id
    //清除id
      for (let i = 0; i < jsonData2.length; i++) {
  let arr = jsonData2[i];
  for (let j = 0; j < arr.length; j++) {
    let obj = arr[j];
    if (obj.type === '3') {
      obj.button.value = parms[0][i];
      // console.log(obj.button.value);
    }
  }
}
//ID
const specialChars = /[^\w\s]/g; // 正则表达式匹配非字母、数字、下划线和空格的字符
for (let i = 0; i < jsonData2.length; i++) {
  let arr = jsonData2[i];
  for (let j = 0; j < arr.length; j++) {
    let obj = arr[j];
    if (obj.type === '0') {
  if (parms[1] && parms[1][i]) {
    obj.value = parms[1][i].replace(specialChars, '');
    // console.log(obj.value);
  }
  if (obj.name === 'ID2') {
        obj.value = parms[1][7].replace(specialChars, ''); // 将ID2对应的值赋为parms[1][6]
      }
      if (obj.name === 'A02ID') {
        obj.value = parms[1][8].replace(specialChars, ''); // 将ID2对应的值赋为parms[1][6]
      }
      if (obj.name === 'B01ID') {
        obj.value = parms[1][9].replace(specialChars, ''); // 将ID2对应的值赋为parms[1][6]
      }
      if (obj.name === 'B02ID') {
        obj.value = parms[1][10].replace(specialChars, ''); // 将ID2对应的值赋为parms[1][6]
      }
}
  }
}
//手动状态
for (let i = 0; i < jsonData2.length; i++) {
  let arr = jsonData2[i];
  for (let j = 0; j < arr.length; j++) {
    let obj = arr[j];
    if (obj.type === '4') {
      obj.button.value = parms[2][i];
    }
  }
}
//改变状态文字
for (let i = 0; i < jsonData2.length; i++) {
  let arr = jsonData2[i];
  for (let j = 0; j < arr.length; j++) {
    let obj = arr[j];
    if (obj.type === '4' && obj.button.value===1) {
      if ( obj.button.name.includes("状态")&& this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("手动","自动") ;
    }
    if ( obj.button.name.includes("Status")) {
      obj.button.name =obj.button.name.replace("Manual","Auto") ;
    }
  }
}
}
//扫描枪扫码的ID
jsonData2.forEach((item) => {
  item.forEach((subItem) => {
    if (subItem.read === 66) {
      subItem.value = parms[3][0].replace(specialChars, '');
    }
  });
});
jsonData2.forEach((item) => {
  item.forEach((subItem) => {
    if (subItem.read === 666) {
      subItem.value = parms[3][1].replace(specialChars, '');
    }
  });
});
//A01当前格子
let lastParmsArray = parms[parms.length - 1];
let lastParmsIndex = 0;
for (let i = 0; i < jsonData2.length; i++) {
    for (let j = 0; j < jsonData2[i].length; j++) {
        if (jsonData2[i][j].read === 333) {
            jsonData2[i][j].value = lastParmsArray[lastParmsIndex];
            lastParmsIndex++;
            if (lastParmsIndex === lastParmsArray.length) {
                lastParmsIndex = 0;
          for (let i = 0; i < jsonData2.length; i++) {
            let arr = jsonData2[i];
            for (let j = 0; j < arr.length; j++) {
              let obj = arr[j];
              if (obj.type === "3") {
                obj.button.value = parms[0][i];
                // console.log(obj.button.value);
              }
            }
        }
    }
}
          }
          //ID
          const specialChars = /[^\w\s]/g; // 正则表达式匹配非字母、数字、下划线和空格的字符
          for (let i = 0; i < jsonData2.length; i++) {
            let arr = jsonData2[i];
            for (let j = 0; j < arr.length; j++) {
              let obj = arr[j];
              if (obj.type === "0") {
                if (parms[1] && parms[1][i]) {
                  obj.value = parms[1][i].replace(specialChars, "");
                  // console.log(obj.value);
                }
                if (obj.name === "ID2") {
                  obj.value = parms[1][7].replace(specialChars, ""); // 将ID2对应的值赋为parms[1][7]
                }
  }
//  console.log(jsonData2);
// }, 50);
// document.addEventListener('mouseover', handleMouseMove);
// };
                if (obj.name === "A02ID") {
                  obj.value = parms[1][8].replace(specialChars, "");
                }
                if (obj.name === "B01ID") {
                  obj.value = parms[1][9].replace(specialChars, "");
                }
                if (obj.name === "B02ID") {
                  obj.value = parms[1][10].replace(specialChars, "");
                }
              }
            }
          }
          //手动状态
          for (let i = 0; i < jsonData2.length; i++) {
            let arr = jsonData2[i];
            for (let j = 0; j < arr.length; j++) {
              let obj = arr[j];
              if (obj.type === "4") {
                obj.button.value = parms[2][i];
              }
            }
          }
          //改变状态文字
          for (let i = 0; i < jsonData2.length; i++) {
            let arr = jsonData2[i];
            for (let j = 0; j < arr.length; j++) {
              let obj = arr[j];
              if (obj.type === "4" && obj.button.value === 1) {
                if (
                  obj.button.name.includes("状态") &&
                  this.language === "zh-CN"
                ) {
                  obj.button.name = obj.button.name.replace("手动", "自动");
                }
                if (obj.button.name.includes("Status")) {
                  obj.button.name = obj.button.name.replace("Manual", "Auto");
                }
              }
            }
          }
          //扫描枪扫码的ID
          jsonData2.forEach((item) => {
            item.forEach((subItem) => {
              if (subItem.read === 66) {
                subItem.value = parms[3][0].replace(specialChars, "");
              }
            });
          });
          jsonData2.forEach((item) => {
            item.forEach((subItem) => {
              if (subItem.read === 666) {
                subItem.value = parms[3][1].replace(specialChars, "");
              }
            });
          });
          //A01当前格子
          let lastParmsArray = parms[parms.length - 1];
          let lastParmsIndex = 0;
          for (let i = 0; i < jsonData2.length; i++) {
            for (let j = 0; j < jsonData2[i].length; j++) {
              if (jsonData2[i][j].read === 333) {
                jsonData2[i][j].value = lastParmsArray[lastParmsIndex];
                lastParmsIndex++;
                if (lastParmsIndex === lastParmsArray.length) {
                  lastParmsIndex = 0;
                }
              }
            }
          }
        };
        //  console.log(jsonData2);
        // }, 50);
        // document.addEventListener('mouseover', handleMouseMove);
        // };
        // 关闭事件
        socket.onclose = function () {
@@ -403,62 +490,55 @@
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
        this.$router.afterEach(function(){
          socket.close();
        })
        this.$router.afterEach(function () {
          socket.close();
        });
      }
    },
    replaceChineseWithEnglish() {
 const nameMap=  this.$t('langParameter2')
 this.jsonData = this.jsonData.map((item) => {
return item.map((obj) => {
if (obj.name) {
 const newName = nameMap[obj.name] || obj.name;
 return { ...obj, name: newName };
} else if (obj.button && obj.button.name) {
 const newName = nameMap[obj.button.name] || obj.button.name;
 return { ...obj, button: { ...obj.button, name: newName } };
} else {
 return obj;
}
});
});
      const nameMap = this.$t("langParameter2");
      this.jsonData = this.jsonData.map((item) => {
        return item.map((obj) => {
          if (obj.name) {
            const newName = nameMap[obj.name] || obj.name;
            return { ...obj, name: newName };
          } else if (obj.button && obj.button.name) {
            const newName = nameMap[obj.button.name] || obj.button.name;
            return { ...obj, button: { ...obj.button, name: newName } };
          } else {
            return obj;
          }
        });
      });
// console.log(this.jsonData)
},
    send () {
      // console.log(this.jsonData)
    },
    send() {
      socket?.send(JSON.stringify(this.messagepack));
    }
  }
  }
  </script>
    },
  },
};
</script>
  
  <style scoped>
  html,body{
width:100%;
height:85%;
html,
body {
  width: 100%;
  height: 85%;
}
  .item-row {
.item-row {
  display: flex;
  align-items: center;
  margin-bottom: 5px; /* 调整每个项目之间的间距 */
  }
  .action-button {
}
.action-button {
  margin-right: 30px;
  background: #66b1ff;
  color: #FFF;
  }
  .blue-button {
  color: #fff;
}
.blue-button {
  background-color: skyblue;
}
@@ -466,15 +546,14 @@
  background-color: green;
}
.red-button{
.red-button {
  background-color: red;
}
.yellow-button{
.yellow-button {
  background-color: blue;
}
.id{
.id {
  background-color: green;
}
  </style>
</style>
CanadaMes-ui/src/views/Electrical/Positioning1.vue
@@ -1,75 +1,151 @@
<template>
  <div class="app">
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/alarm" tag="el-button" type="text" active-class="blue-button">{{ $t('Alarm')
      }}</router-link>
      <router-link to="/Electrical/State" tag="el-button" type="text" active-class="blue-button">{{ $t('State')
      }}</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text" active-class="blue-button">{{ $t('Action')
      }}</router-link>
      <router-link
        to="/Electrical/alarm"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Alarm") }}</router-link
      >
      <router-link
        to="/Electrical/State"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("State") }}</router-link
      >
      <router-link
        to="/Electrical/Action"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Action") }}</router-link
      >
      <!-- <router-link to="/Electrical/Parameter" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter')
      }}</router-link> -->
      <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
      }}</router-link>
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('Parameter')
      }}</router-link>
      <router-link
        to="/Electrical/Sign"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Sign") }}</router-link
      >
      <router-link
        to="/Electrical/Servomanual"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Parameter") }}</router-link
      >
    </el-breadcrumb>
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Automatic State')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
      }}</router-link>
       <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link
        to="/Electrical/Parameter2"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Automatic State") }}</router-link
      >
      <router-link
        to="/Electrical/ManualJog"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("ManualJog") }}</router-link
      >
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <router-link
        to="/Electrical/ManualonePosition"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("ManualonePosition") }}</router-link
      >
      <router-link
        to="/Electrical/Servomanualone"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Servomanualone") }}</router-link
      >
      <!-- <router-link
        to="/Electrical/Parameter1"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Parameter1") }}</router-link
      > -->
      <router-link
        to="/Electrical/Positioning1"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Address parameter settings") }}</router-link
      >
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
      }}</router-link> -->
      <!-- <router-link
        to="/Electrical/ManualonePosition2"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("ManualonePosition2") }}</router-link
      > -->
      <router-link
        to="/Electrical/AutomaticParameterSetting"
        tag="el-button"
        type="text"
        active-class="blue-button"
        >{{ $t("Speed parameter settings") }}</router-link
      >
    </el-breadcrumb>
    <el-row :gutter="18" class='card'>
      <el-col :span="7" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
    <el-row :gutter="18" class="card">
      <el-col
        :span="7"
        v-for="(dataGroup, groupIndex) in jsonData"
        :key="groupIndex"
      >
        <el-card class="json-block">
          <div class="button-row" style="display: flex; justify-content: space-between;">
          <div
            class="button-row"
            style="display: flex; justify-content: space-between"
          >
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <span v-if="item.title" :name="item.title.name" class="action-button">{{ item.title.name }}</span>
              <span
                v-if="item.title"
                :name="item.title.name"
                class="action-button"
                >{{ item.title.name }}</span
              >
            </div>
          </div>
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
          <div
            v-for="(item, itemIndex) in dataGroup"
            :key="itemIndex"
            class="item-container"
          >
            <div class="item-row">
              <span class="name" style="width:250px;">{{ item.name }}</span>
              <el-input v-if="item.type === '0'" v-model="item.value" class="input-box"      @keyup.enter.native="submitDataToBackend" ></el-input>
              <span v-if="item.unit" :name="item.unit" >{{ item.unit }}</span>
              <span class="name" style="width: 250px">{{ item.name }}</span>
              <el-input
                v-if="item.type === '0'"
                v-model="item.value"
                class="input-box"
                @keyup.enter.native="submitDataToBackend"
              ></el-input>
              <span v-if="item.unit" :name="item.unit">{{ item.unit }}</span>
              <!-- <el-button
                v-if="item.type === '0' && item.name !== '格子间距' && item.name !== '出片接片地址' && item.name !== '存片接片地址'"
                class="input-box" @click="submitDataToBackend();">取地址</el-button> -->
            </div>
          </div>
        </el-card>
      </el-col>
    </el-row>
@@ -79,36 +155,35 @@
  
<script>
let socket;
import LanguageMixin from '../../lang/LanguageMixin'
import data from '../../configuration/Positioning1'
import LanguageMixin from "../../lang/LanguageMixin";
import data from "../../configuration/Positioning1";
export default {
  name: "Positioning1",
  mixins: [LanguageMixin],
  data () {
  data() {
    return {
      jsonData: data // 加载整个data.json文件作为jsonData
    }
      jsonData: data, // 加载整个data.json文件作为jsonData
    };
  },
  activated(){
   this.initWebSocket ();
   const language = this.$i18n.locale;
  console.log(language);
  if (language === 'en-US') {
    this.replaceChineseWithEnglish();
  }
  this.$forceUpdate();
 },
  activated() {
    this.initWebSocket();
    const language = this.$i18n.locale;
    console.log(language);
    if (language === "en-US") {
      this.replaceChineseWithEnglish();
    }
    this.$forceUpdate();
  },
  methods: {
    updateButtonValue (dataGroup, itemIndex) {
      this.$set(dataGroup[itemIndex].button, 'value', 1); // 点击按钮后将值改为1
    updateButtonValue(dataGroup, itemIndex) {
      this.$set(dataGroup[itemIndex].button, "value", 1); // 点击按钮后将值改为1
    },
    //提交数据到后端
    submitDataToBackend () {
      const inputData = this.jsonData.map(dataGroup => {
        return dataGroup.map(item => {
          if (item.type === '0') {
    submitDataToBackend() {
      const inputData = this.jsonData.map((dataGroup) => {
        return dataGroup.map((item) => {
          if (item.type === "0") {
            return { value: parseInt(item.value) };
          } else if (item.button) {
            return { value: parseInt(item.title.value) };
@@ -118,8 +193,8 @@
      });
      // 将inputData转换为整数数组
      const integerArray = inputData.map(dataGroup => {
        return dataGroup.map(item => {
      const integerArray = inputData.map((dataGroup) => {
        return dataGroup.map((item) => {
          if (item !== null) {
            return item.value;
          }
@@ -134,14 +209,18 @@
      // console.log('提交以下数据到后端:', jsonString);
      socket?.send(jsonString);
    },
    initWebSocket () {
    initWebSocket() {
      let viewname = "Positioning1";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + this.$t('ip')+":8888" + "/springboot-vue3/api/talk/" + viewname;
        let socketUrl =
          "ws://" +
          this.$t("ip") +
          ":8888" +
          "/springboot-vue3/api/talk/" +
          viewname;
        if (socket != null) {
          socket.close();
@@ -164,41 +243,39 @@
          let obj = JSON.parse(msg.data);
          const jsonData2 = this.jsonData;
          document.addEventListener('mouseover', function (event) {
            const inputBox = document.querySelectorAll('.el-card__body');
          document.addEventListener("mouseover", function (event) {
            const inputBox = document.querySelectorAll(".input-box");
            const target = event.target;
            const parms = obj.params;
            if (parms && inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
            if (
              parms &&
              inputBox &&
              Array.from(inputBox).every((box) => !box.contains(target))
            ) {
              // 如果鼠标不在输入框内,更新输入框的值
              // this.submitDataToBackend()
              // console.log(parms)
              // console.log(parms)
              let index = 0;
              for (let i = 0; i < jsonData2.length; i++) {
                let arr = jsonData2[i];
                for (let j = 0; j < arr.length; j++) {
                  let obj = arr[j];
                  if (obj.type === '0' && Object.prototype.hasOwnProperty.call(obj, 'value')) {
                  if (
                    obj.type === "0" &&
                    Object.prototype.hasOwnProperty.call(obj, "value")
                  ) {
                    obj.value = parms[0][index];
                    index++;
                  }
                }
              }
              // console.log(jsonData2);
            }
          });
        };
        // 关闭事件
        socket.onclose = function () {
@@ -209,46 +286,38 @@
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
        this.$router.afterEach(function(){
        this.$router.afterEach(function () {
          socket.close();
        })
        });
      }
    },
    //语言替换
    replaceChineseWithEnglish() {
 const nameMap=  this.$t('langPositioning1')
 this.jsonData = this.jsonData.map((item) => {
  return item.map((obj) => {
    if (obj.name) {
      const newName = nameMap[obj.name] || obj.name;
      return { ...obj, name: newName };
    } else if (obj.button && obj.button.name) {
      const newName = nameMap[obj.button.name] || obj.button.name;
      return { ...obj, button: { ...obj.button, name: newName } };
    } else if (obj.title && obj.title.name) {
      const newName = nameMap[obj.title.name] || obj.title.name;
      return { ...obj, title: { ...obj.title, name: newName } };
    } else {
      return obj;
    }
  });
});
      const nameMap = this.$t("langPositioning1");
      this.jsonData = this.jsonData.map((item) => {
        return item.map((obj) => {
          if (obj.name) {
            const newName = nameMap[obj.name] || obj.name;
            return { ...obj, name: newName };
          } else if (obj.button && obj.button.name) {
            const newName = nameMap[obj.button.name] || obj.button.name;
            return { ...obj, button: { ...obj.button, name: newName } };
          } else if (obj.title && obj.title.name) {
            const newName = nameMap[obj.title.name] || obj.title.name;
            return { ...obj, title: { ...obj.title, name: newName } };
          } else {
            return obj;
          }
        });
      });
// console.log(this.jsonData)
},
    send () {
      // console.log(this.jsonData)
    },
    send() {
      socket?.send(JSON.stringify(this.messagepack));
    },
  }
}
  },
};
</script>
  
<style scoped>
@@ -262,7 +331,7 @@
.action-button {
  margin-right: 30px;
  background: #66b1ff;
  color: #FFF;
  color: #fff;
}
.blue-button {
CanadaMes-ui/src/views/Electrical/Positioning2.vue
@@ -30,19 +30,19 @@
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
<!--
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
CanadaMes-ui/src/views/Electrical/ServoManualone.vue
@@ -29,19 +29,19 @@
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
@@ -56,15 +56,18 @@
          <div class="item-container">
            <div class="item-row">
              <span class="name" style='width:230px;'>{{ item.name }}</span>
              <el-input v-if="item.type === '0'" v-model="item.value"   class='input-box' :class="{ 'special-class': groupIndex === 0,'special-class2': groupIndex === 1 }" v-show="groupIndex !== 0 && groupIndex !== 1"  ></el-input>
              <el-input v-if="item.type === '0' && groupIndex === 0" v-model="item.value"  @keyup.enter.native="zuhe1"  class='input-box' :class="{ 'special-class': groupIndex === 0,'special-class2': groupIndex === 1 }" v-show="groupIndex !== 0 && groupIndex !== 1"  ></el-input>
              <el-input v-else-if="item.type === '0' && groupIndex === 1" v-model="item.value"  @keyup.enter.native="zuhe2"  class='input-box' :class="{ 'special-class': groupIndex === 0,'special-class2': groupIndex === 1 }" v-show="groupIndex !== 0 && groupIndex !== 1"  ></el-input>
              <el-input v-else-if="item.type === '0' " v-model="item.value"   class='input-box' :class="{ 'special-class': groupIndex === 0,'special-class2': groupIndex === 1 }" v-show="groupIndex !== 0 && groupIndex !== 1"  ></el-input>
            </div>
          </div>
        </el-col>
      </el-row>
      <div class="button-row" style="display: flex; justify-content: space-between;">
        <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
          <el-button v-if="item.button && language === 'en-US' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === 'Fault' && item.button.value === 1,'error-button2': item.button.name === 'NotZero' && item.button.value === 0,'error-button3': item.button.name === 'NotZero' && item.button.value === 1,'fuwei': item.button.name === 'Reset' && item.button.value === 1,'huiling': item.button.name === 'Home' && item.button.value === 1,'qidong': item.button.name === 'A01 Semi-Auto' && item.button.value === 1,'qidong2': item.button.name === 'A02 Semi-Auto' && item.button.value === 1,'qidong3': item.button.name === 'A01 Semi-Auto Start' && item.button.value === 1,'qidong4': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'qidong5': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'jiting': item.button.name === 'Abort/ResumeTasks' && item.button.value === 1}" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
          <el-button v-if="item.button && language === 'zh-CN' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1,'error-button3': item.button.name === '未回零' && item.button.value === 1,'error-button2': item.button.name === '未回零' && item.button.value === 0,'fuwei': item.button.name === '复位' && item.button.value === 1,'huiling': item.button.name === '回零' && item.button.value === 1,'qidong': item.button.name === 'A01半自动' && item.button.value === 1,'qidong2': item.button.name === 'A02半自动' && item.button.value === 1,'qidong3': item.button.name === 'A01半自动启动' && item.button.value === 1,'qidong4': item.button.name === 'A02半自动启动' && item.button.value === 1,'qidong5': item.button.name === 'A02半自动' && item.button.value === 1,'jiting': item.button.name === '急停后中止/继续选择' && item.button.value === 1  }" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
          <el-button v-if="item.button && language === 'en-US' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === 'Fault' && item.button.value === 1,'error-button2': item.button.name === 'NotZero' && item.button.value === 0,'error-button3': item.button.name === 'NotZero' && item.button.value === 1,'fuwei': item.button.name === 'Reset' && item.button.value === 1,'huiling': item.button.name === 'Home' && item.button.value === 1,'qidong': item.button.name === 'A01 Semi-Auto' && item.button.value === 1,'qidong2': item.button.name === 'A02 Semi-Auto' && item.button.value === 1,'qidong3': item.button.name === 'A01 Semi-Auto Start' && item.button.value === 1,'qidong4': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'qidong5': item.button.name === 'A02 Semi-Auto' && item.button.value === 1,'jiting': item.button.name === 'Abort/ResumeTasks' && item.button.value === 1,'yihuiling': item.button.name === 'Zero' && item.button.value === 1}" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
          <el-button v-if="item.button && language === 'zh-CN' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1,'error-button3': item.button.name === '未回零' && item.button.value === 1,'error-button2': item.button.name === '未回零' && item.button.value === 0,'fuwei': item.button.name === '复位' && item.button.value === 1,'huiling': item.button.name === '回零' && item.button.value === 1,'qidong': item.button.name === 'A01半自动' && item.button.value === 1,'qidong2': item.button.name === 'A02半自动' && item.button.value === 1,'qidong3': item.button.name === 'A01半自动启动' && item.button.value === 1,'qidong4': item.button.name === 'A02半自动启动' && item.button.value === 1,'qidong5': item.button.name === 'A02半自动' && item.button.value === 1,'jiting': item.button.name === '急停后中止/继续选择' && item.button.value === 1,'yihuiling': item.button.name === '已回零' && item.button.value === 1  }" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
        </div>
      </div>
    </el-card>
@@ -127,11 +130,9 @@
    this.$set(dataGroup[itemIndex].button, 'value', 1);
  }
},
submitDataToBackend(currentButtonName) {
zuhe1(){
//A01半自动启动提交
  if (currentButtonName === 'A01半自动启动' ||currentButtonName === 'A01 Semi-Auto Start') {
    const data = [];
  const data = [];
for (let i = 0; i < 1; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0' && item.read !== 9999).map(item => {
@@ -167,11 +168,10 @@
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
  }
  //A02半自动启动 提交
},
zuhe2(){
  if (currentButtonName === 'A02半自动启动' ||currentButtonName === 'A02 Semi-Auto Start') {
    const data2 = [];
  const data2 = [];
for (let i = 1; i < 2; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0' && item.read !== 8888).map(item => {
@@ -198,6 +198,53 @@
  data2.push( [],[], []);
 
}
const jsonObject = { data:data2 };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
},
submitDataToBackend(currentButtonName) {
//A01半自动启动提交
  if (currentButtonName === 'A01半自动启动' ||currentButtonName === 'A01 Semi-Auto Start') {
    const data = [];
  const values = [this.jsonData[0][10].button.value]
  data.push(values);
data.unshift([], [],[],[], [],[],[], []);
const jsonObject = { data };
// 提交数据到后端
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
  }
  //A02半自动启动 提交
  if (currentButtonName === 'A02半自动启动' ||currentButtonName === 'A02 Semi-Auto Start') {
    const data2 = [];
    const values2 = [this.jsonData[1][8].button.value]
  data2.push(values2);
  data2.unshift([],[], [],[],[], [],[],[], []);
const jsonObject = { data:data2 };
@@ -267,32 +314,7 @@
  // )
}
// if (currentButtonName === 'Abort/ResumeTasks' || currentButtonName === '急停后中止/继续选择') {
//   const data3 = [];
//   const resetButtonValues3 = this.jsonData.map(item => {
//     const buttonItem3 = item.find(subItem => subItem.button && ['Abort/resumeTasks', '急停后中止/继续选择'].includes(subItem.button.name));
//     return buttonItem3 ? buttonItem3.button.value : null;
//   }).filter(value => value !== null);
//   // 将得到的值添加到 data 数组中
//   data3.push(resetButtonValues3.flat());
//   // 在 data3 数组前面添加两个空数组
//   data3.push([], [], [],[], [], [], [],[]);
//   // 创建 jsonObject3 对象,并添加 data3 属性
//   const jsonObject3 = { data: data3 };
//   // 提交数据到后端
//   const jsonString3 = JSON.stringify(jsonObject3);
//   console.log('急停后中止/继续选择:', jsonString3);
//   socket?.send(jsonString3);
//   // setTimeout(()=>
//   //   window.location.reload(),2000
//   // )
// }
//A01半自动提交
@@ -468,7 +490,7 @@
  }
  let obj = JSON.parse(msg.data);
  //  console.log(obj)
   console.log(obj)
const weihuiling=obj.weihuiling;
  const jsonData2 = this.jsonData;
@@ -518,6 +540,9 @@
}, 50);
  document.addEventListener('mouseover', handleMouseMove);
  if (obj.qidong){
@@ -570,24 +595,44 @@
// }
// console.log(jsonData2[5][4].button.value)
if(jsonData2[2][3].button.value===1){
if(jsonData2[2][3].button.value===1 &&  (jsonData2[2][3].button.name==="NotZero" ||jsonData2[2][3].button.name==="未回零")){
  jsonData2[2][3].button.name=jsonData2[2][3].button.name.replace("未回零","已回零") ;
  jsonData2[2][3].button.name=jsonData2[2][3].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[3][3].button.value===1){
if(jsonData2[3][3].button.value===1 &&  (jsonData2[3][3].button.name==="NotZero" ||jsonData2[3][3].button.name==="未回零")){
  jsonData2[3][3].button.name=jsonData2[3][3].button.name.replace("未回零","已回零") ;
  jsonData2[3][3].button.name=jsonData2[3][3].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[4][4].button.value===1){
if(jsonData2[4][4].button.value===1 &&  (jsonData2[4][4].button.name==="NotZero" ||jsonData2[4][4].button.name==="未回零")){
  jsonData2[4][4].button.name=jsonData2[4][4].button.name.replace("未回零","已回零") ;
  jsonData2[4][4].button.name=jsonData2[4][4].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[5][4].button.value===1){
if(jsonData2[5][4].button.value===1 &&  (jsonData2[5][4].button.name==="NotZero" ||jsonData2[5][4].button.name==="未回零")){
  jsonData2[5][4].button.name=jsonData2[5][4].button.name.replace("未回零","已回零") ;
  jsonData2[5][4].button.name=jsonData2[5][4].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[2][3].button.value===0 && (jsonData2[2][3].button.name==="Zero" ||jsonData2[2][3].button.name==="已回零")){
  jsonData2[2][3].button.name=jsonData2[2][3].button.name.replace("已回零","未回零") ;
  jsonData2[2][3].button.name=jsonData2[2][3].button.name.replace("Zero","NotZero") ;
}
if(jsonData2[3][3].button.value===0 && (jsonData2[3][3].button.name==="Zero" ||jsonData2[3][3].button.name==="已回零")){
  jsonData2[3][3].button.name=jsonData2[3][3].button.name.replace("已回零","未回零") ;
  jsonData2[3][3].button.name=jsonData2[3][3].button.name.replace("Zero","NotZero") ;
}
if(jsonData2[4][4].button.value===0 && (jsonData2[4][4].button.name==="Zero" ||jsonData2[4][4].button.name==="已回零")){
  jsonData2[4][4].button.name=jsonData2[4][4].button.name.replace("已回零","未回零") ;
  jsonData2[4][4].button.name=jsonData2[4][4].button.name.replace("Zero","NotZero") ;
}
if(jsonData2[5][4].button.value===0  && (jsonData2[5][4].button.name==="Zero" ||jsonData2[5][4].button.name==="已回零")){
  jsonData2[5][4].button.name=jsonData2[5][4].button.name.replace("已回零","未回零") ;
  jsonData2[5][4].button.name=jsonData2[5][4].button.name.replace("Zero","NotZero") ;
}
}
   
};
@@ -709,4 +754,9 @@
  background-color: green;
}
.yihuiling{
  background-color: green;
}
</style>
CanadaMes-ui/src/views/Electrical/Servomanual.vue
@@ -31,19 +31,19 @@
<router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
      <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link>
      <!-- <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
      }}</router-link> -->
     
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Address parameter settings')
      }}</router-link>
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      }}</router-link> -->
     
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
      <!-- <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      }}</router-link> -->
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('Speed parameter settings')
      }}</router-link>
CanadaMes-ui/src/views/home/index.vue
@@ -419,11 +419,10 @@
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible2" :title="$t('Alarm Information')">
            <el-table :data="this.alarm" border style="width: 100%;">
            <el-table :data="this.alarm" border style="width: 100%;font-size: 25px;">
                <el-table-column prop="id" :label="$t('id')"></el-table-column>
                <el-table-column prop="content" :label="$t('content')"></el-table-column>
                <el-table-column prop="timeons" :label="$t('timeon')"></el-table-column>
                <el-table-column prop="endTime" :label="$t('endTime')"></el-table-column>
            </el-table>
        </el-dialog>
@@ -635,14 +634,14 @@
                this.isAllowReordering == true ? $t('Not Allow') : $t('Allow')
            }}</el-button>
            <el-table :data="this.OutSlice" :height="700" :span-method="objectSpanMethod" border :cell-style="cellStyle"
                style="width: 100%;overflow: auto;">
                style="width: 100%;overflow: auto;font-size: 18px;">
                <el-table-column :min-width="100" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column prop="storageCage.orderId" :label="$t('Order No')"></el-table-column>
                <el-table-column prop="storageCage.listId" :label="$t('List No')"></el-table-column>
                <el-table-column prop="storageCage.boxId" :label="$t('Box No')"></el-table-column>
                <el-table-column prop="storageCage.glasswidthmm" :label="$t('Length')"></el-table-column>
                <el-table-column prop="storageCage.glassheightmm" :label="$t('Width')"></el-table-column>
                <el-table-column prop="state" :label="$t('Glass State')">
                <el-table-column :min-width="90" prop="state" :label="$t('Glass State')">
                    <template slot-scope='scope'>
                        {{ scope.row.state == 0 ? $t('Waiting') : scope.row.state == 1 ? $t('Outing') : scope.row.state == 2 ? $t('Completed') :scope.row.state == 3 ? $t('Absent') :$t('Deleted') }}
                    </template>
@@ -728,6 +727,12 @@
                </el-table-column>
            </el-table>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormCountDown" :title="$t('Approximately resettable time')" top="5vh">
            <div style="font-size: 500px;text-align: center;">
                {{ this.CountDowns }}
            </div>
        </el-dialog>
    </el-container>
</template>
<script>
@@ -760,6 +765,7 @@
            dialogFormVisible5: false,
            dialogFormVisible6: false,
            dialogFormVisible7: false,
            dialogFormCountDown:false,
            form: {
                orderId: "",
                glassId: "",
@@ -820,11 +826,13 @@
            OutingQueue: true,
            OrderInfo: true,
            CageDetails: true,
            CountDowns:0,
            D01RequestState:false
        };
    },
    created() {
        this.load();
        this.init();
    }
    ,
@@ -839,7 +847,7 @@
                //console.log("您的浏览器支持WebSocket");
                let socketUrl = "ws://" + this.$t('ip') + ":8888" + "/springboot-vue3/api/talk/" + viewname;
                if (socket != null) {
                    socket.close();
                    socket.close();this.car1
                    socket = null;
                }
                // 开启一个websocket服务
@@ -853,6 +861,7 @@
                    //console.log("收到数据====" + msg.data);
                    let obj = JSON.parse(msg.data);
                    if (obj.params != null) {
                        this.car1 = 145 + 8.15 * Math.abs(obj.params[0][0] - this.carlist[0]['start']) / Math.abs(this.carlist[0]['end'] - this.carlist[0]['start']) * 100;
                        this.car2 = 210 + 8.15 * Math.abs(obj.params[0][1] - this.carlist[1]['start']) / Math.abs(this.carlist[1]['end'] - this.carlist[1]['start']) * 100;
                        // this.car1 = 210 + 11.25 * (obj.params[0][1]-this.carlist[1]['start'])/(this.carlist[1]['end']-this.carlist[1]['start'])*100;
@@ -866,9 +875,16 @@
                    this.tasklist1 = obj.tasklist1[0];
                    this.tasklist2 = obj.tasklist2[0];
                    this.alarm = obj.alarmmg[0];
                    //铝框id提示
                    if(this.alarm.length>0){
                        this.dialogFormVisible2=true;
                    }
                    //复位倒计时
                    if (obj.countdown[0] == true&&this.CountDowns==0) {
                        this.CountDown();
                    }
                    //是否有进片请求
                    this.D01RequestState=obj.D01RequestState[0];
                    //是否允许出片
                    this.isAllowQueue = obj.isAllowQueue[0];
                    //出片队列
@@ -901,8 +917,14 @@
                        this.loadglassheight1 = 70;
                        this.form5 = obj.form3[0];
                        this.showform3();
                        this.Sizerange(this.form5, 3);
                        this.glassid1 = "";
                        if(this.D01RequestState==true){
                            this.Sizerange(this.form5, 3);
                        }else{
                            this.disabled1=true;
                        }
                    } else {
                        if (this.glassid1 == "") {
                            this.DeleteBarcodeGlass();
@@ -1651,7 +1673,7 @@
        },
        //判断玻璃是否超出范围
        Sizerange(Glass, position) {
            if (this.ManuallyInfeedGlass == true) {
            if (this.ManuallyInfeedGlass == false) {
                if ((Glass.glassheight < 380 || Glass.glasswidth < 390 || Glass.glassheight > 1810 || Glass.glasswidth > 2760) || (Glass.glassheight < 390 || Glass.glasswidth < 380 || Glass.glassheight > 2760 || Glass.glasswidth > 1810)) {
                    this.$alert(this.$t('The glass size is not within the range'), this.$t('confirm'), {
                        confirmButtonText: this.$t('Yes'),
@@ -1676,7 +1698,7 @@
                    } else {
                        this.disabled = false;
                    }
                    if (position == 3 && this.isConfirmState == true) {
                    if (position == 3 && this.isConfirm == true&&this.D01RequestState==true) {
                        this.InsertQueueGlass(1);
                    }
                }
@@ -1693,6 +1715,25 @@
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        CountDown(){
            //50秒倒数计时
            let count = 45;
            let timer = setInterval(
                () => {
                    if (count > 0) {
                        this.CountDowns = count;
                        count--;
                    }
                    else {
                        clearInterval(timer);
                        this.CountDowns = 0;
                        this.dialogFormCountDown=false;
                    }
                },
                1000
            );
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java
@@ -10,89 +10,104 @@
public class MessageHandler {
    //写入byte
    public void outmesid(String glassid,String address) {
        //System.out.println("outmesid:" + glassid);
        List<Byte> glassidlist = new ArrayList();
        char ds[]=glassid.toCharArray();
        for (char iditem : ds) {
            glassidlist.add((byte)iditem);
        try {
            List<Byte> glassidlist = new ArrayList<>();
            char ds[]=glassid.toCharArray();
            for (char iditem : ds) {
                glassidlist.add((byte)iditem);
            }
            byte[] bytes = Bytes.toArray(glassidlist);
            System.out.println("outmesidbytes:" + bytes.length);
            S7control.getinstance().WriteByte(address, bytes);
        } catch (Exception e) {
            System.err.println("An error occurred while writing byte to PLC: " + e.getMessage());
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(address, bytes);
    }
    //写入bit
    public void writeBitToPLC( JSONArray messageArray,List<String> addresses, int index) {
        if (messageArray.getJSONArray(index).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(index);
            List<Boolean> sValue = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
                Object value = jsonArray.get(i);
                if (value != null && !value.toString().equals("null")) {
                    try {
                        String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                        boolean val = "1".equals(cleanedValue.trim());
                        sValue.add(val);
                        System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                        // 如果无法解析为 boolean 类型,则忽略该部分
                        System.err.println("Could not parse value: " + value);
    public void writeBitToPLC(JSONArray messageArray, List<String> addresses, int index) {
        try {
            // 检查索引是否有效
            if (messageArray.getJSONArray(index).size() > 0) {
                // 获取消息数组
                JSONArray jsonArray = messageArray.getJSONArray(index);
                // 创建一个布尔值列表
                List<Boolean> sValue = new ArrayList<>();
                // 遍历消息数组
                for (int i = 0; i < jsonArray.size(); i++) {
                    // 获取消息数组中的值
                    Object value = jsonArray.get(i);
                    // 检查值是否有效
                    if (value != null && !value.toString().equals("null")) {
                        try {
                            // 移除非数字和数字字符
                            String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                            // 解析为布尔值
                            boolean val = "1".equals(cleanedValue.trim());
                            // 将布尔值添加到布尔值列表中
                            sValue.add(val);
                            System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                        } catch (NumberFormatException e) {
                            // 如果无法解析为 boolean 类型,则忽略该部分
                            System.err.println("Could not parse value: " + value);
                        }
                    }
                }
                // 检查布尔值列表是否为空
                if (!sValue.isEmpty()) {
                    // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                    S7control.getinstance().WriteBit(addresses, sValue);
                    System.out.println("Values " + sValue + " written to PLC at address " + addresses);
                }
            }
            if (!sValue.isEmpty()) {
                // 这里假设 S7control.getinstance().WriteBit 方法可以正确写入 sValue 到地址列表 addresses
              S7control.getinstance().WriteBit(addresses, sValue);
                System.out.println("Values " + sValue + " written to PLC at address " + addresses);
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
        }
    }
    //写入Word
    public void WriteWordToPLC( JSONArray messageArray,List<String> addresses, int index) {
        if (messageArray.getJSONArray(index).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(index);
            List<Short> sValues = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
                Object value = jsonArray.get(i);
                if (value != null && !value.toString().equals("null")) {
                    try {
                        String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                        short val = Short.parseShort(cleanedValue.trim());
                        sValues.add(val);
                        System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                        // 如果无法解析为 short 类型,则忽略该部分
                        System.err.println("Could not parse value: " + value);
    public void WriteWordToPLC(JSONArray messageArray, List<String> addresses, int index) {
        try {
            if (messageArray.getJSONArray(index).size() > 0) {
                JSONArray jsonArray = messageArray.getJSONArray(index);
                List<Short> sValues = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                    Object value = jsonArray.get(i);
                    if (value != null && !value.toString().equals("null")) {
                        try {
                            String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                            short val = Short.parseShort(cleanedValue.trim());
                            sValues.add(val);
                            System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                        } catch (NumberFormatException e) {
                            System.err.println("Could not parse value: " + value);
                        }
                    }
                }
                if (!sValues.isEmpty()) {
                    S7control.getinstance().WriteWord(addresses, sValues);
                    System.out.println("Values " + sValues + " written to PLC at address " + addresses);
                }
            }
            if (!sValues.isEmpty()) {
                S7control.getinstance().WriteWord(addresses.get(index), sValues);
                System.out.println("Values " + sValues + " written to PLC at address " + addresses.get(index));
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing word to PLC: " + e.getMessage());
        }
    }
//写入String
    public void writeStringToPLC( JSONArray messageArray, String addresses,int index) {
        if (messageArray.getJSONArray(index).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(index);
            if (!jsonArray.isEmpty()) {
                String value = (String) jsonArray.get(0);
                outmesid(value.trim(), addresses);
                System.out.println("Value " + value + " written to PLC at address " + addresses);
    //写入String
    public void writeStringToPLC(JSONArray messageArray, String addresses, int index) {
        try {
            if (messageArray.getJSONArray(index).size() > 0) {
                JSONArray jsonArray = messageArray.getJSONArray(index);
                if (!jsonArray.isEmpty()) {
                    String value = (String) jsonArray.get(0);
                    outmesid(value.trim(), addresses);
                    System.out.println("Value " + value + " written to PLC at address " + addresses);
                }
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing string to PLC: " + e.getMessage());
        }
    }
}
}
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java
@@ -75,14 +75,40 @@
      List<Short> dache1 = S7control.getinstance().ReadWord("DB100.18", 1);
      List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.22", 1);
      List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.14", 1);
      // Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
      // Short[] fanzhuan = { 4 };
      // List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
      // Short[] dache = { 5 };
      // List<Short> dache1 = new ArrayList<>(Arrays.asList(dache));
      // Short[] xiaoche = { 6 };
      // List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
      List<String> addresses = new ArrayList<>();
      addresses.add("DB100.0");
      addresses.add("DB100.2");
      addresses.add("DB100.4");
      addresses.add("DB100.6");
      addresses.add("DB100.26");
      addresses.add("DB100.28");
      addresses.add("DB100.30");
      addresses.add("DB100.32");
      addresses.add("DB100.34");
      addresses.add("DB100.36");
      addresses.add("DB100.38");
      addresses.add("DB100.40");
      List<Short> arraylist2 = S7control.getinstance().readWords(addresses);
//翻转
      List<Short> fanzhuan2 = S7control.getinstance().ReadWord("DB100.8", 1);
      List<Short> xiaoche2 = S7control.getinstance().ReadWord("DB100.12", 1);
//       Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
//       List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
//       Short[] fanzhuan = { 4 };
//       List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
//       Short[] dache = { 5 };
//       List<Short> dache1 = new ArrayList<>(Arrays.asList(dache));
//       Short[] xiaoche = { 6 };
//       List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
//
//       Short[] values2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
//       List<Short> arraylist2 = new ArrayList<>(Arrays.asList(values2));
//       Short[] fanzhuan22 = { 4 };
//       List<Short> fanzhuan2 = new ArrayList<>(Arrays.asList(fanzhuan22));
//       Short[] xiaoche22 = {5};
//       List<Short> xiaoche2 = new ArrayList<>(Arrays.asList(xiaoche22));
      JSONObject jsonObject = new JSONObject();
      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
@@ -92,111 +118,194 @@
      jsonObject.append("dache1", dache1);
      jsonObject.append("xiaoche", xiaoche1);
      jsonObject.append("fanzhuan", fanzhuan1);
//
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      jsonObject.append("params2", arraylist2);
      jsonObject.append("fanzhuan2", fanzhuan2);
      jsonObject.append("xiaoche2", xiaoche2);
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
      if (sendwServer != null) {
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
      if (webserver != null) {
        List<String> messages = webserver.getMessages();
        String addressList1 = "DB100.120";
        String addressList2 = "DB100.18";
        String addressList3 = "DB100.22";
        String addressList4 = "DB100.14";
          if (webserver != null) {
            List<String> messages = webserver.getMessages();
            String addressList1 = "DB100.120";
            String addressList2 = "DB100.18";
            String addressList3 = "DB100.22";
            String addressList4 = "DB100.14";
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为 short 类型的列表
          String lastMessage = messages.get(messages.size() - 1);
          // System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
            if (!messages.isEmpty()) {
              // 将最后一个消息转换为 short 类型的列表
              String lastMessage = messages.get(messages.size() - 1);
              // System.out.println("lastMessage:" + lastMessage);
              JSONArray messageArray = new JSONArray(lastMessage);
          // 整合第 1 到 2 个数组并去掉 null 元素
          List<Short> mergedList = new ArrayList<>();
          for (int i = 0; i < 2; i++) {
            JSONArray sublist = messageArray.getJSONArray(i);
            for (int j = 0; j < sublist.size(); j++) {
              Object value = sublist.get(j);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short sValue = Short.parseShort(cleanedValue.trim());
                  mergedList.add(sValue);
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
              // 整合第 1 到 2 个数组并去掉 null 元素
              List<Short> mergedList = new ArrayList<>();
              for (int i = 0; i < 2; i++) {
                JSONArray sublist = messageArray.getJSONArray(i);
                for (int j = 0; j < sublist.size(); j++) {
                  Object value = sublist.get(j);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short sValue = Short.parseShort(cleanedValue.trim());
                      mergedList.add(sValue);
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
              }
            }
          }
          System.out.println(messageArray);
          // 写入第一个地址
          if (messageArray.getJSONArray(2).size() > 0) {
            Object value = messageArray.getJSONArray(2).get(0);
            if (value != null && !value.toString().equals("null")) {
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
                S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
                System.out
                        .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
              System.out.println(messageArray);
              // 写入第一个地址
              if (messageArray.getJSONArray(2).size() > 0) {
                Object value = messageArray.getJSONArray(2).get(0);
                if (value != null && !value.toString().equals("null")) {
                  try {
                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                    short sValue = Short.parseShort(cleanedValue.trim());
                    S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
                    System.out
                            .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
                  } catch (NumberFormatException e) {
                    // 如果无法解析为 short 类型,则忽略该部分
                    System.err.println("Could not parse value: " + value);
                  }
                }
              }
              // 写入第二个地址
              if (messageArray.getJSONArray(3).size() > 0) {
                Object value = messageArray.getJSONArray(3).get(0);
                if (value != null && !value.toString().equals("null")) {
                  try {
                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                    short sValue = Short.parseShort(cleanedValue.trim());
                    S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
                    System.out
                            .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
                  } catch (NumberFormatException e) {
                    // 如果无法解析为 short 类型,则忽略该部分
                    System.err.println("Could not parse value: " + value);
                  }
                }
              }
              // 写入第三个地址
              if (messageArray.getJSONArray(4).size() > 0) {
                Object value = messageArray.getJSONArray(4).get(0);
                if (value != null && !value.toString().equals("null")) {
                  try {
                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                    short sValue = Short.parseShort(cleanedValue.trim());
                    S7control.getinstance().WriteWord(addressList4, Arrays.asList(sValue));
                    System.out
                            .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList4);
                  } catch (NumberFormatException e) {
                    // 如果无法解析为 short 类型,则忽略该部分
                    System.err.println("Could not parse value: " + value);
                  }
                }
              }
              // 写入第四个地址
              if (!mergedList.isEmpty()) {
                S7control.getinstance().WriteWord(addressList1, mergedList);
                System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList1);
              }
              List<String> waddresses1 = new ArrayList<>();
              waddresses1.add("DB100.0");
              waddresses1.add("DB100.2");
              waddresses1.add("DB100.4");
              waddresses1.add("DB100.6");
              waddresses1.add("DB100.26");
              waddresses1.add("DB100.28");
              waddresses1.add("DB100.30");
              waddresses1.add("DB100.32");
              waddresses1.add("DB100.34");
              waddresses1.add("DB100.36");
              waddresses1.add("DB100.38");
              waddresses1.add("DB100.40");
              String addressList22 = "DB100.8";
              String addressList33 = "DB100.12";
              if (!messages.isEmpty()) {
                // 将最后一个消息转换为 short 类型的列表
                // 整合第 1 到 3 个数组并去掉 null 元素
                List<Short> mergedList2 = new ArrayList<>();
                for (int i = 5; i < 8; i++) {
                  JSONArray sublist = messageArray.getJSONArray(i);
                  for (int j = 0; j < sublist.size(); j++) {
                    Object value = sublist.get(j);
                    if (value != null && !value.toString().equals("null")) {
                      try {
                        String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                        short sValue = Short.parseShort(cleanedValue.trim());
                        mergedList2.add(sValue);
                      } catch (NumberFormatException e) {
                        // 如果无法解析为 short 类型,则忽略该部分
                        System.err.println("Could not parse value: " + value);
                      }
                    }
                  }
                }
                // 写入第伍个地址
                if (messageArray.getJSONArray(8).size() > 0) {
                  Object value = messageArray.getJSONArray(8).get(0);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short sValue = Short.parseShort(cleanedValue.trim());
                      S7control.getinstance().WriteWord(addressList22, Arrays.asList(sValue));
                      System.out
                              .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                // 写入第六个地址
                if (messageArray.getJSONArray(9).size() > 0) {
                  Object value = messageArray.getJSONArray(9).get(0);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short sValue = Short.parseShort(cleanedValue.trim());
                      S7control.getinstance().WriteWord(addressList33, Arrays.asList(sValue));
                      System.out
                              .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                // 写入第七个地址
                if (!mergedList2.isEmpty()) {
                  S7control.getinstance().WriteWord(waddresses1, mergedList2);
                  System.out.println("messageValue:" + mergedList2 + " written to PLC at address " + waddresses1);
                }
                // 清空消息列表
                webserver.clearMessages();
              }
            }
          }
          // 写入第二个地址
          if (messageArray.getJSONArray(3).size() > 0) {
            Object value = messageArray.getJSONArray(3).get(0);
            if (value != null && !value.toString().equals("null")) {
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
                S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
                System.out
                        .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
              }
            }
          }
          // 写入第三个地址
          if (messageArray.getJSONArray(4).size() > 0) {
            Object value = messageArray.getJSONArray(4).get(0);
            if (value != null && !value.toString().equals("null")) {
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
                S7control.getinstance().WriteWord(addressList4, Arrays.asList(sValue));
                System.out
                        .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList4);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
              }
            }
          }
          // 写入第四个地址
          if (!mergedList.isEmpty()) {
            S7control.getinstance().WriteWord(addressList1, mergedList);
            System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList1);
          }
          // 清空消息列表
          webserver.clearMessages();
        }
      }}
      }
    }
springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java
@@ -10,52 +10,21 @@
import java.util.List;
public class PLCManualJog extends Thread {
  String name = "";
  Integer count = 0;
  public static String readFileToString(String filePath) throws IOException {
    File file = new File(filePath);
    return FileUtils.readFileToString(file, "UTF-8");
  // 用于存储应用程序的配置信息
  private Configuration config;
  // 创建一个自定义的 S7 控制器消息处理器对象
  MessageHandler customS7Control = new MessageHandler();
  public PLCManualJog() throws IOException {
    config = new Configuration("config.properties");
  }
  public void readValue() {
    String str = "";
    BufferedReader bufferedReader = null;
    FileInputStream fileInputStream;
    try {
      // 从文件中读取字节数据存入 fileInputStream
      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
      // 读取 fileInputStream 中字节并将其解码为字符
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
      // 提高读取效率,在 BufferedReader 内包装 InputStreamReader
      bufferedReader = new BufferedReader(inputStreamReader);
      String line = null;
      // 将 bufferedReader 内容一行一行赋值给str
      while ((line = bufferedReader.readLine()) != null) {
        str += line;
      }
      // 将str字符串格式转为json
      JSONObject jsonObject = new JSONObject(str);
      // 获取json中的值
      JSONArray address = jsonObject.getJSONArray("address");
      for (int i = 0; i < address.size(); i++) {
        JSONObject ress = (JSONObject) address.get(i);
        this.name = ress.getStr("name");
        this.count = ress.getInt("count");
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  @Override
  public void run() {
@@ -72,36 +41,14 @@
      // System.out.println(stt);
      List<String> addressList0 = new ArrayList<>();
      addressList0.add("DB101.2.6");
      addressList0.add("DB101.2.7");
      addressList0.add("DB101.3.0");
      addressList0.add("DB101.3.1");
      addressList0.add("DB101.3.2");
      addressList0.add("DB101.3.3");
      addressList0.add("DB101.3.4");
      addressList0.add("DB101.3.5");
      List<String> addressList21 = new ArrayList<>();
      addressList21.add("DB101.0.0");
      addressList21.add("DB101.0.1");
      addressList21.add("DB101.0.2");
      addressList21.add("DB101.0.3");
      addressList21.add("DB101.0.4");
      addressList21.add("DB101.0.5");
      addressList21.add("DB101.0.6");
      addressList21.add("DB101.0.7");
      addressList21.add("DB101.1.0");
      addressList21.add("DB101.1.1");
      addressList21.add("DB101.1.2");
      addressList21.add("DB101.1.3");
      addressList21.add("DB101.1.4");
      addressList21.add("DB101.1.5");
      addressList21.add("DB101.1.6");
      addressList21.add("DB101.1.7");
      List<String> addressList21 = Arrays.asList(config.getProperty("PLCManualJog.button").split(","));
      List<Boolean> arraylist = S7control.getinstance().readBits(addressList21);
      List<Boolean> arraylist2 = S7control.getinstance().readBits(addressList0);
      List<Boolean> arraylist3 = S7control.getinstance().ReadBits("DB101.5.2", 2);
      // Boolean[] values1 = { false, true, true, true, false, false, true, false,
      // false, true, true, true, false, false,
      // true, false };
@@ -111,8 +58,7 @@
      // Boolean[] values3 = { false, false };
      // List<Boolean> arraylist3 = new ArrayList<>(Arrays.asList(values3));
      arraylist.addAll(arraylist2);
      arraylist.addAll(arraylist3);
      JSONObject jsonObject = new JSONObject();
@@ -138,43 +84,8 @@
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualJog");
          if (webserver != null) {
            //       String addressList1 = "DB101.0.0";
//        String addressList2 = "DB101.2.6";
            String addressList3 = "DB101.5.2";
            List<String> addressList2 = new ArrayList<>();
            addressList2.add("DB101.2.6");
            addressList2.add("DB101.2.7");
            addressList2.add("DB101.3.0");
            addressList2.add("DB101.3.1");
            addressList2.add("DB101.3.2");
            addressList2.add("DB101.3.3");
            addressList2.add("DB101.3.4");
            addressList2.add("DB101.3.5");
            List<String> addressList211 = new ArrayList<>();
            addressList211.add("DB101.0.0");
            addressList211.add("DB101.0.1");
            addressList211.add("DB101.0.2");
            addressList211.add("DB101.0.3");
            addressList211.add("DB101.0.4");
            addressList211.add("DB101.0.5");
            addressList211.add("DB101.0.6");
            addressList211.add("DB101.0.7");
            addressList211.add("DB101.1.0");
            addressList211.add("DB101.1.1");
            addressList211.add("DB101.1.2");
            addressList211.add("DB101.1.3");
            addressList211.add("DB101.1.4");
            addressList211.add("DB101.1.5");
            addressList211.add("DB101.1.6");
            addressList211.add("DB101.1.7");
            List<String> addressList311 = new ArrayList<>();
            addressList311.add("DB101.5.2");
            addressList311.add("DB101.5.3");
            List<String> messages = webserver.getMessages();
            if (!messages.isEmpty()) {
@@ -202,36 +113,18 @@
              }
              // System.out.println(messageBooleans);
              List<Boolean> bolList = new ArrayList<>();
              List<Boolean> bolList2 = new ArrayList<>();
              List<Boolean> bolList3 = new ArrayList<>();
              for (int i = 0; i < 16 && i < messageBooleans.size(); i++) {
              for (int i = 0; i < 26 && i < messageBooleans.size(); i++) {
                bolList.add(messageBooleans.get(i));
              }
              for (int i = 16; i < 24 && i < messageBooleans.size(); i++) {
                bolList2.add(messageBooleans.get(i));
              }
              for (int i = 24; i < 26 && i < messageBooleans.size(); i++) {
                bolList3.add(messageBooleans.get(i));
              }
              // System.out.println(bolList);
              // System.out.println(bolList2);
              // System.out.println(bolList3);
              if (!bolList.isEmpty()) {
                S7control.getinstance().WriteBit(addressList211, bolList);
                System.out.println("messageValue:" + bolList + " written to PLC at address " + addressList211);
                S7control.getinstance().WriteBit(addressList21, bolList);
                System.out.println("messageValue:" + bolList + " written to PLC at address " + addressList21);
              }
              if (!bolList2.isEmpty()) {
                S7control.getinstance().WriteBit(addressList2, bolList2);
                System.out.println("messageValue:" + bolList2 + " written to PLC at address " + addressList2);
              }
              if (!bolList3.isEmpty()) {
                S7control.getinstance().WriteBit(addressList311, bolList3);
                System.out.println("messageValue:" + bolList3 + " written to PLC at address " + addressList311);
              }
              webserver.clearMessages();
            }
          }
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -69,13 +69,11 @@
      // 获取DO2数据
      StringBuilder queueid2 = spianService.queGlassid("DB103.58", 14);
      int questate = spianMapper.Selectquecount(queueid1.toString());// 判断扫码位是否有玻璃已确认
      // queueid1.toString().isEmpty()
      north_glass_buffer1 glass1 = spianMapper.selectGlass(queueid1.toString());// D01的玻璃信息
      north_glass_buffer1 glass2 = spianMapper.selectGlass(queueid2.toString());// D02玻璃信息
      // 当扫码位玻璃id为空时 宽度为0
      if (queueid1 != null && questate == 0) {
        // 写入D01的数据到上片队列表
        if (glass1 == null) { // 当没有值时传空
@@ -83,8 +81,8 @@
        } else {
          spianMapper.Updatequeue(queueid1.toString(), glass1.getordernumber(), glass1.getlistnumber(),
              glass1.getboxnumber(), 0, glass1.getglasslengthmm().toString(), glass1.getglassheightmm().toString(),
              glass1.getglasslength().toString(), glass1.getglassheight().toString(), 1);
          glass1.getboxnumber(), 0, glass1.getglasslengthmm().toString(), glass1.getglassheightmm().toString(),
          glass1.getglasslength().toString(), glass1.getglassheight().toString(), 1);
        }
      }
@@ -94,8 +92,8 @@
          spianMapper.Updatequeue(null, null, null, null, 0, null, null, null, null, 2);
        } else {
          spianMapper.Updatequeue(queueid2.toString(), glass2.getordernumber(), glass2.getlistnumber(),
              glass2.getboxnumber(), 0, glass2.getglasslengthmm().toString(), glass2.getglassheightmm().toString(),
              glass2.getglasslength().toString(), glass2.getglassheight().toString(), 2);
          glass2.getboxnumber(), 0, glass2.getglasslengthmm().toString(), glass2.getglassheightmm().toString(),
          glass2.getglasslength().toString(), glass2.getglassheight().toString(), 2);
          spianMapper.overqueue2(queueid2.toString(), 0, 1);// 更改扫码位任务表的状态为0
          S7control.getinstance().WriteWord("DB105.16", (short) 0);// 关闭任务启动
        }
@@ -116,7 +114,7 @@
        outstate = outlist.contains((short) 0);// 出片车空闲判断 当出片车空闲时为true
        outstate1 = outlist1.contains((short) 1);// 出片车任务是否启动 当出片车任务启动时为true
        // 判断当前是否有未执行的任务
        int outnum = spianMapper.SelectOutSliceshu();
        // 当没有任务执行并且出片车空闲时
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
@@ -16,6 +16,14 @@
    config = new Configuration("config.properties");
  }
  // 创建一个自定义的 S7 控制器消息处理器对象
  MessageHandler customS7Control = new MessageHandler();
  public static class PLCBooleanConverter {
    public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) {
@@ -247,18 +255,6 @@
            }
            if (!sValue.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses1, sValue);
              if (A01readstart != null && !A01readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a01startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A01readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a01startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A01start, a01startval);
                System.out.println("a01startval " + a01startval + " written to PLC at address " + A01start);
              }
              System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
@@ -286,17 +282,7 @@
            }
            if (!sValue2.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses2, sValue2);
              if (A02readstart != null && !A02readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a02startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A02readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a02startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A02start, a02startval);
              }
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
@@ -323,17 +309,7 @@
            }
            if (!sValue2.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses3, sValue2);
              if (B01readstart != null && !B01readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> b01startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : B01readstart) {
                  // 取反当前位的值并添加到新的列表中
                  b01startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(B01start, b01startval);
              }
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses3);
            }
          }
@@ -358,18 +334,7 @@
            }
            if (!sValue2.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses4, sValue2);
              if (B02readstart != null && !B02readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> b02startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : B02readstart) {
                  // 取反当前位的值并添加到新的列表中
                  b02startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(B02start, b02startval);
                System.out.println("Values " + b02startval + " written to PLC at address " + B02start);
              }
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses4);
            }
          }
@@ -446,6 +411,11 @@
            }
          }
          customS7Control.writeBitToPLC( messageArray, A01start,7);
          customS7Control.writeBitToPLC( messageArray, A02start,8);
          customS7Control.writeBitToPLC( messageArray,B01start,9);
          customS7Control.writeBitToPLC( messageArray, B02start,10);
          // 清空消息列表
          webserver.clearMessages();
        }
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java
@@ -16,6 +16,8 @@
    config = new Configuration("config.properties");
  }
  MessageHandler customS7Control = new MessageHandler();
  public static class PLCBooleanConverter {
    public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) {
@@ -197,17 +199,7 @@
                }
                if (!sValue.isEmpty()) {
                  S7control.getinstance().WriteWord(waddresses1, sValue);
                  if (A01readstart != null && !A01readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a01startval = new ArrayList<>();
                    // 遍历所有读取到的位值
                    for (Boolean bit : A01readstart) {
                      // 取反当前位的值并添加到新的列表中
                      a01startval.add(!bit);
                    }
                    // 写入新的位值列表
                    S7control.getinstance().WriteBit(A01start, a01startval);
                  }
                  System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
                }
              }
@@ -232,17 +224,7 @@
                }
                if (!sValue2.isEmpty()) {
                  S7control.getinstance().WriteWord(waddresses2, sValue2);
                  if (A02readstart != null && !A02readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a02startval = new ArrayList<>();
                    // 遍历所有读取到的位值
                    for (Boolean bit : A02readstart) {
                      // 取反当前位的值并添加到新的列表中
                      a02startval.add(!bit);
                    }
                    // 写入新的位值列表
                    S7control.getinstance().WriteBit(A02start, a02startval);
                  }
                  System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
                }
              }
@@ -319,6 +301,10 @@
                }
              }
              customS7Control.writeBitToPLC( messageArray, A01start,5);
              customS7Control.writeBitToPLC( messageArray, A02start,6);
              // 清空消息列表
              webserver.clearMessages();
            }
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
@@ -69,7 +69,7 @@
        e.printStackTrace();
      }
   //    手动状态地址
     //  手动状态地址
      List<String> addressList1 = new ArrayList<>();
      addressList1.add("DB103.44");//D01
@@ -152,7 +152,7 @@
//
//      String[] values6 = { ".x1 ","x2 ","x3",";;x4","x5","x6","x7","x8","x9","x10","x11"};
//      List<String> paramlist = new ArrayList<>(Arrays.asList(values6));
//      Short[] values1 = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1};
@@ -172,7 +172,7 @@
        boolean value = data2.get(i);
        params[i] = value ? (short) 1 : (short) 0;
      }
//
      short[] anniuparams = new short[anniuread.size()];
      for (int i = 0; i < anniuread.size(); i++) {
        boolean value = anniuread.get(i);
@@ -184,94 +184,102 @@
      jsonObject.append("params", data);
      jsonObject.append("params", data3);
      jsonObject.append("params", data4);
      jsonObject.append("jiting", anniuparams);
     jsonObject.append("jiting", anniuparams);
//      WebSocketServer sendwServer = WebSocketServer.getWebSocketServer("Parameter2");
//      if (sendwServer != null) {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.set("message", "Hello, Parameter2!");
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter2");
 if (sendwServer != null) {
 for (WebSocketServer webserver : sendwServer) {
 webserver.sendMessage(jsonObject.toString());
     for (WebSocketServer webserver : sendwServer) {
         webserver.sendMessage(jsonObject.toString());
         if (webserver != null) {
        List<String> messages = webserver.getMessages();
        List<String> addressList = new ArrayList<>();
             List<String> messages = webserver.getMessages();
             List<String> addressList = new ArrayList<>();
        addressList.add("DB101.9.2");
        addressList.add("DB101.9.3");
        addressList.add("DB101.9.4");
        addressList.add("DB101.9.5");
        addressList.add("DB101.9.6");
        addressList.add("DB101.9.7");
        addressList.add("DB101.10.0");
        addressList.add("DB101.10.1");
        addressList.add("DB101.10.2");
        addressList.add("DB101.10.3");
             addressList.add("DB101.9.2");
             addressList.add("DB101.9.3");
             addressList.add("DB101.9.4");
             addressList.add("DB101.9.5");
             addressList.add("DB101.9.6");
             addressList.add("DB101.9.7");
             addressList.add("DB101.10.0");
             addressList.add("DB101.10.1");
             addressList.add("DB101.10.2");
             addressList.add("DB101.10.3");
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为整数类型的列表
          String lastMessage = messages.get(messages.size() - 1);
             if (!messages.isEmpty()) {
                 // 将最后一个消息转换为整数类型的列表
                 String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
                 JSONArray messageArray = new JSONArray(lastMessage);
          if (messageArray.getJSONArray(0).size() > 0) {
            JSONArray jsonArray3 = messageArray.getJSONArray(0);
            List<Boolean> sValue3 = new ArrayList<>();
            for (int i = 0; i < jsonArray3.size(); i++) {
              Object value = jsonArray3.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValue3.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!sValue3.isEmpty()) {
             S7control.getinstance().WriteBit(addressList, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
            }
          }
          // 将布尔列表写入 PLC
          if (messageArray.getJSONArray(1).size() > 0) {
            JSONArray jsonArray3 = messageArray.getJSONArray(1);
            List<Boolean> sValue3 = new ArrayList<>();
            for (int i = 0; i < jsonArray3.size(); i++) {
              Object value = jsonArray3.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValue3.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!sValue3.isEmpty()) {
            S7control.getinstance().WriteBit(niuanaddressList3, sValue3);
                 if (messageArray.getJSONArray(0).size() > 0) {
                     JSONArray jsonArray3 = messageArray.getJSONArray(0);
                     List<Boolean> sValue3 = new ArrayList<>();
                     for (int i = 0; i < jsonArray3.size(); i++) {
                         Object value = jsonArray3.get(i);
                         if (value != null && !value.toString().equals("null")) {
                             try {
                                 String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                                 boolean val = "1".equals(cleanedValue.trim());
                                 sValue3.add(val);
                                 System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                             } catch (NumberFormatException e) {
                                 // 如果无法解析为 boolean 类型,则忽略该部分
                                 System.err.println("Could not parse value: " + value);
                             }
                         }
                     }
                     if (!sValue3.isEmpty()) {
           S7control.getinstance().WriteBit(addressList, sValue3);
                         System.out.println("Values " + sValue3 + " written to PLC at address " + addressList);
                     }
                 }
                 // 将布尔列表写入 PLC
                 if (messageArray.getJSONArray(1).size() > 0) {
                     JSONArray jsonArray3 = messageArray.getJSONArray(1);
                     List<Boolean> sValue3 = new ArrayList<>();
                     for (int i = 0; i < jsonArray3.size(); i++) {
                         Object value = jsonArray3.get(i);
                         if (value != null && !value.toString().equals("null")) {
                             try {
                                 String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                                 boolean val = "1".equals(cleanedValue.trim());
                                 sValue3.add(val);
                                 System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                             } catch (NumberFormatException e) {
                                 // 如果无法解析为 boolean 类型,则忽略该部分
                                 System.err.println("Could not parse value: " + value);
                             }
                         }
                     }
                     if (!sValue3.isEmpty()) {
             S7control.getinstance().WriteBit(niuanaddressList3, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
            }
          }
                         System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
                     }
                 }
          // 清空消息列表
            webserver.clearMessages();
        }
      }
                 // 清空消息列表
                 webserver.clearMessages();
             }
         }
     }
 }
    }
      }
    }
  }
springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java
@@ -80,7 +80,7 @@
            // System.out.println(stt);
            //存片格  出片格读取
  List<Short> arraylist = S7control.getinstance().ReadWord("DB100.42", 23);
  List<Short> arraylist = S7control.getinstance().ReadWord("DB100.42", 33);
//            System.out.println(arraylist);
//            Short[] 存片 = { 1 };
//            List<Short> 存片1 = new ArrayList<>(Arrays.asList(存片));
@@ -122,7 +122,7 @@
                            // 整合第 1 到 3 个数组并去掉 null 元素
                            List<Short> mergedList = new ArrayList<>();
                            for (int i = 0; i < 5; i++) {
                            for (int i = 0; i < 7; i++) {
                                JSONArray sublist = messageArray.getJSONArray(i);
                                for (int j = 0; j < sublist.size(); j++) {
                                    Object value = sublist.get(j);
springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java
@@ -139,9 +139,10 @@
      List<Boolean> resumeTasks = S7control.getinstance().readBits(abortresumeTasks);
      short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray(
              A01readstart, A01readBstart, A02readstart, A02readsBtart
              A01readBstart, A01readstart,   A02readsBtart,A02readstart
      );
//      System.out.println(A01readBstart);
// 所有故障按钮转换为1和0
      short[] params2 = new short[arraylist7.size()];
@@ -255,34 +256,17 @@
              // 写入AO1组合
              customS7Control.WriteWordToPLC(messageArray, addresses,0);
              if (A01readstart != null && !A01readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a01startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A01readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a01startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A01start, a01startval);
              }
              //A01半自动启动
              customS7Control.writeBitToPLC( messageArray, A01start,8);
              // 写入AO2组合
              customS7Control.WriteWordToPLC(messageArray, addresses2,1);
              //A02半自动启动
              if (A02readstart != null && !A02readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a02startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A02readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a02startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A02start, a02startval);
              }
              customS7Control.writeBitToPLC( messageArray, A02start,9);
              // 复位按钮写入
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -1,6 +1,8 @@
package com.example.springboot.component;
import cn.hutool.json.JSONObject;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@@ -40,6 +42,7 @@
        while (this != null) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
@@ -71,26 +74,25 @@
            // 查询报警信息
            List<alarmmg> alarmmg = homeMapper.SelectAlarmmgInfo();
            jsonObject.append("alarmmg", alarmmg);
            // // 读去Plc进片车与出片车位置W
            // List<String> addressList = new ArrayList<String>();
            // addressList.add("DB106.12");
            // addressList.add("DB106.0");
            // List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
            // if (paramlist != null) {
            //     jsonObject.append("params", paramlist);
            // }
            // // 获取进片车状态
            // List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
            //         1);// 获取进片车状态
            // boolean exist1 = datas1ListState.contains((short) 0);
            // jsonObject.append("zhuangtai", exist1);
            // // 获取进片玻璃信息
            // List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
            // if (inglassInfo != null) {
            //     if (inglassInfo.size() > 0)
            //         jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
            // }
            // 读去Plc进片车与出片车位置W
            List<String> addressList = new ArrayList<String>();
            addressList.add("DB106.12");
            addressList.add("DB106.0");
            List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
            if (paramlist != null) {
                jsonObject.append("params", paramlist);
            }
            // 获取进片车状态
            List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
                    1);// 获取进片车状态
            boolean exist1 = datas1ListState.contains((short) 0);
            jsonObject.append("zhuangtai", exist1);
            // 获取进片玻璃信息
            List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
            if (inglassInfo != null) {
                if (inglassInfo.size() > 0)
                    jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
            }
            // 伍 获取进是否有待确认的玻璃id
            String queid = spianMapper.Selectqueueid();
            int state = spianMapper.Selectqueuestate();
@@ -107,17 +109,13 @@
            }
            // 获取出片队列信息
            List<Out_slice> listoutslice = outSliceServive.SelectProductionqueue();
            // List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
            // for (Out_slice out_slice : listoutslice) {
            // out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
            // }
            jsonObject.append("listoutslice", listoutslice);
            // 获取当前出片队列状态
            jsonObject.append("isAllowQueue", Plchome.isAllowQueue);
            // // 获取铝框idDB106.DBW64
            // String frameno=spianService.queGlassid("DB106.24",14).toString();
            // if(frameno!=Plchome.FrameNo){
            // 获取铝框idDB106.DBW64
            // String frameno=spianService.queGlassid("DB103.270",14).toString();
            // if(frameno!=Plchome.FrameNo&&frameno!=""){
            // Plchome.FrameNo=frameno;
            // }
            // try {
@@ -129,6 +127,19 @@
            // 是否需要人工确认上片玻璃
            jsonObject.append("isConfirm", isConfirm);
            //获取进片请求状态
            List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1);
            boolean D01RequestState = D01Request.contains((short) 1);
            // boolean D01RequestState =true;
            jsonObject.append("D01RequestState", D01RequestState);
            //复位倒计时
            // 地址104.9.6
            List<Boolean> countdown = S7control.getinstance().ReadBits("DB104.9.6", 1);
            for (Boolean countdowns : countdown) {
                jsonObject.append("countdown", countdowns);
            }
            // jsonObject.append("countdown", true);
            // 铝框线交互
            // //铝框id请求字
springboot-vue3/src/main/java/com/example/springboot/component/S7control.java
@@ -215,7 +215,7 @@
             return null;
        return s7PLC.readBoolean(addresslist);
    }
//读取不连续地址bit
    public List<Boolean> readBits(List<String> addressList) {
        if (s7PLC == null || addressList.isEmpty()) {
            return null;
@@ -230,7 +230,7 @@
        return values;
    }
//读取String
    public List<String> readStrings(List<String> addressList) {
        if (s7PLC == null) {
            return null;
@@ -264,7 +264,7 @@
        return result;
    }
//不连续地址写入Word
    public void WriteWord(List<String> address, List<Short> datas) {
        if (s7PLC == null)
            return;
@@ -283,7 +283,7 @@
    
    
    
//字符串写入
    public void outmesid(String data, String addr) {
//        System.out.println("outmesid: " + data);
        List<Byte> glassidlist = new ArrayList<>();
@@ -316,7 +316,7 @@
        return data;
    }
//读取时间
    public Long readtime(String address) {
        if (s7PLC==null)
            return null;
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -11,34 +11,31 @@
public class AppRunnerConfig implements ApplicationRunner {
  @Override
  public void run(ApplicationArguments args) throws Exception {
    // TODO Auto-generated method stub
    //
    System.out.println("启动完成");
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // TODO Auto-generated method stub
        //
        System.out.println("启动完成");
//new PlcHold().start();
//
    //
  new Plchome().start();
////    //
//      new PlcParameter().start();
//      //
//      new Plcalarm().start();
//      //
//      new Plcsign().start();
//      //
//      new Plcaction().start();
//      new Plcstate().start();
//      new PlcPositioning1().start();
//      new PlcPositioning2().start();
    //  new PlcParameter2().start();
//      new PlcParameter1().start();
//      new PLCAutomaticParameterSetting().start();
//
//      new PlcManualonePosition().start();
//      new PlcManualonePosition2().start();
//      new PlcServoManualone().start();
//      new PLCManualJog().start();
  }
 new PlcHold().start();
        new Plchome().start();
//         new Plcalarm().start();
//         new Plcsign().start();
//         new Plcaction().start();
//         new Plcstate().start();
//         new PlcPositioning1().start();
//         new PlcParameter2().start();
//         new PLCAutomaticParameterSetting().start();
//         new PlcManualonePosition().start();
//         new PlcManualonePosition2().start();
//         new PlcServoManualone().start();
//         new PLCManualJog().start();
    }
}
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -144,11 +144,11 @@
    StorageCage glass = homeMapper.SelectGlassInfo(glassid);
    if (types == 0) {
      homeMapper.UpdateCageTask1(glassid);
      S7control.getinstance().WriteWord("DB105.14", (short) 0);
      // S7control.getinstance().WriteWord("DB105.16", (short) 0);
    } else {
      spianMapper.UpdataOutCage1(glass.getGlassWidth(), glass.getCage(), glass.getCell());
      homeMapper.UpdateCageTask2(glassid);
      S7control.getinstance().WriteWord("DB105.12", (short) 0);
      // S7control.getinstance().WriteWord("DB105.18", (short) 0);
    }
    map.put("message3", "200");
    return Result.success(map);
springboot-vue3/src/main/java/com/example/springboot/mapper/RolePermissionMapper.java
@@ -13,7 +13,7 @@
@Mapper
@Repository
public interface RolePermissionMapper extends BaseMapper<RolePermission> {
    List<RolePermission> selectByNameLike(@Param("name") String name);
    @Select("SELECT rp.state,rp.permission_id,rp.role_id, p.* FROM role_permission AS rp JOIN permission AS p ON rp.permission_id = p.id WHERE rp.role_id = #{roleId}")
    List<Map<String, Object>> selectquanxian(@Param("roleId") int roleId);
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -1,6 +1,6 @@
package com.example.springboot.mapper;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.*;
import com.example.springboot.entity.Glass;
import com.example.springboot.entity.StorageCage;
@@ -14,166 +14,221 @@
@Mapper
public interface SpianMapper {
    //判断相邻笼子是否有空格
    // 判断相邻笼子是否有空格
    @Select("select COUNT(if(a.state1=0,cell,null))as cell,ROUND(id/2)as id from (select *,max(state)as state1 from storage_cage a  GROUP BY cage,cell)as a where (a.cage=#{cage1}-1 or a.cage=#{cage1}+1)and if(a.cage<6,a.cage>0 and a.cage<6,a.cage>5) and disabled=0 GROUP BY cage ORDER BY cell desc LIMIT 1")
     int selectCage(int  cage1);
     //@Select("(select*from storage_cage as a  where a.state=0 and cage%2=0 ORDER BY id LIMIT 1)union (select a.* from storage_cage a inner join  (select cage,if(shu2=1,shu3,shu5) as gezi from ( select  cage, count(case when state1=1 and state2=0 then cell else null end)as shu1,  count(case when state1=0 then cell else null end) as shu2, min(case when state1=1 and state2=0 then cell else null end) as shu3, min(case when state1=0 then cell else null end) as shu4, min(case when state1=0 or state2=0 then cell else null end) as shu5 from  (select *,max(state) as state1,min(state) as state2 from storage_cage group by cage,cell) as a where  cage%2!=0  GROUP BY cage HAVING shu2>1 or (shu2=1 and shu1>0)  ) as sss limit 1)as b on a.cage=b.cage and a.cell=b.gezi and a.state=0 order by tier limit 1) ORDER BY id LIMIT 1;")
    //获取订单号排序的空订单笼子
     @Select("select a.cage,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,disabled from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,cage asc; ")
     List<StorageCage> selectAll(String orderids);
    //获取判断该格子是否需要把外片推入内片位置
     @Select("select state from storage_cage where  cage=#{cage} and cell=#{cell} and tier=1;")
     int selectcell(int cage,int cell);
     //判断该笼子是否有合适宽度空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and disabled=0 and width>=#{width} ORDER BY cell asc,tier asc LIMIT 1")
     StorageCage selectCage1(int  cage1,int cell,double width);
     //判断笼子内玻璃数
     @Select("select COUNT(tier)as tier from storage_cage where  cage=#{cage} and cell=#{cell} and state!=0;")
     int selectsum(int cage,int cell);
     //完成进片中的玻璃状态
     @Update("update storage_cage set state=#{state} where glass_id=#{glassid};")
     void UpdateCageOver(String glassid,int state);
    int selectCage(int cage1);
     //获取玻璃信息
     @Select("select *,ordernumber ,glasslength_mm as glasslengthmm,glassheight_mm as glassheightmm,barcode,listnumber,boxnumber,glasslength,glassheight from north_glass_buffer1 where barcode=#{glassid}")
     north_glass_buffer1 selectGlass(String glassid);
    //出片任务查询
    // @Select("(select*from storage_cage as a where a.state=0 and cage%2=0 ORDER BY
    // id LIMIT 1)union (select a.* from storage_cage a inner join (select
    // cage,if(shu2=1,shu3,shu5) as gezi from ( select cage, count(case when
    // state1=1 and state2=0 then cell else null end)as shu1, count(case when
    // state1=0 then cell else null end) as shu2, min(case when state1=1 and
    // state2=0 then cell else null end) as shu3, min(case when state1=0 then cell
    // else null end) as shu4, min(case when state1=0 or state2=0 then cell else
    // null end) as shu5 from (select *,max(state) as state1,min(state) as state2
    // from storage_cage group by cage,cell) as a where cage%2!=0 GROUP BY cage
    // HAVING shu2>1 or (shu2=1 and shu1>0) ) as sss limit 1)as b on a.cage=b.cage
    // and a.cell=b.gezi and a.state=0 order by tier limit 1) ORDER BY id LIMIT 1;")
    // 获取订单号排序的空订单笼子
    @Select("select a.cage,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,disabled from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,cage asc; ")
    List<StorageCage> selectAll(String orderids);
    // 获取判断该格子是否需要把外片推入内片位置
    @Select("select state from storage_cage where  cage=#{cage} and cell=#{cell} and tier=1;")
    int selectcell(int cage, int cell);
    // 判断该笼子是否有合适宽度空格
    @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and disabled=0 and width>=#{width} ORDER BY cell asc,tier asc LIMIT 1")
    StorageCage selectCage1(int cage1, int cell, double width);
    // 判断笼子内玻璃数
    @Select("select COUNT(tier)as tier from storage_cage where  cage=#{cage} and cell=#{cell} and state!=0;")
    int selectsum(int cage, int cell);
    // 完成进片中的玻璃状态
    @Update("update storage_cage set state=#{state} where glass_id=#{glassid} and state=3;")
    void UpdateCageOver(String glassid, int state);
    @Update("update storage_cage set state=#{state} where glass_id=#{glassid} and state=2;")
    void UpdateCageadd(String glassid, int state);
    // 获取玻璃信息
    @Select("select *,ordernumber ,glasslength_mm as glasslengthmm,glassheight_mm as glassheightmm,barcode,listnumber,boxnumber,glasslength,glassheight from north_glass_buffer1 where barcode=#{glassid}")
    north_glass_buffer1 selectGlass(String glassid);
    // 出片任务查询
    @Select("select COUNT(order_id)order_id,cage,cell,glasswidth,tier,ROUND(id/2)as prcId,glass_id from storage_cage a where a.order_id=#{orderId} and disabled=0 and state=1 GROUP BY cage,cell ORDER BY cage desc,order_id desc,cell desc,glasswidth desc limit 1")
     StorageCage selectOut(String  orderId);
    // @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
    //  StorageCage selectOut(String  orderId);
    //按玻璃ID出片任务查询
    StorageCage selectOut(String orderId);
    // @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id
    // from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage
    // desc,tier desc,cell desc LIMIT 1")
    // StorageCage selectOut(String orderId);
    // 按玻璃ID出片任务查询
    @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id from storage_cage as a where a.glass_id=#{glassid} and state=1 and disabled=0 order by cage desc,tier desc,cell desc LIMIT 1")
     StorageCage selectOut2(String  glassid);
    StorageCage selectOut2(String glassid);
    //判断出片为1时,是否可直接出片
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state=1")
     int selectGlassState(int  cage,int cell);
    // 判断出片为1时,是否可直接出片
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state!=0")
    int selectGlassState(int cage, int cell);
     //判断该调拨的笼子
     @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),cell desc  limit 1;")
     StorageCage selectGlassCage(int cage,double width,int cage1,int cage2);
    // 判断该调拨的笼子
    @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),cell desc  limit 1;")
    StorageCage selectGlassCage(int cage, double width, int cage1, int cage2);
    //删除笼子信息(出片)
    // 删除笼子信息(出片)
    @Update("update storage_cage as a set state=#{state},glass_id=null,order_id=null,glasswidth=0,a.glassheight=null,a.glasswidthmm=null,a.glassheightmm=null,a.listid=null,a.boxid=null where glass_id=#{glassid} and state=3;")
    void UpdataGlassCage(String glassid,int state);
     //改变玻璃状态为出片中
    @Update("update storage_cage as a set state=#{state} where glass_id=#{glassid};")
    void UpdataGlassCageState(String glassid,int state);
    void UpdataGlassCage(String glassid, int state);
    //修改笼子信息(进片)
    // 改变玻璃状态为出片中
    @Update("update storage_cage as a set state=#{state} where glass_id=#{glassid};")
    void UpdataGlassCageState(String glassid, int state);
    // 修改笼子信息(进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where id=#{id};")
    void UpdataAddCage(String orderid,String glassid,double width,int cage,int cell,int id,int state);
    void UpdataAddCage(String orderid, String glassid, double width, int cage, int cell, int id, int state);
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{glass.ordernumber},glasswidth=#{glass.glasslengthmm},glassheight=#{glass.glassheightmm},glasswidthmm=#{glass.glasslength},glassheightmm=#{glass.glassheight},listid=#{glass.listnumber},boxid=#{glass.boxnumber} where id=#{id};")
    void UpdataAddCage2(String orderid,String glassid,north_glass_buffer1 glass,int cage,int cell,int id,int state);
     //修改笼子信息(多片进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where cage=#{cage} and cell=#{cell} and tier=#{tier};")
    void UpdataAddqueCage(String orderid,String glassid,double width,int cage,int cell,int tier,int state);
    //修改同笼子格子宽度
     @Update("update storage_cage set width=width-#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataAddCage1(double width,int cage,int cell);
    //修改同笼子格子宽度
    void UpdataAddCage2(String orderid, String glassid, north_glass_buffer1 glass, int cage, int cell, int id,
            int state);
     @Update("update storage_cage set state=#{state} where   state=#{oldstate};")
    void UpdataAddCageState(int state,int oldstate);
    //修改同笼子格子宽度(出片)
     @Update("update storage_cage set width=width+#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataOutCage1(double width,int cage,int cell);
    //调拨更换笼子信息
    // 修改笼子信息(多片进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where cage=#{cage} and cell=#{cell} and tier=#{tier};")
    void UpdataAddqueCage(String orderid, String glassid, double width, int cage, int cell, int tier, int state);
    // 修改同笼子格子宽度
    @Update("update storage_cage set width=width-#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataAddCage1(double width, int cage, int cell);
    // 修改同笼子格子宽度
    @Update("update storage_cage set state=#{state} where   state=#{oldstate};")
    void UpdataAddCageState(int state, int oldstate);
    // 修改同笼子格子宽度(出片)
    @Update("update storage_cage set width=width+#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataOutCage1(double width, int cage, int cell);
    // 调拨更换笼子信息
    @Update("update storage_cage as a,(select*from storage_cage b where b.cage=#{cage} and b.cell=#{cell} and b.tier=#{tier})as b set a.glass_id=b.glass_id,a.order_id=b.order_id,a.state=1,a.glasswidth=b.glasswidth,a.glassheight=b.glassheight,a.glasswidthmm=b.glasswidthmm,a.glassheightmm=b.glassheightmm,a.listid=b.listid,a.boxid=b.boxid where a.id=#{id1}")
    void UpdateDBCage(int id1,int cage,int cell,int tier);
    // @Insert("insert into user(name, date, address, user_no) values (#{name}, #{date}, #{address}, #{userNo})")
    void UpdateDBCage(int id1, int cage, int cell, int tier);
    // @Insert("insert into user(name, date, address, user_no) values (#{name},
    // #{date}, #{address}, #{userNo})")
    // void insert (Spian spian);
    //新增任务表
    // 新增任务表
    @Insert("INSERT INTO `canadames`.`storage_task`(`task_type`, `task_state`, `shelf_rack`, `load_rack`,start_time,glass_id,count) VALUES (#{tasktype},#{taskstate},#{shelfrack},#{loadrack},now(),#{glassid},#{count});")
    void Inserttask(int tasktype,int taskstate,int shelfrack,int loadrack,String glassid,int count);
    //修改任务表
    void Inserttask(int tasktype, int taskstate, int shelfrack, int loadrack, String glassid, int count);
    // 修改任务表
    @Update("update storage_task set task_state=#{state} where task_type=#{type} and task_state=0;")
    void Updatetask(int state,int type);
    //修改任务表
    void Updatetask(int state, int type);
    // 修改任务表
    @Update("update storage_task set task_state=1 where  task_state=0 and glass_id=#{glassid};")
    void UpdatetaskOut(String glassid);
    //查询按订单出片
    // 查询按订单出片
    @Select("select order_id state from order_out where state=0")
    String  SelectOrderout();
    //内外片调换
    String SelectOrderout();
    // 内外片调换
    @Update("update storage_cage as a,(select*from storage_cage b where b.cage=#{cage} and b.cell=#{cell} and b.tier=1)as b set a.glass_id=b.glass_id,a.order_id=b.order_id,a.state=1,a.glasswidth=b.glasswidth,a.glassheight=b.glassheight,a.glasswidthmm=b.glasswidthmm,a.glassheightmm=b.glassheightmm,a.listid=b.listid,a.boxid=b.boxid where a.cage=#{cage} and a.cell=#{cell} and a.tier=2")
    void UpdateDBCage1(int cage,int cell);
    //清除内片数据
    void UpdateDBCage1(int cage, int cell);
    // 清除内片数据
    @Update("update storage_cage a set glass_id='',order_id='',state=0,glasswidth=0,glassheight=0,glasswidthmm=0,glassheightmm=0,listid=null,boxid=null where a.cage=#{cage} and a.cell=#{cell} and a.tier=1;")
    void UpdateDBCage2(int cage,int cell);
    //判断是否有调拨完后出片的任务
    void UpdateDBCage2(int cage, int cell);
    // 判断是否有调拨完后出片的任务
    @Select("select COUNT(*)as id,glass_id as barcode from storage_task where (task_type=1 or task_type=2) and task_state=0;")
    north_glass_buffer1 SelectDBOut();
    //根据笼子格子层数获取玻璃id
     @Select("select glass_id from storage_cage where cage=#{cage} and cell=#{cell} and tier=2;")
     String SelectGlassid(int cage,int cell);
     //判断有几块玻璃还在出片中
     @Select("SELECT COUNT(*) FROM `storage_cage` where state=3;")
     Integer Selectoutstate();
     //判断队列表是否有该玻璃
     @Select("select COUNT(*) from queue where glassid=#{glassid} and state=1;")
     int Selectquecount(String glassid);
     //更新进片队列
     @Update("update queue set glassid=#{glassid},orderid=#{orderid},listid=#{listid},boxid=#{boxid},state=#{state},glasswidthmm=#{glasswidthmm},glassheightmm=#{glassheightmm},glasswidth=#{glasswidth},glassheight=#{glassheight} where type=#{type};")
     void Updatequeue(String glassid,String orderid,String listid,String boxid,int state,String glasswidth,String glassheight,String glasswidthmm,String  glassheightmm,int type);
     //完成进片队列任务
     @Update("update queue set state=#{state} where glassid=#{glassid};")
     void overqueue(String glassid,int state);
     //更换任务队列
     @Update("update queue set state=#{state} where glassid=#{glassid} and type=#{type};")
     void overqueue2(String glassid,int state,int type);
     //获取任务序列
     @Select("select glassid,orderid,width,type from queue where state=#{state}")
     StorageCage SelectQueue(int state);
     //获取序列表的玻璃宽
     @Select("select sum(width)+400 as width,orderid from queue where state=0 limit 1")
     StorageCage SelectQueueWidth();
    //判断该笼子是否有合适完整空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width,max(state)state1 from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} HAVING state1=0 ORDER BY cell asc,tier desc LIMIT 1")
     StorageCage selectqueCage1(int  cage1,int cell,double width);
     //获取序列表的玻璃
     @Select("select glassid as barcode,orderid as ordernumber,width as glasslengthmm from queue where state=0 and type=#{type}")
     north_glass_buffer1 SelectQueueGlass(int type);
     //多片出库清除一整个空格
     @Update("update storage_cage set glass_id='',order_id='',glasswidth=0,width=2750,state=0 where cage=#{cage} and cell=#{cell}")
     void UpdatequeOut(int cage,int cell);
     //判断序列表里的玻璃是否是同一订单
     @Select("select  COUNT(distinct orderid) from queue ")
     int SelectQueOrder();
     //寻找可以多片出片的玻璃
     @Select("select cage,cell,ROUND(id/2)as prcId,width,count(glass_id)shu from storage_cage where order_id=#{orderid} and (cage!=#{cage} or cell!=#{cell}) GROUP BY cage,cell HAVING shu=1 ORDER BY cage desc,cell desc limit 1")
     StorageCage SelectQueout(String orderid,int cage,int cell);
     //获取进片队列id
     @Select("select glassid from queue where type=1")
     String Selectqueueid();
     //获取进片队列是否有待入库
     @Select("select state from queue where type=1")
     int Selectqueuestate();
     //判断铝框出片表是否有玻璃需要出
     @Select("SELECT glassid FROM `out_slice` where state=0  order by sequence,id  limit 1;")
     String SelectOutSlice();
     //判断铝框出片表是否有玻璃正在出片中
     @Select("SELECT count(*) FROM `out_slice` where state=1;")
     int SelectOutSliceshu();
     //更新出片队列的任务状态
     @Update("update out_slice set state=#{state} where glassid=#{glassid}")
     void OverOutSlice(String glassid,int state);
     //获取玻璃的铝框id
     @Select("select barcode from out_slice where glassid=#{glassid};")
     String SelectBarcode(String glassId);
     //获取出片队列的铝框是否全部完成
     @Select("select MIN(state) from out_slice where barcode=#{barcode};")
     int SelectOverState(String barcode);
     //删除出片队列该铝框的id
     @Delete("delete from out_slice where barcode=#{barcode};")
     void DeleteQueue(String barcode);
     //把该进片的玻璃更新到出片队列
     @Select("update out_slice set state=0 where glassId=#{glassId} and state=3")
     void UpdateAddQueue(String glassId);
}
    // 根据笼子格子层数获取玻璃id
    @Select("select glass_id from storage_cage where cage=#{cage} and cell=#{cell} and tier=2;")
    String SelectGlassid(int cage, int cell);
    // 判断有几块玻璃还在出片中
    @Select("SELECT COUNT(*) FROM `storage_cage` where state=3;")
    Integer Selectoutstate();
    // 判断队列表是否有该玻璃
    @Select("select COUNT(*) from queue where glassid=#{glassid} and state=1;")
    int Selectquecount(String glassid);
    // 更新进片队列
    @Update("update queue set glassid=#{glassid},orderid=#{orderid},listid=#{listid},boxid=#{boxid},state=#{state},glasswidthmm=#{glasswidthmm},glassheightmm=#{glassheightmm},glasswidth=#{glasswidth},glassheight=#{glassheight} where type=#{type};")
    void Updatequeue(String glassid, String orderid, String listid, String boxid, int state, String glasswidth,
            String glassheight, String glasswidthmm, String glassheightmm, int type);
    // 完成进片队列任务
    @Update("update queue set state=#{state} where glassid=#{glassid};")
    void overqueue(String glassid, int state);
    // 更换任务队列
    @Update("update queue set state=#{state} where glassid=#{glassid} and type=#{type};")
    void overqueue2(String glassid, int state, int type);
    // 获取任务序列
    @Select("select glassid,orderid,width,type from queue where state=#{state}")
    StorageCage SelectQueue(int state);
    // 获取序列表的玻璃宽
    @Select("select sum(width)+400 as width,orderid from queue where state=0 limit 1")
    StorageCage SelectQueueWidth();
    // 判断该笼子是否有合适完整空格
    @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width,max(state)state1 from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} HAVING state1=0 ORDER BY cell asc,tier desc LIMIT 1")
    StorageCage selectqueCage1(int cage1, int cell, double width);
    // 获取序列表的玻璃
    @Select("select glassid as barcode,orderid as ordernumber,width as glasslengthmm from queue where state=0 and type=#{type}")
    north_glass_buffer1 SelectQueueGlass(int type);
    // 多片出库清除一整个空格
    @Update("update storage_cage set glass_id='',order_id='',glasswidth=0,width=2750,state=0 where cage=#{cage} and cell=#{cell}")
    void UpdatequeOut(int cage, int cell);
    // 判断序列表里的玻璃是否是同一订单
    @Select("select  COUNT(distinct orderid) from queue ")
    int SelectQueOrder();
    // 寻找可以多片出片的玻璃
    @Select("select cage,cell,ROUND(id/2)as prcId,width,count(glass_id)shu from storage_cage where order_id=#{orderid} and (cage!=#{cage} or cell!=#{cell}) GROUP BY cage,cell HAVING shu=1 ORDER BY cage desc,cell desc limit 1")
    StorageCage SelectQueout(String orderid, int cage, int cell);
    // 获取进片队列id
    @Select("select glassid from queue where type=1")
    String Selectqueueid();
    // 获取进片队列是否有待入库
    @Select("select state from queue where type=1")
    int Selectqueuestate();
    // 判断铝框出片表是否有玻璃需要出
    @Select("SELECT glassid FROM `out_slice` where state=0  order by sequence,id  limit 1;")
    String SelectOutSlice();
    // 判断铝框出片表是否有玻璃正在出片中
    @Select("SELECT count(*) FROM `out_slice` where state=1;")
    int SelectOutSliceshu();
    // 更新出片队列的任务状态
    @Update("update out_slice set state=#{state} where glassid=#{glassid}")
    void OverOutSlice(String glassid, int state);
    // 获取玻璃的铝框id
    @Select("select barcode from out_slice where glassid=#{glassid};")
    String SelectBarcode(String glassId);
    // 获取出片队列的铝框是否全部完成
    @Select("select MIN(state) from out_slice where barcode=#{barcode};")
    int SelectOverState(String barcode);
    // 删除出片队列该铝框的id
    @Delete("delete from out_slice where barcode=#{barcode};")
    void DeleteQueue(String barcode);
    // 把该进片的玻璃更新到出片队列
    @Select("update out_slice set state=0 where glassId=#{glassId} and state=3")
    void UpdateAddQueue(String glassId);
}
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -1,4 +1,5 @@
package com.example.springboot.service;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -37,10 +38,10 @@
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.0");// 进片车起始位置
        adddresslist.add("DB105.2");// 进片车目标位置
        adddresslist.add("DB105.4");// 进片玻璃宽
        adddresslist.add("DB105.8");//进片笼内已有玻璃数
        adddresslist.add("DB105.4");// 进片玻璃宽
        adddresslist.add("DB105.8");// 进片笼内已有玻璃数
        adddresslist.add("DB105.16");// 进片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // String orderid="A001";
@@ -64,7 +65,7 @@
            }
            // 判断选中笼子是否有合适宽度空格
            // 有合适空格时进片
            if (cages1 != null && cages >= 1&&storageCage2.getDisabled()==0) {
            if (cages1 != null && cages >= 1 && storageCage2.getDisabled() == 0) {
                ids = cages1.getId();// 数据库ID
                tiers = cages1.getTier();// 内外片
                cells = cages1.getCell();// 格子号
@@ -73,37 +74,36 @@
                widths = glasslist.getglasslengthmm();
                // 执行进片
                datas.add((short) 1000);//起始位置
                datas.add((short) prcid);//目标位置
                datas.add((short) widths);//进片玻璃宽
                datas.add((short) prctier); //玻璃数
                datas.add((short) 1);//任务启动
                //获取该格子内是否有玻璃
                int cellint=spianMapper.selectcell(cage1,cells);
                if(cellint==1){
                    //将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCage(ids, cage1, cells,1);
                    //将新入的玻璃存入外片
                    //spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids-1, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1,cells, ids-1, 2);
                datas.add((short) 1000);// 起始位置
                datas.add((short) prcid);// 目标位置
                datas.add((short) widths);// 进片玻璃宽
                datas.add((short) prctier); // 玻璃数
                datas.add((short) 1);// 任务启动
                // 获取该格子内是否有玻璃
                int cellint = spianMapper.selectcell(cage1, cells);
                if (cellint == 1) {
                    // 将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCage(ids, cage1, cells, 1);
                    // 将新入的玻璃存入外片
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids-1, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids - 1, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(),prctier);// 新增任务
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("汇报时任务|" + datas);
                }else{
                 // 数据库修改笼子表新增一条玻璃
                //spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1,cells, ids, 2);
                spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(),prctier);// 新增任务
                S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("汇报时任务|" + datas);
                    System.out.println("出片任务|" + datas);
                } else {
                    // 数据库修改笼子表新增一条玻璃
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("出片任务|" + datas);
                // S7control.getinstance().WriteByte("DB105.16",glassid);
                    // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
                outmesid(glassid,"DB105.20");
                outmesid(glassid, "DB105.20");
                return (200);
            }
@@ -113,11 +113,10 @@
    }
    public Short selectout2(String glassid) {
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        char[] a=glassid.toCharArray();
        char[] a = glassid.toCharArray();
        adddresslist.add("DB105.10");// 出片车起始位置
        adddresslist.add("DB105.12");// 出片车目标位置
@@ -148,19 +147,19 @@
            datas.add((short) 1000);
            datas.add((short) state);
            datas.add((short) 1);
            spianMapper.OverOutSlice(glassid, 1);//更新出片队列任务状态为进行中
            spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务状态为进行中
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
            spianMapper.UpdataGlassCageState(glassid,3);//更改笼子表的玻璃状态
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid,state);// 新增任务
            spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, state);// 新增任务
            // int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
            if (state == 2) {
                spianMapper.UpdateDBCage1(cage, cell);// 将内片数据更新到外片里
                spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            }
            System.out.println("出片任务|" + datas);
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            outmesid(glassid,"DB105.34");// 派发出片ID
            outmesid(glassid, "DB105.34");// 派发出片ID
            return (200);// 结束
        } else {
@@ -173,12 +172,13 @@
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.OverOutSlice(glassid, 1);//更新出片队列任务状态为进行中
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid,1);// 新增任务
                spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务状态为进行中
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, 1);// 新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCageState(glassid,3);//更改笼子表的玻璃状态
                spianMapper.OverOutSlice(glassid,2);//完成出片队列任务
                outmesid(glassid,"DB105.34");// 派发出片ID
                spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
                spianMapper.OverOutSlice(glassid, 2);// 完成出片队列任务
                System.out.println("出片任务|" + datas);
                outmesid(glassid, "DB105.34");// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                return (200);// 结束
@@ -203,16 +203,17 @@
                    datas.add((short) 1);
                    // 更换玻璃的笼子
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.UpdateDBCage(ids, cage, cell,2);// 将原格子数据更新到新格子里
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCageState(glassids,3);//更改笼子表的玻璃状态
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassid,2);// 新增调度任务
                    //spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    //spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassid, 2);// 新增调度任务
                    // spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    return (200); // 结束
                } else {// 笼子号大于5时
@@ -231,16 +232,17 @@
                    datas.add((short) 2);
                    datas.add((short) 1);
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassid,2);// 新增调度任务
                    //spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    spianMapper.UpdateDBCage(ids, cage, cell,2);// 将原格子数据更新到新格子里
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassid, 2);// 新增调度任务
                    // spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCageState(glassids,3);//更改笼子表的玻璃状态
                    //spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    return (200);// 结束
                }
@@ -248,57 +250,67 @@
        }
    }
    //派发任务玻璃id
    public void outmesid(String glassid,String address) {
        //System.out.println("outmesid:" + glassid);
    // 派发任务玻璃id
    public void outmesid(String glassid, String address) {
        // System.out.println("outmesid:" + glassid);
        List<Byte> glassidlist = new ArrayList();
        char ds[]=glassid.toCharArray();
        char ds[] = glassid.toCharArray();
        for (char iditem : ds) {
            glassidlist.add((byte)iditem);
            glassidlist.add((byte) iditem);
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    }
    //获取地址内的玻璃id转字符串
    public StringBuilder queGlassid(String address,int count) {
    // 获取地址内的玻璃id转字符串
    public StringBuilder queGlassid(String address, int count) {
        StringBuilder writedstrIdOut = new StringBuilder();
        byte[] writedglassidbytesOut = S7control.getinstance().ReadByte(address, count);
      if (writedglassidbytesOut != null) {
        // 获取玻璃id
        for (byte iditem : writedglassidbytesOut) {
          writedstrIdOut.append((char) iditem);
        if (writedglassidbytesOut != null) {
            // 获取玻璃id
            for (byte iditem : writedglassidbytesOut) {
                writedstrIdOut.append((char) iditem);
            }
        }
      }
        return writedstrIdOut;
    }
    //char数组转化成bit数组
       public static byte[] toBytes(char[] chars) {
    // char数组转化成bit数组
    public static byte[] toBytes(char[] chars) {
        String s = new String(chars);
        return s.getBytes(StandardCharsets.UTF_8);
    }
    //bit数组转化成char数组
    // bit数组转化成char数组
    public static char[] toChars(byte[] bytes) {
        String s = new String(bytes, StandardCharsets.UTF_8);
        return s.toCharArray();
    }
    //判断集合里是否为1
    public  boolean listbool(String address) {
       List<Short> list = S7control.getinstance().ReadWord(address, 1);//返回为ture时为1
       boolean listbool = list.contains((short) 1);
    // 判断集合里是否为1
    public boolean listbool(String address) {
        List<Short> list = S7control.getinstance().ReadWord(address, 1);// 返回为ture时为1
        boolean listbool = list.contains((short) 1);
        return listbool;
    }
    //根据玻璃id完成在进行中的任务
    public void overtask(String glassid){
    // 根据玻璃id完成在进行中的任务
    public void overtask(String glassid) {
        spianMapper.UpdateCageOver(glassid, 0);// 更改笼子表出片状态
        spianMapper.UpdatetaskOut(glassid); // 完成上一次出片或者进片任务
        spianMapper.OverOutSlice(glassid, 2);// 完成出片队列任务
        spianMapper.UpdataGlassCage(glassid,0);// 清除出片格子玻璃信息
        String barcode=spianMapper.SelectBarcode(glassid);//获取该玻璃的铝框id
        spianMapper.UpdateAddQueue(glassid);//把进片的玻璃更新到出片队列中
        int barcodeState=spianMapper.SelectOverState(barcode);//获取该铝框的状态
        if(barcodeState==2){//当该铝框所有的玻璃都是完成状态时删除在出片队列的数据
            spianMapper.DeleteQueue(barcode);
        spianMapper.UpdataGlassCage(glassid, 0);// 清除出片格子玻璃信息
        spianMapper.UpdateCageadd(glassid,1);
        String barcode = spianMapper.SelectBarcode(glassid);// 获取该玻璃的铝框id
        spianMapper.UpdateAddQueue(glassid);// 把进片的玻璃更新到出片队列中
        if (barcode != null) {
            int barcodeState = spianMapper.SelectOverState(barcode);// 获取该铝框的状态
            if (barcodeState == 2) {// 当该铝框所有的玻璃都是完成状态时删除在出片队列的数据
                spianMapper.DeleteQueue(barcode);
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/impl/RolePermissionServiceImpl.java
@@ -1,12 +1,15 @@
package com.example.springboot.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springboot.entity.MenuList;
import com.example.springboot.service.PermissionService;
import com.example.springboot.mapper.RolePermissionMapper;
import com.example.springboot.entity.RolePermission;
import com.example.springboot.entity.vo.RolePermissionVo;
import com.example.springboot.service.RolePermissionService;
import com.example.springboot.service.RoleService;
import lombok.extern.slf4j.Slf4j;
@@ -22,14 +25,19 @@
    private PermissionService permissionService;
    @Override
    public IPage<RolePermission> selectPage(RolePermissionVo rolePermissionVO) {
        IPage<RolePermission> rolePermissionIPage = lambdaQuery()
                .orderByAsc(RolePermission::getRoleId)
                .like(StrUtil.isNotBlank(rolePermissionVO.getName()), RolePermission::getName, rolePermissionVO.getName())
                .page(new Page<>(rolePermissionVO.getPageNum(), rolePermissionVO.getPageSize()));
        rolePermissionIPage.getRecords().forEach(rolePermission -> {
            rolePermission.setRole(roleService.getById(rolePermission.getRoleId()));
            rolePermission.setPermission(permissionService.getById(rolePermission.getPermissionId()));
        });
        return rolePermissionIPage;
    }
}
springboot-vue3/src/main/resources/config.properties
@@ -27,9 +27,9 @@
A02start=DB101.5.1
#A01start
A01start=DB101.5.0
#A02start
#A02bstart
A02Bstart=DB101.11.1
#A01start
#A01bstart
A01Bstart=DB101.11.0
#abort/resumeTasks
abortresumeTasks=DB101.10.4
@@ -53,4 +53,60 @@
#PLCManualJog--------------------------
#PLCManualJog--------------------------
#Parameter2--------------------------
#id
Parameter2.id=DB103.44,DB103.58,DB103.72,DB103.86,DB103.100,DB103.114,DB103.128,DB103.142,DB103.156,DB103.184,DB103.212
#清除id
Parameter2.state=DB103.0,DB103.2,DB103.12,DB103.14,DB103.16,DB103.18,DB103.8,DB103.10,DB103.4,DB103.6
#手动状态
Parameter2.cleanid=DB101.9.2,DB101.9.3,DB101.9.4,DB101.9.5,DB101.9.6,DB101.9.7,DB101.10.0,DB101.10.1,DB101.10.2,DB101.10.3
#扫码枪
Parameter2.scanner=DB103.256,DB103.270
#急停
Parameter2.stop=DB101.10.4
#当前格子
Parameter2.Currentcell=DB103.32,DB103.34,DB103.36,DB103.40
#PLCManualJog-------------------------------------
#List<String> addressList21 = new ArrayList<>();
#addressList21.add("DB101.0.0");
#addressList21.add("DB101.0.1");
#addressList21.add("DB101.0.2");
#addressList21.add("DB101.0.3");
#addressList21.add("DB101.0.4");
#addressList21.add("DB101.0.5");
#addressList21.add("DB101.0.6");
#addressList21.add("DB101.3.4");
#addressList21.add("DB101.1.4");
#addressList21.add("DB101.1.2"); //A01 SERVE TURN
#addressList21.add("DB101.5.2");
#addressList21.add("DB101.0.7");//A02 VFD conveyor
#addressList21.add("DB101.3.5");
#addressList21.add("DB101.1.5");
#addressList21.add("DB101.1.3");
#addressList21.add("DB101.5.3");
#addressList21.add("DB101.1.0");//B01 VFD conveyor
#addressList21.add("DB101.1.6");
#addressList21.add("DB101.2.6");
#addressList21.add("DB101.2.7");
#addressList21.add("DB101.3.2");
#
#addressList21.add("DB101.1.1");//B02 VFD conveyor
#addressList21.add("DB101.1.7");
#addressList21.add("DB101.3.0");
#addressList21.add("DB101.3.1");
#addressList21.add("DB101.3.3");
#按钮
PLCManualJog.button=DB101.0.0,DB101.0.1,DB101.0.2,DB101.0.3,DB101.0.4,DB101.0.5,DB101.0.6,DB101.3.4,DB101.1.4,DB101.1.2,DB101.5.2,DB101.0.7,DB101.3.5,DB101.1.5,DB101.1.3,DB101.5.3,DB101.1.0,DB101.1.6,DB101.2.6,DB101.2.7,DB101.3.2,DB101.1.1,DB101.1.7,DB101.3.0,DB101.3.1,DB101.3.3
springboot-vue3/src/main/resources/sql/canadames.sql
@@ -11,7 +11,7 @@
 Target Server Version : 80022
 File Encoding         : 65001
 Date: 07/12/2023 11:39:42
 Date: 11/12/2023 13:35:48
*/
SET NAMES utf8mb4;
@@ -27,7 +27,7 @@
  `timeon` datetime(0) NULL DEFAULT NULL COMMENT '开始时间',
  `endTime` datetime(0) NULL DEFAULT NULL COMMENT '结束时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1397 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 1742 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of alarmmg
@@ -171,10 +171,273 @@
INSERT INTO `alarmmg` VALUES (1472, 'A02 conveyor Left safety alarm', '2023-12-06 16:20:28', '2023-12-06 16:20:31');
INSERT INTO `alarmmg` VALUES (1473, 'A01 conveyor right safety alarm', '2023-12-06 16:31:59', '2023-12-06 16:32:02');
INSERT INTO `alarmmg` VALUES (1474, 'A01 conveyor right safety alarm', '2023-12-06 16:32:17', '2023-12-06 16:32:20');
INSERT INTO `alarmmg` VALUES (1475, 'A01 servo turn error', '2023-12-07 11:21:49', NULL);
INSERT INTO `alarmmg` VALUES (1476, 'A02 servo turn error', '2023-12-07 11:21:49', NULL);
INSERT INTO `alarmmg` VALUES (1477, 'A01 servo travel error', '2023-12-07 11:22:19', NULL);
INSERT INTO `alarmmg` VALUES (1478, 'A02 servo travel error', '2023-12-07 11:22:22', NULL);
INSERT INTO `alarmmg` VALUES (1475, 'A01 servo turn error', '2023-12-07 11:21:49', '2023-12-07 13:34:48');
INSERT INTO `alarmmg` VALUES (1476, 'A02 servo turn error', '2023-12-07 11:21:49', '2023-12-07 13:34:48');
INSERT INTO `alarmmg` VALUES (1477, 'A01 servo travel error', '2023-12-07 11:22:19', '2023-12-07 13:34:48');
INSERT INTO `alarmmg` VALUES (1478, 'A02 servo travel error', '2023-12-07 11:22:22', '2023-12-07 13:34:48');
INSERT INTO `alarmmg` VALUES (1479, 'D02 VFD error', '2023-12-07 13:45:51', '2023-12-07 13:45:52');
INSERT INTO `alarmmg` VALUES (1480, 'A01 servo turn error', '2023-12-07 13:45:55', '2023-12-07 13:46:35');
INSERT INTO `alarmmg` VALUES (1481, 'A02 servo turn error', '2023-12-07 13:45:55', '2023-12-07 13:46:35');
INSERT INTO `alarmmg` VALUES (1482, 'D03 VFD error', '2023-12-07 13:46:17', '2023-12-07 13:46:37');
INSERT INTO `alarmmg` VALUES (1483, 'D04 VFD error', '2023-12-07 13:46:17', '2023-12-07 13:46:37');
INSERT INTO `alarmmg` VALUES (1484, 'D05 VFD error', '2023-12-07 13:46:17', '2023-12-07 13:46:37');
INSERT INTO `alarmmg` VALUES (1485, 'A01 servo travel error', '2023-12-07 13:46:30', '2023-12-07 13:46:37');
INSERT INTO `alarmmg` VALUES (1486, 'A02 servo travel error', '2023-12-07 13:46:30', '2023-12-07 13:46:37');
INSERT INTO `alarmmg` VALUES (1487, 'A01 servo turn error', '2023-12-07 13:46:50', '2023-12-07 13:47:37');
INSERT INTO `alarmmg` VALUES (1488, 'A02 servo turn error', '2023-12-07 13:46:50', '2023-12-07 13:47:37');
INSERT INTO `alarmmg` VALUES (1489, 'A01 servo travel error', '2023-12-07 13:47:16', '2023-12-07 13:47:37');
INSERT INTO `alarmmg` VALUES (1490, 'A02 servo travel error', '2023-12-07 13:47:16', '2023-12-07 13:47:37');
INSERT INTO `alarmmg` VALUES (1491, 'More glass than known', '2023-12-07 13:56:56', '2023-12-07 13:57:35');
INSERT INTO `alarmmg` VALUES (1492, 'less glass than known', '2023-12-07 13:57:36', '2023-12-07 13:57:48');
INSERT INTO `alarmmg` VALUES (1493, 'More glass than known', '2023-12-07 13:57:48', '2023-12-07 14:07:27');
INSERT INTO `alarmmg` VALUES (1494, 'More glass than known', '2023-12-07 14:09:01', '2023-12-07 14:09:14');
INSERT INTO `alarmmg` VALUES (1495, 'less glass than known', '2023-12-07 14:09:15', '2023-12-07 14:19:19');
INSERT INTO `alarmmg` VALUES (1496, 'A01 servo travel error', '2023-12-07 14:40:51', '2023-12-07 14:41:14');
INSERT INTO `alarmmg` VALUES (1497, 'A01 conveyor right safety alarm', '2023-12-07 14:47:06', '2023-12-07 14:47:09');
INSERT INTO `alarmmg` VALUES (1498, 'A01 servo turn error', '2023-12-07 14:49:31', '2023-12-07 14:51:34');
INSERT INTO `alarmmg` VALUES (1499, 'A02 servo turn error', '2023-12-07 14:49:31', '2023-12-07 14:51:34');
INSERT INTO `alarmmg` VALUES (1500, 'A01 servo travel error', '2023-12-07 14:50:05', '2023-12-07 14:51:34');
INSERT INTO `alarmmg` VALUES (1501, 'A02 servo travel error', '2023-12-07 14:50:05', '2023-12-07 14:51:34');
INSERT INTO `alarmmg` VALUES (1502, 'A01 conveyor right safety alarm', '2023-12-07 15:11:25', '2023-12-07 15:11:28');
INSERT INTO `alarmmg` VALUES (1503, 'A01 servo turn error', '2023-12-07 15:12:17', '2023-12-07 15:12:26');
INSERT INTO `alarmmg` VALUES (1504, 'A02 servo turn error', '2023-12-07 15:12:17', '2023-12-07 15:12:26');
INSERT INTO `alarmmg` VALUES (1505, 'A02 servo travel error', '2023-12-07 15:12:17', '2023-12-07 15:12:26');
INSERT INTO `alarmmg` VALUES (1506, 'A01 servo travel error', '2023-12-07 15:12:20', '2023-12-07 15:12:26');
INSERT INTO `alarmmg` VALUES (1507, 'A01 servo turn error', '2023-12-07 15:12:27', '2023-12-07 15:12:29');
INSERT INTO `alarmmg` VALUES (1508, 'A01 conveyor right safety alarm', '2023-12-07 15:13:30', '2023-12-07 15:14:59');
INSERT INTO `alarmmg` VALUES (1509, 'A01 VFD error', '2023-12-07 15:14:57', '2023-12-07 15:14:58');
INSERT INTO `alarmmg` VALUES (1510, 'A01 servo turn error', '2023-12-07 15:15:08', '2023-12-07 15:16:49');
INSERT INTO `alarmmg` VALUES (1511, 'A02 servo turn error', '2023-12-07 15:15:08', '2023-12-07 15:16:49');
INSERT INTO `alarmmg` VALUES (1512, 'A02 servo travel error', '2023-12-07 15:15:38', '2023-12-07 15:16:49');
INSERT INTO `alarmmg` VALUES (1513, 'A01 conveyor right safety alarm', '2023-12-07 15:15:38', '2023-12-07 15:18:11');
INSERT INTO `alarmmg` VALUES (1514, 'A01 servo travel error', '2023-12-07 15:15:40', '2023-12-07 15:16:49');
INSERT INTO `alarmmg` VALUES (1515, 'A01 servo turn error', '2023-12-07 15:25:11', '2023-12-07 15:25:46');
INSERT INTO `alarmmg` VALUES (1516, 'A02 servo turn error', '2023-12-07 15:25:11', '2023-12-07 15:25:46');
INSERT INTO `alarmmg` VALUES (1517, 'A01 servo travel error', '2023-12-07 15:25:38', '2023-12-07 15:25:46');
INSERT INTO `alarmmg` VALUES (1518, 'A02 servo travel error', '2023-12-07 15:25:38', '2023-12-07 15:25:46');
INSERT INTO `alarmmg` VALUES (1519, 'A02 conveyor Left safety alarm', '2023-12-07 15:31:15', '2023-12-07 15:31:18');
INSERT INTO `alarmmg` VALUES (1520, 'A01 servo turn error', '2023-12-07 15:31:48', '2023-12-07 15:32:24');
INSERT INTO `alarmmg` VALUES (1521, 'A02 servo turn error', '2023-12-07 15:31:48', '2023-12-07 15:32:20');
INSERT INTO `alarmmg` VALUES (1522, 'A02 servo travel error', '2023-12-07 15:32:10', '2023-12-07 15:32:13');
INSERT INTO `alarmmg` VALUES (1523, 'A01 servo travel error', '2023-12-07 15:32:17', '2023-12-07 15:32:18');
INSERT INTO `alarmmg` VALUES (1524, 'A02 conveyor Left safety alarm', '2023-12-07 15:33:06', '2023-12-07 15:33:09');
INSERT INTO `alarmmg` VALUES (1525, 'A01 servo turn error', '2023-12-07 15:33:21', '2023-12-07 15:35:32');
INSERT INTO `alarmmg` VALUES (1526, 'A02 servo turn error', '2023-12-07 15:33:21', '2023-12-07 15:35:32');
INSERT INTO `alarmmg` VALUES (1527, 'A02 servo travel error', '2023-12-07 15:33:47', '2023-12-07 15:35:34');
INSERT INTO `alarmmg` VALUES (1528, 'A02 conveyor Left safety alarm', '2023-12-07 15:33:47', '2023-12-07 15:35:34');
INSERT INTO `alarmmg` VALUES (1529, 'A01 servo travel error', '2023-12-07 15:33:53', '2023-12-07 15:35:34');
INSERT INTO `alarmmg` VALUES (1530, 'A01 servo turn error', '2023-12-07 15:37:15', '2023-12-07 15:38:14');
INSERT INTO `alarmmg` VALUES (1531, 'A02 servo turn error', '2023-12-07 15:37:15', '2023-12-07 15:38:14');
INSERT INTO `alarmmg` VALUES (1532, 'A01 servo travel error', '2023-12-07 15:37:45', '2023-12-07 15:38:13');
INSERT INTO `alarmmg` VALUES (1533, 'A01 conveyor right safety alarm', '2023-12-07 16:01:56', '2023-12-07 16:01:59');
INSERT INTO `alarmmg` VALUES (1534, 'D02 VFD error', '2023-12-07 16:01:58', '2023-12-07 16:01:59');
INSERT INTO `alarmmg` VALUES (1535, 'A01 VFD error', '2023-12-07 16:01:58', '2023-12-07 16:01:59');
INSERT INTO `alarmmg` VALUES (1536, 'A01 servo turn error', '2023-12-07 16:05:46', '2023-12-07 16:06:22');
INSERT INTO `alarmmg` VALUES (1537, 'A02 servo turn error', '2023-12-07 16:05:46', '2023-12-07 16:06:22');
INSERT INTO `alarmmg` VALUES (1538, 'A01 servo travel error', '2023-12-07 16:06:12', '2023-12-07 16:06:21');
INSERT INTO `alarmmg` VALUES (1539, 'A02 servo travel error', '2023-12-07 16:06:12', '2023-12-07 16:06:21');
INSERT INTO `alarmmg` VALUES (1540, 'A01 conveyor right safety alarm', '2023-12-07 16:10:13', '2023-12-07 16:10:15');
INSERT INTO `alarmmg` VALUES (1541, 'A01 conveyor right safety alarm', '2023-12-07 16:10:34', '2023-12-07 16:10:35');
INSERT INTO `alarmmg` VALUES (1542, 'A01 servo turn error', '2023-12-07 16:12:10', '2023-12-07 16:12:36');
INSERT INTO `alarmmg` VALUES (1543, 'A02 servo turn error', '2023-12-07 16:12:10', '2023-12-07 16:12:36');
INSERT INTO `alarmmg` VALUES (1544, 'A01 servo turn error', '2023-12-07 16:13:28', '2023-12-07 16:14:06');
INSERT INTO `alarmmg` VALUES (1545, 'A02 servo turn error', '2023-12-07 16:13:28', '2023-12-07 16:14:06');
INSERT INTO `alarmmg` VALUES (1546, 'A01 servo travel error', '2023-12-07 16:13:57', '2023-12-07 16:14:06');
INSERT INTO `alarmmg` VALUES (1547, 'A02 servo travel error', '2023-12-07 16:13:57', '2023-12-07 16:14:06');
INSERT INTO `alarmmg` VALUES (1548, 'A01 conveyor right safety alarm', '2023-12-07 16:15:51', '2023-12-07 16:15:54');
INSERT INTO `alarmmg` VALUES (1549, 'A01 conveyor right safety alarm', '2023-12-07 16:16:12', '2023-12-07 16:16:14');
INSERT INTO `alarmmg` VALUES (1550, '1# buffer safety alarm', '2023-12-07 16:16:13', '2023-12-07 16:19:27');
INSERT INTO `alarmmg` VALUES (1551, 'A01 servo turn error', '2023-12-07 16:16:27', '2023-12-07 16:16:59');
INSERT INTO `alarmmg` VALUES (1552, 'A02 servo turn error', '2023-12-07 16:16:27', '2023-12-07 16:17:11');
INSERT INTO `alarmmg` VALUES (1553, 'A01 servo travel error', '2023-12-07 16:16:58', '2023-12-07 16:16:59');
INSERT INTO `alarmmg` VALUES (1554, 'A02 servo travel error', '2023-12-07 16:16:58', '2023-12-07 16:16:59');
INSERT INTO `alarmmg` VALUES (1555, 'A01 conveyor right safety alarm', '2023-12-07 16:16:58', '2023-12-07 16:18:35');
INSERT INTO `alarmmg` VALUES (1556, 'A01 servo turn error', '2023-12-07 16:17:00', '2023-12-07 16:17:10');
INSERT INTO `alarmmg` VALUES (1557, 'B01 VFD error', '2023-12-07 16:18:35', '2023-12-07 16:18:36');
INSERT INTO `alarmmg` VALUES (1558, 'A01 servo turn error', '2023-12-07 16:18:53', '2023-12-07 16:19:05');
INSERT INTO `alarmmg` VALUES (1559, 'A02 servo turn error', '2023-12-07 16:18:53', '2023-12-07 16:19:05');
INSERT INTO `alarmmg` VALUES (1560, 'D02 VFD error', '2023-12-07 16:18:58', '2023-12-07 16:19:06');
INSERT INTO `alarmmg` VALUES (1561, 'D03 VFD error', '2023-12-07 16:18:58', '2023-12-07 16:19:06');
INSERT INTO `alarmmg` VALUES (1562, 'D04 VFD error', '2023-12-07 16:18:58', '2023-12-07 16:19:06');
INSERT INTO `alarmmg` VALUES (1563, 'D05 VFD error', '2023-12-07 16:18:58', '2023-12-07 16:19:06');
INSERT INTO `alarmmg` VALUES (1564, 'D06 VFD error', '2023-12-07 16:18:58', '2023-12-07 16:19:06');
INSERT INTO `alarmmg` VALUES (1565, 'A01 servo turn error', '2023-12-07 16:21:09', '2023-12-07 16:23:03');
INSERT INTO `alarmmg` VALUES (1566, 'A02 servo turn error', '2023-12-07 16:21:09', '2023-12-07 16:23:03');
INSERT INTO `alarmmg` VALUES (1567, 'A01 servo travel error', '2023-12-07 16:21:41', '2023-12-07 16:23:03');
INSERT INTO `alarmmg` VALUES (1568, 'A01 conveyor right safety alarm', '2023-12-07 16:27:01', '2023-12-07 16:27:03');
INSERT INTO `alarmmg` VALUES (1569, 'A01 conveyor right safety alarm', '2023-12-07 16:27:22', '2023-12-07 16:27:24');
INSERT INTO `alarmmg` VALUES (1570, '1# buffer safety alarm', '2023-12-07 16:27:22', '2023-12-07 16:34:37');
INSERT INTO `alarmmg` VALUES (1571, 'B01 VFD error', '2023-12-07 16:27:23', '2023-12-07 16:27:24');
INSERT INTO `alarmmg` VALUES (1572, 'A01 VFD error', '2023-12-07 16:27:23', '2023-12-07 16:27:24');
INSERT INTO `alarmmg` VALUES (1573, 'A01 servo travel error', '2023-12-07 16:28:02', '2023-12-07 16:28:22');
INSERT INTO `alarmmg` VALUES (1574, 'A02 servo travel error', '2023-12-07 16:28:02', '2023-12-07 16:28:22');
INSERT INTO `alarmmg` VALUES (1575, 'A01 conveyor right safety alarm', '2023-12-07 16:28:02', '2023-12-07 16:34:37');
INSERT INTO `alarmmg` VALUES (1576, 'A02 servo turn error', '2023-12-07 16:28:22', '2023-12-07 16:28:23');
INSERT INTO `alarmmg` VALUES (1577, 'A01 servo turn error', '2023-12-07 16:34:41', '2023-12-07 16:39:08');
INSERT INTO `alarmmg` VALUES (1578, 'A01 servo turn error', '2023-12-07 16:39:22', '2023-12-07 16:40:18');
INSERT INTO `alarmmg` VALUES (1579, 'A02 servo turn error', '2023-12-07 16:39:22', '2023-12-07 16:40:18');
INSERT INTO `alarmmg` VALUES (1580, 'A02 servo travel error', '2023-12-07 16:39:49', '2023-12-07 16:40:16');
INSERT INTO `alarmmg` VALUES (1581, 'A01 servo travel error', '2023-12-07 16:39:52', '2023-12-07 16:40:16');
INSERT INTO `alarmmg` VALUES (1582, 'A01 conveyor right safety alarm', '2023-12-07 16:44:24', '2023-12-07 16:44:27');
INSERT INTO `alarmmg` VALUES (1583, 'A01 conveyor right safety alarm', '2023-12-07 16:44:36', '2023-12-07 16:44:39');
INSERT INTO `alarmmg` VALUES (1584, '1# buffer safety alarm', '2023-12-07 16:44:37', '2023-12-07 16:46:27');
INSERT INTO `alarmmg` VALUES (1585, 'A01 servo turn error', '2023-12-07 16:44:58', '2023-12-07 16:45:31');
INSERT INTO `alarmmg` VALUES (1586, 'A02 servo turn error', '2023-12-07 16:44:58', '2023-12-07 16:45:32');
INSERT INTO `alarmmg` VALUES (1587, 'A01 servo travel error', '2023-12-07 16:45:25', '2023-12-07 16:45:31');
INSERT INTO `alarmmg` VALUES (1588, 'A02 servo travel error', '2023-12-07 16:45:25', '2023-12-07 16:45:31');
INSERT INTO `alarmmg` VALUES (1589, 'A01 conveyor right safety alarm', '2023-12-07 16:45:25', '2023-12-07 16:46:27');
INSERT INTO `alarmmg` VALUES (1590, 'A01 servo turn error', '2023-12-07 16:46:30', '2023-12-07 16:47:59');
INSERT INTO `alarmmg` VALUES (1591, 'A01 servo turn error', '2023-12-07 16:48:00', '2023-12-07 16:48:46');
INSERT INTO `alarmmg` VALUES (1592, 'A02 servo turn error', '2023-12-07 16:48:00', '2023-12-07 16:48:46');
INSERT INTO `alarmmg` VALUES (1593, 'A01 servo travel error', '2023-12-07 16:48:32', '2023-12-07 16:48:34');
INSERT INTO `alarmmg` VALUES (1594, 'A02 servo travel error', '2023-12-07 16:48:32', '2023-12-07 16:48:34');
INSERT INTO `alarmmg` VALUES (1595, 'A01 conveyor right safety alarm', '2023-12-07 16:50:42', '2023-12-07 16:50:44');
INSERT INTO `alarmmg` VALUES (1596, 'A01 conveyor right safety alarm', '2023-12-07 16:50:53', '2023-12-07 16:50:56');
INSERT INTO `alarmmg` VALUES (1597, 'B01 VFD error', '2023-12-07 16:50:54', '2023-12-07 16:50:56');
INSERT INTO `alarmmg` VALUES (1598, '1# buffer safety alarm', '2023-12-07 16:50:54', '2023-12-07 17:01:21');
INSERT INTO `alarmmg` VALUES (1599, 'A01 servo turn error', '2023-12-07 16:51:07', '2023-12-07 16:59:23');
INSERT INTO `alarmmg` VALUES (1600, 'A02 servo turn error', '2023-12-07 16:51:07', '2023-12-07 16:59:23');
INSERT INTO `alarmmg` VALUES (1601, 'A01 servo travel error', '2023-12-07 16:51:36', '2023-12-07 16:59:23');
INSERT INTO `alarmmg` VALUES (1602, 'A01 conveyor right safety alarm', '2023-12-07 16:51:36', '2023-12-07 17:01:21');
INSERT INTO `alarmmg` VALUES (1603, 'A02 servo turn error', '2023-12-08 08:37:43', '2023-12-08 08:51:23');
INSERT INTO `alarmmg` VALUES (1604, 'A01 servo travel error', '2023-12-08 08:37:43', '2023-12-08 08:51:23');
INSERT INTO `alarmmg` VALUES (1605, 'A02 servo travel error', '2023-12-08 08:37:43', '2023-12-08 08:51:23');
INSERT INTO `alarmmg` VALUES (1606, 'A01 conveyor right safety alarm', '2023-12-08 08:58:27', '2023-12-08 08:58:30');
INSERT INTO `alarmmg` VALUES (1607, 'A01 conveyor right safety alarm', '2023-12-08 08:58:39', '2023-12-08 08:58:42');
INSERT INTO `alarmmg` VALUES (1608, '1# buffer safety alarm', '2023-12-08 08:58:39', '2023-12-08 09:00:30');
INSERT INTO `alarmmg` VALUES (1609, 'B01 VFD error', '2023-12-08 08:58:40', '2023-12-08 08:58:42');
INSERT INTO `alarmmg` VALUES (1610, 'A01 VFD error', '2023-12-08 08:58:40', '2023-12-08 08:58:42');
INSERT INTO `alarmmg` VALUES (1611, 'A01 servo turn error', '2023-12-08 08:58:52', '2023-12-08 08:59:36');
INSERT INTO `alarmmg` VALUES (1612, 'A02 servo turn error', '2023-12-08 08:58:52', '2023-12-08 08:59:36');
INSERT INTO `alarmmg` VALUES (1613, 'A01 servo travel error', '2023-12-08 08:59:19', '2023-12-08 08:59:36');
INSERT INTO `alarmmg` VALUES (1614, 'A01 conveyor right safety alarm', '2023-12-08 08:59:19', '2023-12-08 09:00:28');
INSERT INTO `alarmmg` VALUES (1615, 'A02 servo travel error', '2023-12-08 08:59:22', '2023-12-08 08:59:36');
INSERT INTO `alarmmg` VALUES (1616, 'A01 conveyor right safety alarm', '2023-12-08 09:02:34', '2023-12-08 09:02:37');
INSERT INTO `alarmmg` VALUES (1617, 'A01 conveyor right safety alarm', '2023-12-08 09:02:46', '2023-12-08 09:02:48');
INSERT INTO `alarmmg` VALUES (1618, 'A01 servo turn error', '2023-12-08 09:03:01', '2023-12-08 09:03:42');
INSERT INTO `alarmmg` VALUES (1619, 'A02 servo turn error', '2023-12-08 09:03:01', '2023-12-08 09:03:31');
INSERT INTO `alarmmg` VALUES (1620, 'A02 servo travel error', '2023-12-08 09:03:25', '2023-12-08 09:03:31');
INSERT INTO `alarmmg` VALUES (1621, 'A01 servo travel error', '2023-12-08 09:03:28', '2023-12-08 09:03:31');
INSERT INTO `alarmmg` VALUES (1622, 'A01 conveyor right safety alarm', '2023-12-08 09:03:28', '2023-12-08 09:04:06');
INSERT INTO `alarmmg` VALUES (1623, 'A02 conveyor Left safety alarm', '2023-12-08 09:06:48', '2023-12-08 09:06:50');
INSERT INTO `alarmmg` VALUES (1624, '2# buffer safety alarm', '2023-12-08 09:06:48', '2023-12-08 09:06:50');
INSERT INTO `alarmmg` VALUES (1625, 'A02 conveyor Left safety alarm', '2023-12-08 09:07:18', '2023-12-08 09:07:21');
INSERT INTO `alarmmg` VALUES (1626, 'D03 VFD error', '2023-12-08 09:07:20', '2023-12-08 09:07:21');
INSERT INTO `alarmmg` VALUES (1627, 'A02 VFD error', '2023-12-08 09:07:20', '2023-12-08 09:07:21');
INSERT INTO `alarmmg` VALUES (1628, 'A01 servo turn error', '2023-12-08 09:07:53', '2023-12-08 09:08:10');
INSERT INTO `alarmmg` VALUES (1629, 'A02 servo turn error', '2023-12-08 09:07:53', '2023-12-08 09:08:08');
INSERT INTO `alarmmg` VALUES (1630, 'A01 servo travel error', '2023-12-08 09:08:01', '2023-12-08 09:08:08');
INSERT INTO `alarmmg` VALUES (1631, 'A02 conveyor Left safety alarm', '2023-12-08 09:08:01', '2023-12-08 09:11:19');
INSERT INTO `alarmmg` VALUES (1632, 'A02 servo travel error', '2023-12-08 09:08:03', '2023-12-08 09:08:08');
INSERT INTO `alarmmg` VALUES (1633, 'A02 conveyor Left safety alarm', '2023-12-08 09:16:57', '2023-12-08 09:17:00');
INSERT INTO `alarmmg` VALUES (1634, 'A02 conveyor Left safety alarm', '2023-12-08 09:17:27', '2023-12-08 09:17:30');
INSERT INTO `alarmmg` VALUES (1635, 'A01 servo turn error', '2023-12-08 09:17:54', '2023-12-08 09:18:23');
INSERT INTO `alarmmg` VALUES (1636, 'A02 servo turn error', '2023-12-08 09:17:54', '2023-12-08 09:18:14');
INSERT INTO `alarmmg` VALUES (1637, 'A02 servo travel error', '2023-12-08 09:18:10', '2023-12-08 09:18:14');
INSERT INTO `alarmmg` VALUES (1638, 'A02 conveyor Left safety alarm', '2023-12-08 09:18:10', '2023-12-08 09:18:37');
INSERT INTO `alarmmg` VALUES (1639, 'A01 servo travel error', '2023-12-08 09:18:12', '2023-12-08 09:18:14');
INSERT INTO `alarmmg` VALUES (1640, 'A02 servo turn error', '2023-12-08 09:18:15', '2023-12-08 09:18:18');
INSERT INTO `alarmmg` VALUES (1641, 'A01 conveyor right safety alarm', '2023-12-08 09:37:04', '2023-12-08 09:37:08');
INSERT INTO `alarmmg` VALUES (1642, 'A01 servo turn error', '2023-12-08 09:45:50', '2023-12-08 09:46:38');
INSERT INTO `alarmmg` VALUES (1643, 'A02 servo turn error', '2023-12-08 09:45:50', '2023-12-08 09:46:38');
INSERT INTO `alarmmg` VALUES (1644, 'A02 servo travel error', '2023-12-08 09:46:17', '2023-12-08 09:46:37');
INSERT INTO `alarmmg` VALUES (1645, 'A01 servo travel error', '2023-12-08 09:46:25', '2023-12-08 09:46:37');
INSERT INTO `alarmmg` VALUES (1646, 'More glass than known', '2023-12-08 09:47:13', '2023-12-08 09:57:18');
INSERT INTO `alarmmg` VALUES (1647, 'A01 servo turn error', '2023-12-08 09:57:18', '2023-12-08 09:57:22');
INSERT INTO `alarmmg` VALUES (1648, 'A02 servo turn error', '2023-12-08 09:57:18', '2023-12-08 09:57:22');
INSERT INTO `alarmmg` VALUES (1649, 'A01 servo turn error', '2023-12-08 09:57:43', '2023-12-08 09:58:47');
INSERT INTO `alarmmg` VALUES (1650, 'A02 servo turn error', '2023-12-08 09:57:43', '2023-12-08 09:58:47');
INSERT INTO `alarmmg` VALUES (1651, 'A01 servo travel error', '2023-12-08 09:58:14', '2023-12-08 09:58:45');
INSERT INTO `alarmmg` VALUES (1652, 'less glass than known', '2023-12-08 10:33:05', '2023-12-08 10:40:57');
INSERT INTO `alarmmg` VALUES (1653, 'D01 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1654, 'D02 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1655, 'D03 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1656, 'D04 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1657, 'D05 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1658, 'D06 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1659, 'B01 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1660, 'B02 VFD error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1661, 'A01 servo travel error', '2023-12-08 10:41:52', '2023-12-08 10:42:20');
INSERT INTO `alarmmg` VALUES (1662, 'A02 servo travel error', '2023-12-08 10:41:52', '2023-12-08 10:42:21');
INSERT INTO `alarmmg` VALUES (1663, 'A01 servo turn error', '2023-12-08 10:42:29', '2023-12-08 10:43:17');
INSERT INTO `alarmmg` VALUES (1664, 'A02 servo turn error', '2023-12-08 10:42:29', '2023-12-08 10:43:17');
INSERT INTO `alarmmg` VALUES (1665, 'A02 servo travel error', '2023-12-08 10:43:01', '2023-12-08 10:43:16');
INSERT INTO `alarmmg` VALUES (1666, 'less glass than known', '2023-12-08 10:46:25', '2023-12-08 10:49:17');
INSERT INTO `alarmmg` VALUES (1667, 'A01 conveyor right safety alarm', '2023-12-08 11:02:49', '2023-12-08 11:02:51');
INSERT INTO `alarmmg` VALUES (1668, 'A01 conveyor right safety alarm', '2023-12-08 11:03:01', '2023-12-08 11:03:03');
INSERT INTO `alarmmg` VALUES (1669, '2# buffer safety alarm', '2023-12-08 11:03:03', '2023-12-08 11:10:41');
INSERT INTO `alarmmg` VALUES (1670, 'More glass than known', '2023-12-08 11:15:18', '2023-12-08 11:17:01');
INSERT INTO `alarmmg` VALUES (1671, '1# buffer safety alarm', '2023-12-08 11:16:30', '2023-12-08 11:16:31');
INSERT INTO `alarmmg` VALUES (1672, 'A01 servo turn error', '2023-12-08 11:17:02', '2023-12-08 11:18:24');
INSERT INTO `alarmmg` VALUES (1673, 'A02 servo turn error', '2023-12-08 11:17:02', '2023-12-08 11:18:24');
INSERT INTO `alarmmg` VALUES (1674, 'A01 servo travel error', '2023-12-08 11:17:34', '2023-12-08 11:18:23');
INSERT INTO `alarmmg` VALUES (1675, 'A02 servo travel error', '2023-12-08 11:17:34', '2023-12-08 11:18:23');
INSERT INTO `alarmmg` VALUES (1676, 'A01 conveyor right safety alarm', '2023-12-08 11:21:07', '2023-12-08 11:21:10');
INSERT INTO `alarmmg` VALUES (1677, 'More glass than known', '2023-12-08 11:21:14', '2023-12-08 11:22:33');
INSERT INTO `alarmmg` VALUES (1678, 'A01 servo turn error', '2023-12-08 13:51:58', '2023-12-08 13:52:37');
INSERT INTO `alarmmg` VALUES (1679, 'A02 servo turn error', '2023-12-08 13:51:58', '2023-12-08 13:52:37');
INSERT INTO `alarmmg` VALUES (1680, 'A01 servo travel error', '2023-12-08 13:52:26', '2023-12-08 13:52:31');
INSERT INTO `alarmmg` VALUES (1681, 'A02 servo travel error', '2023-12-08 13:52:26', '2023-12-08 13:52:31');
INSERT INTO `alarmmg` VALUES (1682, 'A01 servo turn error', '2023-12-08 13:56:08', '2023-12-08 13:56:43');
INSERT INTO `alarmmg` VALUES (1683, 'A02 servo turn error', '2023-12-08 13:56:08', '2023-12-08 13:56:43');
INSERT INTO `alarmmg` VALUES (1684, 'A02 servo travel error', '2023-12-08 13:56:32', '2023-12-08 13:56:35');
INSERT INTO `alarmmg` VALUES (1685, 'A01 servo turn error', '2023-12-08 14:02:20', '2023-12-08 14:02:33');
INSERT INTO `alarmmg` VALUES (1686, 'A02 servo turn error', '2023-12-08 14:02:20', '2023-12-08 14:02:29');
INSERT INTO `alarmmg` VALUES (1687, 'A01 servo travel error', '2023-12-08 14:02:22', '2023-12-08 14:02:27');
INSERT INTO `alarmmg` VALUES (1688, 'A01 conveyor right safety alarm', '2023-12-08 14:04:06', '2023-12-08 14:04:09');
INSERT INTO `alarmmg` VALUES (1689, 'less glass than known', '2023-12-08 14:12:29', '2023-12-08 14:13:51');
INSERT INTO `alarmmg` VALUES (1690, 'A01 servo travel error', '2023-12-08 14:13:45', '2023-12-08 14:13:51');
INSERT INTO `alarmmg` VALUES (1691, 'A02 servo travel error', '2023-12-08 14:13:45', '2023-12-08 14:13:51');
INSERT INTO `alarmmg` VALUES (1692, 'A01 servo turn error', '2023-12-08 14:13:52', '2023-12-08 14:14:03');
INSERT INTO `alarmmg` VALUES (1693, 'A02 servo turn error', '2023-12-08 14:13:52', '2023-12-08 14:14:03');
INSERT INTO `alarmmg` VALUES (1694, '1# buffer safety alarm', '2023-12-08 14:14:57', '2023-12-08 14:15:06');
INSERT INTO `alarmmg` VALUES (1695, 'A01 servo turn error', '2023-12-08 14:15:58', '2023-12-08 14:16:30');
INSERT INTO `alarmmg` VALUES (1696, 'A02 servo turn error', '2023-12-08 14:15:58', '2023-12-08 14:16:31');
INSERT INTO `alarmmg` VALUES (1697, 'A01 servo travel error', '2023-12-08 14:16:17', '2023-12-08 14:16:18');
INSERT INTO `alarmmg` VALUES (1698, 'A02 servo travel error', '2023-12-08 14:16:17', '2023-12-08 14:16:18');
INSERT INTO `alarmmg` VALUES (1699, 'A01 conveyor right safety alarm', '2023-12-08 14:20:24', '2023-12-08 14:20:26');
INSERT INTO `alarmmg` VALUES (1700, 'less glass than known', '2023-12-08 14:20:37', '2023-12-08 14:21:58');
INSERT INTO `alarmmg` VALUES (1701, 'A01 servo turn error', '2023-12-08 14:21:58', '2023-12-08 14:22:34');
INSERT INTO `alarmmg` VALUES (1702, 'A02 servo turn error', '2023-12-08 14:21:58', '2023-12-08 14:22:37');
INSERT INTO `alarmmg` VALUES (1703, 'A01 servo travel error', '2023-12-08 14:22:25', '2023-12-08 14:22:33');
INSERT INTO `alarmmg` VALUES (1704, 'A02 servo travel error', '2023-12-08 14:22:27', '2023-12-08 14:22:33');
INSERT INTO `alarmmg` VALUES (1705, 'less glass than known', '2023-12-08 14:28:18', '2023-12-08 14:29:07');
INSERT INTO `alarmmg` VALUES (1706, 'A01 servo turn error', '2023-12-08 14:29:08', '2023-12-08 14:30:26');
INSERT INTO `alarmmg` VALUES (1707, 'A02 servo turn error', '2023-12-08 14:29:08', '2023-12-08 14:30:26');
INSERT INTO `alarmmg` VALUES (1708, 'less glass than known', '2023-12-08 14:33:25', '2023-12-08 14:33:42');
INSERT INTO `alarmmg` VALUES (1709, 'less glass than known', '2023-12-08 14:33:43', '2023-12-08 14:33:46');
INSERT INTO `alarmmg` VALUES (1710, 'A01 servo turn error', '2023-12-08 14:33:47', '2023-12-08 14:34:27');
INSERT INTO `alarmmg` VALUES (1711, 'A02 servo turn error', '2023-12-08 14:33:47', '2023-12-08 14:34:27');
INSERT INTO `alarmmg` VALUES (1712, 'A02 servo travel error', '2023-12-08 14:34:21', '2023-12-08 14:34:24');
INSERT INTO `alarmmg` VALUES (1713, 'A01 servo travel error', '2023-12-08 14:34:23', '2023-12-08 14:34:24');
INSERT INTO `alarmmg` VALUES (1714, 'less glass than known', '2023-12-08 14:35:31', '2023-12-08 14:36:20');
INSERT INTO `alarmmg` VALUES (1715, 'A01 servo turn error', '2023-12-08 14:36:20', '2023-12-08 14:37:04');
INSERT INTO `alarmmg` VALUES (1716, 'A02 servo turn error', '2023-12-08 14:36:20', '2023-12-08 14:37:04');
INSERT INTO `alarmmg` VALUES (1717, 'A01 servo turn error', '2023-12-08 14:40:35', '2023-12-08 14:41:16');
INSERT INTO `alarmmg` VALUES (1718, 'A02 servo turn error', '2023-12-08 14:40:35', '2023-12-08 14:41:16');
INSERT INTO `alarmmg` VALUES (1719, 'A01 servo travel error', '2023-12-08 14:41:05', '2023-12-08 14:41:08');
INSERT INTO `alarmmg` VALUES (1720, 'less glass than known', '2023-12-08 15:03:34', '2023-12-08 15:04:26');
INSERT INTO `alarmmg` VALUES (1721, 'A02 conveyor Left safety alarm', '2023-12-08 15:10:39', '2023-12-08 15:10:42');
INSERT INTO `alarmmg` VALUES (1722, '2# buffer safety alarm', '2023-12-08 15:10:39', '2023-12-08 15:10:42');
INSERT INTO `alarmmg` VALUES (1723, 'less glass than known', '2023-12-08 15:10:51', '2023-12-08 15:12:08');
INSERT INTO `alarmmg` VALUES (1724, 'A01 servo turn error', '2023-12-08 15:12:30', '2023-12-08 15:13:20');
INSERT INTO `alarmmg` VALUES (1725, 'A02 servo turn error', '2023-12-08 15:12:30', '2023-12-08 15:13:01');
INSERT INTO `alarmmg` VALUES (1726, 'A02 servo turn error', '2023-12-08 15:13:02', '2023-12-08 15:13:20');
INSERT INTO `alarmmg` VALUES (1727, 'A02 conveyor Left safety alarm', '2023-12-08 15:14:13', '2023-12-08 15:14:55');
INSERT INTO `alarmmg` VALUES (1728, 'More glass than known', '2023-12-08 15:14:14', '2023-12-08 15:16:56');
INSERT INTO `alarmmg` VALUES (1729, 'B01 VFD error', '2023-12-08 15:14:54', '2023-12-08 15:14:55');
INSERT INTO `alarmmg` VALUES (1730, '1# buffer safety alarm', '2023-12-08 15:16:13', '2023-12-08 15:16:24');
INSERT INTO `alarmmg` VALUES (1731, 'A01 servo turn error', '2023-12-08 15:16:56', '2023-12-08 15:18:54');
INSERT INTO `alarmmg` VALUES (1732, 'A02 servo turn error', '2023-12-08 15:16:56', '2023-12-08 15:18:54');
INSERT INTO `alarmmg` VALUES (1733, 'A01 servo travel error', '2023-12-08 15:17:29', '2023-12-08 15:18:54');
INSERT INTO `alarmmg` VALUES (1734, 'A02 servo travel error', '2023-12-08 15:17:29', '2023-12-08 15:18:54');
INSERT INTO `alarmmg` VALUES (1735, 'A01 servo turn error', '2023-12-08 15:20:41', '2023-12-08 15:21:22');
INSERT INTO `alarmmg` VALUES (1736, 'A02 servo turn error', '2023-12-08 15:20:41', '2023-12-08 15:21:22');
INSERT INTO `alarmmg` VALUES (1737, 'A02 servo travel error', '2023-12-08 15:21:11', '2023-12-08 15:21:14');
INSERT INTO `alarmmg` VALUES (1738, 'A01 servo turn error', '2023-12-08 15:23:23', '2023-12-08 15:24:02');
INSERT INTO `alarmmg` VALUES (1739, 'A02 servo turn error', '2023-12-08 15:23:23', '2023-12-08 15:24:01');
INSERT INTO `alarmmg` VALUES (1740, 'A01 servo travel error', '2023-12-08 15:23:55', '2023-12-08 15:23:59');
INSERT INTO `alarmmg` VALUES (1741, 'A02 servo turn error', '2023-12-08 15:24:02', '2023-12-08 15:24:03');
-- ----------------------------
-- Table structure for car_position
@@ -208,7 +471,7 @@
  `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品分类' ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品分类' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of category
@@ -252,7 +515,7 @@
  `last_product_count_date` date NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `device_id_idx`(`device_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 46 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of device
@@ -283,7 +546,7 @@
  `height` decimal(10, 2) NULL DEFAULT NULL,
  `Conversionrate` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of glass
@@ -325,7 +588,7 @@
INSERT INTO `menu_list` VALUES (51, 2, '设备状态', NULL, 51, 'Electrical/State', 1, '2023-08-25 13:29:13', '2023-09-11 17:07:08');
INSERT INTO `menu_list` VALUES (52, 2, '开关控制', NULL, 52, 'Electrical/Action', 1, '2023-08-25 13:29:18', '2023-09-12 17:02:54');
INSERT INTO `menu_list` VALUES (53, 2, '参数下发', NULL, 53, 'Electrical/Servomanual', 1, '2023-08-25 13:29:22', '2023-12-07 09:10:42');
INSERT INTO `menu_list` VALUES (54, 2, 'IO状态', NULL, 53, 'Electrical/Sign', 1, '2023-08-25 13:29:22', '2023-09-11 17:06:16');
INSERT INTO `menu_list` VALUES (54, 2, 'IO状态', NULL, 54, 'Electrical/Sign', 1, '2023-08-25 13:29:22', '2023-12-08 11:35:20');
-- ----------------------------
-- Table structure for north_glass_buffer1
@@ -350,7 +613,7 @@
  `datecreated` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `FrameBarcode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1393 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 1394 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of north_glass_buffer1
@@ -1095,7 +1358,7 @@
  `order_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单号',
  `state` int NULL DEFAULT NULL COMMENT '状态(0:按此订单号出片,1结束出片)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of order_out
@@ -1117,7 +1380,7 @@
  `sequence` int NULL DEFAULT NULL COMMENT '序列',
  `position` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '铝框摆放',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 111 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of out_slice
@@ -1139,7 +1402,7 @@
  `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 32 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '权限' ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '权限' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of permission
@@ -1167,6 +1430,7 @@
INSERT INTO `permission` VALUES (29, 'alarm:select', '报警信息查询', 1, '2021-11-28 15:07:36', '2023-08-28 15:16:24');
INSERT INTO `permission` VALUES (30, 'alarm:add', '报警信息添加', 1, '2023-08-24 08:48:53', '2023-08-28 15:16:27');
INSERT INTO `permission` VALUES (31, 'alarm:update', '报警信息修改', 1, '2023-08-24 08:49:23', '2023-08-28 15:16:29');
INSERT INTO `permission` VALUES (32, 'hom:ManuallyInfeedGlass', '上片信息', 1, '2023-12-08 11:07:18', '2023-12-08 11:07:18');
INSERT INTO `permission` VALUES (33, 'home:OutingQueue', '出片队列', 1, '2023-12-05 08:52:57', '2023-12-05 15:03:51');
INSERT INTO `permission` VALUES (34, 'home:OrderInfo', '玻璃信息', 1, '2023-12-05 08:53:18', '2023-12-05 08:53:30');
INSERT INTO `permission` VALUES (35, 'home:CageDetails', '理片笼信息', 1, '2023-12-05 14:52:28', '2023-12-05 14:52:43');
@@ -1194,8 +1458,8 @@
-- ----------------------------
-- Records of queue
-- ----------------------------
INSERT INTO `queue` VALUES (1, 'X21942610302GV', '123456', '210', '103', 610.0000, 1015.0000, 36.8125, 22.5625, 1, 0, '2023-12-07 11:21:57');
INSERT INTO `queue` VALUES (2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, 0, '2023-12-06 16:32:20');
INSERT INTO `queue` VALUES (1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 0, '2023-12-08 14:03:55');
INSERT INTO `queue` VALUES (2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, 0, '2023-12-08 14:04:09');
-- ----------------------------
-- Table structure for role
@@ -1231,52 +1495,55 @@
  `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 57 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 62 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of role_menu_list
-- ----------------------------
INSERT INTO `role_menu_list` VALUES (1, 1, 1, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (2, 1, 2, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (3, 1, 3, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (4, 1, 4, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (5, 1, 5, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (6, 1, 6, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (7, 1, 7, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (8, 1, 8, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (9, 1, 9, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (10, 1, 10, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (11, 1, 11, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (12, 1, 12, 1, '2021-11-28 15:10:03', '2021-11-28 15:10:03');
INSERT INTO `role_menu_list` VALUES (19, 1, 50, 1, '2023-08-24 09:13:00', '2023-08-24 09:13:00');
INSERT INTO `role_menu_list` VALUES (20, 1, 49, 1, '2023-08-24 10:08:38', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (21, 1, 51, 1, '2023-08-24 10:08:56', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (22, 1, 52, 1, '2023-08-24 10:08:56', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (23, 1, 53, 1, '2023-08-24 10:08:56', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (25, 1, 60, 1, '2023-08-25 13:05:53', '2023-08-25 13:05:53');
INSERT INTO `role_menu_list` VALUES (26, 1, 1, 1, '2023-08-28 14:29:17', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (27, 1, 7, 1, '2023-08-28 15:11:09', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (28, 1, 2, 1, '2023-08-28 15:14:19', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (29, 1, 49, 1, '2023-08-28 15:14:27', '2023-08-28 15:39:54');
INSERT INTO `role_menu_list` VALUES (31, 2, 2, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (32, 2, 3, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (33, 2, 4, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (37, 2, 8, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (38, 2, 9, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (39, 2, 10, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (42, 2, 50, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (43, 2, 49, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (44, 2, 51, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (45, 2, 52, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (46, 2, 53, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (47, 2, 60, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (50, 2, 2, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (51, 2, 49, 1, '2023-08-28 15:14:27', '2023-08-28 15:53:34');
INSERT INTO `role_menu_list` VALUES (52, 2, 1, 1, '2023-08-30 16:28:57', '2023-08-30 16:28:57');
INSERT INTO `role_menu_list` VALUES (53, 2, 7, 1, '2023-08-30 16:29:05', '2023-08-30 16:29:05');
INSERT INTO `role_menu_list` VALUES (54, 1, 9, 1, '2023-09-08 10:55:54', '2023-09-08 11:02:55');
INSERT INTO `role_menu_list` VALUES (55, 1, 8, 1, '2023-09-08 10:56:45', '2023-09-08 11:01:43');
INSERT INTO `role_menu_list` VALUES (56, 2, 54, 1, '2023-09-11 17:09:17', '2023-09-11 17:09:24');
INSERT INTO `role_menu_list` VALUES (1, 1, 1, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (2, 1, 2, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (3, 1, 3, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (4, 1, 4, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (5, 1, 5, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (6, 1, 6, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (7, 1, 7, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (8, 1, 8, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (9, 1, 9, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (10, 1, 10, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (11, 1, 11, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (12, 1, 12, 1, '2021-11-28 15:10:03', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (19, 1, 50, 1, '2023-08-24 09:13:00', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (20, 1, 49, 1, '2023-08-24 10:08:38', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (21, 1, 51, 1, '2023-08-24 10:08:56', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (22, 1, 52, 1, '2023-08-24 10:08:56', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (23, 1, 53, 1, '2023-08-24 10:08:56', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (25, 1, 60, 1, '2023-08-25 13:05:53', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (26, 1, 1, 1, '2023-08-28 14:29:17', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (27, 1, 7, 1, '2023-08-28 15:11:09', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (29, 1, 49, 1, '2023-08-28 15:14:27', '2023-12-08 11:55:22');
INSERT INTO `role_menu_list` VALUES (31, 2, 2, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (32, 2, 3, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (33, 2, 4, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (37, 2, 8, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (38, 2, 9, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (39, 2, 10, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (42, 2, 50, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (43, 2, 49, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (44, 2, 51, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (45, 2, 52, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (46, 2, 53, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (47, 2, 60, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (51, 2, 49, 1, '2023-08-28 15:14:27', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (52, 2, 1, 1, '2023-08-30 16:28:57', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (53, 2, 7, 1, '2023-08-30 16:29:05', '2023-12-08 14:18:20');
INSERT INTO `role_menu_list` VALUES (54, 1, 9, 1, '2023-09-08 10:55:54', '2023-12-08 11:55:27');
INSERT INTO `role_menu_list` VALUES (55, 1, 8, 1, '2023-09-08 10:56:45', '2023-12-08 11:55:27');
INSERT INTO `role_menu_list` VALUES (56, 2, 54, 1, '2023-09-11 17:09:17', '2023-12-08 11:38:39');
INSERT INTO `role_menu_list` VALUES (57, 5, 8, 1, '2023-12-08 11:32:37', '2023-12-08 11:48:14');
INSERT INTO `role_menu_list` VALUES (58, 5, 9, 1, '2023-12-08 11:32:44', '2023-12-08 11:48:14');
INSERT INTO `role_menu_list` VALUES (59, 5, 49, 1, '2023-12-08 11:33:13', '2023-12-08 11:48:14');
INSERT INTO `role_menu_list` VALUES (60, 5, 1, 1, '2023-12-08 11:47:23', '2023-12-08 11:48:14');
INSERT INTO `role_menu_list` VALUES (61, 5, 7, 1, '2023-12-08 11:47:34', '2023-12-08 11:48:14');
-- ----------------------------
-- Table structure for role_permission
@@ -1291,62 +1558,90 @@
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色权限' ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 108 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色权限' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of role_permission
-- ----------------------------
INSERT INTO `role_permission` VALUES (1, 1, 1, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:40', 'admin');
INSERT INTO `role_permission` VALUES (2, 1, 2, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (3, 1, 3, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (7, 1, 7, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (8, 1, 8, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (9, 1, 9, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (10, 1, 10, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (11, 1, 11, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (12, 1, 12, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (13, 1, 13, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (16, 1, 16, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (17, 1, 17, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (18, 1, 18, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (19, 1, 19, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (20, 1, 20, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (22, 1, 22, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (25, 1, 25, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:54', 'admin');
INSERT INTO `role_permission` VALUES (26, 1, 26, 0, '2021-11-28 15:07:54', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (27, 1, 27, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (28, 1, 28, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (37, 2, 25, 1, '2021-11-28 16:30:57', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (38, 2, 26, 1, '2021-11-28 16:30:57', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (39, 2, 27, 1, '2021-11-28 16:30:57', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (40, 2, 28, 1, '2021-11-28 16:32:35', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (41, 2, 22, 1, '2021-11-28 19:57:35', '2023-12-05 15:46:25', 'user1');
INSERT INTO `role_permission` VALUES (42, 1, 30, 1, '2023-08-24 08:55:34', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (43, 1, 29, 1, '2023-08-24 08:56:15', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (44, 1, 31, 0, '2023-08-24 08:56:23', '2023-12-05 15:46:55', 'admin');
INSERT INTO `role_permission` VALUES (53, 2, 2, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (54, 2, 3, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (56, 2, 8, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (57, 2, 9, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (58, 2, 10, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (61, 2, 13, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (62, 2, 16, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (63, 2, 17, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (64, 2, 18, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (65, 2, 19, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (66, 2, 20, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (67, 2, 22, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (68, 2, 25, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (69, 2, 26, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (70, 2, 27, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (71, 2, 28, 1, '2021-11-28 15:07:54', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (72, 2, 30, 1, '2023-08-24 08:55:34', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (73, 2, 29, 1, '2023-08-24 08:56:15', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (74, 2, 1, 1, '2023-08-30 16:29:46', '2023-12-05 15:46:33', 'user1');
INSERT INTO `role_permission` VALUES (1, 1, 1, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (2, 1, 2, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (3, 1, 3, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (7, 1, 7, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (8, 1, 8, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (9, 1, 9, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (10, 1, 10, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (11, 1, 11, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (12, 1, 12, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (13, 1, 13, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (16, 1, 16, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (17, 1, 17, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (18, 1, 18, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (19, 1, 19, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (20, 1, 20, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (22, 1, 22, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (25, 1, 25, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (26, 1, 26, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (27, 1, 27, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (28, 1, 28, 1, '2021-11-28 15:07:54', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (37, 2, 25, 1, '2021-11-28 16:30:57', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (38, 2, 26, 1, '2021-11-28 16:30:57', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (39, 2, 27, 1, '2021-11-28 16:30:57', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (40, 2, 28, 1, '2021-11-28 16:32:35', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (41, 2, 22, 1, '2021-11-28 19:57:35', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (42, 1, 30, 1, '2023-08-24 08:55:34', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (43, 1, 29, 1, '2023-08-24 08:56:15', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (44, 1, 31, 1, '2023-08-24 08:56:23', '2023-12-08 11:53:19', NULL);
INSERT INTO `role_permission` VALUES (53, 2, 2, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (54, 2, 3, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (56, 2, 8, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (57, 2, 9, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (58, 2, 10, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (61, 2, 13, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (62, 2, 16, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (63, 2, 17, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (64, 2, 18, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (65, 2, 19, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (66, 2, 20, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (67, 2, 22, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (68, 2, 25, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (69, 2, 26, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (70, 2, 27, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (71, 2, 28, 1, '2021-11-28 15:07:54', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (72, 2, 30, 1, '2023-08-24 08:55:34', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (73, 2, 29, 1, '2023-08-24 08:56:15', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (74, 2, 1, 1, '2023-08-30 16:29:46', '2023-12-08 14:19:11', NULL);
INSERT INTO `role_permission` VALUES (75, 1, 32, 1, '2023-12-05 08:54:59', '2023-12-05 08:54:59', NULL);
INSERT INTO `role_permission` VALUES (76, 1, 33, 1, '2023-12-05 08:55:04', '2023-12-05 08:55:04', NULL);
INSERT INTO `role_permission` VALUES (77, 1, 34, 1, '2023-12-05 08:55:09', '2023-12-05 08:55:09', NULL);
INSERT INTO `role_permission` VALUES (78, 1, 35, 1, '2023-12-05 14:54:43', '2023-12-05 14:54:46', NULL);
INSERT INTO `role_permission` VALUES (79, 2, 33, 1, '2023-12-08 10:58:25', '2023-12-08 11:42:12', NULL);
INSERT INTO `role_permission` VALUES (80, 2, 34, 1, '2023-12-08 10:59:15', '2023-12-08 11:42:12', NULL);
INSERT INTO `role_permission` VALUES (81, 2, 35, 1, '2023-12-08 10:59:23', '2023-12-08 11:42:12', NULL);
INSERT INTO `role_permission` VALUES (82, 5, 33, 1, '2023-12-08 10:59:33', '2023-12-08 11:48:26', NULL);
INSERT INTO `role_permission` VALUES (83, 5, 34, 0, '2023-12-08 10:59:39', '2023-12-08 11:48:26', NULL);
INSERT INTO `role_permission` VALUES (84, 5, 35, 0, '2023-12-08 10:59:51', '2023-12-08 11:48:26', NULL);
INSERT INTO `role_permission` VALUES (85, 5, 32, 0, '2023-12-08 11:08:54', '2023-12-08 11:48:26', NULL);
INSERT INTO `role_permission` VALUES (86, 5, 1, 1, '2023-12-08 11:45:47', '2023-12-08 11:48:26', NULL);
INSERT INTO `role_permission` VALUES (87, 5, 7, 1, '2023-12-08 11:45:55', '2023-12-08 11:48:26', NULL);
INSERT INTO `role_permission` VALUES (89, 5, 2, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (90, 5, 3, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (91, 5, 8, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (92, 5, 9, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (93, 5, 10, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (94, 5, 13, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (95, 5, 16, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (96, 5, 17, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (97, 5, 18, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (98, 5, 19, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (99, 5, 20, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (100, 5, 22, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (101, 5, 25, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (102, 5, 26, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (103, 5, 27, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (104, 5, 28, 1, '2021-11-28 15:07:54', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (105, 5, 30, 1, '2023-08-24 08:55:34', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (106, 5, 29, 1, '2023-08-24 08:56:15', '2023-12-08 14:18:38', NULL);
INSERT INTO `role_permission` VALUES (107, 5, 1, 1, '2023-08-30 16:29:46', '2023-12-08 14:18:38', NULL);
-- ----------------------------
-- Table structure for storage_cage
@@ -1810,7 +2105,7 @@
  `cageno` int NULL DEFAULT NULL COMMENT '笼子号',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `raw_package_id1`(`raw_package_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 491 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 492 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of storage_rack
@@ -2250,7 +2545,7 @@
  `finsh_time` datetime(0) NULL DEFAULT NULL COMMENT '任务结束时间',
  `glass_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 43 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 67 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of storage_task
@@ -2281,23 +2576,15 @@
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `dianqimima` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 0, '', 0, 1, 'admin', 'b2f0c414a5ffb6944c424bc18ae3a8a0', NULL, NULL, NULL, 1, '2023-08-25 08:58:58', '2023-09-18 20:38:44', '112');
INSERT INTO `user` VALUES (2, 1, '1-', 1, 2, 'user1', 'b2f0c414a5ffb6944c424bc18ae3a8a0', 'user1@qq.com', NULL, NULL, 1, '2021-11-28 14:31:39', '2023-11-27 16:34:51', NULL);
INSERT INTO `user` VALUES (3, 1, '1-', 1, 2, 'user2', 'f403c87893db29eb71b21905b57bbd0d', 'user2@qq.com', NULL, NULL, 1, '2021-11-28 14:31:39', '2021-11-28 15:09:36', NULL);
INSERT INTO `user` VALUES (9, 1, '1-', 1, 1, 'yttttttttttt', 'b2f0c414a5ffb6944c424bc18ae3a8a0', '666@qq.com', NULL, NULL, 1, '2023-08-23 20:35:32', '2023-08-23 20:35:32', NULL);
INSERT INTO `user` VALUES (10, 1, '1-', 1, 2, '767655555', '500637c0d48b442a3be6d4fce12e0910', NULL, NULL, NULL, 1, '2023-08-23 20:42:58', '2023-08-23 20:42:58', NULL);
INSERT INTO `user` VALUES (11, 1, '1-', 1, 5, 'uiuyiuy', 'e046c4175152aa3001d2c71c5bc1aee5', '767676767tt@qq.com', NULL, NULL, 1, '2023-08-23 20:43:42', '2023-08-23 20:43:42', NULL);
INSERT INTO `user` VALUES (13, 1, '1-', 1, 2, 'user3', '500637c0d48b442a3be6d4fce12e0910', '2265557345@qq.com', NULL, NULL, 1, '2023-08-24 09:58:40', '2023-08-24 09:58:40', NULL);
INSERT INTO `user` VALUES (15, 1, '1-', 1, 2, '99999', 'b2f0c414a5ffb6944c424bc18ae3a8a0', '2267666@qq.com', NULL, NULL, 1, '2023-08-25 09:37:05', '2023-08-28 14:37:27', NULL);
INSERT INTO `user` VALUES (16, 1, '1-', 1, 2, '5656tttt', 'b2f0c414a5ffb6944c424bc18ae3a8a0', '5454@qq.com', NULL, NULL, 1, '2023-08-28 14:17:44', '2023-08-28 14:37:24', NULL);
INSERT INTO `user` VALUES (17, 1, '1-', 1, 2, '6767ttt', 'b2f0c414a5ffb6944c424bc18ae3a8a0', '225@qq.com', NULL, NULL, 1, '2023-08-28 14:20:05', '2023-08-28 14:23:53', NULL);
INSERT INTO `user` VALUES (18, 1, '1-', 1, 2, '8989ttt', 'b2f0c414a5ffb6944c424bc18ae3a8a0', '224@qq.com', NULL, NULL, 1, '2023-08-28 14:26:17', '2023-08-28 14:37:22', NULL);
INSERT INTO `user` VALUES (19, 1, '1-', 1, 5, '8080ttt', 'b2f0c414a5ffb6944c424bc18ae3a8a0', '87@qq.com', NULL, NULL, 1, '2023-08-28 14:34:39', '2023-08-29 16:03:38', NULL);
INSERT INTO `user` VALUES (2, 1, '1-', 1, 5, 'user1', 'b2f0c414a5ffb6944c424bc18ae3a8a0', 'user1@qq.com', NULL, NULL, 1, '2021-11-28 14:31:39', '2023-11-27 16:34:51', NULL);
INSERT INTO `user` VALUES (3, 1, '1-', 1, 2, 'user2', 'b2f0c414a5ffb6944c424bc18ae3a8a0', 'user2@qq.com', NULL, NULL, 1, '2021-11-28 14:31:39', '2023-12-08 11:18:52', NULL);
INSERT INTO `user` VALUES (22, 1, '1-', 1, 5, 'user3', 'b2f0c414a5ffb6944c424bc18ae3a8a0', NULL, NULL, NULL, 1, '2023-12-08 11:40:31', '2023-12-08 11:40:31', NULL);
-- ----------------------------
-- Procedure structure for Your_Stored_Procedure