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