ZengTao
2023-12-04 0258088b4e7751431080a1b47e7bc2af18031bbf
更新主界面功能
9个文件已修改
2个文件已添加
1个文件已删除
675 ■■■■ 已修改文件
CanadaMes-ui/src/api/home.js 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 356 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/Out_slice.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/JdbcConnections.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/North_Glass_Buffer1Service.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/OutSlice.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/api/home.js
@@ -173,9 +173,9 @@
    })
}
export function DeleteProductionQueueGlass(id) {
export function DeleteProductionQueueGlass(FrameNo) {
    return request({
        url: '/home/DeleteProductionQueueGlass?id='+id,
        url: '/home/DeleteProductionQueueGlass?FrameNo='+FrameNo,
        method: 'post',
        data: ""
    })
@@ -189,11 +189,20 @@
    })
}
export function isAllowQueues(isAllowQueue) {
export function isAllowQueues(isAllowQueue,data) {
    return request({
        url: '/home/AddOutSliceS?isAllowQueue'+isAllowQueue,
        url: '/home/isAllowQueues?isAllowQueue=' + isAllowQueue,
        method: 'post',
        data
    })
}
export function isConfirmStates(isConfirmStates) {
    return request({
        url: '/home/isConfirmStates?isConfirmStates=' + isConfirmStates,
        method: 'post',
        data:""
    })
}
CanadaMes-ui/src/lang/locales/en-US.json
@@ -311,5 +311,7 @@
  "Outing":"Outing",
  "Suspend":"Suspend",
  "Stop":"Stop",
  "Start":"Start"
  "Start":"Start",
  "Sequence":"Sequence",
  "Position":"Position"
}
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -307,6 +307,8 @@
  "Suspend":"暂停",
  "Stop":"停止",
  "Start":"开始",
  "Sequence":"顺序",
  "Position":"位置",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速",
CanadaMes-ui/src/views/home/index.vue
@@ -204,11 +204,11 @@
                    </label>
                </div>
            </div>
            <div style="display:flex;justify-content: space-around;width: 95%;margin: 0 auto;">
            <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)">{{ $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>
                <!-- <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%">
@@ -220,7 +220,7 @@
                    <el-table-column prop="orderId" :label="$t('Box No')"></el-table-column>
                    <el-table-column :width="130" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.glasswidthmm }}*1{{ scope.row.glassheightmm }}
                            {{ scope.row.glasswidthmm }}*{{ scope.row.glassheightmm }}
                        </template>
                    </el-table-column>
                    <el-table-column :label="$t('Terminate Task')">
@@ -240,7 +240,7 @@
                    <el-table-column prop="orderId" :label="$t('Box No')"></el-table-column>
                    <el-table-column :width="130" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.glasswidthmm }}*1{{ scope.row.glassheightmm }}
                            {{ scope.row.glasswidthmm }}*{{ scope.row.glassheightmm }}
                        </template>
                    </el-table-column>
@@ -397,7 +397,10 @@
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible3" :title="$t('Cage Details')" top="5vh">
            <el-table :data="this.cageinfo" :height="700" border style="width: 100%;overflow: auto;">
            <el-input style="width:15%;" :placeholder="$t('Enter the glass barcode')" v-model="cageglassid"></el-input>
            <el-button type="primary" @click="showcageinfo(1)">{{ $t('Query') }}</el-button>
            <el-table :data="cageinfo.slice((currentPages - 1) * pagesizes, currentPages * pagesizes)" :height="700" border
                style="width: 100%;overflow: auto;">
                <el-table-column :width="90" prop="cage" :label="$t('Cage No')"></el-table-column>
                <el-table-column :width="90" prop="cell" :label="$t('Slot No')"></el-table-column>
                <el-table-column :width="55" prop="tier" :label="$t('The Side')"></el-table-column>
@@ -408,7 +411,8 @@
                <el-table-column :width="100" prop="state" :label="$t('State')">
                    <template slot-scope='scope'>
                        {{
                            scope.row.state == 1 ? $t('Normal') : scope.row.state == 2 ? $t('Entering') : scope.row.state == 3 ? $t('Outing') : ""
                            scope.row.state == 1 ? $t('Normal') : scope.row.state == 2 ? $t('Entering') : scope.row.state == 3 ?
                                $t('Outing') : ""
                        }}
                    </template>
                </el-table-column>
@@ -434,6 +438,13 @@
                    </template>
                </el-table-column>
            </el-table>
            <el-pagination :style="'margin-top:-2px'" @size-change="handleSizeChanges"
                @current-change="handleCurrentChanges" :pager-count="7" :current-page="currentPages"
                :page-sizes="[21, 42, 84, 420]" :page-size="pagesizes" layout="total, sizes, prev, pager, next, jumper"
                :total="cageinfo.length > 0 ? cageinfo.length : null" background style="float: right; margin-top: 20px">
            </el-pagination>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible4" :title="$t('OrderInfo')" top="5vh">
@@ -458,10 +469,10 @@
        <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>
                    <label for="">{{ $t('Upper film position') }}</label>
                    <el-button type="primary" @click="isConfirmState()">
                        {{ this.isConfirm == true ? "Allow" : "Not Allow" }}</el-button>
                    <label for="">{{ $t('Scan Code Point') }}</label>
                </div>
                <div style="display: flex;justify-content: space-around;height: 40px;">
                    <label for="">{{ $t('current Information') }}</label>
@@ -586,33 +597,41 @@
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible6" :title="$t('Production queue')" top="5vh">
            <el-button type="primary" @click="showform7()">{{ $t('Increase') }}</el-button>
            <el-button type="primary" @click="isAllowQueueState()">{{ this.isAllowQueue == true ? $t('Stop') : $t('Start')
            <!-- <el-button type="primary" @click="showform7()">{{ $t('Increase') }}</el-button> -->
            <el-button type="primary" @click="isAllowQueueState()">{{ this.isAllowQueue == true ? $t('Start') : $t('Stop')
            }}</el-button>
            <el-table :data="this.OutSlice" :height="700" border style="width: 100%;overflow: auto;">
            <el-table :data="this.OutSlice" :height="700" :span-method="objectSpanMethod" border
                style="width: 100%;overflow: auto;">
                <el-table-column 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="barcode" :label="$t('Frame No')"></el-table-column>
                <el-table-column prop="storageCage.glasswidthmm" :label="$t('Length')"></el-table-column>
                <el-table-column prop="storageCage.glassheightmm" :label="$t('Width')"></el-table-column>
                <el-table-column prop="state" :label="$t('State')">
                    <template slot-scope='scope'>
                        {{ scope.row.state == 0 ? "Waiting" : "Outing" }}
                    </template>
                </el-table-column>
                <el-table-column prop="sequence" :label="$t('Sequence')"></el-table-column>
                <el-table-column prop="position" :label="$t('Position')"></el-table-column>
                <el-table-column prop="barcode" :label="$t('Frame No')"></el-table-column>
                <el-table-column :width="280" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="text" size="small" @click="getTopMove(scope.row, scope.$index)"
                            :disabled="scope.$index == 0">
                            :disabled="(scope.$index == 0 || isAllowQueue == true || scope.row.state == 1)">
                            置顶
                        </el-button>
                        <el-button type="text" size="small" @click="getUpMove(scope.row, scope.$index)"
                            :disabled="scope.$index == 0">
                            :disabled="(scope.$index == 0 || isAllowQueue == true || scope.row.state == 1)">
                            上移
                        </el-button>
                        <el-button type="text" size="small" @click="getDownMove(scope.row, scope.$index)"
                            :disabled="OutSlice.length - 1 == scope.$index">下移
                            :disabled="(OutSlice.length - 1 == scope.$index || isAllowQueue == true || scope.row.state == 1)">下移
                        </el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            @click="deleteproductionqueueglass(scope.row.id)">{{ $t('Delete') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" :disabled="isAllowQueue"
                            @click="deleteproductionqueueglass(scope.row.barcode)">{{ $t('Delete') }}</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -664,7 +683,7 @@
import {
    home, home2, InsertOrder, Addglassid, UpdateTask, SelectAlarmmgInfo, SelectCageInfo, DeleteByGlassID, OutByGlassID, Loadcarlist,
    SelectPassword, SelectGlassByGlassID, Disabled, Inglassid, SelectGlass, InsertQueueGlassId, UpdateQueueState, DeleteQueueGlass, SelectGlassNo,
    SelectAluminumFrameInfoById, SelectProductionqueue, DeleteProductionQueueGlass, AddOutSliceS, isAllowQueues
    SelectAluminumFrameInfoById, DeleteProductionQueueGlass, AddOutSliceS, isAllowQueues, isConfirmStates
} from "../../api/home";
@@ -714,6 +733,7 @@
            glassid: "",
            glassid1: "",
            glassid2: "",
            cageglassid: "",
            url: "../../img/bigcar01.png",
            car1: 145,
            car2: 210,
@@ -733,10 +753,17 @@
            currentPage: 1,  //默认初始页
            pagesize: 15,    //每页默认显示的数据
            pageCount: 0,
            currentPages: 1,  //默认初始页
            pagesizes: 21,    //每页默认显示的数据
            pageCounts: 0,
            OutSlice: [],
            AluminumFrame: [],
            framebarcode: "",
            isAllowQueue: true
            isAllowQueue: true,
            FrameNoFlag: "",
            isConfirm: true
        };
    },
    created() {
@@ -779,17 +806,28 @@
                    this.tasklist1 = obj.tasklist1[0];
                    this.tasklist2 = obj.tasklist2[0];
                    this.alarm = obj.alarmmg[0];
                    //铝框id提示
                    this.isAllowQueue = obj.isAllowQueue;
                    //是否允许出片
                    this.isAllowQueue = obj.isAllowQueue[0];
                    //出片队列
                    this.OutSlice = obj.listoutslice[0];
                    if (this.isAllowQueue == true) {
                        this.OutSlice = obj.listoutslice[0];
                    }
                    this.loadglassheight = obj.loadglassheight;
                    if (obj.zhuangtai != null) {
                        this.zhuangtai = obj.zhuangtai[0];
                    }
                    if (this.dialogFormVisible7 == true) {
                        this.showform7();
                    }
                    // if (this.dialogFormVisible7 == true) {
                    //     this.showform7();
                    // } else {
                    //     if (obj.FrameNo != null && obj.FrameNo != "") {
                    //         this.framebarcode = obj.FrameNo[0];
                    //         this.showform7();
                    //         this.addoutslice();
                    //     }
                    // }
                    if (obj.form2 != null && obj.form2 != "") {
                        this.form2 = obj.form2[0];
                    } else {
@@ -801,35 +839,24 @@
                    } else {
                        this.form3 = {};
                    }
                    this.isConfirm = obj.isConfirm[0];
                    if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 0) {
                        this.form5 = obj.form3[0];
                        this.showform3();
                        if (this.form5.glassheight < 380 || this.form5.glasswidth < 390 || this.form5.glassheight > 1810 || this.form5.glasswidth > 2760) {
                            if (this.disabled1 == false) {
                                this.disabled1 = true;
                                this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            this.disabled1 = false;
                        }
                        this.Sizerange(this.form5);
                    } else {
                        if (this.form5.glassheight < 380 || this.form5.glasswidth < 390 || this.form5.glassheight > 1810 || this.form5.glasswidth > 2760) {
                            if (this.disabled1 == false) {
                                this.disabled1 = true;
                                // this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            this.disabled1 = false;
                        }
                        this.Sizerange(this.form5);
                    }
                    //if (obj.dbconnected == "false") {
                    this.text = this.$t('DataBase Connection failed');
                    // }
                    if (obj.dbconnected == "false") {
                        this.text = this.$t('DataBase Connection failed');
                    }
                    if (this.dialogFormVisible3 == true) {
                        SelectCageInfo(this.cage).then(res => {
                        SelectCageInfo(this.cageglassid).then(res => {
                            this.cageinfo = res.data.cageinfo;
                        });
                    }
                    this.$forceUpdate();
@@ -971,20 +998,14 @@
        },
        //获取扫码位和上片位数据
        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'));
                        if (this.form4.glassheight < 380 || this.form4.glasswidth < 390 || this.form4.glassheight > 1810 || this.form4.glasswidth > 2760) {
                            if (this.disabled == false) {
                                this.disabled = true;
                                this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            this.disabled = false;
                        }
                        this.Sizerange(this.form4);
                    } else {
                        this.$message.error(this.$t('There is no such glass'));
                    }
@@ -1002,14 +1023,7 @@
                    if (res.data.form != null) {
                        this.form5 = res.data.form;
                        this.$message.success(this.$t('query was successful'));
                        if (this.form5.glassheight < 380 || this.form5.glasswidth < 390 || this.form5.glassheight > 1810 || this.form5.glasswidth > 2760) {
                            if (this.disabled1 == false) {
                                this.disabled1 = true;
                                this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            this.disabled1 = false;
                        }
                        this.Sizerange(this.form5);
                    } else {
                        this.$message.error(this.$t('There is no such glass'));
                    }
@@ -1038,16 +1052,14 @@
            this.dialogFormVisible4 = true;
        },
        showform6() {
            SelectProductionqueue().then(res => {
                this.OutSlice = res.data.listoutslice;
            });
            this.dialogFormVisible6 = true;
        },
        showform7() {
            //查询铝框id对应玻璃信息
            SelectAluminumFrameInfoById(this.framebarcode).then(res => {
                this.AluminumFrame = res.data.listAluminumFrame;
                this.AluminumFrame.sort(function (x, y) {
                    if(x['storageCage']!=null&&y['storageCage']!=null){
                    if (x['storageCage'] != null && y['storageCage'] != null) {
                        return y['storageCage']['tier'] - x['storageCage']['tier'];
                    }
                });
@@ -1061,7 +1073,7 @@
                    item.FrameNo = this.framebarcode;
                });
            });
            this.dialogFormVisible7 = true;
            // this.dialogFormVisible7 = true;
        },
        //取消操作时关闭页面
        cancel() {
@@ -1109,9 +1121,11 @@
        },
        //显示理片笼详情信息
        showcageinfo(cage) {
            this.cage = cage;
            cage = this.cageglassid;
            SelectCageInfo(cage).then(res => {
                this.cageinfo = res.data.cageinfo;
                this.currentPages = 1;
                this.dialogFormVisible3 = true;
            });
        },
@@ -1262,6 +1276,14 @@
        handleCurrentChange: function (currentPage) {
            this.currentPage = currentPage;
        },
        //改变每页容纳的数据量
        handleSizeChanges: function (size) {
            this.pagesizes = size;
        },
        //切换页码
        handleCurrentChanges: function (currentPage) {
            this.currentPages = currentPage;
        },
        //手动添加扫码位玻璃
        InsertQueueGlass(parameter) {
            if (parameter == 1 && this.form5.glassId != "") {
@@ -1299,12 +1321,14 @@
            if (parameter == 1) {
                DeleteQueueGlass(1).then(res => {
                    if (res.data.message == 200) {
                        this.form2 = {};
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
            } else {
                DeleteQueueGlass(2).then(res => {
                    if (res.data.message == 200) {
                        this.form3 = {};
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
@@ -1322,9 +1346,6 @@
            this.AluminumFrame.forEach(item => { item.barcode = glassid; item.isCheck = isChecked })
        },
        addoutslice() {
            // var AluminumFrames1=this.AluminumFrame.map(item=>{return item.barcode});
            // var AluminumFrames2=this.AluminumFrame.map(item=>{return item.isCheck});
            // var AluminumFrames3=this.AluminumFrame.map(item=>{return item.Flip});
            var dats_ = new Array();
            this.AluminumFrame.forEach(item => {
                var dats2_ = new Array();
@@ -1342,26 +1363,203 @@
                }
            });
        }, getTopMove(row, index) {
            this.OutSlice.splice(index, 1)
            this.OutSlice.unshift(row)
            let Sequence = [];
            this.OutSlice.forEach(item => {
                Sequence.push(item.sequence);
            });
            let OutSliceArr = [];
            OutSliceArr.push(row);
            let belowstop = 1;
            let hereframeno = this.OutSlice[index].barcode;
            let upperstop = 0;
            for (let i = index + 1; i < this.OutSlice.length; i++) {
                if (this.OutSlice[i].barcode == hereframeno) {
                    OutSliceArr.push(this.OutSlice[i]);
                    belowstop += 1;
                } else {
                    break;
                }
            }
            this.OutSlice.splice(index, belowstop);
            for (let i = 0; i < OutSliceArr.length; i++) {
                this.OutSlice.splice(upperstop, 0, OutSliceArr[i]);
                upperstop += 1;
            }
            this.UpdateSequence(Sequence);
        },
        //上移
        getUpMove(row, index) {
            let arr = this.OutSlice;
            arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1]));
            let Sequence = [];
            this.OutSlice.forEach(item => {
                Sequence.push(item.sequence);
            });
            let OutSliceArr = [];
            OutSliceArr.push(row);
            let belowstop = 1;
            let upperstop = 0;
            let index_x = index - 1;
            let hereframeno = this.OutSlice[index].barcode;
            let upperframeno = this.OutSlice[index_x].barcode;
            for (let i = index + 1; i < this.OutSlice.length; i++) {
                if (this.OutSlice[i].barcode == hereframeno) {
                    OutSliceArr.push(this.OutSlice[i]);
                    belowstop += 1;
                } else {
                    break;
                }
            }
            this.OutSlice.splice(index, belowstop);
            for (let i = index_x; i >= 0; i--) {
                if (this.OutSlice[i].barcode != upperframeno) {
                    upperstop = i + 1;
                    break;
                }
            }
            for (let i = 0; i < OutSliceArr.length; i++) {
                this.OutSlice.splice(upperstop, 0, OutSliceArr[i]);
                upperstop += 1;
            }
            this.UpdateSequence(Sequence);
        },
        //下移
        getDownMove(row, index) {
            let arr = this.OutSlice;
            arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index]));
            let Sequence = [];
            this.OutSlice.forEach(item => {
                Sequence.push(item.sequence);
            });
            let OutSliceArr = [];
            OutSliceArr.push(row);
            let belowstop = 1;
            let upperstop = this.OutSlice.length - 1;
            let flag = 0;
            let hereframeno = this.OutSlice[index].barcode;
            let upperframeno;
            for (let i = index + 1; i < this.OutSlice.length; i++) {
                if (this.OutSlice[i].barcode == hereframeno) {
                    OutSliceArr.push(this.OutSlice[i]);
                    belowstop += 1;
                } else {
                    break;
                }
            }
            this.OutSlice.splice(index, belowstop);
            for (let i = index; i < this.OutSlice.length; i++) {
                if (this.OutSlice[i].barcode != hereframeno && this.OutSlice[i].barcode != upperframeno) {
                    upperframeno = this.OutSlice[i].barcode;
                    flag += 1;
                    upperstop = i;
                }
                if (i == this.OutSlice.length - 1 && flag == 1) {
                    flag += 1;
                    upperstop = i + 1;
                }
                if (flag == 2) {
                    break;
                }
            }
            for (let i = 0; i < OutSliceArr.length; i++) {
                this.OutSlice.splice(upperstop, 0, OutSliceArr[i]);
                upperstop += 1;
            }
            this.UpdateSequence(Sequence);
        },
        UpdateSequence(Sequence) {
            let i = 0;
            this.OutSlice.forEach(item => {
                item.sequence = Sequence[i];
                i++;
            });
        },
        //切换出片队列状态
        isAllowQueueState() {
            isAllowQueues(!this.isAllowQueue).then(res => {
            isAllowQueues(!this.isAllowQueue, this.OutSlice).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            })
        },
        //切换上片是否需要确认玻璃信息
        isConfirmState() {
            isConfirmStates(!this.isConfirm).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        }
        ,
        arraySpanMethod({ row, column, rowIndex, columnIndex }) {
            console.log(row, column);
            if (rowIndex % 2 === 0) {
                if (columnIndex === 0) {
                    return [1, 2];
                } else if (columnIndex === 1) {
                    return [0, 0];
                }
            }
        },
        //合并行
        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
            // console.log(row, column, "ss");
            row = column;
            column = row
            let arrOutSlice = this.OutSlice;
            let rowspans = 0;
            let colspans = 1;
            let barcode = arrOutSlice[rowIndex].barcode;
            let barcode2;
            if (rowIndex != 0) {
                barcode2 = arrOutSlice[rowIndex - 1].barcode;
            }
            if (columnIndex === 9) {
                if (barcode != barcode2) {
                    // this.FrameNoFlag = barcode;
                    for (let i = rowIndex; i < this.OutSlice.length; i++) {
                        if (barcode == arrOutSlice[i].barcode) {
                            barcode = arrOutSlice[i].barcode;
                            rowspans += 1;
                        } else {
                            break;
                        }
                    }
                    return {
                        rowspan: rowspans,
                        colspan: colspans
                    };
                } else {
                    return {
                        rowspan: 0,
                        colspan: 0
                    };
                }
            }
        },
        Sizerange(Glass) {
            if ((Glass.glassheight < 380 || Glass.glasswidth < 390 || Glass.glassheight > 1810 || Glass.glasswidth > 2760) || (Glass.glassheight < 390 || Glass.glasswidth < 380 || Glass.glassheight > 2760 || Glass.glasswidth > 1810)) {
                if (this.disabled == false) {
                    this.disabled = true;
                    this.$message.error(this.$t('The glass size is not within the range'));
                    this.$confirm(this.$t('The glass size is not within the range'), this.$t('confirm'), {
                        confirmwidth: 7000,
                        height: 8000,
                        // confirmButtonText: this.$t('Yes'),
                        // cancelButtonText: this.$t('No'),
                        type: 'warning'
                    }).then(() => {
                        this.$message.success(this.$t('Operation successful'));
                    }).catch(() => {
                        this.$message({
                            type: 'info',
                            message: this.$t('Operation canceled')
                        });
                    });
                }
                this.disabled1 = true;
            } else {
                this.disabled1 = false;
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -1,7 +1,9 @@
package com.example.springboot.component;
import cn.hutool.json.JSONObject;
import cn.hutool.poi.excel.sax.handler.MapRowHandler;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +15,8 @@
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.SpianService;
public class Plchome extends Thread {
@@ -20,11 +24,15 @@
    @Autowired
    private HomeMapper homeMapper;
    private SpianMapper spianMapper;
    private SpianService spianService;
    private North_Glass_Buffer1Service north_Glass_Buffer1Service;
    private JdbcConnections dbserve;
    //出片队列是否允许出片
    public static Boolean isAllowQueue=true;
    public static String FrameNo="";
    //铝框id
    public static String FrameNo;
    //是否需要手动确认玻璃
    public static Boolean isConfirm=true;
    // public static Map b=new HashMap<>();
    // b.put()
    @Override
@@ -40,6 +48,8 @@
            // 注入mapper
            homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class);
            spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
            spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
            north_Glass_Buffer1Service = WebSocketServer.applicationContext.getBean(North_Glass_Buffer1Service.class);
            // 笼子使用情况
            List<StorageCage> tableData = homeMapper.selectAll();
            jsonObject.append("tableData", tableData);
@@ -101,11 +111,51 @@
            jsonObject.append("listoutslice", listoutslice);
            //获取当前出片队列状态
            jsonObject.append("isAllowQueue",Plchome.isAllowQueue);
            //获取铝框idDB106.DBW64
            // List<Short> frameno = S7control.getinstance().ReadWord("DB106.24", 1);
            //获取铝框idDB106.DBW64
            // String frameno=spianService.queGlassid("DB106.24",14).toString();
            // if(frameno!=Plchome.FrameNo){
            //     Plchome.FrameNo=frameno;
            // }
            // Plchome.FrameNo="123";
            // try {
            //     north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            // } catch (SQLException e) {
            //     // TODO Auto-generated catch block
            //     e.printStackTrace();
            // }
            //是否需要人工确认上片玻璃
            jsonObject.append("isConfirm", isConfirm);
            //铝框线交互
            // //铝框id请求字
            // List<Short> framerequest = S7control.getinstance().ReadWord("铝框id请求字地址", 1);
            // if(framerequest!=null){
            //     //铝框id
            //     String franmeno= spianService.queGlassid("铝框id地址", 14).toString();
            //     String position;
            //         try {
            //             position=dbserve.SelectPositionByFrameBarcode(franmeno);
            //         } catch (SQLException e) {
            //             // TODO Auto-generated catch block
            //             position="0";
            //             e.printStackTrace();
            //         }
            //     Short send;
            //     if(position=="0"){
            //         send=0;
            //     }else{
            //         send=1;
            //     }
            //     S7control.getinstance().WriteWord("铝框翻转发送地址", (short)send);
            // }
            
            dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
            boolean dbconnected = false;
            try {
@@ -122,6 +172,8 @@
                sendwServer.sendMessage(jsonObject.toString());
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -6,11 +6,14 @@
import java.util.Map;
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.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.SpianService;
import com.example.springboot.common.Result;
import com.example.springboot.component.Plchome;
@@ -38,6 +41,12 @@
  @Autowired
  SpianMapper spianMapper;
  @Autowired
  OutSliceServive outSliceServive;
  @Autowired
  North_Glass_Buffer1Service north_Glass_Buffer1Service;
  @Autowired
  private JdbcConnections jdbcConnections;
@@ -157,8 +166,10 @@
    if (result == null) {
      north_glass_buffer1 north_glass_buffer1 = jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(glassid, "", "");
      String flip = jdbcConnections.SelectFlipByFrameBarcode(north_glass_buffer1.getFrameBarcode());
      String position = jdbcConnections.SelectPositionByFrameBarcode(north_glass_buffer1.getFrameBarcode());
      int sequence=homeMapper.SelectMaxSquence();
      homeMapper.AddOutSliceS(glassid, flip, north_glass_buffer1.getFrameBarcode(),
          north_glass_buffer1.getglasslengthmm().toString(), north_glass_buffer1.getglassheightmm().toString());
          north_glass_buffer1.getglasslengthmm().toString(), north_glass_buffer1.getglassheightmm().toString(),sequence,position);
      map.put("message2", "200");
    } else {
      map.put("message2", "500");
@@ -273,12 +284,8 @@
  // 根据铝框id获取对应玻璃信息
  @PostMapping("/SelectAluminumFrameInfoById")
  public Result SelectAluminumFrameInfoById(String FrameBarcode) throws SQLException {
    List<north_glass_buffer1> listAluminumFrame = jdbcConnections.SelectGlassByGlassIdOrderIdFrameIdss(FrameBarcode);
    String flip = jdbcConnections.SelectFlipByFrameBarcode(FrameBarcode);
    for (north_glass_buffer1 north_glass_buffer1 : listAluminumFrame) {
      north_glass_buffer1.setstorageCage(homeMapper.SelectStorageGlassById(north_glass_buffer1.getbarcode()));
      north_glass_buffer1.setOut_slice(homeMapper.SelectQueueByglassid(north_glass_buffer1.getbarcode()));
    }
    List<north_glass_buffer1> listAluminumFrame=north_Glass_Buffer1Service.SelectAluminumFrameInfoById(FrameBarcode);
    Map<String, Object> map = new HashMap<>();
    map.put("listAluminumFrame", listAluminumFrame);
    map.put("flip", flip);
@@ -303,21 +310,17 @@
  // 根据玻璃id删除出片队列玻璃
  @PostMapping("/DeleteProductionQueueGlass")
  public Result DeleteProductionQueueGlass(Short id) {
    homeMapper.DeleteProductionQueueGlass(id);
  public Result DeleteProductionQueueGlass(String FrameNo) {
    homeMapper.DeleteProductionQueueGlass(FrameNo);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
  }
  // 添加出片
  // 添加铝框id对应玻璃到出片队列
  @PostMapping("/AddOutSliceS")
  public Result AddOutSliceS(@RequestBody String[][] AluminumFrames) {
    for (String[] item : AluminumFrames) {
      if (item[1] == "true") {
        homeMapper.AddOutSliceS(item[0], item[2], item[3], item[4], item[5]);
      }
    }
    outSliceServive.AddOutSliceS(AluminumFrames);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
@@ -326,14 +329,21 @@
  // 修改出片队列状态与出片队列调序
  @PostMapping("/isAllowQueues")
  public Result isAllowQueues(Boolean isAllowQueue, @RequestBody List<Out_slice> out_slice) {
    Plchome.isAllowQueue = isAllowQueue;
    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("/isConfirmStates")
  public Result isConfirmStates(Boolean isConfirmStates) {
    Plchome.isConfirm = isConfirmStates;
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
springboot-vue3/src/main/java/com/example/springboot/entity/Out_slice.java
@@ -9,6 +9,15 @@
    private int state;
    private String time;
    private int sequence;
    private String position;
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    private north_glass_buffer1 north_glass_buffer1s;
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -73,7 +73,7 @@
  @Select("select * from storage_cage where position(#{cage} in ifnull(glass_id,\"\"))")
  List<StorageCage> SelectCageInfo(String cage);
  @Update("update storage_cage set state=0,glass_id=null,order_id=null,glasswidth=null,glassheight=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 where glass_id=#{glassid}")
  void DeleteByGlassID(String glassid);
  //查询小车位置
@@ -122,7 +122,7 @@
  void UpdateQueueState();
  //手动添加扫码位玻璃
  @Select("update queue set glassid='',state=0 where id=#{id}")
  @Select("update queue set glassid=null,orderid=null,listid=null,boxid=null,glasswidth=null,glassheight=null,glasswidthmm=null,glassheightmm=null,state=0 where id=#{id}")
  void DeleteQueueGlass(String id);
  //查询此订单在理片笼里的玻璃数
@@ -134,7 +134,7 @@
  north_glass_buffer1 SelectBoxNo(String glassid);
  //查询出片队列信息
  @Select("select * from out_slice where state=0 or state=1 order by sequence")
  @Select("select * from out_slice where state=0 or state=1 or state=2 order by sequence")
  List<Out_slice> SelectProductionqueue();
  //根据玻璃id查询笼内玻璃信息
@@ -143,8 +143,8 @@
  //根据玻璃id删除出片队列玻璃
  @Select("update out_slice set state=3 where id=#{id}")
  void DeleteProductionQueueGlass(Short id);
  @Select("update out_slice set state=3 where barcode=#{FrameNo} and (state=0 or state=1 or state=2)")
  void DeleteProductionQueueGlass(String id);
  //根据铝框id查询对应玻璃信息
  @Select("select * from north_glass_buffer1 where FrameBarcode=#{FrameBarcode}")
@@ -152,16 +152,20 @@
  //查询玻璃是否已存在于出片队列
  @Select("select * from out_slice where glassid=#{getbarcode} and (state=0 or state=1)")
  @Select("select * from out_slice where glassid=#{getbarcode} and (state=0 or state=1 or state=2)")
  Out_slice SelectQueueByglassid(String getbarcode);
  //添加出片队列
  @Select("INSERT INTO out_slice( `glassId`, `barcode`, `glasswidth`, `glassheight`, `state`, `flip`) VALUES ( #{glassid}, #{FrameNo}, #{glasslengthMm}, #{glassheightMm}, 0, #{flip});")
  void AddOutSliceS(String glassid, String flip, String FrameNo, String glasslengthMm, String glassheightMm);
  @Select("INSERT INTO out_slice( `glassId`, `barcode`, `glasswidth`, `glassheight`, `state`, `flip`, `sequence`, `time` ,`position`) VALUES ( #{glassid}, #{FrameNo}, #{glasslengthMm}, #{glassheightMm}, 0, #{flip}, #{sequence}, now(), #{position});")
  void AddOutSliceS(String glassid, String flip, String FrameNo, String glasslengthMm, String glassheightMm, int sequence, String position);
  //出片队列调序
  @Select("update out_slice set sequence=#{sequence} where glassid=#{glassId}")
  void UpdateOutSliceSequence(String glassId,int sequence);
  //查询出片队列最大顺序
  @Select("select ifnull(max(sequence),0)+1 from out_slice ")
  Short SelectMaxSquence();
}
springboot-vue3/src/main/java/com/example/springboot/service/JdbcConnections.java
@@ -10,7 +10,6 @@
import org.springframework.stereotype.Component;
import com.example.springboot.entity.Glass;
import com.example.springboot.entity.Queue;
import com.example.springboot.entity.north_glass_buffer1;
@Component
@@ -174,7 +173,7 @@
         return glass;
    }
    //根据铝框id查询是否翻转
    //根据铝框id查询l铝框是否翻转
    public String SelectFlipByFrameBarcode(String frameBarcode) throws SQLException {
        conn = getConn();
        // north_glass_buffer1 glass=new north_glass_buffer1();
@@ -190,6 +189,21 @@
        //  conn.close();
         return flip;
    }
    //根据铝框id查询是否铝框摆放
    public String SelectPositionByFrameBarcode(String frameBarcode) throws SQLException {
           conn = getConn();
        // north_glass_buffer1 glass=new north_glass_buffer1();
        String position="";
        String sql1 = "select * from north_glass_buffer1_frames where Barcode=? limit 1";
         ps = conn.prepareStatement(sql1);
         ps.setString(1, frameBarcode);
         rs= ps.executeQuery();
         while (rs.next()) {
            position=rs.getString("position");
         }
        //  conn.close();
         return position;
    }
    
    /**
     * 1. 加载驱动
@@ -222,6 +236,8 @@
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/North_Glass_Buffer1Service.java
New file
@@ -0,0 +1,44 @@
package com.example.springboot.service;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.mapper.HomeMapper;
@Service
public class North_Glass_Buffer1Service {
    @Autowired
    private HomeMapper homeMapper;
    @Autowired
    private JdbcConnections jdbcConnections;
    public List<north_glass_buffer1> SelectAluminumFrameInfoById(String FrameBarcode) throws SQLException {
        List<north_glass_buffer1> listAluminumFrame = jdbcConnections
                .SelectGlassByGlassIdOrderIdFrameIdss(FrameBarcode);
        for (north_glass_buffer1 north_glass_buffer1 : listAluminumFrame) {
            north_glass_buffer1.setstorageCage(homeMapper.SelectStorageGlassById(north_glass_buffer1.getbarcode()));
            north_glass_buffer1.setOut_slice(homeMapper.SelectQueueByglassid(north_glass_buffer1.getbarcode()));
        }
        return listAluminumFrame;
    }
    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();
        for (north_glass_buffer1 north_glass_buffer1 : north_glass_buffer1s) {
            if(north_glass_buffer1.getstorageCage()!=null&&north_glass_buffer1.getOut_slice()==null){
                homeMapper.AddOutSliceS(north_glass_buffer1.getbarcode(), flip, FrameBarcode, north_glass_buffer1.getglasslengthmm().toString(), north_glass_buffer1.getglassheightmm().toString(), sequence, position);
                sequence+=1;
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/OutSlice.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java
New file
@@ -0,0 +1,35 @@
package com.example.springboot.service;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.springboot.mapper.HomeMapper;
@Service
public class OutSliceServive {
  @Autowired
  private HomeMapper homeMapper;
  @Autowired
  private JdbcConnections jdbcConnections;
  public void AddOutSliceS(String[][] AluminumFrames) throws SQLException {
    int sequence = homeMapper.SelectMaxSquence();
    // 添加到数据库
    for (String[] item : AluminumFrames) {
      if (item[1] == "true") {
        String position = jdbcConnections.SelectPositionByFrameBarcode(item[3]);
        homeMapper.AddOutSliceS(item[0], item[2], item[3], item[4], item[5], sequence, position);
        sequence += 1;
      }
    }
  }
}