ZengTao
2024-03-18 f819aa0addac06d14f68526976a960c485af4cca
添加主页面功能(笼子,出片任务)
13个文件已修改
820 ■■■■ 已修改文件
Albania_Mes-ui/src/api/home.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/lang/locales/en-US.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/views/home/index.vue 437 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/FlowCard.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/GlassInfo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/StorageCage.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/StorageTask.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/flowcard.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/glassinfo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/api/home.js
@@ -294,3 +294,60 @@
    })
}
export function UpdateStroageCageByCell(cell,num) {
    return request({
        url: '/home/UpdateStroageCageByCell?cell='+cell+'&num='+num,
        method: 'post',
        data:""
    })
}
export function FinishTask(tasktype,id) {
    return request({
        url: '/home/FinishTask?tasktype='+tasktype+'&id='+id,
        method: 'post',
        data:""
    })
}
export function SelectGlassInfo(width,height,thickness,films) {
    return request({
        url: '/home/SelectGlassInfo?width='+width+'&height='+height+'&thickness='+thickness+'&films='+films,
        method: 'post',
        data:""
    })
}
export function StorageCageAddGlass(cell,data) {
    return request({
        url: '/home/StorageCageAddGlass?cell='+cell,
        method: 'post',
        data
    })
}
export function ClaimTasks(flowcard,state) {
    return request({
        url: '/home/ClaimTasks?flowcard='+flowcard+'&state='+state,
        method: 'post',
        data:""
    })
}
export function ModeChange(flowcard,method) {
    return request({
        url: '/home/ModeChange?flowcard='+flowcard+'&method='+method,
        method: 'post',
        data:""
    })
}
export function UpdateQueue(data) {
    return request({
        url: '/home/UpdateQueue',
        method: 'post',
        data
    })
}
Albania_Mes-ui/src/lang/locales/en-US.json
@@ -1,4 +1,23 @@
{
  "Flowcard":"Flowcard",
  "Glasstype":"Glasstype",
  "Mode Change":"Mode Change",
  "Start Task":"Start Task",
  "Stop Task":"Stop Task",
  "No Of Cage":"No Of Cage",
  "Task State":"Task State",
  "Task Method":"Task Method",
  "Task Line":"Task Line",
  "'No Of Cage":"'No Of Cage",
  "Finish No":"Finish No",
  "Mate No":"Mate No",
  "Order":"Order",
  "Select":"Select",
  "GlassType":"GlassType",
  "Films":"Films",
  "StorageCageAdd":"StorageCageAdd",
  "Reduce":"Reduce",
  "number":"number",
  "Import order":"Importorder",
  "Measure":"Measure",
  "StorageCage":"StorageCage",
Albania_Mes-ui/src/views/home/index.vue
@@ -6,7 +6,7 @@
.occupy {
    height: 100%;
    width: 10%;
    width: 20%;
    background-color: white;
    margin: 0px 8px 0px 8px;
    border: 1px #EBEEF5 solid;
@@ -64,15 +64,16 @@
}
.blocks {
    background-image: url('../../img/xmjc.png');
    margin: 0 auto;
    background-image: url('../../img/device.png');
    /* margin: 0 auto; */
    /* clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); */
    background-repeat: no-repeat;
    background-attachment: local;
    min-height: 55vh;
    width: 1400px;
    max-width: 94vw;
    background-size: 1200px 510px;
    margin: 0 auto;
    min-height: 118vh;
    width: 1124px;
    max-width: 57%;
    background-size: 1050px 1400px;
    margin-top: -280px;
    /* width: 1660px;
    max-width: 100vw;
    background-size: 1660px 560px; */
@@ -198,12 +199,13 @@
    font-size: 25px;
}
/*
@media screen and (min-width: 1900px) {
    .blocks {
        transform: scale(1.5, 1.05);
        width: 1210px;
    }
}
} */
.el-message-box__btns {
    padding: 0px 15px 0;
@@ -256,115 +258,200 @@
                <el-button type="primary" @click="showform(2)" :disabled="SoftEmergencyStopState"
                    :class="SoftEmergencyStopState == true ? 'hide' : ''">
                    {{ $t('Measure') }}</el-button>
                <el-button type="primary" @click="showform(2)" :disabled="SoftEmergencyStopState"
                <el-button type="primary" @click="showform(3)" :disabled="SoftEmergencyStopState"
                    :class="SoftEmergencyStopState == true ? 'hide' : ''">
                    {{ $t('StorageCage') }}</el-button>
                <el-button type="primary" @click="showform(2)" :disabled="SoftEmergencyStopState"
                <el-button type="primary" @click="showform(4)" :disabled="SoftEmergencyStopState"
                    :class="SoftEmergencyStopState == true ? 'hide' : ''">
                    {{ $t('Task queue') }}</el-button>
            </div>
            <div>
                <el-table :data="this.tasklist1" border style="width: 100%">
                    <el-table-column :min-width="180" prop="glassId" :label="$t('Outfeed glass barcode')"></el-table-column>
                    <el-table-column :min-width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :min-width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :min-width="130" prop="orderId" :label="$t('Order No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('List No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('Box No')"></el-table-column>
                    <el-table-column :min-width="150" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.glasswidthmm }}*{{ scope.row.glassheightmm }}
                        </template>
                    </el-table-column>
                    <el-table-column :label="$t('Terminate Task')">
                        <template slot-scope='scope'>
                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                @click="endtask(1, scope.row.glassId, scope.row.cell)">{{ $t('Terminate Task')
                                }}</el-button>
                        </template>
                    </el-table-column>
                </el-table>
                <el-table :data="this.tasklist2" border style="width: 100%">
                    <el-table-column :min-width="180" prop="glassId" :label="$t('Infeed glass barcode')"></el-table-column>
                    <el-table-column :min-width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :min-width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :min-width="130" prop="orderId" :label="$t('Order No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('List No')"></el-table-column>
                    <el-table-column prop="orderId" :label="$t('Box No')"></el-table-column>
                    <el-table-column :min-width="150" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.glasswidthmm }}*{{ scope.row.glassheightmm }}
                        </template>
                    </el-table-column>
            <div style="display: flex;align-items: center;">
                <div class="blocks" style="position: relative;width: 100%;">
                    <el-table-column :label="$t('Terminate Task')">
                        <template slot-scope='scope'>
                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                @click="endtask(0, scope.row.glassId, scope.row.cell)">{{ $t('Terminate Task')
                                }}</el-button>
                        </template>
                    </el-table-column>
                </el-table>
            </div>
            <div style="padding: 10px;display: flex;height:85px;">
                <div v-for="item in tableData" :key="item['cageno']" class="occupy">
                    <el-col style="text-align:left;font-weight: bold;">#{{ item['cage'] }}</el-col>
                    <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">
                        <span class="biao">{{ $t('Usage') }}</span><span class="zhi">{{ item['cell'] }}%</span>
                    </el-col>
                    <hr style="width:80%;margin: 0 auto;" />
                    <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">
                        <span class="biao">{{ $t('Space (Pieces)') }}</span><span class="zhi">{{ item['state'] }}</span>
                    </el-col>
                </div>
                <div>
                    <div style="padding: 10px;display: flex;height:100px;">
                        <div v-for="item in tableData" :key="item['cageno']" class="occupy">
                            <el-col style="text-align:left;font-weight: bold;">#{{ item['cage'] }}</el-col>
                            <el-col
                                style="text-align:left;display:flex;justify-content: space-between;align-items: center;">
                                <span class="biao">{{ $t('Usage') }}</span><span class="zhi">{{ item['cell'] }}%</span>
                            </el-col>
                            <hr style="width:80%;margin: 0 auto;" />
                            <el-col
                                style="text-align:left;display:flex;justify-content: space-between;align-items: center;">
                                <span class="biao">{{ $t('Space (Pieces)') }}</span><span class="zhi">{{ item['state']
                                    }}</span>
                            </el-col>
                        </div>
                    </div>
                    <el-table :data="this.tasklist1" border style="width: 700px;">
                        <el-table-column prop="glasstype" :label="$t('Glasstype')"></el-table-column>
                        <el-table-column prop="storageCage.cage" :label="$t('Cage No')"></el-table-column>
                        <el-table-column prop="storageCage.cell" :label="$t('Slot No')"></el-table-column>
                        <el-table-column prop="storageCage.glassWidth" :label="$t('Width')"></el-table-column>
                        <el-table-column prop="storageCage.glassHeight" :label="$t('Height')"></el-table-column>
                        <el-table-column prop="storageCage.thickness" :label="$t('Thickness')"></el-table-column>
                        <el-table-column prop="storageCage.films" :label="$t('Films')"></el-table-column>
                        <el-table-column :min-width="100" :label="$t('Terminate Task')">
                            <template slot-scope='scope'>
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="FinishTask(0, scope.row.id)">{{ $t('Complete') }}</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                    <el-table :data="this.tasklist2" border style="width: 100%">
                        <el-table-column prop="glassId" :label="$t('Glasstype')"></el-table-column>
                        <el-table-column prop="storageCage.cage" :label="$t('Cage No')"></el-table-column>
                        <el-table-column prop="storageCage.cell" :label="$t('Slot No')"></el-table-column>
                        <el-table-column prop="storageCage.glassWidth" :label="$t('Width')"></el-table-column>
                        <el-table-column prop="storageCage.glassHeight" :label="$t('Height')"></el-table-column>
                        <el-table-column prop="storageCage.thickness" :label="$t('Thickness')"></el-table-column>
                        <el-table-column prop="storageCage.films" :label="$t('Films')"></el-table-column>
                        <el-table-column :min-width="100" :label="$t('Terminate Task')">
                            <template slot-scope='scope'>
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="FinishTask(1, scope.row.id)">{{ $t('Complete') }}</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                </div>
            </div>
        </el-main>
        <el-dialog :visible.sync="Importorder" :title="$t('Import order')"
            top="5vh">
        <el-dialog :visible.sync="Importorder" :title="$t('Import order')" top="5vh">
        </el-dialog>
        <el-dialog :visible.sync="Measure" :title="$t('Measure')"
            top="5vh">
        <el-dialog :visible.sync="Measure" :title="$t('Measure')" top="5vh">
        </el-dialog>
        <el-dialog :visible.sync="StorageCage" :title="$t('StorageCage')"
            top="5vh">
        <el-dialog :visible.sync="StorageCage" :title="$t('StorageCage')" top="5vh">
            <el-table :data="this.StorageCageInfo" :height="700" border style="width: 100%;overflow: auto;">
                <el-table-column :min-width="50" prop="cage" :label="$t('Cage No')"></el-table-column>
                <el-table-column :min-width="50" prop="cell" :label="$t('Slot No')"></el-table-column>
                <el-table-column :min-width="145" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column :min-width="80" prop="width" :label="$t('Width')"></el-table-column>
                <el-table-column :min-width="80" prop="height" :label="$t('Height')"></el-table-column>
                <el-table-column :min-width="80" prop="cage" :label="$t('Cage No')"></el-table-column>
                <el-table-column :min-width="80" prop="cell" :label="$t('Slot No')"></el-table-column>
                <el-table-column :min-width="80" prop="glasstype" :label="$t('GlassType')"></el-table-column>
                <el-table-column :min-width="80" prop="glassWidth" :label="$t('Width')"></el-table-column>
                <el-table-column :min-width="80" prop="glassHeight" :label="$t('Height')"></el-table-column>
                <el-table-column :min-width="80" prop="thickness" :label="$t('Thickness')"></el-table-column>
                <el-table-column :min-width="80" prop="number" :label="$t('number')"></el-table-column>
                <el-table-column :min-width="80" prop="width" :label="$t('Width')"></el-table-column>
                <el-table-column :min-width="250" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="scope.row.state == 1 ? false : true"
                            @click="deleteglass(scope.row.glassId, scope.row.state)">{{ $t('Delete') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            @click="UpdateDisabled(scope.row.cage, scope.row.cell, scope.row.disabled == 0 ? 1 : 0)">
                            {{ scope.row.disabled == 0 ? $t('Disable') : $t('Enable') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="scope.row.glassId != null ? true : false"
                            @click="insertglass(scope.row.cage, scope.row.cell, scope.row.tier)">{{ $t('Add')
                            :disabled="(scope.row.width < scope.row.glassWidth + 100 ? true : false)"
                            @click="UpdateStroageCageByCell(scope.row.cell, scope.row.number, 1)">{{ $t('Add')
                            }}
                        </el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="scope.row.number >= 1 ? false : true"
                            @click="UpdateStroageCageByCell(scope.row.cell, scope.row.number, -1)">{{ $t('Reduce')
                            }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="scope.row.number >= 1 ? false : true"
                            @click="UpdateStroageCageByCell(scope.row.cell, scope.row.number, 0)">{{ $t('Delete')
                            }}</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-dialog>
        <el-dialog :visible.sync="Taskqueue" :title="$t('Task queue')"
            top="5vh">
        <el-dialog :visible.sync="Taskqueue" :title="$t('Task queue')" top="5vh">
            <el-table :data="tableData1" style="width: 100%;margin-bottom: 20px;" row-key="id" border lazy
                default-expand-all :tree-props="{ children: 'glassinfo', hasChildren: 'hasChildren' }">
                <el-table-column prop="flowcard" :label="$t('Order')">
                </el-table-column>
                <el-table-column prop="glasstype" :label="$t('GlassType')">
                </el-table-column>
                <el-table-column prop="number" :label="$t('Order No')">
                </el-table-column>
                <el-table-column prop="" :label="$t('No Of Cage')">
                </el-table-column>
                <el-table-column prop="finishnumber" :label="$t('Finish No')">
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mate No')">
                </el-table-column>
                <el-table-column prop="films" :label="$t('Films')">
                </el-table-column>
                <el-table-column prop="thickness" :label="$t('Thickness')">
                </el-table-column>
                <el-table-column prop="width" :label="$t('Width')">
                </el-table-column>
                <el-table-column prop="height" :label="$t('Height')">
                </el-table-column>
                <el-table-column prop="state" :label="$t('Task State')">
                    <template slot-scope='scope'>
                        {{ scope.state == 0 ? $t('Start') : $t('Finished') }}
                    </template>
                </el-table-column>
                <el-table-column prop="method" :label="$t('Task Method')">
                </el-table-column>
                <el-table-column prop="line" :label="$t('Task Line')">
                </el-table-column>
                <el-table-column width="220" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            v-show="scope.row.state >= 0 ? true : false"
                            @click="ClaimTasks(scope.row.flowcard, scope.row.state)">
                            {{ scope.row.status == '0' ? $t('Start Task') : $t('Stop Task') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            v-show="scope.row.state >= 0 ? true : false"
                            @click="ModeChange(scope.row.flowcard, scope.row.method)">
                            {{ $t('Mode Change') }}</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-dialog>
        <el-dialog :visible.sync="StorageCageAdd" :title="$t('StorageCageAdd')" top="5vh" width="80%">
            <div style="display: flex;height: 40px;line-height: 40px;">
                <label for="">{{ $t('Width') }}</label>
                <el-input v-model="StorageCageForm.width" autocomplete="off" style="width:15%;" />
                <label for="">{{ $t('Height') }}</label>
                <el-input v-model="StorageCageForm.height" autocomplete="off" style="width:15%;" />
                <label for="">{{ $t('Thickness') }}</label>
                <el-input v-model="StorageCageForm.thickness" autocomplete="off" style="width:15%;" />
                <label for="">{{ $t('Films') }}</label>
                <el-input v-model="StorageCageForm.films" autocomplete="off" style="width:15%;" />
                <el-button @click="SelectGlassInfo()" type="primary">
                    {{ $t('Select') }}</el-button>
            </div>
            <el-table :data="this.StorageCageAddInfo" :height="700" border style="width: 100%;overflow: auto;">
                <el-table-column prop="flowcard" :label="$t('Flowcard')"></el-table-column>
                <el-table-column prop="glasstype" :label="$t('GlassType')"></el-table-column>
                <el-table-column prop="width" :label="$t('Width')"></el-table-column>
                <el-table-column prop="height" :label="$t('Height')"></el-table-column>
                <el-table-column prop="thickness" :label="$t('Thickness')"></el-table-column>
                <el-table-column prop="films" :label="$t('Films')"></el-table-column>
                <el-table-column :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            @click="StorageCageAddGlass(scope.$index)">
                            {{ $t('Add') }}</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-dialog>
    </el-container>
</template>
<script>
import {
    home, home2,  UpdateTask, SelectCageInfo, DeleteByGlassID,
    SelectPassword,  Disabled,  SelectPermissionByUserName, currentUsername, CompleteQueue,
    isAllowReorderings
    home, home2, SelectCageInfo,
    Disabled, SelectPermissionByUserName, currentUsername, CompleteQueue,
    isAllowReorderings,
    UpdateStroageCageByCell, FinishTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue
} from "../../api/home";
@@ -374,6 +461,8 @@
    name: "Home",
    data() {
        return {
            tableData1:[],
            Measuermode: false,
            confirm1: false,
            confirm2: false,
            insertcage: 0,
@@ -384,12 +473,21 @@
            dialogFormVisible: false,
            dialogFormVisible1: false,
            dialogFormVisible2: false,
            Importorder:false,
            Measure:false,
            StorageCage:false,
            Taskqueue:false,
            StorageCageInfo:[],
            TaskqueueInfo:[],
            Importorder: false,
            Measure: false,
            StorageCage: false,
            Taskqueue: false,
            StorageCageAdd: false,
            StorageCageInfo: [],
            StorageCageForm: {
                width: "",
                height: "",
                thickness: "",
                films: ""
            },
            StorageCageAddInfo: [],
            TaskqueueInfo: [],
            cell: "",
            form1: {},
            form2: {},
            form3: {},
@@ -469,15 +567,15 @@
    }
    ,
    methods: {
        showform(i){
            if(i==1){
                this.Importorder=true;
            }else if(i==2){
                this.Measure=true;
            }else if(i==3){
                this.StorageCage=true;
            }else if(i==4){
                this.Taskqueue=true;
        showform(i) {
            if (i == 1) {
                this.Importorder = true;
            } else if (i == 2) {
                this.Measure = true;
            } else if (i == 3) {
                this.StorageCage = true;
            } else if (i == 4) {
                this.Taskqueue = true;
            }
        },
        init() {
@@ -515,11 +613,12 @@
                    this.cagelist2 = obj.cagelist2[0];
                    this.cagelist3 = obj.cagelist3[0];
                    this.cagelist4 = obj.cagelist4[0];
                    this.tasklist1 = obj.tasklist1[0];
                    this.tasklist2 = obj.tasklist2[0];
                    this.tasklist2 = obj.StoragTaskeTaskFeed[0];
                    this.tasklist1 = obj.StoragTaskeTaskOut[0];
                    console.log(this.tasklist1);
                    this.alarm = obj.alarmmg[0];
                    this.tableData1 = obj.OrderTask[0];
                    //是否允许出片
@@ -538,9 +637,8 @@
                            this.cageinfo = res.data.cageinfo;
                        });
                    }
                    if(obj.StorageCageInfo!=null){
                        this.StorageCageInfo=obj.StorageCageInfo[0];
                        console.log(this.StorageCageInfo);
                    if (obj.StorageCageInfo != null) {
                        this.StorageCageInfo = obj.StorageCageInfo[0];
                    }
                    this.$forceUpdate();
@@ -605,66 +703,71 @@
                this.cagelist3 = res.data.list3;
                this.cagelist4 = res.data.list4;
            });
            //加载确认密码
            SelectPassword().then(res => {
                this.password = res.data.password;
            });
        },
        //结束进/出片任务
        endtask(type, glassid, cell) {
            this.$prompt(this.$t('Are you sure to perform this operation ?'), this.$t('prompt'), {
                inputType: 'password',
                inputPlaceholder: this.$t('Please enter the password'),
                confirmButtonText: this.$t('Yes'),
                cancelButtonText: this.$t('No'),
                type: 'warning'
            }).then(({ value }) => {
                if (this.password == value) {
                    UpdateTask(type, glassid, cell).then(res => {
                        if (res.data.message3 == 200) {
                            this.$message.success(this.$t('Operation successful'));
                        }
                    });
                } else {
                    this.$message.error(this.$t('Password error'));//密码错误
                }
            }).catch(() => {
                this.$message({
                    type: 'info',
                    message: this.$t('Operation canceled')
                });
            });
        },
        //删除理片笼玻璃
        deleteglass(glassid, state) {
            this.$prompt(this.$t('Are you sure to perform this operation ?'), this.$t('prompt'), {
                inputType: 'password',
                inputPlaceholder: this.$t('Please enter the password'),
                confirmButtonText: this.$t('Yes'),
                cancelButtonText: this.$t('No'),
                type: 'warning'
            }).then(({ value }) => {
                if (this.password == value) {
                    if (state == 1) {
                        DeleteByGlassID(glassid).then(res => {
                            if (res.data.message3 == 200) {
                                this.$message.success(this.$t('Operation successful'));
                            }
                        });
                    } else {
                        this.$message.error(this.$t('No delete allowed'));
        //添加理片笼玻璃
        StorageCageAddGlass(index) {
            if (this.Measuermode == true) {
                StorageCageAddGlass(this.cell, this.StorageCageAddInfo[index]).then(res => {
                    if (res.data.code == 200) {
                        this.$message.success(this.$t('Operation successful'));
                    }
                } else {
                    this.$message.error(this.$t('Password error'));//密码错误
                }
            }).catch(() => {
                this.$message({
                    type: 'info',
                    message: this.$t('Operation canceled')
                })
            } else {
                UpdateQueue(this.StorageCageAddInfo[index]).then(res => {
                    if (res.data.code == 200) {
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
            }
        },
        //领取/暂停任务
        ClaimTasks(flowcard, state) {
            console.log(flowcard, state);
            ClaimTasks(flowcard, state).then(res => {
                if (res.data.code == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        //修改出片方式
        ModeChange(flowcard, method) {
            ModeChange(flowcard, method).then(res => {
                if (res.data.code == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        //查询玻璃信息
        SelectGlassInfo() {
            SelectGlassInfo(this.StorageCageForm.width, this.StorageCageForm.height, this.StorageCageForm.thickness, this.StorageCageForm.films).then(res => {
                this.StorageCageAddInfo = res.data.StorageCageAddInfo;
            })
        },
        //完成进/出片任务
        FinishTask(tasktype, id) {
            FinishTask(tasktype, id).then(res => {
                if (res.data.message3 == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        //修改理片笼玻璃信息
        UpdateStroageCageByCell(cell, nownum, num) {
            if (nownum == null && num == 1) {
                this.StorageCageAdd = true;
                this.cell = cell;
            } else {
                if (nownum + num == 0) {
                    num = 0;
                }
                UpdateStroageCageByCell(cell, num).then(res => {
                    if (res.data.message3 == 200) {
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
            }
        },
        //启用//理片笼禁用
        UpdateDisabled(cage, cell, disabled) {
@@ -674,7 +777,7 @@
                }
            });
        },
        //改变每页容纳的数据量
        handleSizeChange: function (size) {
            this.pagesize = size;
@@ -691,7 +794,7 @@
        handleCurrentChanges: function (currentPage) {
            this.currentPages = currentPage;
        },
        //是否允许出片队列排序
        isAllowReorderings() {
            isAllowReorderings(!this.isAllowReordering, this.OutSlice).then(res => {
@@ -728,7 +831,7 @@
                return this.GlassIdList[num].replace(specialChars, "");
            }
        }
    }
}
</script>
</script>
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -1,13 +1,15 @@
package com.example.springboot.component;
import cn.hutool.json.JSONObject;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.example.springboot.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.entity.Flowcard;
import com.example.springboot.entity.Out_slice;
import com.example.springboot.entity.Queue;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.StorageTask;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.mapper.HomeMapper;
@@ -20,8 +22,6 @@
    private OutSliceServive outSliceServive;
    private SpianMapper spianMapper;
    private SpianService spianService;
    private North_Glass_Buffer1Service north_Glass_Buffer1Service;
    private JdbcConnections dbserve;
    // 出片队列是否允许出片
    public static Boolean isAllowQueue = true;
    public static Boolean isAllowReordering = true;
@@ -57,10 +57,7 @@
                spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
                spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
                outSliceServive = WebSocketServer.applicationContext.getBean(OutSliceServive.class);
                north_Glass_Buffer1Service = WebSocketServer.applicationContext
                        .getBean(North_Glass_Buffer1Service.class);
                storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
                dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
                // 笼子使用情况
                List<StorageCage> tableData = homeMapper.selectAll();
@@ -84,15 +81,7 @@
                jsonObject.append("alarmmg", alarmmg);
                
                // 获取扫码位与上片位玻璃信息
                Queue form2 = homeMapper.GetQueueInfo(2);
                Queue form3 = homeMapper.GetQueueInfo(1);
                if (form2.getglassId() != null && form2.getglassId() != "") {
                    jsonObject.append("form2", form2);
                }
                if (form3.getglassId() != null && form3.getglassId() != "") {
                    jsonObject.append("form3", form3);
                }
                // 获取出片队列信息
                List<Out_slice> listoutslice = outSliceServive.SelectProductionqueue();
                jsonObject.append("listoutslice", listoutslice);
@@ -114,12 +103,23 @@
                //查询理片笼信息
                List<StorageCage> StorageCageInfo = storageCageService.SelectStorageCageInfo();
                jsonObject.append("StorageCageInfo", StorageCageInfo);
                //查询当前进片任务
                List<StorageTask> StoragTaskeTaskFeed = storageCageService.SelectStorageTask(0);
                jsonObject.append("StoragTaskeTaskFeed", StoragTaskeTaskFeed);
                //查询当前出片任务
                List<StorageTask> StoragTaskeTaskOut = storageCageService.SelectStorageTask(1);
                jsonObject.append("StoragTaskeTaskOut", StoragTaskeTaskOut);
                //查询当前订单任务
                List<Flowcard> OrderTask = storageCageService.SelectOrderTask();
                jsonObject.append("OrderTask", OrderTask);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // jsonObject.append("params", new short[] { 30, 40, });
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
            if (sendwServer != null) {
@@ -134,7 +134,6 @@
                            // // 将最后一个消息转换为整数类型的列表
                            webserver.clearMessages();
                        }
                    }
                }
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -21,6 +21,7 @@
import com.example.springboot.component.Plchome;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.CarPosition;
import com.example.springboot.entity.GlassInfo;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
@@ -446,4 +447,45 @@
    return Result.success(map);
  }
  // 切换PLC获取二维码方式
  @PostMapping("/UpdateStroageCageByCell")
  public Result UpdateStroageCageByCell(Integer cell,Integer num) {
    return storageCageService.UpdateStroageCageByCell(cell,num);
  }
  //手动完成任务
  @PostMapping("/FinishTask")
  public Result FinishTask(Integer tasktype,Integer id) {
    return storageCageService.FinishTask(tasktype,id);
  }
  //查询玻璃信息
  @PostMapping("/SelectGlassInfo")
  public Result SelectGlassInfo(String width,String height,String thickness,String films) {
    return storageCageService.SelectGlassInfo(width,height,thickness,films);
  }
  //添加玻璃信息到笼子
  @PostMapping("/StorageCageAddGlass")
  public Result StorageCageAddGlass(String cell,@RequestBody GlassInfo glassInfo) {
    return storageCageService.StorageCageAddGlass(cell,glassInfo);
  }
  //领取/暂停任务
  @PostMapping("/ClaimTasks")
  public Result ClaimTasks(String flowcard,Integer state) {
    return storageCageService.ClaimTasks(flowcard,state);
  }
  //修改出片方式
  @PostMapping("/ModeChange")
  public Result ModeChange(String flowcard,Integer method) {
    return storageCageService.ModeChange(flowcard,method);
  }
   //添加玻璃信息到测量信息
   @PostMapping("/UpdateQueue")
   public Result UpdateQueue(@RequestBody GlassInfo glassInfo) {
     return storageCageService.UpdateQueue(glassInfo);
   }
}
springboot-vue3/src/main/java/com/example/springboot/entity/FlowCard.java
@@ -1,19 +1,31 @@
package com.example.springboot.entity;
import java.util.Date;
import java.sql.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableName;
import cn.hutool.core.date.DateTime;
import lombok.Data;
@Data
@TableName("`flowcard`")
public class flowcard {
public class Flowcard {
  private Integer id;// 自增id
  private String flowcard;// 流程卡id
  private Integer number;// 玻璃数量
  private Integer line;// 任务路线
  private Integer state;// 状态
  private Integer method;// 出片方式
  private Date starttime;// 任务领取时间
  public List<GlassInfo> glassinfo;// 玻璃信息
  public void setglassinfo(List<GlassInfo> glassinfo) {
    this.glassinfo = glassinfo;
  }
  public List<GlassInfo> getglassinfo() {
    return glassinfo;
  }
}
springboot-vue3/src/main/java/com/example/springboot/entity/GlassInfo.java
@@ -1,6 +1,5 @@
package com.example.springboot.entity;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -8,18 +7,17 @@
@Data
@TableName("`glassinfo`")
public class glassinfo {
public class GlassInfo {
  private Integer id;// 自增id
  private String flowcard;// 流程卡id
  private Integer glasstype;// 玻璃类型
  private Integer mateid;// 配片id
  private Integer glassid;// 玻璃id
  private String glassid;// 玻璃id
  private Integer tier;// 层
  private String films;// 膜系
  private Double width;// 宽
  private Double height;// 高
  private String thickness;// 厚
  private Double thickness;// 厚
  private Integer number;// 数量
  private Integer finishnumber;// 完成数量
}
springboot-vue3/src/main/java/com/example/springboot/entity/StorageCage.java
@@ -61,13 +61,13 @@
     */
    private Double glassHeightMm;
    /**
     * 编号
     * 厚度
     */
    private String listId;
    private Integer thickness;
    /**
     * 箱子号
     * 膜系
     */
    private String boxId;
    private String films;
    /**
     * 状态(0:无玻璃,1:有玻璃,2:进片中,3:出片中,4:调度中)
     */
springboot-vue3/src/main/java/com/example/springboot/entity/StorageTask.java
@@ -8,7 +8,16 @@
    private String shelfRack;//起始位
    private String loadrack;//目标位
    private Integer count;//玻璃数量
    private StorageCage storageCage;
    
    public void setstorageCage(StorageCage storageCage) {
        this.storageCage = storageCage;
    }
    public StorageCage getstorageCage() {
        return storageCage;
    }
    public Integer id() {
        return id;
springboot-vue3/src/main/java/com/example/springboot/entity/flowcard.java
@@ -1,19 +1,31 @@
package com.example.springboot.entity;
import java.util.Date;
import java.sql.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableName;
import cn.hutool.core.date.DateTime;
import lombok.Data;
@Data
@TableName("`flowcard`")
public class flowcard {
public class Flowcard {
  private Integer id;// 自增id
  private String flowcard;// 流程卡id
  private Integer number;// 玻璃数量
  private Integer line;// 任务路线
  private Integer state;// 状态
  private Integer method;// 出片方式
  private Date starttime;// 任务领取时间
  public List<GlassInfo> glassinfo;// 玻璃信息
  public void setglassinfo(List<GlassInfo> glassinfo) {
    this.glassinfo = glassinfo;
  }
  public List<GlassInfo> getglassinfo() {
    return glassinfo;
  }
}
springboot-vue3/src/main/java/com/example/springboot/entity/glassinfo.java
@@ -1,6 +1,5 @@
package com.example.springboot.entity;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -8,18 +7,17 @@
@Data
@TableName("`glassinfo`")
public class glassinfo {
public class GlassInfo {
  private Integer id;// 自增id
  private String flowcard;// 流程卡id
  private Integer glasstype;// 玻璃类型
  private Integer mateid;// 配片id
  private Integer glassid;// 玻璃id
  private String glassid;// 玻璃id
  private Integer tier;// 层
  private String films;// 膜系
  private Double width;// 宽
  private Double height;// 高
  private String thickness;// 厚
  private Double thickness;// 厚
  private Integer number;// 数量
  private Integer finishnumber;// 完成数量
}
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -3,6 +3,8 @@
import org.apache.ibatis.annotations.*;
import com.example.springboot.entity.CarPosition;
import com.example.springboot.entity.Flowcard;
import com.example.springboot.entity.GlassInfo;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.StorageTask;
import com.example.springboot.entity.alarmmg;
@@ -85,9 +87,9 @@
  @Select("select dianqimima from user where id=1")
  String SelectPassword();
  //根据玻璃id查询理片笼信息
  @Select("select * from storage_cage where glass_id=#{glassid}")
  StorageCage SelectGlassInfo(String glassid);
  // //根据玻璃id查询理片笼信息
  // @Select("select * from storage_cage where glass_id=#{glassid}")
  // StorageCage SelectGlassInfo(String glassid);
  //根据玻璃id查询理片笼信息
  @Select("select * from storage_cage where glass_id=#{glassid}")
@@ -231,6 +233,55 @@
  //查询理片笼内信息
  @Select("select * from storage_cage")
  List<StorageCage> SelectStorageCageInfo();
  //删除格子内玻璃信息
  @Update("update storage_cage set width=5000,glasswidth=null,glassheight=null,glasswidthmm=null,glassheightmm=null,thickness=null,glasstype=null,number=null where cell=#{cell}")
  void DeleteStroageCageByCell(Integer cell);
  //修改格子玻璃数量
  @Update("update storage_cage set number=number+#{num} where cell=#{cell}")
  void updateStroageCageByCell(Integer cell, Integer num);
  //计算格子内剩余宽度
  @Update("update storage_cage set width=5000-(glasswidth+100)*number where cell=#{cell}")
  void UpdateStroageCageWidthByCell(Integer cell);
  //根据任务类型获取任务
  @Select("select * from storage_task where task_type=#{task_type} and task_state=0")
  List<StorageTask> SelectStorageTask(int task_type);
  //根据id任务
  @Select("select * from storage_task where id=#{id}")
  StorageTask SelectStorageTaskById(int id);
  //根据格子查询玻璃信息
  @Select("select * from storage_cage where cell=#{cell}")
  StorageCage SelectStorageByCell(String cell);
  //手动完成任务
  @Select("update storage_task set task_state=1 where id=1429")
  void FinishTask(Integer id);
  @Select("select gi.* from glassinfo gi inner join flowcard fc on gi.flowcard=fc.flowcard where fc.state!=2 and position(#{width} in gi.width) and position(#{height} in gi.height) and position(#{thickness} in gi.thickness) and position(#{films} in gi.films) group by gi.id")
  List<GlassInfo> SelectGlassInfo(String width,String height,String thickness,String films);
  @Update("update storage_cage set glasstype=#{glassInfo.glasstype},glasswidth=#{glassInfo.width},glassheight=#{glassInfo.height},thickness=#{glassInfo.thickness},films=#{glassInfo.films},number=0 where cell=#{cell}")
  void StorageCageAddGlass(String cell, GlassInfo glassInfo);
  @Select("select * from flowcard where state!=2")
  List<Flowcard> SelectOrderTask();
  @Select("select * from glassinfo where flowcard=#{flowcard} order by mateid,tier")
  List<GlassInfo> SelectOrderView(String flowcard);
  @Update("update flowcard set state=#{state} where flowcard=#{flowcard}")
  void ClaimTasks(String flowcard, int state);
  @Update("update flowcard set method=#{method} where flowcard=#{flowcard}")
  void ModeChange(String flowcard, int method);
  @Select("update queue set flowcard=#{flowcard},glasswidth=#{width},glassheight=#{height},glasstype=#{glasstype} where state=0")
  void UpdateQueue(String flowcard,double width,double height,Integer glasstype);
  
}
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
@@ -1,5 +1,6 @@
package com.example.springboot.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -11,6 +12,8 @@
import com.example.springboot.common.Result;
import com.example.springboot.component.Plchome;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.Flowcard;
import com.example.springboot.entity.GlassInfo;
import com.example.springboot.entity.Queue;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.StorageTask;
@@ -206,4 +209,105 @@
        return homeMapper.SelectStorageCageInfo();
    }
    // 增加/减少理片笼玻璃数
    public Result UpdateStroageCageByCell(Integer cell, Integer num) {
        if (num == 0) {
            homeMapper.DeleteStroageCageByCell(cell);
        } else {
            homeMapper.updateStroageCageByCell(cell, num);
            homeMapper.UpdateStroageCageWidthByCell(cell);
        }
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    // 查询进/出片任务
    public List<StorageTask> SelectStorageTask(int task_type) {
        List<StorageTask> storageTasks = new ArrayList<>();
        if (task_type == 0) {
            storageTasks = homeMapper.SelectStorageTask(task_type);
        } else {
            storageTasks = homeMapper.SelectStorageTask(task_type);
        }
        for (StorageTask storageTask : storageTasks) {
            storageTask.setstorageCage(homeMapper.SelectStorageByCell(storageTask.getLoadrack()));
        }
        return storageTasks;
    }
    //手动完成任务
    public Result FinishTask(Integer tasktype, Integer id) {
        StorageTask storageTask = homeMapper.SelectStorageTaskById(id);//获取任务信息
        homeMapper.FinishTask(storageTask.getId());//完成任务
        if(storageTask.getTaskType().equals("0")){
            UpdateStroageCageByCell(Integer.parseInt(storageTask.getLoadrack()),1);//玻璃数量+1
        }else{
            StorageCage storageCage = homeMapper.SelectStorageByCell(storageTask.getShelfRack());
            if(storageCage.getNumber()>1){
                UpdateStroageCageByCell(Integer.parseInt(storageTask.getShelfRack()),-1);//玻璃数量-1
            }else{
                UpdateStroageCageByCell(Integer.parseInt(storageTask.getShelfRack()),0);//清除格内信息
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    //查询玻璃信息
    public Result SelectGlassInfo(String width,String height,String thickness,String films) {
        List<GlassInfo> glassInfoList = homeMapper.SelectGlassInfo(width,height,thickness,films);
        Map<String, Object> map = new HashMap<>();
        map.put("StorageCageAddInfo", glassInfoList);
        return Result.success(map);
    }
    //添加玻璃到格子内
    public Result StorageCageAddGlass(String cell,GlassInfo glassInfo) {
        homeMapper.StorageCageAddGlass(cell,glassInfo);
        UpdateStroageCageByCell(Integer.parseInt(cell),1);
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    public List<Flowcard> SelectOrderTask() {
        List<Flowcard> OrderTask=homeMapper.SelectOrderTask();
        for (Flowcard flowcard : OrderTask) {
            flowcard.setglassinfo(homeMapper.SelectOrderView(flowcard.getFlowcard()));
        }
        return OrderTask;
    }
    public Result ClaimTasks(String flowcard, Integer state) {
        if(state==1){
            homeMapper.ClaimTasks(flowcard,0);
        }else{
            homeMapper.ClaimTasks(flowcard,1);
        }
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    public Result ModeChange(String flowcard, Integer method) {
        if(method==1){
            homeMapper.ModeChange(flowcard,0);
        }else{
            homeMapper.ModeChange(flowcard,1);
        }
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    public Result UpdateQueue(GlassInfo glassInfo) {
        homeMapper.UpdateQueue(glassInfo.getFlowcard(),glassInfo.getWidth(),glassInfo.getHeight(),glassInfo.getGlasstype());
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
}