修复bug
This commit is contained in:
parent
35da84a95d
commit
51d283bbbf
@ -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, "机器人任务主表不存在");
|
||||
|
@ -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<List<String>> getRobotByFloorAndArea(@RequestParam("floor") String floor,@RequestParam("area") String area) {
|
||||
return success(informationService.getRobotByFloorAndArea(floor,area));
|
||||
}
|
||||
}
|
||||
|
@ -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<WareHouseLocationMappe
|
||||
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateHouseLocationExists(updateReqVO.getId());
|
||||
String str = "修改库位信息 ";
|
||||
|
||||
WareHouseLocationDO wareHouseLocationDO = houseLocationMapper.selectById(updateReqVO.getId());
|
||||
// 更新
|
||||
WareHouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, WareHouseLocationDO.class);
|
||||
|
||||
String str = getChangeInfo(wareHouseLocationDO, updateObj);
|
||||
if (ObjectUtil.isNotEmpty(str)) {
|
||||
str = "修改库位信息:" + updateReqVO.getLocationNo() + "_" + str;
|
||||
}
|
||||
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(str)
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
|
||||
houseLocationMapper.updateById(updateObj);
|
||||
|
||||
}
|
||||
|
||||
public String getChangeInfo(WareHouseLocationDO wareHouseLocationDO, WareHouseLocationDO updateReqVO) {
|
||||
String str = "";
|
||||
if (!wareHouseLocationDO.getLocationEnable().equals(updateReqVO.getLocationEnable())) {
|
||||
if (LocationEnableEnum.YES.getType().equals(updateReqVO.getLocationEnable())) {
|
||||
str = str + "设置库位" + LocationEnableEnum.YES.getMsg() + " ";
|
||||
@ -91,15 +114,16 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
str = str + "设置库位物料信息为 " + updateReqVO.getSkuInfo();
|
||||
}
|
||||
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(str)
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
// 更新
|
||||
WareHouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, WareHouseLocationDO.class);
|
||||
houseLocationMapper.updateById(updateObj);
|
||||
if (!wareHouseLocationDO.getLocationUseStatus().equals(updateReqVO.getLocationUseStatus())
|
||||
&& ZeroOneEnum.ZERO.getType().equals(updateReqVO.getLocationUseStatus())) {
|
||||
str = str + "设置库位锁定状态为正常" ;
|
||||
}else if (!wareHouseLocationDO.getLocationUseStatus().equals(updateReqVO.getLocationUseStatus())
|
||||
&& ZeroOneEnum.ONE.getType().equals(updateReqVO.getLocationUseStatus())) {
|
||||
str = str + "设置库位锁定状态为锁定" ;
|
||||
}
|
||||
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -147,7 +171,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
|
||||
@Override
|
||||
public void updateLocationLaneNameByLaneId(Long laneId, String laneName) {
|
||||
houseLocationMapper.updateLocationLaneNameByLaneId(laneId,laneName);
|
||||
houseLocationMapper.updateLocationLaneNameByLaneId(laneId, laneName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -156,15 +180,39 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateHouseLocationList(List<WareHouseLocationSaveReqVO> list) {
|
||||
List<WareHouseLocationDO> locationDOList = BeanUtils.toBean(list, WareHouseLocationDO.class);
|
||||
List<String> locationNos = locationDOList.stream().map(WareHouseLocationDO::getLocationNo).collect(Collectors.toList());
|
||||
List<WareHouseLocationDO> locations = houseLocationMapper.selectList(new LambdaQueryWrapper<WareHouseLocationDO>()
|
||||
.in(WareHouseLocationDO::getLocationNo, locationNos));
|
||||
Map<Long, WareHouseLocationDO> locationMap =
|
||||
locations.stream().collect(Collectors.toMap(WareHouseLocationDO::getId, Function.identity(), (v1, v2) -> v1));
|
||||
|
||||
houseLocationMapper.updateById(locationDOList);
|
||||
|
||||
List<String> 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);
|
||||
}
|
||||
|
@ -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<DeviceInformationM
|
||||
@Resource
|
||||
private CommonConfigService configService;
|
||||
|
||||
@Resource
|
||||
private PositionMapItemService positionMapItemService;
|
||||
|
||||
@Override
|
||||
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
||||
// -- 先判断库里是否有相通的mac地址数据
|
||||
@ -138,6 +144,7 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteInformation(Long id) {
|
||||
// 校验存在
|
||||
validateInformationExists(id);
|
||||
@ -148,6 +155,13 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
||||
// 删除
|
||||
informationMapper.deleteById(id);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(deviceInformationDO.getPositionMapItemId())) {
|
||||
PositionMapItemDO positionMapItem = positionMapItemService.getPositionMapItem(deviceInformationDO.getPositionMapItemId());
|
||||
positionMapItem.setType(PositionMapItemEnum.PATH.getType());
|
||||
positionMapItem.setDataJson(null);
|
||||
positionMapItemService.updateById(positionMapItem);
|
||||
}
|
||||
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
}
|
||||
|
||||
@ -307,10 +321,12 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
||||
// todo 需要设置设备通讯的时间
|
||||
for (DeviceInformationRespVO deviceInformationDO : beans) {
|
||||
|
||||
PositionMapDO positionMapDO = positionMap.get(deviceInformationDO.getPositionMapId());
|
||||
if (ObjectUtil.isNotEmpty(deviceInformationDO.getPositionMapId())
|
||||
&& ObjectUtil.isNotEmpty(positionMap.get(deviceInformationDO.getPositionMapId()))) {
|
||||
deviceInformationDO.setFloor(positionMap.get(deviceInformationDO.getPositionMapId()).getFloor() + "");
|
||||
deviceInformationDO.setArea(positionMap.get(deviceInformationDO.getPositionMapId()).getArea());
|
||||
&& ObjectUtil.isNotEmpty(positionMapDO)) {
|
||||
deviceInformationDO.setFloor(positionMapDO.getFloor() + "");
|
||||
deviceInformationDO.setArea(positionMapDO.getArea());
|
||||
deviceInformationDO.setDeviceLocation(positionMapDO.getFloor()+"层-"+positionMapDO.getArea());
|
||||
}
|
||||
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||
|
@ -158,4 +158,12 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
||||
* @param orderType
|
||||
*/
|
||||
void robotCloseTaskDetail(String id, String mac, String orderType);
|
||||
|
||||
/**
|
||||
* 获取楼层区域对应的机器人编号
|
||||
* @param floor
|
||||
* @param area
|
||||
* @return
|
||||
*/
|
||||
List<String> getRobotByFloorAndArea(String floor, String area);
|
||||
}
|
||||
|
@ -208,8 +208,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
// 校验存在
|
||||
validateInformationExists(updateReqVO.getId());
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectById(updateReqVO.getId());
|
||||
if (robotInformationDO == null) {
|
||||
throw exception(ROBOT_INFORMATION_NOT_EXISTS);
|
||||
|
||||
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())
|
||||
|| !updateReqVO.getMacAddress().equals(robotInformationDO.getMacAddress())) {
|
||||
List<RobotTaskDO> 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<RobotInformationMap
|
||||
|| PathTaskTypeEnum.RELEASE.getType().equals(log.getCommandType())) {
|
||||
takeReleaseCleanTrafficManagement(robotTaskDetail);
|
||||
}
|
||||
//不释放机器人状态,怕机器人接新任务
|
||||
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||
.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<RobotInformationMap
|
||||
* @param robotNo
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doTaskContinue(String robotNo) {
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction("继续做任务 " + robotNo)
|
||||
@ -805,6 +819,17 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
if (ObjectUtil.isNotEmpty(msg)) {
|
||||
throw exception0(TASK_CHECK_EXCEPTION.getCode(), msg);
|
||||
}
|
||||
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||
.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<RobotInformationMap
|
||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取楼层区域对应的机器人编号
|
||||
* @param floor
|
||||
* @param area
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<String> getRobotByFloorAndArea(String floor, String area) {
|
||||
RobotInformationDO query = new RobotInformationDO();
|
||||
List<RobotInformationDO> robotInformations = informationMapper.queryAllByLimit(query);
|
||||
|
||||
List<String> 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -181,13 +181,19 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
||||
|
||||
String addResult = "";
|
||||
if (lock.tryLock(60l, TimeUnit.MINUTES)) {
|
||||
try {
|
||||
/*try {
|
||||
addResult = addTask(createReqVO);
|
||||
} catch (Exception e) {
|
||||
log.error("下发任务出现异常 :{}", e);
|
||||
addResult = ObjectUtil.isNotEmpty(e.getMessage()) ? e.getMessage(): "创建任务失败";
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}*/
|
||||
|
||||
try {
|
||||
addResult = addTask(createReqVO);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
} else {
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
|
@ -272,6 +272,11 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
// 2.2 删除用户岗位
|
||||
userPostMapper.deleteByUserId(id);
|
||||
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction("删除用户 " + user.getUsername())
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
|
||||
// 3. 记录操作日志上下文
|
||||
LogRecordContext.putVariable("user", user);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user