admin
2023-09-15 e4e6c1a0e34cbd5aca446018d19166497d8d7814
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -5,7 +5,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import com.example.springboot.common.Result;
import com.example.springboot.component.S7control;
@@ -17,8 +16,11 @@
public class SpianService {
    @Autowired
    private SpianMapper spianMapper;
    @GetMapping("/all2")
    // @GetMapping("/all2")
    public Result selectout(String orderid){
        spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务
        //定义PRC数据传送数组
        List<String> adddresslist=new ArrayList<>();
        adddresslist.add("DB105.6");//出片车起始位置
@@ -28,32 +30,58 @@
        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();//出片内外片
         int prcid=cageout.getPrcId();//prcid
         int prcid2;
         int ids;
        int cages;
        int cells;
         double glasswidth=cageout.getGlassWidth();
         //判断玻璃内外片
         if(tier==2){
             //判断玻璃可直接出片时
                //修改数据库笼子表(出片)
                spianMapper.UpdataGlassCage("","",glasswidth, cage, cell, tier, 0);
                datas.add((short)prcid);
                datas.add((short)1000);
                datas.add((short)1);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                return Result.success(datas);
         }
         else{
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);//清除格子玻璃信息
            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);
            //判断内片是否需要调拨
            if(state==0){
             return Result.success("状态为0,直接出片");
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);
                datas.add((short) prcid);
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 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){
@@ -64,26 +92,27 @@
                //获取调拨位置进行调拨
                prcid2=cagecell.getPrcId();//调拨目标位PRCID
                ids=cagecell.getId();//调拨目标位ID
                //更换玻璃的笼子
                spianMapper.UpdateDBCage(ids, cage, cell);//将原格子数据更新到新格子里
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);//清除原格子数据
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                //填入调拨数据
                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);
                datas.clear(); // 清空整个列表
                //判断调拨结束后再次出片,填入出片数据
                datas.add((short)prcid);
                datas.add((short)1000);
                datas.add((short)1);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                 //修改数据库笼子表(出片)
                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);
@@ -93,25 +122,22 @@
                //获取调拨位置进行调拨
                prcid2=cagecell.getPrcId();//调拨目标位prcID
                ids=cagecell.getId();//调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                //填入调拨数据
                datas.add((short)prcid);
                datas.add((short)prcid2);
                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);//清除原格子数据
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除被调拨格子数据
                //传输mes数据,坐标,数据
                S7control.getinstance().WriteWord(adddresslist, datas);
                datas.clear(); // 清空整个列表
                //判断调拨结束后再次出片
                //填入出片数据
                datas.add((short)prcid);
                datas.add((short)1000);
                datas.add((short)1);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                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); //结束
                
               }
               
@@ -120,11 +146,11 @@
    
}
   @GetMapping("/all")
    // @GetMapping("/all")
   //进片任务,传订单id
   //按订单优先进片
    public Result selectAll(Short glassid){
        //return spianMapper.selectAll();
    public Short selectAll(Short glassid) {
        int cage1;
        int cells;
        int ids;
@@ -132,7 +158,11 @@
        int tiers;
        int prctier;
        spianMapper.Updatetask(1, 0);//完成任务
        Glass glasslist=spianMapper.selectGlass(glassid);
        if(glasslist==null){
          return (300);
        }
        double widths=glasslist.getWidth();
        Short orderids=glasslist.getOrderId();
@@ -145,9 +175,9 @@
        //String orderid="A001";
        //获取订单相关度最高的笼子排序
        List<StorageCage> storageCage=spianMapper.selectAll(glassid);
        List<StorageCage> storageCage = spianMapper.selectAll(orderids);
        if(storageCage==null){
                    return Result.success(storageCage);
            return (400);
                }
        for (StorageCage storageCage2 : storageCage) {
            //保存订单优先顺序笼子号
@@ -156,10 +186,17 @@
            int cages=spianMapper.selectCage(cage1);
            //判断选中笼子是否有合适宽度空格
            StorageCage cages1=spianMapper.selectCage1(cage1,widths);
            if (cages1 != null) {
            ids=cages1.getId();//数据库ID
            tiers=cages1.getTier();//内外片
            cells=cages1.getCell();//格子号
            prcid=cages1.getPrcId();//传给prc的目标地id
               if (glasslist == null) {
                    return (300);
                }
                spianMapper.Inserttask(0, 0, 1000, ids);//新增任务
            prctier=spianMapper.selectsum(cage1, cells);//传给prc的格子内玻璃数
            //有合适空格时进片
            if(cages>1 &&cages1.getTier()!=null){
@@ -168,21 +205,24 @@
                datas.add((short)prcid);
                datas.add((short)prctier);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                //数据库修改笼子表新增一条玻璃
                spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 1);
                return Result.success(cages1);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);//减少格子宽度
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    S7control.getinstance().WriteWord("DB106.10", (short)0); //进片任务完成改成0
                    S7control.getinstance().WriteWord("DB106.8", (short)1); //进片车状态改成忙碌
                    return (200);
                }
            }
            
        }         
        return Result.success("不可进片");
        return (400);
      
    }
   @GetMapping("/all2")
    public Result selectout2(String glassid){
    // @GetMapping("/all2")
    public Short selectout2(String glassid) {
        //定义PRC数据传送数组
        List<String> adddresslist=new ArrayList<>();
        adddresslist.add("DB105.6");//出片车起始位置
@@ -192,96 +232,139 @@
        List<Short> datas=new ArrayList<>();
        //获取优先出片的位置
         StorageCage cageout=spianMapper.selectOut2(glassid);
        if(cageout==null){
           return (300);
        }
         int cage =cageout.getCage(); //储存出片位置,笼子格子几号玻璃
         int cell =cageout.getCell();//出片格号
         int tier =cageout.getTier();//出片内外片
         int prcid=cageout.getPrcId();//prcid
         int prcid2;
         int ids;
        int cages;
        int cells;
         double glasswidth=cageout.getGlassWidth();
         //判断玻璃内外片
         if(tier==2){
             //判断玻璃可直接出片时
                //修改数据库笼子表(出片)
                spianMapper.UpdataGlassCage("","",glasswidth, cage, cell, tier, 0);
                datas.add((short)prcid);
                datas.add((short)1000);
                datas.add((short)1);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                return Result.success(datas);
         }
         else{
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
            spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);//清除格子玻璃信息
            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);
            //判断内片是否需要调拨
            if(state==0){
             return Result.success("状态为0,直接出片");
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);
                datas.add((short) prcid);
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.Inserttask(1, 0,cageout.getId(),1000 );//新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);//增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 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
                //更换玻璃的笼子
                spianMapper.UpdateDBCage(ids, cage, cell);//将原格子数据更新到新格子里
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);//清除原格子数据
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                //填入调拨数据
                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);
                datas.clear(); // 清空整个列表
                //判断调拨结束后再次出片,填入出片数据
                datas.add((short)prcid);
                datas.add((short)1000);
                datas.add((short)1);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                 //修改数据库笼子表(出片)
                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
                ids=cagecell.getId();//调拨目标位ID
                    cages=cagecell.getCage();//调拨目标位笼子
                    cells=cagecell.getCell();//调拨目标位格子
                //填入调拨数据
                datas.add((short)prcid);
                datas.add((short)prcid2);
                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);//清除原格子数据
                    spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, 2, 0);// 清除被调拨格子数据
                //传输mes数据,坐标,数据
                S7control.getinstance().WriteWord(adddresslist, datas);
                datas.clear(); // 清空整个列表
                //判断调拨结束后再次出片
                //填入出片数据
                datas.add((short)prcid);
                datas.add((short)1000);
                datas.add((short)1);
                datas.add((short)1);
                S7control.getinstance().WriteWord(adddresslist, datas);
                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);//结束
                
               }
             }
        }
    
}
    
    /*** 修改用户* @throws SQLException */
    // public static int updateUser(Glass user) throws SQLException {conn =
    // getConn();
    // String sql = "update t_user set name=?,gender=?,age=?,score=?"+ " where
    // id=?";ps = conn.prepareStatement(sql);
    // ps.setString(1, user.getName());ps.setString(2, user.getGender());
    // ps.setInt(3, user.getAge());ps.setDouble(4, user.getScore());ps.setInt(5,
    // user.getId());return ps.executeUpdate();}
    // /*** 增加用户* @throws SQLException */
    // public static int insertUser(User user) throws SQLException {
    // conn = getConn();
    // String sql = "insert into t_user(name,gender,age,score)"+ " values(?,?,?,?)";
    // ps = conn.prepareStatement(sql);ps.setString(1,
    // user.getName());ps.setString(2, user.getGender());
    // ps.setInt(3, user.getAge());ps.setDouble(4, user.getScore());return
    // ps.executeUpdate();
    // }
}