diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PositionMapLineDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PositionMapLineDTO.java index 0bfc85f20..e3b84adcd 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PositionMapLineDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PositionMapLineDTO.java @@ -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; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/BulletinBoardVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/BulletinBoardVO.java index 88edbe440..ecbe4197b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/BulletinBoardVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/BulletinBoardVO.java @@ -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 robotWarnMsgDOS; + @Schema(description = "车辆信息") + List robotElectricityLevelVOS; + @Schema(description = "设备信息") + private List deviceStatusInfoVOS; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/RobotElectricityLevelVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/RobotElectricityLevelVO.java index b7153cdba..381dc7ed4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/RobotElectricityLevelVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/RobotElectricityLevelVO.java @@ -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; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/HouseAreaController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/HouseAreaController.java index 86732f3e6..a20fe15eb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/HouseAreaController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/HouseAreaController.java @@ -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 delete(@RequestParam("id") Long id) { + houseAreaService.delete(id); + return success(true); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/vo/HouseAreaRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/vo/HouseAreaRespVO.java index 1014482b2..2e7b733e6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/vo/HouseAreaRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/housearea/vo/HouseAreaRespVO.java @@ -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; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselane/WareHouseLaneController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselane/WareHouseLaneController.java index 1466e2533..ebe541030 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselane/WareHouseLaneController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselane/WareHouseLaneController.java @@ -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> getHouseAreaPage(@Valid WareHouseLanePageReqVO pageReqVO) { + PageResult 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 delete(@RequestParam("id") Long id) { + houseLaneService.delete(id); + return success(true); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java index d2a991a32..230cd53d1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java @@ -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> map = nodeBaseDTOS.stream().collect(Collectors.groupingBy(NodeBaseDTO::getType)); // -- 获取到对应地图的所有点位 List oldList = positionMapItemService.getByMapId(positionMapId); - Map> oldMap = oldList.stream().collect(Collectors.groupingBy(PositionMapItemDO::getType)); + List newAllList = new ArrayList<>(); for (Integer key : NodeTypeEnum.getAllTypes()) { List nodeBaseDTOList = CollectionUtil.isEmpty(map.get(key)) ? Collections.emptyList() : map.get(key); - List oldItemList = CollectionUtil.isEmpty(oldMap.get(key)) ? Collections.emptyList() : oldMap.get(key); - nodeProcessingContext.processNodesByStrategy(positionMapId, oldItemList, key, nodeBaseDTOList); + List newList = nodeProcessingContext.processNodesByStrategy(positionMapId, key, nodeBaseDTOList); + newAllList.addAll(newList); } + List> list = CollectionUtils.compareLists(oldList, newAllList, + (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); + positionMapItemService.batchSaveOrEditOrDel(positionMapId, list); return success(true); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/PositionMapLineDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/PositionMapLineDTO.java index 286889067..37ddc5a51 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/PositionMapLineDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/PositionMapLineDTO.java @@ -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; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java index 205ee92ec..c8f3cd2dd 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java @@ -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; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java index f5f2ea6cf..61ab2292e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java @@ -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; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java index 2ca1c9522..3c87129fc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java @@ -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; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/DeviceStatusInfoVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/DeviceStatusInfoVO.java new file mode 100644 index 000000000..225c9c245 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/DeviceStatusInfoVO.java @@ -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; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInfoStatusVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInfoStatusVO.java new file mode 100644 index 000000000..0a5e7d577 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInfoStatusVO.java @@ -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; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java index a2b695075..91d87ca6e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java @@ -32,6 +32,7 @@ public class PositionMapItemDO extends BaseDO { /** * 库区id */ + @TableField(updateStrategy = FieldStrategy.IGNORED) private Long areaId; /** * 线库id diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java index 4c96bc832..d78a7ce72 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java @@ -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.曲线 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselane/WareHouseLaneMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselane/WareHouseLaneMapper.java index 4c0d4821f..e8a21f24e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselane/WareHouseLaneMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselane/WareHouseLaneMapper.java @@ -20,6 +20,7 @@ public interface WareHouseLaneMapper extends BaseMapperX { default PageResult selectPage(WareHouseLanePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(WareHouseLaneDO::getPositionMapId, reqVO.getPositionMapId()) .likeIfPresent(WareHouseLaneDO::getLaneName, reqVO.getLaneName()) .eqIfPresent(WareHouseLaneDO::getLaneMsg, reqVO.getLaneMsg()) .betweenIfPresent(WareHouseLaneDO::getCreateTime, reqVO.getCreateTime()) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java index 90dbab4eb..6d4657719 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java @@ -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 { /** * 根据库位id查询 + * * @param locationId * @return */ @@ -38,8 +40,24 @@ public interface PositionMapItemMapper extends BaseMapperX { /** * 根据position_map_id 查询 + * * @param positionMapId * @return */ List 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); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java index 6ccc6b077..88759dc85 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java @@ -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 oldItemList, int key, List nodeBaseDTOS) { + public List processNodesByStrategy(Long positionMapId, int key, List nodeBaseDTOS) { // -- 获取对应的策略 - 如果没有对应的直接 return NodeProcessingStrategy strategy = strategyMap.get(key); if (strategy == null) { - return; + return Collections.emptyList(); } - // 策略模式 策略实现 + // 策略模式 策略实现 - 组装好数据后返回给上一层 strategy.processNodes(positionMapId, nodeBaseDTOS); - - List newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class); - List> list = CollectionUtils.compareLists(oldItemList, newList, - (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); - positionMapItemService.batchSaveOrEditOrDel(positionMapId, list); + return BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/DeviceStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/DeviceStrategyImpl.java index 1e6f32820..2e0634b83 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/DeviceStrategyImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/DeviceStrategyImpl.java @@ -24,6 +24,8 @@ public class DeviceStrategyImpl implements NodeProcessingStrategy { // -- 策略3 处理设备点 // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 List newList = new ArrayList<>(); + // -- 拿到这个地图所绑定的设备 - + List 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 oldList = deviceInformationService.getByMapId(positionMapId); List> list = CollectionUtils.compareLists(oldList, newList, (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); - deviceInformationService.batchSaveOrEditOrDel(positionMapId, list); + deviceInformationService.batchEditOrDel(list); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardServiceImpl.java index da1b76a0e..8d51fb0cd 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardServiceImpl.java @@ -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 robotElectricityLevelVOS = new ArrayList<>(); List allRobot = robotInformationService.getAllRobot(); + List agvListStatusInfo = robotInformationService.getAGVListStatusInfo(); + Map 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 deviceInformationDOS = deviceInformationService.list(); + //根据设备类型分组 + Map> deviceMap = deviceInformationDOS.stream().collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType)); + List deviceStatusInfoVOS = new ArrayList<>(); + for (Map.Entry> entry : deviceMap.entrySet()) { + Integer deviceType = entry.getKey(); + DeviceStatusInfoVO deviceStatusInfoVO = new DeviceStatusInfoVO(); + deviceStatusInfoVO.setDeviceType(deviceType); + List 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; } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java index e9f215de8..cd16e0269 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictDataServiceImpl.java @@ -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 getDictDataListByDictType(String dictType) { - List list = dictDataMapper.selectList(DictDataDO::getDictType, dictType); + List list = dictDataMapper.selectList(new LambdaQueryWrapperX() + .eq(DictDataDO::getDictType, dictType) + .eq(DictDataDO::getStatus, CommonStatusEnum.ENABLE.getStatus())); list.sort(Comparator.comparing(DictDataDO::getSort)); return list; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaService.java index 8c6475fd6..081191a26 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaService.java @@ -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 { /** * 创建库区 @@ -62,7 +63,15 @@ public interface HouseAreaService { /** * 获得全部库区 + * * @return */ List getHouseAreaList(Long positionMapId); + + /** + * 删除库区 + * + * @param id + */ + void delete(Long id); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaServiceImpl.java index 67ac2df56..2384be56a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/housearea/HouseAreaServiceImpl.java @@ -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 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); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneService.java index cc87284cb..d356cc801 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneService.java @@ -39,4 +39,9 @@ public interface WareHouseLaneService extends IService { */ void createOrEditOrDel(@Valid WareHouseLaneSaveReqVO createReqVO); + /** + * 删除线库 + * @param id + */ + void delete(Long id); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java index c7cb35c48..6cb3494e0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java @@ -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> list) { //批量添加、修改、删除 if (isNotEmpty(list.get(0))) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java index 8a98dc7a7..7102807d8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java @@ -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 { /** * 创建设备信息 @@ -60,10 +61,9 @@ public interface DeviceInformationService { /** * 批量新增删除修改 * - * @param positionMapId * @param list */ - void batchSaveOrEditOrDel(Long positionMapId, List> list); + void batchEditOrDel(List> list); /** * 通过地图id获取设备列表 @@ -90,20 +90,31 @@ public interface DeviceInformationService { /** * 获得设备信息分类列表 + * * @return */ Map> classification(); /** * 统计设备 + * * @return */ List getDeviceNumber(); /** * 查看全部设备 + * * @param pageReqVO * @return */ List getInformationList(@Valid DeviceInformationPageReqVO pageReqVO); + + /** + * 获取设备信息 通过地图id - 并且设备有绑定具体点位 即点位id不为空 + * + * @param positionMapId + * @return + */ + List getDeviceInfoBindByMapId(Long positionMapId); } 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 1eb553149..e81e8bdf4 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 @@ -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 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 pageResult = informationMapper.selectPage(pageReqVO); - if (ObjectUtil.isNotEmpty(pageResult.getList())) { + // -- 先判断库里是否有相通的mac地址数据 + long count = this.count(new LambdaQueryWrapper().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) { + public void batchEditOrDel(List> list) { //批量添加、修改、删除 - if (isNotEmpty(list.get(0))) { - informationMapper.insertBatch(list.get(0)); - } - if (isNotEmpty(list.get(1))) { - informationMapper.updateBatch(list.get(1)); + List 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>> list = new ArrayList>>(collect.entrySet()); - Collections.sort(list, new Comparator>>() { - public int compare(Map.Entry> o1, Map.Entry> o2) { + Collections.sort(list, new Comparator>>() { + public int compare(Map.Entry> o1, Map.Entry> 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 getDeviceInfoBindByMapId(Long positionMapId) { + return informationMapper.selectList(new LambdaQueryWrapperX() + .eq(DeviceInformationDO::getPositionMapId, positionMapId) + .isNotNull(DeviceInformationDO::getPositionMapItemId)); + } + @Override public void mapBindDeviceInfo(MapBindDeviceInfoDTO dto) { DeviceInformationDO deviceInformationDO = informationMapper.selectById(dto.getDeviceInfoId()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java index 68eecfe9f..6568f1d22 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java @@ -77,4 +77,19 @@ public interface PositionMapItemService extends IService { * @return */ List 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); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java index f5edce992..07fbd1bec 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java @@ -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> list) { //批量添加、修改、删除 if (isNotEmpty(list.get(0))) { @@ -95,5 +97,15 @@ public class PositionMapItemServiceImpl extends ServiceImpl { */ RobotInformationStatisticsVO statisticsInformation(); + /** + * 获取所有AGV状态 + * @return + */ + List getAGVListStatusInfo(); + /** * 查询能正常使用的车辆 * 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 d6ac177c1..9f1bfc715 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 @@ -335,6 +335,48 @@ public class RobotInformationServiceImpl extends ServiceImpl getAGVListStatusInfo() { + List list = new ArrayList<>(); + // -- 先从缓存中 获取AGV状态信息 - 如果没有的话 - 再从数据库中获取 - 并且缓存到redis中 + List 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 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml index 8ef2f336f..1f08bd7a2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml @@ -267,6 +267,18 @@ where id = #{id} + + update ware_position_map_item + set area_id = null + where position_map_id = #{mapId} + and area_id = #{areaId} + + + update ware_position_map_item + set lane_id = null + where position_map_id = #{mapId} + and lane_id = #{laneId} +