From e6b8c60deb5d86736455e65b85c888619008286f Mon Sep 17 00:00:00 2001 From: LSH Date: 星期二, 21 十一月 2023 14:17:46 +0800 Subject: [PATCH] # --- src/main/resources/mapper/BasRgvMapMapper.xml | 17 + src/main/java/com/zy/asrs/entity/WrkMastSta.java | 11 src/main/java/com/zy/asrs/utils/RouteUtils.java | 95 +++++++ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 411 +++++++++++++++++++++++++++++++++ src/main/java/com/zy/core/MainProcess.java | 7 src/main/java/com/zy/core/model/protocol/RgvProtocol.java | 6 src/main/java/com/zy/asrs/entity/BasRgvMap.java | 85 +++++++ src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java | 5 src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java | 12 + src/main/resources/mapper/WrkMastStaMapper.xml | 31 ++ 10 files changed, 664 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/zy/asrs/entity/BasRgvMap.java b/src/main/java/com/zy/asrs/entity/BasRgvMap.java new file mode 100644 index 0000000..190dec9 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasRgvMap.java @@ -0,0 +1,85 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("asr_bas_rgv_map") +public class BasRgvMap implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * RGV缂栧彿 + */ + @ApiModelProperty(value= "RGV缂栧彿") + @TableId(value = "rgv_no", type = IdType.INPUT) + @TableField("rgv_no") + private Integer rgvNo; + + /** + * 寮�濮嬭寖鍥� + */ + @ApiModelProperty(value= "寮�濮嬭寖鍥�") + @TableField("start_route") + private Integer startRoute; + + /** + * 缁撴潫鑼冨洿 + */ + @ApiModelProperty(value= "缁撴潫鑼冨洿") + @TableField("end_route") + private Integer endRoute; + + /** + * 褰撳墠浣嶇疆 + */ + @ApiModelProperty(value= "褰撳墠浣嶇疆") + @TableField("now_route") + private Integer nowRoute; + + /** + * 鐘舵�� + */ + @ApiModelProperty(value= "鐘舵��") + @TableField("rgv_status") + private Integer rgvStatus; + + /** + * 閿�-寮�濮�-浣嶇疆 + */ + @ApiModelProperty(value= "閿�-寮�濮�-浣嶇疆") + @TableField("lock_start_route") + private Integer lockStartRoute; + + /** + * 閿�-缁撴潫-浣嶇疆 + */ + @ApiModelProperty(value= "閿�-缁撴潫-浣嶇疆") + @TableField("lock_end_route") + private Integer lockEndRoute; + + public BasRgvMap() {} + + public BasRgvMap(Integer rgvNo, Integer startRoute, Integer endRoute, Integer nowRoute, Integer rgvStatus, Integer lockStartRoute, Integer lockEndRoute) { + this.rgvNo = rgvNo; + this.startRoute = startRoute; + this.endRoute = endRoute; + this.nowRoute = nowRoute; + this.rgvStatus = rgvStatus; + this.lockStartRoute = lockStartRoute; + this.lockEndRoute = lockEndRoute; + } + + public Integer getRgvNoOther(){ + return 3-this.rgvNo; + } + + +} diff --git a/src/main/java/com/zy/asrs/entity/WrkMastSta.java b/src/main/java/com/zy/asrs/entity/WrkMastSta.java index 75e3427..f3a2b96 100644 --- a/src/main/java/com/zy/asrs/entity/WrkMastSta.java +++ b/src/main/java/com/zy/asrs/entity/WrkMastSta.java @@ -80,7 +80,7 @@ /** * 绫诲瀷 0:闈炵┖ 1:绌烘澘 */ - @ApiModelProperty(value= "绫诲瀷 0:闈炵┖ 1:绌烘澘") + @ApiModelProperty(value= "绫诲瀷 1:婊$増 2:绌烘澘") private Integer type; /** @@ -100,11 +100,18 @@ /** * 宸ヤ綔绫诲瀷 */ - @ApiModelProperty(value= "宸ヤ綔绫诲瀷") + @ApiModelProperty(value= "宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭斁 3锛氬彇鏀� 4锛氭媶鐩�") @TableField("wrk_type") private Integer wrkType; /** + * 宸ヤ綔绫诲瀷 + */ + @ApiModelProperty(value= "宸ヤ綔绫诲瀷") + @TableField("wrk_crn") + private Integer wrkCrn; + + /** * 鏍囪鏃堕棿 */ @ApiModelProperty(value= "鏍囪鏃堕棿") diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java new file mode 100644 index 0000000..9f6ffa2 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.BasRgvMap; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasRgvMapMapper extends BaseMapper<BasRgvMap> { + +} diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java index e55e237..680f267 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java @@ -16,12 +16,12 @@ /* * 鑾峰彇鎵�鏈変换鍔℃暟閲� * */ - Integer selectAllWrkCount(); + Integer selectAllWrkCount(@Param("type")Integer type); /* * 鑾峰彇鎵�鏈夊彲鎵ц浠诲姟 * */ - List<WrkMastSta> selectAllWrkMastStaList(); + List<WrkMastSta> selectAllWrkMastStaList(@Param("type")Integer type); /* * 鏌ヨ鎸囧畾宸ヤ綔鍙蜂换鍔� @@ -32,5 +32,6 @@ * 鏌ヨ涓嶅共娑夌殑鍙墽琛屼换鍔� * */ WrkMastSta selectNoInterfere(@Param("staStarts") List<Integer> staStarts,@Param("staEnds") List<Integer> staEnds); + List<WrkMastSta> selectNoInterfereList(@Param("staStarts") List<Integer> staStarts,@Param("staEnds") List<Integer> staEnds); } diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 8bfa67d..ef77d64 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -10,6 +10,7 @@ import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; +import com.zy.asrs.utils.RouteUtils; import com.zy.asrs.utils.Utils; import com.zy.asrs.utils.VersionUtils; import com.zy.common.model.LocTypeDto; @@ -95,6 +96,8 @@ private RedisUtil redisUtil; @Autowired private WrkMastStaMapper wrkMastStaMapper; + @Autowired + private BasRgvMapMapper basRgvMapMapper; @Value("${wms.url}") private String wmsUrl; @@ -3810,27 +3813,417 @@ * 瀹屾垚灏忚溅浠诲姟 */ public synchronized void rgvCompleteWrkMastSta() { + try{ + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } + // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔� + if (rgvProtocol.getStatusType() == RgvStatusType.WAITING + && rgvProtocol.getModeType() == RgvModeType.AUTO + ) { + log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); + if (rgvProtocol.getTaskNo1()!=0){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); + if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){ + log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta); + continue; + } + boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); + if (!rgvComplete){ + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); + break; + } + wrkMastSta.setWrkSts(3); + wrkMastStaMapper.updateById(wrkMastSta); + }else if (rgvProtocol.getTaskNo2()!=0){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().intValue()); + if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ + log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta); + continue; + } + boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); + if (!rgvComplete){ + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo()); + break; + } + wrkMastSta.setWrkSts(3); + wrkMastStaMapper.updateById(wrkMastSta); + }else { + log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{},绛夊緟wcs纭浣嗘槸娌℃湁宸ヤ綔鍙凤紒",rgvProtocol.getRgvNo()); + } + } + } + }catch (Exception e){ + log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�"+e); + } } /** * 鎵ц灏忚溅鎼繍浠诲姟 */ - public synchronized void rgvRunWrkMastSta() { - Integer signCount = 0; - for (RgvSlave rgvSlave:slaveProperties.getRgv()){ + public synchronized void rgvRunWrkMastFullSta() { + try{ + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } - if (true){//rgv鍙敤 - signCount++; + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + continue; + } + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:婊$増 3锛氬彇鏀� + continue; + } + boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd()); + if (signMap){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return; + }else { + log.error("3864琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } } + }catch (Exception e){ + log.error("3875琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�"); + log.error("3875琛�"+e); } - List<WrkMastSta> wrkMastStas = wrkMastStaMapper.selectAllWrkMastStaList(); - for (WrkMastSta wrkMastSta : wrkMastStas) { - // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� - if (true) { + } + /** + * 鎵ц灏忚溅鎼繍浠诲姟 + */ + public synchronized void rgvRunWrkMastEmptyStaPut() {//鏀� + try{ + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded2()==1 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + continue; + } + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿 + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔� + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:绌烘澘 2:鏀� + continue; + } + boolean sign = false; + if (wrkMastSta.getStaStart()==0 && wrkMastSta.getStaEnd()!=0){//鏀� + sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta); + }else { + continue; + } + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); + if (signMap){ + wrkMastSta.setWrkSts(2); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return; + }else { + log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } } + }catch (Exception e){ + log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触"); + log.error("3933琛�"+e); } } + public synchronized void rgvRunWrkMastEmptyStaTake() {//鍙� + try{ + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded2()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + continue; + } + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=1){// 2:绌烘澘 1:鍙� + continue; + } + boolean sign = false; + if (wrkMastSta.getStaEnd()==0 && wrkMastSta.getStaStart()!=0){//鍙� + sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta); + }else { + continue; + } + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); + if (signMap){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return; + }else { + log.error("3879琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } + } + }catch (Exception e){ + log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触"); + log.error("3989琛�"+e); + } + } + + + /* + * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔� + * */ + public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣 + rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔� + * */ + public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鏀捐揣鑷宠緭閫佺嚎浠诲姟 + * */ + public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鍙栫┖鏉胯嚦宸ヤ綅浠诲姟 + * */ + public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅2璧风偣 + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鏀剧┖鏉胯嚦杈撻�佺嚎浠诲姟 + * */ + public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅澶嶄綅 + * */ + public synchronized boolean rgvComplete(Integer rgvId){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(3, new RgvCommand()))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鍦板浘鏇存柊 鏇存柊閿� + * */ + public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){ + +// List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute()); + //鏇存柊褰撳墠灏忚溅閿� + try{ + Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//鑾峰彇鏈�杩滅珯鐐� + basRgvMapCurrent.setLockEndRoute(farCurrentStaNo); + basRgvMapMapper.updateById(basRgvMapCurrent); + + //鏇存柊鍙︿竴鍙板皬杞﹀湴鍥� + Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther(); + BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther); + List<Integer> integers = RouteUtils.RouteMapCurrentFar(farCurrentStaNo, basRgvMapCurrent.getLockStartRoute()); + Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃� + basRgvMapOther.setStartRoute(lockEndRoute); + basRgvMapMapper.updateById(basRgvMapOther); + return true; + }catch (Exception e){ + log.error("灏忚溅鍦板浘鏇存柊鍑洪敊锛�"); + return false; + } + } } diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java index d0514e8..9fbe2da 100644 --- a/src/main/java/com/zy/asrs/utils/RouteUtils.java +++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java @@ -4,6 +4,7 @@ import java.util.List; import static java.util.stream.Collectors.toList; import com.zy.core.enums.RouteCollectCountType; +import springfox.documentation.spring.web.json.Json; /** * Created by Monkey D. Luffy on 2023/7/18 @@ -63,6 +64,82 @@ return result; } + /* + * 鑾峰彇鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMas(Integer a,Integer b,Integer c,Integer d){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b); + int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c); + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + if (id==0){ + if (ia>ib){ + if (ia>ic){ + return a; + }else { + return c; + } + }else { + if (ib>ic){ + return b; + }else { + return c; + } + } + }else { + if (ia<ib){ + if (ia<ic){ + return a; + }else { + return c; + } + }else { + if (ib<ic){ + return b; + }else { + return c; + } + } + } + } + + public static Integer[] RouteIndexFarArr(Integer a,Integer b,Integer c,Integer d){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b); + int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c); + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + return new Integer[]{ia,ib,ic,id}; + } + + /* + * a 灏忚溅褰撳墠浣嶇疆 + * b 灏忚溅浠诲姟寮�濮嬩綅缃� + * c 灏忚溅浠诲姟缁撴潫浣嶇疆 + * d 灏忚溅鍒濆浣嶇疆 + * 鑾峰彇鏈�澶ц矾寰勫樊鍊� + * */ + public static List<Integer> RouteMapCurrentFar(Integer a,Integer b,Integer c,Integer d){ + Integer farStn = RouteIndexFarMas(a, b, c, d); + return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET); + } + + public static List<Integer> RouteMapCurrentFar(Integer farStn,Integer d){ + return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET); + } + + /* + * 鍙︿竴鍙板皬杞︽渶杩滀綅缃� + * */ + public static Integer RouteMapOtherFarStnNo(List<Integer> routeDIFF,Integer d){ + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + if (id==0){ + return routeDIFF.get(0); + }else { + int size = routeDIFF.size(); + return routeDIFF.get(size-1); + } + } + //鏄惁鏈変氦闆� public static boolean getRouteBoolean(List<Integer> groupCurrent,List<Integer> groupOther){ for (Integer positionCurrent : groupCurrent){ @@ -109,6 +186,12 @@ return !getRouteBoolean(routeCurrent, routeOther); //鏄惁鏈変氦闆� } + public static List<Integer> RouteAutoBoolean(Integer a,Integer b,Integer c){ + return getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION); + } + + + public static void main(String[] arge){ List<Integer> routeCurrent = getRoute(104, 119); //鑾峰彇褰撳墠灏忚溅璺緞 List<Integer> routeOther = getRoute(117, 118); //鑾峰彇鍏跺畠灏忚溅璺緞 @@ -131,6 +214,18 @@ System.out.println("璺緞鍘婚噸骞堕泦锛歕t"+routeIntersection3); System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true)); + + List<Integer> routeDIFF = RouteMapCurrentFar(114, 104, 119, 117); + System.out.println("褰撳墠璺緞鏈�澶ч泦鍚堬細\t"+ routeDIFF); + + Integer routeFarOther= RouteMapOtherFarStnNo(routeDIFF,117); + System.out.println("鍙︿竴鍙板皬杞︽渶杩滅珯鐐癸細\t"+routeFarOther); + + + Integer[] integers = RouteIndexFarArr(114, 104, 119, 101); + for (Integer integer:integers){ + System.out.println(integer); + } } } diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 58f6bd6..16f7ab0 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -79,8 +79,11 @@ //瀹屾垚灏忚溅浠诲姟 mainService.rgvCompleteWrkMastSta(); - //鎵ц灏忚溅鎼繍浠诲姟 - mainService.rgvRunWrkMastSta(); + //鎵ц灏忚溅璐х墿鎼繍浠诲姟 + mainService.rgvRunWrkMastFullSta(); + //鎵ц灏忚溅绌烘澘鎼繍浠诲姟 + mainService.rgvRunWrkMastEmptyStaPut();//鏀� + mainService.rgvRunWrkMastEmptyStaTake();//鍙� /////////////////////////////////////RGV璋冨害///////////////////////////////////// diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java index f4345bb..aace472 100644 --- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java @@ -201,4 +201,10 @@ this.xDuration = Float.valueOf(xDuration); } + public Integer getRgvPosI(){ + //闇�瑕佹牴鎹幇鍦烘敼閫� 鏍规嵁璇诲埌鐨勫�艰幏鍙栧搴旂珯鐐逛綅缃� + if (RgvPos==null) return 0; + return RgvPos.intValue(); + } + } diff --git a/src/main/resources/mapper/BasRgvMapMapper.xml b/src/main/resources/mapper/BasRgvMapMapper.xml new file mode 100644 index 0000000..a4f5bae --- /dev/null +++ b/src/main/resources/mapper/BasRgvMapMapper.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.BasRgvMapMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvMap"> + <result column="rgv_no" property="rgvNo" /> + <result column="start_route" property="startRoute" /> + <result column="end_route" property="endRoute" /> + <result column="now_route" property="nowRoute" /> + <result column="rgv_status" property="rgvStatus" /> + <result column="lock_start_route" property="lockStartRoute" /> + <result column="lock_end_route" property="lockEndRoute" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/WrkMastStaMapper.xml b/src/main/resources/mapper/WrkMastStaMapper.xml index 0a12f0a..429d50c 100644 --- a/src/main/resources/mapper/WrkMastStaMapper.xml +++ b/src/main/resources/mapper/WrkMastStaMapper.xml @@ -21,7 +21,13 @@ </resultMap> <select id="selectAllWrkMastStaList" resultMap="BaseResultMap"> - select * from asr_wrk_mast_sta and wrk_sts=0 order by line_number,id + select * from asr_wrk_mast_sta + where 1=1 + and wrk_sts=0 + <if test="type!=null"> + and type = #{type} + </if> + order by line_number,id </select> <select id="selectByWrkNo" resultMap="BaseResultMap"> @@ -49,8 +55,31 @@ order by line_number,id </select> + <select id="selectNoInterfereList" resultMap="BaseResultMap"> + select * from asr_wrk_mast_sta + where 1=1 + and (sta_start in + <foreach item="item" collection="staStarts" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + or sta_start = 0 + ) + and (sta_end in + <foreach item="item" collection="staEnds" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + or sta_end = 0 + ) + and wrk_sts=0 + order by line_number,id + </select> + <select id="selectAllWrkCount" resultMap="Integer"> select count(1) from asr_wrk_mast_sta + where 1=1 + <if test="type!=null"> + and type = #{type} + </if> </select> -- Gitblit v1.9.1