clll
2023-11-03 5cc7ea9822c4e2fab38d587dfe7f1b224187959c
Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes

# Conflicts:
# CanadaMes-ui/src/lang/locales/zh-CN.json
14个文件已修改
1个文件已添加
1580 ■■■■■ 已修改文件
CanadaMes-ui/src/api/home.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/Glass.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/JdbcConnections.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 591 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/api/home.js
@@ -116,9 +116,9 @@
    })
}
export function Inglassid(cage,cell,tier,data) {
export function Inglassid(cage, cell, tier, data) {
    return request({
        url: '/home/Inglassid?cage=' + cage + '&cell=' + cell+ '&tier=' + tier,
        url: '/home/Inglassid?cage=' + cage + '&cell=' + cell + '&tier=' + tier,
        method: 'post',
        data
    })
@@ -128,6 +128,30 @@
    return request({
        url: '/home/SelectGlass?orderid=' + orderid,
        method: 'post',
        data:""
        data: ""
    })
}
export function InsertQueueGlassId(glassid, id) {
    return request({
        url: '/home/InsertQueueGlassId?glassid=' + glassid + '&id=' + id,
        method: 'post',
        data: ""
    })
}
export function UpdateQueueState() {
    return request({
        url: '/home/UpdateQueueState',
        method: 'post',
        data: ""
    })
}
export function DeleteQueueGlass(id) {
    return request({
        url: '/home/DeleteQueueGlass?id=' + id,
        method: 'post',
        data: ""
    })
}
CanadaMes-ui/src/lang/locales/en-US.json
@@ -292,6 +292,16 @@
  "Enter the Order lD":"Enter the Order lD",
  "OrderInfo":"OrderInfo",
  "Query":"Query",
  "permission update":"permission update"
  "permission update":"permission update",
  "query was successful":"query was successful",
  "Scan Code Point":"Scan Code Point",
  "Upper film position":"Upper film position",
  "Glass Information":"Glass Information",
  "current Information":"current information",
  "Modify Information":"Modify information",
  "Clear Current":"Clear Current",
  "Confirm Modification":"Confirm modification",
  "The glass ID already exists in the loading queue":"The glass ID already exists in the loading queue",
  "This glass ID already exists in the sorting cage":"This glass ID already exists in the sorting cage"
}
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -196,8 +196,10 @@
  "langResetButton": "重置",
  "langCancelButton": "取消",
  "langRegisterSuccessMessage": "注册成功",
  "添加用户成功": "添加用户成功",
  "添加用户成功":"添加用户成功",
  "confirmResetPassword": "确认重置密码为默认值吗?",
  "confirm": "确定",
  "cancel": "取消",
  "passwordResetSuccess": "密码已重置为默认值",
@@ -208,60 +210,67 @@
  "addUserSuccess": "添加用户成功",
  "editUserSuccess": "修改用户成功",
  "effective": "有效",
  "invalid": "无效",
  "addSuccessMessage": "添加成功",
  "deleteConfirmMessage": "确定要删除该权限吗?",
  "confirmButtonText": "确定",
  "cancelButtonText": "取消",
  "deleteSuccessMessage": "删除成功",
  "deleteCancelledMessage": "已取消删除操作",
  "Enter the glass lD": "输入玻璃id",
  "Infeed barcodid": "手动上片",
  "Enter the order number": "输入订单号",
  "Exit the glass by order number": "按订单出片",
  "Please confirm the glass information": "请确认玻璃信息",
  "Please confirm the Ordering Information": "请确认订单信息",
  "Alarm Information": "报警信息",
  "Cage Details": "理片笼详情",
  "order": "订单",
  "length": "长",
  "width": "宽",
  "Operate": "操作",
  "end task": "完成任务",
  "cancal": "取消",
  "confirm": "确认",
  "number": "数量",
  "Outfeed Barcodid": "出片玻璃id",
  "Infeed Barcodid": "进片玻璃id",
  "The Cage number being used": "笼子",
  "The Slot number being used": "格子",
  "Order Nmuber": "订单编号",
  "List Number": "列表编号",
  "Box Number": "箱子编号",
  "Length and Width": "尺寸",
  "id": "id",
  "content": "内容",
  "timeon": "报警时间",
  "endTime": "结束时间",
  "The Cage number": "笼子",
  "The Side": "内外侧",
  "The Slot Number": "格子",
  "Barcodid": "玻璃id",
  "Order Number": "订单",
  "delete": "删除",
  "out": "出片",
  "Operation successful": "操作成功",
  "Operation canceled": "操作取消",
  "There is no such order": "没有此订单的玻璃",
  "There are currently tasks": "当前有任务",
  "There is no such glass": "没有此玻璃",
  "There is no such grid": "没有空闲格子",
  "No delete allowed": "不能删除",
  "No out allowed": "不能出片",
  "Are you sure to perform this operation ?": "确定执行此操作?",
  "prompt": "提示",
  "Yes": "是",
  "No": "否",
"invalid": "无效",
"addSuccessMessage": "添加成功",
"deleteConfirmMessage": "确定要删除该权限吗?",
"confirmButtonText": "确定",
"cancelButtonText": "取消",
"deleteSuccessMessage": "删除成功",
"deleteCancelledMessage": "已取消删除操作",
  "Enter the glass lD":"输入玻璃id",
  "Infeed barcodid":"手动上片",
  "Enter the order number":"输入订单号",
  "Exit the glass by order number":"按订单出片",
  "Please confirm the glass information":"请确认玻璃信息",
  "Please confirm the Ordering Information":"请确认订单信息",
  "Alarm Information":"报警信息",
  "Cage Details":"理片笼详情",
  "order":"订单",
  "length":"长",
  "width":"宽",
  "Operate":"操作",
  "end task":"完成任务",
  "cancel":"取消",
  "confirm":"确认",
  "number":"数量",
  "Outfeed Barcodid":"出片玻璃id",
  "Infeed Barcodid":"进片玻璃id",
  "The Cage number being used":"笼子",
  "The Slot number being used":"格子",
  "Order Nmuber":"订单编号",
  "List Number":"列表编号",
  "Box Number":"箱子编号",
  "Length and Width":"尺寸",
  "id":"id",
  "content":"内容",
  "timeon":"报警时间",
  "endTime":"结束时间",
  "The Cage number":"笼子",
  "The Side":"内外侧",
  "The Slot Number":"格子",
  "Barcodid":"玻璃id",
  "Order Number":"订单",
  "delete":"删除",
  "out":"出片",
  "Operation successful":"操作成功",
  "Operation canceled":"操作取消",
  "There is no such order":"没有此订单的玻璃",
  "There are currently tasks":"当前有任务",
  "There is no such glass":"没有此玻璃",
  "There is no such grid":"没有空闲格子",
  "No delete allowed":"不能删除",
  "No out allowed":"不能出片",
  "Are you sure to perform this operation ?":"确定执行此操作?",
  "prompt":"提示",
  "Yes":"是",
  "No":"否",
  "today": "今天",
  "yesterday": "昨天",
  "week": "一周前",
@@ -271,128 +280,31 @@
  "alacontent": "报警内容",
  "time-on": "开始时间",
  "End-Time": "结束时间",
  "Please enter the password": "请输入密码",
  "Password error": "密码错误",
  "DataBase Connection failed": "数据库连接失败",
  "Distribute parameters": "下发参数",
  "The glass size is not within the range": "玻璃尺寸不在范围内",
  "increase": "添加",
  "Enable": "启用",
  "Disable": "禁用",
  "Usage": "使用率",
  "Space (Pieces)": "空间(片数)",
  "This glass is already in the cage": "笼子里已有此玻璃",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "皮带输送自动慢速",
    "conveyor Velocity(Manual)": "皮带输送手动速度",
    "A01 A02 TURN JOG Velocity": "A01 A02 翻转点动速度",
    "A01 A02 TRAVEL JOG Velocity": "A01 A02 行走点动速度",
    "B01 B02 TRAVEL JOG Velocity": "B01 B02 行走点动速度",
    "A01 A02 TURN POS Velocity AUTO": "A01 A02 翻转自动定位速度",
    "A01 A02 TURN POS Velocity manual": "A01 A02 翻转手动定位速度",
    "A01 A02 TRAVEL POS Velocity AUTO": "A01 A02 行走自动定位速度",
    "A01 A02 TRAVEL POS Velocity manual": "A01 A02 行走手动定位速度",
    "B01 B02 TRAVEL POS Velocity AUTO": "B01 B02 行走自动定位速度",
    "B01 B02 TRAVEL POS Velocity manual": "B01 B02 行走手动定位速度"
  },
  "langActions": {
    "D01 VFD conveyor": "D01 输送变频",
    "D02 VFD conveyor": "D02 输送变频",
    "D03 VFD conveyor": "D03 输送变频",
    "D04 VFD conveyor": "D04 输送变频",
    "D05 VFD conveyor": "D05 输送变频",
    "D06 VFD conveyor": "D06 输送变频",
    "A01 VFD conveyor": "A01 输送变频",
    "A02 VFD conveyor": "A02 输送变频",
    "B01 VFD conveyor": "B01 输送变频",
    "B02 VFD conveyor": "B02 输送变频",
    "A01 SERVE TURN JOG+": "A01 翻转伺服点动",
    "A02 SERVE TURN JOG-": "A02 翻转伺服点动",
    "A01 SERVE TRAVEL JOG+": "A01 行走伺服点动",
    "A02 SERVE TRAVEL JOG-": "A02 行走伺服点动",
    "B01 SERVE TRAVEL JOG+": "B01 行走伺服点动",
    "B02 SERVE TRAVEL JOG-": "B02 行走伺服点动",
    "A01 SERVE TURN POS": "A01 翻转伺服定位",
    "A02 SERVE TURN POS": "A02 翻转伺服定位",
    "A01 SERVE TRAVEL POS": "A01 行走伺服定位",
    "A02 SERVE TRAVEL POS": "A02 行走伺服定位",
    "B01 SERVE TRAVEL POS": "B01 行走伺服定位",
    "B02 SERVE TRAVEL POS": "B02 行走伺服定位",
    "B01 YV TURN": "B01 抬起电磁阀",
    "B01 YV UP DOWN": "B01 上升下降电磁阀",
    "B02 YV TURN": "B02 抬起电磁阀",
    "B02 YV UP DOWN": "B02 上升下降电磁阀"
  },
  "Signlang": {
    "D01.SR dec": "D01.减速传感器",
    "D01.SR in pos": "D01.到位传感器",
    "D02.SR dec": "D02.减速传感器",
    "D02.SR in pos": "D02.到位传感器",
    "D03.SR into": "D03.进片传感器",
    "D03.SR dec": "D03.减速传感器",
    "D03.SR in pos": "D03.到位传感器",
    "D04.SR dec": "D04.减速传感器",
    "D04.SR in pos": "D04.到位传感器",
    "D05.SR dec": "D05.减速传感器",
    "D05.SR in pos": "D05.到位传感器",
    "D06.SR dec": "D06.减速传感器",
    "D06.SR in pos": "D06.到位传感器",
    "B01.SR out dec": "B01.出片减速传感器",
    "B01.SR out in pos": "B01.出片到位传感器",
    "B01.SR in dec": "B01.进片减速传感器",
    "B01.SR in in pos": "B01.进片到位传感器",
    "B01.SR turn on": "B01.翻转上到位传感器",
    "B01.SR turn off": "B01.翻转下到位传感器",
    "B01.SR up": "B01.上升到位传感器",
    "B01.SR down": "B01.下降到位传感器",
    "B02.SR out dec": "B02.出片减速传感器",
    "B02.SR out in pos": "B02.出片到位传感器",
    "B02.SR in dec": "B02.进片减速传感器",
    "B02.SR in in pos": "B02.进片到位传感器",
    "B02.SR turn on": "B02.翻转上到位传感器",
    "B02.SR turn off": "B02.翻转下到位传感器",
    "B02.SR up": "B02.上升到位传感器",
    "B02.SR down": "B02.下降到位传感器",
    "B01.SR out safety": "B01.出片安全传感器",
    "B01.SR in safety": "B01.进片安全传感器",
    "B02.SR out safety": "B02.出片安全传感器",
    "SB.start(+)": "SB.启动(+)按钮",
    "SB.stop(1)": "SB.停止(-)按钮",
    "SB.reset": "SB.复位按钮",
    "SB.auto/manul": "SB.手/自切换按钮",
    "SB.pause": "SB.暂停按钮",
    "SB.emg": "SB.急停按钮",
    "D01.SB.start": "D01.启动",
    "D06.SB.start": "D06.启动",
    "B02.SR in safety": "B02.进片安全传感器",
    "SAFETYDOOR.requset": "安全门请求进入",
    "SAFETYDOOR.confirm": "安全门确认",
    "SAFETYDOOR.reset": "安全门复位",
    "LED.red": "三色灯红",
    "LED.green": "三色灯绿",
    "LED.yellow": "三色灯黄",
    "D01.LED.green": "D01.绿灯",
    "D06.LED.green": "D06.绿灯",
    "B01.YV.turn": "B01.电磁阀翻转",
    "B01.YV.up down": "B01.电磁阀上升下降",
    "B01.YV.gassing": "B01.电磁阀吹气",
    "B02.YV.turn": "B02.电磁阀翻转",
    "B02.YV.up down": "B02.电磁阀上升下降",
    "B02.YV.gassing": "B02.电磁阀吹气",
    "SAFETYDOOR.led": "安全门状态灯",
    "SAFETYDOOR.open": "安全门打开"
  },
  "Statelang": {
    "D01.State": "D01.状态",
    "D02.State": "D02.状态",
    "B01.State": "B01.状态",
    "B02.State": "B02.状态",
    "A01.State": "A01.状态",
    "A02.State": "A02.状态",
    "D03.State": "D03.状态",
    "D04.State": "D04.状态",
    "D05.State": "D05.状态",
    "D06.State": "D06.状态"
  }
  "Please enter the password":"请输入密码",
  "Password error":"密码错误",
  "DataBase Connection failed":"数据库连接失败",
  "Distribute parameters":"下发参数",
  "The glass size is not within the range":"玻璃尺寸不在范围内",
  "increase":"添加",
  "Enable":"启用",
  "Disable":"禁用",
  "Usage":"使用率",
  "Space (Pieces)":"空间(片数)",
  "This glass is already in the cage":"笼子里已有此玻璃",
  "Enter the Order lD":"请输入订单id",
  "OrderInfo":"订单信息",
  "Query":"查询",
  "permission update":"权限编辑",
  "query was successful":"查询成功",
  "Scan Code Point":"扫码位",
  "Upper film position":"上片位",
  "Glass Information":"玻璃信息",
  "current Information":"当前信息",
  "Modify Information":"修改信息",
  "Clear Current":"清除当前",
  "Confirm Modification":"确认修改",
  "The glass ID already exists in the loading queue":"上片队列已存在此玻璃id",
  "This glass ID already exists in the sorting cage":"理片笼内已存在此玻璃id"
}
CanadaMes-ui/src/views/home/index.vue
@@ -194,8 +194,8 @@
                </div>
            </div>
            <div style="display:flex;justify-content: space-around;width: 95%;margin: 0 auto;">
                <el-input style="width:15%;" :placeholder="$t('Enter the glass lD')" v-model="glassid"></el-input>
                <el-button type="primary" @click="showform(1)">{{ $t('Infeed barcodid') }}</el-button>
                <el-input style="width:15%;" :placeholder="$t('Enter the glass lD')" v-model="glassid1"></el-input>
                <el-button type="primary" @click="SelectGlassByGlassIDs(2)">{{ $t('Infeed barcodid') }}</el-button>
                <el-input style="width:15%;" :placeholder="$t('Enter the order number')" v-model="order"></el-input>
                <el-button type="warning" @click="showform1();">{{ $t('Exit the glass by order number') }}</el-button>
            </div>
@@ -304,7 +304,6 @@
        </el-footer>
        <el-dialog :visible.sync="dialogFormVisible" :title="$t('Please confirm the glass information')">
            <el-form :model="form" label-width="100px" style="padding-right: 30px">
                <el-form-item :label="$t('Barcodid')">
                    <el-input style="width:15%;" :placeholder="$t('Enter the glass lD')" v-model="glassid"></el-input>
                    <el-button type="primary" @click="showform(3)">{{ $t('Query') }}</el-button>
@@ -334,6 +333,110 @@
                </span>
            </template>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible5" :title="$t('Please confirm the glass information')">
            <el-form :model="form" label-width="100px" style="padding-right: 30px">
                <div style="display: flex;justify-content: space-around;">
                    <el-form-item>
                        <label for="">{{ $t('Upper film position') }}</label>
                        <label for="">{{ $t('Scan Code Point') }}</label>
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;height: 40px;">
                    <label for="">{{ $t('current Information') }}</label>
                    <label for="">{{ $t('Modify Information') }}</label>
                    <label for="">{{ $t('current Information') }}</label>
                    <label for="">{{ $t('Modify Information') }}</label>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-form-item>
                        <el-input style="width:50%;margin-left: 20%;" :placeholder="$t('Enter the glass lD')"
                            v-model="glassid2"></el-input>
                        <el-button type="primary" @click="SelectGlassByGlassIDs(1)" :disabled="disabled">{{ $t('Query')
                        }}</el-button>
                    </el-form-item>
                    <el-form-item>
                        <el-input style="width:50%;margin-left: 20%;" :placeholder="$t('Enter the glass lD')"
                            v-model="glassid1"></el-input>
                        <el-button type="primary" @click="SelectGlassByGlassIDs(2)" :disabled="disabled">{{ $t('Query')
                        }}</el-button>
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-form-item :label="$t('Barcodid')">
                        <el-input v-model="form2.glassId" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('Barcodid')">
                        <el-input v-model="form4.glassId" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('Barcodid')">
                        <el-input v-model="form3.glassId" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('Barcodid')">
                        <el-input v-model="form5.glassId" readonly autocomplete="off" />
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-form-item :label="$t('order')">
                        <el-input v-model="form2.orderId" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('order')">
                        <el-input v-model="form4.orderId" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('order')">
                        <el-input v-model="form3.orderId" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('order')">
                        <el-input v-model="form5.orderId" readonly autocomplete="off" />
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-form-item :label="$t('length')">
                        <el-input v-model="form2.height" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('length')">
                        <el-input v-model="form4.height" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('length')">
                        <el-input v-model="form3.height" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('length')">
                        <el-input v-model="form5.height" readonly autocomplete="off" />
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-form-item :label="$t('width')">
                        <el-input v-model="form2.width" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('width')">
                        <el-input v-model="form4.width" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('width')">
                        <el-input v-model="form3.width" readonly autocomplete="off" />
                    </el-form-item>
                    <el-form-item :label="$t('width')">
                        <el-input v-model="form5.width" readonly autocomplete="off" />
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-button @click="DeleteQueueGlasss(2)" type="primary" :disabled="disabled1">{{ $t('Clear Current')
                    }}</el-button>
                    <el-button @click="InsertQueueGlass(2)" type="primary" :disabled="disabled1">
                        {{ $t('Confirm Modification') }}</el-button>
                    <el-button @click="DeleteQueueGlasss(1)" type="primary" :disabled="disabled1">{{ $t('Clear Current')
                    }}</el-button>
                    <el-button @click="InsertQueueGlass(1)" type="primary" :disabled="disabled1">
                        {{ $t('Confirm Modification') }}</el-button>
                </div>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="cancel3()">{{ $t('cancel') }}</el-button>
                </span>
            </template>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible1" :title="$t('Please confirm the Ordering Information')">
            <el-form :model="form1" label-width="100px" style="padding-right: 30px">
                <el-form-item :label="$t('order')">
@@ -387,21 +490,46 @@
        <el-dialog :visible.sync="dialogFormVisible4" :title="$t('OrderInfo')" top="5vh">
            <el-input style="width:15%;" :placeholder="$t('Enter the Order lD')" v-model="orderid"></el-input>
            <el-button type="primary" @click="selectglassinfo()">{{ $t('Query') }}</el-button>
            <el-table :data="this.GlassInfo" :height="700" border style="width: 100%;overflow: auto;">
            <el-table :data="GlassInfo.slice((currentPage - 1) * pagesize, currentPage * pagesize)
                " :height="700" border style="width: 100%;overflow: auto;">
                <el-table-column prop="glassId" :label="$t('Barcodid')"></el-table-column>
                <el-table-column prop="orderId" :label="$t('Order Number')"></el-table-column>
                <el-table-column prop="width" :label="$t('length')"></el-table-column>
                <el-table-column prop="height" :label="$t('width')"></el-table-column>
            </el-table>
            <!-- <el-table :data="tableDatas.slice((currentPage - 1) * pagesize, currentPage * pagesize)
                " style="width: 100%">
                <el-table-column label="Date" prop="date"> </el-table-column>
                <el-table-column label="Name" prop="name"> </el-table-column>
                <el-table-column label="操作">
                    <template slot-scope="scope">
                        <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">Edit</el-button>
                        <el-button size="mini" type="danger"
                            @click="handleDelete(scope.$index, scope.row)">Delete</el-button>
                    </template>
                </el-table-column>
            </el-table> -->
            <!-- 表格分页 -->
            <!-- pager-count pager-count属性可以设置最大页码按钮数,超出折叠,默认为7-->
            <!-- 注意:若数据是后端接口返回的则此时:total="pageCount"-->
            <el-pagination :style="'margin-top:-2px'" @size-change="handleSizeChange" @current-change="handleCurrentChange"
                :pager-count="7" :current-page="currentPage" :page-sizes="[5, 10, 15, 20]" :page-size="pagesize"
                layout="total, sizes, prev, pager, next, jumper" :total="GlassInfo.length > 0 ? GlassInfo.length : null"
                background style="float: right; margin-top: 20px">
            </el-pagination>
        </el-dialog>
    </el-container>
</template>
<script>
//:disabled="scope.row.glassId > 0 || scope.row.disabled == 1 ? true : false"
import {
    home, home2, loadtask, InsertOrder, Addglassid, UpdateTask, SelectAlarmmgInfo,
    SelectCageInfo, DeleteByGlassID, OutByGlassID, Loadcarlist, SelectPassword, SelectGlassByGlassID, Disabled, Inglassid, SelectGlass
    home, home2, loadtask, InsertOrder, Addglassid, UpdateTask, SelectAlarmmgInfo, SelectCageInfo, DeleteByGlassID, OutByGlassID, Loadcarlist,
    SelectPassword, SelectGlassByGlassID, Disabled, Inglassid, SelectGlass, InsertQueueGlassId, UpdateQueueState, DeleteQueueGlass
} from "../../api/home";
@@ -423,6 +551,7 @@
            dialogFormVisible2: false,
            dialogFormVisible3: false,
            dialogFormVisible4: false,
            dialogFormVisible5: false,
            form: {
                orderId: "",
                glassId: "",
@@ -432,6 +561,30 @@
            form1: {
                order: "NG2210210",
                number: 800,
            },
            form2: {
                orderId: "",
                glassId: "",
                height: "",
                width: ""
            },
            form3: {
                orderId: "",
                glassId: "",
                height: "",
                width: ""
            },
            form4: {
                orderId: "",
                glassId: "",
                height: "",
                width: ""
            },
            form5: {
                orderId: "",
                glassId: "",
                height: "",
                width: ""
            },
            alarm: [],
            tableData: [],
@@ -445,6 +598,8 @@
            tasklist2: [],
            order: "",
            glassid: "",
            glassid1: "",
            glassid2: "",
            url: "../../img/bigcar01.png",
            car1: 145,
            car2: 210,
@@ -458,7 +613,12 @@
            text: "",
            zhuangtai: "",
            orderid: "",
            GlassInfo: []
            GlassInfo: [],
            disabled: false,
            disabled1: false,
            currentPage: 1,  //默认初始页
            pagesize: 15,    //每页默认显示的数据
            pageCount: 0
        };
    },
    created() {
@@ -486,7 +646,6 @@
                };
                //  浏览器端收消息,获得从服务端发送过来的文本消息
                socket.onmessage = function (msg) {
                    //console.log("收到数据====" + msg.data);
                    let obj = JSON.parse(msg.data);
                    if (obj.params != null) {
@@ -504,7 +663,50 @@
                    this.tasklist2 = obj.tasklist2[0];
                    this.alarm = obj.alarmmg[0];
                    this.loadglassheight = obj.loadglassheight;
                    this.zhuangtai = obj.zhuangtai[0];
                    if (obj.zhuangtai != null) {
                        this.zhuangtai = obj.zhuangtai[0];
                    }
                    // this.glassid1 = obj.queid[0];
                    // if (obj.queid[0] != "" && obj.queid[0] != null && obj.state[0] == 0) {
                    //     this.state = false;
                    //     this.disabled = true;
                    //     this.disabled1 = false;
                    //     this.showform3();
                    // } else if (obj.queid[0] != "" && obj.queid[0] != null && obj.state[0] == 1) {
                    //     this.state = true;
                    //     this.disabled = true;
                    //     this.disabled1 = true;
                    // }
                    // else {
                    //     this.state = true;
                    //     this.disabled = false;
                    //     this.disabled1 = false;
                    // }
                    if (obj.form2 != null && obj.form2 != "") {
                        this.form2 = obj.form2[0];
                    } else {
                        this.form2 = {
                            orderId: "",
                            glassId: "",
                            height: "",
                            width: ""
                        };
                    }
                    if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 1) {
                        this.form3 = obj.form3[0];
                    } else {
                        this.form3 = {
                            orderId: "",
                            glassId: "",
                            height: "",
                            width: ""
                        };
                    }
                    if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 0) {
                        this.form5 = obj.form3[0];
                    }
                    //if (obj.dbconnected == "false") {
                    this.text = this.$t('DataBase Connection failed');
                    // }
@@ -632,7 +834,7 @@
                if (res.data.form != null) {
                    this.form = res.data.form;
                    this.dialogFormVisible = true;
                    this.$message.success('query was successful');
                    this.$message.success(this.$t('query was successful'));
                } else {
                    this.dialogFormVisible = true;
                    this.$message.error(this.$t('There is no such glass'));
@@ -649,6 +851,50 @@
                };
                this.dialogFormVisible1 = true;
            }
        },
        //显示扫码位和上片位
        showform3() {
            this.dialogFormVisible5 = true;
        },
        //获取扫码位和上片位数据
        SelectGlassByGlassIDs(parameter) {
            this.showform3();
            if (parameter == 1) {
                SelectGlassByGlassID(this.glassid2).then(res => {
                    if (res.data.form != null) {
                        this.form4 = res.data.form;
                        this.$message.success(this.$t('query was successful'));
                    } else {
                        this.$message.error(this.$t('There is no such glass'));
                    }
                    if (this.form4.length > 0) {
                        if (this.form4.glassId == "") {
                            this.disabled = false;
                        } else {
                            this.disabled = true;
                        }
                    }
                });
            } else {
                SelectGlassByGlassID(this.glassid1).then(res => {
                    if (res.data.form != null) {
                        this.form5 = res.data.form;
                        this.$message.success(this.$t('query was successful'));
                    } else {
                        this.$message.error(this.$t('There is no such glass'));
                    }
                    if (this.form5.length > 0) {
                        if (this.form5.glassId == "") {
                            this.disabled = false;
                        } else {
                            this.disabled = true;
                        }
                    }
                });
            }
        },
        selectglassinfo() {
            SelectGlass(this.orderid).then(res => {
@@ -674,6 +920,10 @@
        //取消操作时关闭页面
        cancel1() {
            this.dialogFormVisible1 = false;
            this.form1 = {};
        },
        cancel3() {
            this.dialogFormVisible5 = false;
            this.form1 = {};
        },
        //结束进/出片任务
@@ -821,6 +1071,87 @@
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        handleEdit(index, row) {
            console.log(index, row);
        },
        //表格删除
        handleDelete(index, row) {
            console.log(index, row);
        },
        //改变每页容纳的数据量
        handleSizeChange: function (size) {
            this.pagesize = size;
        },
        //切换页码
        handleCurrentChange: function (currentPage) {
            this.currentPage = currentPage;
        },
        //手动添加扫码位玻璃
        InsertQueueGlass(parameter) {
            if (parameter == 1 && this.form5.glassId != "") {
                if (this.form5.glassId != this.form2.glassId) {
                    InsertQueueGlassId(this.form5.glassId, 1).then(res => {
                        if (res.data.message == 200) {
                            this.form5 = {
                                orderId: "",
                                glassId: "",
                                height: "",
                                width: ""
                            };
                            this.$message.success(this.$t('Operation successful'));
                        }else{
                            this.$message.error(this.$t('This glass ID already exists in the sorting cage'));
                        }
                    });
                } else {
                    this.$message.error(this.$t('The glass ID already exists in the loading queue'));
                }
            } else if (parameter == 2 && this.form4.glassId != "") {
                if (this.form4.glassId != this.form3.glassId) {
                    InsertQueueGlassId(this.form4.glassId, 2).then(res => {
                        if (res.data.message == 200) {
                            this.form4 = {
                                orderId: "",
                                glassId: "",
                                height: "",
                                width: ""
                            };
                            this.$message.success(this.$t('Operation successful'));
                        }else{
                            this.$message.error(this.$t('This glass ID already exists in the sorting cage'));
                        }
                    });
                } else {
                    this.$message.error(this.$t('The glass ID already exists in the loading queue'));
                }
            }
        },
        //清除上片队列玻璃
        DeleteQueueGlasss(parameter) {
            if (parameter == 1) {
                DeleteQueueGlass(1).then(res => {
                    if (res.data.message == 200) {
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
            } else {
                DeleteQueueGlass(2).then(res => {
                    if (res.data.message == 200) {
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
            }
        },
        //修改扫码位玻璃状态
        UpdateQueueStates() {
            UpdateQueueState().then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        }
    }
}
springboot-vue3/pom.xml
@@ -92,7 +92,7 @@
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring-boot-starter</artifactId>
            <version>1.8.0</version>
            <version>1.8.0</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -38,6 +38,12 @@
      spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
      jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
      spianService.selectout("1145");
      //spianService.selectAll2();
      //增加队列表数据
      //spianMapper.insertqueue("1",1,1500);
      // 根据玻璃id获取订单号,单独数据源
      // try {
@@ -48,12 +54,20 @@
      //   // TODO Auto-generated catch block
      //   e.printStackTrace();
      // }
    // spianService.selectAll((short)257);
      //判断进片请求
      List<Short> datas1List = S7control.getinstance().ReadWord("DB106.24", 1);// 获取prc进片请求数据
      List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8", 1);// 获取进片车状态
      List<Short> datas1ListState2 = S7control.getinstance().ReadWord("DB105.12", 1);// 获取进片车任务是否启动
      //测试启动自定义prc值
      // List<Short> datas1List=new ArrayList<>();
      // datas1List.add((short)1);
      // List<Short> datas1ListState=new ArrayList<>();
      // datas1List.add((short)0);
      // List<Short> datas1ListState2=new ArrayList<>();
      // datas1List.add((short)0);
      if (datas1List != null && datas1ListState != null) {
        // 获取prc进片请求数据
@@ -67,11 +81,11 @@
        StringBuilder strId=new StringBuilder();
         StringBuilder writedstrId=new StringBuilder();
       
       if(!inglassbegin&!exist1)
       if(!inglassbegin&!exist1)//当进片车不空闲时
       {
         inglassbegin=true;
       }
       if(inglassbegin&exist1)
       if(inglassbegin&exist1)//当进片车空闲时
       {
        inglassbegin=false;
        spianMapper.Updatetask(1, 0);//立即结束数据库表中的上片任务
@@ -83,7 +97,7 @@
          if (exist1 == true) {
            //获取已下发的进片id 与plc请求的id作比较
              byte[] writedglassidbytes = S7control.getinstance().ReadByte("DB105.16", 1);
            if (writedglassidbytes != null) {
            if (writedglassidbytes != null) { //
              // 获取玻璃id
              for (byte iditem : writedglassidbytes) { 
                writedstrId.append(iditem);
@@ -99,9 +113,15 @@
              }
              if(!writedstrId.toString().equals(strId.toString())) //已经下发的id与plc请求的id不一样时,认为不是重复的任务,才执行下发任务指令
              {
                 spianService.selectAll(strId.toString());
                 int glasslimit=1;//判断是否是多片上片
                 if(glasslimit==1){
                  spianService.selectAll(strId.toString());
                 }else{
                  spianService.selectAll(strId.toString());
                 }
                  S7control.getinstance().WriteByte("DB105.16",datas1ListID);//派发进片id
              }
              //spianService.selectAll(Short.parseShort(strId.toString()));
            }
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -3,18 +3,26 @@
import cn.hutool.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.springboot.common.Result;
import com.example.springboot.entity.Glass;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.mapper.HomeMapper;
import com.example.springboot.mapper.SpianMapper;
import com.example.springboot.service.JdbcConnections;
public class Plchome extends Thread {
    private HomeMapper homeMapper;
    private SpianMapper spianMapper;
    private JdbcConnections dbserve;
    @Override
    public void run() {
        while (this != null) {
@@ -27,6 +35,7 @@
            // 注入mapper
            homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class);
            spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
            // 笼子使用情况
            List<StorageCage> tableData = homeMapper.selectAll();
            jsonObject.append("tableData", tableData);
@@ -36,7 +45,7 @@
            List<StorageCage> cagelist3 = homeMapper.selectRack3();
            List<StorageCage> cagelist4 = homeMapper.selectRack4();
            jsonObject.append("cagelist1", cagelist1);
            jsonObject.append("cagelist2", (Object)cagelist2);
            jsonObject.append("cagelist2", (Object) cagelist2);
            jsonObject.append("cagelist3", cagelist3);
            jsonObject.append("cagelist4", cagelist4);
            // 进出片任务
@@ -47,15 +56,34 @@
            // 查询报警信息
            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);
            // 获取进片车状态
            List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8", 1);// 获取进片车状态
            boolean exist1 = datas1ListState.contains((short) 0);
            jsonObject.append("zhuangtai",exist1);
            // // 读去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();
            String state = spianMapper.Selectqueuestate();
            jsonObject.append("queid", queid);
            jsonObject.append("state", state);
            // 获取扫码位与上片位玻璃信息
            Glass form2 = homeMapper.GetQueueInfo(2);
            Glass form3 = homeMapper.GetQueueInfo(1);
            jsonObject.append("form2", form2);
            jsonObject.append("form3", form3);
            // List<Short> paramlists = new ArrayList<Short>();
            // short para1 = 11111;
            // short para2 = 32000;
@@ -64,25 +92,16 @@
            // System.out.println(paramlists);
            
            if(paramlist!=null){
            jsonObject.append("params", paramlist);
            }
           List<Short> inglassInfo=  S7control.getinstance().ReadWord("DB106.24",1);
           if(inglassInfo!=null){
            if(inglassInfo.size()>0)
            jsonObject.append("loadglassheight", inglassInfo.get(0)*70);
            }
               dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
               boolean dbconnected=false;
               try {
            dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
            boolean dbconnected = false;
            try {
                dbserve.getConn();
                 dbconnected=true;
               } catch (Exception e) {
                dbconnected = true;
            } catch (Exception e) {
                // TODO: handle exception
                 dbconnected=false;
               }
            jsonObject.append("dbconnected",  dbconnected);
                dbconnected = false;
            }
            jsonObject.append("dbconnected", dbconnected);
            // jsonObject.append("params", new short[] { 30, 40, });
            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Home");
            if (sendwServer != null) {
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -25,7 +25,7 @@
    //
    System.out.println("启动完成");
    new PlcHold().start();
    // new PlcHold().start();
    new Plcaction().start();
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -203,7 +203,7 @@
            map.put("message", "300");
        } else {
            homeMapper.Inglassid(glass, cage, cell, tier);
            spianMapper.UpdataAddCage1(glass.getWidth(), cage, cell);
            spianMapper.UpdataAddCage1(glass.getGlassWidth(), cage, cell);
        }
        return Result.success(map);
    }
@@ -216,4 +216,38 @@
        map.put("glass", glass);
        return Result.success(map);
    }
    //手动添加扫码位玻璃
    @PostMapping("/InsertQueueGlassId")
    public Result InsertQueueGlassId(String glassid,Short id) {
        Map<String, Object> map = new HashMap<>();
        short result = homeMapper.SelectStorageByGlassId(glassid);
        if (result > 0) {
            map.put("message", "300");
        }else{
            homeMapper.InsertQueueGlassId(glassid,id);
            map.put("message", "200");
        }
        return Result.success(map);
    }
    //确认扫码位玻璃信息
    @PostMapping("/UpdateQueueState")
    public Result UpdateQueueState() {
        homeMapper.UpdateQueueState();
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    //清除上片队列玻璃
    @PostMapping("/DeleteQueueGlass")
    public Result DeleteQueueGlass(String id) {
        homeMapper.DeleteQueueGlass(id);
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
}
springboot-vue3/src/main/java/com/example/springboot/entity/Glass.java
@@ -2,9 +2,9 @@
public class Glass{
    private Integer id;
    private Short orderId;
    private double glassWidth;
    private double glassHeight;
    private String orderId;
    private double width;
    private double height;
    private String glassId;
    
    
@@ -19,28 +19,28 @@
        return id;
    }
    public Short getOrderId() {
    public String getOrderId() {
        return orderId;
    }
    public void setOrderId(Short orderId) {
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
    
    public double getWidth() {
        return glassWidth;
    public double getwidth() {
        return width;
    }
    public void setHeight(double glassHeight) {
        this.glassHeight = glassHeight;
    public void setHeight(double height) {
        this.height = height;
    }
    public double getHeight() {
        return glassHeight;
        return height;
    }
    public void setWidth(double glassWidth) {
        this.glassWidth = glassWidth;
    public void setWidth(double width) {
        this.width = width;
    }
     public String getGlassId() {
springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java
New file
@@ -0,0 +1,84 @@
package com.example.springboot.entity;
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 glasslength_mm;//玻璃宽mm
    private double glassheight_mm;//玻璃高mm
    public Integer id() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    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;
    }
    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;
    }
    public Double getglassheight() {
        return glassheight;
    }
    public void setglassheight(Double glassheight) {
        this.glassheight = glassheight;
    }
    public Double getglasslength_mm() {
        return glasslength_mm;
    }
    public void setglasslength_mm(Double glasslength_mm) {
        this.glasslength_mm = glasslength_mm;
    }
    public Double glassheight_mm() {
        return glassheight_mm;
    }
    public void setglassheight_mm(Double glassheight_mm) {
        this.glassheight_mm = glassheight_mm;
    }
}
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -107,7 +107,25 @@
  @Select("select count(*) from storage_cage where glass_id=#{glassId}")
  short SelectStorageByGlassId(String glassId);
  @Select("select * from glass where orderid=#{orderid}")
  //根据订单查询玻璃信息
  @Select("select * from glass where position(#{orderid} in orderid)")
  List<Glass> SelectGlass(String orderid);
  //获取上片队列信息
  @Select("select gl.* from queue qe inner join glass gl on qe.glassid=gl.glassid where qe.id=#{id}")
  Glass GetQueueInfo(int id);
  //手动添加扫码位玻璃
  @Select("update queue set glassid=#{glassid},state=1 where id=#{id}")
  void InsertQueueGlassId(String glassid,Short id);
  //确认扫码位玻璃信息
  @Select("update queue set state=1 where id=1")
  void UpdateQueueState();
  //手动添加扫码位玻璃
  @Select("update queue set glassid='' where id=#{id}")
  void DeleteQueueGlass(String id);
  
}
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -20,8 +20,8 @@
     
     //@Select("(select*from storage_cage as a  where a.state=0 and cage%2=0 ORDER BY id LIMIT 1)union (select a.* from storage_cage a inner join  (select cage,if(shu2=1,shu3,shu5) as gezi from ( select  cage, count(case when state1=1 and state2=0 then cell else null end)as shu1,  count(case when state1=0 then cell else null end) as shu2, min(case when state1=1 and state2=0 then cell else null end) as shu3, min(case when state1=0 then cell else null end) as shu4, min(case when state1=0 or state2=0 then cell else null end) as shu5 from  (select *,max(state) as state1,min(state) as state2 from storage_cage group by cage,cell) as a where  cage%2!=0  GROUP BY cage HAVING shu2>1 or (shu2=1 and shu1>0)  ) as sss limit 1)as b on a.cage=b.cage and a.cell=b.gezi and a.state=0 order by tier limit 1) ORDER BY id LIMIT 1;")
    //获取订单号排序的空订单笼子
     @Select("select cage,COUNT(if(order_id=#{orderids},order_id,null))as orderid,cell,min(state)as state1 from storage_cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY orderid desc; ")
     List<StorageCage> selectAll(Short orderids);
     @Select("select a.cage,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1 from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,cage asc; ")
     List<StorageCage> selectAll(String orderids);
     //判断该笼子是否有合适宽度空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} ORDER BY cell asc,tier desc LIMIT 1")
@@ -41,14 +41,16 @@
     void insert(StorageTask storageTask);
    
    //出片任务查询
    @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
    @Select("select COUNT(order_id)order_id,cage,cell,glasswidth,tier,ROUND(id/2)as prcId,glass_id from storage_cage a where a.order_id=#{orderId} GROUP BY cage,cell ORDER BY cage desc,order_id desc,cell desc,glasswidth desc limit 1")
     StorageCage selectOut(String  orderId);
    // @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
    //  StorageCage selectOut(String  orderId);
    //按玻璃ID出片任务查询
    @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id from storage_cage as a where a.glass_id=#{glassid} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
     StorageCage selectOut2(String  glassid);
    //判断出片为1时,是否可直接出片
    @Select("select state from storage_cage where cage=#{cage} and cell=#{cell} and tier=2;")
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell}")
     int selectGlassState(int  cage,int cell);
     //判断该调拨的笼子
@@ -61,7 +63,10 @@
    //修改笼子信息(进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where id=#{id};")
    void UpdataAddCage(Short orderid,String glassid,double width,int cage,int cell,int id,int state);
    void UpdataAddCage(String orderid,String glassid,double width,int cage,int cell,int id,int state);
     //修改笼子信息(多片进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where cage=#{cage} and cell=#{cell} and tier=#{tier};")
    void UpdataAddqueCage(String orderid,String glassid,double width,int cage,int cell,int tier,int state);
    //修改同笼子格子宽度
     @Update("update storage_cage set width=width-#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataAddCage1(double width,int cage,int cell);
@@ -103,5 +108,37 @@
     //根据笼子格子层数获取玻璃id
     @Select("SELECT COUNT(*) FROM `storage_cage` where state=3;")
     Integer Selectoutstate();
     //添加任务序列
     //获取进片队列id
     @Insert("INSERT INTO `canadames`.`queue`(`glassid`, `type`, `state`,width) VALUES (#{glassid},#{type},0,#{width});")
     void insertqueue(String glassid,int type,double width);
     //获取任务序列
     @Select("select glassid,orderid,width,type from queue where state=#{state}")
     StorageCage SelectQueue(int state);
     //获取序列表的玻璃宽
     @Select("select sum(width)+400 as width,orderid from queue where state=0 limit 1")
     StorageCage SelectQueueWidth();
    //判断该笼子是否有合适完整空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width,max(state)state1 from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} HAVING state1=0 ORDER BY cell asc,tier desc LIMIT 1")
     StorageCage selectqueCage1(int  cage1,int cell,double width);
     //获取序列表的玻璃
     @Select("select glassid,orderid,width from queue where state=0 and type=#{type}")
     Glass SelectQueueGlass(int type);
     //多片出库清除一整个空格
     @Update("update storage_cage set glass_id='',order_id='',glasswidth=0,width=2750,state=0 where cage=#{cage} and cell=#{cell}")
     void UpdatequeOut(int cage,int cell);
     //判断序列表里的玻璃是否是同一订单
     @Select("select  COUNT(distinct orderid) from queue ")
     int SelectQueOrder();
     //寻找可以多片出片的玻璃
     @Select("select cage,cell,ROUND(id/2)as prcId,width,count(glass_id)shu from storage_cage where order_id=#{orderid} and (cage!=#{cage} or cell!=#{cell}) GROUP BY cage,cell HAVING shu=1 ORDER BY cage desc,cell desc limit 1")
     StorageCage SelectQueout(String orderid,int cage,int cell);
     //获取进片队列id
     @Select("select glassid from queue where type=1 and state=0;")
     @Select("select glassid from queue where type=1")
     String Selectqueueid();
     //获取进片队列id
     @Select("select state from queue where type=1")
     String Selectqueuestate();
}
    
springboot-vue3/src/main/java/com/example/springboot/service/JdbcConnections.java
@@ -32,7 +32,7 @@
         ps.setInt(1, glassid);
         rs= ps.executeQuery();
         while (rs.next()) {
            glass.setOrderId(rs.getShort("orderid"));
            glass.setOrderId(rs.getString("orderid"));
         }
         conn.close();
         return glass;
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -19,134 +19,6 @@
    @Autowired
    private SpianMapper spianMapper;
    // @GetMapping("/all2")
    public Result selectout(String orderid) {
        //spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务,改到plchold里,出片或调度任务完成立即改变结束任务;
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
        adddresslist.add("DB105.8");// 出片车目标位置
        adddresslist.add("DB105.10");// 出片笼玻璃数
        adddresslist.add("DB105.14");// 出片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut(orderid);
        if(cageout==null){
           return Result.success("200");
        }
        int cage = cageout.getCage(); // 储存出片位置,笼子格子几号玻璃
        int cell = cageout.getCell();// 出片格号
        int tier = cageout.getTier();// 出片内外片
        int prcid = cageout.getPrcId();// prcid
        String glassid=cageout.getGlassId();
        int prcid2;
        int ids;
        int cages;
        int cells;
        double glasswidth = cageout.getGlassWidth();
        // 判断玻璃内外片
        if (tier == 2) {
            // 判断玻璃可直接出片时
            // 修改数据库笼子表(出片)
            datas.add((short) prcid);
            datas.add((short) 1000);
            datas.add((short) 1);
            datas.add((short) 1);
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);//清除格子玻璃信息
            spianMapper.Inserttask(1, 0,cageout.getId(),1000,orderid);//新增任务
            S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
            outmesid(glassid);//派发出片ID
            return Result.success(datas);//结束
        } else {
            // 获取格子的玻璃数量
            int state = spianMapper.selectGlassState(cage, cell);
            // 判断内片是否需要调拨
            if (state == 0) {
                //spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);
                datas.add((short) prcid);
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.Inserttask(1, 0,cageout.getId(),1000,orderid);//新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);//清除格子玻璃信息
                S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                outmesid(glassid);//派发出片ID
                //spianMapper.Updatetask(1, 1);//完成任务
                return Result.success(datas);//结束
            } else {
                // 玻璃需要调拨时,判断属于哪个半区的笼子
                if (cage < 6) {
                    StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 0, 6);
                    if (cagecell == null) {
                        return Result.success(cagecell);
                    }
                    // 获取调拨位置进行调拨
                    prcid2 = cagecell.getPrcId();// 调拨目标位PRCID
                    ids = cagecell.getId();// 调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                    // 填入调拨数据
                    datas.add((short) prcid);// 调拨外片起始位置
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                   // 更换玻璃的笼子
                   String glassids=spianMapper.SelectGlassid(cage, cell); //获取被调拨的玻璃id
                   spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                   spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                   spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                   spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                   spianMapper.Inserttask(2, 0,cageout.getId(),ids,orderid);//新增调度任务
                    // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                        System.out.println(datas);
                        outmesid(glassids);//派发调拨玻璃ID
                    return Result.success(cagecell); //结束
                } else {// 笼子号大于5时
                    StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 5, 11);
                    if (cagecell == null) {
                        return Result.success(cagecell);
                    }
                    // 获取调拨位置进行调拨
                    prcid2 = cagecell.getPrcId();// 调拨目标位prcID
                    ids = cagecell.getId();// 调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                    // 填入调拨数据
                    datas.add((short) prcid);
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                    String glassids=spianMapper.SelectGlassid(cage, cell); //获取被调拨的玻璃id
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                    spianMapper.Inserttask(2, 0,cageout.getId(),ids,orderid);//新增调度任务
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                    // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                        outmesid(glassids);//派发调拨玻璃ID
                     return Result.success(cagecell); //结束
                }
            }
        }
    }
    // @GetMapping("/all")
    // 进片任务,传订单id
    // 按订单优先进片
@@ -159,14 +31,14 @@
        int tiers;
        int prctier;
        double width;
        double minwidth=0;
        //spianMapper.Updatetask(1, 0);//完成任务,改到plchold里,出片或调度任务完成立即改变结束任务;
            Glass glasslist = spianMapper.selectGlass(glassid);
        if(glasslist==null){
          return (300);
        double minwidth = 0;
        Glass glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数
        if (glasslist == null) {
            return (300);
        }
        double widths = glasslist.getWidth();
        Short orderids = glasslist.getOrderId();
        double widths = glasslist.getwidth();
        String orderids = glasslist.getOrderId();
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.0");// 进片车起始位置
@@ -177,7 +49,7 @@
        // String orderid="A001";
        // 获取订单相关度最高的笼子排序
        List<StorageCage> storageCage = spianMapper.selectAll(orderids);
        List<StorageCage> storageCage = spianMapper.selectAll(orderids.toString());
        if (storageCage == null) {
            return (400);
        }
@@ -186,38 +58,38 @@
            cage1 = storageCage2.getCage();
            // 判断该笼子号相邻最大的空格数
            int cages = spianMapper.selectCage(cage1);
            StorageCage cages1 ;
            //判断是否是第二片需要加间隔物
            StorageCage cages1;
            // 判断是否是第二片需要加间隔物
            prctier = spianMapper.selectsum(cage1, storageCage2.getCell());// 传给prc的格子内玻璃数
                if(prctier>0){
                   cages1 = spianMapper.selectCage1(cage1,storageCage2.getCell(),widths+400);
                }else{
                    cages1 = spianMapper.selectCage1(cage1,storageCage2.getCell(),widths);
                }
            if (prctier > 0) {
                cages1 = spianMapper.selectCage1(cage1, storageCage2.getCell(), widths + 400);
            } else {
                cages1 = spianMapper.selectCage1(cage1, storageCage2.getCell(), widths);
            }
            // 判断选中笼子是否有合适宽度空格
             // 有合适空格时进片
            if (cages1 != null&&cages>=1) {
            // 有合适空格时进片
            if (cages1 != null && cages >= 1) {
                ids = cages1.getId();// 数据库ID
                tiers = cages1.getTier();// 内外片
                cells = cages1.getCell();// 格子号
                prcid = cages1.getPrcId();// 传给prc的目标地id
                width=cages1.getWidth();//格子剩余宽度
                widths=glasslist.getWidth();
                width = cages1.getWidth();// 格子剩余宽度
                widths = glasslist.getwidth();
                    // 执行进片
                    datas.add((short) 1000);
                    datas.add((short) prcid);
                    datas.add((short) prctier);
                    datas.add((short) 1);
                    // 数据库修改笼子表新增一条玻璃
                    spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);//减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids,glassid.toString());//新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                   // S7control.getinstance().WriteByte("DB105.16",glassid);
                   return (200);
                // 执行进片
                datas.add((short) 1000);
                datas.add((short) prcid);
                datas.add((short) prctier);
                datas.add((short) 1);
                // 数据库修改笼子表新增一条玻璃
                spianMapper.UpdataAddCage(orderids.toString(), glassid, widths, cage1, cells, ids, 2);
                spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString());// 新增任务
                S7control.getinstance().WriteWord(adddresslist, datas);
                // S7control.getinstance().WriteByte("DB105.16",glassid);
                return (200);
            }
        }
@@ -225,9 +97,285 @@
    }
    public Short selectAll2() { // 多片上片
        int cage1;
        int cells;
        int ids;
        int prcid;
        int tiers;
        int prctier;
        double width;
        double minwidth = 0;
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.0");// 进片车起始位置
        adddresslist.add("DB105.2");// 进片车目标位置
        adddresslist.add("DB105.4");// 进片笼玻璃数
        adddresslist.add("DB105.12");// 进片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // 获取多片序列玻璃宽度
        StorageCage queGlass = spianMapper.SelectQueueWidth();
        double widths = queGlass.getWidth();
        String orderids = queGlass.getOrderId();
        int num = spianMapper.SelectQueOrder();
        if (num == 1) {
            // 获取订单相关度最高的笼子排序
            List<StorageCage> storageCage = spianMapper.selectAll(orderids);
            if (storageCage == null) {
                return (400);
            }
            for (StorageCage storageCage2 : storageCage) {
                // 保存订单优先顺序笼子号
                cage1 = storageCage2.getCage();
                // 判断该笼子号相邻最大的空格数
                int cages = spianMapper.selectCage(cage1);
                StorageCage cages1;
                // 判断是否有合适完整空格
                cages1 = spianMapper.selectqueCage1(cage1, storageCage2.getCell(), widths);
                // 判断选中笼子是否有合适宽度空格
                // 有合适空格时进片
                if (cages1 != null && cages >= 1) {
                    ids = cages1.getId();// 数据库ID
                    cells = cages1.getCell();// 格子号
                    prcid = cages1.getPrcId();// 传给prc的目标地id
                    // 数据库修改笼子表新增一条玻璃
                    for (int i = 2; i > 0; i--) {
                        Glass qglass = spianMapper.SelectQueueGlass(i);
                        width = qglass.getwidth();// 格子剩余宽度
                        spianMapper.UpdataAddqueCage(qglass.getOrderId(), qglass.getGlassId(), width, cage1, cells, i,
                                1);
                        spianMapper.UpdataAddCage1(width, cage1, cells);// 减少格子宽度
                        spianMapper.Inserttask(0, 0, 1000, ids, qglass.getGlassId().toString());// 新增任务
                    }
                    // 执行进片
                    datas.add((short) 1000);
                    datas.add((short) prcid);
                    datas.add((short) 0);
                    datas.add((short) 1);
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    return (200);
                }
            }
        } else {
            for (int i = 2; i > 0; i--) {
                Glass qglass = spianMapper.SelectQueueGlass(i);
                String orderid = qglass.getOrderId().toString();
                String glassid = qglass.getGlassId();
                widths = qglass.getwidth();
                List<StorageCage> storageCage = spianMapper.selectAll(orderid);
                if (storageCage == null) {
                    return (400);
                }
                for (StorageCage storageCage2 : storageCage) {
                    // 保存订单优先顺序笼子号
                    cage1 = storageCage2.getCage();
                    // 判断该笼子号相邻最大的空格数
                    int cages = spianMapper.selectCage(cage1);
                    StorageCage cages1;
                    // 判断是否是第二片需要加间隔物
                    prctier = spianMapper.selectsum(cage1, storageCage2.getCell());// 传给prc的格子内玻璃数
                    if (prctier > 0) {
                        cages1 = spianMapper.selectCage1(cage1, storageCage2.getCell(), widths + 400);
                    } else {
                        cages1 = spianMapper.selectCage1(cage1, storageCage2.getCell(), widths);
                    }
                    // 判断选中笼子是否有合适宽度空格
                    // 有合适空格时进片
                    if (cages1 != null && cages >= 1) {
                        ids = cages1.getId();// 数据库ID
                        tiers = cages1.getTier();// 内外片
                        cells = cages1.getCell();// 格子号
                        prcid = cages1.getPrcId();// 传给prc的目标地id
                        width = cages1.getWidth();// 格子剩余宽度
                        widths = qglass.getwidth();
                        // 执行进片
                        datas.add((short) 1000);
                        datas.add((short) prcid);
                        datas.add((short) prctier);
                        datas.add((short) 1);
                        // 数据库修改笼子表新增一条玻璃
                        spianMapper.UpdataAddCage(orderid, glassid, widths, cage1, cells, ids, 2);
                        spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                        spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString());// 新增任务
                        // S7control.getinstance().WriteWord(adddresslist, datas);
                        break;
                        // S7control.getinstance().WriteByte("DB105.16",glassid);
                    }
                }
            }
        }
        return (400);
    }
    // 按订单出片
    public Result selectout(String orderid) {
        // spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务,改到plchold里,出片或调度任务完成立即改变结束任务;
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
        adddresslist.add("DB105.8");// 出片车目标位置
        adddresslist.add("DB105.10");// 出片笼玻璃数
        adddresslist.add("DB105.14");// 出片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut(orderid);
        if (cageout == null) {
            return Result.success("200");
        }
        // 判断是否同一格内都为同一订单
        int orders = Integer.valueOf(cageout.getOrderId()).intValue();
        int cage = cageout.getCage(); // 储存出片位置,笼子格子几号玻璃
        int cell = cageout.getCell();// 出片格号
        int tier = cageout.getTier();// 出片内外片
        int prcid = cageout.getPrcId();// prcid
        String glassid = cageout.getGlassId();
        int prcid2;
        int ids;
        int cages;
        int cells;
        double glasswidth = cageout.getGlassWidth();
        // 当一格内都为同一订单时
        if (orders == 2) {
            datas.add((short) prcid);
            datas.add((short) 1000);
            datas.add((short) 2);
            datas.add((short) 1);
            spianMapper.UpdatequeOut(cage, cell);
            return Result.success("200");
        } else {
            // 判断是否除此格子内还有其他格子有单独的订单玻璃
            StorageCage pd = spianMapper.SelectQueout(orderid,cage, cell);
            // 判断玻璃内外片
            if (tier == 2) {
                // 判断玻璃可直接出片时
                // 修改数据库笼子表(出片)
                datas.add((short) prcid);
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);// 清除格子玻璃信息
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, orderid);// 新增任务
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                outmesid(glassid);// 派发出片ID
                if (pd != null) {
                    cage = pd.getCage();
                    cell = pd.getCage();
                    // 清除本格数据出片
                    spianMapper.UpdatequeOut(cage, cell);
                    return Result.success("200");
                }
                return Result.success(datas);// 结束
            } else {
                // 获取格子的玻璃数量
                int state = spianMapper.selectGlassState(cage, cell);
                // 判断内片是否需要调拨
                if (state == 1) {
                    // spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);
                    datas.add((short) prcid);
                    datas.add((short) 1000);
                    datas.add((short) 1);
                    datas.add((short) 1);
                    spianMapper.Inserttask(1, 0,prcid, 1000, orderid);// 新增任务
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);// 清除格子玻璃信息
                    //S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    //outmesid(glassid);// 派发出片ID
                    if (pd != null) {
                        cage = pd.getCage();
                        cell = pd.getCage();
                        // 清除本格数据出片
                        spianMapper.UpdatequeOut(cage, cell);
                        return Result.success("200");
                    }
                    return Result.success(datas);// 结束
                } else {
                    // 玻璃需要调拨时,判断属于哪个半区的笼子
                    if (cage < 6) {
                        StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 0, 6);
                        if (cagecell == null) {
                            return Result.success(cagecell);
                        }
                        // 获取调拨位置进行调拨
                        prcid2 = cagecell.getPrcId();// 调拨目标位PRCID
                        ids = cagecell.getId();// 调拨目标位ID
                        cages = cagecell.getCage();// 调拨目标位笼子
                        cells = cagecell.getCell();// 调拨目标位格子
                        // 填入调拨数据
                        datas.add((short) prcid);// 调拨外片起始位置
                        datas.add((short) prcid2);
                        datas.add((short) 2);
                        datas.add((short) 1);
                        // 更换玻璃的笼子
                        String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                        spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                        spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                        spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                        spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                        spianMapper.Inserttask(2, 0, cageout.getId(), ids, orderid);// 新增调度任务
                        // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                        System.out.println(datas);
                        outmesid(glassids);// 派发调拨玻璃ID
                        return Result.success(cagecell); // 结束
                    } else {// 笼子号大于5时
                        StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 5, 11);
                        if (cagecell == null) {
                            return Result.success(cagecell);
                        }
                        // 获取调拨位置进行调拨
                        prcid2 = cagecell.getPrcId();// 调拨目标位prcID
                        ids = cagecell.getId();// 调拨目标位ID
                        cages = cagecell.getCage();// 调拨目标位笼子
                        cells = cagecell.getCell();// 调拨目标位格子
                        // 填入调拨数据
                        datas.add((short) prcid);
                        datas.add((short) prcid2);
                        datas.add((short) 2);
                        datas.add((short) 1);
                        String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                        spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                        spianMapper.Inserttask(2, 0, cageout.getId(), ids, orderid);// 新增调度任务
                        spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                        spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                        spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                        // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                        outmesid(glassids);// 派发调拨玻璃ID
                        return Result.success(cagecell); // 结束
                    }
                }
            }
        }
    }
    // @GetMapping("/all2")
    public Short selectout2(String glassid) {
        //spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务,改到plchold里,出片或调度任务完成立即改变结束任务;
        // spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务,改到plchold里,出片或调度任务完成立即改变结束任务;
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
@@ -237,12 +385,9 @@
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut2(glassid);
        if(cageout==null){
           return (300);
        if (cageout == null) {
            return (300);
        }
        int cage = cageout.getCage(); // 储存出片位置,笼子格子几号玻璃
        int cell = cageout.getCell();// 出片格号
@@ -251,49 +396,47 @@
        int prcid2;
        int ids;
        int cages;
        int cells;
        int cells;
        double glasswidth = cageout.getGlassWidth();
        // 判断玻璃内外片
        if (tier == 2) {
            int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
            int state = spianMapper.selectGlassState(cage, cell);// 获取格子数量
            // 判断玻璃可直接出片时
            // 修改数据库笼子表(出片)
            datas.add((short) prcid);
            datas.add((short) 1000);
            datas.add((short) state);
            datas.add((short) 1);
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);//清除格子玻璃信息
            spianMapper.Inserttask(1, 0,cageout.getId(),1000,glassid);//新增任务
            //int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
            if(state==2){
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);// 清除格子玻璃信息
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增任务
            // int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
            if (state == 2) {
                spianMapper.UpdateDBCage1(cage, cell);// 将内片数据更新到外片里
                spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            }
            S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
            outmesid(glassid);//派发出片ID
            return (200);//结束
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            //outmesid(glassid);// 派发出片ID
            return (200);// 结束
        } else {
            // 获取格子的玻璃数量
            int state = spianMapper.selectGlassState(cage, cell);
            // 判断内片是否需要调拨
            if (state == 0) {
                //spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);
                // spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);
                datas.add((short) prcid);
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.Inserttask(1, 0,cageout.getId(),1000 ,glassid);//新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);//清除格子玻璃信息
                outmesid(glassid);//派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                return (200);//结束
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);// 清除格子玻璃信息
                //outmesid(glassid);// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                return (200);// 结束
            } else {
                // 玻璃需要调拨时,判断属于哪个半区的笼子
@@ -305,28 +448,27 @@
                    // 获取调拨位置进行调拨
                    prcid2 = cagecell.getPrcId();// 调拨目标位PRCID
                    ids = cagecell.getId();// 调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                    cages = cagecell.getCage();// 调拨目标位笼子
                    cells = cagecell.getCell();// 调拨目标位格子
                    // 填入调拨数据
                    datas.add((short) prcid);// 调拨外片起始位置
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                   // 更换玻璃的笼子
                   String glassids=spianMapper.SelectGlassid(cage, cell); //获取被调拨的玻璃id
                   spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                   spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                   spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                   spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                   spianMapper.Inserttask(2, 0,cageout.getId(),ids,glassid);//新增调度任务
                   spianMapper.Inserttask(1, 0,cageout.getId(),1000,glassid);//新增出片任务
                    // 更换玻璃的笼子
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassid);// 新增调度任务
                    spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                        outmesid(glassids);//派发调拨玻璃ID
                    return (200); //结束
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids);// 派发调拨玻璃ID
                    return (200); // 结束
                } else {// 笼子号大于5时
                    StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 5, 11);
@@ -336,25 +478,25 @@
                    // 获取调拨位置进行调拨
                    prcid2 = cagecell.getPrcId();// 调拨目标位prcID
                    ids = cagecell.getId();// 调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                    cages = cagecell.getCage();// 调拨目标位笼子
                    cells = cagecell.getCell();// 调拨目标位格子
                    // 填入调拨数据
                    datas.add((short) prcid);
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                    String glassids=spianMapper.SelectGlassid(cage, cell); //获取被调拨的玻璃id
                    spianMapper.Inserttask(2, 0,cageout.getId()+1,ids,glassid);//新增调度任务
                    spianMapper.Inserttask(1, 0,cageout.getId(),1000,glassid);//新增出片任务
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassid);// 新增调度任务
                    spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 3);// 清除被调拨格子数据
                    // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                        outmesid(glassids);//派发调拨玻璃ID
                     return (200);//结束
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids);// 派发调拨玻璃ID
                    return (200);// 结束
                }
            }
@@ -363,14 +505,14 @@
    }
    public void outmesid(String glassid) {
        System.out.println("outmesid:"+glassid);
        List<Byte> glassidlist=new ArrayList();
            for (char iditem : glassid.toCharArray()) {
                glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
            }
            byte[] bytes=  Bytes.toArray(glassidlist);
            System.out.println("outmesidbytes:"+bytes.length);
            S7control.getinstance().WriteByte("DB105.30", bytes);//派发出片id
        System.out.println("outmesid:" + glassid);
        List<Byte> glassidlist = new ArrayList();
        for (char iditem : glassid.toCharArray()) {
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte("DB105.30", bytes);// 派发出片id
    }
    /*** 修改用户* @throws SQLException */
@@ -392,4 +534,3 @@
    // }
}