From 24f6766a113090fb97f9dd399586b61a364702ae Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 31 三月 2026 16:36:47 +0800
Subject: [PATCH] 1
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 110 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 67 insertions(+), 43 deletions(-)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 82c2626..b871092 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -8,10 +8,7 @@
import com.zy.acs.common.domain.protocol.*;
import com.zy.acs.common.domain.protocol.action.*;
import com.zy.acs.common.enums.*;
-import com.zy.acs.common.utils.Base62;
-import com.zy.acs.common.utils.GsonUtils;
-import com.zy.acs.common.utils.RedisSupport;
-import com.zy.acs.common.utils.Utils;
+import com.zy.acs.common.utils.*;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.framework.exception.CoolException;
@@ -20,10 +17,11 @@
import com.zy.acs.manager.common.exception.BusinessException;
import com.zy.acs.manager.core.domain.AgvBackpackDto;
import com.zy.acs.manager.core.domain.LaneDto;
+import com.zy.acs.manager.core.domain.PathDto;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.core.integrate.conveyor.ConveyorStationService;
-import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
import com.zy.acs.manager.core.integrate.dto.OpenBusSubmitParam;
+import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.*;
import com.zy.acs.manager.manager.service.*;
@@ -36,6 +34,7 @@
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import com.zy.acs.common.utils.News;
import java.util.*;
import java.util.stream.Collectors;
@@ -99,6 +98,8 @@
private StaReserveService staReserveService;
@Autowired
private ConveyorStationService conveyorStationService;
+ @Autowired
+ private FuncTaskService funcTaskService;
@SuppressWarnings("all")
@Transactional
@@ -243,7 +244,7 @@
bus.setBusSts(BusStsType.PROGRESS.val());
bus.setUpdateTime(now);
if (!busService.updateById(bus)) {
- log.error("Bus [{}] failed to Update 锛侊紒锛�", bus.getUuid());
+ News.error("Bus [{}] failed to Update 锛侊紒锛�", bus.getUuid());
}
}
return;
@@ -291,7 +292,7 @@
currSeg.setState(SegmentStateType.INIT.toString());
currSeg.setUpdateTime(now);
if (!segmentService.updateById(currSeg)) {
-// log.error("Segment [{}] failed to update 锛侊紒锛�", currSeg.getGroupId() + " - " + currSeg.getSerial());
+// News.error("Segment [{}] failed to update 锛侊紒锛�", currSeg.getGroupId() + " - " + currSeg.getSerial());
throw new CoolException("failed to update segment [" + currSeg.getGroupId() + "-" + currSeg.getSerial() + "] failed");
}
@@ -309,7 +310,7 @@
loadSeg.setCreateTime(now);
loadSeg.setUpdateTime(now);
if (!segmentService.save(loadSeg)) {
-// log.error("Segment [{}] failed to save 锛侊紒锛�", loadSeg.getTravelId() + " - " + loadSeg.getSerial());
+// News.error("Segment [{}] failed to save 锛侊紒锛�", loadSeg.getTravelId() + " - " + loadSeg.getSerial());
throw new CoolException("failed to save segment [" + loadSeg.getGroupId() + "-" + loadSeg.getSerial() + "] failed");
}
@@ -433,7 +434,7 @@
placeSeg.setCreateTime(now);
placeSeg.setUpdateTime(now);
if (!segmentService.save(placeSeg)) {
-// log.error("Segment [{}] failed to save 锛侊紒锛�", placeSeg.getTravelId() + " - " + placeSeg.getSerial());
+// News.error("Segment [{}] failed to save 锛侊紒锛�", placeSeg.getTravelId() + " - " + placeSeg.getSerial());
throw new CoolException("failed to save segment [" + placeSeg.getGroupId() + "-" + placeSeg.getSerial() + "] failed");
}
@@ -463,7 +464,7 @@
staReserveService.allocateCallBack(task, agvId);
});
// if (Cools.isEmpty(agvNo)) {
-//// log.warn("Task[{}] has an issue锛� because it failed to check out agv which is idle...", task.getSeqNum());
+//// News.warn("Task[{}] has an issue锛� because it failed to check out agv which is idle...", task.getSeqNum());
// continue;
// }
// task.setAgvId(agvService.getAgvId(agvNo));
@@ -475,7 +476,7 @@
// }
}
} catch (Exception e) {
- log.error("mainService.infuseAgvForTask", e);
+ News.error("mainService.infuseAgvForTask", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
@@ -652,7 +653,7 @@
dropGroups.add(group);
} else {
// import tip: the list must only contain ORIGIN and DESTINATION
- log.error("the list must only contain ORIGIN and DESTINATION");
+ News.error("the list must only contain ORIGIN and DESTINATION");
}
}
@@ -728,7 +729,7 @@
} catch (Exception e) {
- log.error("mainService.buildMajorTask[task]", e);
+ News.error("mainService.buildMajorTask[task]", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
@@ -765,7 +766,7 @@
endCode = codeService.getCacheById(funcSta.getCode());
}
if (null == endCode) {
- log.warn("AGV[{}] failed to search destination锛宼here hadn't any idle funSta锛孴askTypeType锛歿}", agvNo, taskType.toString());
+ News.warn("AGV[{}] failed to search destination锛宼here hadn't any idle funSta锛孴askTypeType锛歿}", agvNo, taskType.toString());
}
break;
case MOVE:
@@ -871,7 +872,7 @@
destFuncSta.setState(FuncStaStateType.OCCUPIED.toString());
destFuncSta.setUpdateTime(now);
if (!funcStaService.updateById(destFuncSta)) {
- log.error("FuncSta [{}] failed to update 锛侊紒锛�", destFuncSta.getName());
+ News.error("FuncSta [{}] failed to update 锛侊紒锛�", destFuncSta.getName());
}
break;
case MOVE:
@@ -882,7 +883,7 @@
return true;
} catch (Exception e) {
- log.error("mainService.buildMinorTask[task]", e);
+ News.error("mainService.buildMinorTask[task]", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@@ -893,9 +894,10 @@
* 鏍规嵁鍒嗙墖鐢熸垚鍔ㄤ綔 ( 杞﹁締鍙兘宸茬粡鍋氳繃涓�浜涗换鍔′簡,姝e湪绛夊緟涓嬩竴娈典换鍔� )
*/
@Transactional
- public synchronized void generateAction(Long agvId, List<Segment> segmentList, List<String> pathList, Date algoStartTime) {
+ public synchronized List<PathDto> generateAction(Long agvId, List<Segment> segmentList, List<String> pathList, Date algoStartTime) {
+ List<PathDto> pathTrace = new ArrayList<>();
try {
- if (Cools.isEmpty(agvId, segmentList)) { return; }
+ if (Cools.isEmpty(agvId, segmentList)) { return pathTrace; }
Date now = new Date();
long actionPrepareSts = ActionStsType.PREPARE.val();
// JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
@@ -924,6 +926,7 @@
if (!lastCode.getData().equals(pathList.get(0))) {
throw new CoolException("AGV[" + agvNo + "]瀹氫綅鍋忕Щ...");
}
+ pathTrace.add(new PathDto(lastCode.getData(), lastDirection, false));
boolean first = true;
for (Segment segment : segmentList) {
@@ -989,6 +992,7 @@
now // 宸ヤ綔鏃堕棿
));
lastDirection = nextLaneDir;
+ PathDto.markTurn(pathTrace, lastDirection);
}
if (nextDirection.equals(oppNextLaneDir)) {
@@ -1057,6 +1061,7 @@
));
lastDirection = nextDirection;
+ PathDto.markTurn(pathTrace, lastDirection);
}
}
}
@@ -1082,6 +1087,7 @@
));
lastDirection = nextDirection;
+ PathDto.markTurn(pathTrace, lastDirection);
}
// run
@@ -1104,6 +1110,7 @@
));
lastCode = nextCode;
+ pathTrace.add(new PathDto(lastCode.getData(), lastDirection, false));
}
@@ -1149,6 +1156,7 @@
));
lastDirection = firstTurnDir;
+ PathDto.markTurn(pathTrace, lastDirection);
}
first = false;
@@ -1276,6 +1284,7 @@
now // 宸ヤ綔鏃堕棿
));
lastDirection = oriStaWorkDirection;
+ PathDto.markTurn(pathTrace, lastDirection);
}
// 璁$畻璐у弶宸ヤ綔鏂瑰悜
actuatorDirectionType = ActuatorDirectionType.fromVal(oriSta.getActDir());
@@ -1341,6 +1350,7 @@
now // 宸ヤ綔鏃堕棿
));
lastDirection = destStaWorkDirection;
+ PathDto.markTurn(pathTrace, lastDirection);
}
// 鑳岀瘬鍙栬揣
if (backupAction) {
@@ -1401,6 +1411,7 @@
now // 宸ヤ綔鏃堕棿
));
lastDirection = chargeDirection;
+ PathDto.markTurn(pathTrace, lastDirection);
}
// charge
@@ -1554,9 +1565,10 @@
throw new BusinessException("group[" + groupId + "] 鍔ㄤ綔淇濆瓨澶辫触");
}
- log.info("{}鍙稟gv鍔ㄤ綔缁勮瀹屾垚锛屾寚浠ゆ暟閲忥細{}", agvNo, newActionList.size());
+ News.info("{}鍙稟gv鍔ㄤ綔缁勮瀹屾垚锛屾寚浠ゆ暟閲忥細{}", agvNo, newActionList.size());
+ return pathTrace;
} catch (Exception e) {
- log.error("mainService.generateAction", e);
+ News.error("mainService.generateAction", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
if (!Cools.isEmpty(pathList)) {
@@ -1730,13 +1742,13 @@
BaseResult<?> result = agvCmdService.executeAgvActionCmd(agvAction);
if (result.success()) {
- log.info("浠诲姟缁� [{}] 鍔ㄤ綔鎸囦护宸蹭笅鍙� ===>> 鎸囦护鏁伴噺锛歿}", actionGroupId, actionList.size());
+ News.info("浠诲姟缁� [{}] 鍔ㄤ綔鎸囦护宸蹭笅鍙� ===>> 鎸囦护鏁伴噺锛歿}", actionGroupId, actionList.size());
} else {
- log.error("浠诲姟缁� [{}] 鍔ㄤ綔鎸囦护涓嬪彂澶辫触 锛侊紒锛�", actionGroupId);
+ News.error("浠诲姟缁� [{}] 鍔ㄤ綔鎸囦护涓嬪彂澶辫触 锛侊紒锛�", actionGroupId);
throw new CoolException("浠诲姟缁� [{" + actionGroupId + "}] 鍔ㄤ綔鎸囦护涓嬪彂澶辫触 锛侊紒锛�");
}
} catch (Exception e) {
- log.error("mainService.publishAction", e);
+ News.error("mainService.publishAction", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
@@ -1748,7 +1760,7 @@
Agv agv = agvService.selectByUuid(protocol.getAgvNo());
if (null == agv) {
- log.warn("Agv [{}] 灏氭湭閴存潈 锛侊紒锛�", protocol.getAgvNo());
+ News.warn("Agv [{}] 灏氭湭閴存潈 锛侊紒锛�", protocol.getAgvNo());
return;
}
@@ -1760,7 +1772,7 @@
AGV_11_UP agv_11_up = (AGV_11_UP) msgBody;
String serialNo = agv_11_up.getSerialNo();
- log.info("Agv [{}] 鍔ㄤ綔瀹屾垚鍖� ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_11_up));
+ News.info("Agv [{}] 鍔ㄤ綔瀹屾垚鍖� ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_11_up));
// 鍏ュ簱鏀捐揣
if (agv_11_up.getCompleteType().equals(AgvCompleteType.RELEASE_FROM_SHELVES_COMPLETE)) {
@@ -1768,7 +1780,7 @@
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, String.valueOf(Integer.parseInt(agv_11_up.getLocCode()))));
if (null == loc) {
- log.warn("Agv [{}] 涓婃姤寰�璐ф灦鏀捐揣瀹屾垚鏃讹紝搴撲綅鐮乕{}]鏃犳晥銆�", protocol.getAgvNo(), agv_11_up.getLocCode());
+ News.warn("Agv [{}] 涓婃姤寰�璐ф灦鏀捐揣瀹屾垚鏃讹紝搴撲綅鐮乕{}]鏃犳晥銆�", protocol.getAgvNo(), agv_11_up.getLocCode());
} else {
List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo);
for (Long taskId : taskIds) {
@@ -1786,7 +1798,7 @@
action.setEndTime(now);
action.setUpdateTime(now);
if (!actionService.updateById(action)) {
- log.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
+ News.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
}
}
@@ -1801,7 +1813,7 @@
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, String.valueOf(Integer.parseInt(agv_11_up.getLocCode()))));
if (null == loc) {
- log.warn("Agv [{}] 涓婃姤浠庤揣鏋跺彇璐у畬鎴愶紝搴撲綅鐮乕{}]鏃犳晥銆�", protocol.getAgvNo(), agv_11_up.getLocCode());
+ News.warn("Agv [{}] 涓婃姤浠庤揣鏋跺彇璐у畬鎴愶紝搴撲綅鐮乕{}]鏃犳晥銆�", protocol.getAgvNo(), agv_11_up.getLocCode());
} else {
List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo);
@@ -1819,7 +1831,7 @@
action.setEndTime(now);
action.setUpdateTime(now);
if (!actionService.updateById(action)) {
- log.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
+ News.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
}
}
}
@@ -1841,7 +1853,7 @@
// settlement
this.settleSegmentList(segmentList, serialNo);
- log.info("Agv [{}] {}浣滀笟瀹屾瘯 ==========>> ", protocol.getAgvNo(), serialNo);
+ News.info("Agv [{}] {} 璺緞浣滀笟宸插畬鎴�", protocol.getAgvNo(), serialNo);
}
}
@@ -1849,7 +1861,7 @@
// 鍙栨斁璐ц姹傚寘
if (msgBody instanceof AGV_06_UP) {
AGV_06_UP agv_06_up = (AGV_06_UP) msgBody;
- log.info("Agv [{}] 鍙栨斁璐ц姹傚寘 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_06_up));
+ News.info("Agv [{}] 鍙栨斁璐ц姹傚寘 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_06_up));
boolean success = false;
@@ -1859,14 +1871,14 @@
// query current segment
Segment currSeg = segmentService.getCurrRunningSeg(null, agv.getId(), code.getId());
if (null == currSeg) {
- log.error("failed to find curr segment [{}]", agv.getUuid());
+ News.error("failed to find curr segment [{}]", agv.getUuid());
} else {
// query current task
Task currTask = taskService.getById(currSeg.getTaskId());
if (currTask == null || !currTask.getTaskSts().equals(TaskStsType.PROGRESS.val())) {
- log.error("agv[{}] task invalid, task={}", protocol.getAgvNo(), currSeg.getTaskId());
+ News.error("agv[{}] task invalid, task={}", protocol.getAgvNo(), currSeg.getTaskId());
} else {
Sta sta;
@@ -1890,7 +1902,7 @@
staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.OUT);
break;
}
- log.info("AGV [{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
+ News.info("AGV [{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
success = true;
break;
case DEST_STA:
@@ -1906,18 +1918,18 @@
staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.IN);
break;
}
- log.info("AGV [{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
+ News.info("AGV [{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
success = true;
break;
default:
- log.error("AGV [{}] has wrong posType [{}], segment [{}]", protocol.getAgvNo(), posType.toString(), currSeg.getId());
+ News.error("AGV [{}] has wrong posType [{}], segment [{}]", protocol.getAgvNo(), posType.toString(), currSeg.getId());
break;
}
}
}
} catch (Exception e) {
- log.error("agv[{}] failed to deal with action request, qrCode={}", agv.getUuid(), agv_06_up.getVal(), e);
+ News.error("agv[{}] failed to deal with action request, qrCode={}", agv.getUuid(), agv_06_up.getVal(), e);
}
AGV_06_DOWN agv_06_down = new AGV_06_DOWN();
@@ -1931,7 +1943,7 @@
if (msgBody instanceof AGV_70_UP) {
AGV_70_UP agv_70_up = (AGV_70_UP) msgBody;
- log.info("Agv [{}] 鏂欎粨淇℃伅鍖� ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_70_up));
+ News.info("Agv [{}] 鏂欎粨淇℃伅鍖� ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_70_up));
}
}
@@ -1973,15 +1985,27 @@
break;
}
+
if (taskComplete) {
+ // 鍦ㄥ厖鐢典换鍔¤璧板埌缁堢偣锛屽悓鏃跺垽鏂厖鐢垫々鐨勭被鍨�
+ if (segment.getPosType().equals(TaskPosDto.PosType.TO_CHARGE)){
+ // 淇濆瓨涓�鏉℃暟鎹�
+ FuncTask funcTask = new FuncTask();
+ FuncSta destFuncSta = funcStaService.getByCodeAndType(task.getDestCode(), FuncStaType.CHARGE.toString());
+ funcTask.setFuncStaId(destFuncSta.getId());
+ funcTask.setAgvId(segment.getAgvId());
+ funcTask.setTaskId(segment.getTaskId());
+ funcTask.setFuncTaskSts(TaskStsType.INIT.val());
+ funcTaskService.save(funcTask);
+ }
task.setTaskSts(TaskStsType.COMPLETE.val());
task.setEndTime(now);
task.setUpdateTime(now);
if (!taskService.updateById(task)) {
- log.error("Task [{}] 鏇存柊澶辫触 锛侊紒锛�", task.getSeqNum());
+ News.error("Task [{}] 鏇存柊澶辫触 锛侊紒锛�", task.getSeqNum());
} else {
taskService.maintainLocAndSta(task);
- log.info("Task [{}] 浣滀笟瀹屾瘯 ==========>> ", task.getSeqNum());
+ News.info("Task [{}] 浠诲姟杩愯瀹屾垚.", task.getSeqNum());
}
}
@@ -1998,7 +2022,7 @@
action.setEndTime(now);
action.setUpdateTime(now);
if (!actionService.updateById(action)) {
- log.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
+ News.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
}
}
}
@@ -2009,7 +2033,7 @@
segment.setEndTime(now);
segment.setUpdateTime(now);
if (!segmentService.updateById(segment)) {
- log.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
+ News.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
}
}
@@ -2017,4 +2041,4 @@
segmentService.processNext(segmentList);
}
-}
+}
\ No newline at end of file
--
Gitblit v1.9.1