#
1
2025-05-13 0386ec2085f557b43678e26d23a15a3240e12e68
#
14个文件已修改
227 ■■■■ 已修改文件
pom.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/CrnDetailVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 99 ●●●● 补丁 | 查看 | 原始文档 | 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/resources/application-prod.yml 16 ●●●●● 补丁 | 查看 | 原始文档 | 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/domain/vo/CrnDetailVo.java
@@ -11,6 +11,7 @@
    // 堆垛机号
    private Integer crnNo;
    private Integer laneNo;
    // 工作号
    private Short workNo;
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);
@@ -1532,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;
                                    }
                                }
@@ -1541,10 +1553,29 @@
                                }
                            }
                        }
                        if (!sign && belongToRange.size()==1){
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave,belongToRange.get(0))){
                                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;
                                    }
                                }
                            }
                        }
@@ -1573,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;
                                    }
                                }
@@ -1611,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;
                                }
                            }
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/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/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);