pjb
4 天以前 382d9f2df47c0e26b9a86077ad70c1c317f3d52d
优化界面
5个文件已修改
146 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RgvModeType.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RgvStatusType.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -11,10 +11,7 @@
import com.zy.asrs.domain.vo.RgvStateTableVo;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.BasRgvErrMapper;
import com.zy.asrs.service.BasCircularShuttleService;
import com.zy.asrs.service.BasDevpPositionService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.Utils;
import com.zy.core.cache.MessageQueue;
@@ -60,6 +57,8 @@
    private BasRgvErrMapper basRgvErrMapper;
    @Autowired
    private BasRgvService basRgvService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private MainServiceImpl mainService;
    @Autowired
@@ -371,10 +370,32 @@
        List<RingThroughParam> result = new ArrayList<>();
        List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<>());
        for (BasDevpPosition basDevpPosition : basDevpPositions){
            if (basDevpPosition.getDevNo() == 134){
                continue;
            }
            RingThroughParam ringThroughParam = new RingThroughParam();
            ringThroughParam.setModeColor("#FFFFFF");
            ringThroughParam.setStatusColor("#FFFFFF");
            try{
                BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",basDevpPosition.getDevNo()));
                if (basDevp.getAutoing().equals("Y")){
                    if (basDevp.getLoading().equals("Y")){
                        ringThroughParam.setModeColor("#ab1839");
                        ringThroughParam.setStatusColor("#ab1839");
                    }
                    if (basDevp.getLoading().equals("N")){
                        ringThroughParam.setModeColor("#27AE60");
                        ringThroughParam.setStatusColor("#27AE60");
                    }
                } else {
                    ringThroughParam.setModeColor("#C0392B");
                    ringThroughParam.setStatusColor("#C0392B");
                }
            } catch (Exception e){
                System.out.println(e.getMessage());
                ringThroughParam.setModeColor("#000000");
                ringThroughParam.setStatusColor("#000000");
            }
            ringThroughParam.setIndex(basDevpPosition.getDevNo());
//            double[] doubles = Utils.RingThroughXYSta(perimeter, perimeter-basDevpPosition.getPlcPosition());
//            ringThroughParam.setValueX(doubles[0]>50? doubles[0]+6:doubles[0]-1);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -380,10 +380,6 @@
            runRgv:
            for (WrkMast wrkMast : wrkMasts) {
                Integer rgvSstaNo = wrkMast.getRgvSstaNo();
                // 1090,1089,1086,1083 按1083站点位置计算,能取1083,就能取1090,1089,1086,避免任务延迟下发方案一直给1083发
//                if (rgvSstaNo == 1090 || rgvSstaNo == 1089 || rgvSstaNo == 1086 || rgvSstaNo == 1105) {
//                    rgvSstaNo = 1083;
//                }
                BasDevpPosition basDevpPositions = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", rgvSstaNo)); // 站点
                long position = basDevpPositions.getPlcPosition(); // 起始站位置
                position += 50; // 小车取货定位精度 +- 50,站点位置10000,小车在10050也是可以取的
@@ -397,6 +393,7 @@
                    }
                    map.put(distance, rgvProtocol);
                }
                position -= 50;
                log.info("取货站点:{},后面小车排序", basDevpPositions.getDevNo());
                StringBuilder sb = new StringBuilder();
                for (Map.Entry<Long, RgvProtocol> rgvProtocolMap : map.entrySet()) {
@@ -409,7 +406,6 @@
                    RgvProtocol rgvProtocol = rgvProtocolMap.getValue(); // 最近距离小车
//                    log.info("取货站点:{},后面最近小车:{},状态:{}", basDevpPositions.getDevNo(), rgvProtocol.getRgvNo(), rgvProtocol.getStatusType().desc);
                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 10));
                    if(wrkMast.getIoType() == 10 || wrkMast.getIoType() == 110 || wrkMast.getSourceStaNo() == 1034) {
                        if (rgvProtocol.modeType == RgvModeType.AUTO
                                && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
                                && rgvProtocol.getTaskNo1() == 0
@@ -444,64 +440,23 @@
                                // 当前rgv任务目标站点
                                BasDevpPosition rgvDstaNoDevPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast1.getRgvDstaNo()));
                                long rgvDstaNoPosition = rgvDstaNoDevPosition.getPlcPosition(); // 当前rgv任务目标站点位置
                                if(rgvProtocol.getRgvPos() < rgvDstaNoPosition  || Math.abs(rgvProtocol.getRgvPos() - rgvDstaNoPosition) <= 50) { // 小车当前位置 < rgv目标位置
                                    if(!(rgvProtocol.getRgvPos() < position && position < rgvDstaNoPosition)) { // 这个任务位置是在当前rgv位置前面并且这个任务起点在当前rgv目标站点之后
                                // 获取RGV当前位置和状态
                                long currentRgvPos = rgvProtocol.getRgvPos();
                                int rgvStatus = rgvProtocol.getStatusType().id;
                                // 定义浮动范围(仅停靠状态适用)
                                long posTolerance = (rgvStatus == 0 || rgvStatus == 2 || rgvStatus == 3 || rgvStatus == 6 || rgvStatus == 7 || rgvStatus == 8 || rgvStatus == 100) ? 50 : 0;
                                if(currentRgvPos < rgvDstaNoPosition + posTolerance) { // 小车当前位置 < rgv目标位置
                                    if(!(currentRgvPos - posTolerance < position && position < rgvDstaNoPosition + posTolerance)) { // 这个任务位置是在当前rgv位置前面并且这个任务起点在当前rgv目标站点之后
                                        break; // 当前rgv放货完成后,可以取当前任务
                                    }
                                } else {
                                    if(!(rgvProtocol.getRgvPos() < position || position < rgvDstaNoPosition)) {
                                    if(!(currentRgvPos + posTolerance < position || position < rgvDstaNoPosition - posTolerance)) {
                                        break;
                                    }
                                }
                            }
                        }
                    } else {
                        if (rgvProtocol.modeType == RgvModeType.AUTO
                                && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
                                && rgvProtocol.getTaskNo1() == 0
                                && rgvProtocol.getAlarm() == 0) {
                            if (count != 0) {
                                log.error("{}呼叫小车:{}号小车空闲,但工作档显示该小车有任务",wrkMast.getWrkNo(),rgvProtocol.getRgvNo());
                                break;
                            }
                            RgvCommand rgvCommand = new RgvCommand();
                            rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
                            rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位
                            rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());
                            rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式:  取放货
                            rgvCommand.setSourceStaNo1(wrkMast.getRgvSstaNo().shortValue());   //工位1起点
                            rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue());   //工位1目标站点
                            rgvCommand.setCommand((short) 1);   //工位1任务确认
                            if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
                                log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
                                break runRgv;
                            }
                            log.info("RGV命令下发成功,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
                            Date now = new Date();
                            wrkMast.setRgvNo(rgvProtocol.getRgvNo());
                            wrkMast.setWrkSts(10L);
                            wrkMast.setRgvCreateTime(now);
                            wrkMastService.updateById(wrkMast);
                            break runRgv;
                        } else  if(rgvProtocol.modeType == RgvModeType.AUTO
                                && rgvProtocol.getTaskNo1() != 0){ // 当前小车放货目标位置在当前任务取货点之后,跳过任务分配,不再则判断下个小车目标位置
                            WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1())); // 当前rgv任务
                            if(wrkMast1!= null && !Cools.isEmpty(wrkMast1.getRgvDstaNo())) {
                                // 当前rgv任务目标站点
                                BasDevpPosition rgvDstaNoDevPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast1.getRgvDstaNo()));
                                long rgvDstaNoPosition = rgvDstaNoDevPosition.getPlcPosition(); // 当前rgv任务目标站点位置
                                if(rgvProtocol.getRgvPos() <= rgvDstaNoPosition || Math.abs(rgvProtocol.getRgvPos() - rgvDstaNoPosition) <= 50) { // 小车当前位置 < rgv目标位置
                                    if(!(rgvProtocol.getRgvPos() < position && position < rgvDstaNoPosition)) { // 这个任务位置是在当前rgv位置前面并且这个任务起点在当前rgv目标站点之后
                                        break; // 当前rgv放货完成后,可以取当前任务
                                    }
                                } else {
                                    if(!(rgvProtocol.getRgvPos() < position || position < rgvDstaNoPosition)) {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
src/main/java/com/zy/core/enums/RgvModeType.java
@@ -3,12 +3,12 @@
public enum RgvModeType {
    NONE(-1, "离线","#4A4035"),
    STOP(0, "维修","#E2C027"),
    HAND(1, "手动","#2196F3"),
    HALF_AUTO(2, "半自动","#E2C027"),
    AUTO(3, "自动","#4B5CC4"),
    STOP(0, "维修","#FFA500"),
    HAND(1, "手动","#FFD700"),
    HALF_AUTO(2, "半自动","#20B2AA"),
    AUTO(3, "自动","#4169E1"),
    AUTO2(100, "其它","#2196F3"),
    SOS(999, "其它","#2196F3")
    SOS(999, "其它","#FF0000")
    ;
    public Integer id;
src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -2,21 +2,25 @@
public enum RgvStatusType {
    NONE(-1, "离线","#4A4035"),
    IDLE(0, "无任务","#1F3696"),
    PICK_UP_WALK(1, "取货行走","#2196F3"),
    IN_STATION_OPERATION(2, "进站运行中","#2196F3"),
    STATION_ENTRY_COMPLETED(3, "进站完成","#2196F3"),
    There_IS_something_waiting_to_leave_the_station(4, "有物待出站","#2196F3"),
    Exit_walking(5, "出站行走","#E2C027"),
    Outbound_request(6, "出站请求","#2196F3"),
    Outbound_operation_in_progress(7, "出站运行中","#2196F3"),
    Outbound_completed(8, "出站完成","#2196F3"),
    PICK_UP_OFFSIDE(9, "小车取货越位","#2196F3"),
    ROAM(11, "漫游","#2196F3"),
    WAITING(100, "任务执行完成等待确认","#2196F3"),
    SOS110(110, "报警","#2196F3"),
    SOS(999, "未知","#2196F3")
    NONE(-1, "离线","#C0392B"),
    IDLE(0, "无任务","#27AE60"),
    PICK_UP_WALK(1, "取货行走","#F39C12"),
    IN_STATION_OPERATION(2, "进站运行中","#3498DB"),
    STATION_ENTRY_COMPLETED(3, "进站完成","#2980B9"),
    There_IS_something_waiting_to_leave_the_station(4, "有物待出站","#5DADE2"),
    Exit_walking(5, "出站行走","#E67E22"),
    Outbound_request(6, "出站请求","#2196F3"),
    Outbound_operation_in_progress(7, "出站运行中","#21618C"),
    Outbound_completed(8, "出站完成","#85C1E9"),
    ROAM(11, "漫游","#95A5A6"),
    CANCEL(12, "等待取消","#95A5A6"),
    WALK(20, "走行","#F1C40F"),
    WAITING(100, "任务执行完成等待确认","#AED6F1"),
    WAITING101(101, "任务执行完成等待确认","#AED6F1"),
    SOS110(110, "报警","#E74C3C"),
    SOS(999, "未知","#FF0000")
    ;
    public Integer id;
src/main/webapp/views/index.html
@@ -59,7 +59,7 @@
        }
        .station {
            position: absolute;
            width: 20px;
            width: 26px;
            height: 14px;
            text-align: center;
            line-height: 1.5; /* 调整行高与字体大小的比值 */
@@ -230,7 +230,7 @@
<!--                <div v-for="(item,i) in devpPos3" class="bus-item-left2" :style="'top:' + (100 + i * 10) + 'px'">{{item.dev_no}}</div>-->
<!--            </div>-->
<!--             Stations on outer ring-->
            <div v-for="station in tableDataDev" class="station" :style="{ top: station.valueY + 'px', left: station.valueX + 'px' }">{{ station.index }}</div>
            <div v-for="station in tableDataDev" class="station" :style="{ top: station.valueY + 'px', left: station.valueX + 'px' , backgroundColor: station.modeColor}">{{ station.index }}</div>
<!--            <div>-->
<!--                <el-switch-->
<!--                        style="display: block"-->