ZengTao
2024-04-29 7687eb6cc76ab8ca20b39e7567255939abc4ff66
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -7,6 +7,7 @@
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;
@@ -17,14 +18,15 @@
import com.example.springboot.mapper.SpianMapper;
import com.google.common.primitives.Bytes;
@Service
public class SpianService {
    @Autowired
    private SpianMapper spianMapper;
    public static List<String> result=new ArrayList<String>();
    // @GetMapping("/all")
    public Short selectAll(north_glass_buffer1 glasslist) {
    try {
        int cage1 = 0;
        int cells;
@@ -34,14 +36,20 @@
        int prctier;
        double width;
        double minwidth = 0;
        double widths;
        //north_glass_buffer1 glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数
        // 如果没有此id时
        if (glasslist == null) {
            return (300);
        }
        if(glasslist.getglasslengthmm()>glasslist.getglassheightmm()) {
            widths= glasslist.getglasslengthmm();
        }else{
            widths= glasslist.getglassheightmm();
        }
        // Map result=new HashMap();
        double widths = glasslist.getglasslengthmm();
        String orderids = glasslist.getordernumber();
        String FrameBarcode = glasslist.getFrameBarcode();
        String glassid=glasslist.getbarcode();
@@ -70,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;
@@ -86,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);// 起始位置
@@ -103,13 +111,8 @@
                // 获取该格子内是否有玻璃
                int cellint = spianMapper.selectcell(cage1, cells);
                if (cellint == 1) {
                    // 将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCage(ids, cage1, cells, 1);
                    // 将新入的玻璃存入外片
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids - 1, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    result.add("进片任务|feedstart1:" + datas+ LocalDateTime.now());
                    outmesid(glassid, "DB105.20");
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    boolean qidong = listbool("DB105.16");
                    int qidong2 = 0;
@@ -121,36 +124,53 @@
                            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);// 新增任务
                    System.out.println("进片任务|" + datas);
                    result.add("进片任务|feedend1" + datas+ LocalDateTime.now());
                } else {
                    // 数据库修改笼子表新增一条玻璃
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    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,qidong2);// 新增任务
                    System.out.println("进片任务|" + datas);
                    result.add("进片任务|feedend2" + datas+ LocalDateTime.now());
                }
                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();
@@ -189,9 +209,9 @@
            spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
            spianMapper.UpdataGlassCageState(glassid.toString(), 3);// 更改笼子表的玻璃状态
            System.out.println("出片任务|" + datas);
            result.add("出片任务|outstart1" + datas+ LocalDateTime.now());
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
            //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
            boolean qidong = listbool("DB105.18");
            int qidong2 = 0;
            if (qidong == true) {
@@ -204,7 +224,7 @@
            }
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, state, qidong2);// 新增任务
            outmesid(glassid, "DB105.34");// 派发出片ID
            result.add("出片任务|outend1" + datas+ LocalDateTime.now());
            return (200);// 结束
        } else {
            // 获取格子的玻璃数量
@@ -216,15 +236,10 @@
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                spianMapper.OverOutSlice(glassid.toString(), 1, 0);// 更新出片队列任务状态为进行中
                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
                //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                boolean qidong = listbool("DB105.18");
                int qidong2 = 0;
                if (qidong == true) {
@@ -235,7 +250,11 @@
                        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 {
@@ -257,17 +276,13 @@
                    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);// 增加原格子宽度
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    StorageCage glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃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) {
@@ -278,8 +293,12 @@
                            qidong = listbool("DB105.18");
                        }
                    }
                    spianMapper.Inserttask(2, 0, cageout.getId(), ids, glassids, 2, qidong2);// 新增调度任务
                    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时
@@ -297,14 +316,12 @@
                    datas.add((short) prcid2);
                    datas.add((short) 2);
                    datas.add((short) 1);
                    String glassids = spianMapper.SelectGlassid(cage, cell); // 获取被调拨的玻璃id
                    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);// 派发出片车任务
                    S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    spianMapper.UpdataGlassCageState(glassids, 3);// 更改笼子表的玻璃状态
                    //S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    boolean qidong = listbool("DB105.18");
                    int qidong2 = 2;
                    if (qidong == true) {
@@ -315,21 +332,29 @@
                            qidong = listbool("DB105.18");
                        }
                    }
                    spianMapper.Inserttask(2, 0, cageout.getId() + 1, ids, glassids, 2, qidong2);// 新增调度任务
                    spianMapper.UpdataGlassCageState(glassids.getGlassId(), 3);// 更改笼子表的玻璃状态
                    spianMapper.UpdateDBCage(ids, cage, cell, 2);// 将原格子数据更新到新格子里
                    spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 减少新格子宽度
                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                    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();
@@ -339,7 +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转字符串