1
5 天以前 a84e04a54fa499bcff8c9806df5c15e09ce3c504
#小车地图bug修复,小车动画
15个文件已修改
415 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SiteController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasRgvMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasRgvService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MatDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasRgvMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -12,13 +12,11 @@
import com.zy.asrs.domain.enums.SiteStatusType;
import com.zy.asrs.domain.param.SystemSwitchParam;
import com.zy.asrs.domain.vo.*;
import com.zy.asrs.entity.BasCrnError;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.BasCrnErrorMapper;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.BasRgvMapService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.CodeRes;
@@ -66,6 +64,8 @@
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private BasRgvService basRgvService;
    @Autowired
    private BasRgvMapService basRgvMapService;
    @PostMapping("/system/running/status")
    @ManagerAuth(memo = "系统运行状态")
@@ -113,8 +113,31 @@
            StaProtocol staProtocol = entry.getValue();
            vo.setSiteId(String.valueOf(entry.getKey())); // 站点编号
            for (BasRgv basRgv: basRgvs){
                if (basRgv.getRgvNo().equals(entry.getKey()) ){
                BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo(basRgv.getRgvNo());
                if(basRgv.getRgvNo() == 1 ){
                    if(entry.getKey() == 1){
                    staProtocol.setWorkNo(basRgv.getWrkNo1());
                        staProtocol.setNearbySta(String.valueOf(basRgvMap.getNowRoute()));
                        staProtocol.setAutoing(basRgv.getStatus() == 1);
                        staProtocol.setLoading(staProtocol.getWorkNo()>0);
                    }else if(entry.getKey() == 2){
                        staProtocol.setWorkNo(basRgv.getWrkNo2());
                        staProtocol.setNearbySta(String.valueOf(basRgvMap.getNowRoute()));
                        staProtocol.setAutoing(basRgv.getStatus() == 1);
                        staProtocol.setLoading(staProtocol.getWorkNo()>0);
                    }
                }else if(basRgv.getRgvNo() == 2){
                    if(entry.getKey() == 3){
                        staProtocol.setWorkNo(basRgv.getWrkNo1());
                        staProtocol.setNearbySta(String.valueOf(basRgvMap.getNowRoute()));
                        staProtocol.setAutoing(basRgv.getStatus() == 1);
                        staProtocol.setLoading(staProtocol.getWorkNo()>0);
                    }else if(entry.getKey() == 4){
                        staProtocol.setWorkNo(basRgv.getWrkNo2());
                        staProtocol.setNearbySta(String.valueOf(basRgvMap.getNowRoute()));
                        staProtocol.setAutoing(basRgv.getStatus() == 1);
                        staProtocol.setLoading(staProtocol.getWorkNo()>0);
                    }
                }
            }
            vo.setWorkNo(staProtocol.getWorkNo()); // 工作号
src/main/java/com/zy/asrs/controller/SiteController.java
@@ -71,6 +71,9 @@
        // 持久数据
        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().orderBy("dev_no"));
        for (BasDevp devp : basDevps) {
            if(devp.getDevNo() <5){
                continue;
            }
            SiteTableVo vo = new SiteTableVo();
            vo.setDevNo(devp.getDevNo());    // 站点编号
            vo.setWorkNo(devp.getWrkNo());
src/main/java/com/zy/asrs/mapper/BasRgvMapper.java
@@ -2,11 +2,14 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvMap;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasRgvMapper extends BaseMapper<BasRgv> {
    BasRgv selectByRgvNo(@Param("rgvNo") Integer rgvNo);
}
src/main/java/com/zy/asrs/service/BasRgvService.java
@@ -2,8 +2,10 @@
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvMap;
import com.zy.common.utils.RedisUtil;
public interface BasRgvService extends IService<BasRgv> {
    BasRgv selectByRgvNo(Integer rgvNo);
}
src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java
@@ -2,11 +2,15 @@
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvMap;
import com.zy.asrs.mapper.BasRgvMapper;
import com.zy.asrs.service.BasRgvService;
import org.springframework.stereotype.Service;
@Service("basRgvService")
public class BasRgvServiceImpl extends ServiceImpl<BasRgvMapper, BasRgv> implements BasRgvService {
    @Override
    public BasRgv selectByRgvNo(Integer rgvNo) {
        return this.baseMapper.selectByRgvNo(rgvNo);
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1079,7 +1079,7 @@
            //mark - 3 - ....
            this.locToLoc(crn, crnProtocol,mark);
            //预调度
//            this.crnRebackHp(crnProtocol, crnThread);
            this.crnRebackHp(crnProtocol, crnThread);
        }
//        News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成");
@@ -1095,11 +1095,11 @@
            }
            int x=1;
            switch (crnProtocol.getCrnNo()){
                case 1: x =1; break;
                case 2: x =3; break;
                case 3: x =5; break;
                case 4: x =7; break;
                case 5: x =9; break;
                case 1: x =2; break;
                case 2: x =6; break;
                case 3: x =11; break;
                case 4: x =14; break;
                case 5: x =18; break;
            }
            // 已经存在吊车执行任务时,则过滤3,12
@@ -1124,7 +1124,7 @@
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.X_MOVE); // 任务模式:  回原点
            crnCommand.setSourcePosX((short) x);     // 源库位排
            crnCommand.setSourcePosY((short) 1);     // 源库位列
            crnCommand.setSourcePosY((short) 52);     // 源库位列
            crnCommand.setSourcePosZ((short) 1);     // 源库位层
            crnCommand.setDestinationPosX((short) 0);     // 目标库位排
            crnCommand.setDestinationPosY((short) 0);     // 目标库位列
@@ -1900,31 +1900,33 @@
                    News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                    crnThread.setResetFlag(true);
                }
            } else if (crnProtocol.getTaskNo() == 9996) {//盘点入库衔接
                //  状态:等待确认 并且  任务完成位 = 1
                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
                    // 获取入库待确认工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                    // 入库 + 库位转移  ==> 4.入库完成
                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
                        wrkMast.setWrkSts(4L);
                    } else {
                        continue;
                    }
                    Date now = new Date();
                    wrkMast.setCrnEndTime(now);
                    wrkMast.setModiTime(now);
                    // 修改成功后复位堆垛机
                    if (wrkMastMapper.updateById(wrkMast) > 0) {
                        // 堆垛机复位
                        log.error(wrkMast.getWrkNo() + "任务修改状态4成功,复位堆垛机={}", crnThread.getCrnProtocol().getCrnNo());
                        News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                        crnThread.setResetFlag(true);
                    }
                }
            }else{
//            else if (crnProtocol.getTaskNo() == 9996) {//盘点入库衔接
//                //  状态:等待确认 并且  任务完成位 = 1
//                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
//                    News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
//
//                    // 获取入库待确认工作档
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
//                    // 入库 + 库位转移  ==> 4.入库完成
//                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
//                        wrkMast.setWrkSts(4L);
//                    } else {
//                        continue;
//                    }
//                    Date now = new Date();
//                    wrkMast.setCrnEndTime(now);
//                    wrkMast.setModiTime(now);
//                    // 修改成功后复位堆垛机
//                    if (wrkMastMapper.updateById(wrkMast) > 0) {
//                        // 堆垛机复位
//                        log.error(wrkMast.getWrkNo() + "任务修改状态4成功,复位堆垛机={}", crnThread.getCrnProtocol().getCrnNo());
//                        News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
//                        crnThread.setResetFlag(true);
//                    }
//                }
//            }
            else{
                //  状态:等待确认 并且  任务完成位 = 1
                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
@@ -2218,7 +2220,12 @@
                }
                // 获取工作档数据
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                if (null == wrkMast) { continue; }
                if (null == wrkMast) {
                    if(staProtocol.getWorkNo() > 9999){ //异常退出
                        MessageQueue.offer(SlaveType.Led, 2, new Task(3, "异常退出"));
                    }
                    continue;
                }
                wrkMasts.add(wrkMast);
                // 组装命令
                LedCommand ledCommand = new LedCommand();
@@ -2268,13 +2275,13 @@
                            total = locDetl.getAnfme();
                        }
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                        }
                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                        }
                        if (wrkMast.getIoType() == 107) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                        }
                    });
                }
@@ -3322,7 +3329,7 @@
                        continue;
                    }
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号
                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
                    Integer workNo = 0;
                    if(rgvProtocol.getTaskNo2() > 9999|| rgvProtocol.getTaskNo1() > 9999){
                        workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1() : rgvProtocol.getTaskNo2();
@@ -3388,7 +3395,7 @@
                        continue;
                    }
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号
                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
                    Integer workNo = 0;
                    if(basRgv.getPakToCrn().equals("1")){
                        workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1():rgvProtocol.getTaskNo2();  //正常情况出库放货优先工位1放
@@ -3639,7 +3646,7 @@
                case 1: route = RouteUtils.getRouteOne();break;
                case 2: route = RouteUtils.getRouteTwo();break;
            }
            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMapService.updateById(basRgvMap);
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档
            if( null == wrkMastSta ) {
@@ -3765,7 +3772,7 @@
                case 1: route = RouteUtils.getRouteOne();break;
                case 2: route = RouteUtils.getRouteTwo();break;
            }
            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMapService.updateById(basRgvMap);
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档
            if( null == wrkMastSta ) {
@@ -3900,7 +3907,7 @@
                case 1: route = RouteUtils.getRouteOne();break;
                case 2: route = RouteUtils.getRouteTwo();break;
            }
            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMapService.updateById(basRgvMap);
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档
            if( null == wrkMastSta ) {
src/main/java/com/zy/common/model/MatDto.java
@@ -18,6 +18,16 @@
    private String specs;
    //单据编号
    private String orderNo;
    //客户PO
    private String supp;
    //条码UPC
    private String sku;
    // 客户信息
    private String manu;
@@ -42,6 +52,16 @@
        this.total = total;
    }
    public MatDto(String matnr, String maknx, String orderNo, String supp, String sku,Double count, Double total) {
        this.matnr = matnr;
        this.maknx = maknx;
        this.orderNo = orderNo;
        this.supp = supp;
        this.sku = sku;
        this.count = count;
        this.total = total;
    }
    public MatDto(String matNo, String maknx, Double count) {
        this.matnr = matNo;
        this.maknx = maknx;
src/main/java/com/zy/core/MainProcess.java
@@ -86,7 +86,7 @@
                // 入库  ===>> 空栈板初始化入库,叉车入库站放货
                mainService.storeEmptyPlt(8);
                // 出库  ===>> 工作档信息写入led显示器
//                mainService.ledExecute(9);
                mainService.ledExecute(9);
                // 其他  ===>> LED显示器复位,显示默认信息
                mainService.ledReset();
                //堆垛机衔接任务生成
@@ -103,32 +103,6 @@
                }
                i++;
                // 其他  ===>> 入出库模式切换
//                    i++;
//                    if (i > 1) {
//                        mainService.ioConvert();
//                        i = 0;
//                    }
                /////////////////////////////////////RGV调度/////////////////////////////////////
//
                //完成小车任务
//                    mainService.rgvCompleteWrkMastSta();
//                    //执行小车空板搬运任务
//                    mainService.rgvRunWrkMastEmptyStaPut();//放
//                    mainService.rgvRunWrkMastEmptyStaTake();//取
//                    if (rgcWrk){
//                        //执行小车货物搬运任务
//                        mainService.rgvRunWrkMastFullSta();
//                        rgcWrk = false;
//                    }else {
//                        mainService.rgvRunWrkMastEmptyStaAvoidance();//避让
//                        rgcWrk = true;
//                    }
                /////////////////////////////////////RGV调度/////////////////////////////////////
                /////////////////////////////////////RGV调度/////////////////////////////////////
                k++;
@@ -146,9 +120,6 @@
//                //完成小车任务
                mainService.rgvTaskComplete();
                //工位移动
//                mainService.rgvStaMove();
                /////////////////////////////////////RGV调度/////////////////////////////////////
            } catch (Exception e) {
                e.printStackTrace();
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -430,7 +430,7 @@
        return map.get(RgvPos);
    }
    public Integer getRgvPosI2() {
    public Integer getRgvPosI1() {
        // key: 站点号  value: 基准物理位置
        Map<Integer, Integer> posMap = new HashMap<>();
        posMap.put(1004, 6534);
@@ -442,6 +442,25 @@
        posMap.put(1024, 219684);
        posMap.put(1028, 246724);
        posMap.put(1031, 288194);
        posMap.put(1035, 314954);
        int tolerance = 200; // 允许误差范围
        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
            int site = entry.getKey();
            int basePos = entry.getValue();
            if (Math.abs(RgvPos - basePos) <= tolerance) {
                return site;
            }
        }
        return 0; // 没匹配到站点
    }
    public Integer getRgvPosI2() {
        // key: 站点号  value: 基准物理位置
        Map<Integer, Integer> posMap = new HashMap<>();
        posMap.put(2003, 314954);
        posMap.put(2006, 288094);
        posMap.put(2009, 246574);
@@ -452,8 +471,6 @@
        posMap.put(2024, 75174);
        posMap.put(2027, 33748);
        posMap.put(2030, 6449);
        int tolerance = 200; // 允许误差范围
        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
src/main/java/com/zy/core/thread/RgvThread.java
@@ -279,7 +279,6 @@
                if (null == rgvProtocol) {
                    rgvProtocol = new RgvProtocol();
                    rgvProtocol.setRgvNo(siemensNet.getByteTransform().TransInt16(result.Content, 0));
                }
                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 2));
                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt32(result.Content, 4));
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -10,6 +10,8 @@
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.BasRgvMapMapper;
import com.zy.asrs.mapper.BasRgvMapper;
import com.zy.asrs.service.*;
import com.zy.common.utils.News;
import com.zy.core.DevpThread;
@@ -24,6 +26,7 @@
import com.zy.core.model.protocol.StaProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
@@ -37,7 +40,8 @@
@Data
@Slf4j
public class SiemensDevpThread implements Runnable, DevpThread {
    private BasRgvMapMapper basRgvMapMapper;
    private BasRgvMapper basRgvMapper;
    private DevpSlave slave;
    private SiemensS7Net siemensS7Net;
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
@@ -47,6 +51,7 @@
//
//    }};
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(1);add(2);//小车站点
        add(1001);add(1002);add(1004);
        add(1005);add(1007);
        add(1008);add(1010);
@@ -67,6 +72,7 @@
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(3);add(4);
        add(2001);add(2003);
        add(2004);add(2006);
        add(2007);add(2009);
@@ -442,7 +448,7 @@
        OperateResultExOne<byte[]> result4 = null;//1054-1079
        OperateResultExOne<byte[]> result5 = null;//1080-1110
        OperateResultExOne<byte[]> resultErr = null;
        if(staNoSize == 100){
        if(staNoSize == 102){
            result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028
            result2 = siemensS7Net.Read("DB101.0", (short) (1268));//1029-1037
            result3 = siemensS7Net.Read("DB104.0", (short) (1268));//1042-1053
@@ -470,7 +476,7 @@
                    station.put(siteId, staProtocol);
                }
                staProtocol.setSiteId(siteId);
                if (staNoSize == 100) {
                if (staNoSize == 102) {
                    if (siteId < 1029) {
                        result = result1;
                    } else if (siteId < 1042) {
@@ -491,6 +497,20 @@
                        result = result3;
                    }
                }
//                if(siteId < 5){
//                    int rgvNo = 2;
//                    if(siteId<3){
//                        rgvNo = 1;
//                    }
////                    BasRgv basRgv = basRgvMapper.selectByRgvNo(rgvNo);
//                    BasRgvMap basRgvMap = basRgvMapMapper.selectByRgvNo(rgvNo);
//                    if(siteId%2 != 0){
////                        staProtocol.setWorkNo(basRgv.getWrkNo1());
//                    }else{
////                        staProtocol.setWorkNo(basRgv.getWrkNo2());
//                    }
//
//                }else{
                // 获取该站点对应的偏移量
                Integer offset = siteOffsetMap.get(siteId);
                if (offset == null) {
@@ -637,6 +657,8 @@
                if (!staProtocol.isPakMk() && (!staProtocol.isLoading() || staProtocol.getWorkNo()==0)) {
                    staProtocol.setPakMk(true);
                }
//                }
            }
        }
        //条码扫描器
@@ -705,6 +727,8 @@
        }
        if (result1.IsSuccess && result2.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
src/main/resources/application.yml
@@ -590,35 +590,28 @@
  # LED4
  led[3]:
    id: 4
    ip: 10.10.10.216
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 1047
  # LED4
  led[4]:
    id: 5
    ip: 10.10.10.215
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 2037
  # LED5
  led[4]:
    id: 5
    ip: 10.10.10.216
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 4001
  # LED6
  led[5]:
    id: 6
    ip: 10.10.10.217
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 4006
    staArr: 4001
  # LED6
  led[6]:
    id: 7
    ip: 10.10.10.218
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 160,159
  # LED6
  led[7]:
    id: 8
    ip: 10.10.10.219
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 160,159
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 4006
src/main/resources/mapper/BasRgvMapper.xml
@@ -20,5 +20,8 @@
        <result column="memo" property="memo" />
    </resultMap>
    <select id="selectByRgvNo" resultMap="BaseResultMap">
        select * from asr_bas_rgv
        where rgv_no = #{rgvNo}
    </select>
</mapper>
src/main/resources/mapper/WrkDetlMapper.xml
@@ -27,7 +27,7 @@
    </resultMap>
    <select id="findByWorkNo" resultMap="BaseResultMap">
        select wrk_no, matnr, maktx, anfme ,specs from asr_wrk_detl where 1=1 and wrk_no = #{workNo}
        select * from asr_wrk_detl where 1=1 and wrk_no = #{workNo}
    </select>
    <update id="updateIoTime">
src/main/webapp/views/console.html
@@ -10,8 +10,6 @@
    <script src="../static/js/console.map.js"></script>
    <script src="../static/js/console.js"></script>
    <script src="../static/js/common.js"></script>
</head>
<body>
    <div id="main">
@@ -19,6 +17,7 @@
            <div class="head-left">
                <h1>自动仓库WCS监控图</h1>
                <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6>
                <button class="zoom-btn" id="zoomBtn">缩小网页比例</button>
            </div>
            <div class="head-right">
                <img src="../static/images/zy-logo.png" alt="中扬" height="44" width="80">
@@ -327,6 +326,7 @@
        </div>
    </div>
</body>
</html>
@@ -544,7 +544,7 @@
        });
    }
    // 输送设备实时数据获取
    // 输送设备实时数据获取csxit
    function getSitesInfo() {
        $.ajax({
            url: baseUrl + "/console/latest/data/site",
@@ -562,7 +562,7 @@
                            siteEl.html(sites[i].siteId);
                        }
                        if (sites[i].siteId === '1' || sites[i].siteId === '2' || sites[i].siteId === '3') {
                        if (sites[i].siteId === '1' || sites[i].siteId === '2' || sites[i].siteId === '3'|| sites[i].siteId === '4') {
                            carAnimate(Number(sites[i].siteId), Number(sites[i].nearbySta));
                        }
@@ -693,43 +693,67 @@
    function carAnimate(id, target) {
        // debugger
        var targetTop = 0;
        if (id === 1 || id === '1' || id === '2' || id === 2 || id === '3' || id === 3) {
        if (id === 1 || id === '1' || id === '2' || id === 2 || id === '3' || id === 3 ||id === '4' || id === 4) {
            switch (target) {
                case 1:
                    targetTop += 792;
                case 1004:
                    targetTop += 84;
                    break;
                case 2:
                    targetTop += 771;
                case 1007:
                    targetTop += 128;
                    break;
                case 3:
                    targetTop += 727;
                    break;
                case 4:
                    targetTop += 706;
                    break;
                case 5:
                    targetTop += 662;
                    break;
                case 6:
                    targetTop += 620;
                    break;
                case 7:
                    targetTop += 578;
                    break;
                case 8:
                    targetTop += 530;
                    break;
                case 9:
                case 1010:
                    targetTop += 190;
                    break;
                case 10:
                    targetTop += 147;
                case 1014:
                    targetTop += 240;
                    break;
                case 11:
                    targetTop += 107;
                case 1018:
                    targetTop += 300;
                    break;
                case 12:
                    targetTop += 63;
                case 1021:
                    targetTop += 350;
                    break;
                case 1024:
                    targetTop += 415;
                    break;
                case 1028:
                    targetTop += 465;
                    break;
                case 1031:
                    targetTop += 530;
                    break;
                case 1035:
                    targetTop += 580;
                    break;
                case 2003:
                    targetTop += 84;
                    break;
                case 2006:
                    targetTop += 128;
                    break;
                case 2009:
                    targetTop += 19.;
                    break;
                case 2012:
                    targetTop += 240;
                    break;
                case 2015:
                    targetTop += 300;
                    break;
                case 2018:
                    targetTop += 350;
                    break;
                case 2021:
                    targetTop += 415;
                    break;
                case 2024:
                    targetTop += 465;
                    break;
                case 2027:
                    targetTop += 530;
                    break;
                case 2030:
                    targetTop += 580;
                    break;
                default:
                    return;
@@ -738,8 +762,56 @@
            return;
        }
        $("#site-" + id).animate({top: targetTop + 'px'}, 1000);
        $("#site-" + id).animate({top: targetTop + 'px'}, 0);
    }
    // 检查 URL 中是否包含 fullscreen=true 参数
    function checkFullscreen() {
        const urlParams = new URLSearchParams(window.location.search);
        const fullscreen = urlParams.get('fullscreen');
        if (fullscreen === 'true') {
            enterFullscreen();
        }
    }
    // 进入全屏模式
    function enterFullscreen() {
        if (!document.fullscreenElement) {
            if (document.documentElement.requestFullscreen) {
                document.documentElement.requestFullscreen();
            } else if (document.documentElement.mozRequestFullScreen) { // Firefox
                document.documentElement.mozRequestFullScreen();
            } else if (document.documentElement.webkitRequestFullscreen) { // Chrome, Safari, Opera
                document.documentElement.webkitRequestFullscreen();
            } else if (document.documentElement.msRequestFullscreen) { // IE/Edge
                document.documentElement.msRequestFullscreen();
            }
        }
    }
    // 按钮点击事件,触发缩放
    document.getElementById('zoomBtn').addEventListener('click', function() {
        simulateCtrlWheelZoomOut();
    });
    // 模拟 Ctrl + 滚轮下滑来缩小网页
    function simulateCtrlWheelZoomOut() {
        let scale = 1;  // 默认缩放比例
        // 获取当前页面的缩放比例
        let currentScale = window.getComputedStyle(document.body).transform;
        if (currentScale !== 'none') {
            scale = parseFloat(currentScale.match(/matrix\((.*)\)/)[1].split(',')[0]);
        }
        // 计算新的缩放比例,模拟缩小
        let newScale = scale * 0.9; // 每次点击缩小10%
        // 应用新的缩放比例
        document.body.style.transform = 'scale(' + newScale + ')';
        document.body.style.transformOrigin = 'top left';  // 设置缩放原点
    }
</script>