From 4d49a7b7e0e4e0273b813563fd0e17c2ab981ab7 Mon Sep 17 00:00:00 2001 From: aikai Date: Wed, 5 Feb 2025 10:24:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E6=96=B0=E5=A2=9E=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=A1=E6=81=AF=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加设备信息相关实体类、控制器、服务类和Mapper - 实现设备信息的批量保存、编辑和删除功能 - 添加通过地图ID获取设备列表的接口 - 优化停车点相关代码,统一使用positionMapId和positionMapItemId字段 - 新增设备点位数据处理策略 --- .../framework/common/enums/NodeTypeEnum.java | 2 +- .../DeviceInformationController.java | 7 +++ .../vo/DeviceInformationPageReqVO.java | 25 ++++++++- .../vo/DeviceInformationRespVO.java | 32 +++++++++++- .../vo/DeviceInformationSaveReqVO.java | 25 ++++++++- .../parkingspot/vo/ParkingSpotPageReqVO.java | 8 +-- .../parkingspot/vo/ParkingSpotRespVO.java | 10 ++-- .../parkingspot/vo/ParkingSpotSaveReqVO.java | 6 +-- .../information/DeviceInformationDO.java | 44 +++++++++++++--- .../dataobject/parkingspot/ParkingSpotDO.java | 6 +-- .../mysql/parkingspot/ParkingSpotMapper.java | 12 ++--- .../mapnode/NodeProcessingContext.java | 19 ++----- .../mapnode/strategy/DeviceStrategyImpl.java | 51 +++++++++++++++++++ .../strategy/ParkingSpotStrategyImpl.java | 5 +- .../information/DeviceInformationService.java | 31 +++++++++-- .../DeviceInformationServiceImpl.java | 49 ++++++++++++++---- .../parkingspot/ParkingSpotServiceImpl.java | 4 +- 17 files changed, 272 insertions(+), 64 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/DeviceStrategyImpl.java diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java index 3fe4030ee..1a7a4826b 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java @@ -13,7 +13,7 @@ import lombok.Getter; public enum NodeTypeEnum { ROUTE(1, "路径点位"), WARE(2, "库位点"), - EQUIPMENT(3, "设备点"), + DEVICE(3, "设备点"), PARKING(4, "停车点"), CHANGE(5, "区域变更点"), WAIT(6, "等待点"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java index eaa078e57..7438b8daa 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java @@ -72,6 +72,13 @@ public class DeviceInformationController { return success(BeanUtils.toBean(information, DeviceInformationRespVO.class)); } + @GetMapping("/list") + @Operation(summary = "获得设备信息列表") + public CommonResult> getList(@Valid DeviceInformationPageReqVO pageReqVO) { + List list = informationService.getList(pageReqVO); + return success(BeanUtils.toBean(list, DeviceInformationRespVO.class)); + } + @GetMapping("/page") @Operation(summary = "获得设备信息分页") @PreAuthorize("@ss.hasPermission('device:information:query')") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java index 656f9376a..1b6df9623 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.system.controller.admin.information.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; + +import java.math.BigDecimal; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -14,6 +17,23 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class DeviceInformationPageReqVO extends PageParam { + @Schema(description = "地图id", example = "6609") + private Long positionMapId; + + @Schema(description = "地图子表节点id", example = "23591") + private Long positionMapItemId; + + @Schema(description = "库位坐标x轴") + private String locationX; + + @Schema(description = "库位坐标y轴") + private String locationY; + + @Schema(description = "宽度") + private BigDecimal locationWide; + + @Schema(description = "深度") + private BigDecimal locationDeep; @Schema(description = "设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)", example = "2") private Integer deviceType; @@ -24,6 +44,9 @@ public class DeviceInformationPageReqVO extends PageParam { @Schema(description = "mac地址") private String macAddress; + @Schema(description = "设备在地图上图标") + private String mapImageUrl; + @Schema(description = "上传图片附件", example = "https://www.iocoder.cn") private String url; @@ -47,4 +70,4 @@ public class DeviceInformationPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ 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/information/vo/DeviceInformationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java index 61aa77568..98eaaac38 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.information.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; + +import java.math.BigDecimal; import java.util.*; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -16,6 +18,30 @@ public class DeviceInformationRespVO { @ExcelProperty("主键ID") private Long id; + @Schema(description = "地图id", example = "6609") + @ExcelProperty("地图id") + private Long positionMapId; + + @Schema(description = "地图子表节点id", example = "23591") + @ExcelProperty("地图子表节点id") + private Long positionMapItemId; + + @Schema(description = "库位坐标x轴") + @ExcelProperty("库位坐标x轴") + private String locationX; + + @Schema(description = "库位坐标y轴") + @ExcelProperty("库位坐标y轴") + private String locationY; + + @Schema(description = "宽度") + @ExcelProperty("宽度") + private BigDecimal locationWide; + + @Schema(description = "深度") + @ExcelProperty("深度") + private BigDecimal locationDeep; + @Schema(description = "设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)") private Integer deviceType; @@ -28,6 +54,10 @@ public class DeviceInformationRespVO { @ExcelProperty("mac地址") private String macAddress; + @Schema(description = "设备在地图上图标") + @ExcelProperty("设备在地图上图标") + private String mapImageUrl; + @Schema(description = "上传图片附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") @ExcelProperty("上传图片附件") private String url; @@ -56,4 +86,4 @@ public class DeviceInformationRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; -} \ 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/information/vo/DeviceInformationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java index 1741d39a8..aa4a7fbe5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.information.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; + +import java.math.BigDecimal; import java.util.*; import javax.validation.constraints.*; import org.springframework.format.annotation.DateTimeFormat; @@ -14,6 +16,24 @@ public class DeviceInformationSaveReqVO { @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14335") private Long id; + @Schema(description = "地图id", example = "6609") + private Long positionMapId; + + @Schema(description = "地图子表节点id", example = "23591") + private Long positionMapItemId; + + @Schema(description = "库位坐标x轴") + private String locationX; + + @Schema(description = "库位坐标y轴") + private String locationY; + + @Schema(description = "宽度") + private BigDecimal locationWide; + + @Schema(description = "深度") + private BigDecimal locationDeep; + @Schema(description = "设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @NotNull(message = "设备类型不能为空") private Integer deviceType; @@ -24,6 +44,9 @@ public class DeviceInformationSaveReqVO { @Schema(description = "mac地址") private String macAddress; + @Schema(description = "设备在地图上图标") + private String mapImageUrl; + @Schema(description = "上传图片附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") private String url; @@ -42,4 +65,4 @@ public class DeviceInformationSaveReqVO { @Schema(description = "设备最后通讯时间") private LocalDateTime deviceLastTime; -} \ 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/parkingspot/vo/ParkingSpotPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotPageReqVO.java index 4cbd452c8..cdea0d6aa 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotPageReqVO.java @@ -17,10 +17,10 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ public class ParkingSpotPageReqVO extends PageParam { @Schema(description = "地图id", example = "6609") - private Long mapId; + private Long positionMapId; - @Schema(description = "地图字表节点id", example = "23591") - private Long mapItemId; + @Schema(description = "地图子表节点id", example = "23591") + private Long positionMapItemId; @Schema(description = "库位坐标x轴") private String locationX; @@ -47,4 +47,4 @@ public class ParkingSpotPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ 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/parkingspot/vo/ParkingSpotRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotRespVO.java index aea0e4a8a..60eaaa72a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotRespVO.java @@ -19,11 +19,11 @@ public class ParkingSpotRespVO { @Schema(description = "地图id", example = "6609") @ExcelProperty("地图id") - private Long mapId; + private Long positionMapId; - @Schema(description = "地图字表节点id", example = "23591") - @ExcelProperty("地图字表节点id") - private Long mapItemId; + @Schema(description = "地图子表节点id", example = "23591") + @ExcelProperty("地图子表节点id") + private Long positionMapItemId; @Schema(description = "库位坐标x轴") @ExcelProperty("库位坐标x轴") @@ -57,4 +57,4 @@ public class ParkingSpotRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; -} \ 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/parkingspot/vo/ParkingSpotSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotSaveReqVO.java index 1ec1b9a48..1f42c209c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotSaveReqVO.java @@ -14,10 +14,10 @@ public class ParkingSpotSaveReqVO { private Long id; @Schema(description = "地图id", example = "6609") - private Long mapId; + private Long positionMapId; - @Schema(description = "地图字表节点id", example = "23591") - private Long mapItemId; + @Schema(description = "地图子表节点id", example = "23591") + private Long positionMapItemId; @Schema(description = "库位坐标x轴") private String locationX; 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 5986ce37d..6945bc8be 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 @@ -1,12 +1,14 @@ package cn.iocoder.yudao.module.system.dal.dataobject.information; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; /** * 设备信息 DO @@ -28,6 +30,30 @@ public class DeviceInformationDO extends BaseDO { */ @TableId(type = IdType.ASSIGN_ID) private Long id; + /** + * 地图id + */ + private Long positionMapId; + /** + * 地图子表节点id + */ + private Long positionMapItemId; + /** + * 库位坐标x轴 + */ + private String locationX; + /** + * 库位坐标y轴 + */ + private String locationY; + /** + * 宽度 + */ + private BigDecimal locationWide; + /** + * 深度 + */ + private BigDecimal locationDeep; /** * 设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒) */ @@ -40,6 +66,10 @@ public class DeviceInformationDO extends BaseDO { * mac地址 */ private String macAddress; + /** + * 设备在地图上图标 + */ + private String mapImageUrl; /** * 上传图片附件 */ @@ -65,4 +95,4 @@ public class DeviceInformationDO extends BaseDO { */ private LocalDateTime deviceLastTime; -} \ No newline at end of file +} 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 ad69c2ede..7ec24b504 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 @@ -32,11 +32,11 @@ public class ParkingSpotDO extends BaseDO { /** * 地图id */ - private Long mapId; + private Long positionMapId; /** - * 地图字表节点id + * 地图子表节点id */ - private Long mapItemId; + private Long positionMapItemId; /** * 库位坐标x轴 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/parkingspot/ParkingSpotMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/parkingspot/ParkingSpotMapper.java index 31db4da09..9d1dc1d3f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/parkingspot/ParkingSpotMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/parkingspot/ParkingSpotMapper.java @@ -1,13 +1,11 @@ package cn.iocoder.yudao.module.system.dal.mysql.parkingspot; -import java.util.*; - import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.ParkingSpotPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.parkingspot.ParkingSpotDO; import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.*; /** * 停车点 Mapper @@ -19,8 +17,8 @@ public interface ParkingSpotMapper extends BaseMapperX { default PageResult selectPage(ParkingSpotPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ParkingSpotDO::getMapId, reqVO.getMapId()) - .eqIfPresent(ParkingSpotDO::getMapItemId, reqVO.getMapItemId()) + .eqIfPresent(ParkingSpotDO::getPositionMapId, reqVO.getPositionMapId()) + .eqIfPresent(ParkingSpotDO::getPositionMapItemId, reqVO.getPositionMapItemId()) .eqIfPresent(ParkingSpotDO::getLocationX, reqVO.getLocationX()) .eqIfPresent(ParkingSpotDO::getLocationY, reqVO.getLocationY()) .eqIfPresent(ParkingSpotDO::getLocationWide, reqVO.getLocationWide()) @@ -32,4 +30,4 @@ public interface ParkingSpotMapper extends BaseMapperX { .orderByDesc(ParkingSpotDO::getId)); } -} \ No newline at end of file +} 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 e3f6e5d93..6ccf624b7 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 @@ -3,18 +3,12 @@ package cn.iocoder.yudao.module.system.handler.mapnode; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO; -import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; -import cn.iocoder.yudao.module.system.handler.mapnode.strategy.HouseLocationStrategyImpl; -import cn.iocoder.yudao.module.system.handler.mapnode.strategy.MapNodeStrategyImpl; -import cn.iocoder.yudao.module.system.handler.mapnode.strategy.NodeProcessingStrategy; -import cn.iocoder.yudao.module.system.handler.mapnode.strategy.ParkingSpotStrategyImpl; +import cn.iocoder.yudao.module.system.handler.mapnode.strategy.*; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; -import com.baomidou.mybatisplus.core.toolkit.IdWorker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -23,16 +17,13 @@ import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; - -import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId; @Component public class NodeProcessingContext { private final Map strategyMap = new HashMap<>(); - - + @Autowired + private PositionMapItemService positionMapItemService; @Autowired private MapNodeStrategyImpl mapNodeStrategyImpl; @Autowired @@ -40,7 +31,7 @@ public class NodeProcessingContext { @Autowired private ParkingSpotStrategyImpl parkingSpotStrategyImpl; @Autowired - private PositionMapItemService positionMapItemService; + private DeviceStrategyImpl deviceStrategyImpl; /** * 项目启动时 初始化策略 @@ -52,7 +43,7 @@ public class NodeProcessingContext { // 库位 strategyMap.put(NodeTypeEnum.WARE.getType(), houseLocationStrategyImpl); // 设备点 -// strategyMap.put(NodeTypeEnum.EQUIPMENT.getType(), houseLocationStrategyImpl); + strategyMap.put(NodeTypeEnum.DEVICE.getType(), deviceStrategyImpl); // 停车点 strategyMap.put(NodeTypeEnum.PARKING.getType(), parkingSpotStrategyImpl); // 路径点 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 new file mode 100644 index 000000000..0157b54b4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/DeviceStrategyImpl.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.system.handler.mapnode.strategy; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO; +import cn.iocoder.yudao.module.system.service.information.DeviceInformationService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId; + +@Component +public class DeviceStrategyImpl implements NodeProcessingStrategy { + @Resource + private DeviceInformationService deviceInformationService; + + @Override + public void processNodes(Long positionMapId, List nodeBaseDTOS) { + // -- 策略3 处理设备点 + // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 + // --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位 + List newList = new ArrayList<>(); + nodeBaseDTOS.forEach(item -> { + if (item.getId() == null) { + item.setId(getId()); + } + item.setPositionMapId(positionMapId); + DeviceInformationDO deviceInformationDO = JSONUtil.toBean(item.getDataJson(), DeviceInformationDO.class); + if (deviceInformationDO.getId() == null) { + deviceInformationDO.setId(getId()); + } + deviceInformationDO.setLocationX(item.getLocationX()); + deviceInformationDO.setLocationY(item.getLocationY()); + + deviceInformationDO.setPositionMapId(positionMapId); + deviceInformationDO.setPositionMapItemId(item.getId()); + newList.add(deviceInformationDO); + item.setDataJson(JSONUtil.toJsonStr(deviceInformationDO)); + }); + + List oldList = deviceInformationService.getByMapId(positionMapId); + List> list = CollectionUtils.diffList(oldList, newList, + (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); + deviceInformationService.batchSaveOrEditOrDel(positionMapId, list); + } +} 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 973a12dbd..dbc98a612 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 @@ -30,7 +30,6 @@ public class ParkingSpotStrategyImpl implements NodeProcessingStrategy { item.setId(getId()); } item.setPositionMapId(positionMapId); - // -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去 ParkingSpotDO parkingSpotDO = JSONUtil.toBean(item.getDataJson(), ParkingSpotDO.class); if (parkingSpotDO.getId() == null) { parkingSpotDO.setId(getId()); @@ -38,8 +37,8 @@ public class ParkingSpotStrategyImpl implements NodeProcessingStrategy { parkingSpotDO.setLocationX(item.getLocationX()); parkingSpotDO.setLocationY(item.getLocationY()); - parkingSpotDO.setMapId(positionMapId); - parkingSpotDO.setMapItemId(item.getId()); + parkingSpotDO.setPositionMapId(positionMapId); + parkingSpotDO.setPositionMapItemId(item.getId()); newList.add(parkingSpotDO); item.setDataJson(JSONUtil.toJsonStr(parkingSpotDO)); }); 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 0c1955bf7..a2cf194e0 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 @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.system.service.information; -import java.util.*; -import javax.validation.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; 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 javax.validation.Valid; +import java.util.List; + /** * 设备信息 Service 接口 * @@ -53,4 +53,27 @@ public interface DeviceInformationService { */ PageResult getInformationPage(DeviceInformationPageReqVO pageReqVO); -} \ No newline at end of file + /** + * 批量新增删除修改 + * + * @param positionMapId + * @param list + */ + void batchSaveOrEditOrDel(Long positionMapId, List> list); + + /** + * 通过地图id获取设备列表 + * + * @param positionMapId + * @return + */ + List getByMapId(Long positionMapId); + + /** + * 获取设备列表 + * + * @param pageReqVO + * @return + */ + List getList(@Valid DeviceInformationPageReqVO pageReqVO); +} 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 2d5ae39b8..e1b68369f 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 @@ -1,25 +1,29 @@ package cn.iocoder.yudao.module.system.service.information; 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.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 cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper; -import cn.iocoder.yudao.module.system.enums.device.DeviceInformationEnum; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import javax.annotation.Resource; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - - +import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.List; +import static cn.hutool.core.collection.CollUtil.isNotEmpty; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +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; /** * 设备信息 Service 实现类 @@ -42,7 +46,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService { DeviceInformationPageReqVO pageReqVO = new DeviceInformationPageReqVO(); pageReqVO.setMacAddress(createReqVO.getMacAddress()); PageResult pageResult = informationMapper.selectPage(pageReqVO); - if(ObjectUtil.isNotEmpty(pageResult.getList())){ + if (ObjectUtil.isNotEmpty(pageResult.getList())) { throw exception(INFORMATION_MAC_EXIST); } // 插入 @@ -87,4 +91,31 @@ public class DeviceInformationServiceImpl implements DeviceInformationService { return informationMapper.selectPage(pageReqVO); } -} \ No newline at end of file + @Override + @Transactional(rollbackFor = Exception.class) + public void batchSaveOrEditOrDel(Long positionMapId, List> list) { + //批量添加、修改、删除 + if (isNotEmpty(list.get(0))) { + informationMapper.insertBatch(list.get(0)); + } + if (isNotEmpty(list.get(1))) { + informationMapper.updateBatch(list.get(1)); + } + if (isNotEmpty(list.get(2))) { + informationMapper.deleteByIds(convertList(list.get(2), DeviceInformationDO::getId)); + } + } + + @Override + public List getByMapId(Long positionMapId) { + return informationMapper.selectList(new LambdaQueryWrapperX() + .eq(DeviceInformationDO::getPositionMapId, positionMapId)); + } + + @Override + public List getList(DeviceInformationPageReqVO pageReqVO) { + return informationMapper.selectList(new LambdaQueryWrapper() + .eq(pageReqVO.getDeviceType() != null, DeviceInformationDO::getDeviceType, pageReqVO.getDeviceType())); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotServiceImpl.java index 321ee954c..3deabc52d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotServiceImpl.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.parkingspot.ParkingSpotDO; import cn.iocoder.yudao.module.system.dal.mysql.parkingspot.ParkingSpotMapper; 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; @@ -65,10 +66,11 @@ public class ParkingSpotServiceImpl extends ServiceImpl getByMapId(Long positionMapId) { return parkingSpotMapper.selectList(new LambdaQueryWrapperX() - .eq(ParkingSpotDO::getMapId, positionMapId)); + .eq(ParkingSpotDO::getPositionMapId, positionMapId)); } @Override + @Transactional(rollbackFor = Exception.class) public void batchSaveOrEditOrDel(Long positionMapId, List> list) { //批量添加、修改、删除 if (isNotEmpty(list.get(0))) {