wu
2024-11-12 ca1ae93196be366e707647c42e3039512a2cf45f
字段显示,结束任务功能更新,界面调整,测量显示
14个文件已修改
532 ■■■■ 已修改文件
Albania_Mes-ui/src/api/home.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/lang/locales/en-US.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/lang/locales/zh-CN.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/views/home/index.vue 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/api/home.js
@@ -332,6 +332,13 @@
        data:""
    })
}
export function TerminateTask(id) {
    return request({
        url: '/home/TerminateTask?id='+id,
        method: 'post',
        data:""
    })
}
export function SelectGlassInfo(width,height,thickness,films) {
    return request({
Albania_Mes-ui/src/lang/locales/en-US.json
@@ -302,6 +302,7 @@
  "Width":"Width",
  "Operate":"Operate",
  "Terminate Task":"Terminate Task",
  "Terminate":"Terminate",
  "cancel":"cancel",
  "confirm":"confirm",
  "Number":"Number",
Albania_Mes-ui/src/lang/locales/zh-CN.json
@@ -286,6 +286,7 @@
  "Width": "宽",
  "Operate": "操作",
  "Terminate Task":"结束任务",
  "Terminate":"结束",
  "end task": "完成任务",
  "Number": "数量",
  "Outfeed glass barcode": "出片玻璃id",
Albania_Mes-ui/src/views/home/index.vue
@@ -220,6 +220,8 @@
.el-table .cell {
    display: flex;
    /* height: 30px;
    line-height: 30px; */
}
.device {
@@ -332,6 +334,14 @@
    font-weight: bold;
    text-align: center;
}
.el-table .el-table__body-wrapper tr {
  height: 40px;  /* 设置每行的高度为 30px */
  line-height: 30px;
}
.el-table .el-table__body-wrapper td {
    /* 确保单元格内容垂直居中 */
}
</style>
<template>
    <el-container>
@@ -368,6 +378,9 @@
                <el-button type="primary" @click="showform(4)" :disabled="SoftEmergencyStopState" style="z-index: 999;"
                    :class="SoftEmergencyStopState == true ? 'hide' : ''">
                    {{ $t('Task queue') }}</el-button>
                    <el-button type="primary" @click="showform(5)" :disabled="SoftEmergencyStopState" style="z-index: 999;"
                    :class="SoftEmergencyStopState == true ? 'hide' : ''">
                    {{ $t('Outing Queue') }}</el-button>
            </div>
            <div style="display: flex;align-items: center;overflow: hidden;">
@@ -444,10 +457,12 @@
                        <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')">
                        <el-table-column :min-width="120" :label="$t('Terminate Task')">
                            <template slot-scope='scope'>
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="FinishTask(scope.row.id)">{{ $t('Complete') }}</el-button>
                                    <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="TerminateTask(scope.row.id)">{{ $t('Terminate') }}</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
@@ -460,10 +475,12 @@
                        <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')">
                        <el-table-column :min-width="120" :label="$t('Terminate Task')">
                            <template slot-scope='scope'>
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="FinishTask(scope.row.id)">{{ $t('Complete') }}</el-button>
                                    <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="TerminateTask(scope.row.id)">{{ $t('Terminate') }}</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
@@ -509,12 +526,12 @@
        <el-dialog :visible.sync="Measure" :title="$t('Measure')" top="5vh"><!--测量页面-->
            <!--测量页面主体-->
            <div style="height: 800px;">
            <div style="height: 760px;">
                <!--功能-->
                <div>
                    <el-button type="primary" @click="ManualMatching()" :disabled="(this.LastQueue.state > 1)"
                    <el-button type="primary" @click="ManualMatching()" :disabled="(this.LastQueue.state > 0)"
                        style="z-index: 999;">{{ $t('Manual matching') }}</el-button>
                    <el-button type="primary" @click="ManualTake()" :disabled="(this.LastQueue.state > 1)"
                    <el-button type="primary" @click="ManualTake()" :disabled="(this.LastQueue.state > 0)"
                        style="z-index: 999;">{{
                $t('Manual removal') }}</el-button> 
                    <el-button type="primary" @click="AnewMeasure()" 
@@ -541,21 +558,20 @@
                </div>
                <br>
                <!--显示-->
                <div style="width:1000px;height: 720px;border: 2px solid #d1d1d1;float: left;">
                <div style="width:900px;height: 720px;border: 2px solid #d1d1d1;float: left;">
                    <!--玻璃图  #81b337-->
                    <div
                        :style="'top:10px;bottom: 10px;left: 10px;right: 10px;margin:' + ((720 - (this.LastQueue.glassheight / 25 * 7)) / 2) + 'px auto;width:'
                    <div :style="'top:10px;bottom: 10px;left: 10px;right: 10px;margin:'
                            + ((720 - (this.LastQueue.glassheight / 25 * 7)) / 2) + 'px auto;width:'
                            + (this.LastQueue.glasswidth / 25 * 7) + 'px;height:'
                            + (this.LastQueue.glassheight / 25 * 7) + 'px;line-height: '
                            + (this.LastQueue.glassheight / 25 * 7 / 3) + 'px; background-color: '
                            + (this.LastQueue.state > 0 ? '#4CCCE4' : (this.LastQueue.state == 0 ? '#E4CA4C' : '#E4CA4C')) + ';text-align: center;font-size:50px'">
                            + (this.LastQueue.state > 0 ? '#4CCCE4' : (this.LastQueue.state == 0 ? '#E4CA4C' : 'red')) + ';text-align: center;font-size:50px'">
                        <div>
                            {{ $t('Measure') }}
                        </div>
                        <div>
                            {{ $t('Width') + "*" + $t('Height') }}:{{ (this.LastQueue.glasswidth +
                                this.LastQueue.glassheight) != 0 ? (this.LastQueue.glasswidth +
                                    "*" + this.LastQueue.glassheight) + "" : "" }}
                            {{ $t('Width') + "*" + $t('Height') }}:{{ (this.LastQueue.glasswidth +this.LastQueue.glassheight) != 0 ?
                            (this.LastQueue.glasswidth +"*" + this.LastQueue.glassheight) + "" : "" }}
                        </div>
                        <div>
@@ -699,19 +715,105 @@
                                :value="item.value">
                            </el-option>
                        </el-select>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;margin-left: 6px;"
                            v-show="scope.row.state >= 0 ? true : false"
                            @click="ClaimTasks(scope.row.flowcard, scope.row.state, selected[scope.$index], scope.row.line)">
                            {{ scope.row.state > 0 ? $t('Stop Task') : $t('Start Task') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            v-show="scope.row.state >= 0 ? true : false" @click="StartChange(scope.row.flowcard, scope.row.orderstate)">
                            {{ scope.row.orderstate > 0 ? $t('stop work') : $t('start work') }}</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>
                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;margin-left: 6px;"
                            v-show="scope.row.state >= 0 ? true : false"
                            @click="ClaimTasks(scope.row.flowcard, scope.row.state, selected[scope.$index], scope.row.line)">
                            {{ scope.row.state > 0 ? $t('Stop Task') : $t('Start Task') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            v-show="scope.row.state >= 0 ? true : false" @click="deleteTasks(scope.row.flowcard)">
                            {{ $t('langDelete') }}</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-dialog>
         <!-- 出片队列显示表 -->
         <el-dialog :visible.sync="Outqueue" :title="$t('Outing Queue')" top="5vh">
            <el-table :data="tableData2" style="width: 100%;margin-bottom: 20px;" row-key="id" border lazy
                :tree-props="{ children: 'glassinfo', hasChildren: 'hasChildren' }">
                <el-table-column prop="flowcard" :label="$t('Order')" width="150" align="center">
                    <template slot-scope='scope'>
                        <div>
                            {{ scope.row.flowcard }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mateid')" align="center">
                </el-table-column>
                <el-table-column prop="tier" :label="$t('Tier')" align="center">
                </el-table-column>
                <el-table-column prop="number" :label="$t('Number')" align="center">
                </el-table-column>
                <el-table-column prop="cageno" :label="$t('Cage GlassNumber')" align="center">
                </el-table-column>
                <el-table-column prop="finishnumber" :label="$t('Finish No')" align="center">
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mate No')" align="center">
                </el-table-column>
                <el-table-column prop="films" :label="$t('Films')" align="center">
                </el-table-column>
                <el-table-column prop="thickness" :label="$t('Thickness')" align="center">
                </el-table-column>
                <el-table-column prop="width" :label="$t('Width')" align="center">
                </el-table-column>
                <el-table-column prop="height" :label="$t('Height')" align="center">
                </el-table-column>
                <el-table-column prop="state" :label="$t('Task State')" align="center">
                    <template slot-scope='scope'>
                        <div
                            :style="{ backgroundColor: scope.row.state === 0 ? '' : '#00FFFF', width: '105%', height: '125%', lineHeight: '50px' }">
                            {{ scope.row.state >= 0 ? scope.row.state == 0 ? $t('Stop') : $t('Start') : "" }}
                        </div>
                    </template>
                </el-table-column>
                <!-- <el-table-column prop="state" :label="$t('Task State')" align="center">
                    <template slot-scope='scope'>
                        {{ scope.row.state >= 0 ? scope.row.state == 0 ? $t('Stop') : $t('Start') : "" }}
                    </template>
                </el-table-column> -->
                <el-table-column prop="method" :label="$t('Task Method')" align="center">
                    <template slot-scope='scope'>
                        <div style="text-align: center;width: 105%;">
                            {{ scope.row.state >= 0 ? (scope.row.method == 0 ? $t('Out') : $t('All Out')) : "" }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="line" :label="$t('Task Line')">
                </el-table-column>
                <el-table-column width="380" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-select v-model="selected[scope.$index]" :placeholder="$t('Line')"
                            v-show="scope.row.state >= 0 ? true : false">
                            <el-option v-for="item in options" :key="item.value" :label="item.label"
                                :value="item.value">
                            </el-option>
                        </el-select>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            v-show="scope.row.state >= 0 ? true : false" @click="StartChange(scope.row.flowcard, scope.row.orderstate)">
                            {{ scope.row.orderstate > 0 ? $t('stop work') : $t('start work') }}</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>
                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;margin-left: 6px;"
                            v-show="scope.row.state >= 0 ? true : false"
                            @click="ClaimTasks(scope.row.flowcard, scope.row.state, selected[scope.$index], scope.row.line)">
                            {{ scope.row.state > 0 ? $t('Stop Task') : $t('Start Task') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            v-show="scope.row.state >= 0 ? true : false" @click="deleteTasks(scope.row.flowcard)">
@@ -738,11 +840,11 @@
            <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="tier" :label="$t('Tier')"></el-table-column>
                <el-table-column prop="mateid" :label="$t('Mateid')"></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 prop="mateid" :label="$t('Mateid')"></el-table-column>
                <el-table-column :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -762,7 +864,7 @@
    Disabled, SelectPermissionByUserName, currentUsername, CompleteQueue,
    isAllowReorderings,
    UpdateStroageCageByCell, FinishTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue, importData, ManualTake, AnewMeasure, StartChange, deleteTasks,SaveMeasure
    UpdateStroageCageByCell, FinishTask,TerminateTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue, importData, ManualTake, AnewMeasure, StartChange, deleteTasks,SaveMeasure
} from "../../api/home";
@@ -800,6 +902,7 @@
            dataList: [],
            tableData1: [],
            tableData2: [],
            Measuermode: false,
            confirm1: false,
            confirm2: false,
@@ -815,6 +918,7 @@
            Measure: false,
            StorageCage: false,
            Taskqueue: false,
            Outqueue: false,
            StorageCageAdd: false,
            StorageCageInfo: [],
            StorageCageForm: {
@@ -921,6 +1025,8 @@
                this.StorageCage = true;
            } else if (i == 4) {
                this.Taskqueue = true;
            }else if (i == 5) {
                this.Outqueue = true;
            }
        },
        init() {
@@ -992,6 +1098,7 @@
                    }
                    this.tableData1 = obj.OrderTask[0];
                    this.tableData2 = obj.OrderTask[0];
                    this.LastQueue = obj.LastQueue[0];
                    //是否允许出片
@@ -1174,6 +1281,15 @@
                }
            });
        },
        //结束进/出片任务
        TerminateTask(id) {
            TerminateTask(id).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        //修改理片笼玻璃信息
        UpdateStroageCageByCell(cell, nownum, num) {
            if (nownum == null && num == 1) {
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutoMes.java
@@ -46,7 +46,7 @@
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(100);
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java
@@ -17,7 +17,7 @@
  private StorageCageService storageCageService;
  int aaa;
  String huibao = "";
  String qidong = "";
  @Override
  public void run() {
@@ -32,7 +32,8 @@
      storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
      spianService = WebSocketServer.applicationContext.getBean(SpianServiceNew.class);
      albaniaMapper = WebSocketServer.applicationContext.getBean(AlbaniaMapper.class);
      spianService.selectout(1);
      // spianService.selectout(1);
      // spianService.mateOut();
      // 读取DB14区文件
      PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
      if (plcmes.getPlcParameter("PLCToMES").getValue() != null) {
@@ -42,11 +43,16 @@
        String IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1号任务完成
        String MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1号确认字
        String MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 发送任务字
        int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
        int outtask = albaniaMapper.SelectOutTaskCount(); // 等待补发的出片任务数量
        if(outtask>0){
          spianService.mateOut();
        if (ExportTOMES1 != null && MESToPLC != null && taskcont == 0) {
          //当可以发任务并且出片队列有任务时
          if (ExportTOMES1.equals("1") == true && MESToPLC.equals("0") == true && PLCToMES.equals("1") == true&&outtask>0 && MESToPLCStatus1.equals("0")) {
             spianService.mateOut();
          }
        }
        // String scan=plcmes.getPlcParameter("scan").getValue();//发送扫码信息
        // if(scan.equals("1")==true){
        // spianService.scan(scan);
@@ -57,12 +63,22 @@
          System.out.println("汇报记录:" + IDStatus1 + "时间" + currentTime);
        }
        huibao = IDStatus1;
        if (!qidong.equals(MESToPLC)) {
          System.out.println("启动记录:" + MESToPLC + "时间" + currentTime);
        }
        qidong = MESToPLC;
        PLCToMES = plcmes.getPlcParameter("PLCToMES").getValue();// 运送车请求
        IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1号任务完成
        MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1号确认字
        MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 发送任务字
        // 一号线请求
        if (ExportTOMES1 != null && MESToPLC != null && taskcont == 0) {
          if (ExportTOMES1.equals("1") == true && MESToPLC.equals("0") == true && PLCToMES.equals("1") == true
              && MESToPLCStatus1.equals("0") == true) {
            System.out
                .println("出片状态:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
              && MESToPLCStatus1.equals("0") == true&&outtask == 0) {
            // System.out
            //     .println("出片状态:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
            spianService.selectout(1);
            try {
              Thread.sleep(200); // 每100毫秒检查一次
@@ -79,14 +95,14 @@
        // 运送车请求和测量完成请求
        GlassInfo glass = albaniaMapper.SelectGlass();
        if (PLCToMES != null && glass != null && MESToPLC != null && taskcont == 0) {
          if (PLCToMES.equals("1") == true && MESToPLC.equals("0") == true && MESToPLCStatus1.equals("0") == true) {
          if (PLCToMES.equals("1") == true && MESToPLC.equals("0") == true && MESToPLCStatus1.equals("0") == true&&outtask == 0) {
            try {
              Thread.sleep(100); // 每100毫秒检查一次
            } catch (InterruptedException e) {
              Thread.currentThread().interrupt(); // 处理线程中断
            }
            System.out
                .println("进片状态:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
            // System.out
            //     .println("进片状态:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
            spianService.selectAll(glass);
          }
        }
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -158,8 +158,9 @@
                            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),
                                    (short) 1);
                        } else if (istest) {
                            // 重新测量
                        }
                        else if (istest) {
                            // 匹配失败
                            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),
                                    (short) 4);
@@ -173,7 +174,7 @@
                List<GlassInfo> glassInfoFlowCard = glassInfoMapper.selectOrderState(1);
                jsonObject.append("glassInfoFlowCard", glassInfoFlowCard);
                Queue LastQueue = QueueMapper.selectLastQueue();
                Queue LastQueue = QueueMapper.selectLastQueue2();
                if (LastQueue == null) {
                    Queue nullQueue = new Queue();
                    nullQueue.setglassId("");
@@ -185,8 +186,8 @@
                    jsonObject.append("LastQueue", nullQueue);
                } else {
                    if (LastQueue.getstate() < 1) {
                        LastQueue.setglasswidth(0);
                        LastQueue.setglassheight(0);
                        LastQueue.setglasswidth(LastQueue.getglasswidthmm());
                        LastQueue.setglassheight(LastQueue.getglassheightmm());
                    }
                    jsonObject.append("LastQueue", LastQueue);
                }
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -502,6 +502,11 @@
  public Result FinishTask(Integer id) {
    return storageCageService.FinishTask();
  }
    // 手动结束任务
    @PostMapping("/TerminateTask")
    public Result TerminateTask(Integer id) {
      return storageCageService.TerminateTask(id);
    }
  // 查询玻璃信息
  @PostMapping("/SelectGlassInfo")
springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java
@@ -45,7 +45,7 @@
    @Select("select * from v_cagerelease2 where mateid not in(select mateid from v_cagerelease2 where surplus=0 group by mateid)LIMIT 1;")
    GlassInfo SelectOutGlass2();
    //待出片任务查询
    @Select("select * from out_task where task_state=0")
    @Select("select * from out_task where task_state=0 order by id asc;")
    List<StorageTask> SelectOutTask();
    //流程卡任务查询
    @Select("select  G.flowcard,G.glasstype,G.number,G.mateid,G.tier,G.starttime,G.finishnumber,IF((G.number-G.finishnumber-ku.KuCount)<0,G.number,IFNULL(ku.KuCount,0)) as 'surplus',G.totaltier as id,G.width,G.glassid from (select Gfd.flowcard,Ggf.glasstype,Ggf.number,Ggf.mateid,Ggf.tier,Ggf.finishnumber,Gfd.starttime,Gfd.totaltier,Ggf.width,Ggf.glassid  from flowcard as Gfd LEFT JOIN glassinfo as Ggf on Gfd.flowcard=Ggf.flowcard where Gfd.state=1 and Gfd.line=1) as G left join (select glasstype,sum(number) AS KuCount from storage_cage where glasstype is not null and disabled=0 group by glasstype) as ku on G.glasstype=ku.glasstype where G.mateid not in(select mateid from v_cagerelease1 where surplus=0 group by mateid) HAVING surplus>0  order by `g`.`starttime`,`g`.`mateid`,`g`.`finishnumber`,`g`.`tier`LIMIT 1;")
@@ -74,7 +74,7 @@
    @Select("select method,flowcard from flowcard where state=1 and line=#{line} ORDER BY starttime LIMIT 1;")
    GlassInfo SelectMethod(int line);
    //直出模式任务查询
    @Select("select  b.flowcard,b.glassid,b.glasstype,b.mateid,b.width,b.tier,a.totaltier as id,IFNULL(c.number,0)as number,b.glassid from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=1 and c.number>0 and b.finishnumber<b.number  ORDER BY b.finishnumber,b.tier asc limit 1")
    @Select("select  b.flowcard,b.glassid,b.glasstype,b.mateid,b.width,b.tier,a.totaltier as id,IFNULL(c.number,0)as number,b.glassid from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=1 and a.state=1 and c.number>0 and b.finishnumber<b.number  ORDER BY b.finishnumber,b.tier asc limit 1")
    GlassInfo SelectOutGlass2(int line);
    //查询直通模式下最后一块
    @Select("select IFNULL(b.tier, 0) from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=#{line} and c.number>0 ORDER BY b.tier desc LIMIT 1")
@@ -106,4 +106,10 @@
    //查询此配片id是否有可出片数量
    @Select("SELECT  CASE WHEN number >finishnumber THEN '足够' ELSE '不足' END AS status FROM  glassinfo a WHERE a.flowcard =#{flowcard} AND a.mateid =#{mateid}")
    List<String> SelectOutGlass8(String flowcard,int mateid);
    //查询玻璃信息
    @Select("select * from glassinfo where glasstype=#{glasstype} limit 1")
    GlassInfo SelectGlassInfo(int glasstype);
    //完成出片队列的任务
    @Update("update out_task set task_state=1 where id=#{id};")
    void UpdateOutTask(int id);
}
springboot-vue3/src/main/java/com/example/springboot/mapper/GlassInfoMapper.java
@@ -24,6 +24,8 @@
    @Update("UPDATE glassinfo SET measurenumber = measurenumber+1 WHERE id = #{id}")
    void updatemeasurenumber(@Param("id") int roleId);
    @Update("UPDATE glassinfo SET measurenumber = measurenumber-1 WHERE glasstype = #{glasstype}")
    void updateGlassNumber(@Param("glasstype") int glasstype);
    // @Insert("INSERT INTO role_permission (role_id, permission_id, state) VALUES (#{roleId}, #{permissionId}, #{state})")
    // void insert(@Param("roleId") int roleId, @Param("permissionId") int permissionId, @Param("state") int state);
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -261,9 +261,12 @@
  // 根据格子查询玻璃信息
  @Select("select * from storage_cage where cell=#{cell}")
  StorageCage SelectStorageByCell(String cell);
  //根据玻璃类型查询玻璃信息
  @Select("select a.shelf_rack as cage,a.load_rack as cell,b.mateid,b.width as glasswidth,b.height as glassheight,b.thickness,b.films from storage_task a left join glassinfo b on a.glasstype=b.glasstype where a.id=#{id} limit 1")
  StorageCage SelectStorageByCellGlass(Integer id);
  // 手动完成任务
  @Select("update storage_task set task_state=1 where id=#{id}")
  @Select("update storage_task set task_state=#{state} where id=#{id}")
  void FinishTask(Integer id, int state);
  //人工匹配测量查询
  @Select("select gi.* from glassinfo gi inner join flowcard fc on gi.flowcard=fc.flowcard where fc.state!=2 and fc.orderstate=1 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")
@@ -280,7 +283,7 @@
  // @Select("select gi.*,sum(sc.number) as cageno from glassinfo gi left join storage_cage sc on gi.glasstype=sc.glasstype where gi.flowcard=#{flowcard} group by gi.id order by gi.mateid,gi.tier")
  // List<GlassInfo> SelectOrderView(String flowcard);
  @Select("select gi.id, gi.glasstype, gi.mateid, gi.glassid, gi.tier, gi.films, gi.width, gi.height, gi.thickness, gi.number, gi.finishnumber, gi.sumtier, gi.measurenumber,sum(sc.number) as cageno,IFNULL(c.orderstate,0) as orderstate from  glassinfo gi left join storage_cage sc on gi.glasstype=sc.glasstype left join flowcard c on gi.flowcard=c.flowcard where gi.flowcard=#{flowcard} group by gi.id order by gi.mateid,gi.tier")
  @Select("select gi.id, gi.glasstype, gi.mateid, gi.glassid, gi.tier, gi.films, gi.width, gi.height, gi.thickness, gi.number, gi.finishnumber, gi.sumtier, gi.measurenumber,sum(sc.number) as cageno,IFNULL(c.orderstate,0) as orderstate from  glassinfo gi left join storage_cage sc on gi.glasstype=sc.glasstype left join flowcard c on gi.flowcard=c.flowcard where gi.flowcard=#{flowcard} group by gi.id,orderstate order by gi.mateid,gi.tier")
  List<GlassInfo> SelectOrderView(String flowcard);
@@ -307,19 +310,24 @@
  @Update("Update  glassinfo set flowcard=CONCAT('已删除', #{flowcard}) where flowcard=#{flowcard}")
  int deleteGlassinfo(String flowcard);
  //人工匹配修改一条
  @Update("update queue set glassid=concat(#{flowcard},'-',#{tier}),flowcard=#{flowcard},glasswidth=#{width},glassheight=#{height},glasstype=#{glasstype},thickness=#{thickness},mateid=#{mateid},state=1 where state<=0")
  void UpdateQueue(String flowcard, double width, double height, Integer glasstype, Double thickness, Integer tier,int mateid);
  //人工匹配新增一条
  @Insert("INSERT INTO queue (flowcard,glassid,glasswidth,glassheight,glasstype,thickness,mateid,state) VALUES (#{flowcard},concat(#{flowcard},'-',#{tier}),#{width},#{height},#{glasstype},#{thickness},#{mateid},1)")
  int AddQueue(String flowcard, double width, double height, Integer glasstype, Double thickness, Integer tier,int mateid); 
  //判断测量表是否有可更改的数据
  @Select("select count(*) from queue where state<1")
  int SelectQueue();
  @Update("update glassinfo set finishnumber=ifnull(finishnumber,0)+1 where flowcard=#{flowcard} and mateid=#{mateid} and tier=#{geTier}")
  void AddGlassNo(String flowcard, Integer mateid, Integer geTier);
  @Update("update glassinfo set finishnumber=ifnull(finishnumber,0)-1 where glasstype=#{glasstype}")
  void OutGlassNo(Integer glasstype);
  // 添加出片队列
  @Insert("INSERT INTO glassinfo (`flowcard`, `glasstype`, `mateid`, `glassid`, `tier`, `films`, `width`, `height`, `thickness`, `number`, `finishnumber`, `sumtier`, `measurenumber`)"
      +
      " VALUES (#{flowcard}, #{glasstype}, #{mateid}, #{glassid}, #{tier}, #{films}, #{width}, #{height}, #{thickness}, #{number}, 0, #{sumtier}, 0)")
      " VALUES (#{flowcard}, #{glasstype}, #{mateid}, #{glassid}, #{tier}, #{films}, CASE WHEN #{width} > #{height} THEN #{width} ELSE #{height} END, CASE WHEN #{height} > #{width} THEN #{width} ELSE #{height} END, #{thickness}, #{number}, 0, #{sumtier}, 0)")
  void AddGlassinfo(String flowcard, Integer glasstype, Integer mateid, String glassid, Integer tier, String films,
      Double width, Double height, Double thickness, Integer number, Integer sumtier);
@@ -327,7 +335,7 @@
  @Select("select max(glasstype)+1 from glassinfo")
  Integer SelectMaxType();
    // 最大玻璃类型
    @Select("select glasstype from glassinfo where CONCAT(width,'_',height,'_',thickness,'_',films,'_',flowcard)=#{key} limit 1")
    @Select("select glasstype from glassinfo where CONCAT(width,'_',height,'_',thickness,'_',films,'_',flowcard,'_',mateid)=#{key} limit 1")
    Integer SelectMaxTypes(String key);
    //查询所有玻璃膜系和厚度
@@ -356,7 +364,7 @@
                    +" select #{flowcard}, 0, #{number}, 0, 0, 0, now() where 0=( select count(*) from flowcard where flowcard=#{flowcard});")
  void InsertFlowcard(String flowcard, Integer number);
    @Delete("DELETE FROM queue WHERE id = (SELECT id FROM ( SELECT id FROM queue WHERE glassid = #{glassId} ORDER BY time ASC LIMIT 1) AS temp);")
    @Delete("DELETE FROM queue WHERE id = (SELECT id FROM ( SELECT id FROM queue WHERE glasstype = #{glassId} ORDER BY time ASC LIMIT 1) AS temp);")
    void DeletequeueByGlassid(String glassId);
    @Select("select count(*) from flowcard where line=#{line} and state=1 and flowcard!=#{flowcard}")
springboot-vue3/src/main/java/com/example/springboot/mapper/QueueMapper.java
@@ -20,6 +20,9 @@
    @Select("SELECT * FROM queue order by time desc limit 1")
    Queue selectLastQueue();
    @Select("SELECT * FROM queue where state<2 order by time desc limit 1")
    Queue selectLastQueue2();
    @Select("SELECT * FROM queue where state<=0")
    List<Queue> selectErrorQueues();
springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java
@@ -9,6 +9,7 @@
import com.example.springboot.component.S7control;
import com.example.springboot.entity.GlassInfo;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.StorageTask;
import com.example.springboot.entity.device.PlcParameterObject;
import com.example.springboot.mapper.AlbaniaMapper;
import com.google.common.primitives.Bytes;
@@ -48,7 +49,7 @@
        } else {
            // 判断玻璃是否进入大片笼
            if (glassInfo.getThickness() >= 15) {
            if (glassInfo.getThickness() > 4 &&glassInfo.getWidth()>= 1500) {
                cage = albaniaMapper.SelectNewCell(3, 5);
            } else {
                cage = albaniaMapper.SelectNewCell(0, 4);
@@ -58,7 +59,7 @@
            // 当返回的格子号为空时,返回400笼子已满
            if (cage != null) {
                albaniaMapper.AddCage(cage.getId(), glassid, width, height, 1, glasstype, 0, thickness,
                        glassfilms.getFilms(),glassfilms.getFlowcard(),glassfilms.getMateid());
                        glassfilms.getFilms(), glassfilms.getFlowcard(), glassfilms.getMateid());
                Mestast(glassid, 1001, cage.getId(), 1, "MESID1", 1);
                System.out.println("任务发送玻璃id:" + glassid + "起始位置:" + 1001 + "格子号:" + cage.getId() + "启动:" + 1);
                albaniaMapper.UpdateStorage(width, height, cage.getId());
@@ -72,12 +73,43 @@
        return (200);
    }
    //补充出片
    // 补充出片
    public Short mateOut() {
        double carwidth = -300;
        list<StorageTask> glassmate = albaniaMapper.SelectMateOut();
        List<StorageTask> glassmate = albaniaMapper.SelectOutTask();
        String type=glassmate.get(0).getTaskType();
        if (glassmate.size() == 0) {
            return (400);
        } else {
            for (int i = 0; i < glassmate.size(); i++) {
                GlassInfo glass = albaniaMapper.SelectGlassInfo(glassmate.get(i).getGlasstype());
                carwidth = carwidth + glass.getWidth() + 300;
                if (carwidth >= 4300&&type!=glassmate.get(i).getTaskType()) {
                    S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
                    return (200);
                } else {
                    //增加一条任务记录
                    albaniaMapper.Inserttask(1, 0, Integer.parseInt(glassmate.get(i).getShelfRack()), 2001,
                            glassmate.get(i).getGlassId(), glassmate.get(i).getGlasstype(),
                            glassmate.get(i).getFlowcard(), glassmate.get(i).getMateid(), glassmate.get(i).geTier());
                    //完成出片队列的任务
                    albaniaMapper.UpdateOutTask(glassmate.get(i).getId());
                    //发送plc任务
                    Mestast(glassmate.get(i).getGlassId(),
                            Integer.parseInt(glassmate.get(i).getShelfRack()), 2001, 0, "MESID" + (i + 1),i + 1);
                    System.out.println("发送出片队列配片任务:"+glassmate.get(i).getShelfRack());
                }
            }
            // 本次配片完成发送启动命令
            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
            MestoPlc();
        }
        return (200);
    }
    // 出片
    public Short selectout(int line) {
        GlassInfo glassmate = new GlassInfo();
@@ -85,58 +117,69 @@
        StorageCage glass = new StorageCage();
        int glassend = 0;
        double carwidth = -300;
        method = albaniaMapper.SelectMethod(line);
        if (method == null) {
            return (400);
        }
        double width = 0;
        for (int i = 1; i <= 7; i++) {
            method = albaniaMapper.SelectMethod(line);
            if (method == null) {
                return (400);
            }
            // 如果不是直通模式只出有完整配片的流程卡
            if (method.getMethod() == 0) {
                // glassmate= albaniaMapper.SelectOutGlass(1);
                //判断有数量的配片id
                // 判断有数量的配片id
                List<GlassInfo> peipianid = albaniaMapper.SelectOutGlass3(method.getFlowcard());
                if (peipianid.size() == 0) {
                    System.out.println("peipianid:"+peipianid);
                    System.out.println("peipianid:" + peipianid);
                    return (400);
                } else {
                    for (int j = 0; j < peipianid.size(); j++) {
                        // 判断配片宽度是否够上大车
                        // GlassInfo glasswidth = albaniaMapper.SelectOutGlass6(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                        // GlassInfo glasswidth =
                        // albaniaMapper.SelectOutGlass6(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                        // if (glasswidth.getWidth() <= 4300) {
                            //是否有足够的库存数量
                            List<String> peipiancage = albaniaMapper.SelectOutGlass4(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                            //是否有足够的可出片数量
                            List<String> peipiancage2 = albaniaMapper.SelectOutGlass8(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                            // System.out.println("peipiancage:"+peipiancage+peipianid.get(j).getMateid());
                            // System.out.println("peipiancage2:"+peipiancage2);
                            if (!peipiancage.contains("不足")&&!peipiancage2.contains("不足")) {
                                List<GlassInfo> chupian = albaniaMapper.SelectOutGlass7(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                                for (int k = 0; k < chupian.size(); k++) {
                                      glass = albaniaMapper.SelectCageGlass(chupian.get(k).getGlasstype());
                                      carwidth= carwidth+glass.getGlassWidth()+300;
                                      if (carwidth<=4300) {
                                          // 发送配片数据
                                    //   Mestast(chupian.get(k).getGlassid(), glass.getId(), 2001, 0, "MESID" + (k+1), k+1);
                                      albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
                                      storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                      albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                      chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
                                      }else {
                                        albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
                                        storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                        albaniaMapper.InsertOutTask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                        chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(), chupian.get(k).getMateid(), chupian.get(k).getTier());
                                      }
                        // 是否有足够的库存数量
                        List<String> peipiancage = albaniaMapper.SelectOutGlass4(peipianid.get(j).getFlowcard(),
                                peipianid.get(j).getMateid());
                        // 是否有足够的可出片数量
                        List<String> peipiancage2 = albaniaMapper.SelectOutGlass8(peipianid.get(j).getFlowcard(),
                                peipianid.get(j).getMateid());
                        // System.out.println("peipiancage:"+peipiancage+peipianid.get(j).getMateid());
                        // System.out.println("peipiancage2:"+peipiancage2);
                        if (!peipiancage.contains("不足") && !peipiancage2.contains("不足")) {
                            List<GlassInfo> chupian = albaniaMapper.SelectOutGlass7(peipianid.get(j).getFlowcard(),
                                    peipianid.get(j).getMateid());
                            for (int k = 0; k < chupian.size(); k++) {
                                glass = albaniaMapper.SelectCageGlass(chupian.get(k).getGlasstype());
                                carwidth = carwidth + glass.getGlassWidth() + 300;
                                if (carwidth <= 4300) {
                                    // 发送配片数据
                                    Mestast(chupian.get(k).getGlassid(), glass.getId(), 2001, 0, "MESID" + (k + 1),
                                            k + 1);
                                    albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                    albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                            chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                } else {
                                    albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                    //增加出片队列的任务
                                    albaniaMapper.InsertOutTask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                            chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                }
                                // 本次配片完成发送启动命令
                                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
                                return (200);// 结束
                            }
                            // 本次配片完成发送启动命令
                            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 出片任务启动
                            MestoPlc();
                            return (200);// 结束
                        }
                        // }
                        //  else {
                        //     continue;
                        // else {
                        // continue;
                        // }
                    }
                    System.out.println("未有完整配片");
@@ -145,33 +188,39 @@
            } else {
                // 直通模式时按顺序直出
                glassmate= albaniaMapper.SelectOutGlass(1);
                // glassmate = albaniaMapper.SelectOutGlass2(1);
                // glassmate = albaniaMapper.SelectOutGlass(1);
                glassmate = albaniaMapper.SelectOutGlass2(1);
                System.out.println("glassmate:"+glassmate);
                // // 获取直通模式最后一块
                // glassend = albaniaMapper.SelectOutGlassend(1);
            }
            System.err.println("出片:" + glassmate);
            if (glassmate == null && i > 1) {
                // 本次配片完成发送启动命令
                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
                // 出片任务启动
                MestoPlc();
                System.out.println("出完任务:1,任务状态:0,起始:" + glass.getId() + ",目标" + "2001");
                return (200);// 结束
            }
            if (glassmate == null) {
                // 未领取任务
                System.out.println("未领取任务:" + i);
                return (400);
                glassmate = albaniaMapper.SelectOutGlass2(1);
                if(glassmate==null){
                    System.out.println("glassmate空");
                    return (400);
                }
            } else {
                glass = albaniaMapper.SelectCageGlass(glassmate.getGlasstype());
                System.out.println("glassmate:" + glassmate  + "glass:" + glass);
                System.out.println("glassmate:" + glassmate + "glass:" + glass);
                if (glass != null) {
                    // 发送任务之前判断车上的剩余宽度是否大于此玻璃
                    width = width + glassmate.getWidth() + 300;
                    // 大于车上空余宽度时提前发送出片启动
                    if (width > 4300) {
                        // 本次配片完成发送启动命令
                        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
                        MestoPlc();
                        return (200);// 结束
                    }
                    // 发送配片数据
@@ -179,12 +228,14 @@
                    albaniaMapper.AddFinishNumber(glassmate.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                    albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, glassmate.getGlassid(),
                    glassmate.getGlasstype(), glass.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
                    // if (glassmate.getTier() == glassmate.getId() || glassmate.getTier() == glassend|| method.getMethod() == 1) {// 当配片数量等于成品小片总片数时
                    //     // 本次配片完成发送启动命令
                    //     S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
                    //     System.out.println("任务类型:1,任务状态:0,起始:" + glass.getId() + ",目标" + "2001");
                    //     return (200);// 结束
                            glassmate.getGlasstype(), glass.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
                    // if (glassmate.getTier() == glassmate.getId() || glassmate.getTier() ==
                    // glassend|| method.getMethod() == 1) {// 当配片数量等于成品小片总片数时
                    // // 本次配片完成发送启动命令
                    // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),
                    // (short) 1);// 出片任务启动
                    // System.out.println("任务类型:1,任务状态:0,起始:" + glass.getId() + ",目标" + "2001");
                    // return (200);// 结束
                    // }
                } else {
@@ -248,20 +299,14 @@
    // 下发理片任务
    public void Mestast(String glassid, int MESToPLCStart1, int MESToPLCTarget1, int MESToPLC, String address, int i) {
        // System.out.println("下发理片任务数据:");
        // System.out.println("玻璃 ID: " + glassid);
        // System.out.println("起始位置: " + MESToPLCStart1);
        // System.out.println("目标位置: " + MESToPLCTarget1);
        // System.out.println("任务类型: " + MESToPLC);
        // System.out.println("地址: " + address);
        // System.out.println("索引: " + i);
        S7control.getinstance().writeString(plcmes.getPlcParameter(address).getAddress(), glassid);// 玻璃id
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStart" + i).getAddress(),
                (short) MESToPLCStart1);// 起始位置
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget" + i).getAddress(),
                (short) MESToPLCTarget1);// 目标位置
        if (MESToPLC != 0) {
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) MESToPLC);// mes理片任务类型
            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) MESToPLC);// mes理片任务类型
            MestoPlc();
        }
    }
@@ -272,4 +317,23 @@
        return listbool;
    }
    public void MestoPlc() {
        while (true) {
            String currentValue = plcmes.getPlcParameter("MESToPLC").getValue();
            // 检查 MESToPLC 的值是否为 0
            if (currentValue.equals("1")) {
              System.out.println("发送启动字现在为1,停止循环写入");
              break; // 退出循环
            }
            // 如果不为 1,继续写入
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 任务发送字
            System.out.println("继续写入 MESToPLC,当前值:" + currentValue);
            try {
                Thread.sleep(100); // 例如每秒检查一次
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
          }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
@@ -22,6 +22,7 @@
import com.example.springboot.entity.StorageTask;
import com.example.springboot.entity.device.PlcParameterObject;
import com.example.springboot.mapper.AlbaniaMapper;
import com.example.springboot.mapper.GlassInfoMapper;
import com.example.springboot.mapper.HomeMapper;
import com.example.springboot.mapper.QueueMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -41,6 +42,8 @@
    private SpianService spianService;
    @Autowired
    private AlbaniaMapper albaniaMapper;
    @Autowired
    private GlassInfoMapper glassInfoMapper;
    public void EndTask(int types) {
        String A01glassid1 = spianService.queGlassid("DB103.128", 14).toString();
@@ -250,7 +253,9 @@
            } else {
                loadrack = storageTask.getShelfRack();
            }
            storageTask.setstorageCage(homeMapper.SelectStorageByCell(loadrack));
            // storageTask.setstorageCage(homeMapper.SelectStorageByCell(loadrack));
            storageTask.setstorageCage(homeMapper.SelectStorageByCellGlass(storageTask.getId()));
        }
        return storageTasks;
    }
@@ -259,38 +264,64 @@
    public List<GlassInfo> SelectMeasure() {
        return homeMapper.SelectMeasure();
    }
     // 查询当前膜系厚度
     public MeasureSetting SelectSetting() {
    // 查询当前膜系厚度
    public MeasureSetting SelectSetting() {
        return homeMapper.SelectMeasureSetting();
    }
     // 查询测量宽高厚膜系
     public Map StorageCageForm() {
    // 查询测量宽高厚膜系
    public Map StorageCageForm() {
        return homeMapper.SelectMeasureWidthHeight();
    }
    // 手动完成任务
    public Result FinishTask() {
    //手动结束任务
    public Result TerminateTask(int id) {
        for (int i = 1; i < 7; i++) {
            int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
            System.out.println("任务数量:"+taskcont);
            System.out.println("任务数量:" + taskcont);
            if (taskcont == 0) {
                break;
            }
            StorageTask storageTask = homeMapper.SelectStorageTaskById();// 获取任务信息
            if (storageTask.getTaskType().equals("0")) {
                System.out.println("完成进片任务:"+storageTask.getId());
                System.out.println("结束进片任务:" + storageTask.getId());
                homeMapper.FinishTask(storageTask.getId(), 2);// 完成任务
                homeMapper.DeletequeueByGlassid(storageTask.getGlasstype().toString());
                glassInfoMapper.updateGlassNumber(storageTask.getGlasstype());//减少扫描次数
            } else {
                System.out.println("结束出片任务:" + storageTask.getId());
                homeMapper.FinishTask(storageTask.getId(), 2);// 完成任务
                UpdateStroageCageByCell(Integer.parseInt(storageTask.getShelfRack()), 1);// 玻璃数量+1
                homeMapper.OutGlassNo(storageTask.getGlasstype());// 还原出片完成数量
            }
        }
        Map<String, Object> map = new HashMap<>();
        return Result.success(map);
    }
    // 手动完成任务
    public Result FinishTask() {
        for (int i = 1; i < 7; i++) {
            int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
            System.out.println("任务数量:" + taskcont);
            if (taskcont == 0) {
                break;
            }
            StorageTask storageTask = homeMapper.SelectStorageTaskById();// 获取任务信息
            if (storageTask.getTaskType().equals("0")) {
                System.out.println("完成进片任务:" + storageTask.getId());
                homeMapper.FinishTask(storageTask.getId(), 1);// 完成任务
                UpdateStroageCageByCell(Integer.parseInt(storageTask.getLoadrack()), 1);// 玻璃数量+1
                homeMapper.DeletequeueByGlassid(storageTask.getGlassId());
                homeMapper.DeletequeueByGlassid(storageTask.getGlasstype().toString());
            } else {
                System.out.println("完成出片任务:"+storageTask.getId());
                System.out.println("完成出片任务:" + storageTask.getId());
                homeMapper.FinishTask(storageTask.getId(), 1);// 完成任务
                StorageCage storageCage = homeMapper.SelectStorageByCell(storageTask.getShelfRack());
                if (storageCage.getNumber()==null||storageCage.getNumber() ==0) {
                if (storageCage.getNumber() == null || storageCage.getNumber() == 0) {
                    UpdateStroageCageByCell(Integer.parseInt(storageTask.getShelfRack()), 0);// 清除格内信息
                }
                // homeMapper.AddGlassNo(storageTask.getFlowcard(), storageTask.getMateid(), storageTask.geTier());// 添加出片完成数量
                // homeMapper.AddGlassNo(storageTask.getFlowcard(), storageTask.getMateid(),
                // storageTask.geTier());// 添加出片完成数量
            }
        }
@@ -303,18 +334,18 @@
    public Result LoseTask() {
        for (int i = 1; i < 7; i++) {
            int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
            System.out.println("任务数量:"+taskcont);
            System.out.println("任务数量:" + taskcont);
            if (taskcont == 0) {
                break;
            }
            StorageTask storageTask = homeMapper.SelectStorageTaskById();// 获取任务信息
            if (storageTask.getTaskType().equals("0")) {
                System.out.println("完成进片任务:"+storageTask.getId());
                System.out.println("完成进片任务:" + storageTask.getId());
                homeMapper.FinishTask(storageTask.getId(), 1);// 完成任务
                UpdateStroageCageByCell(Integer.parseInt(storageTask.getLoadrack()), 1);// 玻璃数量+1
                homeMapper.DeletequeueByGlassid(storageTask.getGlassId());
                homeMapper.DeletequeueByGlassid(storageTask.getGlasstype().toString());
            } else {
                System.out.println("完成出片任务:"+storageTask.getId());
                System.out.println("完成出片任务:" + storageTask.getId());
                homeMapper.FinishTask(storageTask.getId(), 1);// 完成任务
                StorageCage storageCage = homeMapper.SelectStorageByCell(storageTask.getShelfRack());
                if (storageCage.getNumber() > 1) {
@@ -387,16 +418,21 @@
        return Result.success(map);
    }
    // 修改测量信息
    // 人工匹配修改测量信息
    public Result UpdateQueue(GlassInfo glassInfo) {
        // 删除数据
        QueueMapper.DeleteQueue();
        homeMapper.AddQueue(glassInfo.getFlowcard(), glassInfo.getWidth(), glassInfo.getHeight(),
                glassInfo.getGlasstype(), glassInfo.getThickness(), glassInfo.getTier(),glassInfo.getMateid());
        Map<String, Object> map = new HashMap<>();
        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
        map.put("message", "200");
        // QueueMapper.DeleteQueue();
        int count = homeMapper.SelectQueue();
        if (count > 0) {
            homeMapper.UpdateQueue(glassInfo.getFlowcard(), glassInfo.getWidth(), glassInfo.getHeight(),
                    glassInfo.getGlasstype(), glassInfo.getThickness(), glassInfo.getTier(), glassInfo.getMateid());
            PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
            map.put("message", "200");
        }else {
            map.put("message", "300");
        }
        return Result.success(map);
    }
@@ -420,7 +456,7 @@
    }
    // 开始上片
    public Result StartChange(String flowcard,int orderstate) {
    public Result StartChange(String flowcard, int orderstate) {
        homeMapper.StartChange(flowcard, orderstate);
        Map<String, Object> map = new HashMap<>();
        int state = homeMapper.selectStartChange(flowcard);
@@ -510,7 +546,8 @@
        int count = 1;
        for (Map map : RemoveErrorData) {
            String key = map.get("base").toString() + "_" + map.get("height").toString() + "_"
                    + map.get("thickness").toString() + "_" + map.get("films").toString()+ "_" + map.get("order").toString();
                    + map.get("thickness").toString() + "_" + map.get("films").toString() + "_"
                    + map.get("order").toString() + "_" + map.get("matching").toString();
            String tierkey = map.get("order").toString() + "_" + map.get("matching").toString();
@@ -530,6 +567,7 @@
                glasstype = Integer.valueOf(value);
            }
            //
            homeMapper.AddGlassinfo(map.get("order").toString(), glasstype,
                    Integer.parseInt(map.get("matching").toString()) // 需要计算 配片ID
                    , map.get("order").toString() + "-" + count + "" // 需要计算 玻璃ID