Browse Source

Merge remote-tracking branch 'origin/master'

master
修宁 6 months ago
parent
commit
829d895022
  1. 28
      servo/src/main/java/com/galaxis/rcs/plan/path/PathUtils.java
  2. 19
      servo/src/main/java/com/galaxis/rcs/ptr/AmrMessageHandler.java
  3. 6
      servo/src/main/java/com/galaxis/rcs/ptr/AmrTaskMode.java
  4. 7
      servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java
  5. 82
      servo/src/main/java/com/yvan/workbench/controller/DeviceManager.java
  6. 15
      servo/src/main/java/com/yvan/workbench/model/request/QueryExecutorReq.java
  7. 13
      servo/src/main/java/com/yvan/workbench/model/request/QueryInvLedgerReq.java
  8. 15
      servo/src/main/java/com/yvan/workbench/model/request/QueryInvLpnReq.java
  9. 13
      servo/src/main/java/com/yvan/workbench/model/request/QueryLocationReq.java

28
servo/src/main/java/com/galaxis/rcs/plan/path/PathUtils.java

@ -180,4 +180,32 @@ public class PathUtils {
float diff = Math.abs(angle1 - angle2) % 360; float diff = Math.abs(angle1 - angle2) % 360;
return diff > 180 ? 360 - diff : diff; return diff > 180 ? 360 - diff : diff;
} }
public static short amrAngleToDirection(double angle) {
// 误差范围 +-1度
double angleRange = 1.0f;
while (angle < 0) {
angle += 360;
}
while (angle >= 360) {
angle -= 360;
}
if (angle <= angleRange || angle >= 360 - angleRange) {
return 0;
}
if (angle <= 90 + angleRange && angle >= 90 - angleRange) {
return 1;
}
if (angle <= 180 + angleRange && angle >= 180 - angleRange) {
return 2;
}
if (angle <= 270 + angleRange && angle >= 270 - angleRange) {
return 3;
}
return 15;
}
} }

19
servo/src/main/java/com/galaxis/rcs/ptr/AmrMessageHandler.java

@ -3,6 +3,7 @@ package com.galaxis.rcs.ptr;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.galaxis.rcs.plan.path.PathUtils;
import com.galaxis.rcs.ptr.receiveEntity.*; import com.galaxis.rcs.ptr.receiveEntity.*;
import com.galaxis.rcs.ptr.receiveEntity.base.*; import com.galaxis.rcs.ptr.receiveEntity.base.*;
import com.galaxis.rcs.ptr.sendEntity.*; import com.galaxis.rcs.ptr.sendEntity.*;
@ -432,7 +433,7 @@ public class AmrMessageHandler {
agvItem.x = message.X; agvItem.x = message.X;
agvItem.y = message.Y; agvItem.y = message.Y;
agvItem.orientation = message.CurOrientation; agvItem.orientation = message.CurOrientation;
agvItem.direction = PathUtils.amrAngleToDirection(message.CurOrientation);
agvItem.updatePosition(message.CurLogicX, message.CurLogicY, message.CurDirection); agvItem.updatePosition(message.CurLogicX, message.CurLogicY, message.CurDirection);
} }
@ -448,26 +449,12 @@ public class AmrMessageHandler {
agvItem.orientation = message.CurOrientation; agvItem.orientation = message.CurOrientation;
agvItem.logicX = message.CurLogicX; agvItem.logicX = message.CurLogicX;
agvItem.logicY = message.CurLogicY; agvItem.logicY = message.CurLogicY;
agvItem.direction = PathUtils.amrAngleToDirection(message.CurOrientation);
// 更新Redis // 更新Redis
agvItem.updateRedisStatus(); agvItem.updateRedisStatus();
} }
private void handleTaskStatusMessage(PtrAgvItem agvItem, JsonWrapper jw, String json) throws MqttException, JsonProcessingException { private void handleTaskStatusMessage(PtrAgvItem agvItem, JsonWrapper jw, String json) throws MqttException, JsonProcessingException {
// int eventId = jw.asInt("content", "EventId");
// int seqNo = jw.asInt("content", "SeqNo");
//
// switch (eventId) {
// case 4: // 任务完成
// int curLogicX = jw.asInt("content", "Info", "CurLogicX");
// int curLogicY = jw.asInt("content", "Info", "CurLogicY");
// agvItem.updateDeviceTaskStatus(seqNo, curLogicX, curLogicY, eventId);
// break;
// default:
// agvItem.updateDeviceTaskStatus(seqNo, 0, 0, eventId);
// break;
// }
int EventId = jw.asInt("content", "EventId"); int EventId = jw.asInt("content", "EventId");
// log.info("1-Received message: " + json); // log.info("1-Received message: " + json);

6
servo/src/main/java/com/galaxis/rcs/ptr/AmrTaskMode.java

@ -44,11 +44,7 @@ public enum AmrTaskMode {
/** /**
* 自定义模式 * 自定义模式
*/ */
AMR_CUSTOMIZE_MODE(8, "自定义模式"), AMR_CUSTOMIZE_MODE(8, "自定义模式");
/**
* 主程序退出关机或关服务时会进入这个模式
*/
AMR_SHUTDOWN_MODE(8, "主程序退出");
// 枚举值映射 // 枚举值映射
private static final Map<Integer, AmrTaskMode> VALUE_MAP; private static final Map<Integer, AmrTaskMode> VALUE_MAP;

7
servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java

@ -261,7 +261,10 @@ public abstract class PtrAgvItem extends ExecutorItem {
if (this.isPaused) { if (this.isPaused) {
return false; return false;
} }
return true; if (this.taskMode != AmrTaskMode.AMR_FREE_MODE) {
return false;
}
return this.isOnline;
} }
public void taskCompleted(int logicX, int logicY, short direction, int taskStatus) { public void taskCompleted(int logicX, int logicY, short direction, int taskStatus) {
@ -390,7 +393,7 @@ public abstract class PtrAgvItem extends ExecutorItem {
} }
public void updateTaskMode(int taskMode) { public void updateTaskMode(int taskMode) {
this.taskMode = AmrTaskMode.fromValue(taskMode);
} }
public void updateRedisStatus() { public void updateRedisStatus() {

82
servo/src/main/java/com/yvan/workbench/controller/DeviceManager.java

@ -0,0 +1,82 @@
package com.yvan.workbench.controller;
import com.galaxis.rcs.common.entity.LccBasExecutor;
import com.galaxis.rcs.common.entity.LccBasLocation;
import com.galaxis.rcs.common.entity.LccInvLedger;
import com.querydsl.sql.SQLQuery;
import com.yvan.workbench.model.request.QueryExecutorReq;
import com.yvan.workbench.model.request.QueryInvLedgerReq;
import com.yvan.workbench.model.request.QueryInvLpnReq;
import com.yvan.workbench.model.request.QueryLocationReq;
import org.apache.commons.lang3.StringUtils;
import org.clever.core.model.request.QueryByPage;
import org.clever.core.model.request.page.Page;
import org.clever.data.jdbc.DaoFactory;
import org.clever.data.jdbc.QueryDSL;
import org.clever.data.jdbc.querydsl.utils.QueryDslUtils;
import java.util.LinkedHashMap;
import java.util.List;
import static com.galaxis.rcs.common.query.QLccBasContainer.lccBasContainer;
import static com.galaxis.rcs.common.query.QLccBasExecutor.lccBasExecutor;
import static com.galaxis.rcs.common.query.QLccBasLocation.lccBasLocation;
import static com.galaxis.rcs.common.query.QLccInvLedger.lccInvLedger;
import static com.galaxis.rcs.common.query.QLccInvLpn.lccInvLpn;
/**
* 作者lizw <br/>
* 创建时间2025/07/03 14:33 <br/>
*/
public class DeviceManager {
private static final QueryDSL QUERY_DSL = DaoFactory.getQueryDSL();
public static List<LccBasLocation> queryLocation(QueryLocationReq req) {
SQLQuery<LccBasLocation> query = QUERY_DSL.selectFrom(lccBasLocation).orderBy(lccBasLocation.locCode.asc());
if (StringUtils.isNotBlank(req.getLocCode())) {
query.where(lccBasLocation.locCode.eq(req.getLocCode().trim()));
}
return query.fetch();
}
public static List<LccBasExecutor> queryExecutor(QueryExecutorReq req) {
SQLQuery<LccBasExecutor> query = QUERY_DSL.selectFrom(lccBasExecutor).orderBy(lccBasExecutor.executorId.asc());
if (StringUtils.isNotBlank(req.getVirtualFloorCode())) {
query.where(lccBasExecutor.executorId.eq(req.getVirtualFloorCode().trim()));
}
if (req.getIsActive() != null) {
query.where(lccBasExecutor.isActive.eq(req.getIsActive()));
}
return query.fetch();
}
public static Page<LinkedHashMap<String, Object>> queryInvLpn(QueryInvLpnReq req) {
SQLQuery<LinkedHashMap<String, Object>> query = QUERY_DSL.select(QueryDslUtils.linkedMap(lccInvLpn, lccBasLocation, lccBasContainer))
.from(lccInvLpn)
.innerJoin(lccBasLocation).on(
lccInvLpn.locCode.eq(lccBasLocation.locCode).and(
lccBasLocation.envId.eq(lccBasLocation.envId)
)
)
.innerJoin(lccBasContainer).on(
lccInvLpn.lpn.eq(lccInvLpn.lpn).and(
lccBasContainer.envId.eq(lccInvLpn.envId)
)
).orderBy(lccInvLpn.lpn.asc());
if (StringUtils.isNotBlank(req.getLpn())) {
query.where(lccInvLpn.lpn.eq(req.getLpn().trim()));
}
if (StringUtils.isNotBlank(req.getLocCode())) {
query.where(lccInvLpn.locCode.eq(req.getLocCode().trim()));
}
return QueryDslUtils.queryByPage(query, QueryByPage.getCurrent());
}
public static Page<LccInvLedger> queryInvLedger(QueryInvLedgerReq req) {
SQLQuery<LccInvLedger> query = QUERY_DSL.selectFrom(lccInvLedger).orderBy(lccInvLedger.ledgerId.asc());
if (StringUtils.isNotBlank(req.getLpn())) {
query.where(lccInvLedger.lpn.eq(req.getLpn().trim()));
}
return QueryDslUtils.queryByPage(query, QueryByPage.getCurrent());
}
}

15
servo/src/main/java/com/yvan/workbench/model/request/QueryExecutorReq.java

@ -0,0 +1,15 @@
package com.yvan.workbench.model.request;
import lombok.Data;
/**
* 作者lizw <br/>
* 创建时间2025/07/03 14:43 <br/>
*/
@Data
public class QueryExecutorReq {
/** 仿真车所在楼层 */
private String virtualFloorCode;
/** 是否激活 */
private Boolean isActive;
}

13
servo/src/main/java/com/yvan/workbench/model/request/QueryInvLedgerReq.java

@ -0,0 +1,13 @@
package com.yvan.workbench.model.request;
import lombok.Data;
/**
* 作者lizw <br/>
* 创建时间2025/07/03 14:58 <br/>
*/
@Data
public class QueryInvLedgerReq {
/** 托盘条码 */
private String lpn;
}

15
servo/src/main/java/com/yvan/workbench/model/request/QueryInvLpnReq.java

@ -0,0 +1,15 @@
package com.yvan.workbench.model.request;
import lombok.Data;
/**
* 作者lizw <br/>
* 创建时间2025/07/03 14:48 <br/>
*/
@Data
public class QueryInvLpnReq {
/** 托盘条码 */
private String lpn;
/** 库存位置 */
private String locCode;
}

13
servo/src/main/java/com/yvan/workbench/model/request/QueryLocationReq.java

@ -0,0 +1,13 @@
package com.yvan.workbench.model.request;
import lombok.Data;
/**
* 作者lizw <br/>
* 创建时间2025/07/03 14:38 <br/>
*/
@Data
public class QueryLocationReq {
/** 位置编码 */
private String locCode;
}
Loading…
Cancel
Save