From 1313906bb1eb983d3beece810035e7fc28d6a92f Mon Sep 17 00:00:00 2001 From: zhang <zc857179121@qq.com> Date: 星期二, 20 五月 2025 16:57:11 +0800 Subject: [PATCH] 新增充电桩 --- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java | 189 ++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 169 insertions(+), 20 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 a31ff55..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 @@ -2,30 +2,42 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.acs.common.utils.GsonUtils; +import com.zy.acs.framework.common.Cools; +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.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.framework.common.Cools; -import com.zy.acs.framework.common.R; import com.zy.acs.manager.system.service.ConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; 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 @@ -49,19 +61,156 @@ @Autowired private MapService mapService; @Autowired + private TaskService taskService; + @Autowired + 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:list')") - @PostMapping("/data") - public R mapData(@RequestParam(required = false) Long zoneId) { - String mapData = configService.getVal("mapData", String.class); - return R.ok().add(mapData); + @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) { + // 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')") + @PostMapping("/data/save") + @Transactional + public R save(@RequestBody MapDataParam param) { + Date now = new Date(); + Long userId = getLoginUserId(); + // previous + 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 + 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); + } @@ -91,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]"); @@ -117,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) { @@ -195,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(); @@ -280,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