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 67b561354..3fe4030ee 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 @@ -1,11 +1,8 @@ package cn.iocoder.yudao.framework.common.enums; -import cn.hutool.core.util.ObjUtil; import lombok.AllArgsConstructor; import lombok.Getter; -import java.util.Arrays; - /** * 通用状态枚举 * @@ -16,7 +13,7 @@ import java.util.Arrays; public enum NodeTypeEnum { ROUTE(1, "路径点位"), WARE(2, "库位点"), - charging(3, "充电桩"), + EQUIPMENT(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 48cfd6d66..eaa078e57 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 @@ -93,4 +93,4 @@ public class DeviceInformationController { BeanUtils.toBean(list, DeviceInformationRespVO.class)); } -} \ 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/ParkingSpotController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/ParkingSpotController.java new file mode 100644 index 000000000..7f1240d1c --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/ParkingSpotController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.system.controller.admin.parkingspot; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.parkingspot.ParkingSpotDO; +import cn.iocoder.yudao.module.system.service.parkingspot.ParkingSpotService; + +@Tag(name = "管理后台 - 停车点") +@RestController +@RequestMapping("/system/parking-spot") +@Validated +public class ParkingSpotController { + + @Resource + private ParkingSpotService parkingSpotService; + + @PostMapping("/create") + @Operation(summary = "创建停车点") + @PreAuthorize("@ss.hasPermission('system:parking-spot:create')") + public CommonResult createParkingSpot(@Valid @RequestBody ParkingSpotSaveReqVO createReqVO) { + return success(parkingSpotService.createParkingSpot(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新停车点") + @PreAuthorize("@ss.hasPermission('system:parking-spot:update')") + public CommonResult updateParkingSpot(@Valid @RequestBody ParkingSpotSaveReqVO updateReqVO) { + parkingSpotService.updateParkingSpot(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除停车点") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:parking-spot:delete')") + public CommonResult deleteParkingSpot(@RequestParam("id") Long id) { + parkingSpotService.deleteParkingSpot(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得停车点") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:parking-spot:query')") + public CommonResult getParkingSpot(@RequestParam("id") Long id) { + ParkingSpotDO parkingSpot = parkingSpotService.getParkingSpot(id); + return success(BeanUtils.toBean(parkingSpot, ParkingSpotRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得停车点分页") + @PreAuthorize("@ss.hasPermission('system:parking-spot:query')") + public CommonResult> getParkingSpotPage(@Valid ParkingSpotPageReqVO pageReqVO) { + PageResult pageResult = parkingSpotService.getParkingSpotPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ParkingSpotRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出停车点 Excel") + @PreAuthorize("@ss.hasPermission('system:parking-spot:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportParkingSpotExcel(@Valid ParkingSpotPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = parkingSpotService.getParkingSpotPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "停车点.xls", "数据", ParkingSpotRespVO.class, + BeanUtils.toBean(list, ParkingSpotRespVO.class)); + } + +} 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 new file mode 100644 index 000000000..4cbd452c8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotPageReqVO.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 停车点分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ParkingSpotPageReqVO extends PageParam { + + @Schema(description = "地图id", example = "6609") + private Long mapId; + + @Schema(description = "地图字表节点id", example = "23591") + private Long mapItemId; + + @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:四向)") + private Integer direction; + + @Schema(description = "进入方向(0:尾入、1:头入)") + private Integer inDirection; + + @Schema(description = "离开方向(0:尾出、1:头出)") + private Integer outDirection; + + @Schema(description = "创建时间") + @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 new file mode 100644 index 000000000..aea0e4a8a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotRespVO.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 停车点 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ParkingSpotRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26076") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "地图id", example = "6609") + @ExcelProperty("地图id") + private Long mapId; + + @Schema(description = "地图字表节点id", example = "23591") + @ExcelProperty("地图字表节点id") + private Long mapItemId; + + @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:四向)") + @ExcelProperty("库位方向(1:单向、2:双向、3:三向、4:四向)") + private Integer direction; + + @Schema(description = "进入方向(0:尾入、1:头入)") + @ExcelProperty("进入方向(0:尾入、1:头入)") + private Integer inDirection; + + @Schema(description = "离开方向(0:尾出、1:头出)") + @ExcelProperty("离开方向(0:尾出、1:头出)") + private Integer outDirection; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @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 new file mode 100644 index 000000000..1ec1b9a48 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/parkingspot/vo/ParkingSpotSaveReqVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 停车点新增/修改 Request VO") +@Data +public class ParkingSpotSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26076") + private Long id; + + @Schema(description = "地图id", example = "6609") + private Long mapId; + + @Schema(description = "地图字表节点id", example = "23591") + private Long mapItemId; + + @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:四向)") + private Integer direction; + + @Schema(description = "进入方向(0:尾入、1:头入)") + private Integer inDirection; + + @Schema(description = "离开方向(0:尾出、1:头出)") + private Integer outDirection; + +} 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 ecafb1b04..7d9ed85e3 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,19 +1,15 @@ package cn.iocoder.yudao.module.system.controller.admin.positionmap; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemRespVO; -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.NodeProcessingContext; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; @@ -46,6 +42,7 @@ public class PositionMapItemController { private PositionMapItemService positionMapItemService; @Resource private NodeProcessingContext nodeProcessingContext; + // -- 前端给所有的节点信息 - @PostMapping("/batchSaveOrEditOrDel") @Operation(summary = "批量新增编辑删除节点") @@ -72,12 +69,17 @@ public class PositionMapItemController { return success(BeanUtils.toBean(positionMapItem, PositionMapItemRespVO.class)); } - @GetMapping("/page") - @Operation(summary = "获得仓库点位地图子表分页") + @GetMapping("/list") + @Operation(summary = "获取仓库点位地图节点列表") @PreAuthorize("@ss.hasPermission('system:position-map-item:query')") - public CommonResult> getPositionMapItemPage(@Valid PositionMapItemPageReqVO pageReqVO) { - PageResult pageResult = positionMapItemService.getPositionMapItemPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, PositionMapItemRespVO.class)); + public CommonResult> getPositionMapItemPage(@RequestParam("positionMapId") Long positionMapId, + @RequestParam(value = "areaId", required = false) Long areaId, + @RequestParam(value = "laneId", required = false) Long laneId) { + List list = positionMapItemService.list(new LambdaQueryWrapperX() + .eq(PositionMapItemDO::getPositionMapId, positionMapId) + .eqIfPresent(PositionMapItemDO::getAreaId, areaId) + .eqIfPresent(PositionMapItemDO::getLaneId, laneId)); + return success(BeanUtils.toBean(list, PositionMapItemRespVO.class)); } @GetMapping("/export-excel") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java index a6e9ce7e1..7a04d7130 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java @@ -1,11 +1,13 @@ package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 仓库点位地图子表 Response VO") @Data @@ -14,18 +16,22 @@ public class PositionMapItemRespVO { @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31007") @ExcelProperty("主键ID") + @JsonSerialize(using = ToStringSerializer.class) private Long id; @Schema(description = "仓库点位地图表id", example = "30963") @ExcelProperty("仓库点位地图表id") + @JsonSerialize(using = ToStringSerializer.class) private Long positionMapId; @Schema(description = "库区id(自定义)", example = "30963") @ExcelProperty("库区id(自定义)") + @JsonSerialize(using = ToStringSerializer.class) private Long areaId; @Schema(description = "巷道id(自定义)", example = "30963") @ExcelProperty("巷道id(自定义)") + @JsonSerialize(using = ToStringSerializer.class) private Long laneId; @Schema(description = "坐标x轴") 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 new file mode 100644 index 000000000..ad69c2ede --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/parkingspot/ParkingSpotDO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.parkingspot; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 停车点 DO + * + * @author 艾楷 + */ +@TableName("ware_parking_spot") +@KeySequence("ware_parking_spot_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ParkingSpotDO extends BaseDO { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 地图id + */ + private Long mapId; + /** + * 地图字表节点id + */ + private Long mapItemId; + /** + * 库位坐标x轴 + */ + private String locationX; + /** + * 库位坐标y轴 + */ + private String locationY; + /** + * 宽度 + */ + private BigDecimal locationWide; + /** + * 深度 + */ + private BigDecimal locationDeep; + /** + * 库位方向(1:单向、2:双向、3:三向、4:四向) + */ + private Integer direction; + /** + * 进入方向(0:尾入、1:头入) + */ + private Integer inDirection; + /** + * 离开方向(0:尾出、1:头出) + */ + private Integer outDirection; + +} 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 da4e14df8..ae91448da 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 @@ -1,12 +1,8 @@ package cn.iocoder.yudao.module.system.dal.dataobject.positionmap; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -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.*; +import lombok.*; /** * 仓库点位地图子表 DO 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 new file mode 100644 index 000000000..31db4da09 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/parkingspot/ParkingSpotMapper.java @@ -0,0 +1,35 @@ +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.module.system.dal.dataobject.parkingspot.ParkingSpotDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.*; + +/** + * 停车点 Mapper + * + * @author 艾楷 + */ +@Mapper +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::getLocationX, reqVO.getLocationX()) + .eqIfPresent(ParkingSpotDO::getLocationY, reqVO.getLocationY()) + .eqIfPresent(ParkingSpotDO::getLocationWide, reqVO.getLocationWide()) + .eqIfPresent(ParkingSpotDO::getLocationDeep, reqVO.getLocationDeep()) + .eqIfPresent(ParkingSpotDO::getDirection, reqVO.getDirection()) + .eqIfPresent(ParkingSpotDO::getInDirection, reqVO.getInDirection()) + .eqIfPresent(ParkingSpotDO::getOutDirection, reqVO.getOutDirection()) + .betweenIfPresent(ParkingSpotDO::getCreateTime, reqVO.getCreateTime()) + .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 d0c63dca2..e3f6e5d93 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 @@ -10,7 +10,9 @@ import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseD 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.service.positionmap.PositionMapItemService; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import org.springframework.beans.factory.annotation.Autowired; @@ -31,9 +33,13 @@ public class NodeProcessingContext { private final Map strategyMap = new HashMap<>(); + @Autowired + private MapNodeStrategyImpl mapNodeStrategyImpl; @Autowired private HouseLocationStrategyImpl houseLocationStrategyImpl; @Autowired + private ParkingSpotStrategyImpl parkingSpotStrategyImpl; + @Autowired private PositionMapItemService positionMapItemService; /** @@ -42,42 +48,33 @@ public class NodeProcessingContext { @PostConstruct public void init() { // 节点 -// strategyMap.put(1, positionMapItemStrategyImpl); + strategyMap.put(NodeTypeEnum.ROUTE.getType(), mapNodeStrategyImpl); // 库位 strategyMap.put(NodeTypeEnum.WARE.getType(), houseLocationStrategyImpl); - // todo 可以继续添加更多的策略 + // 设备点 +// strategyMap.put(NodeTypeEnum.EQUIPMENT.getType(), houseLocationStrategyImpl); + // 停车点 + strategyMap.put(NodeTypeEnum.PARKING.getType(), parkingSpotStrategyImpl); + // 路径点 + strategyMap.put(NodeTypeEnum.CHANGE.getType(), mapNodeStrategyImpl); + // 等待点 + strategyMap.put(NodeTypeEnum.WAIT.getType(), mapNodeStrategyImpl); + // todo 可以继续添加更多的策略 - 新增实现即可 } @Transactional(rollbackFor = Exception.class) public void processNodesByStrategy(Long positionMapId, List oldItemList, int key, List nodeBaseDTOS) { - // -- 这里处理节点 - 因为所有的类型都要建立在节点之上 - 把所有新增没有节点id的先分配id下 - 后续其他类型的需要绑定该id - nodeBaseDTOS.forEach(item -> { - if (item.getId() == null) { - item.setId(getId()); - } - item.setPositionMapId(positionMapId); - // -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去 - if (Objects.equals(item.getType(), NodeTypeEnum.WARE.getType())) { - List wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class); - wareHouseLocationDOS.forEach(wareHouseLocationDO -> { - wareHouseLocationDO.setLocationX(item.getLocationX()); - wareHouseLocationDO.setLocationY(item.getLocationY()); - if (wareHouseLocationDO.getId() == null) { - wareHouseLocationDO.setId(IdWorker.getId()); - } - }); - item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); - } - }); - List newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class); - List> list = CollectionUtils.diffList(oldItemList, newList, - (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); - positionMapItemService.batchSaveOrEditOrDel(positionMapId, list); // -- 获取对应的策略 - 如果没有对应的直接 return NodeProcessingStrategy strategy = strategyMap.get(key); if (strategy == null) { return; } + // 策略模式 策略实现 strategy.processNodes(positionMapId, nodeBaseDTOS); + + List newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class); + List> list = CollectionUtils.diffList(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/HouseLocationStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java index fbd69e3b3..fa9b82d26 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 @@ -6,13 +6,14 @@ 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.service.houselocation.HouseLocationService; -import com.baomidou.mybatisplus.core.toolkit.IdWorker; 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 HouseLocationStrategyImpl implements NodeProcessingStrategy { @Resource @@ -22,16 +23,26 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { public void processNodes(Long positionMapId, List nodeBaseDTOS) { // -- 策略1 处理库位点 // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 - // --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位 List newList = new ArrayList<>(); - for (NodeBaseDTO nodeBaseDTO : nodeBaseDTOS) { - List wareHouseLocationDOS = JSONUtil.toList(nodeBaseDTO.getDataJson(), WareHouseLocationDO.class); - for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) { - wareHouseLocationDO.setMapId(positionMapId); - wareHouseLocationDO.setMapItemId(nodeBaseDTO.getId()); - newList.add(wareHouseLocationDO); + nodeBaseDTOS.forEach(item -> { + if (item.getId() == null) { + item.setId(getId()); } - } + item.setPositionMapId(positionMapId); + // -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去 + List wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class); + wareHouseLocationDOS.forEach(wareHouseLocationDO -> { + wareHouseLocationDO.setLocationX(item.getLocationX()); + wareHouseLocationDO.setLocationY(item.getLocationY()); + if (wareHouseLocationDO.getId() == null) { + wareHouseLocationDO.setId(getId()); + } + wareHouseLocationDO.setMapId(positionMapId); + wareHouseLocationDO.setMapItemId(item.getId()); + newList.add(wareHouseLocationDO); + }); + item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); + }); List oldList = houseLocationService.getByMapId(positionMapId); List> list = CollectionUtils.diffList(oldList, newList, diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/MapNodeStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/MapNodeStrategyImpl.java new file mode 100644 index 000000000..62581553d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/MapNodeStrategyImpl.java @@ -0,0 +1,25 @@ +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.houselocation.WareHouseLocationDO; +import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService; +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 MapNodeStrategyImpl implements NodeProcessingStrategy { + + @Override + public void processNodes(Long positionMapId, List nodeBaseDTOS) { + // -- 策略1 处理节点 + // -- 此处不做任何业务处理 - 具体数据不另外存表 + } +} 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 new file mode 100644 index 000000000..973a12dbd --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/ParkingSpotStrategyImpl.java @@ -0,0 +1,52 @@ +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.parkingspot.ParkingSpotDO; +import cn.iocoder.yudao.module.system.service.parkingspot.ParkingSpotService; +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 ParkingSpotStrategyImpl implements NodeProcessingStrategy { + @Resource + private ParkingSpotService parkingSpotService; + + @Override + public void processNodes(Long positionMapId, List nodeBaseDTOS) { + // -- 策略4 处理停车点 + // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 + // --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位 + List newList = new ArrayList<>(); + nodeBaseDTOS.forEach(item -> { + if (item.getId() == null) { + item.setId(getId()); + } + item.setPositionMapId(positionMapId); + // -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去 + ParkingSpotDO parkingSpotDO = JSONUtil.toBean(item.getDataJson(), ParkingSpotDO.class); + if (parkingSpotDO.getId() == null) { + parkingSpotDO.setId(getId()); + } + parkingSpotDO.setLocationX(item.getLocationX()); + parkingSpotDO.setLocationY(item.getLocationY()); + + parkingSpotDO.setMapId(positionMapId); + parkingSpotDO.setMapItemId(item.getId()); + newList.add(parkingSpotDO); + item.setDataJson(JSONUtil.toJsonStr(parkingSpotDO)); + }); + + List oldList = parkingSpotService.getByMapId(positionMapId); + List> list = CollectionUtils.diffList(oldList, newList, + (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); + parkingSpotService.batchSaveOrEditOrDel(positionMapId, list); + } +} 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 abf4ae749..a77a13532 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 @@ -109,6 +109,10 @@ public class WareHouseLaneServiceImpl extends ServiceImpl editItemList = allList.get(2); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotService.java new file mode 100644 index 000000000..89710fa7b --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotService.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.system.service.parkingspot; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.ParkingSpotPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.ParkingSpotSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.parkingspot.ParkingSpotDO; +import com.baomidou.mybatisplus.extension.service.IService; + +import javax.validation.Valid; +import java.util.List; + +/** + * 停车点 Service 接口 + * + * @author 艾楷 + */ +public interface ParkingSpotService extends IService { + + /** + * 创建停车点 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createParkingSpot(@Valid ParkingSpotSaveReqVO createReqVO); + + /** + * 更新停车点 + * + * @param updateReqVO 更新信息 + */ + void updateParkingSpot(@Valid ParkingSpotSaveReqVO updateReqVO); + + /** + * 删除停车点 + * + * @param id 编号 + */ + void deleteParkingSpot(Long id); + + /** + * 获得停车点 + * + * @param id 编号 + * @return 停车点 + */ + ParkingSpotDO getParkingSpot(Long id); + + /** + * 获得停车点分页 + * + * @param pageReqVO 分页查询 + * @return 停车点分页 + */ + PageResult getParkingSpotPage(ParkingSpotPageReqVO pageReqVO); + + /** + * 根据地图id查询 + * + * @param positionMapId + * @return + */ + List getByMapId(Long positionMapId); + + /** + * 批量新增编辑删除 + * @param positionMapId + * @param list + */ + void batchSaveOrEditOrDel(Long positionMapId, List> list); +} 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 new file mode 100644 index 000000000..321ee954c --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/parkingspot/ParkingSpotServiceImpl.java @@ -0,0 +1,85 @@ +package cn.iocoder.yudao.module.system.service.parkingspot; + +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.parkingspot.vo.ParkingSpotPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.parkingspot.vo.ParkingSpotSaveReqVO; +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.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +import static cn.hutool.core.collection.CollUtil.isNotEmpty; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; + +/** + * 停车点 Service 实现类 + * + * @author 艾楷 + */ +@Service +@Validated +public class ParkingSpotServiceImpl extends ServiceImpl implements ParkingSpotService { + + @Resource + private ParkingSpotMapper parkingSpotMapper; + + @Override + public Long createParkingSpot(ParkingSpotSaveReqVO createReqVO) { + // 插入 + ParkingSpotDO parkingSpot = BeanUtils.toBean(createReqVO, ParkingSpotDO.class); + parkingSpotMapper.insert(parkingSpot); + // 返回 + return parkingSpot.getId(); + } + + @Override + public void updateParkingSpot(ParkingSpotSaveReqVO updateReqVO) { + // 更新 + ParkingSpotDO updateObj = BeanUtils.toBean(updateReqVO, ParkingSpotDO.class); + parkingSpotMapper.updateById(updateObj); + } + + @Override + public void deleteParkingSpot(Long id) { + // 删除 + parkingSpotMapper.deleteById(id); + } + + + @Override + public ParkingSpotDO getParkingSpot(Long id) { + return parkingSpotMapper.selectById(id); + } + + @Override + public PageResult getParkingSpotPage(ParkingSpotPageReqVO pageReqVO) { + return parkingSpotMapper.selectPage(pageReqVO); + } + + @Override + public List getByMapId(Long positionMapId) { + return parkingSpotMapper.selectList(new LambdaQueryWrapperX() + .eq(ParkingSpotDO::getMapId, positionMapId)); + } + + @Override + public void batchSaveOrEditOrDel(Long positionMapId, List> list) { + //批量添加、修改、删除 + if (isNotEmpty(list.get(0))) { + parkingSpotMapper.insertBatch(list.get(0)); + } + if (isNotEmpty(list.get(1))) { + parkingSpotMapper.updateBatch(list.get(1)); + } + if (isNotEmpty(list.get(2))) { + parkingSpotMapper.deleteByIds(convertList(list.get(2), ParkingSpotDO::getId)); + } + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/parkingspot/ParkingSpotMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/parkingspot/ParkingSpotMapper.xml new file mode 100644 index 000000000..01e8db785 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/parkingspot/ParkingSpotMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file