wuyouming666
2024-05-09 a78422827afcedefd5a0ca1d893198d48ea8062f
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -1,6 +1,13 @@
package com.example.springboot.service;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,11 +22,13 @@
public class SpianService {
    @Autowired
    private SpianMapper spianMapper;
    public static List<String> result=new ArrayList<String>();
    // @GetMapping("/all")
    public Short selectAll(String glassid) {
        int cage1;
    public Short selectAll(north_glass_buffer1 glasslist) {
    try {
        int cage1 = 0;
        int cells;
        int ids;
        int prcid;
@@ -27,15 +36,23 @@
        int prctier;
        double width;
        double minwidth = 0;
        north_glass_buffer1 glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数
        double widths;
        // north_glass_buffer1 glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数
        // 如果没有此id时
        if (glasslist == null) {
            return (300);
        }
        double widths = glasslist.getglasslengthmm();
        if(glasslist.getglasslengthmm()>glasslist.getglassheightmm()) {
            widths= glasslist.getglasslengthmm();
        }else{
            widths= glasslist.getglassheightmm();
        }
        // Map result=new HashMap();
        String orderids = glasslist.getordernumber();
        String FrameBarcode = glasslist.getFrameBarcode();
        String glassid = glasslist.getbarcode();
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.0");// 进片车起始位置
        adddresslist.add("DB105.2");// 进片车目标位置
@@ -46,8 +63,10 @@
        List<Short> datas = new ArrayList<>();
        // String orderid="A001";
        // 获取订单相关度最高的笼子排序
        List<StorageCage> storageCage = spianMapper.selectAllFbarcode(FrameBarcode);
        // 获取铝框相关度最高的笼子排序
        List<StorageCage> storageCage = spianMapper.selectAllFbarcode(FrameBarcode, widths, 400);
        // 判断铝框指定空格是否需要间隔空间
        if (storageCage.size() == 0) {
            storageCage = spianMapper.selectAll(orderids, FrameBarcode);
        }
@@ -59,10 +78,10 @@
            // 保存订单优先顺序笼子号
            cage1 = storageCage2.getCage();
            // 判断该笼子号相邻最大的空格数
            int cages = spianMapper.selectCage(cage1);
            StorageCage cages = spianMapper.selectCage(cage1);
            // 如果相邻笼子没有空格,或者有正在执行的出片任务时返回400
            if (cages == 0) {
            if (cages == null) {
                return (400);
            }
            StorageCage cages1;
@@ -75,13 +94,13 @@
            }
            // 判断选中笼子是否有合适宽度空格
            // 有合适空格时进片
            if (cages1 != null && cages >= 1 && storageCage2.getDisabled() == 0) {
            if (cages1 != null && cages.getCell() >= 1 && storageCage2.getDisabled() == 0) {
                ids = cages1.getId();// 数据库ID
                tiers = cages1.getTier();// 内外片
                cells = cages1.getCell();// 格子号
                prcid = cages1.getPrcId();// 传给prc的目标地id
                width = cages1.getWidth();// 格子剩余宽度
                widths = glasslist.getglasslengthmm();
                // 执行进片
                datas.add((short) 1000);// 起始位置
@@ -92,38 +111,66 @@
                // 获取该格子内是否有玻璃
                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);// 新增任务
                    result.add("进片任务|feedstart1:" + datas+ LocalDateTime.now());
                    outmesid(glassid, "DB105.20");
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("进片任务|" + datas);
                    boolean qidong = listbool("DB105.16");
                    int qidong2 = 0;
                    if (qidong == true) {
                        qidong2 = 1;
                    } else {
                        while (qidong) {
                            S7control.getinstance().WriteWord("DB105.16", (short) 1);// 出片任务发送字改为1
                            qidong = listbool("DB105.16");
                        }
                    }
                    // 将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCageAdd(ids, cage1, cells, 1);
                    // 将新入的玻璃存入外片
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids - 1, 2,widths);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier, qidong2);// 新增任务
                    result.add("进片任务|feedend1" + datas+ LocalDateTime.now());
                } else {
                    // 数据库修改笼子表新增一条玻璃
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids, 2);
                    result.add("进片任务|feedstart2" + datas+ LocalDateTime.now());
                    outmesid(glassid, "DB105.20");
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    boolean qidong = listbool("DB105.16");
                    int qidong2 = 0;
                    if (qidong == true) {
                        qidong2 = 1;
                    } else {
                        while (qidong) {
                            S7control.getinstance().WriteWord("DB105.16", (short) 1);// 出片任务发送字改为1
                            qidong = listbool("DB105.16");
                        }
                    }
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids, 2,widths);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("进片任务|" + datas);
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier, qidong2);// 新增任务
                    result.add("进片任务|feedend2" + datas+ LocalDateTime.now());
                    // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
                outmesid(glassid, "DB105.20");
                return (200);
            }
        }
        return (400);
    } catch (Exception e) {
        e.printStackTrace();
        return (500);
        // TODO: handle exception
    }
    }
    public Short selectout2(String glassid) {
        try {
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        char[] a = glassid.toCharArray();
@@ -162,16 +209,22 @@
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
            spianMapper.UpdataGlassCageState(glassid.toString(), 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);
            result.add("出片任务|outstart1" + datas+ LocalDateTime.now());
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
            boolean qidong = listbool("DB105.18");
            int qidong2 = 0;
            if (qidong == true) {
                qidong2 = 1;
            } else {
                while (qidong) {
                    S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    qidong = listbool("DB105.18");
                }
            }
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, state, qidong2);// 新增任务
            outmesid(glassid, "DB105.34");// 派发出片ID
            result.add("出片任务|outend1" + datas+ LocalDateTime.now());
            return (200);// 结束
        } else {
            // 获取格子的玻璃数量
@@ -183,15 +236,25 @@
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.OverOutSlice(glassid.toString(), 1, 0);// 更新出片队列任务状态为进行中
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, 1);// 新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
                System.out.println("出片任务|" + datas);
                result.add("出片任务|outstart2" + datas+ LocalDateTime.now());
                outmesid(glassid, "DB105.34");// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                boolean qidong = listbool("DB105.18");
                int qidong2 = 0;
                if (qidong == true) {
                    qidong2 = 1;
                } else {
                    while (qidong) {
                        S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                        qidong = listbool("DB105.18");
                    }
                }
                spianMapper.OverOutSlice(glassid.toString(), 1, 0);// 更新出片队列任务状态为进行中
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCageState(glassid, 3);// 更改笼子表的玻璃状态
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, 1, qidong2);// 新增任务
                result.add("出片任务|outend2" + datas+ LocalDateTime.now());
                return (200);// 结束
            } else {
@@ -213,17 +276,29 @@
                    datas.add((short) 2);
                    datas.add((short) 1);
                    // 更换玻璃的笼子
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassids, 2);// 新增调度任务
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    StorageCage glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    // 传输mes数据,坐标,数据
                    result.add("出片任务|outstart3" + datas+ LocalDateTime.now());
                    outmesid(glassids.getGlassId(), "DB105.34");// 派发调拨玻璃ID
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    boolean qidong = listbool("DB105.18");
                    int qidong2 = 0;
                    if (qidong == true) {
                        qidong2 = 1;
                    } else {
                        while (qidong) {
                            S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                            qidong = listbool("DB105.18");
                        }
                    }
                    spianMapper.UpdataGlassCageState(glassids.getGlassId(), 3);// 更改笼子表的玻璃状态
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glassids.getGlassWidth(), cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glassids.getGlassWidth(), cage, cell);// 增加原格子宽度
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassids.getGlassId(), 2, qidong2);// 新增调度任务
                    result.add("出片任务|outend3" + datas+ LocalDateTime.now());
                    return (200); // 结束
                } else {// 笼子号大于5时
@@ -241,28 +316,45 @@
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassids, 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);// 增加原格子宽度
                    StorageCage glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    result.add("出片任务|outstart4" + datas+ LocalDateTime.now());
                    outmesid(glassids.getGlassId(), "DB105.34");// 派发调拨玻璃ID
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    boolean qidong = listbool("DB105.18");
                    int qidong2 = 2;
                    if (qidong == true) {
                        qidong2 = 1;
                    } else {
                        while (qidong) {
                            S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                            qidong = listbool("DB105.18");
                        }
                    }
                    spianMapper.UpdataGlassCageState(glassids.getGlassId(), 3);// 更改笼子表的玻璃状态
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glassids.getGlassWidth(), cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glassids.getGlassWidth(), cage, cell);// 增加原格子宽度
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassids.getGlassId(), 2, qidong2);// 新增调度任务
                    result.add("出片任务|outend4" + datas+ LocalDateTime.now());
                    return (200);// 结束
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        return (500);
        // TODO: handle exception
    }
}
    // 派发任务玻璃id
    public void outmesid(String glassid, String address) {
        try {
        // System.out.println("outmesid:" + glassid);
        List<Byte> glassidlist = new ArrayList();
        char ds[] = glassid.toCharArray();
@@ -272,6 +364,9 @@
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
    // 获取地址内的玻璃id转字符串
@@ -324,4 +419,5 @@
        // }
    }
}