a6480edc1d366bfeead1eb2784be13ae747e3f23..dc23ab59268e6dccd7d50d10cf8cffe1bf67d551
2025-05-13 1
#
dc23ab 对比 | 目录
2025-05-13 1
#
0386ec 对比 | 目录
2025-05-13 1
#
7c315b 对比 | 目录
20个文件已修改
408 ■■■■■ 已修改文件
pom.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TaskWrkController.java 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/CrnDetailVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrk.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskLogScheduler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/RouteUtils.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/CrnSlave.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/RgvSlave.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/css/console-0.css 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/css/console.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/css/crn.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/old_page/console-old.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/old_page/console.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/realtimeWatch/console.html 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -61,12 +61,12 @@
<!--        </dependency>-->
        <!-- 显式排除slf4j-simple -->
<!--        <dependency>-->
<!--            <groupId>org.slf4j</groupId>-->
<!--            <artifactId>slf4j-simple</artifactId>-->
<!--            <version>1.7.30</version>-->
<!--            <scope>provided</scope> &lt;!&ndash; 或直接删除该依赖 &ndash;&gt;-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.30</version>
            <scope>provided</scope> <!-- 或直接删除该依赖 -->
        </dependency>
        <dependency>
            <groupId>com.dameng</groupId>
            <artifactId>DmJdbcDriver8</artifactId>
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -137,11 +137,11 @@
                continue;
            }
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
            if (crnProtocol == null || Cools.isEmpty(crnProtocol.getLaneNo())) {
                continue;
            }
            CrnLatestDataVo vo = new CrnLatestDataVo();
            vo.setCrnId(crn.getId());   //  堆垛机编号
            vo.setCrnId(crnProtocol.getLaneNo());   //  堆垛机编号
//            Short totalBay = locMastMapper.selectTotalBay();
@@ -318,15 +318,22 @@
        }
        CrnDetailVo vo = new CrnDetailVo();
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            if (crnSlave.getId().equals(crnNo)) {
                BasCrnp basCrnp = basCrnpService.selectById(crnNo);
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null || Cools.isEmpty(crnProtocol.getLaneNo())) {
                continue;
            }
            if (crnProtocol.getLaneNo().equals(crnNo)) {
                BasCrnp basCrnp = basCrnpService.selectById(crnProtocol.getCrnNo());
                if (basCrnp == null) {
                    return R.error("数据库维护异常");
                }
                SiemensCrnThread crnThread = (SiemensCrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                vo.setCrnNo(crnNo);
                vo.setCrnNo(crnProtocol.getCrnNo());
                vo.setLaneNo(crnProtocol.getLaneNo());
                vo.setWorkNo(crnProtocol.getTaskNo());
                vo.setCrnStatus(crnProtocol.getStatusType().desc);
src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -261,43 +261,44 @@
        }
        String response="";
        try{
            HashMap<String, Object> headParam = new HashMap<>();
            headParam.put("taskNo",taskWrk.getTaskNo());
            headParam.put("taskStatus",taskWrk.getStatusWms());
            headParam.put("ioType",taskWrk.getIoTypeWms());
            headParam.put("barCode",taskWrk.getBarcode());
            headParam.put("reportTime", LocalDateTime.now());
            headParam.put("weight",taskWrk.getScWeight().doubleValue());
            log.info("wcs手动完成任务上报wms={}", taskWrk);
            response = new HttpHandler.Builder()
                    // .setHeaders(headParam)
                    .setUri(wmsUrl)
                    .setPath(taskStatusFeedbackPath)
                    .setJson(JSON.toJSONString(headParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            apiLogService.save("wcs手动完成任务上报wms"
                    ,wmsUrl+taskStatusFeedbackPath
                    ,null
                    ,"127.0.0.1"
                    ,JSON.toJSONString(headParam)
                    ,response
                    ,true
            );
        }catch (Exception e){
            log.error("wcs手动完成任务上报wms失{},返回值={}", taskWrk,response);
//            throw new CoolException(e);
        }
        Date now = new Date();
        locMast.setModiTime(now);
        locMastService.updateById(locMast);
        taskWrk.setStatus(7);//手动完成任务
        taskWrk.setModiTime(now);
        taskWrk.setCompleteTime(now);
//        try{
//            HashMap<String, Object> headParam = new HashMap<>();
//            headParam.put("taskNo",taskWrk.getTaskNo());
//            headParam.put("taskStatus",taskWrk.getStatusWms());
//            headParam.put("ioType",taskWrk.getIoTypeWms());
//            headParam.put("barCode",taskWrk.getBarcode());
//            headParam.put("reportTime", LocalDateTime.now());
//            headParam.put("weight",taskWrk.getScWeight().doubleValue());
//
//            log.info("wcs手动完成任务上报wms={}", taskWrk);
//            response = new HttpHandler.Builder()
//                    // .setHeaders(headParam)
//                    .setUri(wmsUrl)
//                    .setPath(taskStatusFeedbackPath)
//                    .setJson(JSON.toJSONString(headParam))
//                    .build()
//                    .doPost();
//
//            JSONObject jsonObject = JSON.parseObject(response);
//            apiLogService.save("wcs手动完成任务上报wms"
//                    ,wmsUrl+taskStatusFeedbackPath
//                    ,null
//                    ,"127.0.0.1"
//                    ,JSON.toJSONString(headParam)
//                    ,response
//                    ,true
//            );
//        }catch (Exception e){
//            log.error("wcs手动完成任务上报wms失{},返回值={}", taskWrk,response);
////            throw new CoolException(e);
//        }
        locMastService.updateById(locMast);
        taskWrkService.updateById(taskWrk);
        return R.ok();
    }
@@ -322,37 +323,37 @@
            taskWrk.setModiUser(1111L);//操作员
        }
        String response="";
        try{
            HashMap<String, Object> headParam = new HashMap<>();
            headParam.put("taskNo",taskWrk.getTaskNo());
            headParam.put("taskStatus",taskWrk.getStatusWms());
            headParam.put("ioType",taskWrk.getIoTypeWms());
            headParam.put("barCode",taskWrk.getBarcode());
            headParam.put("reportTime", LocalDateTime.now());
            headParam.put("weight",taskWrk.getScWeight().doubleValue());
            log.info("wcs手动取消任务上报wm={}", taskWrk);
            response = new HttpHandler.Builder()
                    // .setHeaders(headParam)
                    .setUri(wmsUrl)
                    .setPath(taskStatusFeedbackPath)
                    .setJson(JSON.toJSONString(headParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            apiLogService.save("wcs手动取消任务上报wms"
                    ,wmsUrl+taskStatusFeedbackPath
                    ,null
                    ,"127.0.0.1"
                    ,JSON.toJSONString(headParam)
                    ,response
                    ,true
            );
        }catch (Exception e){
            log.error("wcs手动取消任务上报wms失败={},返回值={}", taskWrk,response);
//            throw new CoolException(e);
        }
//        try{
//            HashMap<String, Object> headParam = new HashMap<>();
//            headParam.put("taskNo",taskWrk.getTaskNo());
//            headParam.put("taskStatus",taskWrk.getStatusWms());
//            headParam.put("ioType",taskWrk.getIoTypeWms());
//            headParam.put("barCode",taskWrk.getBarcode());
//            headParam.put("reportTime", LocalDateTime.now());
//            headParam.put("weight",taskWrk.getScWeight().doubleValue());
//
//
//            log.info("wcs手动取消任务上报wm={}", taskWrk);
//            response = new HttpHandler.Builder()
//                    // .setHeaders(headParam)
//                    .setUri(wmsUrl)
//                    .setPath(taskStatusFeedbackPath)
//                    .setJson(JSON.toJSONString(headParam))
//                    .build()
//                    .doPost();
//            JSONObject jsonObject = JSON.parseObject(response);
//            apiLogService.save("wcs手动取消任务上报wms"
//                    ,wmsUrl+taskStatusFeedbackPath
//                    ,null
//                    ,"127.0.0.1"
//                    ,JSON.toJSONString(headParam)
//                    ,response
//                    ,true
//            );
//        }catch (Exception e){
//            log.error("wcs手动取消任务上报wms失败={},返回值={}", taskWrk,response);
////            throw new CoolException(e);
//        }
        taskWrk.setCompleteTime(now);//完结时间
        taskWrkService.updateById(taskWrk);
        return R.ok();
src/main/java/com/zy/asrs/domain/vo/CrnDetailVo.java
@@ -11,6 +11,7 @@
    // 堆垛机号
    private Integer crnNo;
    private Integer laneNo;
    // 工作号
    private Short workNo;
src/main/java/com/zy/asrs/entity/TaskWrk.java
@@ -377,14 +377,7 @@
    }
    public Integer getStatusWms(){
        switch (status){
            case 5:
                return 1;
            case 4:
                return 0;
            default:
                return 0;
        }
        return status;
    }
    public String getPut(String point){
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -563,20 +563,23 @@
     * 堆垛机站出库到出库站
     */
    public void crnStnToOutStn() {
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId());
            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
            if (basCrnp == null) {
                log.error("{}号堆垛机尚未在数据库进行维护!", crnSlave.getId());
                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                continue;
            }
            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
            CrnSlave crnSlave = new CrnSlave(crn);
            if (!crn.getId().equals(crnProtocol.getLaneNo())) {
                for (CrnSlave crnOther : slaveProperties.getCrn()) {
                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
                        crnSlave.updateCrnInStn(crnOther);
@@ -641,30 +644,28 @@
     * 入出库  ===>>  堆垛机入出库作业下发
     */
    public synchronized void crnIoExecute() throws IOException {
        for (CrnSlave crn : slaveProperties.getCrn()) {
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
            BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId());
            if (basCrnp == null) {
                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                log.error("{}号堆垛机尚未在数据库进行维护!", crnSlave.getId());
                continue;
            }
            CrnSlave crnSlave = new CrnSlave(crn);
            CrnSlave crn = new CrnSlave(crnSlave);
            if (!crn.getId().equals(crnProtocol.getLaneNo())) {
            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
                for (CrnSlave crnOther : slaveProperties.getCrn()) {
                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
                        crnSlave.updateCrnInStn(crnOther);
                        crn.updateCrnInStn(crnOther);
                    }
                }
            }
            crn = crnSlave;
            // 库位移转
            this.locToLoc(crn, crnProtocol);
@@ -800,7 +801,7 @@
                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位层
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位排
                crnCommand.setCommand((short) 1);
                if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
                    log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                    throw new CoolException("堆垛机命令生成失败");
                } else {
@@ -915,7 +916,7 @@
                        command.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                        command.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                        command.setCommand((short) 1);
                        if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command))) {
                        if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command))) {
                            log.error("堆垛机命令生成失败,堆垛机号={},巷道={},任务数据={}", slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command));
                            throw new CoolException("堆垛机命令生成失败");
                        } else {
@@ -1028,7 +1029,7 @@
                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
                crnCommand.setCommand((short) 1);
                if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
                    log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                } else {
                    // 修改工作档状态 11.生成出库ID => 12.吊车出库中
@@ -1082,15 +1083,17 @@
     * 执行对工作档的完成操作
     */
    public void storeFinished() throws InterruptedException {
        for (CrnSlave crn : slaveProperties.getCrn()) {
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            if (!crn.getId().equals(crnProtocol.getLaneNo())) {
            CrnSlave crn = new CrnSlave(crnSlave);
            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
                for (CrnSlave crnOther : slaveProperties.getCrn()) {
                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
                        crn.updateCrnInStn(crnOther);
@@ -1400,22 +1403,13 @@
                || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocolOther == null) {
            return true;
        }
        if (rgvProtocolOther.statusEnable) {
            if (rgvProtocolOther.getModeType().equals(RgvModeType.AUTO)
                    && rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)
                    && rgvProtocolOther.getLoaded()==0) {
                return false;
            }
        if (rgvProtocol.getLoaded()!=0) {
            return false;
        }
        return true;
    }
    public boolean rgvOtherIDLE(RgvSlave slave) {
    public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
@@ -1427,15 +1421,15 @@
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return true;
        }
        if (rgvProtocolOther.statusEnable) {
            if (rgvProtocolOther.getModeType().equals(RgvModeType.AUTO)
                    && rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)
                    && rgvProtocolOther.getLoaded()==0) {
            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
            if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
                    >=
                    Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
                return false;
            }
        }
@@ -1491,7 +1485,7 @@
                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
                        TaskWrk taskWrk = deviceDetection(inSta);
                        if (taskWrk != null) {
                            if (taskWrk.getTaskNo().equals(taskNoNow)) continue;
                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
                            taskWrkList.add(taskWrk);
                            staList.add(inSta.getStaNo());
                        }
@@ -1541,7 +1535,16 @@
                            for (Integer staNoNow : belongToRange) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    break;
                                                }
                                            }
                                        }
                                        break;
                                    }
                                }
@@ -1550,11 +1553,29 @@
                                }
                            }
                        }
                        if (!sign){
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                    sign=true;
                                }
                            }
                            if (sign){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                if (rgvSuper.getStaNo().equals(outStaNo)){
                                                    sign=false;
                                                    break;
                                                }
                                            }
                                        } else {
                                            return;
                                        }
                                        break;
                                    }
                                }
                            }
                        }
@@ -1583,7 +1604,16 @@
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    break;
                                                }
                                            }
                                        }
                                        break;
                                    }
                                }
@@ -1621,7 +1651,16 @@
                        for (Integer staNoNow : rangeList) {
                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                if (rgvStn.getStaNo().equals(staNoNow)) {
                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                    TaskWrk taskWrk = deviceDetection(rgvStn);
                                    if (taskWrk != null) {
                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                break;
                                            }
                                        }
                                    }
                                    break;
                                }
                            }
@@ -1693,7 +1732,7 @@
                BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
                BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
                //执行
                issuedTake.setTaskNo(Long.valueOf(taskWrk.getTaskNo()));
                issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
                issuedTake.setTaskStatus(2);
                issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus()));
                issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
@@ -1701,7 +1740,7 @@
                issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1);
                issuedPut.setTaskNo(Long.valueOf(taskWrk.getTaskNo()));
                issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
                issuedPut.setTaskStatus(3);
                issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus()));
                issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -57,6 +57,10 @@
    public void execute() throws IOException {
        List<TaskWrk> taskWrkList = taskWrkService.selectToBeHistoryData();
        for (TaskWrk taskWrk : taskWrkList) {
            if (taskWrkService.saveToHistory(taskWrk.getTaskNo()) == 0) {
                log.error("任务档转任务历史档失败" + taskWrk);
                return ;
            }
            JSONObject jsonObject = null;
            String response = null;
            boolean success = false;
src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -1,10 +1,13 @@
package com.zy.asrs.utils;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasDevpPosition;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.WrkMast;
import com.zy.core.enums.RouteCollectCountType;
import com.zy.core.model.RgvSlave;
import com.zy.system.service.UserService;
import java.util.ArrayList;
import java.util.Collections;
@@ -138,6 +141,7 @@
    //检测是否在范围
    public static boolean CheckIfItIsWithinTheRange(List<Integer> staNoList, Long staNoNowPos, List<BasDevpPosition> basDevpPositionList, boolean itSmall) {
        List<Integer> siteList = new ArrayList<>();
        Long maxOrMin = 0L;
        Integer[] rangeList = new Integer[staNoList.size()];
@@ -151,11 +155,28 @@
                }
            }
        }
        if (itSmall) {
            return staNoNowPos <= rangeList[rangeList.length - 1];
            for (BasDevpPosition basDevpPosition : basDevpPositionList) {
                if (basDevpPosition.getDevNo().equals(rangeList[rangeList.length - 1])) {
                    maxOrMin = basDevpPosition.getPlcPosition();
                    break;
                }
            }
            if (maxOrMin == 0){
                return false;
            }
            return staNoNowPos <= maxOrMin+50;
        }
        return staNoNowPos >= rangeList[0];
        for (BasDevpPosition basDevpPosition : basDevpPositionList) {
            if (basDevpPosition.getDevNo().equals(rangeList[0])) {
                maxOrMin = basDevpPosition.getPlcPosition();
                break;
            }
        }
        if (maxOrMin == 0){
            return false;
        }
        return staNoNowPos >= maxOrMin-50;
    }
    public static long absoluteDifference(Long a, Long b) {
src/main/java/com/zy/core/model/CrnSlave.java
@@ -55,6 +55,11 @@
    }
    public CrnSlave(CrnSlave crnSlave) {
        this.setId(crnSlave.getId());
        this.setIp(crnSlave.getIp());
        this.setPort(crnSlave.getPort());
        this.setStaNo(crnSlave.getStaNo());
        this.setDevpPlcId(crnSlave.getDevpPlcId());
        this.rack = crnSlave.getRack();
        this.slot = crnSlave.getSlot();
        this.offset = crnSlave.getOffset();
src/main/java/com/zy/core/model/RgvSlave.java
@@ -31,6 +31,7 @@
    // RGV入库源站点
    private List<RgvStn> rgvInSta = new ArrayList<>();
    private List<RgvStn> rgvOutSta = new ArrayList<>();
    private List<RgvStn> rgvSuperSta = new ArrayList<>();
    @Data
    public static class RgvStn {
src/main/java/com/zy/core/thread/RgvThread.java
@@ -48,7 +48,7 @@
    //    private RgvProtocol rgvProtocol;
    private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
    // # 轨道总长
    private Long trackEntireLength = 215000L;
    private Long trackEntireLength = 224000L;
    //# 轨道基准点
    private Long trackBenchmark = 1L;
    //  # 避让距离
@@ -378,7 +378,7 @@
                        > avoidDistance) {//无需避让
                    return true;
                } else {
                    if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()) {
                    if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) {
                        long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
                        if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                            log.error("行走超出范围!!!任务异常  联系管理员!!!");
@@ -450,7 +450,7 @@
                        > avoidDistance) {//无需避让
                    return true;
                } else {
                    if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos()) {
                    if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) {
                        long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
                        if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                            log.error("行走超出范围!!!任务异常  联系管理员!!!");
src/main/resources/application-prod.yml
@@ -151,6 +151,14 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1017
      direction: false
    rgvSuperSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1001
      direction: false
    rgvSuperSta[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1002
      direction: false
  # RGV穿梭车2
  rgv[1]:
    id: 2
@@ -227,6 +235,14 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1017
      direction: false
    rgvSuperSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1023
      direction: false
    rgvSuperSta[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1022
      direction: false
  barcode[0]: #条码扫描仪1004
    port: 51236
src/main/resources/application.yml
@@ -50,7 +50,7 @@
constant-parameters:
  # 轨道总长
  trackEntireLength: 215000
  trackEntireLength: 224000
  # 轨道基准点
  trackBenchmark: 1
  # 轨道转换为米比例
src/main/resources/mapper/TaskWrkMapper.xml
@@ -123,7 +123,7 @@
        select * from "SOURCE"."wcs_task_wrk"
        where 1=1
        and (("WRK_STS"=14 and "STATUS"=5) or "STATUS"=7 or "STATUS"=4
                 or ("WRK_STS"=4 and "STATUS"=5))
                 or ("WRK_STS"=4 and "STATUS"=5) or ("WRK_STS"=14 and "STATUS"=9))
        order by "IO_PRI" desc,"CREATE_TIME","WRK_NO" ASC
    </select>
@@ -131,7 +131,8 @@
        insert into "SOURCE"."wcs_task_wrk_log"
        select * from "SOURCE"."wcs_task_wrk"
        where "TASK_NO" = #{taskNo}
          and ("STATUS"=5 or "STATUS"=4 or "STATUS"=6)
          and ("STATUS"=5 or "STATUS"=4 or "STATUS"=6 or "STATUS"=7  or "STATUS"=9)
        and ("WRK_NO" not in (select "WRK_NO" from "SOURCE"."asr_bas_devp"))
    </insert>
    <insert id="saveToHistoryD">
src/main/webapp/static/wcs/css/console-0.css
@@ -46,10 +46,10 @@
    cursor: pointer;
}
.system-icon-open {
    background-image: url("../image/stop48.png");
    background-image: url("../images/stop48.png");
}
.system-icon-close {
    background-image: url("../image/start48.png");
    background-image: url("../images/start48.png");
}
#system-run-desc {
@@ -323,7 +323,7 @@
    background-color: #fff;
    height: 20px;
    width: 80px;
    background-image: url("../image/Crane_auto.png");
    background-image: url("../images/Crane_auto.png");
    background-repeat: no-repeat;
    background-size:100% 100%;
    background-position: top center;
@@ -332,35 +332,35 @@
/* 入库 */
.machine-pakin {
    background-image: url("../image/Crane_store.png");
    background-image: url("../images/Crane_store.png");
}
/* 出库 */
.machine-pakout {
    background-image: url("../image/Crane_retrieve.png");
    background-image: url("../images/Crane_retrieve.png");
}
/* 库到库 */
.machine-stock-move {
    background-image: url("../image/Crane_loctoloc.png");
    background-image: url("../images/Crane_loctoloc.png");
}
/* 站到站 */
.machine-site-move {
    background-image: url("../image/Crane_stntostn.png");
    background-image: url("../images/Crane_stntostn.png");
}
/* p to p */
.machine-p-move {
    background-image: url("../image/Crane_hptoohp.png");
    background-image: url("../images/Crane_hptoohp.png");
}
/* 异常 */
.machine-error {
    background-image: url("../image/Crane_error.png");
    background-image: url("../images/Crane_error.png");
}
/* 自动 */
.machine-auto {
    background-image: url("../image/Crane_auto.png");
    background-image: url("../images/Crane_auto.png");
}
/* 非自动/收到 */
.machine-un-auto {
    background-image: url("../image/Crane_manual.png");
    background-image: url("../images/Crane_manual.png");
}
@@ -384,7 +384,7 @@
}
/* PToP */
.machine-p-move-flag {
    background-color: #128014;
    background-color: #aaaaaa;
    color: #fff;
}
/* 异常 */
src/main/webapp/static/wcs/css/console.css
@@ -235,7 +235,7 @@
/* PToP */
.machine-p-move-flag {
    padding: 0 10px;
    background-color: rgb(29,152,23);
    background-color: rgb(184,184,184);
}
/* 异常 */
.machine-error-flag {
src/main/webapp/static/wcs/css/crn.css
@@ -39,7 +39,7 @@
    display: inline-block;
    width: 20px;
    height: 20px;
    background-color: #2e9926;
    background-color: #fff;
    border-radius: 5px;
    vertical-align: middle;
}
src/main/webapp/views/old_page/console-old.html
@@ -869,7 +869,7 @@
        $("#crnWindow").attr('style', 'display:block;');
        $("#siteWindow").attr("style", "display:none;");
        $('.detailed').empty();
        $('.detailed').append(id + '号堆垛机');
        $('.detailed').append(id + '号巷道堆垛机');
        $.ajax({
            url: baseUrl + "/console/crn/detail",
            headers: {
src/main/webapp/views/old_page/console.html
@@ -420,7 +420,7 @@
        $("#crnWindow").attr('style', 'display:block;');
        $("#siteWindow").attr("style", "display:none;");
        $('.detailed').empty();
        $('.detailed').append(id + '号堆垛机');
        $('.detailed').append(id + '号巷道堆垛机');
        $.ajax({
            url: baseUrl + "/console/crn/detail",
            headers: {
src/main/webapp/views/realtimeWatch/console.html
@@ -136,6 +136,15 @@
                        <input type="text" name="crnNo" value="" id="crnNo">
                    </div>
                </div>
                <!-- 巷道号 -->
                <div class="form-item">
                    <div class="form-item-label" style>
                        <span>巷道号:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="laneNo" value="" id="laneNo">
                    </div>
                </div>
                <!-- 工作号 -->
                <div class="form-item">
                    <div class="form-item-label">
@@ -445,7 +454,7 @@
        $("#crnWindow").attr('style', 'display:block;');
        $("#siteWindow").attr("style", "display:none;");
        $('.detailed').empty();
        $('.detailed').append(id + '号堆垛机');
        $('.detailed').append(id + '号巷道堆垛机');
        $.ajax({
            url: baseUrl + "/console/crn/detail",
            headers: {
@@ -642,7 +651,7 @@
                        // crnEl.animate({left: (crns[i].bay * unit) + 'px'}, 1000);
                        // crns[i].bay = 1;
                        var offSet = 390;
                        var offSet = 500;
                        // crns[i].bay = 41;
                        if(crns[i].bay === 1){
                            crnEl.animate({left: offSet + 'px'}, 1000);