From ebd2f4397a92c6a5096de1b86d59154363344720 Mon Sep 17 00:00:00 2001 From: vincentlu <t1341870251@gmail.com> Date: 星期二, 13 五月 2025 08:48:15 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java | 170 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 141 insertions(+), 29 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java index 69f147e..513ab9b 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java @@ -7,18 +7,27 @@ import com.zy.acs.framework.common.R; import com.zy.acs.framework.common.SnowflakeIdWorker; import com.zy.acs.framework.exception.CoolException; +import com.zy.acs.manager.common.constant.MapItemType; import com.zy.acs.manager.common.domain.MapAgvDto; import com.zy.acs.manager.common.domain.MapCodeDto; import com.zy.acs.manager.common.domain.MapDto; import com.zy.acs.manager.common.domain.MapRouteDto; import com.zy.acs.manager.common.exception.BusinessException; +import com.zy.acs.manager.core.domain.BackpackDto; +import com.zy.acs.manager.core.service.AvoidWaveCalculator; import com.zy.acs.manager.core.service.MapService; +import com.zy.acs.manager.core.service.PatrolService; import com.zy.acs.manager.core.service.floyd.FloydNavigateService; import com.zy.acs.manager.manager.controller.param.MapDataParam; import com.zy.acs.manager.manager.controller.param.MapParam; +import com.zy.acs.manager.manager.controller.result.MapAgvVo; +import com.zy.acs.manager.manager.controller.result.MapPointVo; +import com.zy.acs.manager.manager.controller.result.MapRouteVo; import com.zy.acs.manager.manager.entity.*; import com.zy.acs.manager.manager.enums.AgvStsType; -import com.zy.acs.manager.manager.mapper.MapMapper; +import com.zy.acs.manager.manager.enums.StatusType; +import com.zy.acs.manager.manager.enums.TaskStsType; +import com.zy.acs.manager.manager.mapper.NavMapMapper; import com.zy.acs.manager.manager.service.*; import com.zy.acs.manager.system.controller.BaseController; import com.zy.acs.manager.system.service.ConfigService; @@ -27,10 +36,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.Arrays; -import java.util.Date; -import java.util.Iterator; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * Created by vincent on 2023/6/1 @@ -54,17 +61,49 @@ @Autowired private MapService mapService; @Autowired - private ConfigService configService; + private TaskService taskService; @Autowired - private MapMapper mapMapper; + private NavMapMapper navMapMapper; @Autowired private SnowflakeIdWorker snowflakeIdWorker; + @Autowired + private LocService locService; + @Autowired + private ConfigService configService; + @Autowired + private PatrolService patrolService; + @Autowired + private AvoidWaveCalculator avoidWaveCalculator; + + @PreAuthorize("hasAuthority('manager:loc:update')") + @PostMapping("/startupOrShutdown") + public synchronized R startupOrShutdown() { + Boolean taskAssignMode = configService.getVal("TaskAssignMode", Boolean.class); + return configService.setVal("TaskAssignMode", !taskAssignMode) ? R.ok() : R.error(); + } @PreAuthorize("hasAuthority('manager:loc:list')") @PostMapping("/data/fetch") public R fetch(@RequestParam(required = false) Long zoneId, @RequestParam(required = false) Integer floor) { - Map activeMap = mapMapper.selectActive(zoneId, floor); - return R.ok().add(activeMap); + // code + List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>().eq(Code::getStatus, 1)); + List<MapItem> mapCodeItems = new ArrayList<>(); + codeList.forEach(code -> { + MapItem mapItem = new MapItem(); + mapItem.setType(MapItemType.POINT.toString()); + mapItem.setNo(code.getData()); + mapItem.setUuid(code.getUuid()); + mapItem.setPositionX(code.getX()); + mapItem.setPositionY(code.getY()); + mapCodeItems.add(mapItem); + }); + // common + NavMap activeNavMap = navMapMapper.selectActive(zoneId, floor); + return R.ok().add(Cools + .add("rcsStatus", configService.getVal("TaskAssignMode", Boolean.class)) + .add("point", GsonUtils.toJson(mapCodeItems)) + .add("common", null != activeNavMap ? activeNavMap.getData() : null) + ); } @PreAuthorize("hasAuthority('manager:loc:update')") @@ -74,31 +113,104 @@ Date now = new Date(); Long userId = getLoginUserId(); // previous - Map previousMap = mapMapper.selectActive(param.getZoneId(), param.getFloor()); - if (null != previousMap) { - previousMap.setActive(0); - previousMap.setUpdateTime(now); - previousMap.setUpdateBy(userId); - if (0 == mapMapper.updateById(previousMap)) { + NavMap previousNavMap = navMapMapper.selectActive(param.getZoneId(), param.getFloor()); + if (null != previousNavMap) { + previousNavMap.setActive(0); + previousNavMap.setUpdateTime(now); + previousNavMap.setUpdateBy(userId); + if (0 == navMapMapper.updateById(previousNavMap)) { throw new CoolException("Save Fail"); } } // current - Map map = new Map(); - map.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); - map.setZoneId(param.getZoneId()); - map.setFloor(param.getFloor()); - map.setData(GsonUtils.toJson(param.getItemList())); - map.setActive(1); - map.setUpdateBy(userId); - map.setCreateBy(userId); - if (0 == mapMapper.insert(map)) { + NavMap navMap = new NavMap(); + navMap.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); + navMap.setZoneId(param.getZoneId()); + navMap.setFloor(param.getFloor()); + navMap.setData(GsonUtils.toJson(param.getItemList())); + navMap.setActive(1); + navMap.setUpdateBy(userId); + navMap.setCreateBy(userId); + if (0 == navMapMapper.insert(navMap)) { throw new CoolException("Save Fail"); } return R.ok("Save Success"); } + @PostMapping("/shelf/group") + public R shelfGroup(@RequestParam(required = false) Integer row, @RequestParam(required = false) Integer bay) { + if (null == row || null == bay) { + return R.error(); + } + List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getRow, row).eq(Loc::getBay, bay).orderByAsc(Loc::getLev)); + return R.ok().add(locList); + } + @PostMapping("/agv/info") + public R agvInfo(@RequestParam(required = false) String agvNo) { + if (Cools.isEmpty(agvNo)) { + return R.error(); + } + Agv agv = agvService.selectByUuid(agvNo); + AgvDetail agvDetail = agvDetailService.selectByAgvNo(agvNo); + MapAgvVo vo = new MapAgvVo(); + vo.setAgvId(agv.getId()); + vo.setAgvNo(agv.getUuid()); + vo.setStatus(agv.getStatus()); + if (null != agvDetail) { + vo.setOnline(agvService.judgeOnline(agvDetail.getAgvId())); + vo.setAgvStatus(agvDetail.getStatusDesc()); + vo.setVol(String.valueOf(agvDetail.getVol())); + vo.setSoc(String.valueOf(agvDetail.getSoc())); + vo.setPos(agvDetail.getPos() != null && agvDetail.getPos() == 1); + Code code = codeService.getCacheById(agvDetail.getRecentCode()); + if (null != code) { + vo.setCode(code.getData()); + } + vo.setDirection(agvDetail.getAgvAngle()); + vo.setBackpack(GsonUtils.fromJsonToList(agvDetail.getBackpack(), BackpackDto.class)); + vo.setPatrol(patrolService.isPatrolling(agvNo)); + String error = agvDetail.realError(); + if (!Cools.isEmpty(error)) { + vo.setError(error); + } + } + List<Task> tasks = taskService.selectInSts(agv.getId(), TaskStsType.WAITING, TaskStsType.ASSIGN, TaskStsType.PROGRESS); + if (!Cools.isEmpty(tasks)) { + vo.setTaskIds(tasks.stream().map(Task::getId).collect(Collectors.toList())); + } + return R.ok().add(vo); + } + + @PostMapping("/point/info") + public R pointInfo(@RequestParam(required = false) String codeData) { + if (Cools.isEmpty(codeData)) { + return R.error(); + } + Code code = codeService.getCacheByData(codeData); + MapPointVo vo = new MapPointVo(); + vo.setCodeId(code.getId()); + vo.setCodeData(code.getData()); + vo.setStatus(code.getStatus()); + return R.ok().add(vo); + } + + @PostMapping("/route/list") + public R routeList(@RequestParam(required = false) Long zoneId) { + List<MapRouteVo> result = new ArrayList<>(); + List<Route> routeList = routeService.list(new LambdaQueryWrapper<Route>().eq(Route::getStatus, StatusType.ENABLE.val)); + for (Route route : routeList) { + MapRouteVo vo = new MapRouteVo(); + vo.setRouteId(route.getId()); + vo.setStartCode(route.getStartCode()); + vo.setStartCodeStr(route.getStartCode$()); + vo.setEndCode(route.getEndCode()); + vo.setEndCodeStr(route.getEndCode$()); + vo.setDirection(route.getDirection()); + result.add(vo); + } + return R.ok().add(result); + } @@ -128,7 +240,7 @@ List<Code> codes = codeService.list(); List<Code> codeArr = param.getCodeArr(); for (Code code : codeArr) { - Code one = codeService.selectByData(code.getData()); + Code one = codeService.getCacheByData(code.getData()); if (one == null) { if (!codeService.save(code)) { throw new BusinessException(code.getData()+" save fail![Code]"); @@ -154,8 +266,8 @@ List<MapParam.Route> routeArr = param.getRouteArr(); for (MapParam.Route paramRoute : routeArr) { - Code startCode = codeService.selectByData(paramRoute.getStartCode()); - Code endCode = codeService.selectByData(paramRoute.getEndCode()); + Code startCode = codeService.getCacheByData(paramRoute.getStartCode()); + Code endCode = codeService.getCacheByData(paramRoute.getEndCode()); Route route = routeService.findByCodeOfBoth(startCode.getId(), endCode.getId()); if (route == null) { @@ -232,7 +344,7 @@ if (Cools.isEmpty(agvParam.getPos())) { throw new BusinessException(agvParam.getAgvNo() + " agv not in position锛�"); } - Code code = codeService.selectByData(agvParam.getPos()); + Code code = codeService.getCacheByData(agvParam.getPos()); Agv agv = agvService.selectByUuid(agvParam.getAgvNo()); if (agv == null) { agv = new Agv(); @@ -317,7 +429,7 @@ for (Agv agv : agvList) { AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); if (null == agvDetail) { continue; } - Code currCode = codeService.getById(agvDetail.getCode()); + Code currCode = codeService.getCacheById(agvDetail.getCode()); MapAgvDto agvDto = new MapAgvDto(); agvDto.setUuid(agv.getUuid()); agvDto.setCurrCode(currCode==null?null:currCode.getData()); -- Gitblit v1.9.1