lty
9 天以前 19b3cd8d64af08e5c0b3bd680c699e46a07e13d3
#预调度生成任务
3个文件已修改
185 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -49,6 +49,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -125,16 +126,90 @@
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1);
                if (staProtocolIn == null) {
                    continue;
                } else {
                    staProtocolIn = staProtocolIn.clone();
                }
                if (barcodeThread == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
                if(staProtocolIn.getStamp() == 1) {
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                            .eq("barcode", barcode)
                            .in("io_type", 107, 103, 57));
                    if (!Cools.isEmpty(checkPick)) {
                        continue;
                    }
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        locTypeDto.setLocType1((short) 1);
                        param.setBarcode(barcode);
                        param.setIoType(1);
                        param.setSourceStaNo(inSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        param.setWeight(staProtocol.getWeight());
                        String response = new HttpHandler.Builder()
                                .setTimeout(30, TimeUnit.SECONDS)
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/loc/v1")
                                .setJson(JSON.toJSONString(param))
                                .build()
                                .doPost();
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo(dto.getWorkNo());
                            //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
                            staProtocol.setStaNo(dto.getStaNo().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                            log.error("输送线下发2:" + dto.getWorkNo() + "," + dto.getStaNo());
                            ledThread.errorReset();
                            log.error("组托请求后LED错误清除");
                            if (!result) {
                                News.error(methodName + ":更新plc站点信息失败");
                                throw new CoolException("更新plc站点信息失败");
                            }
                        } else {
                            if (jsonObject.getString("msg").equals("工作档已存在")) {
                                continue;
                            }
                            staProtocol.setWorkNo(wrkNo);
                            wrkNo++;
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.error("输送线下发2:" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
//                            if (ledThread != null) {
                            String errorMsg = jsonObject.getString("msg");
                            if (!Cools.isEmpty(errorMsg)) {
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                            }
//                            }
//                            News.error(methodName + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }
                }
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (barcodeThread == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
@@ -226,7 +301,7 @@
//
//                        }
                        News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast.getWrkNo());
                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号=" + wrkMast.getWrkNo()));
//                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号=" + wrkMast.getWrkNo()));
                        continue;
//                        barcodeThread.setBarcode("");
//                        staProtocol.setWorkNo(wrkMast.getWrkNo());
@@ -291,27 +366,6 @@
                            }
                        } else {
                            if (jsonObject.getString("msg").equals("工作档已存在")) {
                                //工作档已存在    再次进去
//                                wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode);
//                                if (wrkMast != null) {
//                                    barcodeThread.setBarcode("");
//                                    staProtocol.setWorkNo(9999);
//                                    //staProtocol.setWorkNo(wrkMast.getWrkNo());
//                                    //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
//                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
//                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
//                                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                                    log.error("输送线下发2:" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
//                                    ledThread.errorReset();
//                                    log.error("组托请求后LED错误清除");
//                                    if (!result) {
//                                        News.error(methodName + ":更新plc站点信息失败");
//
//                                        throw new CoolException("更新plc站点信息失败");
//                                    }
//                                }
                                continue;
                            }
                            staProtocol.setWorkNo(wrkNo);
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -58,7 +58,7 @@
    // 隔壁站点(台车位置)
    private String nearbySta;
    //lfd入库印记  当stamp>=2时才入库
    //gl快速生成任务  stamp=1时直接生成任务
    private Integer stamp = 0;
    // 外形检测 ------------------------------------------------------------------------
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -95,6 +95,16 @@
        add(203);add(205);add(208);add(211);
    }};
    public static final ArrayList<Integer> staNosInList1 = new ArrayList<Integer>() {{
        add(122);
        add(222);add(224);add(227);add(230);
    }};
    public static final ArrayList<Integer> staNosInList2 = new ArrayList<Integer>() {{
        add(101); add(104);add(106);add(108);
        add(202);add(204);add(207);add(210);
    }};
    private Integer count=0;
    /**
@@ -117,6 +127,17 @@
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
    }
    private ArrayList<Integer> getStaNoIn() {
        switch (slave.getId()) {
            case 1:
                return staNosInList1;
            case 2:
                return staNosInList2;
            default:
                throw new CoolException("服务器异常");
        }
    }
    private ArrayList<Integer> getStaNoErr() {
@@ -182,6 +203,9 @@
                    case 2:
                        write((StaProtocol)task.getData());
                        log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                        break;
                    case 3:
                        write2((StaProtocol)task.getData());
                        break;
                    default:
                        break;
@@ -271,6 +295,7 @@
        ArrayList<Integer> staNos = getStaNo();
        ArrayList<Integer> staNosErrList = getStaNoErr();
        ArrayList<Integer> staNoWeight = getStaNoWeight();
        ArrayList<Integer> staNosInList = getStaNoIn();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8));
        OperateResultExOne<byte[]> resultWeight = null;
@@ -355,6 +380,20 @@
                }
            }
            //入库满足
            ArrayList<Integer> staNosIns = staNosInList;
            int staNosInSize = staNosIns.size();
            OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
            if(resultIn.IsSuccess){
                for (int i = 0; i < staNosInSize; i++) {
                    Integer siteId = staNosIns.get(i);
                    StaProtocol staProtocol = station.get(siteId);
                    staProtocol.setStamp(siemensS7Net.getByteTransform().TransInt32(result.Content, i*6));
                }
            }
//        //plc故障
//        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
//        if (resultErr2.IsSuccess) {
@@ -432,9 +471,41 @@
        }
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void write2(StaProtocol staProtocol) throws InterruptedException {
        OperateResult write = null;
        int writeCount = 0;
        ArrayList<Integer> staNosInList = getStaNoIn();
        ArrayList<Integer> staNosIns = staNosInList;
        int staNosInSize = staNosIns.size();
        OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
        int offset = 0;
        if(resultIn.IsSuccess){
            for (int i = 0; i < staNosInSize; i++) {
                Integer siteId = staNosIns.get(i);
                if(staProtocol.getSiteId() == siteId){
                    offset = i;
                }
            }
        }
        do {
            write = siemensS7Net.Write("DB1000." + offset*6 + 2,staProtocol.getWorkNo());    // 工作号
            if(write.IsSuccess ){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            }
            else {
                writeCount++;
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        }while (writeCount<5);
    }
        /**
         * 写入 ID+目标站 =====> 单站点写入
         */
    private void write(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;