wu
2024-01-05 3a59de819bb1fbefc3eb4a38fb4f76a11d19a1ae
Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes

# Conflicts:
# springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
# springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
36个文件已修改
3个文件已添加
5个文件已删除
3740 ■■■■ 已修改文件
Alarm.json 507 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/build.bat 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/api/home.js 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/AutomaticParameterSetting.json 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Manualoneposition.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Positioning1.json 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/ServoManualone.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/parameter2.json 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/layout/index.vue 348 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/main.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/AutomaticParameterSetting.vue 178 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter2.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning1.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ServoManualone.vue 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 254 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/S7control.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/device/DeviceController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/Out_slice.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/device/DeviceEntity.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/device/DeviceMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/North_Glass_Buffer1Service.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/device/DeviceService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/device/impl/DeviceServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/com/example/springboot/mapper/DeviceMapper.xml 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/sql/canadames.sql 431 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Alarm.json
New file
@@ -0,0 +1,507 @@
{
  "content": [
    {
      "name": "D01 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D02 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D03 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D04 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D05 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D06 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 VFD error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 servo turn error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 servo turn error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 servo travel error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 servo travel error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 servo travel error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 servo travel error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D01 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D01 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D02 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D02 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D03 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D03 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D04 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D04 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D05 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D05 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D06 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D06 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 IN DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 IN pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 OUT DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 OUT pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 IN DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 IN pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 OUT DEC error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 OUT pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D01 Scan glass exceeding limit",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "emergency stop alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "More glass than known",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "less glass than known",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D01 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D02 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D03 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D04 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D05 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "D06 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02 conveyor timeout alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 conveyor Left safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01 conveyor right safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 conveyor Left safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02 conveyor right safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "1# buffer safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "2# buffer safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "3# buffer safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "4# buffer safety alarm",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A01.SR right in pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "A02.SR left in pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01.SR left in pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01.SR left dec error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01.SR right dec error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B01.SR right in pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02.SR left in pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02.SR left dec error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02.SR right dec error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    }
  ],
  "address": [
    {
      "name": "DB104.0.0",
      "count": 71
    }
  ]
}
CanadaMes-ui/build.bat
New file
@@ -0,0 +1,5 @@
@echo off
echo Starting frontend development server...
cd /d %~dp0  // 切换到当前批处理脚本所在的目录
cd ..\CanadaMes-ui  // 假设CanadaMes-ui在与批处理脚本相同的目录下
npm run build
CanadaMes-ui/src/api/home.js
@@ -198,17 +198,25 @@
    })
}
export function AddOutSliceS(data) {
export function AddOutSliceS(FrameNo) {
    return request({
        url: '/home/AddOutSliceS',
        url: '/home/AddOutSliceS?FrameNo='+FrameNo,
        method: 'post',
        data
        data:""
    })
}
export function isAllowQueues(isAllowQueue,data) {
    return request({
        url: '/home/isAllowQueues?isAllowQueue=' + isAllowQueue,
        method: 'post',
        data
    })
}
export function isAllowReorderings(isAllowReordering,data) {
    return request({
        url: '/home/isAllowReorderings?isAllowReordering=' + isAllowReordering,
        method: 'post',
        data
    })
@@ -230,3 +238,10 @@
    })
}
export function FrameStateUpdate(frameno,framestate) {
    return request({
        url: '/home/FrameStateUpdate?frameno=' + frameno+'&framestate='+framestate,
        method: 'post',
        data:""
    })
}
CanadaMes-ui/src/configuration/AutomaticParameterSetting.json
@@ -10,7 +10,7 @@
      "unit": "°",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    },
    {
      "name": "A01行走低速角度",
@@ -21,7 +21,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    },
    {
      "name": "A01输送接片角度",
@@ -32,7 +32,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    },
    {
      "name": "A01笼子角度",
@@ -43,7 +43,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    }
  ],
  [
@@ -57,7 +57,7 @@
      "count": 3,
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    },
    {
      "name": "A02行走低速角度",
@@ -68,7 +68,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    },
    {
      "name": "A02输送接片角度",
@@ -79,7 +79,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    },
    {
      "name": "A02笼子角度",
@@ -90,7 +90,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    }
  ],
  [
@@ -104,7 +104,7 @@
      "count": 3,
      "value": "",
      "min": 0,
      "max": 100
      "max": 3000
    }
  ],
  [
@@ -117,7 +117,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 2000
    }
  ],
  [
@@ -130,7 +130,7 @@
      "type": "0",
      "value": "",
      "min": 0,
      "max": 100
      "max": 99
    }
  ],
  [
@@ -149,7 +149,7 @@
    "count":3,
    "value":0,
    "min": 0,
    "max": 1000
    "max": 60
  },
  {
    "name": "高速线速度",
@@ -159,7 +159,7 @@
    "unit": "m/min",
    "value":0,
    "min": 0,
    "max": 100
    "max": 60
  },
  {
    "name": "低速线速度",
@@ -169,7 +169,7 @@
    "unit": "m/min",
    "value":0,
    "min": 0,
    "max": 100
    "max": 60
  },
  {
    "name": "手动速度",
@@ -179,7 +179,7 @@
    "unit": "m/min",
    "value":0,
    "min": 0,
    "max": 100
    "max": 60
  }
  
 
@@ -201,7 +201,7 @@
  "count":3,
  "value":0,
  "min": 0,
  "max": 100
  "max": 60
},
{
  "name": "高速线速度",
@@ -211,7 +211,7 @@
  "type": "0",
  "value":0,
  "min": 0,
  "max": 100
  "max": 60
},
{
  "name": "低速线速度",
@@ -221,7 +221,7 @@
  "type": "0",
  "value":0,
  "min": 0,
  "max": 100
  "max": 60
},
{
  "name": "手动速度",
@@ -231,7 +231,7 @@
  "type": "0",
  "value":0,
  "min": 0,
  "max": 100
  "max": 60
}
@@ -251,7 +251,7 @@
"count":3,
"value":0,
"min": 0,
"max": 100
"max": 60
},
{
"name": "高速线速度",
@@ -261,7 +261,7 @@
"unit": "m/min",
"value":0,
"min": 0,
"max": 100
"max": 60
},
{
"name": "低速线速度",
@@ -271,7 +271,7 @@
"unit": "m/min",
"value":0,
"min": 0,
"max": 100
"max": 60
},
{
"name": "手动速度",
@@ -281,7 +281,7 @@
"unit": "m/min",
"value":0,
"min": 0,
"max": 100
"max": 60
}
@@ -293,12 +293,12 @@
"read": 33,
"sending": 0,
"type": "0",
"unit": "mm/S",
"unit": "°/S",
"count":3,
"value":0,
"min": 0,
"max": 100
"max": 99
}
@@ -314,7 +314,7 @@
"type": "0",
"value":0,
"min": 0,
"max": 100
"max": 2000
}
CanadaMes-ui/src/configuration/Manualoneposition.json
@@ -190,9 +190,8 @@
      "type": "0",
      "address": "DB100.0",
      "count": 3,
      "state": 1,
      "min":106,
      "max":210
      "state": 1
    },
    {
      "name": "B02定位速度",
CanadaMes-ui/src/configuration/Positioning1.json
@@ -7,7 +7,7 @@
    "unit": "mm",
    "value":"0",
    "min": 0,
     "max": 100
     "max": 75
    
  }],
    [{
@@ -18,7 +18,7 @@
      "unit": "mm",
      "value":"0",
      "min":0,
      "max":100
      "max":22000
      
    }],
    [{
@@ -52,7 +52,7 @@
        "address":"DB100.48",
        "count":10,
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "22#格地址",
@@ -62,7 +62,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "43#格地址",
@@ -72,7 +72,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "64#格地址",
@@ -82,7 +82,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "85#格地址",
@@ -92,7 +92,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "106#格地址",
@@ -102,7 +102,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "127#格地址",
@@ -112,7 +112,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "148#格地址",
@@ -122,7 +122,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "169#格地址",
@@ -132,7 +132,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "190#格地址",
@@ -142,7 +142,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      }
     
      
@@ -167,7 +167,7 @@
        "address":"DB100.68",
        "count":10,
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "22#格地址",
@@ -177,7 +177,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "43#格地址",
@@ -187,7 +187,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "64#格地址",
@@ -197,7 +197,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "85#格地址",
@@ -207,7 +207,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "106#格地址",
@@ -217,7 +217,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "127#格地址",
@@ -227,7 +227,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "148#格地址",
@@ -237,7 +237,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "169#格地址",
@@ -247,7 +247,7 @@
        "type": "0" ,
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      },
      {
        "name": "190#格地址",
@@ -257,7 +257,7 @@
        "unit": "mm",
        "value":"0",
        "min":0,
        "max":100
        "max":22000
      }
     
      
@@ -280,7 +280,7 @@
      "count":3,
      "value":"0",
      "min":0,
      "max":100
      "max":9999
    },
    {
      "name": "22#格地址",
@@ -290,7 +290,7 @@
      "type": "0",
      "value":"0",
      "min":0,
      "max":100
      "max":9999
    },
    {
      "name": "43#格地址",
@@ -300,7 +300,7 @@
      "type": "0",
      "value":"0",
      "min":0,
      "max":100
      "max":9999
    },
    {
      "name": "64#格地址",
@@ -310,7 +310,7 @@
      "type": "0",
      "value":"0",
      "min":0,
      "max":100
      "max":9999
    },
    {
      "name": "85#格地址",
@@ -320,7 +320,7 @@
      "type": "0",
      "value":"0",
      "min":0,
      "max":100
      "max":9999
    }
   
    
@@ -342,7 +342,7 @@
          "type": "0",
          "value":"0",
          "min":0,
          "max":100
          "max":9999
        },
        {
          "name": "127#格地址",
@@ -352,7 +352,7 @@
          "type": "0",
          "value":"0",
          "min":0,
          "max":100
          "max":9999
        },
        {
          "name": "148#格地址",
@@ -362,7 +362,7 @@
          "type": "0",
          "value":"0",
          "min":0,
          "max":100
          "max":9999
        },
        {
          "name": "169#格地址",
@@ -372,7 +372,7 @@
          "type": "0",
          "value":"0",
          "min":0,
          "max":100
      "max":9999
        },
        {
          "name": "190#格地址",
@@ -382,7 +382,7 @@
          "type": "0",
          "value":"0",
          "min":0,
          "max":100
          "max":9999
        }
       
   
CanadaMes-ui/src/configuration/ServoManualone.json
@@ -17,7 +17,7 @@
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0,
        "value":1,
        "min":0,
        "max":100
     
@@ -51,8 +51,8 @@
        "read": 11,
        "sending": 0,
        "type": "0",
        "value":0,
        "min":0,
        "value":1,
        "min":1,
        "max":100
      },
      {
@@ -60,8 +60,8 @@
        "read": 22,
        "sending": 0,
        "type": "0",
        "value":0,
        "min":0,
        "value":1,
        "min":1,
        "max":100
      },
      {
@@ -123,7 +123,7 @@
            "read": 11,
            "sending": 0,
            "type": "0",
            "value":0,
            "value":1,
            "min":0,
            "max":100
          },
@@ -132,7 +132,7 @@
            "read": 22,
            "sending": 0,
            "type": "0",
            "value":0,
            "value":1,
            "min":0,
            "max":100
          },
@@ -141,7 +141,7 @@
            "read": 33,
            "sending": 0,
            "type": "0",
            "value":0,
            "value":1,
            "min":0,
            "max":100
         
CanadaMes-ui/src/configuration/parameter2.json
@@ -3,7 +3,8 @@
    {
      "button": {
        "name": "D01手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -11,7 +12,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -21,14 +23,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "D02手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -36,7 +40,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -46,14 +51,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "D03手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -61,7 +68,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -71,14 +79,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "D04手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -86,7 +96,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -96,14 +107,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "D05手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -111,7 +124,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -121,14 +135,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "D06手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -136,7 +152,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -146,14 +163,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "A01手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -161,7 +180,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -171,14 +191,16 @@
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    },
    {
      "name": "ID2",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
    
  ],
@@ -187,7 +209,8 @@
    {
      "button": {
        "name": "A02手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -195,7 +218,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "3"
@@ -205,14 +229,16 @@
      "read": "ID28",
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "B01手动状态",
        "value": 0
        "value": 0,
"value2": 0
      
      },
      "type": "4"
@@ -220,7 +246,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0
        "value": 0,
"value2": 0
        
      },
      "type": "3"
@@ -230,14 +257,16 @@
      "read": "ID29",
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
    {
      "button": {
        "name": "B02手动状态",
        "value": 0,
        "value": 0,
"value2": 0,
        "address": "DB10.0"
      },
      "type": "4"
@@ -245,7 +274,8 @@
    {
      "button": {
        "name": "清除ID",
        "value": 0
        "value": 0,
"value2": 0
    
      },
      "type": "3"
@@ -255,7 +285,8 @@
      "read": "ID210",
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
@@ -264,14 +295,16 @@
      "read": 0,
      "sending": 0,
      
      "value": 0
      "value": 0,
"value2": 0
    },
    {
      "name": "ID1",
      "read": 66,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
@@ -280,14 +313,16 @@
      "read": 0,
      "sending": 0,
      
      "value": 0
      "value": 0,
"value2": 0
    },
    {
      "name": "ID2",
      "read": 666,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ],
  [
@@ -296,28 +331,32 @@
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    },
    {
      "name": "A02所在格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    },
    {
      "name": "B01所在格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    },
    {
      "name": "B02所在格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
      "value": 0,
"value2": 0
    }
  ]
  ,
@@ -351,7 +390,8 @@
          "read": 666,
          "sending": 0,
          "type": "0",
          "value": 0
          "value": 0,
"value2": 0
        }
      
      
CanadaMes-ui/src/lang/locales/en-US.json
@@ -39,6 +39,9 @@
  "exit": "exit",
  "changePassword": "changePassword",
  "resetPassword": "resetPassword",
  "Old password":"Old password",
  "New password":"New password",
  "Confirm password":"Confirm password",
  "home": "Home",
  "role": "role",
  "langRoleManagement": "Role Management",
@@ -283,7 +286,7 @@
  "DataBase Connection failed":"DataBase Connection failed",
  "Distribute parameters":"Distribute parameters",
  "The glass size is not within the range":"The glass size is not within the range",
  "Increase":"Increase",
  "Add":"Add",
  "Enable":"Enable",
  "Disable":"Disable",
  "Usage":"Usage",
@@ -308,7 +311,7 @@
  "Frame No":"Frame No",
  "Glass information corresponding to aluminum frame":"Glass information corresponding to aluminum frame",
  "In the cage":"In the cage",
  "Flip":"Flip",
  "Flipped":"Flipped",
  "In the queue":"In the queue",
  "Normal":"Normal",
  "Entering":"Entering",
@@ -326,6 +329,7 @@
  "You do not have this permission":"You do not have this permission",
  "This glass is already in the Queue":"This glass is already in the Queue",
  "Complete":"Complete",
  "Allow":"Allow",
  "Not Allow":"Not Allow",
  "Completed":"Completed",
  "Waiting":"Waiting",
@@ -333,6 +337,13 @@
  "Glass State":"Glass State",
  "Absent":"Absent",
  "Approximately resettable time":"Approximately resettable time",
  "EXTERIQR OUT AND BYPASS TO THE LEFT":"EXTERIQR OUT AND BYPASS TO THE LEFT",
  "EXTERIQR OUT AND BYPASS TO THE RIGHT":"EXTERIQR OUT AND BYPASS TO THE RIGHT",
  "Complete Task":"Complete Task",
  "Outed":"Outed",
  "Queue State":"Queue State",
  "Sorting State":"Sorting State",
  "Confirm State":"Confirm State",
    "ServoManualone": {
      "A01 所在格子": "A01 Current Grid",
      "数量": "Quantity",
@@ -367,9 +378,9 @@
          "D01手动状态": "D01 Manual Status",
          "清除ID": "Clear ID",
          "ID": "ID",
          "A02ID": "ID",
          "B01ID": "ID",
          "B02ID": "ID",
          "A02ID": "A02ID",
          "B01ID": "B01ID",
          "B02ID": "B02ID",
          "D02手动状态": "D02 Manual Status",
          "D03手动状态": "D03 Manual Status",
          "D04手动状态": "D04 Manual Status",
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -273,7 +273,7 @@
  "DataBase Connection failed": "数据库连接失败",
  "Distribute parameters": "下发参数",
  "The glass size is not within the range": "玻璃尺寸不在范围内",
  "Increase": "添加",
  "Add": "添加",
  "Enable": "启用",
  "Disable": "禁用",
  "Usage": "使用率",
@@ -298,7 +298,7 @@
  "Frame No":"铝框id",
  "Glass information corresponding to aluminum frame":"铝框对应的玻璃信息",
  "In the cage":"在笼内",
  "Flip":"翻转",
  "Flipped":"翻转",
  "In the queue":"在队列",
  "Enter the Frame No":"请输入铝框id",
  "Manually Infeed Glass":"手动进片",
@@ -319,12 +319,20 @@
  "This glass is already in the Queue":"此玻璃已在出片队列中",
  "Complete":"完成",
  "Not Allow":"不允许",
  "Allow":"允许",
  "Completed":"已完成",
  "Waiting":"等待中",
  "Deleted":"已删除",
  "Glass State":"玻璃状态",
  "Absent":"不存在",
  "Approximately resettable time":"可复位大概时间",
  "EXTERIQR OUT AND BYPASS TO THE LEFT":"EXTERIQR OUT AND BYPASS TO THE LEFT",
  "EXTERIQR OUT AND BYPASS TO THE RIGHT":"EXTERIQR OUT AND BYPASS TO THE RIGHT",
  "Complete Task":"完成任务",
  "Outed":"已出笼",
  "Queue State":"队列状态",
  "Sorting State":"排序状态",
  "Confirm State":"确认状态",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速",
@@ -437,5 +445,12 @@
    "D04.State": "D04.状态",
    "D05.State": "D05.状态",
    "D06.State": "D06.状态"
  }
  },
  "Automatic State":"自动状态",
  "ManualJog":"开关控制",
  "ManualonePosition":"手动定位",
  "Servomanualone":"半自动",
  "Address parameter settings":"地址参数设置",
  "Speed parameter settings":"速度参数设置"
}
CanadaMes-ui/src/layout/index.vue
@@ -1,7 +1,7 @@
<template>
  <el-container style="flex: 1;height:100%;">
    <div style="width: 200px;background-color: #222f3e" :style="{width: isCollapse?'70px':'250px'}">
      <el-aside :width="isCollapse?'70px':'250px'">
    <div style="width: 200px;background-color: #222f3e" :style="{ width: isCollapse ? '70px' : '250px' }">
      <el-aside :width="isCollapse ? '70px' : '250px'">
        <el-col :gutter="20">
          <el-row :span="4">
            <div class="logo" @click="goToHome">
@@ -9,11 +9,10 @@
            </div>
          </el-row>
          <el-row :span="20">
            <el-menu :default-active="activePath" class="el-menu-vertical-demo"
                      background-color="#222f3e" text-color="#fff" active-text-color="#ffd04b"
                      :collapse="isCollapse" :unique-opened="true"
                      :collapse-transition="false" :router="true">
             <!-- <el-menu-item index="/" @click="youhua">
            <el-menu :default-active="activePath" class="el-menu-vertical-demo" background-color="#222f3e"
              text-color="#fff" active-text-color="#ffd04b" :collapse="isCollapse" :unique-opened="true"
              :collapse-transition="false" :router="true">
              <!-- <el-menu-item index="/" @click="youhua">
                <template slot="title">
               
                  <i class="el-icon-menu"></i>
@@ -31,10 +30,8 @@
                  <span>{{ item.name }}</span>
                </template>
                <!--二级菜单-->
                <el-menu-item :index="'/'+menu.router"
                              v-for="menu in item.menuLists" :key="menu.id"
                             >
                <el-menu-item :index="'/' + menu.router" v-for="menu in item.menuLists" :key="menu.id">
                  <template slot="title">
                    <!--图标-->
                    <i :class="menu.icon"></i>
@@ -50,40 +47,43 @@
    </div>
    <el-container>
      <el-header class="header-container">
        <el-menu :default-active="activePath1" class="el-menu-demo" mode="horizontal"
                 background-color="#576574" text-color="#fff" active-text-color="#ffd04b">
        <el-menu :default-active="activePath1" class="el-menu-demo" mode="horizontal" background-color="#576574"
          text-color="#fff" active-text-color="#ffd04b">
          <div class="header-left">
            <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse" style="height:30px;"></el-button>
            <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"
              style="height:30px;"></el-button>
          </div>
          <!-- <div class="tagContainer" style="display: flex;">
  <tag v-for="(tag, index) in tags" :key="index" :tag="tag" @removeTag="removeTag(index)" @switchTag="switchTag(index)"></tag>
</div> -->
          <template>
            <el-submenu index="1" class="custom-submenu"  >
            <el-submenu index="1" class="custom-submenu">
              <template slot="title">
                <el-avatar src="../assets/emi.png"   style="width:20px;height:20px;margin-top:30px;background-color: white;"></el-avatar>
                <el-avatar src="../assets/emi.png"
                  style="width:20px;height:20px;margin-top:30px;background-color: white;"></el-avatar>
              </template>
              <el-menu-item index="1-1" @click="logout">{{ $t('exit') }}</el-menu-item>
              <el-menu-item index="1-2" @click="showChangePasswordDialog">{{ $t('changePassword') }}</el-menu-item>
            </el-submenu>
          </template>
          <template>
            <el-dialog title="修改密码" :visible.sync="dialogVisible" width="30%">
              <el-form ref="form" :model="formData" label-width="100px">
                <el-form-item label="旧密码">
            <el-dialog :title="$t('changePassword')" :visible.sync="dialogVisible" width="30%">
              <el-form ref="form" :model="formData" label-width="200px">
                <el-form-item :label="$t('Old password')">
                  <el-input v-model="formData.oldPassword" type="password" show-password></el-input>
                </el-form-item>
                <el-form-item label="新密码">
                <el-form-item :label="$t('New password')">
                  <el-input v-model="formData.newPassword" type="password" show-password></el-input>
                </el-form-item>
                <el-form-item label="确认新密码">
                <el-form-item :label="$t('Confirm password')">
                  <el-input v-model="formData.confirmPassword" type="password" show-password></el-input>
                </el-form-item>
              </el-form>
              <div slot="footer" class="dialog-footer">
                <el-button @click="dialogVisible = false">取消</el-button>
                <el-button type="primary" @click="savePassword">保存</el-button>
                <el-button @click="dialogVisible = false">{{ $t('cancel') }}</el-button>
                <el-button type="primary" @click="savePassword">{{ $t('confirm') }}</el-button>
              </div>
            </el-dialog>
          </template>
@@ -91,10 +91,32 @@
      </el-header>
      <el-main>
        <keep-alive>
          <router-view/>
          <router-view />
        </keep-alive>
      </el-main>
    </el-container>
    <el-dialog :visible.sync="dialogFormVisible2" :title="$t('Alarm Information')">
      <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>
    </el-dialog>
    <el-dialog :visible.sync="dialogFormCountDown" :title="$t('Approximately resettable time')" top="5vh">
      <div :style="'font-size: ' + PromptSize + 'px;text-align: center;'">
        <!-- {{ this.CountDowns }} -->
        {{ this.CountDowns }}
      </div>
    </el-dialog>
    <!-- <el-dialog :visible.sync="dialogFormVisible3">
      <el-button :class="{ 'blue-button': receivedData === 1 }" @click="toggleButtonValue(1)">{{
        $t('A01Abort/ResumeTasks') }}</el-button>
      <el-button :class="{ 'blue-button': receivedData2 === 1 }" @click="toggleButtonValue(2)">{{
        $t('A02Abort/ResumeTasks') }}</el-button>
    </el-dialog> -->
  </el-container>
</template>
@@ -103,9 +125,11 @@
import { changePassword } from '../api/user'
import { removeToken } from "../utils/auth";
import LanguageMixin from '../lang/LanguageMixin'
import { MessageBox } from 'element-ui';
// import { mapState, mapMutations } from 'vuex';
// import Tag from '../layout/tag.vue';
// import store from '../store';
let socket;
export default {
  name: "Layout",
@@ -115,6 +139,8 @@
    return {
      activeTag: '', // 当前激活的标签
      dialogVisible: false,
      receivedData: 0,
      receivedData2: 0,
      formData: {
        oldPassword: '',
        newPassword: '',
@@ -127,13 +153,25 @@
      menuListForm: {
        pageSize: 1,
        pageNum: -1
      }
      },
      dialogFormVisible2: false,
      dialogFormVisible3: false,
      alarm: [],
      alarm2: [],
      CountDowns: "0",
      EmergencyStop: false,
      PromptSize: 250,
      dialogFormCountDown: false
    }
  },
  // components: {
  //   Tag
  // },
  created() {
    selectList(this.menuListForm).then(res => {
      this.menuList = res.data
@@ -144,12 +182,168 @@
      // 记录上一次激活的菜单
      // this.activePath = window.sessionStorage.getItem('activePath')
    });
    this.init();
  },
  computed: {
    // ...mapState('tags', ['tags'])
  },
  methods: {
    toggleButtonValue(buttonNumber) {
      MessageBox.confirm(this.$t('Are you sure to perform this operation?'), this.$t('prompt'), {
        confirmButtonText: this.$t('confirm'),
        cancelButtonText: this.$t('cancel'),
        type: 'warning'
      }).then(() => {
        // 点击确认按钮后执行的操作
        if (buttonNumber === 1) {
          this.receivedData = this.receivedData === 0 ? 1 : 0;
        } else if (buttonNumber === 2) {
          this.receivedData2 = this.receivedData2 === 0 ? 1 : 0;
        }
        console.log(this.receivedData, this.receivedData2)
        const data3 = [];
        const resetButtonValues3 = [this.receivedData, this.receivedData2];
        // 将得到的值添加到 data 数组中
        data3.push(resetButtonValues3.flat());
        // 在 data3 数组前面添加两个空数组
        // 创建 jsonObject3 对象,并添加 data3 属性
        const jsonObject3 = { data: data3 };
        // 提交数据到后端
        const jsonString3 = JSON.stringify(jsonObject3);
        console.log("急停后中止/继续选择:", jsonString3);
        socket?.send(jsonString3);
        setTimeout(() => {
          this.dialogFormVisible3 = false;
        }, 1000); // 延迟时间为1秒(1000毫秒)
      }).catch(() => {
        // 点击取消按钮后执行的操作
      });
    },
    init() {
      let viewname = "Home";
      if (typeof (WebSocket) == "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        //console.log("您的浏览器支持WebSocket");
        let socketUrl = "ws://" + this.$t('ip') + ":8888" + "/springboot-vue3/api/talk/" + viewname;
        if (socket != null) {
          socket.close();
          socket = null;
        }
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
        //打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        //  浏览器端收消息,获得从服务端发送过来的文本消息
        socket.onmessage = function (msg) {
          //console.log("收到数据====" + msg.data);
          let obj = JSON.parse(msg.data);
          if (obj.alarmmg) {
            if (obj.alarmmg[0].length > 0) {
              if (this.alarm.length > 0) {
                if (this.alarm[this.alarm.length - 1].id != obj.alarmmg[0][obj.alarmmg[0].length - 1].id) {
                  this.alarm = obj.alarmmg[0];
                  this.dialogFormVisible2 = true;
                }
              } else {
                this.alarm = obj.alarmmg[0];
                this.dialogFormVisible2 = true;
              }
            } else {
              this.alarm = obj.alarmmg[0];
              this.dialogFormVisible2 = false;
            }
            //是否急停
            if (obj.emergencystop != null) {
              this.EmergencyStop = obj.emergencystop[0];
            }
            //复位倒计时
            if (obj.countdown != null) {
              if ((obj.countdown[0] == true && this.CountDowns == 0) || this.EmergencyStop == true) {
                this.CountDown();
              }
            }
            //复位完成信号
            if (obj.reset != null) {
              this.reset = obj.reset[0];
            }
          }
          if (obj.Abort) {
            if (obj.Abort[0].length > 0) {
              this.receivedData = obj.Abort[0][0];
              this.receivedData2 = obj.Abort[0][1];
              // this.dialogFormVisible3 = true;
            }
          }
          this.$forceUpdate();
        }.bind(this);
        //关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
        //发生了错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        }
      }
    },
    //45秒复位倒数计时
    CountDown() {
      let count = 45;
      let timer = setInterval(
        () => {
          if (this.EmergencyStop == true) {
            this.dialogFormCountDown = false;
            clearInterval(timer);
            this.CountDowns = "0";
          } else {
            if (count > 0) {
              this.PromptSize = 500;
              this.CountDowns = count;
              count--;
            }
            else {
              this.PromptSize = 200;
              this.CountDowns = "Waiting for reset";
              if (this.reset == true) {
                clearInterval(timer);
                this.dialogFormCountDown = false;
              }
            }
          }
        },
        1000
      );
      if (this.reset == false) {
        this.dialogFormCountDown = true;
      }
    },
    logout: function () {
      removeToken()
      this.$router.push('/login')
@@ -157,20 +351,19 @@
    goToHome() {
      this.$router.push('/home');
    },
    // ...mapMutations('tags', ['addTag', 'removeTag', 'switchTag']),
    addTag() {
  // let submenuItem;
  // const menuItem = this.menuList.find(item => item.menuLists.some(menu => menu.router === router));
  // if (menuItem) {
  //   submenuItem = menuItem.menuLists.find(menu => menu.router === router);
  // }
  // if (submenuItem) {
  //   const tag = submenuItem.router;
  //   this.$store.commit('tags/addTag', tag);
  // }
},
      // let submenuItem;
      // const menuItem = this.menuList.find(item => item.menuLists.some(menu => menu.router === router));
      // if (menuItem) {
      //   submenuItem = menuItem.menuLists.find(menu => menu.router === router);
      // }
      // if (submenuItem) {
      //   const tag = submenuItem.router;
      //   this.$store.commit('tags/addTag', tag);
      // }
    },
    removeTag() {
      // this.$store.commit('tags/removeTag', index); // 从 Vuex Store 中移除标签
@@ -185,13 +378,13 @@
        this.$message.error('新密码与确认密码不一致');
        return;
      }
      changePassword({oldPassword, newPassword}).then(res => {
      changePassword({ oldPassword, newPassword }).then(res => {
        console.log(res.data);
        this.$message.success('密码修改成功');
        removeToken()
        this.$router.push('/login')
      }).catch(() => {
      });
      this.dialogVisible = false;
@@ -214,7 +407,7 @@
        '角色管理': 'RoleManagement',
        '角色列表': 'RoleList',
        '电气管理': 'Electrical management',
        '设备状态':'State',
        '设备状态': 'State',
        '主页': 'Home'
        // 根据实际需求继续添加对照关系
@@ -241,69 +434,76 @@
</script>
<style scoped lang="less">
.el-menu--horizontal > .el-submenu .el-submenu__title {
.el-menu--horizontal>.el-submenu .el-submenu__title {
  height: 45px !important;
}
.custom-submenu  {
 height: 90px   !important;
.custom-submenu {
  height: 90px !important;
}
.header-container {
 height: 30px   !important; /* 设置较小的高度 */
  height: 30px !important;
  /* 设置较小的高度 */
}
.header-left {
 margin-right: auto;
width:30px;
  margin-right: auto;
  width: 30px;
}
.el-aside {
 height: 100vh;
 background-color: #222f3e;
 line-height: 200px;
  height: 100vh;
  background-color: #222f3e;
  line-height: 200px;
}
.el-menu-vertical-demo:not(.el-menu--collapse) {
 width: 200px;
 min-height: 400px;
  width: 200px;
  min-height: 400px;
}
.el-menu-demo {
 display: flex;
 width: 100%;
 height: 100%;
 justify-content: flex-end;
 align-items: center;
  display: flex;
  width: 100%;
  height: 100%;
  justify-content: flex-end;
  align-items: center;
}
.el-menu-vertical-demo {
 border: 0;
  border: 0;
}
.logo {
 background-color: #222f3e;
 display: flex;
 justify-content: center;
 align-items: center;
 height: 60px;
  background-color: #222f3e;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 60px;
 .sys-name {
   font-size: 20px;
   color: #ffffff;
   margin-left: 10px;
 }
  .sys-name {
    font-size: 20px;
    color: #ffffff;
    margin-left: 10px;
  }
}
.blue-button {
  background-color: green;
  color: white;
}
.el-header {
 background-color: #576574;
  background-color: #576574;
}
</style>
CanadaMes-ui/src/main.js
@@ -10,14 +10,14 @@
import VueI18n from 'vue-i18n'
import zhCN from './lang/locales/zh-CN.json' // 中文语言包
import enUS from './lang/locales/en-US.json' // 英文语言包
import websocketPlugin from './api/websocketPlugin';  // 引入插件文件
//import websocketPlugin from './api/websocketPlugin';  // 引入插件文件
// import store from './store'
// import store from './store'
Vue.use(VueI18n)
Vue.use(websocketPlugin, {
  ip: 'localhost',  // 替换成你的 WebSocket 服务器 IP 地址
});
// Vue.use(websocketPlugin, {
//   ip: 'localhost',  // 替换成你的 WebSocket 服务器 IP 地址
// });
const i18n = new VueI18n({
  locale: 'en-US', 
CanadaMes-ui/src/views/Electrical/AutomaticParameterSetting.vue
@@ -60,19 +60,19 @@
          <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'"
              <el-input v-if="item.type === '0'"
            v-model="item.value"
            class="input-box"
            :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"
            @keyup.enter.native="submitDataToBackend">
  </el-input> -->
            @keyup.enter.native="submitDataToBackend($event)">
  </el-input>
  <el-input v-if="item.type === '0'"
  <!-- <el-input v-if="item.type === '0'"
            v-model="item.value"
            class="input-box"
           
            @keyup.enter.native="submitDataToBackend">
  </el-input>
  </el-input> -->
                <span v-if="item.unit" :name="item.unit"  >{{ item.unit }}</span>
@@ -114,6 +114,7 @@
  },
  methods: {
    closeSocket () {
      // 关闭 WebSocket 连接
@@ -155,7 +156,7 @@
      const jsonString = JSON.stringify(jsonObject);
      console.log('提交以下数据到后端:', jsonString);
      socket?.send(jsonString);
      event.target.blur(); // 取消输入框焦点
    },
    initWebSocket () {
@@ -181,104 +182,112 @@
        };
        // 收到消息
        let isMouseInInputBox = false; // 标记鼠标是否在输入框内
//         let isMouseInInputBox = false; // 标记鼠标是否在输入框内
const inputBox = document.querySelectorAll('.input-box');
inputBox.forEach(box => {
  box.addEventListener('mouseenter', () => {
    isMouseInInputBox = true;
  });
  box.addEventListener('mouseleave', () => {
    isMouseInInputBox = false;
  });
});
// const inputBox = document.querySelectorAll('.input-box');
// inputBox.forEach(box => {
//   box.addEventListener('mouseenter', () => {
//     isMouseInInputBox = true;
//   });
//   box.addEventListener('mouseleave', () => {
//     isMouseInInputBox = false;
//   });
// });
socket.onmessage = (msg) => {
  if (!msg.data) {
    return; // 如果收到空数据,则直接返回,不执行后续逻辑
  }
  // 添加判断条件:如果光标在输入框内,则不执行后续逻辑
  if (document.activeElement.tagName.toLowerCase() === 'input') {
    return;
  }
  let obj = JSON.parse(msg.data);
  const jsonData2 = this.jsonData;
  const parms = obj.params;
      const fanzhuan = obj.fanzhuan;
      const xiaoche = obj.xiaoche;
      const dache = obj.dache1;
  const fanzhuan = obj.fanzhuan;
  const xiaoche = obj.xiaoche;
  const dache = obj.dache1;
      const parms2 = obj.params2;
      const fanzhuan2 = obj.fanzhuan2;
      const xiaoche2 = obj.xiaoche2;
  const parms2 = obj.params2;
  const fanzhuan2 = obj.fanzhuan2;
  const xiaoche2 = obj.xiaoche2;
  if(parms && !isMouseInInputBox){
  if(parms){
    let index = 0;
    for (let i = 0; i < jsonData2.length - 1; i++) {
      let arr = jsonData2[i];
      let index = 0;
      for (let i = 0; i < jsonData2.length - 1; 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 (Array.isArray(parms) && Array.isArray(parms[0]) && parms[0][index] !== undefined) {
              obj.value = parms[0][index];
              index++;
            }
      for (let j = 0; j < arr.length; j++) {
        let obj = arr[j];
        if (obj.type === '0' && Object.prototype.hasOwnProperty.call(obj, 'value')) {
          if (Array.isArray(parms) && Array.isArray(parms[0]) && parms[0][index] !== undefined) {
            obj.value = parms[0][index];
            index++;
          }
        }
      }
      if (Array.isArray(fanzhuan) && Array.isArray(fanzhuan[0]) && fanzhuan[0][0] !== undefined) {
        jsonData2[4][0]['value'] = fanzhuan[0][0];
      }
      if (Array.isArray(xiaoche) && Array.isArray(xiaoche[0]) && xiaoche[0][0] !== undefined) {
        jsonData2[3][0]['value'] = xiaoche[0][0];
      }
      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 arr2 = jsonData2[i];
        for (let j = 0; j < arr2.length; j++) {
          let obj2 = arr2[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++;
            }
          }
        }
      }
              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 (Array.isArray(parms) && Array.isArray(parms[0]) && parms[0][index] !== undefined) {
                      obj.value = parms[0][index];
                      index++;
                    }
                  }
                }
              }
      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];
      }
    }
    if (Array.isArray(fanzhuan) && Array.isArray(fanzhuan[0]) && fanzhuan[0][0] !== undefined) {
      jsonData2[4][0]['value'] = fanzhuan[0][0];
    }
    if (Array.isArray(xiaoche) && Array.isArray(xiaoche[0]) && xiaoche[0][0] !== undefined) {
      jsonData2[3][0]['value'] = xiaoche[0][0];
    }
    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 arr2 = jsonData2[i];
      for (let j = 0; j < arr2.length; j++) {
        let obj2 = arr2[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 (document.activeElement.tagName.toLowerCase() === 'input') {
    //   return;
    // }
    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 (Array.isArray(parms) && Array.isArray(parms[0]) && parms[0][index] !== undefined) {
            obj.value = parms[0][index];
            index++;
          }
        }
      }
    }
    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];
    }
  }
};
@@ -317,6 +326,9 @@
          } 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;
          }
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue
@@ -56,21 +56,21 @@
              <span class="name" style="width:300px;">{{ item.name }}</span>
                <el-input style="width:250px;"  v-if="item.state != 0 && item.type === '0' && groupIndex === 0 && (itemIndex === 2)"  readonly v-model="item.value"  
                class="input-box"    ></el-input>
                class="input-box"  :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"   ></el-input>
                <el-input style="width:250px;"  v-else-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 === 0 "  v-model="item.value"  @keyup.enter.native="A01start($event)"
                class="input-box"   :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"  ></el-input>
                <el-input style="width: 250px;" v-else-if="(item.state !== 0) && (item.type === '0') && (itemIndex === 2)" v-model="item.value" readonly 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' && groupIndex === 1" v-model="item.value"  @keyup.enter.native="A02start($event)"
                class="input-box"  :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"  ></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($event)"
                class="input-box"  :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"  ></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($event)"
                class="input-box"    :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`" ></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>
                class="input-box"    :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`" ></el-input>
            </div>
          </div>
          <div class="button-row" style="display: flex; justify-content: space-between;">
@@ -151,7 +151,7 @@
    },
    A01start(){
    A01start(event){
      const data = [];
@@ -190,9 +190,9 @@
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
event.target.blur(); // 取消输入框焦点
    },
    A02start(){
    A02start(event){
      const data = [];
for (let i = 1; i < 2; i++) {
@@ -223,9 +223,9 @@
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
event.target.blur(); // 取消输入框焦点
    },
    B01start(){
    B01start(event){
      const data = [];
for (let i = 2; i < 3; i++) {
@@ -248,9 +248,9 @@
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
event.target.blur(); // 取消输入框焦点
    },
    B02start(){
    B02start(event){
      const data = [];
for (let i = 3; i < 4; i++) {
@@ -259,6 +259,16 @@
  });
  const values = inputData.map(item => item.value);
  if (values.length > 0) {
let firstValue = values[0];
if (!(firstValue >= "106" && firstValue <= "210")) {
  values.shift();
  this.$message.error("Out of range");
  return false;
}
}
  data.unshift([], [], []);
  data.push(values);
}
@@ -273,7 +283,7 @@
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
event.target.blur(); // 取消输入框焦点
    },
    submitDataToBackend (currentButtonName) {
      if (currentButtonName === 'A01启动' || currentButtonName === 'A01 Start') {
@@ -430,7 +440,7 @@
      }
    },
@@ -457,21 +467,26 @@
        };
        // 收到消息
        let isMouseInInputBox = false; // 标记鼠标是否在输入框内
//         let isMouseInInputBox = false; // 标记鼠标是否在输入框内
const inputBox = document.querySelectorAll('.input-box');
inputBox.forEach(box => {
  box.addEventListener('mouseenter', () => {
    isMouseInInputBox = true;
  });
  box.addEventListener('mouseleave', () => {
    isMouseInInputBox = false;
  });
});
// const inputBox = document.querySelectorAll('.input-box');
// inputBox.forEach(box => {
//   box.addEventListener('mouseenter', () => {
//     isMouseInInputBox = true;
//   });
//   box.addEventListener('mouseleave', () => {
//     isMouseInInputBox = false;
//   });
// });
socket.onmessage = (msg) => {
  if (!msg.data) {
    return; // 如果收到空数据,则直接返回,不执行后续逻辑
  }
   // 添加判断条件:如果光标在输入框内,则不执行后续逻辑
   if (document.activeElement.tagName.toLowerCase() === 'input') {
    return;
  }
          let obj = JSON.parse(msg.data);
@@ -479,7 +494,7 @@
          const weihuiling = obj.weihuiling;
  if(obj.zuhe1&& !isMouseInInputBox){
  if(obj.zuhe1){
// console.log(obj);
  
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue
@@ -45,18 +45,18 @@
             
                
 <el-input style="width:250px;"  v-if="item.state != 0 && item.type === '0' && groupIndex === 0 && (itemIndex === 2)"  readonly v-model="item.value"  
                class="input-box"></el-input>
                class="input-box"   :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"></el-input>
                <el-input style="width:250px;" v-else-if="item.state != 0 && item.type === '0' && groupIndex === 1 && (itemIndex === 2)"  readonly v-model="item.value"
                class="input-box"></el-input>
                class="input-box"   :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"></el-input>
                <el-input style="width:250px;" v-else-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 === 0 "   v-model="item.value"  @keyup.enter.native="A01start($event)"
                class="input-box"   :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"></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 === 1 "  v-model="item.value" @keyup.enter.native="A02start($event)"
                class="input-box"   :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"></el-input>
@@ -133,7 +133,7 @@
    },
    A01start(){
    A01start(event){
      const data = [];
for (let i = 0; i < 1; i++) {
@@ -155,10 +155,10 @@
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
event.target.blur(); // 取消输入框焦点
    },
    A02start(){
    A02start(event){
      const data = [];
@@ -180,6 +180,7 @@
const jsonString = JSON.stringify(jsonObject);
console.log('所有Type为0的value:', jsonString);
socket?.send(jsonString);
event.target.blur(); // 取消输入框焦点
    },
    //提交方法
    submitDataToBackend (currentButtonName) {
@@ -318,26 +319,29 @@
        };
        // 收到消息
        let isMouseInInputBox = false; // 标记鼠标是否在输入框内
//         let isMouseInInputBox = false; // 标记鼠标是否在输入框内
const inputBox = document.querySelectorAll('.input-box');
inputBox.forEach(box => {
  box.addEventListener('mouseenter', () => {
    isMouseInInputBox = true;
  });
  box.addEventListener('mouseleave', () => {
    isMouseInInputBox = false;
  });
});
// const inputBox = document.querySelectorAll('.input-box');
// inputBox.forEach(box => {
//   box.addEventListener('mouseenter', () => {
//     isMouseInInputBox = true;
//   });
//   box.addEventListener('mouseleave', () => {
//     isMouseInInputBox = false;
//   });
// });
socket.onmessage = (msg) => {
  if (!msg.data) {
    return; // 如果收到空数据,则直接返回,不执行后续逻辑
  }
  if (document.activeElement.tagName.toLowerCase() === 'input') {
    return;
  }
          let obj = JSON.parse(msg.data);
          // console.log(obj)
          const jsonData2 = this.jsonData;
          const weihuiling = obj.weihuiling;
@@ -345,7 +349,7 @@
            
            if (obj.zuhe1&& !isMouseInInputBox ) {
            if (obj.zuhe1 ) {
              // 执行更新逻辑
              for (let i = 0; i < 2; i++) {
                jsonData2[i].forEach((item, index) => {
CanadaMes-ui/src/views/Electrical/Parameter2.vue
@@ -186,7 +186,7 @@
  <el-input
                v-if="item.type === '0' && groupIndex==15"
                v-model="item.value"
                @keyup.enter.native="timeout"
                @keyup.enter.native="timeout($event)"
                style="width: 300px"
                class="input-box2"
              ></el-input>
@@ -265,20 +265,31 @@
    },
    updateButtonValue(dataGroup, itemIndex) {
      if (dataGroup[itemIndex].button.value === 1) {
      if (dataGroup[itemIndex].button.value2 === 1) {
        // 如果当前按钮的值是 0,将其设为 1
        this.$set(dataGroup[itemIndex].button, "value", 0);
        this.$set(dataGroup[itemIndex].button, "value2", 0);
      } else {
        // 否则将其设为 0
        this.$set(dataGroup[itemIndex].button, "value", 1);
        this.$set(dataGroup[itemIndex].button, "value2", 1);
      }
    },
    //范围 0-100
    timeout(){
    timeout(event){
    
        const data3 = [];
        const resetButtonValues3 = [this.jsonData[15][0].value];
        if (resetButtonValues3.length > 0) {
let firstValue = resetButtonValues3[0];
if (!(firstValue >= "0" && firstValue <= "100")) {
  resetButtonValues3.shift();
  this.$message.error("Out of range");
  return false;
}
}
        // 将得到的值添加到 data 数组中
        data3.push(resetButtonValues3.flat());
@@ -295,7 +306,7 @@
        // setTimeout(()=>
        //   window.location.reload(),2000
        // )
        event.target.blur(); // 取消输入框焦点
    },
@@ -311,13 +322,13 @@
                ["清除ID", "Clear ID"].includes(subItem.button.name)
            );
            return buttonItem ? buttonItem.button.value : null;
            return buttonItem ? buttonItem.button.value2 : null;
          })
          .filter((value) => value !== null);
          .filter((value2) => value2 !== null);
        // 将得到的值添加到 data 数组中
        data2.push(resetButtonValues.flat());
        data2.push([]);
        data2.push([],[]);
        // 在 data2 数组前面添加两个空数组
        // 创建 jsonObject2 对象,并添加 data2 属性
@@ -336,11 +347,12 @@
        currentButtonName === "A02终止/继续"
      ) {
        const data3 = [];
        const resetButtonValues3 = [this.jsonData[13][0].button.value,this.jsonData[14][0].button.value];
        const resetButtonValues3 = [this.jsonData[13][0].button.value2,this.jsonData[14][0].button.value2];
        // 将得到的值添加到 data 数组中
        data3.push(resetButtonValues3.flat());
        data3.unshift([]);
        data3.push([]);
        // 在 data3 数组前面添加两个空数组
        // 创建 jsonObject3 对象,并添加 data3 属性
@@ -384,22 +396,25 @@
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        let isMouseInInputBox = false; // 标记鼠标是否在输入框内
const inputBox = document.querySelectorAll('.input-box2');
inputBox.forEach(box => {
  box.addEventListener('mouseenter', () => {
    isMouseInInputBox = true;
  });
  box.addEventListener('mouseleave', () => {
    isMouseInInputBox = false;
  });
});
//         let isMouseInInputBox = false; // 标记鼠标是否在输入框内
        let isUpdated = false;  // 定义标志变量
// const inputBox = document.querySelectorAll('.input-box2');
// inputBox.forEach(box => {
//   box.addEventListener('mouseenter', () => {
//     isMouseInInputBox = true;
//   });
//   box.addEventListener('mouseleave', () => {
//     isMouseInInputBox = false;
//   });
// });
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
          if (document.activeElement.tagName.toLowerCase() === 'input') {
    return;
  }
          let obj = JSON.parse(msg.data);
@@ -413,7 +428,7 @@
          // const inputBox = document.querySelectorAll('.id');
          // const target = event.target;
          if (parms && !isMouseInInputBox) {
          if (parms ) {
            //急停按钮
            jsonData2[13][0].button.value = obj.jiting[0][0];
            jsonData2[14][0].button.value = obj.jiting[0][1];
@@ -493,6 +508,8 @@
                }
              }
            }
            this.$forceUpdate();
            //扫描枪扫码的ID
            jsonData2.forEach((item) => {
@@ -531,7 +548,18 @@
             
             jsonData2[15][0].value =  obj.timeout[0];
             if (!isUpdated) {
      for (let i = 0; i < jsonData2.length; i++) {
        for (let j = 0; j < jsonData2[i].length; j++) {
          if(jsonData2[i][j].button){
          jsonData2[i][j].button.value2 = jsonData2[i][j].button.value;
        }
        }
      }
      isUpdated = true;  // 更新标志变量的值
    }
                 
          }
CanadaMes-ui/src/views/Electrical/Positioning1.vue
@@ -136,8 +136,8 @@
              <el-input
                v-if="item.type === '0'"
                v-model="item.value"
                class="input-box"
                @keyup.enter.native="submitDataToBackend"
                class="input-box"  :oninput="`value=value.replace(/^0|[^0-9]/g,'');if(value<`+item.min+`){value=`+item.value+`}else if(value>`+item.max+`){value=`+item.value+`}`"
                @keyup.enter.native="submitDataToBackend($event)"
              ></el-input>
              <span v-if="item.unit" :name="item.unit">{{ item.unit }}</span>
@@ -180,7 +180,7 @@
      this.$set(dataGroup[itemIndex].button, "value", 1); // 点击按钮后将值改为1
    },
    //提交数据到后端
    submitDataToBackend() {
    submitDataToBackend(event) {
      const inputData = this.jsonData.map((dataGroup) => {
        return dataGroup.map((item) => {
          if (item.type === "0") {
@@ -208,6 +208,7 @@
      const jsonString = JSON.stringify(jsonObject);
       console.log('提交以下数据到后端:', jsonString);
      socket?.send(jsonString);
      event.target.blur(); // 取消输入框焦点
    },
    initWebSocket() {
      let viewname = "Positioning1";
@@ -236,21 +237,24 @@
        };
        // 收到消息
        let isMouseInInputBox = false; // 标记鼠标是否在输入框内
//         let isMouseInInputBox = false; // 标记鼠标是否在输入框内
const inputBox = document.querySelectorAll('.input-box');
inputBox.forEach(box => {
  box.addEventListener('mouseenter', () => {
    isMouseInInputBox = true;
  });
  box.addEventListener('mouseleave', () => {
    isMouseInInputBox = false;
  });
});
// const inputBox = document.querySelectorAll('.input-box');
// inputBox.forEach(box => {
//   box.addEventListener('mouseenter', () => {
//     isMouseInInputBox = true;
//   });
//   box.addEventListener('mouseleave', () => {
//     isMouseInInputBox = false;
//   });
// });
socket.onmessage = (msg) => {
  if (!msg.data) {
    return; // 如果收到空数据,则直接返回,不执行后续逻辑
  }
  if (document.activeElement.tagName.toLowerCase() === 'input') {
    return;
  }
  let obj = JSON.parse(msg.data);
@@ -258,7 +262,7 @@
  const parms = obj.params;
  if(parms && !isMouseInInputBox){ // 只有在鼠标不在输入框内时才更新数据
  if(parms ){ // 只有在鼠标不在输入框内时才更新数据
  //  console.log(parms)
   
    let index = 0;
CanadaMes-ui/src/views/Electrical/ServoManualone.vue
@@ -116,7 +116,7 @@
                  <el-input
                    v-if="item.type === '0' && groupIndex === 0"
                    v-model="item.value"
                    @keyup.enter.native="zuhe1"
                    @keyup.enter.native="zuhe1($event)"
                    class="input-box"
                    :class="{
                      'special-class': groupIndex === 0,
@@ -127,7 +127,7 @@
                  <el-input
                    v-else-if="item.type === '0' && groupIndex === 1"
                    v-model="item.value"
                    @keyup.enter.native="zuhe2"
                    @keyup.enter.native="zuhe2($event)"
                    class="input-box"
                    :class="{
                      'special-class': groupIndex === 0,
@@ -317,7 +317,7 @@
        this.$set(dataGroup[itemIndex].button, "value", 1);
      }
    },
    zuhe1() {
    zuhe1(event) {
      const data = [];
      for (let i = 0; i < 1; i++) {
@@ -328,7 +328,36 @@
          });
        const values = inputData.map((item) => item.value);
        // console.log(values)
        if (values.length > 0) {
if (!(values[1] == "1" || values[1] == "2")) {
  values.shift();
  this.$message.error("Out of range");
  return false;
}
// if (!(values[2] < "380" ) ) {
//   values.shift();
//   this.$message.error("Out of range");
//   return false;
// }
if (!(values[4] >= "1" && values[4]  <= "210")  && values[4]  !== "1000") {
  values.shift();
  this.$message.error("Out of range");
  return false;
}
if (!(values[5] >= "1" && values[5]  <= "210")  && values[5]  !== "1000") {
  values.shift();
  this.$message.error("Out of range");
  return false;
}
}
        data.push(values);
      }
@@ -342,8 +371,13 @@
          });
        const values = inputData.map((item) => item.value);
        data.push(values);
        const pattern = /^[\w ]{1,14}$/;   // 匹配长度为14的数字、字母、空格的组合
if (!pattern.test(values[0])) {
  values.shift();
  this.$message.error("Please enter a 14-character string.");
  return false;
}
       data.push(values);
      }
      data.push([], [], []);
@@ -353,8 +387,9 @@
      const jsonString = JSON.stringify(jsonObject);
      console.log("所有Type为0的value:", jsonString);
      socket?.send(jsonString);
      event.target.blur(); // 取消输入框焦点
    },
    zuhe2() {
    zuhe2(event) {
      const data2 = [];
      for (let i = 1; i < 2; i++) {
@@ -365,6 +400,29 @@
          });
        const values2 = inputData.map((item) => item.value);
        if (values2.length > 0) {
if (!(values2[1] >= "1" && values2[1]  <= "210")  && values2[1]  !== "1000") {
  values2.shift();
  this.$message.error("Out of range");
  return false;
}
if (!(values2[2] >= "1" && values2[2]  <= "210")  && values2[2]  !== "1000") {
  values2.shift();
  this.$message.error("Out of range");
  return false;
}
if (!(values2[3] == "1" || values2[3] == "2")) {
  values2.shift();
  this.$message.error("Out of range");
  return false;
}
}
        data2.push(values2);
      }
@@ -380,7 +438,12 @@
          });
        const values2 = inputData.map((item) => item.value);
        const pattern = /^[\w ]{1,14}$/;  // 匹配长度为14的数字、字母、空格的组合
if (!pattern.test(values2[0])) {
  values2.shift();
  this.$message.error("Please enter a 14-character string.");
  return false;
}
        data2.push(values2);
        data2.push([], [], []);
      }
@@ -391,6 +454,7 @@
      const jsonString = JSON.stringify(jsonObject);
      console.log("所有Type为0的value:", jsonString);
      socket?.send(jsonString);
      event.target.blur(); // 取消输入框焦点
    },
    submitDataToBackend(currentButtonName) {
      const data = [];
@@ -620,17 +684,17 @@
          console.log("websocket已打开");
        };
        let isMouseInInputBox = false; // 标记鼠标是否在输入框内
        // let isMouseInInputBox = false; // 标记鼠标是否在输入框内
        const inputBox = document.querySelectorAll(".input-box");
        inputBox.forEach((box) => {
          box.addEventListener("mouseenter", () => {
            isMouseInInputBox = true;
          });
          box.addEventListener("mouseleave", () => {
            isMouseInInputBox = false;
          });
        });
        // const inputBox = document.querySelectorAll(".input-box");
        // inputBox.forEach((box) => {
        //   box.addEventListener("mouseenter", () => {
        //     isMouseInInputBox = true;
        //   });
        //   box.addEventListener("mouseleave", () => {
        //     isMouseInInputBox = false;
        //   });
        // });
        socket.onmessage = (msg) => {
          if (!msg.data) {
@@ -641,8 +705,11 @@
          // console.log(obj)
          const weihuiling = obj.weihuiling;
          const jsonData2 = this.jsonData;
          if (document.activeElement.tagName.toLowerCase() === 'input') {
    return;
  }
          if (obj.zuhe1 && !isMouseInInputBox) {
          if (obj.zuhe1 ) {
            //启动按钮
            // 执行更新逻辑
CanadaMes-ui/src/views/home/index.vue
@@ -46,9 +46,6 @@
    background-color: blue;
}
.red {
    background-color: red;
}
.yellow {
    background-color: yellow;
@@ -211,6 +208,14 @@
    text-align: right;
}
.hide {
    display: none;
}
.el-table .cell {
    display: flex;
}
/* .el-table td,
.el-table th {
    padding: 0px 0;
@@ -230,21 +235,23 @@
                </div>
            </div>
            <div style="display:flex;justify-content: space-around;width: 9zz5%;margin: 0 auto;">
                <el-input style="width:15%;" :placeholder="$t('Enter the glass barcode')" v-model="glassid1"></el-input>
                <el-button type="primary" @click="SelectGlassByGlassIDs(2)" :disabled="ManuallyInfeedGlass">
                <el-input style="width:15%;" :placeholder="$t('Enter the glass barcode')" v-model="glassid1"
                    :class="ManuallyInfeedGlass == true ? 'hide' : ''"></el-input>
                <el-button type="primary" @click="SelectGlassByGlassIDs(2)" :disabled="ManuallyInfeedGlass"
                    :class="ManuallyInfeedGlass == true ? 'hide' : ''">
                    {{ $t('Manually Infeed Glass') }}</el-button>
                <!-- <el-input style="width:15%;" :placeholder="$t('Enter the Order No')" v-model="order"></el-input>
                <el-button type="warning" @click="showform1();">{{ $t('Exit the glass by order number') }}</el-button> -->
            </div>
            <div>
                <el-table :data="this.tasklist1" border style="width: 100%">
                    <el-table-column :width="180" prop="glassId" :label="$t('Outfeed glass barcode')"></el-table-column>
                    <el-table-column :width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :width="130" prop="orderId" :label="$t('Order No')"></el-table-column>
                    <el-table-column :min-width="180" prop="glassId" :label="$t('Outfeed glass barcode')"></el-table-column>
                    <el-table-column :min-width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :min-width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :min-width="130" prop="orderId" :label="$t('Order No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('List No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('Box No')"></el-table-column>
                    <el-table-column :width="130" prop="lengthWidth" :label="$t('Dim')">
                    <el-table-column :min-width="150" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.glasswidthmm }}*{{ scope.row.glassheightmm }}
                        </template>
@@ -258,13 +265,13 @@
                    </el-table-column>
                </el-table>
                <el-table :data="this.tasklist2" border style="width: 100%">
                    <el-table-column :width="180" prop="glassId" :label="$t('Infeed glass barcode')"></el-table-column>
                    <el-table-column :width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :width="130" prop="orderId" :label="$t('Order No')"></el-table-column>
                    <el-table-column :min-width="180" prop="glassId" :label="$t('Infeed glass barcode')"></el-table-column>
                    <el-table-column :min-width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :min-width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :min-width="130" prop="orderId" :label="$t('Order No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('List No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('Box No')"></el-table-column>
                    <el-table-column :width="130" prop="lengthWidth" :label="$t('Dim')">
                    <el-table-column :min-width="150" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.glasswidthmm }}*{{ scope.row.glassheightmm }}
                        </template>
@@ -325,9 +332,11 @@
                <div class="blocks-img" :style="{ left: car2 + 'px', top: '175px' }"></div>
                <div class="blocks-img2"></div>
                <div class="blocks-img3"></div>
                <el-button class="orderbutton1" type="primary" @click="showform2()" :disabled="OrderInfo">{{ $t('OrderInfo')
                }}</el-button>
                <el-button class="orderbutton2" type="primary" @click="showform6()" :disabled="OutingQueue">
                <el-button class="orderbutton1" type="primary" @click="showform2()" :disabled="OrderInfo"
                    :class="OrderInfo == true ? 'hide' : ''">{{ $t('OrderInfo')
                    }}</el-button>
                <el-button class="orderbutton2" type="primary" @click="showform6()" :disabled="OutingQueue"
                    :class="OutingQueue == true ? 'hide' : ''">
                    {{ $t('Outing Queue') }}</el-button>
                <!-- <div style="display:flex;position: absolute;float:left;z-index: 999;top:112px;left:328px;">
@@ -435,10 +444,10 @@
                <el-table-column :min-width="50" prop="cell" :label="$t('Slot No')"></el-table-column>
                <el-table-column :min-width="55" prop="tier" :label="$t('The Side')"></el-table-column>
                <el-table-column :min-width="145" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column :min-width="100" prop="orderId" :label="$t('Order No')"></el-table-column>
                <el-table-column :min-width="80" prop="orderId" :label="$t('Order No')"></el-table-column>
                <el-table-column :min-width="80" prop="listId" :label="$t('List No')"></el-table-column>
                <el-table-column :min-width="100" prop="boxId" :label="$t('Box No')"></el-table-column>
                <el-table-column :min-width="90" prop="state" :label="$t('Glass State')">
                <el-table-column :min-width="50" prop="boxId" :label="$t('Box No')"></el-table-column>
                <el-table-column :min-width="80" prop="state" :label="$t('Glass State')">
                    <template slot-scope='scope'>
                        {{
                            scope.row.state == 1 ? $t('Normal') : scope.row.state == 2 ? $t('Entering') : scope.row.state == 3 ?
@@ -451,6 +460,12 @@
                        {{ scope.row.glassWidthMm }}{{ scope.row.glassWidthMm > 0 ? "*" : "" }}{{ scope.row.glassHeightMm }}
                    </template>
                </el-table-column>
                <el-table-column :min-width="80" prop="lengthWidth" :label="$t('State')">
                    <template slot-scope='scope'>
                        {{ scope.row.disabled == 0 ? $t('Enable') : $t('Disable') }}
                    </template>
                </el-table-column>
                <el-table-column :min-width="250" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -461,10 +476,10 @@
                            @click="outglass(scope.row.glassId, scope.row.state)">{{ $t('Out') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            @click="UpdateDisabled(scope.row.cage, scope.row.cell, scope.row.disabled == 0 ? 1 : 0)">
                            {{ scope.row.disabled == 0 ? $t('Enable') : $t('Disable') }}</el-button>
                            {{ scope.row.disabled == 0 ? $t('Disable') : $t('Enable') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="scope.row.glassId != null ? true : false"
                            @click="insertglass(scope.row.cage, scope.row.cell, scope.row.tier)">{{ $t('Increase')
                            @click="insertglass(scope.row.cage, scope.row.cell, scope.row.tier)">{{ $t('Add')
                            }}</el-button>
                    </template>
                </el-table-column>
@@ -501,8 +516,11 @@
            <el-form :model="form" label-width="100px" style="padding-right: 30px">
                <div style="display: flex;justify-content: space-around;">
                    <label for="">{{ $t('Upper film position') }}</label>
                    <div>
                        {{ $t('Confirm State') }}:{{ this.isConfirm == true ? $t('Not Allow') : $t('Allow') }}
                    <el-button type="primary" @click="isConfirmState()">
                        {{ this.isConfirm == true ? "Allow" : "Not Allow" }}</el-button>
                        {{ this.isConfirm == true ? $t('Allow') : $t('Not Allow') }}</el-button>
                    </div>
                    <label for="">{{ $t('Scan Code Point') }}</label>
                </div>
                <div style="display: flex;justify-content: space-around;height: 40px;">
@@ -628,52 +646,66 @@
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible6" :title="$t('Outing Queue')" top="5vh">
            <el-button type="primary" @click="isAllowQueueState()" :disabled="!this.isAllowReordering">{{ this.isAllowQueue
            {{  $t('Queue State') }}:
            {{ this.isAllowQueue
                == true ? $t('Start') : $t('Stop')
            }}
            <el-button type="primary" @click="isAllowQueueState()" :disabled="!this.isAllowReordering">{{ this.isAllowQueue
                == true ? $t('Stop') : $t('Start')
            }}</el-button>
            <el-button type="primary" @click="isAllowReorderingState()" :disabled="this.isAllowQueue">{{
            {{  $t('Sorting State') }}:
            {{
                this.isAllowReordering == true ? $t('Not Allow') : $t('Allow')
            }}
            <el-button type="primary" @click="isAllowReorderings()" :disabled="this.isAllowQueue">{{
                this.isAllowReordering == true ? $t('Allow') : $t('Not Allow')
            }}</el-button>
            <el-input style="width:15%;" :placeholder="$t('Enter the Frame No')" v-model="framebarcode"></el-input>
            <el-button type="primary" @click="AddOutSliceS()">{{ $t('Add') }}</el-button>
            <label style="background-color:yellow;font-size: 23px;" for="">{{ isQueueWarning== true ? $t('The cage is disabled') : "" }}</label>
            <!-- <span style="background-color:yellow;">
                {{ isQueueWarning== true ? $t('The cage is disabled') : $t('The cage is disabled') }}
            </span> -->
            <el-table :data="this.OutSlice" :height="700" :span-method="objectSpanMethod" border :cell-style="cellStyle"
                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 :min-width="175" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column :min-width="70" prop="orderId" :label="$t('Order No')"></el-table-column>
                <el-table-column :min-width="70" prop="listId" :label="$t('List No')"></el-table-column>
                <el-table-column :min-width="70" prop="boxId" :label="$t('Box No')"></el-table-column>
                <el-table-column :min-width="100" prop="glasswidthmm" :label="$t('Length')"></el-table-column>
                <el-table-column :min-width="100" prop="glassheightmm" :label="$t('Width')"></el-table-column>
                <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') }}
                            ? $t('Outed') : scope.row.state == 3 ? $t('Absent') : $t('Completed') }}
                    </template>
                </el-table-column>
                <el-table-column prop="sequence" :label="$t('Sequence')"></el-table-column>
                <el-table-column :min-width="300" prop="position" :label="$t('Position')" style="font-size: 20px;">
                    <template slot-scope='scope'>
                        <!-- {{ scope.row.position == 1 ? "<>▄▄▄" : "▋" }} -->
                        <div :style="'width:'+(scope.row.position==1?'300':'100') +'px;height:'+(scope.row.position==1?'100':'300') +'px;background-Color:gray;'">
                            <!-- <div :style="'width:100px;height:300px;background-Color:red;'"></div> -->
                        </div>
                        <!-- {{ scope.row.position == 1 ? "<div></div>" : "<div></div>" }} -->
                    </template>
                </el-table-column>
                <el-table-column prop="position" :label="$t('Flip')">
                    <template slot-scope='scope'>
                        {{ scope.row.flip == 1 ? $t('Yes') : $t('No') }}
                    </template>
                </el-table-column>
                <el-table-column prop="barcode" :label="$t('Frame No')"></el-table-column>
                <el-table-column prop="barcode" :label="$t('Complete')">
                    <template slot-scope='scope'>
                <el-table-column :min-width="90" prop="barcode" :label="$t('Complete')">
                    <template slot-scope='scope' style="height:100px;height:100px;">
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="(!isAllowQueue || scope.row.state != 1)"
                            :disabled="!(!isAllowQueue && scope.row.state != 2 && scope.row.state != 4)"
                            @click="CompleteQueue(scope.row.id, scope.row.barcode, scope.row.glassId)">{{ $t('Complete')
                            }}</el-button>
                    </template>
                </el-table-column>
                <el-table-column :width="280" :label="$t('Operate')">
                <el-table-column :min-width="300" prop="position" :label="$t('Position')" style="font-size: 20px;">
                    <template slot-scope='scope'>
                        <div
                            :style="'width:' + (scope.row.position == 1 ? '300' : '100') + 'px;height:' + (scope.row.position == 1 ? '100' : '200') + 'px;background-Color:gray;margin:0 auto;'">
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="position" :label="$t('Flipped')" :min-width="200">
                    <template slot-scope='scope'>
                        {{ scope.row.flip == true ? $t('EXTERIQR OUT AND BYPASS TO THE LEFT')
                            : $t('EXTERIQR OUT AND BYPASS TO THE RIGHT') }}
                    </template>
                </el-table-column>
                <el-table-column prop="barcode" :label="$t('Frame No')"></el-table-column>
                <el-table-column :width="240" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="text" size="small" @click="getTopMove(scope.row, scope.$index)"
                            style="font-size: 15px;"
@@ -692,6 +724,10 @@
                        </el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" :disabled="isAllowQueue"
                            @click="deleteproductionqueueglass(scope.row.barcode)">{{ $t('Delete') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" :disabled="isAllowQueue"
                            @click="FrameStateUpdate(scope.row.barcode,scope.row.framestate)">{{
                            scope.row.framestate == 0 ? $t('Stop') : $t('Start') }}</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -701,7 +737,7 @@
            top="5vh">
            <el-input style="width:15%;" :placeholder="$t('Enter the Frame No')" v-model="framebarcode"></el-input>
            <el-button type="primary" @click="showform7()">{{ $t('Query') }}</el-button>
            <el-button type="primary" @click="addoutslice()">{{ $t('Increase') }}</el-button>
            <el-button type="primary" @click="addoutslice()">{{ $t('Add') }}</el-button>
            <el-table :data="this.AluminumFrame" :height="700" border style="width: 100%;overflow: auto;">
                <el-table-column prop="barcode" :label="$t('Barcode')"></el-table-column>
@@ -714,7 +750,7 @@
                <el-table-column prop="storageCage.cell" :label="$t('Slot No')"></el-table-column>
                <el-table-column prop="storageCage.tier" :label="$t('The Side')"></el-table-column>
                <el-table-column prop="FrameNo" :label="$t('Frame No')"></el-table-column>
                <el-table-column prop="Flip" :label="$t('Flip')"></el-table-column>
                <el-table-column prop="Flip" :label="$t('Flipped')"></el-table-column>
                <el-table-column prop="out_slice.state" :label="$t('In the queue')">
                    <template slot-scope='scope'>
                        {{ scope.row.out_slice != null ? $t('Yes') : $t('No') }}
@@ -734,7 +770,6 @@
                </el-table-column>
            </el-table>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormCountDown" :title="$t('Approximately resettable time')" top="5vh">
            <div :style="'font-size: ' + PromptSize + 'px;text-align: center;'">
                <!-- {{ this.CountDowns }} -->
@@ -748,7 +783,8 @@
import {
    home, home2, InsertOrder, Addglassid, UpdateTask, SelectAlarmmgInfo, SelectCageInfo, DeleteByGlassID, OutByGlassID, Loadcarlist,
    SelectPassword, SelectGlassByGlassID, Disabled, Inglassid, SelectGlass, InsertQueueGlassId, UpdateQueueState, DeleteQueueGlass, SelectGlassNo,
    SelectAluminumFrameInfoById, DeleteProductionQueueGlass, AddOutSliceS, isAllowQueues, isConfirmStates, SelectPermissionByUserName, currentUsername, CompleteQueue
    SelectAluminumFrameInfoById, DeleteProductionQueueGlass, AddOutSliceS, isAllowQueues, isConfirmStates, SelectPermissionByUserName, currentUsername, CompleteQueue,
    isAllowReorderings, FrameStateUpdate
} from "../../api/home";
@@ -834,11 +870,12 @@
            OutingQueue: true,
            OrderInfo: true,
            CageDetails: true,
            CountDowns: "EMERGENCY \r\n STOP",
            CountDowns: "0",
            D01RequestState: false,
            EmergencyStop: false,
            PromptSize: 250,
            reset:false
            reset: false,
            isQueueWarning: false
        };
    },
    created() {
@@ -883,26 +920,46 @@
                    this.tasklist1 = obj.tasklist1[0];
                    this.tasklist2 = obj.tasklist2[0];
                    this.alarm = obj.alarmmg[0];
                    if (this.alarm.length > 0) {
                        this.dialogFormVisible2 = true;
                    } else {
                        this.dialogFormVisible2 = false;
                    }
                    //是否急停
                    this.EmergencyStop = obj.emergencystop[0];
                    console.log(this.EmergencyStop);
                    // if (obj.alarmmg[0].length > 0) {
                    //     if (this.alarm.length > 0) {
                    //         if (this.alarm[this.alarm.length - 1].id != obj.alarmmg[0][obj.alarmmg[0].length - 1].id) {
                    //             this.alarm = obj.alarmmg[0];
                    //             this.dialogFormVisible2 = true;
                    //         }
                    //     } else {
                    //         this.alarm = obj.alarmmg[0];
                    //         this.dialogFormVisible2 = true;
                    //     }
                    // }
                    // //是否急停
                    // if (obj.emergencystop != null) {
                    //     this.EmergencyStop = obj.emergencystop[0];
                    // }
                    //复位倒计时
                    if ((obj.countdown[0] == true && this.CountDowns == 0) || this.EmergencyStop == true) {
                        this.CountDown();
                    }
                    //复位完成信号
                    this.reset=obj.reset[0];
                    // //复位倒计时
                    // if (obj.countdown != null) {
                    //     if ((obj.countdown[0] == true && this.CountDowns == 0) || this.EmergencyStop == true) {
                    //         this.CountDown();
                    //     }
                    // }
                    // //复位完成信号
                    // if (obj.reset != null) {
                    //     this.reset = obj.reset[0];
                    // }
                    //是否有进片请求
                    this.D01RequestState = obj.D01RequestState[0];
                    if (obj.D01RequestState != null) {
                        this.D01RequestState = obj.D01RequestState[0];
                    }
                    // this.D01RequestState=true;
                    //是否允许出片
                    this.isAllowQueue = obj.isAllowQueue[0];
                    //当前出片格子是否被禁用
                    this.isQueueWarning = obj.isQueueWarning[0];
                    //是否允许出片队列调序
                    this.isAllowReordering = obj.isAllowReordering[0];
                    //出片队列
                    if (this.isAllowReordering == true) {
                        this.OutSlice = obj.listoutslice[0];
@@ -1020,7 +1077,7 @@
            SelectAlarmmgInfo().then(res => {
                this.alarm = res.data.alarmmg;
            });
            //加载确认密码
            SelectPassword().then(res => {
                this.password = res.data.password;
@@ -1035,7 +1092,7 @@
            } else if (state == 2) {
                return "yellow gezi";
            } else if (state == 3) {
                return "red gezi";
                return "black gezi";
            } else {
                return "black gezi";
            }
@@ -1053,7 +1110,6 @@
                    this.load();
                });
            }
        },
        //手动上片
        sbumitglassid() {
@@ -1424,7 +1480,6 @@
                            this.form5 = {};
                            this.$message.success(this.$t('Operation successful'));
                        } else {
                            alert(1);
                            this.$message.error(this.$t('This glass ID already exists in the sorting cage'));
                        }
                    });
@@ -1479,19 +1534,24 @@
            this.AluminumFrame.forEach(item => { item.barcode = glassid; item.isCheck = isChecked })
        },
        //添加到出片队列
        addoutslice() {
            var dats_ = new Array();
            this.AluminumFrame.forEach(item => {
                var dats2_ = new Array();
                dats2_[0] = item.barcode;
                dats2_[1] = item.isCheck;
                dats2_[2] = item.Flip;
                dats2_[3] = item.FrameNo;
                dats2_[4] = item.glasslengthmm;
                dats2_[5] = item.glassheightmm;
                dats_[dats_.length] = dats2_;
            });
            AddOutSliceS(dats_).then(res => {
        AddOutSliceS() {
            // var dats_ = new Array();
            // this.AluminumFrame.forEach(item => {
            //     var dats2_ = new Array();
            //     dats2_[0] = item.barcode;
            //     dats2_[1] = item.isCheck;
            //     dats2_[2] = item.Flip;
            //     dats2_[3] = item.FrameNo;
            //     dats2_[4] = item.glasslengthmm;
            //     dats2_[5] = item.glassheightmm;
            //     dats_[dats_.length] = dats2_;
            // });
            // AddOutSliceS(dats_).then(res => {
            //     if (res.data.message == 200) {
            //         this.$message.success(this.$t('Operation successful'));
            //     }
            // });
            AddOutSliceS(this.framebarcode).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
@@ -1616,9 +1676,13 @@
                }
            })
        },
        //
        isAllowReorderingState() {
            this.isAllowReordering = !this.isAllowReordering;
        //是否允许出片队列排序
        isAllowReorderings() {
            isAllowReorderings(!this.isAllowReordering, this.OutSlice).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            })
        },
        //切换上片是否需要确认玻璃信息
        isConfirmState() {
@@ -1629,21 +1693,20 @@
            });
        }
        ,
        cellStyle({ row, column, rowIndex, columnIndex }) {
            // console.log(row, column, "ss");
        //表格样式
        cellStyle({ column, rowIndex, columnIndex }) {
            column = rowIndex;
            rowIndex = column;
            let style = "";
            if (columnIndex === 8) {
                style = "font-size:200px;text-align: center;height:200px;";
                style = "font-size:200px;text-align: center;";
            }
            if (columnIndex === 9 && row.flip == 1) {
                style = "background-Color:yellow;";
            }
            if (columnIndex === 6 && row.state == 3) {
                style = "background-Color:gray;";
            }
            style
            // if (columnIndex === 9 && row.flip == 1) {
            //     style = "background-Color:yellow;";
            // }
            // if (columnIndex === 6 && row.state == 3) {
            //     style = "background-Color:gray;";
            // }
            return style;
        }
        ,
@@ -1661,7 +1724,7 @@
            if (rowIndex != 0) {
                barcode2 = arrOutSlice[rowIndex - 1].barcode;
            }
            if (columnIndex === 12) {
            if (columnIndex === 12 || columnIndex === 9 || columnIndex === 10 || columnIndex === 11) {
                if (barcode != barcode2) {
                    // this.FrameNoFlag = barcode;
                    for (let i = rowIndex; i < this.OutSlice.length; i++) {
@@ -1669,7 +1732,6 @@
                            barcode = arrOutSlice[i].barcode;
                            rowspans += 1;
                        } else {
                            break;
                        }
                    }
@@ -1730,25 +1792,26 @@
                }
            });
        },
        //45秒复位倒数计时
        CountDown() {
            //50秒倒数计时
            let count = 45;
            let timer = setInterval(
                () => {
                    if (this.EmergencyStop == true) {
                        this.dialogFormCountDown = false;
                        clearInterval(timer);
                        this.PromptSize = 250;
                        this.CountDowns = "EMERGENCY \n STOP";
                        this.CountDowns = "0";
                    } else {
                        if (count > 0) {
                            this.PromptSize = 500;
                            this.CountDowns = count;
                            count--;
                            this.CountDowns = count;
                            this.dialogFormCountDown = true;
                        }
                        else {
                            this.PromptSize = 250;
                            this.CountDowns = "Waiting \n for \n reset";
                            if(this.reset==true){
                            this.PromptSize = 200;
                            this.CountDowns = "Waiting for reset";
                            if (this.reset == true) {
                                clearInterval(timer);
                                this.dialogFormCountDown = false;
                            }
@@ -1757,7 +1820,19 @@
                },
                1000
            );
            this.dialogFormCountDown = true;
        },
        FrameStateUpdate(frameno,framestate){
            if(framestate == 1){
                framestate=0;
            }else{
                framestate=1;
            }
            FrameStateUpdate(frameno,framestate).then(res=>{
                if(res.data.message == 200){
                    this.$message.success("Operation successful");
                }
            });
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java
@@ -152,4 +152,74 @@
            System.err.println("An error occurred while writing string to PLC: " + e.getMessage());
        }
    }
    public void writeBitandrenwuToPLC(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");
                       if(sValue.get(1)){
                       }
                        } 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);
                }
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
        }
    }
    public short[] convertBooleanListToShortArray(List<Boolean> booleanList) {
        short[] shortArray = new short[booleanList.size()];
        for (int i = 0; i < booleanList.size(); i++) {
            boolean value = booleanList.get(i);
            shortArray[i] = value ? (short) 1 : (short) 0;
        }
        return shortArray;
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -28,6 +28,7 @@
        // \\ TODO Auto-generated catch block
        e.printStackTrace();
      }
      if (S7control.getinstance().CheckConnected() == true) {
      spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
      spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
      jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
@@ -57,8 +58,9 @@
        // 判断当前是否有未执行的任务
        int outnum = spianMapper.SelectOutSliceshu();
        int cageoutsum=spianMapper.Selectcageout(3);
        // 当没有任务执行并且出片车空闲时
        if (outnum == 0 && outstate == true && Plchome.isAllowQueue == true) {
        if (outnum == 0 && outstate == true && Plchome.isAllowQueue == true&&cageoutsum==0) {
          // 判断铝框出片队列表是否有待出片的玻璃
          String outglassid = spianMapper.SelectOutSlice();
          if (outglassid != null) {
@@ -101,8 +103,8 @@
        spianService.overtask(B02glassid.toString());// 完成任务
        S7control.getinstance().WriteWord("DB106.62", (short) 0);// 恢复B02小车应答改为0
        System.out.println("汇报时B02|" + B02glassid);
        boolean yingda = spianService.listbool("DB106.62");// b01汇报
        System.out.println("汇报时B01|第"+aaa+"次"+ B02glassid+"应答"+yingda);
        boolean yingda = spianService.listbool("DB106.62");// b02汇报
        System.out.println("汇报时B02|第"+aaa+"次"+ B02glassid+"应答"+yingda);
      }
      // 获取DO1数据
@@ -157,5 +159,6 @@
    }
  }
}
}
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
@@ -206,7 +206,6 @@
                            // 写入A02
                            customS7Control.WriteWordToPLC(messageArray, addresses2, 1);
                            // 写入B01
                            customS7Control.WriteWordToPLC(messageArray, addresses3, 2);
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java
@@ -72,7 +72,7 @@
            addresses2.add("DB100.118");
            addresses2.add("DB100.192");
            addresses2.add("DB103.22");
            addresses2.add("DB106.14");
            List<Short> arraylist2 = S7control.getinstance().readWords(addresses2);
            List<String> addresses9 = new ArrayList<>();
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
@@ -2,7 +2,11 @@
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.springboot.controller.HomeController;
import com.example.springboot.mapper.HomeMapper;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.service.StorageCageService;
import java.io.*;
import java.util.ArrayList;
@@ -12,12 +16,12 @@
public class PlcParameter2 extends Thread {
    // 用于存储应用程序的配置信息
    private Configuration config;
    @Autowired
    StorageCageService storageCageService;
    // 创建一个自定义的 S7 控制器消息处理器对象
    MessageHandler customS7Control = new MessageHandler();
    // 用于存储应用程序的配置信息
    private Configuration config;
    public PlcParameter2() throws IOException {
@@ -33,12 +37,12 @@
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
            //  id
            List<String> addressList1 = Arrays.asList(config.getProperty("Parameter2.id").split(","));
            List<String> paramlist = S7control.getinstance().readStrings(addressList1);
            // System.out.println(paramlist);
            //手动状态
            List<String> addresses = Arrays.asList(config.getProperty("Parameter2.state").split(","));
@@ -71,7 +75,7 @@
            List<Short> data4 = S7control.getinstance().readWords(addresses4);
            //System.out.println(data);
//      List<Long> TIME2 = Collections.singletonList(S7control.getinstance().readtime("DB100.194"));
//      System.out.println("addressList:" + TIME2);
@@ -93,19 +97,22 @@
//      List<Short> data4 = new ArrayList<>(Arrays.asList(values4));
//
//
//            JSONObject jsonObject = new JSONObject();
//            short[] params = new short[data2.size()];
//            for (int i = 0; i < data2.size(); i++) {
//                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);
//                anniuparams[i] = value ? (short) 1 : (short) 0;
//            }
            //boolean转为0 1
            short[] params = customS7Control.convertBooleanListToShortArray(data2);
            short[] anniuparams = customS7Control.convertBooleanListToShortArray(anniuread);
            JSONObject jsonObject = new JSONObject();
            short[] params = new short[data2.size()];
            for (int i = 0; i < data2.size(); i++) {
                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);
                anniuparams[i] = value ? (short) 1 : (short) 0;
            }
            jsonObject.append("params", params);
            jsonObject.append("params", paramlist);
            jsonObject.append("params", data);
@@ -121,7 +128,7 @@
//        jsonObject.set("message", "Hello, Parameter2!");
//        sendwServer.sendMessage(jsonObject.toString());
//      }
//            HomeController controller = new HomeController();
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter2");
            if (sendwServer != null) {
                for (WebSocketServer webserver : sendwServer) {
@@ -131,9 +138,7 @@
                    if (webserver != null) {
                        List<String> messages = webserver.getMessages();
                        if (!messages.isEmpty()) {
                            // 将最后一个消息转换为整数类型的列表
@@ -141,9 +146,139 @@
//        System.out.println("lastMessage:" + lastMessage);
                            JSONArray messageArray = new JSONArray(lastMessage);
                            //清除ID
                            customS7Control.writeBitToPLC(messageArray, addressList0, 0);
                            // customS7Control.writeBitToPLC(messageArray, addressList0, 0);
                            try {
                                // 检查索引是否有效
                                if (messageArray.getJSONArray(0).size() > 0) {
                                    // 获取消息数组
                                    JSONArray jsonArray = messageArray.getJSONArray(0);
                                    // 创建一个布尔值列表
                                    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);
                                            }
                                        }
                                    }
//完成出片
                                    boolean containsOne = data.stream().anyMatch(number -> number == 1);
                                    for (int i = 1; i <= 5; i++) {
                                        boolean value = sValue.get(i);
                                        String id = paramlist.get(i);
                                        //判断是否自动状态
                                        if (!containsOne) {
                                            //判断id是否包含数字
                                            if (id.matches(".*\\d.*")) {
                                                //判断清楚id是否true
                                                if (value) {
                                                    System.out.println(id);
                                                    switch (i) {
                                                        case 1:
                                                            storageCageService.UpdateTask(2, 0, paramlist.get(i));
                                                            break;
                                                        case 2:
                                                        case 3:
                                                        case 4:
                                                        case 5:
                                                            storageCageService.UpdateTask(3, 0, paramlist.get(i));
                                                            break;
                                                        default:
                                                            // 处理索引值不在范围内的情况
                                                            break;
                                                    }
                                                }
                                            }
                                        }
                                        // 检查布尔值列表是否为空
                                        if (!sValue.isEmpty()) {
                                            // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                                            S7control.getinstance().WriteBit(addressList0, sValue);
                                            System.out.println("Values " + sValue + " written to PLC at address " + addressList0);
                                        }
                                    }
                                }
                            } catch (Exception e) {
                                System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
                            }
                            //急停
                            customS7Control.writeBitToPLC(messageArray, niuanaddressList3, 1);
//                            customS7Control.writeBitToPLC(messageArray, niuanaddressList3, 1);
                            try {
                                // 检查索引是否有效
                                if (messageArray.getJSONArray(1).size() > 0) {
                                    // 获取消息数组
                                    JSONArray jsonArray = messageArray.getJSONArray(1);
                                    // 创建一个布尔值列表
                                    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);
                                            }
                                        }
                                    }
// 终止进片任务
                                    boolean Value1 = sValue.get(0);
                                    boolean Value2 = sValue.get(1);
                                    if (Value1) {
                                        storageCageService.EndTask(0);
                                    }
                                    if (Value2) {
                                        storageCageService.EndTask(1);
                                    }
                                    // 检查布尔值列表是否为空
                                    if (!sValue.isEmpty()) {
                                        // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                                        S7control.getinstance().WriteBit(niuanaddressList3, sValue);
                                        System.out.println("Values " + sValue + " written to PLC at address " + niuanaddressList3);
                                    }
                                }
                            } catch (Exception e) {
                                System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
                            }
                            //存片等待延迟
                            customS7Control.Writetime(messageArray, timeout2, 2);
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
@@ -28,7 +28,7 @@
    FileInputStream fileInputStream;
    try {
      // 从文件中读取字节数据存入 fileInputStream
      fileInputStream = new FileInputStream("D:/canadames/Alarm.json");
      fileInputStream = new FileInputStream("D:/code/canadames/Alarm.json");
      // 读取 fileInputStream 中字节并将其解码为字符
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
      // 提高读取效率,在 BufferedReader 内包装 InputStreamReader
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -1,11 +1,15 @@
package com.example.springboot.component;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.example.springboot.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.entity.Out_slice;
@@ -14,10 +18,6 @@
import com.example.springboot.entity.alarmmg;
import com.example.springboot.mapper.HomeMapper;
import com.example.springboot.mapper.SpianMapper;
import com.example.springboot.service.JdbcConnections;
import com.example.springboot.service.North_Glass_Buffer1Service;
import com.example.springboot.service.OutSliceServive;
import com.example.springboot.service.SpianService;
public class Plchome extends Thread {
@@ -30,10 +30,21 @@
    private JdbcConnections dbserve;
    // 出片队列是否允许出片
    public static Boolean isAllowQueue = true;
    public static Boolean isAllowReordering = true;
    //出片队列警告
    public static Boolean isQueueWarning=false;
    // 铝框id
    public static String FrameNo;
    public static String FrameNo = "";
    // 是否需要手动确认玻璃
    public static Boolean isConfirm = false;
    private Configuration config;
    private StorageCageService storageCageService;
    public Plchome() throws IOException {
        config = new Configuration("config.properties");
    }
    // public static Map b=new HashMap<>();
    // b.put()
@@ -49,6 +60,7 @@
            JSONObject jsonObject = new JSONObject();
            // 注入mapper
            homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class);
            spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
            spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
@@ -74,25 +86,7 @@
            // 查询报警信息
            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);
            }
            // 伍 获取进是否有待确认的玻璃id
            String queid = spianMapper.Selectqueueid();
            int state = spianMapper.Selectqueuestate();
@@ -110,46 +104,118 @@
            // 获取出片队列信息
            List<Out_slice> listoutslice = outSliceServive.SelectProductionqueue();
            jsonObject.append("listoutslice", listoutslice);
            // 获取当前出片队列状态
            // 获取当前出片队列出片状态
            jsonObject.append("isAllowQueue", Plchome.isAllowQueue);
            // 获取铝框idDB106.DBW64
            // String frameno=spianService.queGlassid("DB103.270",14).toString();
            // if(frameno!=Plchome.FrameNo&&frameno!=""){
            // Plchome.FrameNo=frameno;
            // }
            // try {
            // north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            // } catch (SQLException e) {
            // // TODO Auto-generated catch block
            // e.printStackTrace();
            // }
            //获取出片队列警告状态
            jsonObject.append("isQueueWarning", Plchome.isQueueWarning);
            // 获取当前出片队列调序状态
            jsonObject.append("isAllowReordering", Plchome.isAllowReordering);
            // 是否需要人工确认上片玻璃
            jsonObject.append("isConfirm", isConfirm);
            // String framenos="X21763329601FB";
            //     if (!framenos.equals(Plchome.FrameNo)) {
            //         Plchome.FrameNo = framenos;
            //         try {
            //             north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            //         } catch (SQLException e) {
            //             // TODO Auto-generated catch block
            //             e.printStackTrace();
            //         }
            //     }
            if (S7control.getinstance().CheckConnected() == true) {
                // 读去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);// 获取进片车状态
                if (datas1ListState != null) {
                    boolean exist1 = datas1ListState.contains((short) 0);
                    jsonObject.append("zhuangtai", exist1);
                }
            // 获取进片请求状态
            List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1);
            boolean D01RequestState = D01Request.contains((short) 1);
            // boolean D01RequestState =true;
            jsonObject.append("D01RequestState", D01RequestState);
                // 获取进片玻璃信息
                List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
                if (inglassInfo != null) {
                    if (inglassInfo.size() > 0) {
                        jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
                    }
            // 复位倒计时
            // 地址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);
            // 复位完成信号
            List<Boolean> resets = S7control.getinstance().ReadBits("DB103.284", 1);
            for (Boolean reset : resets) {
                jsonObject.append("reset", reset);
            }
                }
            // 是否急停
            List<Boolean> emergencystops = S7control.getinstance().ReadBits("DB104.5.1", 1);
            for (Boolean emergencystop : emergencystops) {
                jsonObject.append("emergencystop", emergencystop);
                // 获取铝框idDB106.DBW64,添加到出片队列
                String frameno = spianService.queGlassid("DB103.270", 14).toString();
                // String frameno="X12345611002GV";
                // frameno="X21763329601FB";
                if (!frameno.equals(Plchome.FrameNo)) {
                    Plchome.FrameNo = frameno;
                    try {
                        north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                // 获取进片请求状态
                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);
                // 复位完成信号ss
                List<Boolean> resetss = S7control.getinstance().ReadBits("DB103.284", 1);
                for (Boolean reset : resetss) {
                    jsonObject.append("reset", reset);
                }
                // 是否急停
                List<Boolean> emergencystops = S7control.getinstance().ReadBits("DB104.5.1", 1);
                for (Boolean emergencystop : emergencystops) {
                    jsonObject.
                    append("emergencystop", emergencystop);
                }
                // // 终止继续按钮
                // List<String> niuanaddressList3 = Arrays.asList(config.getProperty("Parameter2.stop").split(","));
                // List<Boolean> anniuread = S7control.getinstance().readBits(niuanaddressList3);
                // // Boolean[] value4 = { false, false};
                // // List<Boolean> anniuread = new ArrayList<>(Arrays.asList(value4));
                // Boolean[] value5 = { true };
                // List<Boolean> resets = new ArrayList<>(Arrays.asList(value5));
                // short[] anniuparams = new short[anniuread.size()];
                // for (int i = 0; i < anniuread.size(); i++) {
                //     boolean value = anniuread.get(i);
                //     anniuparams[i] = value ? (short) 1 : (short) 0;
                // }
                // short[] resets2 = new short[resets.size()];
                // for (int i = 0; i < resets.size(); i++) {
                //     boolean value = resets.get(i);
                //     resets2[i] = value ? (short) 1 : (short) 0;
                // }
                // for (short number : resets2) {
                //     if (number == 1) {
                //         jsonObject.append("Abort", anniuparams);
                //     }
                // }
            }
            // 铝框线交互
@@ -175,7 +241,7 @@
            // }
            // S7control.getinstance().WriteWord("铝框翻转发送地址", (short)send);
            // }
            storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
            dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
            boolean dbconnected = false;
            try {
@@ -191,9 +257,77 @@
            if (sendwServer != null) {
                for (WebSocketServer webserver : sendwServer) {
                    webserver.sendMessage(jsonObject.toString());
                    if (webserver != null) {
                        List<String> messages = webserver.getMessages();
                        if (!messages.isEmpty()) {
                            // // 将最后一个消息转换为整数类型的列表
                            // String lastMessage = messages.get(messages.size() - 1);
                            // System.out.println("lastMessage:" + lastMessage);
                            // JSONArray messageArray = new JSONArray(lastMessage);
                            // try {
                            //     // 检查索引是否有效
                            //     if (messageArray.getJSONArray(0).size() > 0) {
                            //         // 获取消息数组
                            //         JSONArray jsonArray = messageArray.getJSONArray(0);
                            //         // 创建一个布尔值列表
                            //         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);
                            //                 }
                            //             }
                            //         }
                            //         // 终止进片任务
                            //         boolean Value1 = sValue.get(0);
                            //         boolean Value2 = sValue.get(1);
                            //         if (Value1) {
                            //             storageCageService.EndTask(0);
                            //         }
                            //         if (Value2) {
                            //             storageCageService.EndTask(1);
                            //         }
                            //         // 检查布尔值列表是否为空
                            //         if (!sValue.isEmpty()) {
                            //             // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                            //             S7control.getinstance().WriteBit(niuanaddressList3, sValue);
                            //             System.out.println(
                            //                     "Values " + sValue + " written to PLC at address " + niuanaddressList3);
                            //         }
                            //     }
                            // } catch (Exception e) {
                            //     System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
                            // }
                            webserver.clearMessages();
                        }
                    }
                }
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/S7control.java
@@ -37,13 +37,21 @@
        }
        return instance;
    }
    /**
     * 关闭西门子s7通讯连接
     */
    public void CloseS7client() {
        if (s7PLC == null)
            s7PLC.close();
            s7PLC.checkConnected();
    }
    /**
     * s7通讯连接状态
     */
    public boolean CheckConnected() {
        return s7PLC.checkConnected();
    }
    /**
@@ -215,7 +223,15 @@
        if (s7PLC==null)
             return null;
       // List<String> addresslist = GetAddressList(address, count, 16);
        return s7PLC.readByte(address,count);
        try {
            return s7PLC.readByte(address, count);
        }catch (Exception e) {
            // 处理异常
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    /**
@@ -331,11 +347,17 @@
    }
//读取时间
    public Long readtime(String address) {
        if (s7PLC==null)
            return null;
public Long readtime(String address) {
    if (s7PLC == null)
        return null;
    try {
        return s7PLC.readTime(address);
    } catch (Exception e) {
        System.out.println("读取 " + address + " 失败:" + e.getMessage());
        return null;
    }
}
    public void writetime(String address, long datas) {
        if (s7PLC == null)
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -17,25 +17,25 @@
        //
        System.out.println("启动完成");
    new PlcHold().start();
        new PlcHold().start();
        new Plchome().start();
         new Plcalarm().start();
        new Plcalarm().start();
         new Plcsign().start();
        new Plcsign().start();
        new Plcstate().start();
        new PlcPositioning1().start();
         new Plcstate().start();
         new PlcPositioning1().start();
        new PlcParameter2().start();
         new PlcParameter2().start();
        new PLCAutomaticParameterSetting().start();
         new PLCAutomaticParameterSetting().start();
         new PlcManualonePosition().start();
         new PlcManualonePosition2().start();
         new PlcServoManualone().start();
         new PLCManualJog().start();
        new PlcManualonePosition().start();
        new PlcManualonePosition2().start();
        new PlcServoManualone().start();
        new PLCManualJog().start();
        new Plclog().start();
    }
}
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -5,47 +5,36 @@
import java.util.List;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import com.example.springboot.mapper.HomeMapper;
import com.example.springboot.mapper.SpianMapper;
import com.example.springboot.security.constant.SystemConstant;
import com.example.springboot.security.util.JwtUtil;
import com.example.springboot.security.util.SecurityUtil;
import com.example.springboot.service.HomeService;
import com.example.springboot.service.JdbcConnections;
import com.example.springboot.service.North_Glass_Buffer1Service;
import com.example.springboot.service.OutSliceServive;
import com.example.springboot.service.PermissionService;
import com.example.springboot.service.SpianService;
import com.example.springboot.service.StorageCageService;
import cn.hutool.core.util.StrUtil;
import com.example.springboot.common.Result;
import com.example.springboot.component.Plchome;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.CarPosition;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.User;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.entity.Out_slice;
import com.example.springboot.entity.Permission;
import com.example.springboot.entity.Queue;
import com.example.springboot.entity.RolePermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@RestController
@RequestMapping("/home")
public class HomeController {
  @Autowired
  HomeMapper homeMapper;
  @Autowired
@@ -59,6 +48,9 @@
  @Autowired
  OutSliceServive outSliceServive;
  @Autowired
  StorageCageService storageCageService;
  @Autowired
  North_Glass_Buffer1Service north_Glass_Buffer1Service;
@@ -78,6 +70,8 @@
  // 查询理片笼使用情况
  @GetMapping("/load")
  public Result selectAll() {
    // storageCageService.EndTask(1);
    // UpdateTask(2,0,"X12345610402GV");
    List<StorageCage> storageCagelist = homeMapper.selectAll();
    Map<String, Object> map = new HashMap<>();
    map.put("list", storageCagelist);
@@ -87,7 +81,6 @@
  // 查询理片笼玻璃情况
  @GetMapping("/loads")
  public Result selectRack() {
    List<StorageCage> storageCagelist1 = homeMapper.selectRack1();
    List<StorageCage> storageCagelist2 = homeMapper.selectRack2();
    List<StorageCage> storageCagelist3 = homeMapper.selectRack3();
@@ -136,20 +129,21 @@
    return Result.success(map);
  }
  // 手动完成进/出片任务
  // 手动完成进/出片任务 终止进片/出片任务
  @GetMapping("/UpdateTask")
  public Result UpdateTask(Integer types, Integer shelfrack, String glassid) {
    storageCageService.UpdateTask(types, shelfrack, glassid);
    Map<String, Object> map = new HashMap<>();
    homeMapper.UpdateTask(types, glassid);
    // StorageCage glass = homeMapper.SelectGlassInfo(glassid);
    if (types == 0) {
      homeMapper.UpdateCageTask1(glassid);
      // S7control.getinstance().WriteWord("DB105.16", (short) 0);
    } else {
      // spianMapper.UpdataOutCage1(glass.getGlassWidth(), glass.getCage(), glass.getCell());
      homeMapper.DeleteByGlassID(glassid);
      // S7control.getinstance().WriteWord("DB105.18", (short) 0);
    }
    map.put("message3", "200");
    return Result.success(map);
  }
  //终止进片/出片任务
  @GetMapping("/EndTask")
  public Result EndTask(int types) {
    storageCageService.EndTask(types);
    Map<String, Object> map = new HashMap<>();
    map.put("message3", "200");
    return Result.success(map);
  }
@@ -175,9 +169,7 @@
  // 手动删除理片笼玻璃
  @GetMapping("/DeleteByGlassID")
  public Result DeleteByGlassID(String glassid) {
    StorageCage glassinfor = homeMapper.SelectGlassInfo(glassid);
    spianMapper.UpdataOutCage1(glassinfor.getGlassWidth(), glassinfor.getCage(), glassinfor.getCell());
    homeMapper.DeleteByGlassID(glassid);
    outSliceServive.DeleteByGlassIDs(glassid);
    Map<String, Object> map = new HashMap<>();
    map.put("message3", "200");
    return Result.success(map);
@@ -195,10 +187,11 @@
        String position = jdbcConnections.SelectPositionByFrameBarcode(north_glass_buffer1.getFrameBarcode());
        if (position != null) {
          int sequence = homeMapper.SelectMaxSquence();
          homeMapper.AddOutSliceS(glassid, flip, north_glass_buffer1.getFrameBarcode(),
              north_glass_buffer1.getglasslengthmm().toString(), north_glass_buffer1.getglassheightmm().toString(),
              sequence, position, (short)0);
              sequence, position, (short) 0, north_glass_buffer1.getordernumber(), north_glass_buffer1.getlistnumber(),
              north_glass_buffer1.getboxnumber(), north_glass_buffer1.getglasslength().toString(),
              north_glass_buffer1.getglassheight().toString());
          map.put("message2", "200");
        } else {
          map.put("message2", "300");
@@ -206,7 +199,6 @@
      } else {
        map.put("message2", "400");
      }
    } else {
      map.put("message2", "500");
    }
@@ -268,7 +260,7 @@
        map.put("message", "200");
      }
    }
    return Result.success(map);
    return Result.success(map);
  }
  // 查询玻璃信息
@@ -340,6 +332,7 @@
  @PostMapping("/DeleteProductionQueueGlass")
  public Result DeleteProductionQueueGlass(String FrameNo) {
    homeMapper.CompleteQueueByFrameNo(FrameNo);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
@@ -347,18 +340,33 @@
  // 添加铝框id对应玻璃到出片队列
  @PostMapping("/AddOutSliceS")
  public Result AddOutSliceS(@RequestBody String[][] AluminumFrames) throws SQLException {
    outSliceServive.AddOutSliceS(AluminumFrames);
  public Result AddOutSliceS(String FrameNo) throws SQLException {
    //public Result AddOutSliceS(@RequestBody String[][] AluminumFrames) throws SQLException {
    north_Glass_Buffer1Service.AddOutSliceS(FrameNo);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
  }
  // 修改出片队列状态与出片队列调序
  // 修改出片队列出片状态
  @PostMapping("/isAllowQueues")
  public Result isAllowQueues(Boolean isAllowQueue, @RequestBody List<Out_slice> out_slice) {
    Plchome.isAllowQueue = isAllowQueue;
    if (isAllowQueue == true) {
    // if (isAllowQueue == true) {
    //   for (Out_slice out_slice2 : out_slice) {
    //     homeMapper.UpdateOutSliceSequence(out_slice2.getGlassId(), out_slice2.getSequence());
    //   }
    // }
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
  }
  // 修改出片队列调序状态与出片队列调序
  @PostMapping("/isAllowReorderings")
  public Result isAllowReorderings(Boolean isAllowReordering, @RequestBody List<Out_slice> out_slice) {
    Plchome.isAllowReordering = isAllowReordering;
    if (isAllowReordering == true) {
      for (Out_slice out_slice2 : out_slice) {
        homeMapper.UpdateOutSliceSequence(out_slice2.getGlassId(), out_slice2.getSequence());
      }
@@ -381,7 +389,13 @@
  @PostMapping("/CompleteQueue")
  public Result CompleteQueue(String id, String frameid, String glassid) {
    return outSliceServive.CompleteQueue(id, frameid, glassid);
  }
  // 手动完成任务
  @PostMapping("/FrameStateUpdate")
  public Result FrameStateUpdate(String frameno, String framestate) {
    return outSliceServive.FrameStateUpdate(frameno, framestate);
  }
}
springboot-vue3/src/main/java/com/example/springboot/controller/device/DeviceController.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/entity/Out_slice.java
@@ -11,6 +11,13 @@
    private String time;//修改时间
    private int sequence;//出片顺序
    private String position;//玻璃摆放位置
    private String orderId;//玻璃id
    private String listId;//集合id
    private String boxId;//箱子id
    private double glasswidthmm;//玻璃宽mm
    private double glassheightmm;//玻璃高mm
    private String position_x;//x坐标
    private int framestate;//y坐标
    public String getPosition() {
        return position;
@@ -124,4 +131,51 @@
    public void setSequence(int sequence) {
        this.sequence = sequence;
    }
    public String getOrderId() {
        return orderId;
    }
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
    public Double getGlassWidthMm() {
        return glasswidthmm;
    }
    public void setGlassWidthMm(Double glasswidthmm) {
        this.glasswidthmm = glasswidthmm;
    }
    public Double getGlassHeightMm() {
        return glassheightmm;
    }
    public void setGlassHeightMm(Double glassheightmm) {
        this.glassheightmm = glassheightmm;
    }
    public String getListId() {
        return listId;
    }
    public void setListno(String listId) {
        this.listId = listId;
    }
    public String getBoxId() {
        return boxId;
    }
    public void setBoxno(String boxId) {
        this.boxId = boxId;
    }
    public int getFrameState() {
        return framestate;
    }
    public void SetFrameState(int framestate) {
        this.framestate = framestate;
    }
}
springboot-vue3/src/main/java/com/example/springboot/entity/device/DeviceEntity.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java
@@ -1,41 +1,46 @@
package com.example.springboot.entity;
import java.util.Comparator;
//客户玻璃信息表
public class north_glass_buffer1 {
    private Integer id; //自增id
    private String ordernumber;//订单id
    private String listnumber;//集合id
    private String boxnumber;//箱子id
    private String barcode;//玻璃id
    private double glasslength;//玻璃宽
    private double glassheight;//玻璃高
    private double glasslengthmm;//玻璃宽mm
    private double glassheightmm;//玻璃高mm
    private Integer id; // 自增id
    private String ordernumber;// 订单id
    private String listnumber;// 集合id
    private String boxnumber;// 箱子id
    private String barcode;// 玻璃id
    private double glasslength;// 玻璃宽
    private double glassheight;// 玻璃高
    private double glasslengthmm;// 玻璃宽mm
    private double glassheightmm;// 玻璃高mm
    private String glassoutside;//
    private String glassinside;//
    private String glassbetween;//
    private String itemtype;//
    private String slotnumber;//格子
    private String slotnumber;// 格子
    private String datemodified;//
    private String datecreated;//
    private String FrameBarcode;//铝框id
    private String FrameBarcode;// 铝框id
    private StorageCage storageCage;
    public StorageCage storageCage;
    public void setstorageCage(StorageCage storageCage) {
        this.storageCage = storageCage;
    }
    public StorageCage getstorageCage() {
        return storageCage;
    }
    private Out_slice out_slice;
    public void setOut_slice(Out_slice out_slice) {
        this.out_slice = out_slice;
    }
    public Out_slice getOut_slice() {
        return out_slice;
    }
@@ -51,15 +56,19 @@
    public Integer getId() {
        return id;
    }
    public String getordernumber() {
        return ordernumber;
    }
    public void setordernumber(String ordernumber) {
        this.ordernumber = ordernumber;
    }
    public String getlistnumber() {
        return listnumber;
    }
    public void setlistnumber(String listnumber) {
        this.listnumber = listnumber;
    }
@@ -67,22 +76,23 @@
    public String getboxnumber() {
        return boxnumber;
    }
    public void setboxnumber(String boxnumber) {
        this.boxnumber = boxnumber;
    }
    public String getbarcode() {
        return barcode;
    }
    public void setbarcode(String barcode) {
        this.barcode = barcode;
    }
    public Double getglasslength() {
        return glasslength;
    }
    public void setglasslength(Double glasslength) {
        this.glasslength = glasslength;
    }
@@ -90,6 +100,7 @@
    public Double getglassheight() {
        return glassheight;
    }
    public void setglassheight(Double glassheight) {
        this.glassheight = glassheight;
    }
@@ -97,6 +108,7 @@
    public Double getglasslengthmm() {
        return glasslengthmm;
    }
    public void setglasslengthmm(Double glasslengthmm) {
        this.glasslengthmm = glasslengthmm;
    }
@@ -104,6 +116,7 @@
    public Double getglassheightmm() {
        return glassheightmm;
    }
    public void setglassheightmm(Double glassheightmm) {
        this.glassheightmm = glassheightmm;
    }
@@ -111,33 +124,41 @@
    public String getitemtype() {
        return itemtype;
    }
    public void setitemtype(String itemtype) {
        this.itemtype = itemtype;
    }
    public String getslotnumber() {
        return slotnumber;
    }
    public void setslotnumber(String slotnumber) {
        this.slotnumber = slotnumber;
    }
    public String getdatemodified() {
        return datemodified;
    }
    public void setdatemodified(String datemodified) {
        this.datemodified = datemodified;
    }
    public String getdatecreated() {
        return datecreated;
    }
    public void setdatecreated(String datecreated) {
        this.datecreated = datecreated;
    }
    public String getFrameBarcode() {
        return FrameBarcode;
    }
    public void setFrameBarcode(String FrameBarcode) {
        this.FrameBarcode = FrameBarcode;
    }
}
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -4,6 +4,7 @@
import com.example.springboot.entity.CarPosition;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.StorageTask;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.entity.Out_slice;
@@ -33,6 +34,8 @@
  // 查询5-1笼外层格子状态
  @Select("SELECT case when tier=1 then cage else 0 end as cage,case when tier=1 then state else 0 end as state,sum(case when tier=1 then glasswidth/2750*2 else 0 end) as glasswidth,sum(case when tier=2 then glasswidth/2750*2 else 0 end) as width  from storage_cage where cage<=5  group by cage,cell order by cage desc,cell desc")
  List<StorageCage> selectRack4();
  // 根据任务类型查询当前正在出片,进片的玻璃信息
  @Select("select * from storage_cage where state=#{task_type}")
@@ -71,7 +74,7 @@
  List<StorageCage> SelectCageInfo(String cage);
  // 手动完成出片任务修改笼子数据
  @Update("update storage_cage set state=0,glass_id=null,order_id=null,glasswidth=null,glassheight=null,glasswidthmm=null,glassheightmm=null,listid=null,boxid=null where glass_id=#{glassid}")
  @Update("update storage_cage set state=0,glass_id=null,order_id=null,glasswidth=null,glassheight=null,glasswidthmm=null,glassheightmm=null,listid=null,boxid=null,FrameBarcode=null where glass_id=#{glassid}")
  void DeleteByGlassID(String glassid);
  //查询小车位置
@@ -139,6 +142,10 @@
  @Select("select * from storage_cage where glass_id=#{glassid}")
  StorageCage SelectStorageGlassById(String glassid);
  //根据玻璃id查询笼内玻璃信息
  @Select("select * from storage_cage where glass_id=#{glassid}")
  List<StorageCage> SelectStoragesGlassById(String glassid);
  // //根据玻璃id删除出片队列玻璃
  // @Update("update out_slice set state=4 where barcode=#{FrameNo} and (state=0 or state=1 or state=2)")
@@ -149,13 +156,13 @@
  List<north_glass_buffer1> SelectAluminumFrameInfoById(String FrameBarcode);
  //查询玻璃是否已存在于出片队列
  @Select("select * from out_slice where glassid=#{getbarcode} and (state=0 or state=1 or state=2 or state=3)")
  //根据玻璃id查询出片队列信息
  @Select("select * from out_slice where glassid=#{getbarcode}")
  Out_slice SelectQueueByglassid(String getbarcode);
  //添加出片队列
  @Insert("INSERT INTO out_slice( `glassId`, `barcode`, `glasswidth`, `glassheight`, `state`, `flip`, `sequence`, `time` ,`position`) VALUES ( #{glassid}, #{FrameNo}, #{glasslengthMm}, #{glassheightMm}, #{state}, #{flip}, #{sequence}, now(), #{position});")
  void AddOutSliceS(String glassid, String flip, String FrameNo, String glasslengthMm, String glassheightMm, int sequence, String position, Short state);
  @Insert("INSERT INTO out_slice( `glassId`, `barcode`, `glasswidth`, `glassheight`, `state`, `flip`, `sequence`, `time` ,`position` ,`orderid` ,`listid` ,`boxid` ,`glasswidthmm` ,`glassheightmm`) VALUES ( #{glassid}, #{FrameNo}, #{glasslengthMm}, #{glassheightMm}, #{state}, #{flip}, #{sequence}, now(), #{position}, #{orderid}, #{listid}, #{boxid}, #{glasswidth}, #{glassheight});")
  void AddOutSliceS(String glassid, String flip, String FrameNo, String glasslengthMm, String glassheightMm, int sequence, String position, Short state,String orderid, String listid, String boxid, String glasswidth, String glassheight);
  //出片队列调序
  @Update("update out_slice set sequence=#{sequence} where glassid=#{glassId}")
@@ -167,19 +174,37 @@
  //查询用户权限
  @Select("select rp.* from role_permission rp inner join user r on rp.role_id=r.role_id and r.username=#{username} and (permission_id=32 or permission_id=33 or permission_id=34 or permission_id=35)")
  List<RolePermission> SelectPermissionByUserName(String username);
  //完成出片任务
  @Update("update out_slice set state=2 where id=#{id}")
  //根据玻璃完成出片任务
  @Update("update out_slice set state=4 where id=#{id}")
  void CompleteQueue(String id);
  //根据玻璃完成出片任务
  @Update("update out_slice set state=4 where id=#{id}")
  void CompleteQueueByGlassId(String glassid);
  //查询铝框id对应玻璃完成数量
  @Select("select count(*) from out_slice where barcode=#{frameid} and state<2")
  @Select("select count(*) from out_slice where barcode=#{frameid} and state!=4")
  Short SelectCountByFrameNo(String frameid);
  //删除已完成的任务
  @Update("delete from out_slice where Barcode=#{frameid}")
  @Delete("delete from out_slice where Barcode=#{frameid}")
  void CompleteQueueByFrameNo(String frameid);
  //查询笼内格子剩余宽度
  @Select("Select width from storage_cage where cage=#{cage} and cell=#{cell} limit 1")
  Double SelectCageWidth(short cage, short cell);
  //修改出片队列玻璃状态为缺失
  @Update("update out_slice set state=3 where glassId=#{glassid} and state<3")
  void UpdateOutSliceGlass(String glassid);
  //查询未完成的任务
  @Select("select * from storage_task where task_state=0 and task_type=#{task_type}")
  List<StorageTask> SelectTaskByState(int task_type);
  //修改出片队列铝框状态
  @Select("update out_slice set framestate=#{framestate} where barcode=#{frameno}")
  void FrameStateUpdate(String frameno, String framestate);
}
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -16,7 +16,7 @@
    @Select("select COUNT(if(a.state1=0,cell,0))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 a.cage,FrameBarcode,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,disabled,FrameBarcode 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 FrameBarcode=#{Fbarcode} desc,shu desc,shu2,cage asc; ")
    @Select("select a.cage,FrameBarcode,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,disabled,FrameBarcode 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 (FrameBarcode=#{Fbarcode} or ''='') desc,shu desc,shu2,cage asc; ")
    List<StorageCage> selectAll(String orderids,String Fbarcode);
    // 获取判断该格子是否需要把外片推入内片位置
@@ -34,7 +34,7 @@
    // 完成进片中的玻璃状态
    @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);
@@ -75,8 +75,7 @@
    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},FrameBarcode=#{glass.FrameBarcode} where id=#{id};")
    void UpdataAddCage2(String orderid, String glassid, north_glass_buffer1 glass, int cage, int cell, int id,
            int state);
    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};")
@@ -95,7 +94,7 @@
    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=2,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}")
    @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,a.FrameBarcode=b.FrameBarcode 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},
@@ -118,11 +117,11 @@
    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")
    @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,a.FrameBarcode=b.FrameBarcode where a.cage=#{cage} and a.cell=#{cell} and a.tier=2")
    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;")
    @Update("update storage_cage a set glass_id=null,order_id=null,state=0,glasswidth=null,glassheight=null,glasswidthmm=null,glassheightmm=null,listid=null,boxid=null,FrameBarcode=null where a.cage=#{cage} and a.cell=#{cell} and a.tier=1;")
    void UpdateDBCage2(int cage, int cell);
    // 判断是否有调拨完后出片的任务
@@ -197,10 +196,13 @@
    // 判断铝框出片表是否有玻璃正在出片中
    @Select("SELECT count(*) FROM `out_slice` where state=1;")
    int SelectOutSliceshu();
    //判断是否有调拨任务未完成
    @Select("SELECT count(*) FROM `storage_cage` where state=#{state};")
    int Selectcageout(int state);
    // 更新出片队列的任务状态
    @Update("update out_slice set state=#{state} where glassid=#{glassid} and state=1")
    void OverOutSlice(String glassid, int state);
    @Update("update out_slice set state=#{state} where glassid=#{glassid} and state=#{state2}")
    void OverOutSlice(String glassid, int state,int state2);
    // 获取玻璃的铝框id
    @Select("select barcode from out_slice where glassid=#{glassid};")
springboot-vue3/src/main/java/com/example/springboot/mapper/device/DeviceMapper.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/service/North_Glass_Buffer1Service.java
@@ -1,13 +1,17 @@
package com.example.springboot.service;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.mapper.HomeMapper;
import java.util.Collections;
@Service
public class North_Glass_Buffer1Service {
@@ -17,7 +21,34 @@
    @Autowired
    private JdbcConnections jdbcConnections;
    //获取玻璃是否在笼子,是否在出片队列
    class north_glass_buffer1Comparator implements Comparator<north_glass_buffer1> {
        @Override
        public int compare(north_glass_buffer1 n1, north_glass_buffer1 n2) {//对查询到的铝框对应的玻璃数据进行排序,将离出片位置近的,靠近笼子出片侧的玻璃排在前面
            if (n1.getstorageCage() != null) {
                if (n2.getstorageCage() != null) {
                    int cageComparison = n2.getstorageCage().getCage().compareTo(n1.getstorageCage().getCage());//靠出片口近的笼子优先
                    if (cageComparison != 0) {
                        return cageComparison;
                    } else {
                        int cellComparison = n2.getstorageCage().getCell().compareTo(n1.getstorageCage().getCell());//靠出片口近的格子优先
                        if (cellComparison != 0) {
                            return cellComparison;
                        } else {
                            return n2.getstorageCage().getTier().compareTo(n1.getstorageCage().getTier());//靠出片口近的格子外层优先
                        }
                    }
                } else {
                    return -1;
                }
            } else {
                return 1;
            }
        }
    }
    // 获取玻璃是否在笼子,是否在出片队列
    public List<north_glass_buffer1> SelectAluminumFrameInfoById(String FrameBarcode) throws SQLException {
        List<north_glass_buffer1> listAluminumFrame = jdbcConnections
                .SelectGlassByGlassIdOrderIdFrameIdss(FrameBarcode);
@@ -25,27 +56,32 @@
            north_glass_buffer1.setstorageCage(homeMapper.SelectStorageGlassById(north_glass_buffer1.getbarcode()));
            north_glass_buffer1.setOut_slice(homeMapper.SelectQueueByglassid(north_glass_buffer1.getbarcode()));
        }
        // 对嵌套类的其中一列进行排序
        Collections.sort(listAluminumFrame, new north_glass_buffer1Comparator());
        return listAluminumFrame;
    }
    //根据铝框id添加玻璃到出片队列
    public void AddOutSliceS(String FrameBarcode) throws SQLException{
        List<north_glass_buffer1> north_glass_buffer1s=SelectAluminumFrameInfoById(FrameBarcode);
    // 根据铝框id添加玻璃到出片队列
    public void AddOutSliceS(String FrameBarcode) throws SQLException {
        List<north_glass_buffer1> north_glass_buffer1s = SelectAluminumFrameInfoById(FrameBarcode);
        String flip = jdbcConnections.SelectFlipByFrameBarcode(FrameBarcode);
        String position =jdbcConnections.SelectPositionByFrameBarcode(FrameBarcode);
        int sequence=homeMapper.SelectMaxSquence();
        String position = jdbcConnections.SelectPositionByFrameBarcode(FrameBarcode);
        int sequence = homeMapper.SelectMaxSquence();
        for (north_glass_buffer1 north_glass_buffer1 : north_glass_buffer1s) {
            Short state=0;
            if(north_glass_buffer1.getOut_slice()==null){
                if(north_glass_buffer1.getstorageCage()==null){
                    state=3;
            Short state = 0;
            if (north_glass_buffer1.getOut_slice() == null) {
                if (north_glass_buffer1.getstorageCage() == null) {
                    state = 3;
                }
                homeMapper.AddOutSliceS(north_glass_buffer1.getbarcode(), flip, FrameBarcode, north_glass_buffer1.getglasslengthmm().toString(), north_glass_buffer1.getglassheightmm().toString(), sequence, position, state);
                sequence+=1;
                homeMapper.AddOutSliceS(north_glass_buffer1.getbarcode(), flip, FrameBarcode,
                        north_glass_buffer1.getglasslengthmm().toString(),
                        north_glass_buffer1.getglassheightmm().toString(), sequence, position, state,
                        north_glass_buffer1.getordernumber(), north_glass_buffer1.getlistnumber(),
                        north_glass_buffer1.getboxnumber(), north_glass_buffer1.getglasslength().toString(),
                        north_glass_buffer1.getglassheight().toString());
                sequence += 1;
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java
@@ -6,11 +6,9 @@
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoProperties.Storage;
import org.springframework.stereotype.Service;
import com.example.springboot.common.Result;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.Out_slice;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.mapper.HomeMapper;
@@ -23,33 +21,35 @@
  private HomeMapper homeMapper;
  @Autowired
  private SpianMapper spianMapper;
  @Autowired
  private JdbcConnections jdbcConnections;
  SpianService spianService;
  public void AddOutSliceS(String[][] AluminumFrames) throws SQLException {
    int sequence = homeMapper.SelectMaxSquence();
    // int sequence = homeMapper.SelectMaxSquence();
    // 添加到数据库
    for (String[] item : AluminumFrames) {
      if (item[1] == "true") {
        Short state=0;
        String position = jdbcConnections.SelectPositionByFrameBarcode(item[3]);
        homeMapper.AddOutSliceS(item[0], item[2], item[3], item[4], item[5], sequence, position,state );
        sequence += 1;
      }
    }
    // for (String[] item : AluminumFrames) {
    // if (item[1] == "true") {
    // Short state=0;
    // String position = jdbcConnections.SelectPositionByFrameBarcode(item[3]);
    // homeMapper.AddOutSliceS(item[0], item[2], item[3], item[4], item[5],
    // sequence, position,state );
    // sequence += 1;
    // }
    // }
  }
  // 查询出片队列
  public List<Out_slice> SelectProductionqueue() {
    List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
    for (Out_slice out_slice : listoutslice) {
      out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
    }
    // for (Out_slice out_slice : listoutslice) {
    // out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
    // }
    return listoutslice;
  }
  // 完成出片任务
  public Result CompleteQueue(String id, String frameid, String glassid) {
    homeMapper.CompleteQueue(id);
    Short num = homeMapper.SelectCountByFrameNo(frameid);
@@ -57,14 +57,52 @@
      homeMapper.CompleteQueueByFrameNo(frameid);
    }
    StorageCage storageCage = homeMapper.SelectGlassInfo(glassid);
    if(storageCage!=null){
    if (storageCage != null&&storageCage.getState().equals("3")) {
      spianMapper.UpdataOutCage1(storageCage.getGlassWidth(), storageCage.getCage(), storageCage.getCell());
      homeMapper.DeleteByGlassID(glassid);
    }
    homeMapper.DeleteByGlassID(glassid);
    S7control.getinstance().WriteWord("DB105.12", (short) 0);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
  }
  // 确认后完成修改出片队列状态
  public void CompleteQueueByGlassId(String glassid) {
    homeMapper.CompleteQueueByGlassId(glassid);
    Out_slice outslice=homeMapper.SelectQueueByglassid(glassid);
    Short num = homeMapper.SelectCountByFrameNo(outslice.getBarCode());
    if (num == 0) {
      homeMapper.CompleteQueueByFrameNo(outslice.getBarCode());
    }
  }
  //终止进片/出片
  public void StopTask(String glassid, int i) {
    if (i == 0) {// 进片终止
      spianService.overtask(glassid);
      DeleteByGlassIDs(glassid);
      homeMapper.UpdateOutSliceGlass(glassid);
    } else {// 出片终止
      spianMapper.UpdatetaskOut(glassid);//完成出片任务
      spianMapper.UpdataGlassCage(glassid, 0);// 清除出片格子玻璃信息
      spianMapper.UpdateCageOver(glassid, 0);// 更改笼子表出片状态
      homeMapper.UpdateOutSliceGlass(glassid);//修改出片队列此玻璃状态为缺失
    }
  }
  //删除笼内玻璃还原宽度
  public void DeleteByGlassIDs(String glassid) {
    StorageCage glassinfor = homeMapper.SelectGlassInfo(glassid);
    spianMapper.UpdataOutCage1(glassinfor.getGlassWidth(), glassinfor.getCage(), glassinfor.getCell());
    homeMapper.DeleteByGlassID(glassid);
  }
public Result FrameStateUpdate(String frameno, String framestate) {
    homeMapper.FrameStateUpdate(frameno, framestate);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
}
}
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -96,7 +96,7 @@
                    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 {
                    // 数据库修改笼子表新增一条玻璃
@@ -105,7 +105,7 @@
                    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);
                    // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
@@ -155,9 +155,9 @@
            datas.add((short) 1000);
            datas.add((short) state);
            datas.add((short) 1);
            spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务状态为进行中
            spianMapper.OverOutSlice(glassid.toString(), 1,0);// 更新出片队列任务状态为进行中
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
            spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
            spianMapper.UpdataGlassCageState(glassid.toString(), 3);// 更改笼子表的玻璃状态
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, state);// 新增任务
            // int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
@@ -180,11 +180,11 @@
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务状态为进行中
                spianMapper.OverOutSlice(glassid.toString(), 1,0);// 更新出片队列任务状态为进行中
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, 1);// 新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
                spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务
                System.out.println("出片任务|" + datas);
                outmesid(glassid, "DB105.34");// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
@@ -307,7 +307,7 @@
    public void overtask(String glassid) {
        spianMapper.UpdatetaskOut(glassid.toString());// 完成上一次 出片或者进片任务
        spianMapper.OverOutSlice(glassid.toString(), 2);// 完成出片队列任务
        spianMapper.OverOutSlice(glassid.toString(), 2,1);// 完成出片队列任务
        spianMapper.UpdataGlassCage(glassid.toString(), 0);// 清除出片格子玻璃信息
        spianMapper.UpdateCageOver(glassid.toString(), 0);// 更改笼子表出片状态
        spianMapper.UpdateCageadd(glassid.toString(), 1);// 更改笼子表进片状态
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
New file
@@ -0,0 +1,58 @@
package com.example.springboot.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.StorageTask;
import com.example.springboot.mapper.HomeMapper;
@Service
public class StorageCageService {
    @Autowired
    private HomeMapper homeMapper;
    @Autowired
    private OutSliceServive outSliceServive;
    @Autowired
    private SpianService spianService;
    public void EndTask(int types) {
        if (types == 0) {// 终止进片任务
            List<StorageTask> cageList = homeMapper.SelectTaskByState(types);
            for (StorageTask storageTask : cageList) {
                outSliceServive.StopTask(storageTask.getGlassId(), types);
            }
            // 发送终止进片任务信号
        } else {// 终止出片任务
            List<StorageCage> storageCages = homeMapper.selectinout(3);
            for (StorageCage storageCage : storageCages) {
                List<StorageCage> storageCagess = homeMapper.SelectStoragesGlassById(storageCage.getGlassId());
                for (StorageCage storageCagez : storageCagess) {
                    if (storageCagez.getState().equals("2")) {// 调拨进片
                        outSliceServive.StopTask(storageCagez.getGlassId(), 0);
                    } else {// 出片
                        outSliceServive.StopTask(storageCagez.getGlassId(), types);
                    }
                }
            }
        }
    }
    public void UpdateTask(Integer types, Integer shelfrack, String glassid) {
        if (types == 0) {// 完成进片
            spianService.overtask(glassid);
        } else if (types == 1) {// 完成出片
            spianService.overtask(glassid);
        } else if (types == 2) {// 终止进片任务
            outSliceServive.StopTask(glassid, 0);
            // 发送终止进片任务信号
        } else {// 终止出片任务
            outSliceServive.StopTask(glassid, 1);
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/device/DeviceService.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/service/device/impl/DeviceServiceImpl.java
File was deleted
springboot-vue3/src/main/resources/com/example/springboot/mapper/DeviceMapper.xml
@@ -2,39 +2,39 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springboot.mapper.device.DeviceMapper">
    <resultMap id="myResultMap" type="com.example.springboot.entity.device.DeviceEntity">
        <!-- 根据你的实际情况定义结果映射 -->
        <!-- 示例中将结果映射到实体类的属性 -->
        <id property="id" column="id"/>
        <result property="name" column="device_name"/>
        <!-- 其他属性映射 -->
    </resultMap>
<!--    <resultMap id="myResultMap" type="com.example.springboot.entity.device.DeviceEntity">-->
<!--        &lt;!&ndash; 根据你的实际情况定义结果映射 &ndash;&gt;-->
<!--        &lt;!&ndash; 示例中将结果映射到实体类的属性 &ndash;&gt;-->
<!--        <id property="id" column="id"/>-->
<!--        <result property="name" column="device_name"/>-->
<!--        &lt;!&ndash; 其他属性映射 &ndash;&gt;-->
<!--    </resultMap>-->
    <select id="selectAllDevices" resultMap="myResultMap">
        SELECT *
        FROM device
    </select>
<!--    <select id="selectAllDevices" resultMap="myResultMap">-->
<!--        SELECT *-->
<!--        FROM device-->
<!--    </select>-->
    <select id="callStoredProc" statementType="CALLABLE" resultMap="myResultMap">
        { call Your_Stored_Procedure(
                #{id, mode=IN, jdbcType=VARCHAR},
                #{name, mode=IN, jdbcType=VARCHAR}
<!--    <select id="callStoredProc" statementType="CALLABLE" resultMap="myResultMap">-->
<!--        { call Your_Stored_Procedure(-->
<!--                #{id, mode=IN, jdbcType=VARCHAR},-->
<!--                #{name, mode=IN, jdbcType=VARCHAR}-->
            ) }
    </select>
<!--            ) }-->
<!--    </select>-->
    <update id="updateDeviceName">
        UPDATE device SET
                          device_name = #{deviceName},
                          address = #{address}
        WHERE id = #{id}
    </update>
    <update id="updateMultipleDevices" parameterType="java.util.List">
        <foreach collection="list" item="device" separator=";">
            UPDATE device SET
            device_name = #{device.deviceName},
            address = #{device.address}
            WHERE id = #{device.id}
        </foreach>
    </update>
<!--    <update id="updateDeviceName">-->
<!--        UPDATE device SET-->
<!--                          device_name = #{deviceName},-->
<!--                          address = #{address}-->
<!--        WHERE id = #{id}-->
<!--    </update>-->
<!--    <update id="updateMultipleDevices" parameterType="java.util.List">-->
<!--        <foreach collection="list" item="device" separator=";">-->
<!--            UPDATE device SET-->
<!--            device_name = #{device.deviceName},-->
<!--            address = #{device.address}-->
<!--            WHERE id = #{device.id}-->
<!--        </foreach>-->
<!--    </update>-->
</mapper>
springboot-vue3/src/main/resources/sql/canadames.sql
@@ -11,7 +11,7 @@
 Target Server Version : 80022
 File Encoding         : 65001
 Date: 11/12/2023 13:35:48
 Date: 20/12/2023 15:38:31
*/
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 = 1742 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 1990 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of alarmmg
@@ -438,6 +438,254 @@
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');
INSERT INTO `alarmmg` VALUES (1742, 'A01 servo turn error', '2023-12-13 09:55:07', '2023-12-13 10:15:12');
INSERT INTO `alarmmg` VALUES (1743, 'A02 servo turn error', '2023-12-13 09:55:07', '2023-12-13 10:15:12');
INSERT INTO `alarmmg` VALUES (1744, 'A01 servo travel error', '2023-12-13 10:50:47', '2023-12-13 10:51:29');
INSERT INTO `alarmmg` VALUES (1745, 'A02 servo travel error', '2023-12-13 10:50:50', '2023-12-13 10:51:29');
INSERT INTO `alarmmg` VALUES (1746, 'A02 servo travel error', '2023-12-13 10:52:03', '2023-12-13 10:54:11');
INSERT INTO `alarmmg` VALUES (1747, 'A01 servo travel error', '2023-12-13 10:52:05', '2023-12-13 10:54:11');
INSERT INTO `alarmmg` VALUES (1748, 'A01 servo turn error', '2023-12-13 10:54:33', '2023-12-13 10:55:09');
INSERT INTO `alarmmg` VALUES (1749, 'A02 servo turn error', '2023-12-13 10:54:33', '2023-12-13 10:55:09');
INSERT INTO `alarmmg` VALUES (1750, 'A02 servo travel error', '2023-12-13 10:54:44', '2023-12-13 10:55:10');
INSERT INTO `alarmmg` VALUES (1751, 'A01 servo travel error', '2023-12-13 10:54:50', '2023-12-13 10:55:10');
INSERT INTO `alarmmg` VALUES (1752, 'A01 servo travel error', '2023-12-13 10:55:44', '2023-12-13 10:56:09');
INSERT INTO `alarmmg` VALUES (1753, 'A02 servo travel error', '2023-12-13 10:55:47', '2023-12-13 10:56:09');
INSERT INTO `alarmmg` VALUES (1754, 'A01 servo travel error', '2023-12-13 10:56:43', '2023-12-13 10:58:29');
INSERT INTO `alarmmg` VALUES (1755, 'A02 servo travel error', '2023-12-13 10:56:46', '2023-12-13 10:58:29');
INSERT INTO `alarmmg` VALUES (1756, 'A01 servo turn error', '2023-12-13 10:58:29', '2023-12-13 10:58:30');
INSERT INTO `alarmmg` VALUES (1757, 'A01 servo travel error', '2023-12-13 10:59:26', '2023-12-13 10:59:44');
INSERT INTO `alarmmg` VALUES (1758, 'A02 servo travel error', '2023-12-13 10:59:26', '2023-12-13 10:59:44');
INSERT INTO `alarmmg` VALUES (1759, 'A01 servo turn error', '2023-12-13 10:59:44', '2023-12-13 10:59:47');
INSERT INTO `alarmmg` VALUES (1760, 'A01 conveyor right safety alarm', '2023-12-13 11:19:58', '2023-12-13 11:20:01');
INSERT INTO `alarmmg` VALUES (1761, 'A01 conveyor right safety alarm', '2023-12-13 11:20:10', '2023-12-13 11:20:12');
INSERT INTO `alarmmg` VALUES (1762, '1# buffer safety alarm', '2023-12-13 11:20:11', '2023-12-13 11:20:13');
INSERT INTO `alarmmg` VALUES (1763, 'A01 conveyor right safety alarm', '2023-12-13 11:26:44', '2023-12-13 11:26:47');
INSERT INTO `alarmmg` VALUES (1764, 'More glass than known', '2023-12-13 11:26:51', '2023-12-13 11:27:46');
INSERT INTO `alarmmg` VALUES (1765, 'A01 servo travel error', '2023-12-13 11:29:12', '2023-12-13 11:29:15');
INSERT INTO `alarmmg` VALUES (1766, 'A02 servo travel error', '2023-12-13 11:29:14', '2023-12-13 11:29:15');
INSERT INTO `alarmmg` VALUES (1767, 'A01 servo turn error', '2023-12-13 11:29:15', '2023-12-13 11:29:30');
INSERT INTO `alarmmg` VALUES (1768, 'A02 servo turn error', '2023-12-13 11:29:15', '2023-12-13 11:29:30');
INSERT INTO `alarmmg` VALUES (1769, 'A01 conveyor right safety alarm', '2023-12-13 11:30:35', '2023-12-13 11:30:37');
INSERT INTO `alarmmg` VALUES (1770, 'A01 conveyor right safety alarm', '2023-12-13 11:30:46', '2023-12-13 11:30:49');
INSERT INTO `alarmmg` VALUES (1771, '1# buffer safety alarm', '2023-12-13 11:30:46', '2023-12-13 11:30:50');
INSERT INTO `alarmmg` VALUES (1772, '2# buffer safety alarm', '2023-12-13 11:35:31', '2023-12-13 11:35:34');
INSERT INTO `alarmmg` VALUES (1773, 'A02 conveyor Left safety alarm', '2023-12-13 11:35:32', '2023-12-13 11:35:34');
INSERT INTO `alarmmg` VALUES (1774, 'More glass than known', '2023-12-13 11:35:45', '2023-12-13 11:45:23');
INSERT INTO `alarmmg` VALUES (1775, 'More glass than known', '2023-12-13 11:47:33', '2023-12-13 11:48:58');
INSERT INTO `alarmmg` VALUES (1776, 'A01 servo turn error', '2023-12-13 11:48:59', '2023-12-13 11:49:29');
INSERT INTO `alarmmg` VALUES (1777, 'A02 servo turn error', '2023-12-13 11:48:59', '2023-12-13 11:49:29');
INSERT INTO `alarmmg` VALUES (1778, 'A02 servo travel error', '2023-12-13 11:49:20', '2023-12-13 11:49:23');
INSERT INTO `alarmmg` VALUES (1779, 'A01 servo travel error', '2023-12-13 11:49:22', '2023-12-13 11:49:23');
INSERT INTO `alarmmg` VALUES (1780, 'A01 servo travel error', '2023-12-14 09:30:09', '2023-12-14 10:07:16');
INSERT INTO `alarmmg` VALUES (1781, 'A02 servo travel error', '2023-12-14 09:30:09', '2023-12-14 10:07:16');
INSERT INTO `alarmmg` VALUES (1782, 'emergency stop alarm', '2023-12-14 10:07:16', '2023-12-14 10:07:18');
INSERT INTO `alarmmg` VALUES (1783, 'A01 servo travel error', '2023-12-14 10:07:51', '2023-12-14 10:07:55');
INSERT INTO `alarmmg` VALUES (1784, 'A02 servo travel error', '2023-12-14 10:07:54', '2023-12-14 10:07:55');
INSERT INTO `alarmmg` VALUES (1785, 'A01 servo turn error', '2023-12-14 10:07:55', '2023-12-14 10:08:02');
INSERT INTO `alarmmg` VALUES (1786, 'A02 servo turn error', '2023-12-14 10:07:55', '2023-12-14 10:07:56');
INSERT INTO `alarmmg` VALUES (1787, 'emergency stop alarm', '2023-12-14 10:14:10', '2023-12-14 10:18:21');
INSERT INTO `alarmmg` VALUES (1788, 'A01 servo turn error', '2023-12-14 10:18:36', '2023-12-14 10:19:26');
INSERT INTO `alarmmg` VALUES (1789, 'A02 servo turn error', '2023-12-14 10:18:36', '2023-12-14 10:19:26');
INSERT INTO `alarmmg` VALUES (1790, 'A01 servo travel error', '2023-12-14 10:18:54', '2023-12-14 10:19:42');
INSERT INTO `alarmmg` VALUES (1791, 'A02 servo turn error', '2023-12-14 10:37:57', '2023-12-14 10:40:21');
INSERT INTO `alarmmg` VALUES (1792, 'emergency stop alarm', '2023-12-14 10:40:21', '2023-12-14 10:40:31');
INSERT INTO `alarmmg` VALUES (1793, 'A02 servo turn error', '2023-12-14 10:41:47', '2023-12-14 10:51:01');
INSERT INTO `alarmmg` VALUES (1794, 'A02 servo travel error', '2023-12-14 10:44:01', '2023-12-14 10:44:10');
INSERT INTO `alarmmg` VALUES (1795, 'A02 servo travel error', '2023-12-14 10:44:12', '2023-12-14 10:44:53');
INSERT INTO `alarmmg` VALUES (1796, 'emergency stop alarm', '2023-12-14 10:51:01', '2023-12-14 10:53:59');
INSERT INTO `alarmmg` VALUES (1797, 'D01 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1798, 'D02 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1799, 'D03 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1800, 'D04 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1801, 'D05 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1802, 'D06 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:54');
INSERT INTO `alarmmg` VALUES (1803, 'B01 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1804, 'B02 VFD error', '2023-12-14 10:53:59', '2023-12-14 10:54:55');
INSERT INTO `alarmmg` VALUES (1805, 'A02 servo turn error', '2023-12-14 10:53:59', '2023-12-14 10:54:53');
INSERT INTO `alarmmg` VALUES (1806, 'A01 servo travel error', '2023-12-14 10:53:59', '2023-12-14 10:54:54');
INSERT INTO `alarmmg` VALUES (1807, 'A02 servo travel error', '2023-12-14 10:53:59', '2023-12-14 10:54:54');
INSERT INTO `alarmmg` VALUES (1808, 'emergency stop alarm', '2023-12-14 10:54:53', '2023-12-14 10:55:04');
INSERT INTO `alarmmg` VALUES (1809, 'A01 servo turn error', '2023-12-14 10:55:56', '2023-12-14 10:56:00');
INSERT INTO `alarmmg` VALUES (1810, 'A02 servo turn error', '2023-12-14 10:55:56', '2023-12-14 11:20:58');
INSERT INTO `alarmmg` VALUES (1811, 'emergency stop alarm', '2023-12-14 11:20:58', '2023-12-14 11:21:24');
INSERT INTO `alarmmg` VALUES (1812, 'emergency stop alarm', '2023-12-14 11:23:01', '2023-12-14 11:23:03');
INSERT INTO `alarmmg` VALUES (1813, 'A01 servo travel error', '2023-12-14 11:23:40', '2023-12-14 11:23:49');
INSERT INTO `alarmmg` VALUES (1814, 'A02 servo travel error', '2023-12-14 11:23:40', '2023-12-14 11:23:49');
INSERT INTO `alarmmg` VALUES (1815, 'A01 servo turn error', '2023-12-14 11:23:49', '2023-12-14 11:29:17');
INSERT INTO `alarmmg` VALUES (1816, 'A02 servo turn error', '2023-12-14 11:23:49', '2023-12-14 11:29:17');
INSERT INTO `alarmmg` VALUES (1817, 'D01 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:29');
INSERT INTO `alarmmg` VALUES (1818, 'D02 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:29');
INSERT INTO `alarmmg` VALUES (1819, 'D03 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:29');
INSERT INTO `alarmmg` VALUES (1820, 'D04 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:29');
INSERT INTO `alarmmg` VALUES (1821, 'D05 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:29');
INSERT INTO `alarmmg` VALUES (1822, 'D06 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:29');
INSERT INTO `alarmmg` VALUES (1823, 'B01 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:00');
INSERT INTO `alarmmg` VALUES (1824, 'B02 VFD error', '2023-12-14 11:29:17', '2023-12-14 11:30:00');
INSERT INTO `alarmmg` VALUES (1825, 'A01 servo travel error', '2023-12-14 11:29:17', '2023-12-14 11:30:00');
INSERT INTO `alarmmg` VALUES (1826, 'A02 servo travel error', '2023-12-14 11:29:17', '2023-12-14 11:30:00');
INSERT INTO `alarmmg` VALUES (1827, 'emergency stop alarm', '2023-12-14 11:30:26', '2023-12-14 11:30:33');
INSERT INTO `alarmmg` VALUES (1828, 'A01 servo travel error', '2023-12-14 11:31:05', '2023-12-14 11:31:14');
INSERT INTO `alarmmg` VALUES (1829, 'A02 servo travel error', '2023-12-14 11:31:05', '2023-12-14 11:31:14');
INSERT INTO `alarmmg` VALUES (1830, 'emergency stop alarm', '2023-12-14 11:31:39', '2023-12-14 11:31:49');
INSERT INTO `alarmmg` VALUES (1831, 'A01 servo turn error', '2023-12-14 11:32:28', '2023-12-14 11:34:11');
INSERT INTO `alarmmg` VALUES (1832, 'D01 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:32');
INSERT INTO `alarmmg` VALUES (1833, 'D02 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:32');
INSERT INTO `alarmmg` VALUES (1834, 'D03 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:32');
INSERT INTO `alarmmg` VALUES (1835, 'D04 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:32');
INSERT INTO `alarmmg` VALUES (1836, 'D05 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:32');
INSERT INTO `alarmmg` VALUES (1837, 'D06 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:32');
INSERT INTO `alarmmg` VALUES (1838, 'B01 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:03');
INSERT INTO `alarmmg` VALUES (1839, 'B02 VFD error', '2023-12-14 11:34:11', '2023-12-14 11:35:03');
INSERT INTO `alarmmg` VALUES (1840, 'A01 servo travel error', '2023-12-14 11:34:11', '2023-12-14 11:35:03');
INSERT INTO `alarmmg` VALUES (1841, 'A02 servo travel error', '2023-12-14 11:34:12', '2023-12-14 11:35:03');
INSERT INTO `alarmmg` VALUES (1842, 'emergency stop alarm', '2023-12-14 11:35:30', '2023-12-14 11:35:40');
INSERT INTO `alarmmg` VALUES (1843, 'A01 servo travel error', '2023-12-15 10:11:02', '2023-12-15 10:11:19');
INSERT INTO `alarmmg` VALUES (1844, 'A02 servo travel error', '2023-12-15 10:11:02', '2023-12-15 10:11:19');
INSERT INTO `alarmmg` VALUES (1845, 'A01 conveyor right safety alarm', '2023-12-15 11:04:15', '2023-12-15 11:04:17');
INSERT INTO `alarmmg` VALUES (1846, 'A01 conveyor right safety alarm', '2023-12-15 11:04:27', '2023-12-15 11:31:52');
INSERT INTO `alarmmg` VALUES (1847, '1# buffer safety alarm', '2023-12-15 11:04:27', '2023-12-15 11:31:52');
INSERT INTO `alarmmg` VALUES (1848, '2# buffer safety alarm', '2023-12-15 11:06:47', '2023-12-15 11:06:49');
INSERT INTO `alarmmg` VALUES (1849, 'A01 conveyor right safety alarm', '2023-12-15 11:32:51', '2023-12-15 11:32:54');
INSERT INTO `alarmmg` VALUES (1850, 'A01 conveyor right safety alarm', '2023-12-15 11:33:03', '2023-12-15 11:33:06');
INSERT INTO `alarmmg` VALUES (1851, '1# buffer safety alarm', '2023-12-15 11:33:04', '2023-12-15 11:33:06');
INSERT INTO `alarmmg` VALUES (1852, 'A02 conveyor Left safety alarm', '2023-12-15 11:35:56', '2023-12-15 11:35:58');
INSERT INTO `alarmmg` VALUES (1853, '2# buffer safety alarm', '2023-12-15 11:35:56', '2023-12-15 11:35:58');
INSERT INTO `alarmmg` VALUES (1854, 'A02 conveyor Left safety alarm', '2023-12-15 11:36:12', '2023-12-15 11:36:16');
INSERT INTO `alarmmg` VALUES (1855, '2# buffer safety alarm', '2023-12-15 11:36:12', '2023-12-15 11:36:16');
INSERT INTO `alarmmg` VALUES (1856, 'A02 conveyor Left safety alarm', '2023-12-15 11:36:29', '2023-12-15 11:36:32');
INSERT INTO `alarmmg` VALUES (1857, '2# buffer safety alarm', '2023-12-15 11:36:29', '2023-12-15 11:36:32');
INSERT INTO `alarmmg` VALUES (1858, 'less glass than known', '2023-12-15 11:36:45', '2023-12-15 11:40:24');
INSERT INTO `alarmmg` VALUES (1859, 'A01 servo turn error', '2023-12-15 13:53:38', '2023-12-15 13:58:17');
INSERT INTO `alarmmg` VALUES (1860, 'A02 servo turn error', '2023-12-15 13:53:38', '2023-12-15 13:58:17');
INSERT INTO `alarmmg` VALUES (1861, 'D01 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1862, 'D02 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1863, 'D03 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1864, 'D04 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1865, 'D05 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1866, 'D06 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1867, 'B01 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1868, 'B02 VFD error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1869, 'A01 servo travel error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1870, 'A02 servo travel error', '2023-12-15 13:58:17', '2023-12-15 13:58:25');
INSERT INTO `alarmmg` VALUES (1871, 'emergency stop alarm', '2023-12-15 13:58:24', '2023-12-15 13:58:31');
INSERT INTO `alarmmg` VALUES (1872, 'A01 servo travel error', '2023-12-15 13:59:02', '2023-12-15 13:59:15');
INSERT INTO `alarmmg` VALUES (1873, 'A02 servo travel error', '2023-12-15 13:59:02', '2023-12-15 13:59:15');
INSERT INTO `alarmmg` VALUES (1874, 'A01 servo turn error', '2023-12-15 13:59:16', '2023-12-15 13:59:20');
INSERT INTO `alarmmg` VALUES (1875, 'A02 servo turn error', '2023-12-15 13:59:16', '2023-12-15 13:59:20');
INSERT INTO `alarmmg` VALUES (1876, 'B01 servo travel error', '2023-12-15 13:59:16', '2023-12-15 13:59:20');
INSERT INTO `alarmmg` VALUES (1877, 'B02 servo travel error', '2023-12-15 13:59:16', '2023-12-15 13:59:20');
INSERT INTO `alarmmg` VALUES (1878, 'D01 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1879, 'D02 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1880, 'D03 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1881, 'D04 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1882, 'D05 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1883, 'D06 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1884, 'B01 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1885, 'B02 VFD error', '2023-12-15 14:00:49', '2023-12-15 14:01:57');
INSERT INTO `alarmmg` VALUES (1886, 'A01 servo travel error', '2023-12-15 14:00:49', '2023-12-15 14:01:55');
INSERT INTO `alarmmg` VALUES (1887, 'A02 servo travel error', '2023-12-15 14:00:49', '2023-12-15 14:01:55');
INSERT INTO `alarmmg` VALUES (1888, 'emergency stop alarm', '2023-12-15 14:01:53', '2023-12-15 14:02:04');
INSERT INTO `alarmmg` VALUES (1889, 'A01 servo turn error', '2023-12-15 14:02:50', '2023-12-15 14:02:51');
INSERT INTO `alarmmg` VALUES (1890, 'A02 servo turn error', '2023-12-15 14:02:50', '2023-12-15 14:02:51');
INSERT INTO `alarmmg` VALUES (1891, 'B01 servo travel error', '2023-12-15 14:02:50', '2023-12-15 14:02:51');
INSERT INTO `alarmmg` VALUES (1892, 'B02 servo travel error', '2023-12-15 14:02:50', '2023-12-15 14:02:51');
INSERT INTO `alarmmg` VALUES (1893, 'emergency stop alarm', '2023-12-15 14:03:10', '2023-12-15 14:03:15');
INSERT INTO `alarmmg` VALUES (1894, 'A01 servo travel error', '2023-12-15 14:03:46', '2023-12-15 14:04:01');
INSERT INTO `alarmmg` VALUES (1895, 'A02 servo travel error', '2023-12-15 14:03:50', '2023-12-15 14:04:01');
INSERT INTO `alarmmg` VALUES (1896, 'A01 servo turn error', '2023-12-15 14:04:01', '2023-12-15 14:05:17');
INSERT INTO `alarmmg` VALUES (1897, 'A02 servo turn error', '2023-12-15 14:04:01', '2023-12-15 14:04:03');
INSERT INTO `alarmmg` VALUES (1898, 'emergency stop alarm', '2023-12-15 14:05:17', '2023-12-15 14:05:23');
INSERT INTO `alarmmg` VALUES (1899, 'A02 servo travel error', '2023-12-15 14:05:56', '2023-12-15 14:06:30');
INSERT INTO `alarmmg` VALUES (1900, 'A01 servo travel error', '2023-12-15 14:06:00', '2023-12-15 14:06:30');
INSERT INTO `alarmmg` VALUES (1901, 'A01 servo turn error', '2023-12-15 14:06:31', '2023-12-15 14:10:52');
INSERT INTO `alarmmg` VALUES (1902, 'A02 servo turn error', '2023-12-15 14:06:31', '2023-12-15 14:06:33');
INSERT INTO `alarmmg` VALUES (1903, 'emergency stop alarm', '2023-12-15 14:10:52', '2023-12-15 14:10:57');
INSERT INTO `alarmmg` VALUES (1904, 'A01 servo travel error', '2023-12-15 14:11:29', '2023-12-15 14:12:03');
INSERT INTO `alarmmg` VALUES (1905, 'A02 servo travel error', '2023-12-15 14:11:29', '2023-12-15 14:12:03');
INSERT INTO `alarmmg` VALUES (1906, 'A01 servo turn error', '2023-12-15 14:12:03', '2023-12-15 14:13:39');
INSERT INTO `alarmmg` VALUES (1907, 'A01 servo travel error', '2023-12-15 14:14:40', '2023-12-15 14:14:49');
INSERT INTO `alarmmg` VALUES (1908, 'A02 servo travel error', '2023-12-15 14:14:40', '2023-12-15 14:14:49');
INSERT INTO `alarmmg` VALUES (1909, '2# buffer safety alarm', '2023-12-15 14:16:18', '2023-12-15 14:16:21');
INSERT INTO `alarmmg` VALUES (1910, 'A02 conveyor Left safety alarm', '2023-12-15 14:16:19', '2023-12-15 14:16:21');
INSERT INTO `alarmmg` VALUES (1911, 'A02 conveyor Left safety alarm', '2023-12-15 14:16:48', '2023-12-15 14:16:52');
INSERT INTO `alarmmg` VALUES (1912, 'A02 conveyor Left safety alarm', '2023-12-15 15:06:23', '2023-12-15 15:06:25');
INSERT INTO `alarmmg` VALUES (1913, '2# buffer safety alarm', '2023-12-15 15:06:23', '2023-12-15 15:06:25');
INSERT INTO `alarmmg` VALUES (1914, 'A02 conveyor Left safety alarm', '2023-12-15 15:06:53', '2023-12-15 15:06:57');
INSERT INTO `alarmmg` VALUES (1915, 'A02 conveyor Left safety alarm', '2023-12-15 15:14:23', '2023-12-15 15:14:27');
INSERT INTO `alarmmg` VALUES (1916, '2# buffer safety alarm', '2023-12-15 15:14:24', '2023-12-15 15:14:27');
INSERT INTO `alarmmg` VALUES (1917, 'A02 conveyor Left safety alarm', '2023-12-15 15:14:55', '2023-12-15 15:14:59');
INSERT INTO `alarmmg` VALUES (1918, '2# buffer safety alarm', '2023-12-15 15:16:18', '2023-12-15 15:16:21');
INSERT INTO `alarmmg` VALUES (1919, 'A02 conveyor Left safety alarm', '2023-12-15 15:16:19', '2023-12-15 15:16:21');
INSERT INTO `alarmmg` VALUES (1920, 'A02 conveyor Left safety alarm', '2023-12-15 15:16:50', '2023-12-15 15:16:53');
INSERT INTO `alarmmg` VALUES (1921, 'A01 conveyor right safety alarm', '2023-12-15 15:46:56', '2023-12-15 15:46:58');
INSERT INTO `alarmmg` VALUES (1922, 'A01 conveyor right safety alarm', '2023-12-15 15:47:07', '2023-12-15 15:47:17');
INSERT INTO `alarmmg` VALUES (1923, '1# buffer safety alarm', '2023-12-15 15:47:08', '2023-12-15 15:47:17');
INSERT INTO `alarmmg` VALUES (1924, 'A01 conveyor right safety alarm', '2023-12-15 15:50:17', '2023-12-15 15:50:20');
INSERT INTO `alarmmg` VALUES (1925, 'A01 conveyor right safety alarm', '2023-12-15 15:50:29', '2023-12-15 15:50:31');
INSERT INTO `alarmmg` VALUES (1926, '1# buffer safety alarm', '2023-12-15 15:50:29', '2023-12-15 15:50:32');
INSERT INTO `alarmmg` VALUES (1927, 'A01 conveyor right safety alarm', '2023-12-15 16:00:31', '2023-12-15 16:00:34');
INSERT INTO `alarmmg` VALUES (1928, 'A01 conveyor right safety alarm', '2023-12-15 16:00:43', '2023-12-15 16:00:47');
INSERT INTO `alarmmg` VALUES (1929, '1# buffer safety alarm', '2023-12-15 16:00:44', '2023-12-15 16:00:47');
INSERT INTO `alarmmg` VALUES (1930, 'A01 conveyor right safety alarm', '2023-12-15 16:03:01', '2023-12-15 16:03:04');
INSERT INTO `alarmmg` VALUES (1931, 'A01 conveyor right safety alarm', '2023-12-15 16:03:13', '2023-12-15 16:03:16');
INSERT INTO `alarmmg` VALUES (1932, '1# buffer safety alarm', '2023-12-15 16:03:13', '2023-12-15 16:03:17');
INSERT INTO `alarmmg` VALUES (1933, '2# buffer safety alarm', '2023-12-15 16:05:19', '2023-12-15 16:05:22');
INSERT INTO `alarmmg` VALUES (1934, 'A02 conveyor Left safety alarm', '2023-12-15 16:05:20', '2023-12-15 16:05:22');
INSERT INTO `alarmmg` VALUES (1935, 'A02 conveyor Left safety alarm', '2023-12-15 16:05:50', '2023-12-15 16:05:55');
INSERT INTO `alarmmg` VALUES (1936, 'A02 conveyor Left safety alarm', '2023-12-15 16:08:34', '2023-12-15 16:08:36');
INSERT INTO `alarmmg` VALUES (1937, '2# buffer safety alarm', '2023-12-15 16:08:34', '2023-12-15 16:08:36');
INSERT INTO `alarmmg` VALUES (1938, 'A02 conveyor Left safety alarm', '2023-12-15 16:08:51', '2023-12-15 16:08:53');
INSERT INTO `alarmmg` VALUES (1939, '2# buffer safety alarm', '2023-12-15 16:08:51', '2023-12-15 16:08:53');
INSERT INTO `alarmmg` VALUES (1940, 'emergency stop alarm', '2023-12-15 16:09:08', '2023-12-15 16:09:22');
INSERT INTO `alarmmg` VALUES (1941, 'less glass than known', '2023-12-15 16:19:51', '2023-12-15 16:21:50');
INSERT INTO `alarmmg` VALUES (1942, 'emergency stop alarm', '2023-12-15 16:20:52', '2023-12-15 16:21:08');
INSERT INTO `alarmmg` VALUES (1943, 'A02 servo turn error', '2023-12-15 16:21:51', '2023-12-15 16:21:53');
INSERT INTO `alarmmg` VALUES (1944, 'A01 conveyor right safety alarm', '2023-12-15 16:24:24', '2023-12-15 16:24:26');
INSERT INTO `alarmmg` VALUES (1945, '1# buffer safety alarm', '2023-12-15 16:24:38', '2023-12-15 16:24:40');
INSERT INTO `alarmmg` VALUES (1946, 'A02 conveyor Left safety alarm', '2023-12-15 16:25:59', '2023-12-15 16:26:01');
INSERT INTO `alarmmg` VALUES (1947, '2# buffer safety alarm', '2023-12-15 16:25:59', '2023-12-15 16:26:01');
INSERT INTO `alarmmg` VALUES (1948, 'A02 conveyor Left safety alarm', '2023-12-15 16:26:30', '2023-12-15 16:26:33');
INSERT INTO `alarmmg` VALUES (1949, 'A01 conveyor right safety alarm', '2023-12-15 16:27:56', '2023-12-15 16:27:59');
INSERT INTO `alarmmg` VALUES (1950, 'A01 conveyor right safety alarm', '2023-12-15 16:28:08', '2023-12-15 16:28:11');
INSERT INTO `alarmmg` VALUES (1951, '1# buffer safety alarm', '2023-12-15 16:28:09', '2023-12-15 16:28:11');
INSERT INTO `alarmmg` VALUES (1952, 'A02 conveyor Left safety alarm', '2023-12-15 16:29:16', '2023-12-15 16:29:20');
INSERT INTO `alarmmg` VALUES (1953, '2# buffer safety alarm', '2023-12-15 16:29:16', '2023-12-15 16:29:20');
INSERT INTO `alarmmg` VALUES (1954, 'A02 conveyor Left safety alarm', '2023-12-15 16:29:48', '2023-12-15 16:29:51');
INSERT INTO `alarmmg` VALUES (1955, 'A02 conveyor Left safety alarm', '2023-12-15 16:30:39', '2023-12-15 16:30:41');
INSERT INTO `alarmmg` VALUES (1956, '2# buffer safety alarm', '2023-12-15 16:30:39', '2023-12-15 16:30:41');
INSERT INTO `alarmmg` VALUES (1957, 'A02 conveyor Left safety alarm', '2023-12-15 16:31:09', '2023-12-15 16:31:13');
INSERT INTO `alarmmg` VALUES (1958, 'A01 conveyor right safety alarm', '2023-12-15 16:33:11', '2023-12-15 16:33:15');
INSERT INTO `alarmmg` VALUES (1959, 'A01 conveyor right safety alarm', '2023-12-15 16:33:23', '2023-12-15 16:33:26');
INSERT INTO `alarmmg` VALUES (1960, '1# buffer safety alarm', '2023-12-15 16:33:23', '2023-12-15 16:33:26');
INSERT INTO `alarmmg` VALUES (1961, 'A01 conveyor right safety alarm', '2023-12-15 16:34:17', '2023-12-15 16:34:19');
INSERT INTO `alarmmg` VALUES (1962, 'A01 conveyor right safety alarm', '2023-12-15 16:34:28', '2023-12-15 16:34:31');
INSERT INTO `alarmmg` VALUES (1963, '1# buffer safety alarm', '2023-12-15 16:34:29', '2023-12-15 16:34:31');
INSERT INTO `alarmmg` VALUES (1964, 'A02 conveyor Left safety alarm', '2023-12-15 16:35:22', '2023-12-15 16:35:25');
INSERT INTO `alarmmg` VALUES (1965, '2# buffer safety alarm', '2023-12-15 16:35:22', '2023-12-15 16:35:25');
INSERT INTO `alarmmg` VALUES (1966, 'A02 conveyor Left safety alarm', '2023-12-15 16:35:53', '2023-12-15 16:35:57');
INSERT INTO `alarmmg` VALUES (1967, 'A02 conveyor Left safety alarm', '2023-12-15 16:36:29', '2023-12-15 16:36:33');
INSERT INTO `alarmmg` VALUES (1968, '2# buffer safety alarm', '2023-12-15 16:36:29', '2023-12-15 16:36:33');
INSERT INTO `alarmmg` VALUES (1969, 'A02 conveyor Left safety alarm', '2023-12-15 16:36:59', '2023-12-15 16:37:03');
INSERT INTO `alarmmg` VALUES (1970, 'A01 conveyor right safety alarm', '2023-12-15 16:42:08', '2023-12-15 16:42:11');
INSERT INTO `alarmmg` VALUES (1971, 'A01 conveyor right safety alarm', '2023-12-15 16:42:19', '2023-12-15 16:42:22');
INSERT INTO `alarmmg` VALUES (1972, '1# buffer safety alarm', '2023-12-15 16:42:19', '2023-12-15 16:42:22');
INSERT INTO `alarmmg` VALUES (1973, 'D01 VFD error', '2023-12-20 11:07:17', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1974, 'D02 VFD error', '2023-12-20 11:07:17', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1975, 'D03 VFD error', '2023-12-20 11:07:17', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1976, 'D04 VFD error', '2023-12-20 11:07:17', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1977, 'D05 VFD error', '2023-12-20 11:07:17', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1978, 'D06 VFD error', '2023-12-20 11:07:17', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1979, 'B01 VFD error', '2023-12-20 11:07:18', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1980, 'B02 VFD error', '2023-12-20 11:07:18', '2023-12-20 11:07:46');
INSERT INTO `alarmmg` VALUES (1981, 'A01 servo travel error', '2023-12-20 11:07:18', '2023-12-20 11:07:44');
INSERT INTO `alarmmg` VALUES (1982, 'A02 servo travel error', '2023-12-20 11:07:18', '2023-12-20 11:07:44');
INSERT INTO `alarmmg` VALUES (1983, 'emergency stop alarm', '2023-12-20 11:07:44', '2023-12-20 11:07:49');
INSERT INTO `alarmmg` VALUES (1984, 'emergency stop alarm', '2023-12-20 11:13:13', '2023-12-20 11:13:16');
INSERT INTO `alarmmg` VALUES (1985, 'A02 servo turn error', '2023-12-20 11:15:15', '2023-12-20 11:18:01');
INSERT INTO `alarmmg` VALUES (1986, 'emergency stop alarm', '2023-12-20 11:18:01', '2023-12-20 11:19:10');
INSERT INTO `alarmmg` VALUES (1987, 'A02 servo turn error', '2023-12-20 11:20:46', '2023-12-20 11:23:13');
INSERT INTO `alarmmg` VALUES (1988, 'A01 servo travel error', '2023-12-20 11:24:04', '2023-12-20 11:24:15');
INSERT INTO `alarmmg` VALUES (1989, 'A02 servo travel error', '2023-12-20 11:24:04', '2023-12-20 11:24:15');
-- ----------------------------
-- Table structure for car_position
@@ -471,7 +719,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 = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品分类' ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品分类' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of category
@@ -515,7 +763,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 = 47 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 46 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of device
@@ -546,7 +794,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 = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of glass
@@ -586,7 +834,6 @@
INSERT INTO `menu_list` VALUES (12, 6, '角色列表', '', 12, 'role', 1, '2021-11-28 14:30:28', '2021-11-28 15:06:04');
INSERT INTO `menu_list` VALUES (49, 2, '报警信息', '', 49, 'Electrical/alarm', 1, '2021-11-28 14:30:28', '2023-09-08 11:14:08');
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, 54, 'Electrical/Sign', 1, '2023-08-25 13:29:22', '2023-12-08 11:35:20');
@@ -1358,7 +1605,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 AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of order_out
@@ -1458,8 +1705,8 @@
-- ----------------------------
-- Records of queue
-- ----------------------------
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');
INSERT INTO `queue` VALUES (1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 0, '2023-12-12 16:35:47');
INSERT INTO `queue` VALUES (2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, 0, '2023-12-12 16:36:09');
-- ----------------------------
-- Table structure for role
@@ -1515,7 +1762,7 @@
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 (22, 1, 52, 0, '2023-08-24 10:08:56', '2023-12-14 16:10:00');
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');
@@ -1530,7 +1777,7 @@
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 (45, 2, 52, 0, '2023-08-28 15:14:27', '2023-12-14 16:10:07');
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');
@@ -1563,85 +1810,85 @@
-- ----------------------------
-- Records of role_permission
-- ----------------------------
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);
INSERT INTO `role_permission` VALUES (1, 1, 1, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (2, 1, 2, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (3, 1, 3, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (7, 1, 7, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (8, 1, 8, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (9, 1, 9, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (10, 1, 10, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (11, 1, 11, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (12, 1, 12, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (13, 1, 13, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (16, 1, 16, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (17, 1, 17, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (18, 1, 18, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (19, 1, 19, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (20, 1, 20, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (22, 1, 22, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (25, 1, 25, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (26, 1, 26, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (27, 1, 27, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (28, 1, 28, 1, '2021-11-28 15:07:54', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (37, 2, 25, 1, '2021-11-28 16:30:57', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (38, 2, 26, 1, '2021-11-28 16:30:57', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (39, 2, 27, 1, '2021-11-28 16:30:57', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (40, 2, 28, 1, '2021-11-28 16:32:35', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (41, 2, 22, 1, '2021-11-28 19:57:35', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (42, 1, 30, 1, '2023-08-24 08:55:34', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (43, 1, 29, 1, '2023-08-24 08:56:15', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (44, 1, 31, 1, '2023-08-24 08:56:23', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (53, 2, 2, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (54, 2, 3, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (56, 2, 8, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (57, 2, 9, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (58, 2, 10, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (61, 2, 13, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (62, 2, 16, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (63, 2, 17, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (64, 2, 18, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (65, 2, 19, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (66, 2, 20, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (67, 2, 22, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (68, 2, 25, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (69, 2, 26, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (70, 2, 27, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (71, 2, 28, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (72, 2, 30, 1, '2023-08-24 08:55:34', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (73, 2, 29, 1, '2023-08-24 08:56:15', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (74, 2, 1, 1, '2023-08-30 16:29:46', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (75, 1, 32, 1, '2023-12-05 08:54:59', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (76, 1, 33, 1, '2023-12-05 08:55:04', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (77, 1, 34, 1, '2023-12-05 08:55:09', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (78, 1, 35, 1, '2023-12-05 14:54:43', '2023-12-12 10:51:42', 'admin');
INSERT INTO `role_permission` VALUES (79, 2, 33, 1, '2023-12-08 10:58:25', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (80, 2, 34, 1, '2023-12-08 10:59:15', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (81, 2, 35, 1, '2023-12-08 10:59:23', '2023-12-12 10:57:16', 'user2');
INSERT INTO `role_permission` VALUES (82, 5, 33, 1, '2023-12-08 10:59:33', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (83, 5, 34, 0, '2023-12-08 10:59:39', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (84, 5, 35, 0, '2023-12-08 10:59:51', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (85, 5, 32, 0, '2023-12-08 11:08:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (86, 5, 1, 1, '2023-12-08 11:45:47', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (87, 5, 7, 1, '2023-12-08 11:45:55', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (89, 5, 2, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (90, 5, 3, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (91, 5, 8, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (92, 5, 9, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (93, 5, 10, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (94, 5, 13, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (95, 5, 16, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (96, 5, 17, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (97, 5, 18, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (98, 5, 19, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (99, 5, 20, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (100, 5, 22, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (101, 5, 25, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (102, 5, 26, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (103, 5, 27, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (104, 5, 28, 1, '2021-11-28 15:07:54', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (105, 5, 30, 1, '2023-08-24 08:55:34', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (106, 5, 29, 1, '2023-08-24 08:56:15', '2023-12-12 10:57:25', 'user3');
INSERT INTO `role_permission` VALUES (107, 5, 1, 1, '2023-08-30 16:29:46', '2023-12-12 10:57:25', 'user3');
-- ----------------------------
-- Table structure for storage_cage
@@ -2105,7 +2352,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 = 492 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 491 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of storage_rack
@@ -2545,7 +2792,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 = 67 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 66 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of storage_task