diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 87e563070..b9b3d621a 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -191,7 +191,7 @@ public interface ErrorCodeConstants { ErrorCode ROBOT_LAST_TASK_DELETE = new ErrorCode(1-002-034-005, "超过限制的时间,无法继续执行前一个任务"); ErrorCode ROBOT_NOT_FOUND_WAIT_ITEM = new ErrorCode(1-002-034-006, "没有空闲的停车点"); ErrorCode ROBOT_NOT_FOUND_FREE_CHARGING_STATION = new ErrorCode(1-002-034-007, "没有空闲的充电桩"); - ErrorCode ROBOT_HAVE_DOING_TASK = new ErrorCode(1-002-034-010, "车辆有处理中的任务"); + ErrorCode ROBOT_HAVE_DOING_TASK = new ErrorCode(1-002-034-010, "车辆有处理中的任务,不允许修改/删除车辆编号和Mac地址"); // ========== 机器人任务主表 1-002-035-000 ========== ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "机器人任务主表不存在"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java index 5d351a298..3d351f36a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java @@ -156,4 +156,11 @@ public class RobotInformationController { informationService.doTaskContinue(robotNo); return success(true); } + + @PostMapping("/getRobotByFloorAndArea") + @Operation(summary = "获取楼层区域对应的机器人编号") + @PreAuthorize("@ss.hasPermission('robot:information:getRobotByFloorAndArea')") + public CommonResult> getRobotByFloorAndArea(@RequestParam("floor") String floor,@RequestParam("area") String area) { + return success(informationService.getRobotByFloorAndArea(floor,area)); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java index 028778496..67e418ba6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO; import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO; import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO; @@ -12,6 +13,7 @@ import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHous import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper; +import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum; import cn.iocoder.yudao.module.system.enums.robot.LocationEnableEnum; import cn.iocoder.yudao.module.system.enums.robot.LocationUseStatusEnum; import cn.iocoder.yudao.module.system.service.log.UserOperationLogService; @@ -25,6 +27,8 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; import static cn.hutool.core.collection.CollUtil.isNotEmpty; @@ -62,8 +66,27 @@ public class HouseLocationServiceImpl extends ServiceImpl list) { List locationDOList = BeanUtils.toBean(list, WareHouseLocationDO.class); + List locationNos = locationDOList.stream().map(WareHouseLocationDO::getLocationNo).collect(Collectors.toList()); + List locations = houseLocationMapper.selectList(new LambdaQueryWrapper() + .in(WareHouseLocationDO::getLocationNo, locationNos)); + Map locationMap = + locations.stream().collect(Collectors.toMap(WareHouseLocationDO::getId, Function.identity(), (v1, v2) -> v1)); + houseLocationMapper.updateById(locationDOList); - List locationNos = locationDOList.stream().map(WareHouseLocationDO::getLocationNo).collect(Collectors.toList()); - String str = StringUtils.join(locationNos, ","); + StringBuilder str = new StringBuilder(); + for (WareHouseLocationDO updateLocation : locationDOList) { + WareHouseLocationDO oldLocation = locationMap.get(updateLocation.getId()); + if (ObjectUtil.isEmpty(oldLocation)) { + continue; + } + String updateStr = getChangeInfo(oldLocation, updateLocation); + if (ObjectUtil.isNotEmpty(updateStr)) { + str.append("修改库位信息:").append(oldLocation.getLocationNo()).append("_").append(updateStr).append(";"); + } + } + + if (ObjectUtil.isEmpty(str.toString())) { + return; + } + + if (str.length() > 100) { + str = new StringBuilder(str.substring(0, 95)); + } UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder() - .operateAction(str) + .operateAction(str.toString()) .nickName(SecurityFrameworkUtils.getLoginUserNickname()).build(); userOperationLogService.createUserOperationLog(operationLog); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java index d6302f362..8e5ac8b6e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java @@ -17,15 +17,18 @@ import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper; import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper; import cn.iocoder.yudao.module.system.enums.device.DeviceAttributeEnum; import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum; import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum; import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum; +import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum; import cn.iocoder.yudao.module.system.service.config.CommonConfigService; import cn.iocoder.yudao.module.system.service.dict.DictDataService; import cn.iocoder.yudao.module.system.service.log.UserOperationLogService; +import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; import cn.iocoder.yudao.module.system.util.modbus3.ModbusUtils; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; @@ -83,6 +86,9 @@ public class DeviceInformationServiceImpl extends ServiceImpl { * @param orderType */ void robotCloseTaskDetail(String id, String mac, String orderType); + + /** + * 获取楼层区域对应的机器人编号 + * @param floor + * @param area + * @return + */ + List getRobotByFloorAndArea(String floor, String area); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java index 09b0d63ab..e0f487612 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java @@ -208,8 +208,14 @@ public class RobotInformationServiceImpl extends ServiceImpl list = taskMapper.selectDoingTaskByRobotNo(robotInformationDO.getRobotNo()); + + if (ObjectUtil.isNotEmpty(list)) { + throw exception(ROBOT_HAVE_DOING_TASK); + } } //校验MAC地址 @@ -747,14 +753,21 @@ public class RobotInformationServiceImpl extends ServiceImpl() + .eq(RobotInformationDO::getRobotNo, robotNo) + .last("limit 1")); + robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType()); + robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType()); + informationMapper.updateById(robotInformationDO); } public RobotTaskDetailActionLogDO closeTask(String robotNo) { CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build(); commonApi.commonMethod(build, PathPlanningTopicConstant.CLEAN_AGV); RobotTaskDetailActionLogDO log = taskDetailActionLogService.getLastTaskByRobotNo(robotNo); - if (ObjectUtil.isEmpty(log) || ActionStatusEnum.DONE.getType().equals(log.getActionStatus())) { + if (ObjectUtil.isEmpty(log) || ActionStatusEnum.DONE.getType().equals(log.getActionStatus()) + || ActionStatusEnum.CLOSE.getType().equals(log.getActionStatus())) { return null; } String mac = getMacByRobotNo(robotNo); @@ -768,6 +781,7 @@ public class RobotInformationServiceImpl extends ServiceImpl() + .eq(RobotInformationDO::getRobotNo, robotNo) + .last("limit 1")); + if (PathTaskTypeEnum.CHARGE.getType().equals(pathPlanning.getOrderType()) + || PathTaskTypeEnum.AUTO_CHARGE.getType().equals(pathPlanning.getOrderType())) { + robotInformationDO.setRobotStatus(RobotStatusEnum.CHARGE.getType()); + }else { + robotInformationDO.setRobotStatus(RobotStatusEnum.DOING.getType()); + } + informationMapper.updateById(robotInformationDO); } /** @@ -1050,5 +1075,36 @@ public class RobotInformationServiceImpl extends ServiceImpl getRobotByFloorAndArea(String floor, String area) { + RobotInformationDO query = new RobotInformationDO(); + List robotInformations = informationMapper.queryAllByLimit(query); + + List list = new ArrayList<>(); + if (ObjectUtil.isEmpty(robotInformations)) { + return list; + } + + for (RobotInformationDO robotInformationDO : robotInformations) { + String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + robotInformationDO.getMacAddress(); + Object floorAreaObject = redisUtil.get(floorAreaKey); + if (ObjectUtil.isEmpty(floorAreaObject)) { + continue; + } + FloorZoneDTO floorZoneDTO = JSONUtil.toBean((String) floorAreaObject, FloorZoneDTO.class); + if (floor.equals(floorZoneDTO.getFloor()) && area.equals(floorZoneDTO.getArea()) ) { + list.add(robotInformationDO.getRobotNo()); + } + } + + return list; + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java index d53d71548..09b8d578e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java @@ -181,13 +181,19 @@ public class RobotTaskServiceImpl extends ServiceImpl