#
1
7 天以前 428afb64e7fc9b7c3701eacab98086fb622cca7b
#
11个文件已修改
169 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/WrkDetl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkDetlService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastStaMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -262,6 +262,11 @@
    @TableField("appe_time")
    private Date appeTime;
    @ApiModelProperty(value= "客户名称")
    private String owner;
    @ApiModelProperty(value= "客户编号")
    private Long uuid;
    /**
     * 备注
     */
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -14,6 +14,7 @@
public interface WrkDetlMapper extends BaseMapper<WrkDetl> {
    List<WrkDetl> findByWorkNo(Integer workNo);
    List<WrkDetl> findByBarcode(String barcode);
    int updateIoTime(@Param("workNo") Integer workNo, @Param("ioTime") Date ioTime);
src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -12,6 +12,7 @@
    void createWorkDetail(Integer workNo, List<WaitPakin> waitPakins, String barcode);
    List<WrkDetl> findByWorkNo(Integer workNo);
    List<WrkDetl> findByBarcode(String barcode);
    boolean updateIoTime(Integer workNo, Date ioTime);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -121,7 +121,7 @@
    private Integer inventoryNumber;
    public Integer wrkNo = 10001;
    public static final List<Integer> LEFT_POSITION = Arrays.asList(1018,2018);
    public static final List<Integer> LEFT_POSITION = Arrays.asList(1004,1014,1018,1028,1035,2006,2012,2018,2024,2030);
    /**
     * 组托
     * 入库站,根据条码扫描生成入库工作档,工作状态 2
@@ -496,7 +496,6 @@
                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()));
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.error("输送线下发4:"+9996+","+(pickSta.getStaNo().shortValue()-(short)1));
                        //LED
                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                        // led 异常显示
@@ -1378,6 +1377,13 @@
                    staProtocol2 = staProtocol2.clone();
                }
                SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol4004 = devpThread2.getStation().get(4004);
                if (staProtocol4004 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol4004);
                    break;
                } else {
                    staProtocol4004 = staProtocol4004.clone();
                }
                StaProtocol staProtocol3 = devpThread2.getStation().get(2016);
                if (staProtocol3 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2);
@@ -1401,6 +1407,9 @@
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(staProtocol4004.isLoading()){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
@@ -1440,6 +1449,9 @@
                        break;
//                        return;
                    }
                    if(staProtocol4004.isLoading()){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
@@ -1469,6 +1481,8 @@
                }
            }
            if (slave.getId() == 3 && wrkMast9996 != null) {
                SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol4001 = devpThread2.getStation().get(4001);
                if (staProtocol4001 == null) {
@@ -1476,6 +1490,20 @@
                    break;
                } else {
                    staProtocol4001 = staProtocol4001.clone();
                }
                StaProtocol staProtocol2013 = devpThread2.getStation().get(2013);
                if (staProtocol2013 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2013);
                    break;
                } else {
                    staProtocol2013 = staProtocol2013.clone();
                }
                StaProtocol staProtocol1019 = devpThread1.getStation().get(1019);
                if (staProtocol1019 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol1019);
                    break;
                } else {
                    staProtocol1019 = staProtocol1019.clone();
                }
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
@@ -1493,6 +1521,12 @@
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(staProtocol1019.isLoading() && wrkMast9996.getStaNo() < 2000){
                        continue;
                    }
                    if(staProtocol2013.isLoading() && wrkMast9996.getStaNo() > 2000){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
@@ -2242,6 +2276,12 @@
                    case 10:
                        ledCommand.setTitle("空板入库");
                        break;
                    case 12:
                        ledCommand.setTitle("物料衔接");
                        break;
                    case 57:
                        ledCommand.setTitle("盘点再入库");
                        break;
                    case 101:
                        ledCommand.setTitle("全板出库");
                        break;
@@ -2265,6 +2305,20 @@
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                ledCommand.setBarcode(wrkMast.getBarcode());
                if(wrkMast.getIoType() == 12){
                    List<WrkDetl> wrkDetls = wrkDetlService.findByBarcode(wrkMast.getBarcode());
                    wrkDetls.forEach(wrkDetl -> {
                        Double total = 0.0;
                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
                        if (Cools.isEmpty(locDetl)) {
                            total = wrkDetl.getAnfme();
                        } else {
                            total = locDetl.getAnfme();
                        }
                        ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                    });
                }
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
@@ -3357,7 +3411,7 @@
                        continue;
                    }
                    if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
                    if (staProtocol.isAutoing()  && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
                        flag = true;
                    }
                    if (!flag) {
@@ -3503,7 +3557,7 @@
            // 只有当RGV空闲 并且 无任务时才继续执行
            if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
                    && basRgv.getPakToCrn().equals("1") && rgvThread.isPaking()) {
                     && rgvThread.isPaking()) {
                News.warnNoLog(""+mark+" - 0"+" - 开始执行RGV入出库作业下发");
                // 如果最近一次是入库模式
//                rgvRunWrkMastInTest();
@@ -3749,13 +3803,13 @@
            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 ) {
                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo());
                continue;
            }
            WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWrkNo( rgvProtocol.getTaskNo1());
            if(basRgv.getPakToCrn().equals("0")){
                wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol.getWorkNo()));//处理接驳任务时,连续只取接驳任务
            }
            if( null == wrkMastSta ) {
                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo());
                continue;
            }
            boolean result = false;
            if(wrkMastSta1!= null && rgvProtocol.getRgvNo() == 1){ //距离计算   2楼单入库口不需要计算
@@ -3766,6 +3820,18 @@
                basRgvService.updateById(basRgv);
                continue;
            }
            if(wrkMastSta != null &&LEFT_POSITION.contains(wrkMastSta.getStaEnd())){
                StaProtocol staProtocolSta = devpThread.getStation().get(wrkMastSta.getStaEnd());
                if (staProtocolSta == null) {
                    News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol);
                    continue;
                } else {
                    staProtocolSta = staProtocolSta.clone();
                }
                if(staProtocolSta.isLoading()){
                    continue;
                }
            }
            wrkMastSta.setWorkSta(wrkMastSta1 !=null ? 2 : 1);//若1号工位有任务给2号工位
            wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo());
@@ -3781,7 +3847,6 @@
                        }
                    }
                }
                if(wrkMastSta3 != null ){
                    List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart());
                    if(wrkMastStaPaking.size() < 1){
@@ -3800,7 +3865,6 @@
                basRgvService.updateById(basRgv);
                rgvThread.setPaking(false);
//                rgvThread.setPakIn(false);//入库不允许
                try{
                    wrkMastSta.setWrkSts(1);
                    wrkMastStaMapper.updateById(wrkMastSta);
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -52,6 +52,10 @@
    public List<WrkDetl> findByWorkNo(Integer workNo) {
        return this.baseMapper.findByWorkNo(workNo);
    }
    @Override
    public List<WrkDetl> findByBarcode(String barcode) {
        return this.baseMapper.findByBarcode(barcode);
    }
    @Override
    public boolean updateIoTime(Integer workNo, Date ioTime) {
src/main/java/com/zy/core/MainProcess.java
@@ -115,6 +115,7 @@
                        k = 0;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    log.error("RGV  ===>>  小车任务作业下发异常"+e);
                }
//                //完成小车任务
@@ -164,15 +165,15 @@
                    continue;
                }
                //agv任务下发
                mainService.agvTaskAssignment0();//0===》1  AGV库位==》输送线站点  0
                mainService.agvTaskAssignment1();//0===》1  AGV库位==》AGV库位  1
                mainService.agvTaskAssignment2();//0===》1  输送线站点==》AGV库位  2
                mainService.agvTaskAssignment3();//0===》1  输送线站点==》输送线站点  3
                mainService.agvTaskCreateFull();//任务生成  出库口==》AGV库位
                mainService.agvTaskCreateEmpty();//任务生成  出库口==》AGV库位
                mainService.agvTaskCreateR();//任务生成  AGV库位==》入库口
//                mainService.agvTaskAssignment0();//0===》1  AGV库位==》输送线站点  0
//                mainService.agvTaskAssignment1();//0===》1  AGV库位==》AGV库位  1
//                mainService.agvTaskAssignment2();//0===》1  输送线站点==》AGV库位  2
//                mainService.agvTaskAssignment3();//0===》1  输送线站点==》输送线站点  3
//
//
//                mainService.agvTaskCreateFull();//任务生成  出库口==》AGV库位
//                mainService.agvTaskCreateEmpty();//任务生成  出库口==》AGV库位
//                mainService.agvTaskCreateR();//任务生成  AGV库位==》入库口
            } catch (Exception e) {
                e.printStackTrace();
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -461,17 +461,17 @@
    public Integer getRgvPosI2() {
        // key: 站点号  value: 基准物理位置
        Map<Integer, Integer> posMap = new HashMap<>();
        posMap.put(2003, 314954);
        posMap.put(2006, 288094);
        posMap.put(2009, 246574);
        posMap.put(2012, 219584);
        posMap.put(2015, 177934);
        posMap.put(2018, 138126);
        posMap.put(2021, 102124);
        posMap.put(2024, 75174);
        posMap.put(2027, 33748);
        posMap.put(2030, 6449);
        int tolerance = 200; // 允许误差范围
        posMap.put(2030, 314954);
        posMap.put(2027, 288094);
        posMap.put(2024, 246574);
        posMap.put(2021, 219584);
        posMap.put(2018, 177934);
        posMap.put(2015, 138126);
        posMap.put(2012, 102124);
        posMap.put(2009, 75174);
        posMap.put(2006, 33748);
        posMap.put(2003, 6449);
        int tolerance = 500; // 允许误差范围
        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
            int site = entry.getKey();
src/main/resources/application.yml
@@ -346,18 +346,27 @@
    rgvOutTStn[0]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 2003
      staNo2: 2001
    rgvOutTStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 2009
      staNo2: 2007
    rgvOutTStn[2]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 2015
      staNo2: 2013
    rgvOutTStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 2021
      staNo2: 2019
    rgvOutTStn[4]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 2027
      staNo2: 2025
    #RGV出库放货站点
    rgvOutPStn[0]:
      devpPlcId: ${wcs-slave.devp[1].id}
src/main/resources/mapper/WrkDetlMapper.xml
@@ -29,6 +29,9 @@
    <select id="findByWorkNo" resultMap="BaseResultMap">
        select * from asr_wrk_detl where 1=1 and wrk_no = #{workNo}
    </select>
    <select id="findByBarcode" resultMap="BaseResultMap">
        select * from asr_wrk_detl where 1=1 and zpallet = #{barcode} and wrk_no != 9996
    </select>
    <update id="updateIoTime">
        update asr_wrk_detl
src/main/resources/mapper/WrkMastStaMapper.xml
@@ -119,9 +119,12 @@
        or sta_end = 0
        )
        and wrk_sts=0
        and sta_end in (1018,2018)
        and sta_end in (2006.2012,2018,2024,2030,1004,1014,1018,1028,1035)
        and wrk_no = #{workNo}
        order by line_number,id
        order by
        case when mk = 1 then 0 else 1 end,
        line_number,
        id
    </select>
    <select id="selectNoInterfereToCrn" resultMap="BaseResultMap">
src/main/webapp/views/console.html
@@ -555,6 +555,7 @@
                    var sites = res.data;
                    for (var i = 0; i < sites.length; i++) {
                        var siteEl = $("#site-" + sites[i].siteId);
                        // console.log(sites[i].siteStatus);
                        siteEl.attr("class", "site " + sites[i].siteStatus);
                        if (sites[i].workNo != null && sites[i].workNo > 0) {
                            siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]");
@@ -761,11 +762,19 @@
                targetTop += 580;
                break;
            default:
                console.log("无效的目标站点:" + target);
                return; // 无效的站点,跳过
        }
        // 确保目标站点的 DOM 元素存在
        var siteElement = $("#site-" + id);
        if (!siteElement.length) {
            console.log("未找到站点元素:" + id);
            return; // 如果站点元素不存在,跳过
        }
        // 获取当前站点位置
        var currentTop = $("#site-" + id).position().top;
        var currentTop = siteElement.position().top;
        // 计算两个站点之间的距离
        var distance = Math.abs(targetTop - currentTop);
@@ -774,10 +783,11 @@
        var duration = Math.max(500, Math.min(distance / 2, 2000));
        // 执行动画,平滑地移动到目标位置
        $("#site-" + id).animate({ top: targetTop + 'px' }, duration);
        siteElement.animate({ top: targetTop + 'px' }, duration);
    }
    // 检查 URL 中是否包含 fullscreen=true 参数
    function checkFullscreen() {
        const urlParams = new URLSearchParams(window.location.search);