feat(system): 优化库区管理和设备信息展示
- 新增库区删除功能 - 完善设备状态信息统计 - 优化地图点位与库区、通道关联逻辑 - 重构设备信息获取方法 - 优化数据字典查询效率
This commit is contained in:
parent
9ee9fc7994
commit
1be88c8b42
@ -92,6 +92,18 @@ public class PositionMapLineDTO {
|
||||
@Schema(description = "膨胀区域右")
|
||||
private BigDecimal expansionZoneRight;
|
||||
|
||||
@Schema(description = "起点宽")
|
||||
private BigDecimal beginWidth;
|
||||
|
||||
@Schema(description = "起点高")
|
||||
private BigDecimal beginHigh;
|
||||
|
||||
@Schema(description = "终点宽")
|
||||
private BigDecimal endWidth;
|
||||
|
||||
@Schema(description = "终点高")
|
||||
private BigDecimal endHigh;
|
||||
|
||||
@Schema(description = "车头朝向( 0:正正 1:正反 2:反正 3:反反)", example = "15890")
|
||||
private Integer toward;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.DeviceStatusInfoVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
||||
@ -22,4 +23,8 @@ public class BulletinBoardVO {
|
||||
private RobotInformationStatisticsVO statistics;
|
||||
@Schema(description = "车辆异常信息")
|
||||
private List<RobotWarnMsgDO> robotWarnMsgDOS;
|
||||
@Schema(description = "车辆信息")
|
||||
List<RobotElectricityLevelVO> robotElectricityLevelVOS;
|
||||
@Schema(description = "设备信息")
|
||||
private List<DeviceStatusInfoVO> deviceStatusInfoVOS;
|
||||
}
|
||||
|
@ -9,8 +9,20 @@ import lombok.ToString;
|
||||
public class RobotElectricityLevelVO {
|
||||
@Schema(description = "AGV编号")
|
||||
private String robotNo;
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
@Schema(description = "设备mac地址")
|
||||
private String macAddress;
|
||||
@Schema(description = "待命 0否 1是")
|
||||
private Integer standby = 0;
|
||||
@Schema(description = "任务中 0否 1是")
|
||||
private Integer inTask = 0;
|
||||
@Schema(description = "锁定 0否 1是")
|
||||
private Integer doLock = 0;
|
||||
@Schema(description = "离线 0否 1是")
|
||||
private Integer offline = 0;
|
||||
@Schema(description = "充电中 0否 1是")
|
||||
private Integer charge = 0;
|
||||
@Schema(description = "故障 0否 1是")
|
||||
private Integer fault = 0;
|
||||
@Schema(description = "电量")
|
||||
private String batSoc;
|
||||
}
|
||||
|
@ -3,8 +3,11 @@ package cn.iocoder.yudao.module.system.controller.admin.housearea;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
||||
import cn.iocoder.yudao.module.system.service.housearea.HouseAreaService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
@ -87,4 +90,12 @@ public class HouseAreaController {
|
||||
return success(BeanUtils.toBean(list, HouseAreaRespVO.class));
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除库区")
|
||||
@Parameter(name = "id", description = "菜单编号", required= true, example = "1024")
|
||||
public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
|
||||
houseAreaService.delete(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,6 +28,10 @@ public class HouseAreaRespVO {
|
||||
@ExcelProperty("库区说明")
|
||||
private String areaMsg;
|
||||
|
||||
@Schema(description = "物料信息")
|
||||
@ExcelProperty("物料信息")
|
||||
private String skuInfo;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
@ -1,10 +1,15 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.houselane;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
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.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
||||
import cn.iocoder.yudao.module.system.service.houselane.WareHouseLaneService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -62,4 +67,20 @@ public class WareHouseLaneController {
|
||||
.orderByAsc(WareHouseLaneDO::getId));
|
||||
return success(BeanUtils.toBean(list, WareHouseLaneRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得线库分页")
|
||||
@PreAuthorize("@ss.hasPermission('ware:house-area:query')")
|
||||
public CommonResult<PageResult<WareHouseLaneRespVO>> getHouseAreaPage(@Valid WareHouseLanePageReqVO pageReqVO) {
|
||||
PageResult<WareHouseLaneDO> pageResult = houseLaneService.getHouseLanePage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, WareHouseLaneRespVO.class));
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除线库")
|
||||
@Parameter(name = "id", description = "菜单编号", required= true, example = "1024")
|
||||
public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
|
||||
houseLaneService.delete(id);
|
||||
return success(true);
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.positionmap;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
|
||||
@ -19,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -45,12 +48,15 @@ public class PositionMapItemController {
|
||||
Map<Integer, List<NodeBaseDTO>> map = nodeBaseDTOS.stream().collect(Collectors.groupingBy(NodeBaseDTO::getType));
|
||||
// -- 获取到对应地图的所有点位
|
||||
List<PositionMapItemDO> oldList = positionMapItemService.getByMapId(positionMapId);
|
||||
Map<Integer, List<PositionMapItemDO>> oldMap = oldList.stream().collect(Collectors.groupingBy(PositionMapItemDO::getType));
|
||||
List<PositionMapItemDO> newAllList = new ArrayList<>();
|
||||
for (Integer key : NodeTypeEnum.getAllTypes()) {
|
||||
List<NodeBaseDTO> nodeBaseDTOList = CollectionUtil.isEmpty(map.get(key)) ? Collections.emptyList() : map.get(key);
|
||||
List<PositionMapItemDO> oldItemList = CollectionUtil.isEmpty(oldMap.get(key)) ? Collections.emptyList() : oldMap.get(key);
|
||||
nodeProcessingContext.processNodesByStrategy(positionMapId, oldItemList, key, nodeBaseDTOList);
|
||||
List<PositionMapItemDO> newList = nodeProcessingContext.processNodesByStrategy(positionMapId, key, nodeBaseDTOList);
|
||||
newAllList.addAll(newList);
|
||||
}
|
||||
List<List<PositionMapItemDO>> list = CollectionUtils.compareLists(oldList, newAllList,
|
||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
|
@ -90,6 +90,18 @@ public class PositionMapLineDTO {
|
||||
@Schema(description = "膨胀区域右")
|
||||
private BigDecimal expansionZoneRight;
|
||||
|
||||
@Schema(description = "起点宽")
|
||||
private BigDecimal beginWidth;
|
||||
|
||||
@Schema(description = "起点高")
|
||||
private BigDecimal beginHigh;
|
||||
|
||||
@Schema(description = "终点宽")
|
||||
private BigDecimal endWidth;
|
||||
|
||||
@Schema(description = "终点高")
|
||||
private BigDecimal endHigh;
|
||||
|
||||
@Schema(description = "车头朝向( 0:正正 1:正反 2:反正 3:反反)")
|
||||
private Integer toward;
|
||||
}
|
||||
|
@ -85,6 +85,18 @@ public class PositionMapLinePageReqVO extends PageParam {
|
||||
@Schema(description = "膨胀区域右", example = "15890")
|
||||
private BigDecimal expansionZoneRight;
|
||||
|
||||
@Schema(description = "起点宽")
|
||||
private BigDecimal beginWidth;
|
||||
|
||||
@Schema(description = "起点高")
|
||||
private BigDecimal beginHigh;
|
||||
|
||||
@Schema(description = "终点宽")
|
||||
private BigDecimal endWidth;
|
||||
|
||||
@Schema(description = "终点高")
|
||||
private BigDecimal endHigh;
|
||||
|
||||
@Schema(description = "行走方法 0.直线 1.曲线")
|
||||
private Integer method;
|
||||
|
||||
|
@ -94,6 +94,18 @@ public class PositionMapLineRespVO {
|
||||
@ExcelProperty("膨胀区域右")
|
||||
private BigDecimal expansionZoneRight;
|
||||
|
||||
@Schema(description = "起点宽")
|
||||
private BigDecimal beginWidth;
|
||||
|
||||
@Schema(description = "起点高")
|
||||
private BigDecimal beginHigh;
|
||||
|
||||
@Schema(description = "终点宽")
|
||||
private BigDecimal endWidth;
|
||||
|
||||
@Schema(description = "终点高")
|
||||
private BigDecimal endHigh;
|
||||
|
||||
@Schema(description = "行走方法 0.直线 1.曲线")
|
||||
@ExcelProperty("行走方法 0.直线 1.曲线")
|
||||
private Integer method;
|
||||
|
@ -82,6 +82,18 @@ public class PositionMapLineSaveReqVO {
|
||||
@Schema(description = "膨胀区域右", example = "15890")
|
||||
private BigDecimal expansionZoneRight;
|
||||
|
||||
@Schema(description = "起点宽")
|
||||
private BigDecimal beginWidth;
|
||||
|
||||
@Schema(description = "起点高")
|
||||
private BigDecimal beginHigh;
|
||||
|
||||
@Schema(description = "终点宽")
|
||||
private BigDecimal endWidth;
|
||||
|
||||
@Schema(description = "终点高")
|
||||
private BigDecimal endHigh;
|
||||
|
||||
@Schema(description = "行走方法 0.直线 1.曲线")
|
||||
private Integer method;
|
||||
|
||||
|
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 设备状态数量信息
|
||||
*
|
||||
* @author 艾楷
|
||||
*/
|
||||
@Data
|
||||
public class DeviceStatusInfoVO {
|
||||
|
||||
@Schema(description = "设备类型")
|
||||
private Integer deviceType;
|
||||
|
||||
@Schema(description = "总数量")
|
||||
private Integer totalNum = 0;
|
||||
|
||||
@Schema(description = "正常数量")
|
||||
private Integer normalNum = 0;
|
||||
|
||||
@Schema(description = "异常数量")
|
||||
private Integer abnormalNum = 0;
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class RobotInfoStatusVO {
|
||||
@Schema(description = "设备mac地址")
|
||||
private String macAddress;
|
||||
@Schema(description = "待命 0否 1是")
|
||||
private Integer standby = 0;
|
||||
@Schema(description = "任务中 0否 1是")
|
||||
private Integer inTask = 0;
|
||||
@Schema(description = "锁定 0否 1是")
|
||||
private Integer doLock = 0;
|
||||
@Schema(description = "离线 0否 1是")
|
||||
private Integer offline = 0;
|
||||
@Schema(description = "充电中 0否 1是")
|
||||
private Integer charge = 0;
|
||||
@Schema(description = "故障 0否 1是")
|
||||
private Integer fault = 0;
|
||||
}
|
@ -32,6 +32,7 @@ public class PositionMapItemDO extends BaseDO {
|
||||
/**
|
||||
* 库区id
|
||||
*/
|
||||
@TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private Long areaId;
|
||||
/**
|
||||
* 线库id
|
||||
|
@ -122,6 +122,27 @@ public class PositionMapLineDO extends BaseDO {
|
||||
* 膨胀区域右
|
||||
*/
|
||||
private BigDecimal expansionZoneRight;
|
||||
|
||||
/**
|
||||
* 起点宽
|
||||
*/
|
||||
private BigDecimal beginWidth;
|
||||
|
||||
/**
|
||||
* 起点高
|
||||
*/
|
||||
private BigDecimal beginHigh;
|
||||
|
||||
/**
|
||||
* 终点宽
|
||||
*/
|
||||
private BigDecimal endWidth;
|
||||
|
||||
/**
|
||||
* 终点高
|
||||
*/
|
||||
private BigDecimal endHigh;
|
||||
|
||||
/**
|
||||
* 行走方法 0.直线 1.曲线
|
||||
*/
|
||||
|
@ -20,6 +20,7 @@ public interface WareHouseLaneMapper extends BaseMapperX<WareHouseLaneDO> {
|
||||
|
||||
default PageResult<WareHouseLaneDO> selectPage(WareHouseLanePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<WareHouseLaneDO>()
|
||||
.eqIfPresent(WareHouseLaneDO::getPositionMapId, reqVO.getPositionMapId())
|
||||
.likeIfPresent(WareHouseLaneDO::getLaneName, reqVO.getLaneName())
|
||||
.eqIfPresent(WareHouseLaneDO::getLaneMsg, reqVO.getLaneMsg())
|
||||
.betweenIfPresent(WareHouseLaneDO::getCreateTime, reqVO.getCreateTime())
|
||||
|
@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -31,6 +32,7 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
|
||||
|
||||
/**
|
||||
* 根据库位id查询
|
||||
*
|
||||
* @param locationId
|
||||
* @return
|
||||
*/
|
||||
@ -38,8 +40,24 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
|
||||
|
||||
/**
|
||||
* 根据position_map_id 查询
|
||||
*
|
||||
* @param positionMapId
|
||||
* @return
|
||||
*/
|
||||
List<PositionMapItemSynDTO> getAllByMapId(Long positionMapId);
|
||||
|
||||
/**
|
||||
* 将areaId设为空
|
||||
*
|
||||
* @param mapId
|
||||
* @param areaId
|
||||
*/
|
||||
void emptyAreaId(@Param("mapId") Long mapId, @Param("areaId") Long areaId);
|
||||
|
||||
/**
|
||||
* 将laneId设为空
|
||||
* @param mapId
|
||||
* @param laneId
|
||||
*/
|
||||
void emptyLaneId(@Param("mapId") Long mapId, @Param("laneId") Long laneId);
|
||||
}
|
||||
|
@ -14,10 +14,7 @@ import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
public class NodeProcessingContext {
|
||||
@ -57,18 +54,14 @@ public class NodeProcessingContext {
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void processNodesByStrategy(Long positionMapId, List<PositionMapItemDO> oldItemList, int key, List<NodeBaseDTO> nodeBaseDTOS) {
|
||||
public List<PositionMapItemDO> processNodesByStrategy(Long positionMapId, int key, List<NodeBaseDTO> nodeBaseDTOS) {
|
||||
// -- 获取对应的策略 - 如果没有对应的直接 return
|
||||
NodeProcessingStrategy strategy = strategyMap.get(key);
|
||||
if (strategy == null) {
|
||||
return;
|
||||
return Collections.emptyList();
|
||||
}
|
||||
// 策略模式 策略实现
|
||||
// 策略模式 策略实现 - 组装好数据后返回给上一层
|
||||
strategy.processNodes(positionMapId, nodeBaseDTOS);
|
||||
|
||||
List<PositionMapItemDO> newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class);
|
||||
List<List<PositionMapItemDO>> list = CollectionUtils.compareLists(oldItemList, newList,
|
||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
||||
return BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class);
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,8 @@ public class DeviceStrategyImpl implements NodeProcessingStrategy {
|
||||
// -- 策略3 处理设备点
|
||||
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
||||
List<DeviceInformationDO> newList = new ArrayList<>();
|
||||
// -- 拿到这个地图所绑定的设备 -
|
||||
List<DeviceInformationDO> oldList = deviceInformationService.getDeviceInfoBindByMapId(positionMapId);
|
||||
nodeBaseDTOS.forEach(item -> {
|
||||
if (item.getId() == null) {
|
||||
item.setId(getId());
|
||||
@ -34,16 +36,14 @@ public class DeviceStrategyImpl implements NodeProcessingStrategy {
|
||||
deviceInformationDO.setLocationY(item.getLocationY());
|
||||
deviceInformationDO.setActualLocationX(item.getActualLocationX());
|
||||
deviceInformationDO.setActualLocationY(item.getActualLocationY());
|
||||
|
||||
deviceInformationDO.setPositionMapId(positionMapId);
|
||||
deviceInformationDO.setPositionMapItemId(item.getId());
|
||||
newList.add(deviceInformationDO);
|
||||
item.setDataJson(JSONUtil.toJsonStr(deviceInformationDO));
|
||||
});
|
||||
|
||||
List<DeviceInformationDO> oldList = deviceInformationService.getByMapId(positionMapId);
|
||||
List<List<DeviceInformationDO>> list = CollectionUtils.compareLists(oldList, newList,
|
||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||
deviceInformationService.batchSaveOrEditOrDel(positionMapId, list);
|
||||
deviceInformationService.batchEditOrDel(list);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.system.service.bulletinboard;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
@ -9,11 +10,15 @@ import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.BulletinBoardVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.RobotElectricityLevelVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.TaskStatusVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.DeviceStatusInfoVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInfoStatusVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.service.information.DeviceInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotTaskService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||
@ -26,6 +31,7 @@ import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -44,6 +50,8 @@ public class BulletinBoardServiceImpl implements BulletinBoardService {
|
||||
private RobotInformationService robotInformationService;
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
@Resource
|
||||
private DeviceInformationService deviceInformationService;
|
||||
|
||||
@Override
|
||||
public BulletinBoardVO getBulletinBoard() {
|
||||
@ -94,21 +102,49 @@ public class BulletinBoardServiceImpl implements BulletinBoardService {
|
||||
vo.setStatistics(statisticsVO);
|
||||
// 车辆异常信息
|
||||
vo.setRobotWarnMsgDOS(robotWarnMsgDOS);
|
||||
|
||||
List<RobotElectricityLevelVO> robotElectricityLevelVOS = new ArrayList<>();
|
||||
List<RobotInformationDO> allRobot = robotInformationService.getAllRobot();
|
||||
List<RobotInfoStatusVO> agvListStatusInfo = robotInformationService.getAGVListStatusInfo();
|
||||
Map<String, RobotInfoStatusVO> map = agvListStatusInfo.stream().collect(Collectors.toMap(RobotInfoStatusVO::getMacAddress, Function.identity()));
|
||||
for (RobotInformationDO robotInformationDO : allRobot) {
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotInformationDO.getMacAddress();
|
||||
Object object = redisUtil.get(pose2dKey);
|
||||
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
||||
if (robotStatusDataPoseDTO != null) {
|
||||
RobotElectricityLevelVO robotElectricityLevelVO = new RobotElectricityLevelVO();
|
||||
//todo 这里缺少一个状态
|
||||
RobotInfoStatusVO item = map.get(robotInformationDO.getMacAddress());
|
||||
if (item != null) {
|
||||
BeanUtil.copyProperties(item, robotElectricityLevelVO);
|
||||
}
|
||||
robotElectricityLevelVO.setRobotNo(robotInformationDO.getRobotNo());
|
||||
robotElectricityLevelVO.setBatSoc(robotStatusDataPoseDTO.getBat_soc());
|
||||
robotElectricityLevelVOS.add(robotElectricityLevelVO);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
vo.setRobotElectricityLevelVOS(robotElectricityLevelVOS);
|
||||
// - 获取所有设备
|
||||
List<DeviceInformationDO> deviceInformationDOS = deviceInformationService.list();
|
||||
//根据设备类型分组
|
||||
Map<Integer, List<DeviceInformationDO>> deviceMap = deviceInformationDOS.stream().collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType));
|
||||
List<DeviceStatusInfoVO> deviceStatusInfoVOS = new ArrayList<>();
|
||||
for (Map.Entry<Integer, List<DeviceInformationDO>> entry : deviceMap.entrySet()) {
|
||||
Integer deviceType = entry.getKey();
|
||||
DeviceStatusInfoVO deviceStatusInfoVO = new DeviceStatusInfoVO();
|
||||
deviceStatusInfoVO.setDeviceType(deviceType);
|
||||
List<DeviceInformationDO> deviceInformationDOList = entry.getValue();
|
||||
if (CollectionUtil.isEmpty(deviceInformationDOList)) {
|
||||
deviceStatusInfoVOS.add(deviceStatusInfoVO);
|
||||
continue;
|
||||
}
|
||||
deviceStatusInfoVO.setTotalNum(deviceInformationDOList.size());
|
||||
long count = deviceInformationDOList.stream().filter(a -> a.getDeviceStatus().equals(3)).count();
|
||||
deviceStatusInfoVO.setNormalNum((int) count);
|
||||
deviceStatusInfoVO.setAbnormalNum(deviceStatusInfoVO.getTotalNum() - deviceStatusInfoVO.getNormalNum());
|
||||
deviceStatusInfoVOS.add(deviceStatusInfoVO);
|
||||
}
|
||||
vo.setDeviceStatusInfoVOS(deviceStatusInfoVOS);
|
||||
return vo;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
||||
@ -171,7 +172,9 @@ public class DictDataServiceImpl implements DictDataService {
|
||||
|
||||
@Override
|
||||
public List<DictDataDO> getDictDataListByDictType(String dictType) {
|
||||
List<DictDataDO> list = dictDataMapper.selectList(DictDataDO::getDictType, dictType);
|
||||
List<DictDataDO> list = dictDataMapper.selectList(new LambdaQueryWrapperX<DictDataDO>()
|
||||
.eq(DictDataDO::getDictType, dictType)
|
||||
.eq(DictDataDO::getStatus, CommonStatusEnum.ENABLE.getStatus()));
|
||||
list.sort(Comparator.comparing(DictDataDO::getSort));
|
||||
return list;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
@ -13,7 +14,7 @@ import java.util.List;
|
||||
*
|
||||
* @author 陈宾顺
|
||||
*/
|
||||
public interface HouseAreaService {
|
||||
public interface HouseAreaService extends IService<HouseAreaDO> {
|
||||
|
||||
/**
|
||||
* 创建库区
|
||||
@ -62,7 +63,15 @@ public interface HouseAreaService {
|
||||
|
||||
/**
|
||||
* 获得全部库区
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<HouseAreaDO> getHouseAreaList(Long positionMapId);
|
||||
|
||||
/**
|
||||
* 删除库区
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
void delete(Long id);
|
||||
}
|
||||
|
@ -18,7 +18,9 @@ import cn.iocoder.yudao.module.system.dal.mysql.housearea.HouseAreaMapper;
|
||||
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
|
||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -38,7 +40,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.THERE_ARE_
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class HouseAreaServiceImpl implements HouseAreaService {
|
||||
public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseAreaDO> implements HouseAreaService {
|
||||
|
||||
@Resource
|
||||
private HouseAreaMapper houseAreaMapper;
|
||||
@ -66,6 +68,7 @@ public class HouseAreaServiceImpl implements HouseAreaService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteHouseArea(Long id) {
|
||||
// 校验存在
|
||||
validateHouseAreaExists(id);
|
||||
@ -90,6 +93,7 @@ public class HouseAreaServiceImpl implements HouseAreaService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createOrEditOrDel(HouseAreaSaveReqVO createReqVO) {
|
||||
HouseAreaDO houseArea = BeanUtil.copyProperties(createReqVO, HouseAreaDO.class);
|
||||
houseAreaMapper.insertOrUpdate(houseArea);
|
||||
@ -162,4 +166,14 @@ public class HouseAreaServiceImpl implements HouseAreaService {
|
||||
.orderByAsc(HouseAreaDO::getId));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long id) {
|
||||
HouseAreaDO areaDO = this.getById(id);
|
||||
this.removeById(id);
|
||||
//获取当前库区所对应的地图
|
||||
// 点位中包含库区id的数据设为null
|
||||
positionMapItemService.emptyAreaId(areaDO.getPositionMapId(), id);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -39,4 +39,9 @@ public interface WareHouseLaneService extends IService<WareHouseLaneDO> {
|
||||
*/
|
||||
void createOrEditOrDel(@Valid WareHouseLaneSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 删除线库
|
||||
* @param id
|
||||
*/
|
||||
void delete(Long id);
|
||||
}
|
||||
|
@ -7,9 +7,11 @@ import cn.hutool.json.JSONUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConditionDTO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||
@ -142,4 +144,13 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
|
||||
houseLocationService.updateBatchById(wareHouseLocationList);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long id) {
|
||||
WareHouseLaneDO wareHouseLaneDO = this.getById(id);
|
||||
this.removeById(id);
|
||||
// 点位中包含线库id的数据设为null
|
||||
positionMapItemService.emptyLaneId(wareHouseLaneDO.getPositionMapId(), id);
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationM
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -35,6 +36,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
private WareHouseLocationMapper houseLocationMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createHouseLocation(WareHouseLocationSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
WareHouseLocationDO houseLocation = BeanUtils.toBean(createReqVO, WareHouseLocationDO.class);
|
||||
@ -44,6 +46,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateHouseLocationExists(updateReqVO.getId());
|
||||
@ -53,6 +56,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteHouseLocation(Long id) {
|
||||
// 校验存在
|
||||
validateHouseLocationExists(id);
|
||||
@ -89,6 +93,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchSaveOrEditOrDel(Long positionMapId, List<List<WareHouseLocationDO>> list) {
|
||||
//批量添加、修改、删除
|
||||
if (isNotEmpty(list.get(0))) {
|
||||
|
@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.information.dto.Statistic
|
||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
@ -17,7 +18,7 @@ import java.util.Map;
|
||||
*
|
||||
* @author 陈宾顺
|
||||
*/
|
||||
public interface DeviceInformationService {
|
||||
public interface DeviceInformationService extends IService<DeviceInformationDO> {
|
||||
|
||||
/**
|
||||
* 创建设备信息
|
||||
@ -60,10 +61,9 @@ public interface DeviceInformationService {
|
||||
/**
|
||||
* 批量新增删除修改
|
||||
*
|
||||
* @param positionMapId
|
||||
* @param list
|
||||
*/
|
||||
void batchSaveOrEditOrDel(Long positionMapId, List<List<DeviceInformationDO>> list);
|
||||
void batchEditOrDel(List<List<DeviceInformationDO>> list);
|
||||
|
||||
/**
|
||||
* 通过地图id获取设备列表
|
||||
@ -90,20 +90,31 @@ public interface DeviceInformationService {
|
||||
|
||||
/**
|
||||
* 获得设备信息分类列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
Map<Integer, List<DeviceInformationDO>> classification();
|
||||
|
||||
/**
|
||||
* 统计设备
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<StatisticsInformationDTO> getDeviceNumber();
|
||||
|
||||
/**
|
||||
* 查看全部设备
|
||||
*
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
List<DeviceInformationDO> getInformationList(@Valid DeviceInformationPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获取设备信息 通过地图id - 并且设备有绑定具体点位 即点位id不为空
|
||||
*
|
||||
* @param positionMapId
|
||||
* @return
|
||||
*/
|
||||
List<DeviceInformationDO> getDeviceInfoBindByMapId(Long positionMapId);
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
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.module.grpc.api.GrpcServiceApi;
|
||||
import cn.iocoder.yudao.module.system.constant.device.DeviceChcheConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.information.dto.DeviceInformationDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.information.dto.MapBindDeviceInfoDTO;
|
||||
@ -13,13 +12,13 @@ import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInfo
|
||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||
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.mysql.config.CommonConfigMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
||||
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -33,7 +32,6 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static cn.hutool.core.collection.CollUtil.isNotEmpty;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATION_MAC_EXIST;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATION_NOT_EXISTS;
|
||||
|
||||
@ -45,7 +43,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATIO
|
||||
@Service
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationMapper, DeviceInformationDO> implements DeviceInformationService {
|
||||
|
||||
@Resource
|
||||
private DeviceInformationMapper informationMapper;
|
||||
@ -53,18 +51,14 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
@Resource
|
||||
private DictDataService dictDataService;
|
||||
|
||||
@Resource
|
||||
private GrpcServiceApi grpcServiceApi;
|
||||
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Override
|
||||
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
||||
DeviceInformationPageReqVO pageReqVO = new DeviceInformationPageReqVO();
|
||||
pageReqVO.setMacAddress(createReqVO.getMacAddress());
|
||||
PageResult<DeviceInformationDO> pageResult = informationMapper.selectPage(pageReqVO);
|
||||
if (ObjectUtil.isNotEmpty(pageResult.getList())) {
|
||||
// -- 先判断库里是否有相通的mac地址数据
|
||||
long count = this.count(new LambdaQueryWrapper<DeviceInformationDO>().eq(DeviceInformationDO::getMacAddress, createReqVO.getMacAddress()));
|
||||
if (count > 0L) {
|
||||
throw exception(INFORMATION_MAC_EXIST);
|
||||
}
|
||||
|
||||
@ -114,7 +108,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
// 校验存在
|
||||
validateInformationExists(id);
|
||||
DeviceInformationDO deviceInformationDO = informationMapper.selectById(id);
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress();
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||
Object object = redisUtil.get(deviceKey);
|
||||
if (ObjectUtil.isEmpty(object)) {
|
||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
||||
@ -122,11 +116,11 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
}
|
||||
try {
|
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df);
|
||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String) object, df);
|
||||
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
||||
} catch (Exception e) {
|
||||
log.info("查询设备最后通讯时间异常 :{}",e.getMessage());
|
||||
log.info("查询设备最后通讯时间异常 :{}", e.getMessage());
|
||||
}
|
||||
return deviceInformationDO;
|
||||
}
|
||||
@ -138,16 +132,19 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchSaveOrEditOrDel(Long positionMapId, List<List<DeviceInformationDO>> list) {
|
||||
public void batchEditOrDel(List<List<DeviceInformationDO>> list) {
|
||||
//批量添加、修改、删除
|
||||
if (isNotEmpty(list.get(0))) {
|
||||
informationMapper.insertBatch(list.get(0));
|
||||
}
|
||||
if (isNotEmpty(list.get(1))) {
|
||||
informationMapper.updateBatch(list.get(1));
|
||||
List<DeviceInformationDO> editList = new ArrayList<>();
|
||||
if (isNotEmpty(list.get(0)) || isNotEmpty(list.get(1))) {
|
||||
editList.addAll(list.get(0));
|
||||
editList.addAll(list.get(1));
|
||||
}
|
||||
if (isNotEmpty(list.get(2))) {
|
||||
informationMapper.deleteByIds(convertList(list.get(2), DeviceInformationDO::getId));
|
||||
list.get(2).forEach(a -> a.setPositionMapItemId(null));
|
||||
editList.addAll(list.get(2));
|
||||
}
|
||||
if (isNotEmpty(editList)){
|
||||
informationMapper.updateBatch(editList);
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,6 +167,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
|
||||
/**
|
||||
* 获得设备信息分类列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@ -181,7 +179,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
|
||||
// todo 需要设置设备通讯的时间
|
||||
for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) {
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress();
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||
Object object = redisUtil.get(deviceKey);
|
||||
if (ObjectUtil.isEmpty(object)) {
|
||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
||||
@ -189,11 +187,11 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
}
|
||||
try {
|
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df);
|
||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String) object, df);
|
||||
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
||||
} catch (Exception e) {
|
||||
log.info("查询设备最后通讯时间异常 :{}",e.getMessage());
|
||||
log.info("查询设备最后通讯时间异常 :{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -202,8 +200,8 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
.collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType));
|
||||
|
||||
ArrayList<Map.Entry<Integer, List<DeviceInformationDO>>> list = new ArrayList<Map.Entry<Integer, List<DeviceInformationDO>>>(collect.entrySet());
|
||||
Collections.sort(list, new Comparator<Map.Entry<Integer, List<DeviceInformationDO>>>() {
|
||||
public int compare(Map.Entry<Integer, List<DeviceInformationDO>> o1, Map.Entry<Integer, List<DeviceInformationDO>> o2) {
|
||||
Collections.sort(list, new Comparator<Map.Entry<Integer, List<DeviceInformationDO>>>() {
|
||||
public int compare(Map.Entry<Integer, List<DeviceInformationDO>> o1, Map.Entry<Integer, List<DeviceInformationDO>> o2) {
|
||||
return o1.getKey().compareTo(o2.getKey()); // 按照值排序
|
||||
}
|
||||
});
|
||||
@ -213,6 +211,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
|
||||
/**
|
||||
* 统计设备
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@ -252,7 +251,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
|
||||
// todo 需要设置设备通讯的时间
|
||||
for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) {
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress();
|
||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||
Object object = redisUtil.get(deviceKey);
|
||||
if (ObjectUtil.isEmpty(object)) {
|
||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
||||
@ -260,17 +259,24 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
||||
}
|
||||
try {
|
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df);
|
||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String) object, df);
|
||||
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
||||
} catch (Exception e) {
|
||||
log.info("查询设备最后通讯时间异常 :{}",e.getMessage());
|
||||
log.info("查询设备最后通讯时间异常 :{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return deviceInformationDOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeviceInformationDO> getDeviceInfoBindByMapId(Long positionMapId) {
|
||||
return informationMapper.selectList(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||
.eq(DeviceInformationDO::getPositionMapId, positionMapId)
|
||||
.isNotNull(DeviceInformationDO::getPositionMapItemId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mapBindDeviceInfo(MapBindDeviceInfoDTO dto) {
|
||||
DeviceInformationDO deviceInformationDO = informationMapper.selectById(dto.getDeviceInfoId());
|
||||
|
@ -77,4 +77,19 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
|
||||
* @return
|
||||
*/
|
||||
List<PositionMapItemDO> getByCondition(PositionMapConditionDTO positionMapConditionDTO);
|
||||
|
||||
/**
|
||||
* 清空areaId
|
||||
*
|
||||
* @param mapId
|
||||
* @param areaId
|
||||
*/
|
||||
void emptyAreaId(Long mapId, Long areaId);
|
||||
|
||||
/**
|
||||
* 清空laneId
|
||||
* @param mapId
|
||||
* @param laneId
|
||||
*/
|
||||
void emptyLaneId(Long mapId, Long laneId);
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItem
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -69,6 +70,7 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchSaveOrEditOrDel(Long positionMapId, List<List<PositionMapItemDO>> list) {
|
||||
//批量添加、修改、删除
|
||||
if (isNotEmpty(list.get(0))) {
|
||||
@ -95,5 +97,15 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
||||
.eqIfPresent(PositionMapItemDO::getLaneId, dto.getLaneId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emptyAreaId(Long positionMapId, Long areaId) {
|
||||
positionMapItemMapper.emptyAreaId(positionMapId, areaId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emptyLaneId(Long mapId, Long laneId) {
|
||||
positionMapItemMapper.emptyLaneId(mapId, laneId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -63,6 +63,12 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
||||
*/
|
||||
RobotInformationStatisticsVO statisticsInformation();
|
||||
|
||||
/**
|
||||
* 获取所有AGV状态
|
||||
* @return
|
||||
*/
|
||||
List<RobotInfoStatusVO> getAGVListStatusInfo();
|
||||
|
||||
/**
|
||||
* 查询能正常使用的车辆
|
||||
*
|
||||
|
@ -335,6 +335,48 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
return info;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RobotInfoStatusVO> getAGVListStatusInfo() {
|
||||
List<RobotInfoStatusVO> list = new ArrayList<>();
|
||||
// -- 先从缓存中 获取AGV状态信息 - 如果没有的话 - 再从数据库中获取 - 并且缓存到redis中
|
||||
List<RobotInformationDO> robotInformationDO = informationMapper.selectList();
|
||||
if (robotInformationDO == null) {
|
||||
return list;
|
||||
}
|
||||
for (RobotInformationDO informationDO : robotInformationDO) {
|
||||
RobotInfoStatusVO vo = new RobotInfoStatusVO();
|
||||
//0:待命、1:任务中、2:锁定、3:离线、4:充电中、5:故障
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + informationDO.getMacAddress();
|
||||
Object object = redisUtil.get(pose2dKey);
|
||||
if (ObjectUtil.isEmpty(object)) {
|
||||
//离线
|
||||
vo.setOffline(1);
|
||||
}
|
||||
if (RobotTaskModelEnum.REJECTION.getType().equals(informationDO.getRobotTaskModel())) {
|
||||
//锁定
|
||||
vo.setDoLock(1);
|
||||
}
|
||||
//设置异常
|
||||
String errorLevelKey = RobotTaskChcheConstant.ROBOT_ERROR_LEVEL + informationDO.getMacAddress();
|
||||
Object errorLevel = redisUtil.get(errorLevelKey);
|
||||
if (ObjectUtil.isNotEmpty(errorLevel) && Integer.parseInt(errorLevel.toString()) >= 3) {
|
||||
vo.setFault(1);
|
||||
}
|
||||
if (RobotStatusEnum.STAND_BY.getType().equals(informationDO.getRobotStatus())) {
|
||||
//待命中
|
||||
vo.setStandby(1);
|
||||
} else if (RobotStatusEnum.CHARGE.getType().equals(informationDO.getRobotStatus())) {
|
||||
//充电中
|
||||
vo.setCharge(1);
|
||||
} else {
|
||||
//任务中
|
||||
vo.setInTask(1);
|
||||
}
|
||||
list.add(vo);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
|
@ -267,6 +267,18 @@
|
||||
</set>
|
||||
where id = #{id}
|
||||
</update>
|
||||
<update id="emptyAreaId">
|
||||
update ware_position_map_item
|
||||
set area_id = null
|
||||
where position_map_id = #{mapId}
|
||||
and area_id = #{areaId}
|
||||
</update>
|
||||
<update id="emptyLaneId">
|
||||
update ware_position_map_item
|
||||
set lane_id = null
|
||||
where position_map_id = #{mapId}
|
||||
and lane_id = #{laneId}
|
||||
</update>
|
||||
|
||||
<!--通过主键删除-->
|
||||
<delete id="deleteById">
|
||||
|
Loading…
Reference in New Issue
Block a user