wu
2023-09-13 11b9b5a2cfd5b23e80ce6a3be3f9b341a2cd1be0
增加小车任务逻辑判断
4个文件已修改
251 ■■■■ 已修改文件
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -1,6 +1,7 @@
package com.example.springboot.component;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +10,7 @@
import com.example.springboot.service.SpianService;
import com.example.springboot.entity.Glass;
import com.example.springboot.mapper.AlarmMapper;
import com.example.springboot.mapper.SpianMapper;
public class PlcHold extends Thread {
@@ -16,7 +18,7 @@
  @Autowired
  private JdbcConnections jdbcConnections;
  private SpianMapper spianMapper;
  private SpianService spianService;
@@ -32,6 +34,7 @@
        e.printStackTrace();
      }
      spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
      spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
      jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
      
      //根据玻璃id获取订单号
@@ -45,10 +48,11 @@
        }
    
      spianService.selectout("11");
      //spianService.selectout("11");
      //判断进片请求 
       List<Short> datas1List=S7control.getinstance().ReadWord("DB106.24", 1);
       List<Short> datas1ListState=S7control.getinstance().ReadWord("DB106.8", 1);
      if(datas1List!=null &&datas1ListState!=null){
          //获取prc进片请求数据
       boolean exist = datas1List.contains((short)1); 
@@ -64,16 +68,36 @@
        for(Short list1:datas1ListID){
            spianService.selectAll((short)list1);
         }
        }
        //System.out.println(exist);
       }
     }
     List<Short> outlist=S7control.getinstance().ReadWord("DB106.20", 1); //出片车状态
     List<Short> outlist2=S7control.getinstance().ReadWord("DB106.20", 1); //出片任务完成
     List<Short>ceshi1=new ArrayList<Short>();//出片车状态
     List<Short>ceshi2=new ArrayList<Short>();//出片任务完成
     ceshi1.add((short)0);
     ceshi2.add((short)1);
     if(ceshi1!=null && ceshi2!=null){
      //判断按订单出片
      boolean outstate = ceshi1.contains((short)0);
      boolean outstate2 = ceshi1.contains((short)1);
      if(outstate=true){ //出片车状态空闲时
        if(outstate2=true){  //出片车任务完成时
           String orderid=spianMapper.SelectOrderout();
           if(orderid!=null){
           spianService.selectout(orderid);
        }
        }
      }
     }
     
        //System.out.println(exist);
      }
    }
          
      
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -79,12 +79,12 @@
            map.put("message2", "500");
        } else {
            // 调用伍上片函数
            short results= spianService.selectAll(glassid);
            if(results==200){
            short results = spianService.selectAll(glassid);
            if (results == 200) {
                map.put("message2", "200");
            }else if(results==300){
            } else if (results == 300) {
                map.put("message2", "300");
            }else if(results==400){
            } else if (results == 400) {
                map.put("message2", "400");
            }
        }
@@ -96,9 +96,9 @@
        Map<String, Object> map = new HashMap<>();
        homeMapper.UpdateTask(types, shelfrack);
        if (types == 0) {
            homeMapper.UpdateCageTask1(shelfrack,glassid);
            homeMapper.UpdateCageTask1(shelfrack, glassid);
        } else {
            homeMapper.UpdateCageTask2(shelfrack,glassid);
            homeMapper.UpdateCageTask2(shelfrack, glassid);
        }
        map.put("message3", "200");
        return Result.success(map);
@@ -131,9 +131,18 @@
    @GetMapping("/OutByGlassID")
    public Result OutByGlassID(String glassid) {
        spianService.selectout2(glassid);
        Map<String, Object> map = new HashMap<>();
        map.put("message3", "200");
        // 调用伍上片函数
        Short results = spianService.selectout2(glassid);
        if (results == 200) {
            map.put("message2", "200");
        } else if (results == 300) {
            map.put("message2", "300");
        } else if (results == 400) {
            map.put("message2", "400");
        }
        return Result.success(map);
    }
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -67,7 +67,7 @@
     @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=2)as b set a.glass_id=b.glass_id,a.order_id=b.order_id,a.width=a.width-b.glasswidth,a.state=1 where a.id=#{id1}")
    @Update("update storage_cage as a,(select*from storage_cage b where b.cage=#{cage} and b.cell=#{cell} and b.tier=2)as b set a.glass_id=b.glass_id,a.order_id=b.order_id,a.state=1 where a.id=#{id1}")
    void UpdateDBCage(int id1,int cage,int cell);
    // @Insert("insert into user(name, date, address, user_no) values (#{name}, #{date}, #{address}, #{userNo})")
    // void insert (Spian spian);
@@ -77,4 +77,10 @@
    //修改任务表
    @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_type=1 or task_type=2) and task_state=0;")
    void UpdatetaskOut();
    //查询按订单出片
    @Select("select order_id state from order_out where state=0")
    String  SelectOrderout();
}
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -19,6 +19,8 @@
    // @GetMapping("/all2")
    public Result selectout(String orderid) {
        spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
@@ -28,6 +30,13 @@
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut(orderid);
        if(cageout==null){
           return Result.success("200");
        }
        int cage = cageout.getCage(); // 储存出片位置,笼子格子几号玻璃
        int cell = cageout.getCell();// 出片格号
        int tier = cageout.getTier();// 出片内外片
@@ -41,10 +50,6 @@
        if (tier == 2) {
            // 判断玻璃可直接出片时
            // 修改数据库笼子表(出片)
            spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
            datas.add((short) prcid);
            datas.add((short) 1000);
            datas.add((short) 1);
@@ -52,9 +57,12 @@
               
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);//清除格子玻璃信息
            S7control.getinstance().WriteWord(adddresslist, datas);
            spianMapper.Updatetask(1, 1);//完成任务
            return Result.success(datas);
            spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
            S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
            S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
            S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
            return Result.success(datas);//结束
        } else {
            // 获取格子的玻璃数量
            int state = spianMapper.selectGlassState(cage, cell);
@@ -68,9 +76,12 @@
                spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);//清除格子玻璃信息
                S7control.getinstance().WriteWord(adddresslist, datas);
                spianMapper.Updatetask(1, 1);//完成任务
                return Result.success("状态为0,直接出片");
                S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
                S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
                S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                //spianMapper.Updatetask(1, 1);//完成任务
                return Result.success(datas);//结束
            } else {
                // 玻璃需要调拨时,判断属于哪个半区的笼子
                if (cage < 6) {
@@ -83,34 +94,25 @@
                    ids = cagecell.getId();// 调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                    spianMapper.Inserttask(2, 0,cageout.getId(),ids );//新增调度任务
                    
                    // 更换玻璃的笼子
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                   
                    // 填入调拨数据
                    datas.add((short) prcid);// 调拨外片起始位置
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                   // 更换玻璃的笼子
                   spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                   spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                   spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除被调拨格子数据
                   spianMapper.Inserttask(2, 0,cageout.getId(),ids );//新增调度任务
                    // 传输mes数据,坐标,数据
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    spianMapper.Updatetask(1, 2);//完成任务
                    datas.clear(); // 清空整个列表
                    // 判断调拨结束后再次出片,填入出片数据
                    datas.add((short) prcid);
                    datas.add((short) 1000);
                    datas.add((short) 1);
                    datas.add((short) 1);
                    spianMapper.Inserttask(2, 0,cageout.getId(),1000 );//新增出片任务
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除原格子数据
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    // 修改数据库笼子表(出片)
                    spianMapper.Updatetask(1, 1);//完成任务
                    return Result.success(cagecell); // 调拨位置的参数内容
                        S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
                        S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                    return Result.success(cagecell); //结束
                } else {// 笼子号大于5时
                    StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 5, 11);
@@ -128,25 +130,14 @@
                    datas.add((short) 2);
                    datas.add((short) 1);
                    spianMapper.Inserttask(2, 0,cageout.getId(),ids );//新增调度任务
                    // 转移原调拨格子数据
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除被调拨格子数据
                    // 传输mes数据,坐标,数据
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    spianMapper.Updatetask(1, 2);//完成任务
                    datas.clear(); // 清空整个列表
                    // 判断调拨结束后再次出片
                    // 填入出片数据
                    datas.add((short) prcid);
                    datas.add((short) 1000);
                    datas.add((short) 1);
                    datas.add((short) 1);
                    spianMapper.Inserttask(2, 0,cageout.getId(),1000 );//新增出片任务
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除原格子数据出片
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    spianMapper.Updatetask(1, 1);//完成任务
                    return Result.success(cagecell); // 调拨位置的参数内容
                        S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
                        S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                     return Result.success(cagecell); //结束
                }
@@ -198,11 +189,12 @@
                tiers = cages1.getTier();// 内外片
                cells = cages1.getCell();// 格子号
                prcid = cages1.getPrcId();// 传给prc的目标地id
                spianMapper.Inserttask(0, 0, 1000, ids);//新增任务
                
               if (glasslist == null) {
                    return (300);
                }
                spianMapper.Inserttask(0, 0, 1000, ids);//新增任务
                prctier = spianMapper.selectsum(cage1, cells);// 传给prc的格子内玻璃数
                // 有合适空格时进片
                if (cages > 1 && cages1.getTier() != null) {
@@ -227,7 +219,7 @@
    }
    // @GetMapping("/all2")
    public Result selectout2(String glassid) {
    public Short selectout2(String glassid) {
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
@@ -237,7 +229,15 @@
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut2(glassid);
         int cage = cageout.getCage(); // 储存出片位置,笼子格子几号玻璃
        if(cageout==null){
           return (300);
        }
        int cage = cageout.getCage(); // 储存出片位置,笼子格子几号玻璃
        int cell = cageout.getCell();// 出片格号
        int tier = cageout.getTier();// 出片内外片
        int prcid = cageout.getPrcId();// prcid
@@ -250,10 +250,6 @@
        if (tier == 2) {
            // 判断玻璃可直接出片时
            // 修改数据库笼子表(出片)
            spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
            datas.add((short) prcid);
            datas.add((short) 1000);
            datas.add((short) 1);
@@ -261,9 +257,12 @@
               
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);//清除格子玻璃信息
            S7control.getinstance().WriteWord(adddresslist, datas);
            spianMapper.Updatetask(1, 1);//完成任务
            return Result.success(datas);
            spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
            S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
            S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
            S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
            return (200);//结束
        } else {
            // 获取格子的玻璃数量
            int state = spianMapper.selectGlassState(cage, cell);
@@ -277,54 +276,49 @@
                spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);//清除格子玻璃信息
                S7control.getinstance().WriteWord(adddresslist, datas);
                spianMapper.Updatetask(1, 1);//完成任务
                return Result.success("状态为0,直接出片");
                S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
                S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
                S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                //spianMapper.Updatetask(1, 1);//完成任务
                return (200);//结束
            } else {
                // 玻璃需要调拨时,判断属于哪个半区的笼子
                if (cage < 6) {
                    StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 0, 6);
                    if (cagecell == null) {
                        return Result.success(cagecell);
                        return (300);
                    }
                    // 获取调拨位置进行调拨
                    prcid2 = cagecell.getPrcId();// 调拨目标位PRCID
                    ids = cagecell.getId();// 调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                    spianMapper.Inserttask(2, 0,cageout.getId(),ids );//新增调度任务
                       
                    
                    // 更换玻璃的笼子
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                   
                    // 填入调拨数据
                    datas.add((short) prcid);// 调拨外片起始位置
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                   // 更换玻璃的笼子
                   spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                   spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                   spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除被调拨格子数据
                   spianMapper.Inserttask(2, 0,cageout.getId(),ids );//新增调度任务
                    // 传输mes数据,坐标,数据
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    spianMapper.Updatetask(1, 2);//完成任务
                    datas.clear(); // 清空整个列表
                    // 判断调拨结束后再次出片,填入出片数据
                    datas.add((short) prcid);
                    datas.add((short) 1000);
                    datas.add((short) 1);
                    datas.add((short) 1);
                    spianMapper.Inserttask(2, 0,cageout.getId(),1000 );//新增出片任务
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除原格子数据
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    // 修改数据库笼子表(出片)
                    spianMapper.Updatetask(1, 1);//完成任务
                    return Result.success(cagecell); // 调拨位置的参数内容
                        S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
                        S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                    return (200); //结束
                } else {// 笼子号大于5时
                    StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 5, 11);
                    if (cagecell == null) {
                        return Result.success(cagecell);
                        return (300);
                    }
                    // 获取调拨位置进行调拨
                    prcid2 = cagecell.getPrcId();// 调拨目标位prcID
@@ -337,28 +331,16 @@
                    datas.add((short) 2);
                    datas.add((short) 1);
                    spianMapper.Inserttask(2, 0,cageout.getId(),ids );//新增调度任务
                    // 转移原调拨格子数据
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);//减少新格子宽度
                    spianMapper.UpdateDBCage(ids, cage, cell);// 将原格子数据更新到新格子里
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除被调拨格子数据
                    // 传输mes数据,坐标,数据
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    spianMapper.Updatetask(1, 2);//完成任务
                    datas.clear(); // 清空整个列表
                    // 判断调拨结束后再次出片
                    // 填入出片数据
                    datas.add((short) prcid);
                    datas.add((short) 1000);
                    datas.add((short) 1);
                    datas.add((short) 1);
                    spianMapper.Inserttask(2, 0,cageout.getId(),1000 );//新增出片任务
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除原格子数据出片
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    spianMapper.Updatetask(1, 1);//完成任务
                    return Result.success(cagecell); // 调拨位置的参数内容
                        S7control.getinstance().WriteWord("DB106.22", (short)0); //出片任务完成改成0
                        S7control.getinstance().WriteWord("DB106.20", (short)1); //出片车状态改成忙碌
                        S7control.getinstance().WriteWord(adddresslist, datas);//派发出片车任务
                     return (200);//结束
                }
            }
        }