From bf598cf6f19745c9c36a0785c509fc5e20104d80 Mon Sep 17 00:00:00 2001 From: aikai Date: Mon, 17 Feb 2025 14:55:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(module-system):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=95=B4=E4=BD=93=E7=9C=8B=E6=9D=BF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 BulletinBoardController、BulletinBoardService 和 BulletinBoardServiceImpl 类 - 实现获取整体看板信息的功能,包括任务状态、正在执行的任务、待执行任务、车辆状态和车辆异常信息 - 新增 RobotElectricityLevelVO 和 TaskStatusVO 类用于展示机器人电量和任务状态 - 在 DeviceInformationDO、ParkingSpotDO、WareHouse --- .../util/collection/CollectionUtils.java | 36 +++++- .../BulletinBoardController.java | 32 +++++ .../bulletinboard/vo/BulletinBoardVO.java | 25 ++++ .../vo/RobotElectricityLevelVO.java | 16 +++ .../admin/bulletinboard/vo/TaskStatusVO.java | 23 ++++ .../admin/positionmap/dto/NodeBaseDTO.java | 6 + .../vo/PositionMapLinePageReqVO.java | 9 ++ .../positionmap/vo/PositionMapLineRespVO.java | 9 ++ .../vo/PositionMapLineSaveReqVO.java | 9 ++ .../houselocation/WareHouseLocationDO.java | 8 ++ .../information/DeviceInformationDO.java | 8 ++ .../dataobject/parkingspot/ParkingSpotDO.java | 8 ++ .../positionmap/PositionMapItemDO.java | 9 ++ .../positionmap/PositionMapLineDO.java | 16 +++ .../robot/RobotTaskDetailStatusEnum.java | 3 +- .../mapnode/NodeProcessingContext.java | 3 +- .../mapnode/strategy/DeviceStrategyImpl.java | 2 + .../strategy/HouseLocationStrategyImpl.java | 2 + .../strategy/ParkingSpotStrategyImpl.java | 2 + .../bulletinboard/BulletinBoardService.java | 18 +++ .../BulletinBoardServiceImpl.java | 114 ++++++++++++++++++ .../service/robot/RobotTaskService.java | 5 +- .../service/robot/RobotTaskServiceImpl.java | 19 +-- .../service/robot/RobotWarnMsgService.java | 5 +- .../robot/RobotWarnMsgServiceImpl.java | 14 +-- 25 files changed, 377 insertions(+), 24 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/BulletinBoardController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/BulletinBoardVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/RobotElectricityLevelVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/TaskStatusVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardServiceImpl.java diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java index d611fdf23..ff8623877 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java @@ -213,6 +213,7 @@ public class CollectionUtils { return builder.build(); } + /** * 对比老、新两个列表,找出新增、修改、删除的数据 * @@ -253,6 +254,39 @@ public class CollectionUtils { return asList(createList, updateList, deleteList); } + public static List> compareLists(List oldList, List newList, BiPredicate sameFunc) { + List added = new ArrayList<>(); + List modified = new ArrayList<>(); + List removed = new ArrayList<>(oldList); // 初始化为旧列表(后续动态移除匹配项) + + // 单次双重循环:处理新增、修改,并动态计算删除列表 + for (T newItem : newList) { + boolean isFound = false; + T matchedOldItem = null; + Iterator it = removed.iterator(); // 指向待删除列表的迭代器 + + // 在待删除列表中查找匹配项 + while (it.hasNext()) { + T oldItem = it.next(); + if (sameFunc.test(oldItem, newItem)) { + isFound = true; + matchedOldItem = oldItem; + it.remove(); // 移除匹配的旧元素(表示它未被删除) + break; + } + } + + if (!isFound) { + added.add(newItem); // 未找到匹配,加入新增列表 + } else if (!newItem.equals(matchedOldItem)) { + modified.add(newItem); // 找到匹配但内容不同,加入修改列表 + } + } + + // 此时removed中剩余的元素即为需删除的项 + return Arrays.asList(added, modified, removed); + } + public static boolean containsAny(Collection source, Collection candidates) { return org.springframework.util.CollectionUtils.containsAny(source, candidates); } @@ -327,4 +361,4 @@ public class CollectionUtils { return list.stream().flatMap(Collection::stream).collect(Collectors.toList()); } -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/BulletinBoardController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/BulletinBoardController.java new file mode 100644 index 000000000..b120a2c80 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/BulletinBoardController.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.system.controller.admin.bulletinboard; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.BulletinBoardVO; +import cn.iocoder.yudao.module.system.service.bulletinboard.BulletinBoardService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.annotation.security.PermitAll; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 整体看板") +@RestController +@RequestMapping("/system/bulletinBoard") +public class BulletinBoardController { + + @Resource + private BulletinBoardService bulletinBoardService; + + @GetMapping({"/get"}) + @Operation(summary = "获取整体看板信息") + @PermitAll + public CommonResult get() { + BulletinBoardVO vo = bulletinBoardService.getBulletinBoard(); + return success(vo); + } +} 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 new file mode 100644 index 000000000..88edbe440 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/BulletinBoardVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo; + +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; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Data +@ToString(callSuper = true) +public class BulletinBoardVO { + @Schema(description = "任务状态") + private TaskStatusVO taskStatusVO; + @Schema(description = "正在执行任务") + private List underway; + @Schema(description = "待执行任务") + private List pendingExecution; + @Schema(description = "车辆状态") + private RobotInformationStatisticsVO statistics; + @Schema(description = "车辆异常信息") + private List robotWarnMsgDOS; +} 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 new file mode 100644 index 000000000..b7153cdba --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/RobotElectricityLevelVO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +public class RobotElectricityLevelVO { + @Schema(description = "AGV编号") + private String robotNo; + @Schema(description = "状态") + private String status; + @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/bulletinboard/vo/TaskStatusVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/TaskStatusVO.java new file mode 100644 index 000000000..511575595 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bulletinboard/vo/TaskStatusVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +public class TaskStatusVO { + @Schema(description = "待执行") + private Integer pendingExecutionNum; + @Schema(description = "正在进行") + private Integer underwayNum; + @Schema(description = "已完成") + private Integer completedNum; + @Schema(description = "已取消") + private Integer cancelledNum; + @Schema(description = "异常") + private Integer abnormalNum; + @Schema(description = "当日任务数") + private Integer tasksNumber; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java index 2b07a34a0..48540fd4a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java @@ -25,6 +25,12 @@ public class NodeBaseDTO { @Schema(description = "坐标y轴") private String locationY; + @Schema(description = "实际坐标x轴") + private String actualLocationX; + + @Schema(description = "实际坐标y轴") + private String actualLocationY; + @Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1") private Integer type; 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 61bc7f17b..6737efe2a 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 @@ -28,6 +28,15 @@ public class PositionMapLinePageReqVO extends PageParam { @Schema(description = "结束点id(点位子表id)", example = "15890") private Long endPointId; + @Schema(description = "开始点位x轴", example = "15890") + private String startPointX; + @Schema(description = "开始点位y轴", example = "15890") + private String startPointY; + @Schema(description = "结束点位x轴", example = "15890") + private String endPointX; + @Schema(description = "结束点位y轴", example = "15890") + private String endPointY; + @Schema(description = "开始控制点x轴", example = "15890") private String beginControlX; 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 f816fe85d..bd7647ecc 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 @@ -29,6 +29,15 @@ public class PositionMapLineRespVO { @ExcelProperty("结束点id(点位子表id)") private Long endPointId; + @Schema(description = "开始点位x轴", example = "15890") + private String startPointX; + @Schema(description = "开始点位y轴", example = "15890") + private String startPointY; + @Schema(description = "结束点位x轴", example = "15890") + private String endPointX; + @Schema(description = "结束点位y轴", example = "15890") + private String endPointY; + @Schema(description = "开始控制点x轴", example = "15890") @ExcelProperty("开始控制点x轴") private String beginControlX; 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 4fe4bde7e..e7f059891 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 @@ -25,6 +25,15 @@ public class PositionMapLineSaveReqVO { @Schema(description = "结束点id(点位子表id)", example = "15890") private Long endPointId; + @Schema(description = "开始点位x轴", example = "15890") + private String startPointX; + @Schema(description = "开始点位y轴", example = "15890") + private String startPointY; + @Schema(description = "结束点位x轴", example = "15890") + private String endPointX; + @Schema(description = "结束点位y轴", example = "15890") + private String endPointY; + @Schema(description = "开始控制点x轴", example = "15890") private String beginControlX; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java index b138a1e78..779aa3149 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java @@ -94,6 +94,14 @@ public class WareHouseLocationDO extends BaseDO { * 库位坐标y轴 */ private String locationY; + /** + * 实际坐标x轴 + */ + private String actualLocationX; + /** + * 实际坐标y轴 + */ + private String actualLocationY; /** * 宽度 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java index 98f0f7e22..9329ea74c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java @@ -50,6 +50,14 @@ public class DeviceInformationDO extends BaseDO { * 库位坐标y轴 */ private String locationY; + /** + * 实际坐标x轴 + */ + private String actualLocationX; + /** + * 实际坐标y轴 + */ + private String actualLocationY; /** * 宽度 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/parkingspot/ParkingSpotDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/parkingspot/ParkingSpotDO.java index 7ec24b504..4f21ec1eb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/parkingspot/ParkingSpotDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/parkingspot/ParkingSpotDO.java @@ -45,6 +45,14 @@ public class ParkingSpotDO extends BaseDO { * 库位坐标y轴 */ private String locationY; + /** + * 实际坐标x轴 + */ + private String actualLocationX; + /** + * 实际坐标y轴 + */ + private String actualLocationY; /** * 宽度 */ 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 ae91448da..a2b695075 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 @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.positionmap; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; /** @@ -45,6 +46,14 @@ public class PositionMapItemDO extends BaseDO { * 坐标y轴 */ private String locationY; + /** + * 实际坐标x轴 + */ + private String actualLocationX; + /** + * 实际坐标y轴 + */ + private String actualLocationY; /** * 类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充 */ 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 16d2050f4..534cb2698 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 @@ -42,6 +42,22 @@ public class PositionMapLineDO extends BaseDO { * 结束点id(点位子表id) */ private Long endPointId; + /** + * 开始点位x轴 + */ + private String startPointX; + /** + * 开始点位y轴 + */ + private String startPointY; + /** + * 结束点位x轴 + */ + private String endPointX; + /** + * 结束点位y轴 + */ + private String endPointY; /** * 开始控制点x轴 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskDetailStatusEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskDetailStatusEnum.java index 8391c786d..cf358f98d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskDetailStatusEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskDetailStatusEnum.java @@ -12,7 +12,8 @@ public enum RobotTaskDetailStatusEnum { NEW(0),//未开始 DOING(1),//执行中 DONE(2),//已完成 - CLOSE(3); //已取消 + CLOSE(3), //已取消 + ABNORMAL(4); //异常 /** * 类型 */ 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 eed2dc3e4..6ccc6b077 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,6 +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; @@ -66,7 +67,7 @@ public class NodeProcessingContext { strategy.processNodes(positionMapId, nodeBaseDTOS); List newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class); - List> list = CollectionUtils.diffList(oldItemList, newList, + List> list = CollectionUtils.compareLists(oldItemList, newList, (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); positionMapItemService.batchSaveOrEditOrDel(positionMapId, list); } 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 0be191c6e..a4791a0ea 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 @@ -32,6 +32,8 @@ public class DeviceStrategyImpl implements NodeProcessingStrategy { DeviceInformationDO deviceInformationDO = JSONUtil.toBean(item.getDataJson(), DeviceInformationDO.class); deviceInformationDO.setLocationX(item.getLocationX()); deviceInformationDO.setLocationY(item.getLocationY()); + deviceInformationDO.setActualLocationX(item.getActualLocationX()); + deviceInformationDO.setActualLocationY(item.getActualLocationY()); deviceInformationDO.setPositionMapId(positionMapId); deviceInformationDO.setPositionMapItemId(item.getId()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java index 769480f76..be8aaa003 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java @@ -38,6 +38,8 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) { wareHouseLocationDO.setLocationX(item.getLocationX()); wareHouseLocationDO.setLocationY(item.getLocationY()); + wareHouseLocationDO.setActualLocationX(item.getActualLocationX()); + wareHouseLocationDO.setActualLocationY(item.getActualLocationY()); if (wareHouseLocationDO.getId() == null) { wareHouseLocationDO.setId(getId()); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/ParkingSpotStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/ParkingSpotStrategyImpl.java index dbc98a612..bb4310b47 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/ParkingSpotStrategyImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/ParkingSpotStrategyImpl.java @@ -36,6 +36,8 @@ public class ParkingSpotStrategyImpl implements NodeProcessingStrategy { } parkingSpotDO.setLocationX(item.getLocationX()); parkingSpotDO.setLocationY(item.getLocationY()); + parkingSpotDO.setActualLocationX(item.getLocationX()); + parkingSpotDO.setActualLocationY(item.getLocationY()); parkingSpotDO.setPositionMapId(positionMapId); parkingSpotDO.setPositionMapItemId(item.getId()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardService.java new file mode 100644 index 000000000..bef387a74 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardService.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.service.bulletinboard; + +import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.BulletinBoardVO; + +/** + * 获取看板信息 Service 接口 + * + * @author 陈宾顺 + */ +public interface BulletinBoardService { + + /** + * 获取看板信息 + * + * @return + */ + BulletinBoardVO getBulletinBoard(); +} 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 new file mode 100644 index 000000000..da1b76a0e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bulletinboard/BulletinBoardServiceImpl.java @@ -0,0 +1,114 @@ +package cn.iocoder.yudao.module.system.service.bulletinboard; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO; +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.RobotInformationStatisticsVO; +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.robot.RobotInformationService; +import cn.iocoder.yudao.module.system.service.robot.RobotTaskService; +import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; +import cn.iocoder.yudao.module.system.util.redis.RedisUtil; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 获取看板信息 Service 实现类 + * + * @author 艾楷 + */ +@Service +@Validated +public class BulletinBoardServiceImpl implements BulletinBoardService { + @Resource + private RobotTaskService taskService; + @Resource + private RobotWarnMsgService robotWarnMsgService; + @Resource + private RobotInformationService robotInformationService; + @Resource + private RedisUtil redisUtil; + + @Override + public BulletinBoardVO getBulletinBoard() { + BulletinBoardVO vo = new BulletinBoardVO(); + LocalDateTime now = LocalDateTime.now(); + List list = taskService.list(new LambdaQueryWrapperX() + .ge(RobotTaskDO::getCreateTime, LocalDateTimeUtil.beginOfDay(now))); + Map> taskMap = list.stream().collect(Collectors.groupingBy(RobotTaskDO::getTaskStatus)); + // 任务状态 + TaskStatusVO taskStatusVO = new TaskStatusVO(); + + // 正在执行 + List underway = taskMap.get(RobotTaskDetailStatusEnum.DOING.getType()); + //根据时间降序 + if (CollectionUtil.isNotEmpty(underway)) { + underway.sort((o1, o2) -> o2.getStartTime().compareTo(o1.getStartTime())); + } + // 待执行 + List pendingExecution = taskMap.get(RobotTaskDetailStatusEnum.NEW.getType()); + //根据时间降序 + if (CollectionUtil.isNotEmpty(pendingExecution)) { + pendingExecution.sort((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime())); + } + // 已完成 + List completed = taskMap.get(RobotTaskDetailStatusEnum.DONE.getType()); + // 已取消 + List cancelled = taskMap.get(RobotTaskDetailStatusEnum.CLOSE.getType()); + taskStatusVO.setPendingExecutionNum(CollectionUtil.isEmpty(pendingExecution) ? 0 : pendingExecution.size()); + taskStatusVO.setUnderwayNum(CollectionUtil.isEmpty(underway) ? 0 : underway.size()); + taskStatusVO.setCompletedNum(CollectionUtil.isEmpty(completed) ? 0 : completed.size()); + taskStatusVO.setCancelledNum(CollectionUtil.isEmpty(cancelled) ? 0 : cancelled.size()); + int abnormalNum = CollectionUtil.isEmpty(taskMap.get(RobotTaskDetailStatusEnum.ABNORMAL.getType())) ? 0 : taskMap.get(RobotTaskDetailStatusEnum.ABNORMAL.getType()).size(); + taskStatusVO.setAbnormalNum(abnormalNum); + taskStatusVO.setTasksNumber(list.size()); + vo.setTaskStatusVO(taskStatusVO); + + // 获取车辆异常信息 + List robotWarnMsgDOS = robotWarnMsgService.list(new LambdaQueryWrapperX() + .ge(RobotWarnMsgDO::getCreateTime, LocalDateTimeUtil.beginOfDay(now))); + + // 正在执行任务 + vo.setUnderway(underway); + // 待执行任务 + vo.setPendingExecution(pendingExecution); + + // 车辆状态 + RobotInformationStatisticsVO statisticsVO = robotInformationService.statisticsInformation(); + vo.setStatistics(statisticsVO); + // 车辆异常信息 + vo.setRobotWarnMsgDOS(robotWarnMsgDOS); + + List robotElectricityLevelVOS = new ArrayList<>(); + List allRobot = robotInformationService.getAllRobot(); + 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(); + robotElectricityLevelVO.setRobotNo(robotInformationDO.getRobotNo()); + robotElectricityLevelVO.setBatSoc(robotStatusDataPoseDTO.getBat_soc()); + robotElectricityLevelVOS.add(robotElectricityLevelVO); + } + } + return null; + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java index 34954dcfe..4bc5fc974 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java @@ -8,13 +8,14 @@ import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReq import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskRespVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO; +import com.baomidou.mybatisplus.extension.service.IService; /** * 机器人任务主表 Service 接口 * * @author 陈宾顺 */ -public interface RobotTaskService { +public interface RobotTaskService extends IService { /** * 创建机器人任务主表 @@ -59,4 +60,4 @@ public interface RobotTaskService { * @return */ String getTaskNo(); -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java index 3f6b01824..078dde3c5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java @@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.system.service.robot; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*; @@ -19,24 +21,23 @@ import cn.iocoder.yudao.module.system.enums.robot.*; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import cn.iocoder.yudao.module.system.util.redis.RedissonUtils; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.redisson.api.RLock; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import javax.annotation.Resource; - import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import java.util.*; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - - import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -49,7 +50,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @Slf4j @Service @Validated -public class RobotTaskServiceImpl implements RobotTaskService { +public class RobotTaskServiceImpl extends ServiceImpl implements RobotTaskService { private final String RESULT = "SUCCESS"; @@ -697,4 +698,4 @@ public class RobotTaskServiceImpl implements RobotTaskService { return taskNo+ DateUtils.getYearMonthDay()+incrementByKey; } -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java index 09c52e5b0..9205b12f9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java @@ -7,13 +7,14 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; +import com.baomidou.mybatisplus.extension.service.IService; /** * 机器人告警信息 Service 接口 * * @author 陈宾顺 */ -public interface RobotWarnMsgService { +public interface RobotWarnMsgService extends IService { /** * 创建机器人告警信息 @@ -53,4 +54,4 @@ public interface RobotWarnMsgService { */ PageResult getWarnMsgPage(RobotWarnMsgPageReqVO pageReqVO); -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java index e9ec9f83f..498c80221 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java @@ -1,18 +1,16 @@ package cn.iocoder.yudao.module.system.service.robot; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; -import java.util.*; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import javax.annotation.Resource; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.WARN_MSG_NOT_EXISTS; @@ -24,7 +22,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.WARN_MSG_N */ @Service @Validated -public class RobotWarnMsgServiceImpl implements RobotWarnMsgService { +public class RobotWarnMsgServiceImpl extends ServiceImpl implements RobotWarnMsgService { @Resource private RobotWarnMsgMapper warnMsgMapper; @@ -71,4 +69,4 @@ public class RobotWarnMsgServiceImpl implements RobotWarnMsgService { return warnMsgMapper.selectPage(pageReqVO); } -} \ No newline at end of file +}