| src/main/java/com/zy/asrs/entity/WrkDetl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/WrkDetlService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/model/protocol/RgvProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/WrkDetlMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/WrkMastStaMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/console.html | ●●●●● 补丁 | 查看 | 原始文档 | 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);