ZengTao
2023-12-14 a446066c5f3cedc33e035b2bbc9ad36b5aa18512
调整提示框字体大小
7个文件已修改
202 ■■■■ 已修改文件
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 34 ●●●●● 补丁 | 查看 | 原始文档 | 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 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 26 ●●●● 补丁 | 查看 | 原始文档 | 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();
    }
    ,
@@ -881,6 +882,8 @@
                    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;
                        count--;
                        this.CountDowns=count;
                        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
@@ -21,21 +21,21 @@
        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;
@@ -18,23 +18,39 @@
    @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*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};")
    @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}")
@@ -43,14 +59,17 @@
    //出片任务查询
    @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")
    // @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);
    //判断出片为1时,是否可直接出片
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state=1")
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state!=0")
     int selectGlassState(int  cage,int cell);
     //判断该调拨的笼子
@@ -60,6 +79,7 @@
    //删除笼子信息(出片)
    @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);
@@ -69,10 +89,13 @@
    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);
    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);
@@ -80,100 +103,132 @@
     @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})")
    // @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);
    //修改任务表
    @Update("update storage_task set task_state=#{state} where task_type=#{type} and task_state=0;")
    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();
    //内外片调换
    @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);
    //清除内片数据
    @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);
    //判断是否有调拨完后出片的任务
    @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);
    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;
@@ -89,7 +90,7 @@
                    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{
                 // 数据库修改笼子表新增一条玻璃
@@ -98,8 +99,7 @@
                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);
                // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
@@ -112,7 +112,6 @@
        return (400);
    }
    
    public Short selectout2(String glassid) {
        // 定义PRC数据传送数组
@@ -158,7 +157,7 @@
                spianMapper.UpdateDBCage1(cage, cell);// 将内片数据更新到外片里
                spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            }
            System.out.println("出片任务|" + datas);
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            outmesid(glassid,"DB105.34");// 派发出片ID
@@ -178,6 +177,7 @@
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCageState(glassid,3);//更改笼子表的玻璃状态
                spianMapper.OverOutSlice(glassid,2);//完成出片队列任务
                System.out.println("出片任务|" + datas);
                outmesid(glassid,"DB105.34");// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
@@ -206,10 +206,11 @@
                    spianMapper.UpdateDBCage(ids, cage, cell,2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.UpdataGlassCageState(glassids,3);//更改笼子表的玻璃状态
                    //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
@@ -236,8 +237,9 @@
                    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
@@ -248,6 +250,7 @@
        }
    }
    //派发任务玻璃id
    public void outmesid(String glassid,String address) {
        //System.out.println("outmesid:" + glassid);
@@ -260,6 +263,7 @@
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    }
    //获取地址内的玻璃id转字符串
    public StringBuilder queGlassid(String address,int count) {
        StringBuilder writedstrIdOut = new StringBuilder();
@@ -272,33 +276,41 @@
      }
        return writedstrIdOut;
    }
    //char数组转化成bit数组
       public static byte[] toBytes(char[] chars) {
        String s = new String(chars);
        return s.getBytes(StandardCharsets.UTF_8);
    }
    //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);
        return listbool;
    }
    //根据玻璃id完成在进行中的任务
    public void overtask(String glassid){
        spianMapper.UpdateCageOver(glassid, 0);// 更改笼子表出片状态
        spianMapper.UpdatetaskOut(glassid); // 完成上一次出片或者进片任务
        spianMapper.OverOutSlice(glassid, 2);// 完成出片队列任务
        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);
        }
    }
    }
}