ZengTao
2023-12-14 a446066c5f3cedc33e035b2bbc9ad36b5aa18512
调整提示框字体大小
7个文件已修改
616 ■■■■■ 已修改文件
CanadaMes-ui/src/lang/locales/en-US.json 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 335 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json
@@ -325,7 +325,14 @@
  "Unable to find whether the aluminum frame is flipped or not":"Unable to find whether the aluminum frame is flipped or not",
  "You do not have this permission":"You do not have this permission",
  "This glass is already in the Queue":"This glass is already in the Queue",
  "complete":"complete",
  "Complete":"Complete",
  "Not Allow":"Not Allow",
  "Completed":"Completed",
  "Waiting":"Waiting",
  "Deleted":"Deleted",
  "Glass State":"Glass State",
  "Absent":"Absent",
  "Approximately resettable time":"Approximately resettable time",
    "ServoManualone": {
      "A01 所在格子": "A01 Current Grid",
      "数量": "Quantity",
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -324,6 +324,7 @@
  "Deleted":"已删除",
  "Glass State":"玻璃状态",
  "Absent":"不存在",
  "Approximately resettable time":"可复位大概时间",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速",
CanadaMes-ui/src/views/home/index.vue
@@ -419,11 +419,10 @@
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible2" :title="$t('Alarm Information')">
            <el-table :data="this.alarm" border style="width: 100%;">
            <el-table :data="this.alarm" border style="width: 100%;font-size: 25px;">
                <el-table-column prop="id" :label="$t('id')"></el-table-column>
                <el-table-column prop="content" :label="$t('content')"></el-table-column>
                <el-table-column prop="timeons" :label="$t('timeon')"></el-table-column>
                <el-table-column prop="endTime" :label="$t('endTime')"></el-table-column>
            </el-table>
        </el-dialog>
@@ -635,14 +634,14 @@
                this.isAllowReordering == true ? $t('Not Allow') : $t('Allow')
            }}</el-button>
            <el-table :data="this.OutSlice" :height="700" :span-method="objectSpanMethod" border :cell-style="cellStyle"
                style="width: 100%;overflow: auto;">
                style="width: 100%;overflow: auto;font-size: 18px;">
                <el-table-column :min-width="100" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column prop="storageCage.orderId" :label="$t('Order No')"></el-table-column>
                <el-table-column prop="storageCage.listId" :label="$t('List No')"></el-table-column>
                <el-table-column prop="storageCage.boxId" :label="$t('Box No')"></el-table-column>
                <el-table-column prop="storageCage.glasswidthmm" :label="$t('Length')"></el-table-column>
                <el-table-column prop="storageCage.glassheightmm" :label="$t('Width')"></el-table-column>
                <el-table-column prop="state" :label="$t('Glass State')">
                <el-table-column :min-width="90" prop="state" :label="$t('Glass State')">
                    <template slot-scope='scope'>
                        {{ scope.row.state == 0 ? $t('Waiting') : scope.row.state == 1 ? $t('Outing') : scope.row.state == 2 ? $t('Completed') :scope.row.state == 3 ? $t('Absent') :$t('Deleted') }}
                    </template>
@@ -729,7 +728,7 @@
            </el-table>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormCountDown" :title="$t('Glass information corresponding to aluminum frame')" top="5vh">
        <el-dialog :visible.sync="dialogFormCountDown" :title="$t('Approximately resettable time')" top="5vh">
            <div style="font-size: 500px;text-align: center;">
                {{ this.CountDowns }}
            </div>
@@ -827,11 +826,13 @@
            OutingQueue: true,
            OrderInfo: true,
            CageDetails: true,
            CountDowns:0
            CountDowns:0,
            D01RequestState:false
        };
    },
    created() {
        this.load();
        this.init();
    }
    ,
@@ -878,10 +879,12 @@
                        this.dialogFormVisible2=true;
                    }
                    //复位倒计时
                    if (obj.countdown[0]== true&&this.CountDowns==0) {
                    if (obj.countdown[0] == true&&this.CountDowns==0) {
                        this.CountDown();
                    }
                    //是否有进片请求
                    this.D01RequestState=obj.D01RequestState[0];
                    //是否允许出片
                    this.isAllowQueue = obj.isAllowQueue[0];
                    //出片队列
@@ -914,8 +917,14 @@
                        this.loadglassheight1 = 70;
                        this.form5 = obj.form3[0];
                        this.showform3();
                        this.Sizerange(this.form5, 3);
                        this.glassid1 = "";
                        if(this.D01RequestState==true){
                            this.Sizerange(this.form5, 3);
                        }else{
                            this.disabled1=true;
                        }
                    } else {
                        if (this.glassid1 == "") {
                            this.DeleteBarcodeGlass();
@@ -1689,8 +1698,7 @@
                    } else {
                        this.disabled = false;
                    }
                    console.log(position,this.isConfirm);
                    if (position == 3 && this.isConfirm == true) {
                    if (position == 3 && this.isConfirm == true&&this.D01RequestState==true) {
                        this.InsertQueueGlass(1);
                    }
                }
@@ -1710,17 +1718,17 @@
        },
        CountDown(){
            //50秒倒数计时
            let count = 50;
            let count = 45;
            let timer = setInterval(
                () => {
                    if (count > 0) {
                        this.countDown = count;
                        this.CountDowns = count;
                        count--;
                        this.CountDowns=count;
                    }
                    else {
                        clearInterval(timer);
                        this.countDown = 0;
                        this.CountDowns = 0;
                        this.dialogFormCountDown=false;
                    }
                },
                1000
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -42,6 +42,7 @@
        while (this != null) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
@@ -108,33 +109,37 @@
            }
            // 获取出片队列信息
            List<Out_slice> listoutslice = outSliceServive.SelectProductionqueue();
            // List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
            // for (Out_slice out_slice : listoutslice) {
            // out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
            // }
            jsonObject.append("listoutslice", listoutslice);
            // 获取当前出片队列状态
            jsonObject.append("isAllowQueue", Plchome.isAllowQueue);
            // 获取铝框idDB106.DBW64
            String frameno=spianService.queGlassid("DB103.270",14).toString();
            if(frameno!=Plchome.FrameNo&&frameno!=""){
            Plchome.FrameNo=frameno;
            }
            try {
            north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
            // String frameno=spianService.queGlassid("DB103.270",14).toString();
            // if(frameno!=Plchome.FrameNo&&frameno!=""){
            // Plchome.FrameNo=frameno;
            // }
            // try {
            // north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            // } catch (SQLException e) {
            // // TODO Auto-generated catch block
            // e.printStackTrace();
            // }
            // 是否需要人工确认上片玻璃
            jsonObject.append("isConfirm", isConfirm);
            //获取进片请求状态
            List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1);
            boolean D01RequestState = D01Request.contains((short) 1);
            // boolean D01RequestState =true;
            jsonObject.append("D01RequestState", D01RequestState);
            //复位倒计时
            // 地址104.9.6
            List<Boolean> countdown = S7control.getinstance().ReadBits("104.9.6", 71);
            jsonObject.append("countdown", countdown);
            List<Boolean> countdown = S7control.getinstance().ReadBits("DB104.9.6", 1);
            for (Boolean countdowns : countdown) {
                jsonObject.append("countdown", countdowns);
            }
            // jsonObject.append("countdown", true);
            // 铝框线交互
            // //铝框id请求字
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -17,25 +17,25 @@
        //
        System.out.println("启动完成");
new PlcHold().start();
 new PlcHold().start();
        new Plchome().start();
        new Plcalarm().start();
//         new Plcalarm().start();
        new Plcsign().start();
//         new Plcsign().start();
        new Plcaction().start();
        new Plcstate().start();
        new PlcPositioning1().start();
//         new Plcaction().start();
//         new Plcstate().start();
//         new PlcPositioning1().start();
        new PlcParameter2().start();
//         new PlcParameter2().start();
        new PLCAutomaticParameterSetting().start();
//         new PLCAutomaticParameterSetting().start();
        new PlcManualonePosition().start();
        new PlcManualonePosition2().start();
        new PlcServoManualone().start();
        new PLCManualJog().start();
//         new PlcManualonePosition().start();
//         new PlcManualonePosition2().start();
//         new PlcServoManualone().start();
//         new PLCManualJog().start();
    }
}
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -1,6 +1,6 @@
package com.example.springboot.mapper;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.*;
import com.example.springboot.entity.Glass;
import com.example.springboot.entity.StorageCage;
@@ -14,166 +14,221 @@
@Mapper
public interface SpianMapper {
    //判断相邻笼子是否有空格
    // 判断相邻笼子是否有空格
    @Select("select COUNT(if(a.state1=0,cell,null))as cell,ROUND(id/2)as id from (select *,max(state)as state1 from storage_cage a  GROUP BY cage,cell)as a where (a.cage=#{cage1}-1 or a.cage=#{cage1}+1)and if(a.cage<6,a.cage>0 and a.cage<6,a.cage>5) and disabled=0 GROUP BY cage ORDER BY cell desc LIMIT 1")
     int selectCage(int  cage1);
     //@Select("(select*from storage_cage as a  where a.state=0 and cage%2=0 ORDER BY id LIMIT 1)union (select a.* from storage_cage a inner join  (select cage,if(shu2=1,shu3,shu5) as gezi from ( select  cage, count(case when state1=1 and state2=0 then cell else null end)as shu1,  count(case when state1=0 then cell else null end) as shu2, min(case when state1=1 and state2=0 then cell else null end) as shu3, min(case when state1=0 then cell else null end) as shu4, min(case when state1=0 or state2=0 then cell else null end) as shu5 from  (select *,max(state) as state1,min(state) as state2 from storage_cage group by cage,cell) as a where  cage%2!=0  GROUP BY cage HAVING shu2>1 or (shu2=1 and shu1>0)  ) as sss limit 1)as b on a.cage=b.cage and a.cell=b.gezi and a.state=0 order by tier limit 1) ORDER BY id LIMIT 1;")
    //获取订单号排序的空订单笼子
     @Select("select a.cage,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,disabled from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,cage asc; ")
     List<StorageCage> selectAll(String orderids);
    //获取判断该格子是否需要把外片推入内片位置
     @Select("select state from storage_cage where  cage=#{cage} and cell=#{cell} and tier=1;")
     int selectcell(int cage,int cell);
     //判断该笼子是否有合适宽度空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and disabled=0 and width>=#{width} ORDER BY cell asc,tier asc LIMIT 1")
     StorageCage selectCage1(int  cage1,int cell,double width);
     //判断笼子内玻璃数
     @Select("select COUNT(tier)as tier from storage_cage where  cage=#{cage} and cell=#{cell} and state!=0;")
     int selectsum(int cage,int cell);
     //完成进片中的玻璃状态
     @Update("update storage_cage set state=#{state} where glass_id=#{glassid};")
     void UpdateCageOver(String glassid,int state);
    int selectCage(int cage1);
     //获取玻璃信息
     @Select("select *,ordernumber ,glasslength_mm as glasslengthmm,glassheight_mm as glassheightmm,barcode,listnumber,boxnumber,glasslength,glassheight from north_glass_buffer1 where barcode=#{glassid}")
     north_glass_buffer1 selectGlass(String glassid);
    //出片任务查询
    // @Select("(select*from storage_cage as a where a.state=0 and cage%2=0 ORDER BY
    // id LIMIT 1)union (select a.* from storage_cage a inner join (select
    // cage,if(shu2=1,shu3,shu5) as gezi from ( select cage, count(case when
    // state1=1 and state2=0 then cell else null end)as shu1, count(case when
    // state1=0 then cell else null end) as shu2, min(case when state1=1 and
    // state2=0 then cell else null end) as shu3, min(case when state1=0 then cell
    // else null end) as shu4, min(case when state1=0 or state2=0 then cell else
    // null end) as shu5 from (select *,max(state) as state1,min(state) as state2
    // from storage_cage group by cage,cell) as a where cage%2!=0 GROUP BY cage
    // HAVING shu2>1 or (shu2=1 and shu1>0) ) as sss limit 1)as b on a.cage=b.cage
    // and a.cell=b.gezi and a.state=0 order by tier limit 1) ORDER BY id LIMIT 1;")
    // 获取订单号排序的空订单笼子
    @Select("select a.cage,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,disabled from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,cage asc; ")
    List<StorageCage> selectAll(String orderids);
    // 获取判断该格子是否需要把外片推入内片位置
    @Select("select state from storage_cage where  cage=#{cage} and cell=#{cell} and tier=1;")
    int selectcell(int cage, int cell);
    // 判断该笼子是否有合适宽度空格
    @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and disabled=0 and width>=#{width} ORDER BY cell asc,tier asc LIMIT 1")
    StorageCage selectCage1(int cage1, int cell, double width);
    // 判断笼子内玻璃数
    @Select("select COUNT(tier)as tier from storage_cage where  cage=#{cage} and cell=#{cell} and state!=0;")
    int selectsum(int cage, int cell);
    // 完成进片中的玻璃状态
    @Update("update storage_cage set state=#{state} where glass_id=#{glassid} and state=3;")
    void UpdateCageOver(String glassid, int state);
    @Update("update storage_cage set state=#{state} where glass_id=#{glassid} and state=2;")
    void UpdateCageadd(String glassid, int state);
    // 获取玻璃信息
    @Select("select *,ordernumber ,glasslength_mm as glasslengthmm,glassheight_mm as glassheightmm,barcode,listnumber,boxnumber,glasslength,glassheight from north_glass_buffer1 where barcode=#{glassid}")
    north_glass_buffer1 selectGlass(String glassid);
    // 出片任务查询
    @Select("select COUNT(order_id)order_id,cage,cell,glasswidth,tier,ROUND(id/2)as prcId,glass_id from storage_cage a where a.order_id=#{orderId} and disabled=0 and state=1 GROUP BY cage,cell ORDER BY cage desc,order_id desc,cell desc,glasswidth desc limit 1")
     StorageCage selectOut(String  orderId);
    // @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
    //  StorageCage selectOut(String  orderId);
    //按玻璃ID出片任务查询
    StorageCage selectOut(String orderId);
    // @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id
    // from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage
    // desc,tier desc,cell desc LIMIT 1")
    // StorageCage selectOut(String orderId);
    // 按玻璃ID出片任务查询
    @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id from storage_cage as a where a.glass_id=#{glassid} and state=1 and disabled=0 order by cage desc,tier desc,cell desc LIMIT 1")
     StorageCage selectOut2(String  glassid);
    StorageCage selectOut2(String glassid);
    //判断出片为1时,是否可直接出片
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state=1")
     int selectGlassState(int  cage,int cell);
    // 判断出片为1时,是否可直接出片
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state!=0")
    int selectGlassState(int cage, int cell);
     //判断该调拨的笼子
     @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),cell desc  limit 1;")
     StorageCage selectGlassCage(int cage,double width,int cage1,int cage2);
    // 判断该调拨的笼子
    @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),cell desc  limit 1;")
    StorageCage selectGlassCage(int cage, double width, int cage1, int cage2);
    //删除笼子信息(出片)
    // 删除笼子信息(出片)
    @Update("update storage_cage as a set state=#{state},glass_id=null,order_id=null,glasswidth=0,a.glassheight=null,a.glasswidthmm=null,a.glassheightmm=null,a.listid=null,a.boxid=null where glass_id=#{glassid} and state=3;")
    void UpdataGlassCage(String glassid,int state);
     //改变玻璃状态为出片中
    @Update("update storage_cage as a set state=#{state} where glass_id=#{glassid};")
    void UpdataGlassCageState(String glassid,int state);
    void UpdataGlassCage(String glassid, int state);
    //修改笼子信息(进片)
    // 改变玻璃状态为出片中
    @Update("update storage_cage as a set state=#{state} where glass_id=#{glassid};")
    void UpdataGlassCageState(String glassid, int state);
    // 修改笼子信息(进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where id=#{id};")
    void UpdataAddCage(String orderid,String glassid,double width,int cage,int cell,int id,int state);
    void UpdataAddCage(String orderid, String glassid, double width, int cage, int cell, int id, int state);
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{glass.ordernumber},glasswidth=#{glass.glasslengthmm},glassheight=#{glass.glassheightmm},glasswidthmm=#{glass.glasslength},glassheightmm=#{glass.glassheight},listid=#{glass.listnumber},boxid=#{glass.boxnumber} where id=#{id};")
    void UpdataAddCage2(String orderid,String glassid,north_glass_buffer1 glass,int cage,int cell,int id,int state);
     //修改笼子信息(多片进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where cage=#{cage} and cell=#{cell} and tier=#{tier};")
    void UpdataAddqueCage(String orderid,String glassid,double width,int cage,int cell,int tier,int state);
    //修改同笼子格子宽度
     @Update("update storage_cage set width=width-#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataAddCage1(double width,int cage,int cell);
    //修改同笼子格子宽度
    void UpdataAddCage2(String orderid, String glassid, north_glass_buffer1 glass, int cage, int cell, int id,
            int state);
     @Update("update storage_cage set state=#{state} where   state=#{oldstate};")
    void UpdataAddCageState(int state,int oldstate);
    //修改同笼子格子宽度(出片)
     @Update("update storage_cage set width=width+#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataOutCage1(double width,int cage,int cell);
    //调拨更换笼子信息
    // 修改笼子信息(多片进片)
    @Update("update storage_cage set state=#{state},glass_id=#{glassid},order_id=#{orderid},glasswidth=#{width} where cage=#{cage} and cell=#{cell} and tier=#{tier};")
    void UpdataAddqueCage(String orderid, String glassid, double width, int cage, int cell, int tier, int state);
    // 修改同笼子格子宽度
    @Update("update storage_cage set width=width-#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataAddCage1(double width, int cage, int cell);
    // 修改同笼子格子宽度
    @Update("update storage_cage set state=#{state} where   state=#{oldstate};")
    void UpdataAddCageState(int state, int oldstate);
    // 修改同笼子格子宽度(出片)
    @Update("update storage_cage set width=width+#{width} where   cage=#{cage} and cell=#{cell};")
    void UpdataOutCage1(double width, int cage, int cell);
    // 调拨更换笼子信息
    @Update("update storage_cage as a,(select*from storage_cage b where b.cage=#{cage} and b.cell=#{cell} and b.tier=#{tier})as b set a.glass_id=b.glass_id,a.order_id=b.order_id,a.state=1,a.glasswidth=b.glasswidth,a.glassheight=b.glassheight,a.glasswidthmm=b.glasswidthmm,a.glassheightmm=b.glassheightmm,a.listid=b.listid,a.boxid=b.boxid where a.id=#{id1}")
    void UpdateDBCage(int id1,int cage,int cell,int tier);
    // @Insert("insert into user(name, date, address, user_no) values (#{name}, #{date}, #{address}, #{userNo})")
    void UpdateDBCage(int id1, int cage, int cell, int tier);
    // @Insert("insert into user(name, date, address, user_no) values (#{name},
    // #{date}, #{address}, #{userNo})")
    // void insert (Spian spian);
    //新增任务表
    // 新增任务表
    @Insert("INSERT INTO `canadames`.`storage_task`(`task_type`, `task_state`, `shelf_rack`, `load_rack`,start_time,glass_id,count) VALUES (#{tasktype},#{taskstate},#{shelfrack},#{loadrack},now(),#{glassid},#{count});")
    void Inserttask(int tasktype,int taskstate,int shelfrack,int loadrack,String glassid,int count);
    //修改任务表
    void Inserttask(int tasktype, int taskstate, int shelfrack, int loadrack, String glassid, int count);
    // 修改任务表
    @Update("update storage_task set task_state=#{state} where task_type=#{type} and task_state=0;")
    void Updatetask(int state,int type);
    //修改任务表
    void Updatetask(int state, int type);
    // 修改任务表
    @Update("update storage_task set task_state=1 where  task_state=0 and glass_id=#{glassid};")
    void UpdatetaskOut(String glassid);
    //查询按订单出片
    // 查询按订单出片
    @Select("select order_id state from order_out where state=0")
    String  SelectOrderout();
    //内外片调换
    String SelectOrderout();
    // 内外片调换
    @Update("update storage_cage as a,(select*from storage_cage b where b.cage=#{cage} and b.cell=#{cell} and b.tier=1)as b set a.glass_id=b.glass_id,a.order_id=b.order_id,a.state=1,a.glasswidth=b.glasswidth,a.glassheight=b.glassheight,a.glasswidthmm=b.glasswidthmm,a.glassheightmm=b.glassheightmm,a.listid=b.listid,a.boxid=b.boxid where a.cage=#{cage} and a.cell=#{cell} and a.tier=2")
    void UpdateDBCage1(int cage,int cell);
    //清除内片数据
    void UpdateDBCage1(int cage, int cell);
    // 清除内片数据
    @Update("update storage_cage a set glass_id='',order_id='',state=0,glasswidth=0,glassheight=0,glasswidthmm=0,glassheightmm=0,listid=null,boxid=null where a.cage=#{cage} and a.cell=#{cell} and a.tier=1;")
    void UpdateDBCage2(int cage,int cell);
    //判断是否有调拨完后出片的任务
    void UpdateDBCage2(int cage, int cell);
    // 判断是否有调拨完后出片的任务
    @Select("select COUNT(*)as id,glass_id as barcode from storage_task where (task_type=1 or task_type=2) and task_state=0;")
    north_glass_buffer1 SelectDBOut();
    //根据笼子格子层数获取玻璃id
     @Select("select glass_id from storage_cage where cage=#{cage} and cell=#{cell} and tier=2;")
     String SelectGlassid(int cage,int cell);
     //判断有几块玻璃还在出片中
     @Select("SELECT COUNT(*) FROM `storage_cage` where state=3;")
     Integer Selectoutstate();
     //判断队列表是否有该玻璃
     @Select("select COUNT(*) from queue where glassid=#{glassid} and state=1;")
     int Selectquecount(String glassid);
     //更新进片队列
     @Update("update queue set glassid=#{glassid},orderid=#{orderid},listid=#{listid},boxid=#{boxid},state=#{state},glasswidthmm=#{glasswidthmm},glassheightmm=#{glassheightmm},glasswidth=#{glasswidth},glassheight=#{glassheight} where type=#{type};")
     void Updatequeue(String glassid,String orderid,String listid,String boxid,int state,String glasswidth,String glassheight,String glasswidthmm,String  glassheightmm,int type);
     //完成进片队列任务
     @Update("update queue set state=#{state} where glassid=#{glassid};")
     void overqueue(String glassid,int state);
     //更换任务队列
     @Update("update queue set state=#{state} where glassid=#{glassid} and type=#{type};")
     void overqueue2(String glassid,int state,int type);
     //获取任务序列
     @Select("select glassid,orderid,width,type from queue where state=#{state}")
     StorageCage SelectQueue(int state);
     //获取序列表的玻璃宽
     @Select("select sum(width)+400 as width,orderid from queue where state=0 limit 1")
     StorageCage SelectQueueWidth();
    //判断该笼子是否有合适完整空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width,max(state)state1 from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} HAVING state1=0 ORDER BY cell asc,tier desc LIMIT 1")
     StorageCage selectqueCage1(int  cage1,int cell,double width);
     //获取序列表的玻璃
     @Select("select glassid as barcode,orderid as ordernumber,width as glasslengthmm from queue where state=0 and type=#{type}")
     north_glass_buffer1 SelectQueueGlass(int type);
     //多片出库清除一整个空格
     @Update("update storage_cage set glass_id='',order_id='',glasswidth=0,width=2750,state=0 where cage=#{cage} and cell=#{cell}")
     void UpdatequeOut(int cage,int cell);
     //判断序列表里的玻璃是否是同一订单
     @Select("select  COUNT(distinct orderid) from queue ")
     int SelectQueOrder();
     //寻找可以多片出片的玻璃
     @Select("select cage,cell,ROUND(id/2)as prcId,width,count(glass_id)shu from storage_cage where order_id=#{orderid} and (cage!=#{cage} or cell!=#{cell}) GROUP BY cage,cell HAVING shu=1 ORDER BY cage desc,cell desc limit 1")
     StorageCage SelectQueout(String orderid,int cage,int cell);
     //获取进片队列id
     @Select("select glassid from queue where type=1")
     String Selectqueueid();
     //获取进片队列是否有待入库
     @Select("select state from queue where type=1")
     int Selectqueuestate();
     //判断铝框出片表是否有玻璃需要出
     @Select("SELECT glassid FROM `out_slice` where state=0  order by sequence,id  limit 1;")
     String SelectOutSlice();
     //判断铝框出片表是否有玻璃正在出片中
     @Select("SELECT count(*) FROM `out_slice` where state=1;")
     int SelectOutSliceshu();
     //更新出片队列的任务状态
     @Update("update out_slice set state=#{state} where glassid=#{glassid}")
     void OverOutSlice(String glassid,int state);
     //获取玻璃的铝框id
     @Select("select barcode from out_slice where glassid=#{glassid};")
     String SelectBarcode(String glassId);
     //获取出片队列的铝框是否全部完成
     @Select("select MIN(state) from out_slice where barcode=#{barcode};")
     int SelectOverState(String barcode);
     //删除出片队列该铝框的id
     @Delete("delete from out_slice where barcode=#{barcode};")
     void DeleteQueue(String barcode);
     //把该进片的玻璃更新到出片队列
     @Select("update out_slice set state=0 where glassId=#{glassId} and state=3")
     void UpdateAddQueue(String glassId);
}
    // 根据笼子格子层数获取玻璃id
    @Select("select glass_id from storage_cage where cage=#{cage} and cell=#{cell} and tier=2;")
    String SelectGlassid(int cage, int cell);
    // 判断有几块玻璃还在出片中
    @Select("SELECT COUNT(*) FROM `storage_cage` where state=3;")
    Integer Selectoutstate();
    // 判断队列表是否有该玻璃
    @Select("select COUNT(*) from queue where glassid=#{glassid} and state=1;")
    int Selectquecount(String glassid);
    // 更新进片队列
    @Update("update queue set glassid=#{glassid},orderid=#{orderid},listid=#{listid},boxid=#{boxid},state=#{state},glasswidthmm=#{glasswidthmm},glassheightmm=#{glassheightmm},glasswidth=#{glasswidth},glassheight=#{glassheight} where type=#{type};")
    void Updatequeue(String glassid, String orderid, String listid, String boxid, int state, String glasswidth,
            String glassheight, String glasswidthmm, String glassheightmm, int type);
    // 完成进片队列任务
    @Update("update queue set state=#{state} where glassid=#{glassid};")
    void overqueue(String glassid, int state);
    // 更换任务队列
    @Update("update queue set state=#{state} where glassid=#{glassid} and type=#{type};")
    void overqueue2(String glassid, int state, int type);
    // 获取任务序列
    @Select("select glassid,orderid,width,type from queue where state=#{state}")
    StorageCage SelectQueue(int state);
    // 获取序列表的玻璃宽
    @Select("select sum(width)+400 as width,orderid from queue where state=0 limit 1")
    StorageCage SelectQueueWidth();
    // 判断该笼子是否有合适完整空格
    @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width,max(state)state1 from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} HAVING state1=0 ORDER BY cell asc,tier desc LIMIT 1")
    StorageCage selectqueCage1(int cage1, int cell, double width);
    // 获取序列表的玻璃
    @Select("select glassid as barcode,orderid as ordernumber,width as glasslengthmm from queue where state=0 and type=#{type}")
    north_glass_buffer1 SelectQueueGlass(int type);
    // 多片出库清除一整个空格
    @Update("update storage_cage set glass_id='',order_id='',glasswidth=0,width=2750,state=0 where cage=#{cage} and cell=#{cell}")
    void UpdatequeOut(int cage, int cell);
    // 判断序列表里的玻璃是否是同一订单
    @Select("select  COUNT(distinct orderid) from queue ")
    int SelectQueOrder();
    // 寻找可以多片出片的玻璃
    @Select("select cage,cell,ROUND(id/2)as prcId,width,count(glass_id)shu from storage_cage where order_id=#{orderid} and (cage!=#{cage} or cell!=#{cell}) GROUP BY cage,cell HAVING shu=1 ORDER BY cage desc,cell desc limit 1")
    StorageCage SelectQueout(String orderid, int cage, int cell);
    // 获取进片队列id
    @Select("select glassid from queue where type=1")
    String Selectqueueid();
    // 获取进片队列是否有待入库
    @Select("select state from queue where type=1")
    int Selectqueuestate();
    // 判断铝框出片表是否有玻璃需要出
    @Select("SELECT glassid FROM `out_slice` where state=0  order by sequence,id  limit 1;")
    String SelectOutSlice();
    // 判断铝框出片表是否有玻璃正在出片中
    @Select("SELECT count(*) FROM `out_slice` where state=1;")
    int SelectOutSliceshu();
    // 更新出片队列的任务状态
    @Update("update out_slice set state=#{state} where glassid=#{glassid}")
    void OverOutSlice(String glassid, int state);
    // 获取玻璃的铝框id
    @Select("select barcode from out_slice where glassid=#{glassid};")
    String SelectBarcode(String glassId);
    // 获取出片队列的铝框是否全部完成
    @Select("select MIN(state) from out_slice where barcode=#{barcode};")
    int SelectOverState(String barcode);
    // 删除出片队列该铝框的id
    @Delete("delete from out_slice where barcode=#{barcode};")
    void DeleteQueue(String barcode);
    // 把该进片的玻璃更新到出片队列
    @Select("update out_slice set state=0 where glassId=#{glassId} and state=3")
    void UpdateAddQueue(String glassId);
}
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -1,4 +1,5 @@
package com.example.springboot.service;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -37,10 +38,10 @@
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.0");// 进片车起始位置
        adddresslist.add("DB105.2");// 进片车目标位置
        adddresslist.add("DB105.4");// 进片玻璃宽
        adddresslist.add("DB105.8");//进片笼内已有玻璃数
        adddresslist.add("DB105.4");// 进片玻璃宽
        adddresslist.add("DB105.8");// 进片笼内已有玻璃数
        adddresslist.add("DB105.16");// 进片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // String orderid="A001";
@@ -64,7 +65,7 @@
            }
            // 判断选中笼子是否有合适宽度空格
            // 有合适空格时进片
            if (cages1 != null && cages >= 1&&storageCage2.getDisabled()==0) {
            if (cages1 != null && cages >= 1 && storageCage2.getDisabled() == 0) {
                ids = cages1.getId();// 数据库ID
                tiers = cages1.getTier();// 内外片
                cells = cages1.getCell();// 格子号
@@ -73,37 +74,36 @@
                widths = glasslist.getglasslengthmm();
                // 执行进片
                datas.add((short) 1000);//起始位置
                datas.add((short) prcid);//目标位置
                datas.add((short) widths);//进片玻璃宽
                datas.add((short) prctier); //玻璃数
                datas.add((short) 1);//任务启动
                //获取该格子内是否有玻璃
                int cellint=spianMapper.selectcell(cage1,cells);
                if(cellint==1){
                    //将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCage(ids, cage1, cells,1);
                    //将新入的玻璃存入外片
                    //spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids-1, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1,cells, ids-1, 2);
                datas.add((short) 1000);// 起始位置
                datas.add((short) prcid);// 目标位置
                datas.add((short) widths);// 进片玻璃宽
                datas.add((short) prctier); // 玻璃数
                datas.add((short) 1);// 任务启动
                // 获取该格子内是否有玻璃
                int cellint = spianMapper.selectcell(cage1, cells);
                if (cellint == 1) {
                    // 将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCage(ids, cage1, cells, 1);
                    // 将新入的玻璃存入外片
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids-1, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids - 1, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(),prctier);// 新增任务
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("汇报时任务|" + datas);
                }else{
                 // 数据库修改笼子表新增一条玻璃
                //spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1,cells, ids, 2);
                spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(),prctier);// 新增任务
                S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("汇报时任务|" + datas);
                    System.out.println("出片任务|" + datas);
                } else {
                    // 数据库修改笼子表新增一条玻璃
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("出片任务|" + datas);
                // S7control.getinstance().WriteByte("DB105.16",glassid);
                    // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
                outmesid(glassid,"DB105.20");
                outmesid(glassid, "DB105.20");
                return (200);
            }
@@ -113,11 +113,10 @@
    }
    public Short selectout2(String glassid) {
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        char[] a=glassid.toCharArray();
        char[] a = glassid.toCharArray();
        adddresslist.add("DB105.10");// 出片车起始位置
        adddresslist.add("DB105.12");// 出片车目标位置
@@ -148,19 +147,19 @@
            datas.add((short) 1000);
            datas.add((short) state);
            datas.add((short) 1);
            spianMapper.OverOutSlice(glassid, 1);//更新出片队列任务状态为进行中
            spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务状态为进行中
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
            spianMapper.UpdataGlassCageState(glassid,3);//更改笼子表的玻璃状态
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid,state);// 新增任务
            spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, state);// 新增任务
            // int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
            if (state == 2) {
                spianMapper.UpdateDBCage1(cage, cell);// 将内片数据更新到外片里
                spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            }
            System.out.println("出片任务|" + datas);
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            outmesid(glassid,"DB105.34");// 派发出片ID
            outmesid(glassid, "DB105.34");// 派发出片ID
            return (200);// 结束
        } else {
@@ -173,12 +172,13 @@
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.OverOutSlice(glassid, 1);//更新出片队列任务状态为进行中
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid,1);// 新增任务
                spianMapper.OverOutSlice(glassid, 1);// 更新出片队列任务状态为进行中
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, 1);// 新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCageState(glassid,3);//更改笼子表的玻璃状态
                spianMapper.OverOutSlice(glassid,2);//完成出片队列任务
                outmesid(glassid,"DB105.34");// 派发出片ID
                spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
                spianMapper.OverOutSlice(glassid, 2);// 完成出片队列任务
                System.out.println("出片任务|" + datas);
                outmesid(glassid, "DB105.34");// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                return (200);// 结束
@@ -203,16 +203,17 @@
                    datas.add((short) 1);
                    // 更换玻璃的笼子
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.UpdateDBCage(ids, cage, cell,2);// 将原格子数据更新到新格子里
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCageState(glassids,3);//更改笼子表的玻璃状态
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassid,2);// 新增调度任务
                    //spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    //spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassid, 2);// 新增调度任务
                    // spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    return (200); // 结束
                } else {// 笼子号大于5时
@@ -231,16 +232,17 @@
                    datas.add((short) 2);
                    datas.add((short) 1);
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassid,2);// 新增调度任务
                    //spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    spianMapper.UpdateDBCage(ids, cage, cell,2);// 将原格子数据更新到新格子里
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassid, 2);// 新增调度任务
                    // spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增出片任务
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCageState(glassids,3);//更改笼子表的玻璃状态
                    //spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    return (200);// 结束
                }
@@ -248,57 +250,67 @@
        }
    }
    //派发任务玻璃id
    public void outmesid(String glassid,String address) {
        //System.out.println("outmesid:" + glassid);
    // 派发任务玻璃id
    public void outmesid(String glassid, String address) {
        // System.out.println("outmesid:" + glassid);
        List<Byte> glassidlist = new ArrayList();
        char ds[]=glassid.toCharArray();
        char ds[] = glassid.toCharArray();
        for (char iditem : ds) {
            glassidlist.add((byte)iditem);
            glassidlist.add((byte) iditem);
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    }
    //获取地址内的玻璃id转字符串
    public StringBuilder queGlassid(String address,int count) {
    // 获取地址内的玻璃id转字符串
    public StringBuilder queGlassid(String address, int count) {
        StringBuilder writedstrIdOut = new StringBuilder();
        byte[] writedglassidbytesOut = S7control.getinstance().ReadByte(address, count);
      if (writedglassidbytesOut != null) {
        // 获取玻璃id
        for (byte iditem : writedglassidbytesOut) {
          writedstrIdOut.append((char) iditem);
        if (writedglassidbytesOut != null) {
            // 获取玻璃id
            for (byte iditem : writedglassidbytesOut) {
                writedstrIdOut.append((char) iditem);
            }
        }
      }
        return writedstrIdOut;
    }
    //char数组转化成bit数组
       public static byte[] toBytes(char[] chars) {
    // char数组转化成bit数组
    public static byte[] toBytes(char[] chars) {
        String s = new String(chars);
        return s.getBytes(StandardCharsets.UTF_8);
    }
    //bit数组转化成char数组
    // bit数组转化成char数组
    public static char[] toChars(byte[] bytes) {
        String s = new String(bytes, StandardCharsets.UTF_8);
        return s.toCharArray();
    }
    //判断集合里是否为1
    public  boolean listbool(String address) {
       List<Short> list = S7control.getinstance().ReadWord(address, 1);//返回为ture时为1
       boolean listbool = list.contains((short) 1);
    // 判断集合里是否为1
    public boolean listbool(String address) {
        List<Short> list = S7control.getinstance().ReadWord(address, 1);// 返回为ture时为1
        boolean listbool = list.contains((short) 1);
        return listbool;
    }
    //根据玻璃id完成在进行中的任务
    public void overtask(String glassid){
    // 根据玻璃id完成在进行中的任务
    public void overtask(String glassid) {
        spianMapper.UpdateCageOver(glassid, 0);// 更改笼子表出片状态
        spianMapper.UpdatetaskOut(glassid); // 完成上一次出片或者进片任务
        spianMapper.OverOutSlice(glassid, 2);// 完成出片队列任务
        spianMapper.UpdataGlassCage(glassid,0);// 清除出片格子玻璃信息
        String barcode=spianMapper.SelectBarcode(glassid);//获取该玻璃的铝框id
        spianMapper.UpdateAddQueue(glassid);//把进片的玻璃更新到出片队列中
        int barcodeState=spianMapper.SelectOverState(barcode);//获取该铝框的状态
        if(barcodeState==2){//当该铝框所有的玻璃都是完成状态时删除在出片队列的数据
            spianMapper.DeleteQueue(barcode);
        spianMapper.UpdataGlassCage(glassid, 0);// 清除出片格子玻璃信息
        spianMapper.UpdateCageadd(glassid,1);
        String barcode = spianMapper.SelectBarcode(glassid);// 获取该玻璃的铝框id
        spianMapper.UpdateAddQueue(glassid);// 把进片的玻璃更新到出片队列中
        if (barcode != null) {
            int barcodeState = spianMapper.SelectOverState(barcode);// 获取该铝框的状态
            if (barcodeState == 2) {// 当该铝框所有的玻璃都是完成状态时删除在出片队列的数据
                spianMapper.DeleteQueue(barcode);
            }
        }
    }
}