#
mrzhssss
2023-02-19 1d33818195ae739de03988b2252e1013394391dc
#
5个文件已修改
255 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MonitorController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/LedCommand.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MonitorController.java
@@ -7,6 +7,7 @@
import com.zy.asrs.domain.dto.WorkChartAxis;
import com.zy.asrs.domain.vo.LocChartPie;
import com.zy.asrs.mapper.ReportQueryMapper;
import com.zy.common.model.MatDto;
import com.zy.common.service.CommonService;
import com.zy.core.CrnThread;
import com.zy.core.cache.SlaveConnection;
@@ -161,6 +162,7 @@
                }
            }
        }
        return R.ok().add(errorMsg);
    }
@@ -274,6 +276,24 @@
                }
            }
        }
//        MatDto matDto = new MatDto();
//        matDto.setMatNo("1111");
//        matDto.setCount(100.0);
//        matDto.setMaknx("测试用料");
//        LedCommand ledCommand = new LedCommand();
//        ledCommand.setStaNo(8);
//        ledCommand.setTitle("入库启动");
//        ledCommand.setLocNo("0100101");
//        ledCommand.setWorkNo(9998);
//        ledCommand.setEmptyMk(false);
//        ledCommand.setIoType(1);
//        ledCommand.setSourceStaNo(15);
//        ArrayList<MatDto> matDtos = new ArrayList<>();
//        matDtos.add(matDto);
//        ledCommand.setMatDtos(matDtos);
//        ArrayList<LedCommand> ledCommands = new ArrayList<>();
//        ledCommands.add(ledCommand);
//        return R.ok(ledCommands);
        return R.ok().add(commandList);
    }
    /**
@@ -322,6 +342,10 @@
        // 获取输送线plc线程
        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledId);
        if (Cools.isEmpty(ledThread)) {
            return R.ok();
        }
        String ledContent = ledThread.getStringBuffer().toString();
//        ledContent = "ask的模块萨满大算了萨满大了\n 是窘境到埃及嗲家嗲\n 萨达姆打开萨满大凯撒麦当劳萨满大老师";
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -122,13 +122,12 @@
                if (!Cools.isEmpty(barcode) && (staProtocol.getWorkNo() != 9998 || staProtocol.getWorkNo() != 9996)) {
                    log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        String errorMsg = "15站扫码失败,已退回14站";
                        staProtocol.setWorkNo((short) 9998);
                        staProtocol.setStaNo((short) 14);
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        // led 异常显示
                        if (ledThread != null) {
                            String errorMsg = "扫码失败,请重试";
                            News.error(methodName +  ":扫码失败,请重试");
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                        }
@@ -137,16 +136,6 @@
                } else {
                    continue;
                }
                // 获取入库站信息
//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                // 入出库模式判断
//                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; }
//                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
//                    continue;
//                }
                // 判断是否满足入库条件
                if (staProtocol.isAutoing()
@@ -173,6 +162,10 @@
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                    if (wrkMast != null) {
                        News.error(methodName + ":工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo());
                        if (ledThread != null) {
                            News.error(methodName +  ":扫码失败,请重试");
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={"+ wrkMast.getWrkNo() + "}, 请手动取消已存在工作档"));
                        }
                        continue;
                    }
@@ -213,10 +206,7 @@
                                throw new CoolException("更新plc站点信息失败");
                            }
                            if (ledThread != null) {
                                String successMsg = "入库工作档--工作号:" + dto.getWorkNo() + " 目标库位:" + dto.getLocNo();
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(7, successMsg));
                            }
                        } else {
                            staProtocol.setWorkNo((short) 9998);
                            staProtocol.setStaNo((short) 14);
@@ -1498,15 +1488,15 @@
     * 出库  ===>> 工作档信息写入led显示器
     */
    public synchronized void ledExecute() {
        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
            // 命令集合
            List<LedCommand> commands = new ArrayList<>();
            // 工作档集合
            List<WrkMast> wrkMasts = new ArrayList<>();
//            // 命令集合
//            List<LedCommand> commands = new ArrayList<>();
//            // 工作档集合
//            List<WrkMast> wrkMasts = new ArrayList<>();
            for (Integer staNo : led.getStaArr()) {
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
@@ -1517,90 +1507,123 @@
                }
                // 获取工作档数据
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
//                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
                if (null == wrkMast) {
                    continue;
                }
                wrkMasts.add(wrkMast);
                // 组装命令
                ArrayList<MatDto> matDtos = new ArrayList<>();
                Wrapper<WrkDetl> detlWrapper = new EntityWrapper<WrkDetl>()
                        .eq("wrk_no", wrkMast.getWrkNo());
                LedCommand ledCommand = new LedCommand();
                ledCommand.setWorkNo(wrkMast.getWrkNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
                ledCommand.setLocNo(wrkMast.getLocNo());
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setIoType(wrkMast.getIoType());
                // 出库模式
                switch (wrkMast.getIoType()) {
                    case -1:
                        ledCommand.setTitle("全板入库");
                        break;
                ledCommand.setTitle(wrkMast.getIoType$());
                switch (wrkMast.getIoType()){
                    case 10:
                        ledCommand.setTitle("空板入库");
                        break;
                    case 10-1:
                        ledCommand.setTitle("全板出库");
                        break;
                    case 103:
                        ledCommand.setTitle("拣料出库");
                        break;
                    case 104:
                        ledCommand.setTitle("并板出库");
                        break;
                    case 107:
                        ledCommand.setTitle("盘点出库");
                        break;
                    case 110:
                        ledCommand.setTitle("空板出库");
                        ledCommand.setEmptyMk(true);
                        break;
                    default:
                        News.error(methodName + ":任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                        ledCommand.setBarcode(wrkMast.getBarcode());
                        List<WrkDetl> wrkDetls = wrkDetlService.selectList(detlWrapper);
                        for (WrkDetl wrkDetl : wrkDetls) {
                            MatDto matDto = new MatDto();
                            matDto.setMaknx(wrkDetl.getMaktx());
                            matDto.setMatNo(wrkDetl.getMatnr());
                            matDto.setCount(wrkDetl.getAnfme());
                            matDtos.add(matDto);
                        }
                        break;
                }
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setLocNo(wrkMast.getLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
//                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme())));
                }
                commands.add(ledCommand);
            }
            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
            // 获取LED线程
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // 相同工作号集合则过滤
//            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
//                continue;
                ledCommand.setMatDtos(matDtos);
                MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, ledCommand.toString()));
//                wrkMasts.add(wrkMast);
//                // 组装命令
//                LedCommand ledCommand = new LedCommand();
//                ledCommand.setWorkNo(wrkMast.getWrkNo());
//                ledCommand.setIoType(wrkMast.getIoType());
//                // 出库模式
//                switch (wrkMast.getIoType()) {
//                    case -1:
//                        ledCommand.setTitle("全板入库");
//                        break;
//                    case 10:
//                        ledCommand.setTitle("空板入库");
//                        break;
//                    case 10-1:
//                        ledCommand.setTitle("全板出库");
//                        break;
//                    case 103:
//                        ledCommand.setTitle("拣料出库");
//                        break;
//                    case 104:
//                        ledCommand.setTitle("并板出库");
//                        break;
//                    case 107:
//                        ledCommand.setTitle("盘点出库");
//                        break;
//                    case 110:
//                        ledCommand.setTitle("空板出库");
//                        ledCommand.setEmptyMk(true);
//                        break;
//                    default:
//                        News.error(methodName + ":任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
//                        break;
//                }
//                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
//                ledCommand.setLocNo(wrkMast.getLocNo());
//                ledCommand.setStaNo(wrkMast.getStaNo());
////                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
//                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
//                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
//                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme())));
//                }
//                commands.add(ledCommand);
//            }
            // 命令下发 -------------------------------------------------------------------------------
            if (!commands.isEmpty()) {
                String errMsg = "";
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
                    News.error(methodName + ":{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    continue;
                } else {
                    ledThread.setLedMk(false);
                }
//            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
//            // 获取LED线程
//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
//            // 相同工作号集合则过滤
////            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
////                continue;
////            }
//            // 命令下发 -------------------------------------------------------------------------------
//            if (!commands.isEmpty()) {
//                String errMsg = "";
//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
//                    News.error(methodName + ":{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                    continue;
//                } else {
//                    ledThread.setLedMk(false);
//                }
//
//
            }
            try {
                // 修改主档led标记
                for (WrkMast wrkMast : wrkMasts) {
                    wrkMast.setOveMk("Y");
                    wrkMast.setModiTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                        throw new CoolException("更新工作档失败");
                    }
                }
                // 更新线程当前工作号集合
                ledThread.setWorkNos(workNos);
            } catch (Exception e) {
                e.printStackTrace();
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            }
//
//            try {
//                // 修改主档led标记
//                for (WrkMast wrkMast : wrkMasts) {
//                    wrkMast.setOveMk("Y");
//                    wrkMast.setModiTime(new Date());
//                    if (wrkMastMapper.updateById(wrkMast) == 0) {
//                        throw new CoolException("更新工作档失败");
//                    }
//                }
//
//                // 更新线程当前工作号集合
//                ledThread.setWorkNos(workNos);
//
//            } catch (Exception e) {
//                e.printStackTrace();
//                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            }
        }
    }
src/main/java/com/zy/core/model/command/LedCommand.java
@@ -1,5 +1,7 @@
package com.zy.core.model.command;
import com.alibaba.fastjson.JSON;
import com.core.common.Cools;
import com.zy.common.model.MatDto;
import lombok.Data;
@@ -30,4 +32,24 @@
    private boolean emptyMk = false;
    private Integer ioType;
    private String barcode;
    @Override
    public String toString() {
        StringBuffer s = new StringBuffer();
        s.append("工作号[" + this.workNo + "]\n");
        s.append("工作类型[" + this.title + "]\n");
        if (!Cools.isEmpty(this.barcode)) {
            s.append("托盘码[" + this.barcode + "]\n");
        }
        if (!this.emptyMk){
            for (MatDto matDto : matDtos) {
                s.append("[商品编码:" + matDto.getMatNo() + ", 数量:" + matDto.getCount() + "]\n");
            }
        }
        return s.toString();
    }
}
src/main/resources/application.yml
@@ -8,8 +8,8 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://10.10.10.100:1433;databasename=stasrs
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=stasrs
    url: jdbc:sqlserver://10.10.10.100:1433;databasename=stasrs
#    url: jdbc:sqlserver://192.168.4.15:1433;databasename=stasrs
    username: sa
    password: sa@123
  mvc:
src/main/webapp/views/crn.html
@@ -146,7 +146,7 @@
                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2号堆垛机</label>
                        <label><input type="radio" name="crnSelect" value="3">&nbsp;3号堆垛机</label>
                        <label><input type="radio" name="crnSelect" value="4">&nbsp;4号堆垛机</label>
                        <label><input type="radio" name="crnSelect" value="5">&nbsp;5号堆垛机</label>
<!--                        <label><input type="radio" name="crnSelect" value="5">&nbsp;5号堆垛机</label>-->
                    </div>
                </div>
                <!-- 源站/源库位 选择 -->