Compare commits
5 Commits
7ed63a7388
...
0adb314b20
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0adb314b20 | ||
![]() |
4d49a7b7e0 | ||
![]() |
1eae75bb96 | ||
![]() |
be7a4c3ca1 | ||
![]() |
32a0de2a29 |
@ -1,11 +1,8 @@
|
|||||||
package cn.iocoder.yudao.framework.common.enums;
|
package cn.iocoder.yudao.framework.common.enums;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjUtil;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用状态枚举
|
* 通用状态枚举
|
||||||
*
|
*
|
||||||
@ -16,7 +13,7 @@ import java.util.Arrays;
|
|||||||
public enum NodeTypeEnum {
|
public enum NodeTypeEnum {
|
||||||
ROUTE(1, "路径点位"),
|
ROUTE(1, "路径点位"),
|
||||||
WARE(2, "库位点"),
|
WARE(2, "库位点"),
|
||||||
charging(3, "充电桩"),
|
DEVICE(3, "设备点"),
|
||||||
PARKING(4, "停车点"),
|
PARKING(4, "停车点"),
|
||||||
CHANGE(5, "区域变更点"),
|
CHANGE(5, "区域变更点"),
|
||||||
WAIT(6, "等待点");
|
WAIT(6, "等待点");
|
||||||
|
@ -72,6 +72,13 @@ public class DeviceInformationController {
|
|||||||
return success(BeanUtils.toBean(information, DeviceInformationRespVO.class));
|
return success(BeanUtils.toBean(information, DeviceInformationRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
@Operation(summary = "获得设备信息列表")
|
||||||
|
public CommonResult<List<DeviceInformationRespVO>> getList(@Valid DeviceInformationPageReqVO pageReqVO) {
|
||||||
|
List<DeviceInformationDO> list = informationService.getList(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(list, DeviceInformationRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得设备信息分页")
|
@Operation(summary = "获得设备信息分页")
|
||||||
@PreAuthorize("@ss.hasPermission('device:information:query')")
|
@PreAuthorize("@ss.hasPermission('device:information:query')")
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.information.vo;
|
package cn.iocoder.yudao.module.system.controller.admin.information.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
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)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class DeviceInformationPageReqVO extends PageParam {
|
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")
|
@Schema(description = "设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)", example = "2")
|
||||||
private Integer deviceType;
|
private Integer deviceType;
|
||||||
@ -24,6 +44,9 @@ public class DeviceInformationPageReqVO extends PageParam {
|
|||||||
@Schema(description = "mac地址")
|
@Schema(description = "mac地址")
|
||||||
private String macAddress;
|
private String macAddress;
|
||||||
|
|
||||||
|
@Schema(description = "设备在地图上图标")
|
||||||
|
private String mapImageUrl;
|
||||||
|
|
||||||
@Schema(description = "上传图片附件", example = "https://www.iocoder.cn")
|
@Schema(description = "上传图片附件", example = "https://www.iocoder.cn")
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.information.vo;
|
|||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -16,6 +18,30 @@ public class DeviceInformationRespVO {
|
|||||||
@ExcelProperty("主键ID")
|
@ExcelProperty("主键ID")
|
||||||
private Long 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")
|
@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:按钮盒)")
|
@ExcelProperty("设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)")
|
||||||
private Integer deviceType;
|
private Integer deviceType;
|
||||||
@ -28,6 +54,10 @@ public class DeviceInformationRespVO {
|
|||||||
@ExcelProperty("mac地址")
|
@ExcelProperty("mac地址")
|
||||||
private String macAddress;
|
private String macAddress;
|
||||||
|
|
||||||
|
@Schema(description = "设备在地图上图标")
|
||||||
|
@ExcelProperty("设备在地图上图标")
|
||||||
|
private String mapImageUrl;
|
||||||
|
|
||||||
@Schema(description = "上传图片附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
|
@Schema(description = "上传图片附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
|
||||||
@ExcelProperty("上传图片附件")
|
@ExcelProperty("上传图片附件")
|
||||||
private String url;
|
private String url;
|
||||||
|
@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.system.controller.admin.information.vo;
|
|||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
@ -14,6 +16,24 @@ public class DeviceInformationSaveReqVO {
|
|||||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14335")
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14335")
|
||||||
private Long id;
|
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")
|
@Schema(description = "设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||||
@NotNull(message = "设备类型不能为空")
|
@NotNull(message = "设备类型不能为空")
|
||||||
private Integer deviceType;
|
private Integer deviceType;
|
||||||
@ -24,6 +44,9 @@ public class DeviceInformationSaveReqVO {
|
|||||||
@Schema(description = "mac地址")
|
@Schema(description = "mac地址")
|
||||||
private String macAddress;
|
private String macAddress;
|
||||||
|
|
||||||
|
@Schema(description = "设备在地图上图标")
|
||||||
|
private String mapImageUrl;
|
||||||
|
|
||||||
@Schema(description = "上传图片附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
|
@Schema(description = "上传图片附件", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
|
@ -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<Long> createParkingSpot(@Valid @RequestBody ParkingSpotSaveReqVO createReqVO) {
|
||||||
|
return success(parkingSpotService.createParkingSpot(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新停车点")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:parking-spot:update')")
|
||||||
|
public CommonResult<Boolean> 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<Boolean> 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<ParkingSpotRespVO> 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<PageResult<ParkingSpotRespVO>> getParkingSpotPage(@Valid ParkingSpotPageReqVO pageReqVO) {
|
||||||
|
PageResult<ParkingSpotDO> 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<ParkingSpotDO> list = parkingSpotService.getParkingSpotPage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "停车点.xls", "数据", ParkingSpotRespVO.class,
|
||||||
|
BeanUtils.toBean(list, ParkingSpotRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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 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:四向)")
|
||||||
|
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;
|
||||||
|
|
||||||
|
}
|
@ -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 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:四向)")
|
||||||
|
@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;
|
||||||
|
|
||||||
|
}
|
@ -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 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:四向)")
|
||||||
|
private Integer direction;
|
||||||
|
|
||||||
|
@Schema(description = "进入方向(0:尾入、1:头入)")
|
||||||
|
private Integer inDirection;
|
||||||
|
|
||||||
|
@Schema(description = "离开方向(0:尾出、1:头出)")
|
||||||
|
private Integer outDirection;
|
||||||
|
|
||||||
|
}
|
@ -1,19 +1,15 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.positionmap;
|
package cn.iocoder.yudao.module.system.controller.admin.positionmap;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
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.apilog.core.annotation.ApiAccessLog;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
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.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
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.dto.NodeBaseDTO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
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.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.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.handler.mapnode.NodeProcessingContext;
|
import cn.iocoder.yudao.module.system.handler.mapnode.NodeProcessingContext;
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
||||||
@ -46,6 +42,7 @@ public class PositionMapItemController {
|
|||||||
private PositionMapItemService positionMapItemService;
|
private PositionMapItemService positionMapItemService;
|
||||||
@Resource
|
@Resource
|
||||||
private NodeProcessingContext nodeProcessingContext;
|
private NodeProcessingContext nodeProcessingContext;
|
||||||
|
|
||||||
// -- 前端给所有的节点信息 -
|
// -- 前端给所有的节点信息 -
|
||||||
@PostMapping("/batchSaveOrEditOrDel")
|
@PostMapping("/batchSaveOrEditOrDel")
|
||||||
@Operation(summary = "批量新增编辑删除节点")
|
@Operation(summary = "批量新增编辑删除节点")
|
||||||
@ -72,12 +69,17 @@ public class PositionMapItemController {
|
|||||||
return success(BeanUtils.toBean(positionMapItem, PositionMapItemRespVO.class));
|
return success(BeanUtils.toBean(positionMapItem, PositionMapItemRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/list")
|
||||||
@Operation(summary = "获得仓库点位地图子表分页")
|
@Operation(summary = "获取仓库点位地图节点列表")
|
||||||
@PreAuthorize("@ss.hasPermission('system:position-map-item:query')")
|
@PreAuthorize("@ss.hasPermission('system:position-map-item:query')")
|
||||||
public CommonResult<PageResult<PositionMapItemRespVO>> getPositionMapItemPage(@Valid PositionMapItemPageReqVO pageReqVO) {
|
public CommonResult<List<PositionMapItemRespVO>> getPositionMapItemPage(@RequestParam("positionMapId") Long positionMapId,
|
||||||
PageResult<PositionMapItemDO> pageResult = positionMapItemService.getPositionMapItemPage(pageReqVO);
|
@RequestParam(value = "areaId", required = false) Long areaId,
|
||||||
return success(BeanUtils.toBean(pageResult, PositionMapItemRespVO.class));
|
@RequestParam(value = "laneId", required = false) Long laneId) {
|
||||||
|
List<PositionMapItemDO> list = positionMapItemService.list(new LambdaQueryWrapperX<PositionMapItemDO>()
|
||||||
|
.eq(PositionMapItemDO::getPositionMapId, positionMapId)
|
||||||
|
.eqIfPresent(PositionMapItemDO::getAreaId, areaId)
|
||||||
|
.eqIfPresent(PositionMapItemDO::getLaneId, laneId));
|
||||||
|
return success(BeanUtils.toBean(list, PositionMapItemRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo;
|
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 io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.Data;
|
||||||
import java.util.*;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import com.alibaba.excel.annotation.*;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 仓库点位地图子表 Response VO")
|
@Schema(description = "管理后台 - 仓库点位地图子表 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@ -14,18 +16,22 @@ public class PositionMapItemRespVO {
|
|||||||
|
|
||||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31007")
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31007")
|
||||||
@ExcelProperty("主键ID")
|
@ExcelProperty("主键ID")
|
||||||
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@Schema(description = "仓库点位地图表id", example = "30963")
|
@Schema(description = "仓库点位地图表id", example = "30963")
|
||||||
@ExcelProperty("仓库点位地图表id")
|
@ExcelProperty("仓库点位地图表id")
|
||||||
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long positionMapId;
|
private Long positionMapId;
|
||||||
|
|
||||||
@Schema(description = "库区id(自定义)", example = "30963")
|
@Schema(description = "库区id(自定义)", example = "30963")
|
||||||
@ExcelProperty("库区id(自定义)")
|
@ExcelProperty("库区id(自定义)")
|
||||||
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long areaId;
|
private Long areaId;
|
||||||
|
|
||||||
@Schema(description = "巷道id(自定义)", example = "30963")
|
@Schema(description = "巷道id(自定义)", example = "30963")
|
||||||
@ExcelProperty("巷道id(自定义)")
|
@ExcelProperty("巷道id(自定义)")
|
||||||
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long laneId;
|
private Long laneId;
|
||||||
|
|
||||||
@Schema(description = "坐标x轴")
|
@Schema(description = "坐标x轴")
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.dataobject.information;
|
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 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
|
* 设备信息 DO
|
||||||
@ -28,6 +30,30 @@ public class DeviceInformationDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableId(type = IdType.ASSIGN_ID)
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private Long 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:按钮盒)
|
* 设备类型(1:充电桩、2:输送线、 3:码垛机、4:拆垛机、5:自动门、6:提升机、7:信号灯、8:按钮盒)
|
||||||
*/
|
*/
|
||||||
@ -40,6 +66,10 @@ public class DeviceInformationDO extends BaseDO {
|
|||||||
* mac地址
|
* mac地址
|
||||||
*/
|
*/
|
||||||
private String macAddress;
|
private String macAddress;
|
||||||
|
/**
|
||||||
|
* 设备在地图上图标
|
||||||
|
*/
|
||||||
|
private String mapImageUrl;
|
||||||
/**
|
/**
|
||||||
* 上传图片附件
|
* 上传图片附件
|
||||||
*/
|
*/
|
||||||
|
@ -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 positionMapId;
|
||||||
|
/**
|
||||||
|
* 地图子表节点id
|
||||||
|
*/
|
||||||
|
private Long positionMapItemId;
|
||||||
|
/**
|
||||||
|
* 库位坐标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;
|
||||||
|
|
||||||
|
}
|
@ -1,12 +1,8 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.dataobject.positionmap;
|
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 cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 仓库点位地图子表 DO
|
* 仓库点位地图子表 DO
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.mysql.parkingspot;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 停车点 Mapper
|
||||||
|
*
|
||||||
|
* @author 艾楷
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ParkingSpotMapper extends BaseMapperX<ParkingSpotDO> {
|
||||||
|
|
||||||
|
default PageResult<ParkingSpotDO> selectPage(ParkingSpotPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<ParkingSpotDO>()
|
||||||
|
.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())
|
||||||
|
.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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -3,16 +3,12 @@ package cn.iocoder.yudao.module.system.handler.mapnode;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
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.enums.NodeTypeEnum;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
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.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.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.handler.mapnode.strategy.HouseLocationStrategyImpl;
|
import cn.iocoder.yudao.module.system.handler.mapnode.strategy.*;
|
||||||
import cn.iocoder.yudao.module.system.handler.mapnode.strategy.NodeProcessingStrategy;
|
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -21,20 +17,21 @@ import javax.annotation.PostConstruct;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class NodeProcessingContext {
|
public class NodeProcessingContext {
|
||||||
|
|
||||||
private final Map<Integer, NodeProcessingStrategy> strategyMap = new HashMap<>();
|
private final Map<Integer, NodeProcessingStrategy> strategyMap = new HashMap<>();
|
||||||
|
@Autowired
|
||||||
|
private PositionMapItemService positionMapItemService;
|
||||||
|
@Autowired
|
||||||
|
private MapNodeStrategyImpl mapNodeStrategyImpl;
|
||||||
@Autowired
|
@Autowired
|
||||||
private HouseLocationStrategyImpl houseLocationStrategyImpl;
|
private HouseLocationStrategyImpl houseLocationStrategyImpl;
|
||||||
@Autowired
|
@Autowired
|
||||||
private PositionMapItemService positionMapItemService;
|
private ParkingSpotStrategyImpl parkingSpotStrategyImpl;
|
||||||
|
@Autowired
|
||||||
|
private DeviceStrategyImpl deviceStrategyImpl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目启动时 初始化策略
|
* 项目启动时 初始化策略
|
||||||
@ -42,42 +39,33 @@ public class NodeProcessingContext {
|
|||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
// 节点
|
// 节点
|
||||||
// strategyMap.put(1, positionMapItemStrategyImpl);
|
strategyMap.put(NodeTypeEnum.ROUTE.getType(), mapNodeStrategyImpl);
|
||||||
// 库位
|
// 库位
|
||||||
strategyMap.put(NodeTypeEnum.WARE.getType(), houseLocationStrategyImpl);
|
strategyMap.put(NodeTypeEnum.WARE.getType(), houseLocationStrategyImpl);
|
||||||
// todo 可以继续添加更多的策略
|
// 设备点
|
||||||
|
strategyMap.put(NodeTypeEnum.DEVICE.getType(), deviceStrategyImpl);
|
||||||
|
// 停车点
|
||||||
|
strategyMap.put(NodeTypeEnum.PARKING.getType(), parkingSpotStrategyImpl);
|
||||||
|
// 路径点
|
||||||
|
strategyMap.put(NodeTypeEnum.CHANGE.getType(), mapNodeStrategyImpl);
|
||||||
|
// 等待点
|
||||||
|
strategyMap.put(NodeTypeEnum.WAIT.getType(), mapNodeStrategyImpl);
|
||||||
|
// todo 可以继续添加更多的策略 - 新增实现即可
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void processNodesByStrategy(Long positionMapId, List<PositionMapItemDO> oldItemList, int key, List<NodeBaseDTO> nodeBaseDTOS) {
|
public void processNodesByStrategy(Long positionMapId, List<PositionMapItemDO> oldItemList, int key, List<NodeBaseDTO> 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<WareHouseLocationDO> 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<PositionMapItemDO> newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class);
|
|
||||||
List<List<PositionMapItemDO>> list = CollectionUtils.diffList(oldItemList, newList,
|
|
||||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
|
||||||
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
|
||||||
// -- 获取对应的策略 - 如果没有对应的直接 return
|
// -- 获取对应的策略 - 如果没有对应的直接 return
|
||||||
NodeProcessingStrategy strategy = strategyMap.get(key);
|
NodeProcessingStrategy strategy = strategyMap.get(key);
|
||||||
if (strategy == null) {
|
if (strategy == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 策略模式 策略实现
|
||||||
strategy.processNodes(positionMapId, nodeBaseDTOS);
|
strategy.processNodes(positionMapId, nodeBaseDTOS);
|
||||||
|
|
||||||
|
List<PositionMapItemDO> newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class);
|
||||||
|
List<List<PositionMapItemDO>> list = CollectionUtils.diffList(oldItemList, newList,
|
||||||
|
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||||
|
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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<NodeBaseDTO> nodeBaseDTOS) {
|
||||||
|
// -- 策略3 处理设备点
|
||||||
|
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
||||||
|
// --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位
|
||||||
|
List<DeviceInformationDO> 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<DeviceInformationDO> oldList = deviceInformationService.getByMapId(positionMapId);
|
||||||
|
List<List<DeviceInformationDO>> list = CollectionUtils.diffList(oldList, newList,
|
||||||
|
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||||
|
deviceInformationService.batchSaveOrEditOrDel(positionMapId, list);
|
||||||
|
}
|
||||||
|
}
|
@ -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.controller.admin.positionmap.dto.NodeBaseDTO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||||
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
|
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
||||||
@Resource
|
@Resource
|
||||||
@ -22,16 +23,26 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
|||||||
public void processNodes(Long positionMapId, List<NodeBaseDTO> nodeBaseDTOS) {
|
public void processNodes(Long positionMapId, List<NodeBaseDTO> nodeBaseDTOS) {
|
||||||
// -- 策略1 处理库位点
|
// -- 策略1 处理库位点
|
||||||
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
||||||
// --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位
|
|
||||||
List<WareHouseLocationDO> newList = new ArrayList<>();
|
List<WareHouseLocationDO> newList = new ArrayList<>();
|
||||||
for (NodeBaseDTO nodeBaseDTO : nodeBaseDTOS) {
|
nodeBaseDTOS.forEach(item -> {
|
||||||
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(nodeBaseDTO.getDataJson(), WareHouseLocationDO.class);
|
if (item.getId() == null) {
|
||||||
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
|
item.setId(getId());
|
||||||
|
}
|
||||||
|
item.setPositionMapId(positionMapId);
|
||||||
|
// -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去
|
||||||
|
List<WareHouseLocationDO> 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.setMapId(positionMapId);
|
||||||
wareHouseLocationDO.setMapItemId(nodeBaseDTO.getId());
|
wareHouseLocationDO.setMapItemId(item.getId());
|
||||||
newList.add(wareHouseLocationDO);
|
newList.add(wareHouseLocationDO);
|
||||||
}
|
});
|
||||||
}
|
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
|
||||||
|
});
|
||||||
|
|
||||||
List<WareHouseLocationDO> oldList = houseLocationService.getByMapId(positionMapId);
|
List<WareHouseLocationDO> oldList = houseLocationService.getByMapId(positionMapId);
|
||||||
List<List<WareHouseLocationDO>> list = CollectionUtils.diffList(oldList, newList,
|
List<List<WareHouseLocationDO>> list = CollectionUtils.diffList(oldList, newList,
|
||||||
|
@ -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<NodeBaseDTO> nodeBaseDTOS) {
|
||||||
|
// -- 策略1 处理节点
|
||||||
|
// -- 此处不做任何业务处理 - 具体数据不另外存表
|
||||||
|
}
|
||||||
|
}
|
@ -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.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<NodeBaseDTO> nodeBaseDTOS) {
|
||||||
|
// -- 策略4 处理停车点
|
||||||
|
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
||||||
|
// --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位
|
||||||
|
List<ParkingSpotDO> newList = new ArrayList<>();
|
||||||
|
nodeBaseDTOS.forEach(item -> {
|
||||||
|
if (item.getId() == null) {
|
||||||
|
item.setId(getId());
|
||||||
|
}
|
||||||
|
item.setPositionMapId(positionMapId);
|
||||||
|
ParkingSpotDO parkingSpotDO = JSONUtil.toBean(item.getDataJson(), ParkingSpotDO.class);
|
||||||
|
if (parkingSpotDO.getId() == null) {
|
||||||
|
parkingSpotDO.setId(getId());
|
||||||
|
}
|
||||||
|
parkingSpotDO.setLocationX(item.getLocationX());
|
||||||
|
parkingSpotDO.setLocationY(item.getLocationY());
|
||||||
|
|
||||||
|
parkingSpotDO.setPositionMapId(positionMapId);
|
||||||
|
parkingSpotDO.setPositionMapItemId(item.getId());
|
||||||
|
newList.add(parkingSpotDO);
|
||||||
|
item.setDataJson(JSONUtil.toJsonStr(parkingSpotDO));
|
||||||
|
});
|
||||||
|
|
||||||
|
List<ParkingSpotDO> oldList = parkingSpotService.getByMapId(positionMapId);
|
||||||
|
List<List<ParkingSpotDO>> list = CollectionUtils.diffList(oldList, newList,
|
||||||
|
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||||
|
parkingSpotService.batchSaveOrEditOrDel(positionMapId, list);
|
||||||
|
}
|
||||||
|
}
|
@ -109,6 +109,10 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
|
|||||||
// -- 新增的 就是更改的 - 需要更新的
|
// -- 新增的 就是更改的 - 需要更新的
|
||||||
editList.addAll(editItemList);
|
editList.addAll(editItemList);
|
||||||
}
|
}
|
||||||
|
if (CollUtil.isNotEmpty(allList.get(1))) {
|
||||||
|
// -- 需要更新的
|
||||||
|
editList.addAll(allList.get(1));
|
||||||
|
}
|
||||||
if (CollUtil.isNotEmpty(allList.get(2))) {
|
if (CollUtil.isNotEmpty(allList.get(2))) {
|
||||||
//需要删除的就是取消掉的
|
//需要删除的就是取消掉的
|
||||||
List<PositionMapItemDO> editItemList = allList.get(2);
|
List<PositionMapItemDO> editItemList = allList.get(2);
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.information;
|
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.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.DeviceInformationPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
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.dataobject.information.DeviceInformationDO;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备信息 Service 接口
|
* 设备信息 Service 接口
|
||||||
*
|
*
|
||||||
@ -53,4 +53,27 @@ public interface DeviceInformationService {
|
|||||||
*/
|
*/
|
||||||
PageResult<DeviceInformationDO> getInformationPage(DeviceInformationPageReqVO pageReqVO);
|
PageResult<DeviceInformationDO> getInformationPage(DeviceInformationPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增删除修改
|
||||||
|
*
|
||||||
|
* @param positionMapId
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
void batchSaveOrEditOrDel(Long positionMapId, List<List<DeviceInformationDO>> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过地图id获取设备列表
|
||||||
|
*
|
||||||
|
* @param positionMapId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeviceInformationDO> getByMapId(Long positionMapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取设备列表
|
||||||
|
*
|
||||||
|
* @param pageReqVO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeviceInformationDO> getList(@Valid DeviceInformationPageReqVO pageReqVO);
|
||||||
}
|
}
|
@ -1,25 +1,29 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.information;
|
package cn.iocoder.yudao.module.system.service.information;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
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.grpc.api.GrpcServiceApi;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO;
|
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.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
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.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 lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import javax.annotation.Resource;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
||||||
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
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.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 实现类
|
* 设备信息 Service 实现类
|
||||||
@ -87,4 +91,31 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
return informationMapper.selectPage(pageReqVO);
|
return informationMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void batchSaveOrEditOrDel(Long positionMapId, List<List<DeviceInformationDO>> 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<DeviceInformationDO> getByMapId(Long positionMapId) {
|
||||||
|
return informationMapper.selectList(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||||
|
.eq(DeviceInformationDO::getPositionMapId, positionMapId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceInformationDO> getList(DeviceInformationPageReqVO pageReqVO) {
|
||||||
|
return informationMapper.selectList(new LambdaQueryWrapper<DeviceInformationDO>()
|
||||||
|
.eq(pageReqVO.getDeviceType() != null, DeviceInformationDO::getDeviceType, pageReqVO.getDeviceType()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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<ParkingSpotDO> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建停车点
|
||||||
|
*
|
||||||
|
* @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<ParkingSpotDO> getParkingSpotPage(ParkingSpotPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据地图id查询
|
||||||
|
*
|
||||||
|
* @param positionMapId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ParkingSpotDO> getByMapId(Long positionMapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增编辑删除
|
||||||
|
* @param positionMapId
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
void batchSaveOrEditOrDel(Long positionMapId, List<List<ParkingSpotDO>> list);
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
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.transaction.annotation.Transactional;
|
||||||
|
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<ParkingSpotMapper, ParkingSpotDO> 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<ParkingSpotDO> getParkingSpotPage(ParkingSpotPageReqVO pageReqVO) {
|
||||||
|
return parkingSpotMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ParkingSpotDO> getByMapId(Long positionMapId) {
|
||||||
|
return parkingSpotMapper.selectList(new LambdaQueryWrapperX<ParkingSpotDO>()
|
||||||
|
.eq(ParkingSpotDO::getPositionMapId, positionMapId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void batchSaveOrEditOrDel(Long positionMapId, List<List<ParkingSpotDO>> 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.parkingspot.ParkingSpotMapper">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
|
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||||
|
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||||
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
|
-->
|
||||||
|
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue
Block a user