From 62cef22f1f2d6713999480998ee55cd2656794d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Fri, 11 Apr 2025 18:08:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/constant/CacheConstants.java | 4 ++ .../java/com/ruoyi/bst/area/domain/Area.java | 4 ++ .../com/ruoyi/bst/area/mapper/AreaMapper.xml | 2 +- .../bst/areaSub/service/AreaSubService.java | 7 +++ .../service/impl/AreaSubServiceImpl.java | 18 ++++++ .../com/ruoyi/bst/device/domain/DeviceVO.java | 6 ++ .../ruoyi/bst/device/mapper/DeviceMapper.xml | 5 +- .../bst/device/service/DeviceService.java | 5 ++ .../service/impl/DeviceIotServiceImpl.java | 9 ++- .../service/impl/DeviceServiceImpl.java | 15 +++++ .../domain/HardwareVersion.java | 19 +++--- .../domain/vo/HardwareVersionNameVO.java | 15 +++++ .../mapper/HardwareVersionMapper.java | 14 ++++- .../mapper/HardwareVersionMapper.xml | 15 +++++ .../service/HardwareVersionService.java | 18 +++--- .../impl/HardwareVersionServiceImpl.java | 63 +++++++++++++------ .../com/ruoyi/bst/model/domain/Model.java | 1 + .../bst/order/domain/bo/OrderChangeBO.java | 7 ++- .../ruoyi/bst/order/domain/bo/OrderEndBO.java | 5 +- .../order/domain/dto/OrderCloseDeviceDTO.java | 28 +++++++++ .../bst/order/domain/vo/OrderInParkingVO.java | 15 ++++- .../ruoyi/bst/order/service/OrderService.java | 4 +- .../service/impl/OrderConverterImpl.java | 20 ++++-- .../order/service/impl/OrderServiceImpl.java | 31 +++++++-- .../service/impl/OrderValidatorImpl.java | 5 +- .../com/ruoyi/bst/order/utils/OrderUtil.java | 29 ++++++--- .../withdraw/service/WithdrawDashboard.java | 8 +++ .../service/impl/WithdrawDashboardImpl.java | 3 +- .../com/ruoyi/iot/service/IotService.java | 11 +++- .../iot/service/impl/IotServiceImpl.java | 10 ++- .../ruoyi/web/app/AppDeviceController.java | 19 +----- .../ruoyi/web/app/AppDeviceIotController.java | 37 +++++++++++ .../com/ruoyi/web/app/AppOrderController.java | 8 ++- .../web/bst/HardwareVersionController.java | 30 +++++++-- 34 files changed, 391 insertions(+), 99 deletions(-) create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/domain/vo/HardwareVersionNameVO.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderCloseDeviceDTO.java create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceIotController.java diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 79c0ab0..ebccc06 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -113,4 +113,8 @@ public class CacheConstants * 设备运营区处理状态 */ public static final String DEVICE_AREA_HANDLE_KEY = "device_area_handle_key:"; + /** + * 所有硬件版本名称 + */ + public static final String ALL_HARDWARE_VERSION_NAME = "all_hardware_version_name"; } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/Area.java b/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/Area.java index cc5b6dc..9795525 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/Area.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/Area.java @@ -115,10 +115,12 @@ public class Area extends BaseEntity @Excel(name = "停车点外调度费") @ApiModelProperty("停车点外调度费") + @Min(value = 0, message = "停车点外调度费不能小于0") private BigDecimal dispatchFee; @Excel(name = "运营区外调度费") @ApiModelProperty("运营区外调度费") + @Min(value = 0, message = "运营区外调度费不能小于0") private BigDecimal vehicleManagementFee; @Excel(name = "运营开始时间") @@ -163,9 +165,11 @@ public class Area extends BaseEntity @Excel(name = "靠近边界播报距离") @ApiModelProperty("靠近边界播报距离(米)") + @Min(value = 0, message = "靠近边界播报距离不能小于0") private BigDecimal boundaryDistance; @Excel(name = "运营区外断电距离") @ApiModelProperty("运营区外断电距离(米)") + @Min(value = 0, message = "运营区外断电距离不能小于0") private BigDecimal outageDistance; } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml index e53664f..93f9bf2 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml @@ -248,7 +248,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + select + bhv.id, + bhv.parent_id, + bhv.version, + bhv.instructions + from bst_hardware_version bhv + + + + + diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/HardwareVersionService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/HardwareVersionService.java index 3ad3918..6ce0d66 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/HardwareVersionService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/HardwareVersionService.java @@ -1,9 +1,11 @@ package com.ruoyi.bst.hardwareVersion.service; import java.util.List; + import com.ruoyi.bst.hardwareVersion.domain.HardwareVersion; -import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO; import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionQuery; +import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO; +import com.ruoyi.bst.hardwareVersion.domain.vo.HardwareVersionNameVO; /** * 硬件版本Service接口 @@ -53,13 +55,13 @@ public interface HardwareVersionService */ public int deleteHardwareVersionByIds(Long[] ids); - /** - * 删除硬件版本信息 - * - * @param id 硬件版本主键 - * @return 结果 - */ - public int deleteHardwareVersionById(Long id); List computeNumber(HardwareVersionQuery query); + + /** + * 查询所有硬件版本名称 + * @return + */ + public List selectAllNames(); + } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/impl/HardwareVersionServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/impl/HardwareVersionServiceImpl.java index 19686cb..6cc68f8 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/impl/HardwareVersionServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/hardwareVersion/service/impl/HardwareVersionServiceImpl.java @@ -2,16 +2,19 @@ package com.ruoyi.bst.hardwareVersion.service.impl; import java.util.List; -import com.ruoyi.bst.hardwareVersion.domain.enums.SelectCondition; -import com.ruoyi.common.utils.DateUtils; -import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.ruoyi.bst.hardwareVersion.mapper.HardwareVersionMapper; + import com.ruoyi.bst.hardwareVersion.domain.HardwareVersion; -import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO; import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionQuery; +import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO; +import com.ruoyi.bst.hardwareVersion.domain.vo.HardwareVersionNameVO; +import com.ruoyi.bst.hardwareVersion.mapper.HardwareVersionMapper; import com.ruoyi.bst.hardwareVersion.service.HardwareVersionService; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.collection.CollectionUtils; /** * 硬件版本Service业务层处理 @@ -25,6 +28,9 @@ public class HardwareVersionServiceImpl implements HardwareVersionService @Autowired private HardwareVersionMapper hardwareVersionMapper; + @Autowired + private RedisCache redisCache; + /** * 查询硬件版本 * @@ -59,7 +65,11 @@ public class HardwareVersionServiceImpl implements HardwareVersionService public int insertHardwareVersion(HardwareVersion hardwareVersion) { hardwareVersion.setCreateTime(DateUtils.getNowDate()); - return hardwareVersionMapper.insertHardwareVersion(hardwareVersion); + int rows = hardwareVersionMapper.insertHardwareVersion(hardwareVersion); + if (rows > 0) { + this.clearCache(); + } + return rows; } /** @@ -71,7 +81,11 @@ public class HardwareVersionServiceImpl implements HardwareVersionService @Override public int updateHardwareVersion(HardwareVersion hardwareVersion) { - return hardwareVersionMapper.updateHardwareVersion(hardwareVersion); + int rows = hardwareVersionMapper.updateHardwareVersion(hardwareVersion); + if (rows > 0) { + this.clearCache(); + } + return rows; } /** @@ -83,20 +97,13 @@ public class HardwareVersionServiceImpl implements HardwareVersionService @Override public int deleteHardwareVersionByIds(Long[] ids) { - return hardwareVersionMapper.deleteHardwareVersionByIds(ids); + int rows = hardwareVersionMapper.deleteHardwareVersionByIds(ids); + if (rows > 0) { + this.clearCache(); + } + return rows; } - /** - * 删除硬件版本信息 - * - * @param id 硬件版本主键 - * @return 结果 - */ - @Override - public int deleteHardwareVersionById(Long id) - { - return hardwareVersionMapper.deleteHardwareVersionById(id); - } @Override public List computeNumber(HardwareVersionQuery query) { @@ -138,4 +145,22 @@ public class HardwareVersionServiceImpl implements HardwareVersionService } return list; } + + @Override + public List selectAllNames() { + String key = CacheConstants.ALL_HARDWARE_VERSION_NAME; + List list = redisCache.getCacheObject(key); + if (CollectionUtils.isEmptyElement(list)){ + list = hardwareVersionMapper.selectNameList(new HardwareVersionQuery()); + if (CollectionUtils.isNotEmptyElement(list)){ + redisCache.setCacheObject(key, list); + } + } + return list; + } + + private void clearCache() { + String key = CacheConstants.ALL_HARDWARE_VERSION_NAME; + redisCache.deleteObject(key); + } } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/model/domain/Model.java b/ruoyi-service/src/main/java/com/ruoyi/bst/model/domain/Model.java index 8e30bb9..8b4f335 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/model/domain/Model.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/model/domain/Model.java @@ -68,6 +68,7 @@ public class Model extends BaseEntity @Excel(name = "骑行低电量提醒") @ApiModelProperty("骑行低电量提醒") + @Min(value = 0, message = "骑行低电量提醒不能小于0") private Integer lowBatteryReminder; @ApiModelProperty("套餐ID列表") diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderChangeBO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderChangeBO.java index f7c19c2..fc44a24 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderChangeBO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderChangeBO.java @@ -33,8 +33,11 @@ public class OrderChangeBO { // 运营区 private AreaVO area; - // 运营区子区域列表 - private List areaSubs; + // 运营区停车区列表 + private List parkingList; + + // 运营区禁停区列表 + private List noParkingAreaSubList; // 旧设备是否在停车点内 private OrderInParkingVO inParkingVO; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderEndBO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderEndBO.java index 0f4f4b2..8cbb9d0 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderEndBO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/bo/OrderEndBO.java @@ -28,7 +28,10 @@ public class OrderEndBO { private AreaVO area; // 停车点数据 - private List parkingAreaSubList; + private List parkingList; + + // 禁停点数据 + private List noParkingList; // 停车点信息 private OrderInParkingVO inParkingVO; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderCloseDeviceDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderCloseDeviceDTO.java new file mode 100644 index 0000000..d1ae711 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderCloseDeviceDTO.java @@ -0,0 +1,28 @@ +package com.ruoyi.bst.order.domain.dto; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * 订单设备临时锁车DTO + */ +@Data +public class OrderCloseDeviceDTO { + + // 订单ID + @NotNull(message = "订单ID不允许为空") + private Long orderId; + + // 手机定位经度 + private BigDecimal lon; + + // 手机定位纬度 + private BigDecimal lat; + + // iot + private Boolean requiredIot; + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/vo/OrderInParkingVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/vo/OrderInParkingVO.java index 7d4c000..e926fce 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/vo/OrderInParkingVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/vo/OrderInParkingVO.java @@ -10,13 +10,13 @@ import lombok.Data; @Data public class OrderInParkingVO { - @ApiModelProperty("手机定位所在区域") + @ApiModelProperty("手机定位所在停车区") private AreaSubVO mobileAreaSub; - @ApiModelProperty("设备定位所在区域") + @ApiModelProperty("设备定位所在停车区") private AreaSubVO deviceAreaSub; - @ApiModelProperty("实际所在区域") + @ApiModelProperty("实际所在停车区") private AreaSubVO actualAreaSub; @ApiModelProperty("实际经度") @@ -37,4 +37,13 @@ public class OrderInParkingVO { @ApiModelProperty("是否在运营区") private Boolean inArea; + @ApiModelProperty("手机所在禁停区") + private AreaSubVO mobileNoParking; + + @ApiModelProperty("设备所在禁停区") + private AreaSubVO deviceNoParking; + + @ApiModelProperty("是否在禁停区") + private Boolean inNoParking; + } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java index 24faabf..e85ea13 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java @@ -6,9 +6,9 @@ import com.ruoyi.bst.order.domain.Order; import com.ruoyi.bst.order.domain.OrderQuery; import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.dto.OrderChangeDeviceDTO; +import com.ruoyi.bst.order.domain.dto.OrderCloseDeviceDTO; import com.ruoyi.bst.order.domain.dto.OrderCreateDTO; import com.ruoyi.bst.order.domain.dto.OrderEndDTO; -import com.ruoyi.bst.order.domain.dto.OrderPayDTO; import com.ruoyi.bst.order.domain.dto.OrderRefundDTO; import com.ruoyi.bst.order.domain.dto.OrderVerifyDTO; import com.ruoyi.bst.order.domain.vo.OrderFeeVO; @@ -153,7 +153,7 @@ public interface OrderService * @param requiredIot 是否必须成功 * @return 结果 */ - public int closeDevice(OrderVO order, boolean requiredIot); + public int closeDevice(OrderCloseDeviceDTO dto); /** * 更新订单设备ID diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderConverterImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderConverterImpl.java index dfadfb6..3d5c8af 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderConverterImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderConverterImpl.java @@ -356,12 +356,16 @@ public class OrderConverterImpl implements OrderConverter{ if (area != null) { // 查询运营区的可还车的子区域列表 - List areaSubList = areaSubService.selectParkingAreaByAreaId(area.getId()); - bo.setParkingAreaSubList(areaSubList); + List parkingList = areaSubService.selectParkingAreaByAreaId(area.getId()); + bo.setParkingList(parkingList); + + // 查询运营区的禁停区列表 + List noParkingList = areaSubService.selectNoParkingAreaByAreaId(area.getId()); + bo.setNoParkingList(noParkingList); } // 停车点信息 - OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(area, bo.getParkingAreaSubList(), bo.getDevice(), dto.getLon(), dto.getLat()); + OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(area, bo.getParkingList(), bo.getNoParkingList(), bo.getDevice(), dto.getLon(), dto.getLat()); bo.setInParkingVO(inParkingVO); // 查询订单车辆轨迹列表 @@ -417,8 +421,12 @@ public class OrderConverterImpl implements OrderConverter{ bo.setArea(area); // 查询运营区子区域列表 - List areaSubs = areaSubService.selectParkingAreaByAreaId(area.getId()); - bo.setAreaSubs(areaSubs); + List parkingList = areaSubService.selectParkingAreaByAreaId(area.getId()); + bo.setParkingList(parkingList); + + // 查询运营区禁停区列表 + List noParkingList = areaSubService.selectNoParkingAreaByAreaId(area.getId()); + bo.setNoParkingAreaSubList(noParkingList); // 查询旧设备 DeviceVO oldDevice = deviceService.selectDeviceById(oldOrderDevice.getDeviceId()); @@ -427,7 +435,7 @@ public class OrderConverterImpl implements OrderConverter{ bo.setOldDevice(oldDevice); // 获取旧设备是否在停车点内 - OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(area, areaSubs, oldDevice, dto.getLon(), dto.getLat()); + OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(area, parkingList, noParkingList, oldDevice, dto.getLon(), dto.getLat()); bo.setInParkingVO(inParkingVO); // 校验旧设备是否在停车点内 orderValidator.checkInParking(area, inParkingVO); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java index e2cb5db..afc77d2 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java @@ -36,6 +36,7 @@ import com.ruoyi.bst.order.domain.bo.OrderChangeBO; import com.ruoyi.bst.order.domain.bo.OrderCreateBO; import com.ruoyi.bst.order.domain.bo.OrderEndBO; import com.ruoyi.bst.order.domain.dto.OrderChangeDeviceDTO; +import com.ruoyi.bst.order.domain.dto.OrderCloseDeviceDTO; import com.ruoyi.bst.order.domain.dto.OrderCreateDTO; import com.ruoyi.bst.order.domain.dto.OrderEndDTO; import com.ruoyi.bst.order.domain.dto.OrderRefundDTO; @@ -548,10 +549,13 @@ public class OrderServiceImpl implements OrderService } // 查询还车点 - List areaSubs = areaSubService.selectParkingAreaByAreaId(area.getId()); + List parkingList = areaSubService.selectParkingAreaByAreaId(area.getId()); + + // 查询禁停点 + List noParkingList = areaSubService.selectNoParkingAreaByAreaId(area.getId()); // 获取是否在停车点内 - OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(area, areaSubs, device, dto.getLon(), dto.getLat()); + OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(area, parkingList, noParkingList, device, dto.getLon(), dto.getLat()); // 计算金额 return OrderUtil.calcOrderFee(order, area, inParkingVO, LocalDateTime.now()); @@ -578,15 +582,30 @@ public class OrderServiceImpl implements OrderService } @Override - public int closeDevice(OrderVO order, boolean requiredIot) { - ServiceUtil.assertion(order == null, "参数错误,order不允许为空"); - ServiceUtil.assertion(!OrderStatus.inUse().contains(order.getStatus()), "ID为%s的订单当前状态并非使用中,无法操作设备", order.getId()); + public int closeDevice(OrderCloseDeviceDTO dto) { + ServiceUtil.assertion(dto == null, "参数错误,dto不允许为空"); + + OrderVO order = this.selectOrderById(dto.getOrderId()); + ServiceUtil.assertion(order == null, "ID为%s的订单不存在", dto.getOrderId()); OrderDeviceVO orderDevice = orderDeviceService.selectOrderDeviceById(order.getOrderDeviceId()); ServiceUtil.assertion(orderDevice == null, "ID为%s的订单设备不存在", order.getId()); ServiceUtil.assertion(!OrderDeviceStatus.inUse().contains(orderDevice.getStatus()), "ID为%s的订单设备当前状态并非使用中,无法操作设备", order.getId()); - return deviceIotService.lock(orderDevice.getDeviceId(), false, "订单锁车:" + order.getNo(), requiredIot); + // 查询设备 + DeviceVO device = deviceService.selectDeviceById(orderDevice.getDeviceId()); + ServiceUtil.assertion(device == null, "ID为%s的设备不存在", orderDevice.getDeviceId()); + deviceIotService.refresh(device, null); + + // 判断是否在禁停区内 + List noParkingList = areaSubService.selectNoParkingAreaByAreaId(order.getAreaId()); + if (CollectionUtils.isNotEmptyElement(noParkingList)) { + OrderInParkingVO inParkingVO = OrderUtil.getInParkingVO(null, null, noParkingList, device, dto.getLon(), dto.getLat()); + ServiceUtil.assertion(inParkingVO == null, "获取设备位置失败"); + ServiceUtil.assertion(inParkingVO.getInNoParking() != null && inParkingVO.getInNoParking(), "禁止在禁停区内停车"); + } + + return deviceIotService.lock(device, false, "订单锁车:" + order.getNo(), dto.getRequiredIot()); } @Override diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderValidatorImpl.java index 37d1b02..ea431f4 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderValidatorImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderValidatorImpl.java @@ -3,7 +3,6 @@ package com.ruoyi.bst.order.service.impl; import java.util.List; import java.util.Objects; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,6 +33,8 @@ import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.collection.CollectionUtils; +import lombok.extern.slf4j.Slf4j; + @Service @Slf4j public class OrderValidatorImpl implements OrderValidator{ @@ -153,6 +154,8 @@ public class OrderValidatorImpl implements OrderValidator{ boolean inParking = inParkingVO.getInParking() != null && inParkingVO.getInParking(); ServiceUtil.assertion(mustInParking && !inParking, "请将车辆停放在停车点内"); + boolean isInNoParking = inParkingVO.getInNoParking() != null && inParkingVO.getInNoParking(); + ServiceUtil.assertion(isInNoParking, "请勿将车辆停放在禁停区内"); boolean mustInArea = area.getAreaOutReturn() != null && !area.getAreaOutReturn(); boolean inArea = inParkingVO.getInArea() != null && inParkingVO.getInArea(); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java index ae79457..589d00b 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java @@ -124,23 +124,26 @@ public class OrderUtil { * @param lat 手机定位纬度 * @return */ - public static OrderInParkingVO getInParkingVO(AreaVO area, List areaSubList, DeviceVO device, BigDecimal lon, BigDecimal lat) { - if (area == null || areaSubList == null || device == null) { + public static OrderInParkingVO getInParkingVO(AreaVO area, List parkingList, List noParkingList, DeviceVO device, BigDecimal lon, BigDecimal lat) { + if (device == null) { return null; } OrderInParkingVO vo = new OrderInParkingVO(); + BigDecimal areaError = area == null ? BigDecimal.ZERO : area.getError(); + BigDecimal deviceLon = device.getLongitude(); + BigDecimal deviceLat = device.getLatitude(); - // 通过设备定位获取所在区域 - AreaSubVO deviceAreaSub = AreaSubUtil.getInAreaSub(areaSubList, device.getLongitude(), device.getLatitude(), area.getError()); + // 通过设备定位获取所在停车点 + AreaSubVO deviceAreaSub = AreaSubUtil.getInAreaSub(parkingList, deviceLon, deviceLat, areaError); vo.setDeviceAreaSub(deviceAreaSub); - // 通过手机定位获取所在区域 - AreaSubVO mobileAreaSub = AreaSubUtil.getInAreaSub(areaSubList, lon, lat, area.getError()); + // 通过手机定位获取所在停车点 + AreaSubVO mobileAreaSub = AreaSubUtil.getInAreaSub(parkingList, lon, lat, areaError); vo.setMobileAreaSub(mobileAreaSub); // 是否在停车点 boolean inParking = deviceAreaSub != null || mobileAreaSub != null; vo.setInParking(inParking); - // 实际还车点 + // 实际停车点 if (deviceAreaSub != null) { vo.setActualAreaSub(deviceAreaSub); vo.setActualLon(device.getLongitude()); @@ -151,8 +154,18 @@ public class OrderUtil { vo.setActualLat(lat); } + // 通过设备定位获取是否在禁停区 + AreaSubVO deviceNoParking = AreaSubUtil.getInAreaSub(noParkingList, deviceLon, deviceLat, areaError); + vo.setDeviceNoParking(deviceNoParking); + // 通过手机定位获取是否在禁停区 + AreaSubVO mobileNoParking = AreaSubUtil.getInAreaSub(noParkingList, lon, lat, areaError); + vo.setMobileNoParking(mobileNoParking); + // 是否在禁停区 + boolean inNoParking = deviceNoParking != null || mobileNoParking != null; + vo.setInNoParking(inNoParking); + // 通过设备定位获取是否在运营区 - boolean deviceInArea = AreaUtil.isInAreaMax(area, device.getLongitude(), device.getLatitude()); // 是否在运营区 + boolean deviceInArea = AreaUtil.isInAreaMax(area, deviceLon, deviceLat); // 是否在运营区 vo.setDeviceInArea(deviceInArea); // 通过手机定位获取是否在运营区 boolean mobileInArea = AreaUtil.isInAreaMax(area, lon, lat); // 是否在运营区 diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/WithdrawDashboard.java b/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/WithdrawDashboard.java index d1ae3eb..555fb10 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/WithdrawDashboard.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/WithdrawDashboard.java @@ -1,5 +1,6 @@ package com.ruoyi.bst.withdraw.service; +import java.math.BigDecimal; import java.util.List; import com.ruoyi.bst.withdraw.domain.WithdrawQuery; @@ -13,4 +14,11 @@ public interface WithdrawDashboard { * @return */ WithdrawStatVO selectStat(WithdrawQuery query, List keys); + + /** + * 查询提现成功金额 + * @param query + * @return + */ + BigDecimal selectSuccessAmount(WithdrawQuery query); } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/impl/WithdrawDashboardImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/impl/WithdrawDashboardImpl.java index dddd5d9..e59cee1 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/impl/WithdrawDashboardImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/withdraw/service/impl/WithdrawDashboardImpl.java @@ -33,7 +33,8 @@ public class WithdrawDashboardImpl implements WithdrawDashboard { return vo; } - private BigDecimal selectSuccessAmount(WithdrawQuery query) { + @Override + public BigDecimal selectSuccessAmount(WithdrawQuery query) { WithdrawQuery successQuery = new WithdrawQuery(); BeanUtils.copyProperties(query, successQuery); successQuery.setStatus(WithdrawStatus.SUCCESS.getCode()); diff --git a/ruoyi-service/src/main/java/com/ruoyi/iot/service/IotService.java b/ruoyi-service/src/main/java/com/ruoyi/iot/service/IotService.java index 419508a..4ab78df 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/iot/service/IotService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/iot/service/IotService.java @@ -3,6 +3,7 @@ package com.ruoyi.iot.service; import java.util.List; +import com.ruoyi.bst.device.domain.DeviceVO; import com.ruoyi.iot.constants.IotConstants; import com.ruoyi.iot.domain.IotDeviceInfo; import com.ruoyi.iot.domain.response.CommandResponse; @@ -54,7 +55,7 @@ public interface IotService { * @return 结果 */ CommandResponse lock(IotDevice device, int sub, String reason); - + /** * 强制断电 * @param device 设备 @@ -89,4 +90,12 @@ public interface IotService { */ CommandResponse unlockSeat(IotDevice device, String reason); + /** + * 临时锁车 + * @param device + * @param sub + * @param reason + * @return + */ + CommandResponse tempLock(DeviceVO device, int sub, String reason); } diff --git a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java index ae42a3e..beb949c 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java @@ -8,6 +8,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import com.ruoyi.bst.device.domain.DeviceVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -327,7 +328,7 @@ public class IotServiceImpl implements IotService { String command = IotConstants.COMMAND_QLOSE + IotConstants.COMMAND_SUB + sub + IotConstants.COMMAND_SEPARATOR; return sendCommand(device, command, reason); } - + @Override public CommandResponse play(IotDevice device, String type, String reason) { if (StringUtils.isBlank(type)) { @@ -345,4 +346,11 @@ public class IotServiceImpl implements IotService { public CommandResponse unlockSeat(IotDevice device, String reason) { return sendCommand(device, IotConstants.COMMAND_HPEN, reason); } + + @Override + public CommandResponse tempLock(DeviceVO device, int sub, String reason) { + return sendCommand(device, IotConstants.COMMAND_LLOSE, reason); + } + + } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceController.java index 782fe81..393ffef 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceController.java @@ -3,14 +3,12 @@ package com.ruoyi.web.app; import java.math.BigDecimal; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.bst.device.domain.DeviceQuery; -import com.ruoyi.bst.device.domain.DeviceVO; import com.ruoyi.bst.device.domain.enums.DeviceStatus; import com.ruoyi.bst.device.service.DeviceService; import com.ruoyi.common.annotation.Anonymous; @@ -26,6 +24,8 @@ public class AppDeviceController extends BaseController { @Autowired private DeviceService deviceService; + + @ApiOperation("获取附近可用车辆列表") @GetMapping("/listNearBy") @Anonymous @@ -47,20 +47,7 @@ public class AppDeviceController extends BaseController { @GetMapping("/availableDetail") @Anonymous public AjaxResult getAvailableDetail(@RequestParam(required = false) Long id, @RequestParam(required = false) String sn) { - DeviceQuery query = new DeviceQuery(); - query.setStatus(DeviceStatus.AVAILABLE.getCode()); - if (id != null) { - query.setId(id); - } else if (StringUtils.hasText(sn)) { - query.setEqSn(sn); - } else { - return error("ID和SN不允许同时为空"); - } - - DeviceVO device = deviceService.selectOne(query); - return success(device); + return success(deviceService.selectAvaliableDevice(id, sn)); } - - } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceIotController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceIotController.java new file mode 100644 index 0000000..80bd778 --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceIotController.java @@ -0,0 +1,37 @@ +package com.ruoyi.web.app; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.ruoyi.bst.device.domain.DeviceVO; +import com.ruoyi.bst.device.service.DeviceIotService; +import com.ruoyi.bst.device.service.DeviceService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.ServiceUtil; +import com.ruoyi.iot.constants.IotConstants; + +import io.swagger.annotations.ApiOperation; + +@RestController +@RequestMapping("/app/device/iot") +public class AppDeviceIotController extends BaseController { + + @Autowired + private DeviceIotService deviceIotService; + + @Autowired + private DeviceService deviceService; + + + @ApiOperation("用户响铃寻车") + @PutMapping("/ring") + public AjaxResult ring(@RequestParam(required = false) Long id, @RequestParam(required = false) String sn) { + DeviceVO device = deviceService.selectAvaliableDevice(id, sn); + ServiceUtil.assertion(device == null, "当前车辆不可用,无法响铃寻车"); + return toAjax(deviceIotService.play(device, IotConstants.PLAY_WARNING, "用户响铃寻车")); + } +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java index c0abf12..2496c93 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java @@ -15,6 +15,7 @@ import com.ruoyi.bst.order.domain.OrderQuery; import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.dto.OrderCalcPrePriceDTO; import com.ruoyi.bst.order.domain.dto.OrderChangeDeviceDTO; +import com.ruoyi.bst.order.domain.dto.OrderCloseDeviceDTO; import com.ruoyi.bst.order.domain.dto.OrderCreateDTO; import com.ruoyi.bst.order.domain.dto.OrderEndDTO; import com.ruoyi.bst.order.domain.dto.OrderPayDTO; @@ -130,11 +131,12 @@ public class AppOrderController extends BaseController { @ApiOperation("操作订单设备关闭") @PutMapping("/closeDevice") - public AjaxResult closeDevice(Long orderId) { - OrderVO order = orderService.selectOrderById(orderId); + public AjaxResult closeDevice(@RequestBody @Validated OrderCloseDeviceDTO dto) { + OrderVO order = orderService.selectOrderById(dto.getOrderId()); ServiceUtil.assertion(order == null, "订单不存在"); ServiceUtil.assertion(!orderValidator.canCloseDevice(order, getUserId()), "您无权操作ID为%s的订单设备关闭", order.getId()); - return toAjax(orderService.closeDevice(order, true)); + dto.setRequiredIot(true); + return toAjax(orderService.closeDevice(dto)); } @ApiOperation("订单换车") diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/HardwareVersionController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/HardwareVersionController.java index 03c12eb..1e924ce 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/HardwareVersionController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/HardwareVersionController.java @@ -1,5 +1,20 @@ package com.ruoyi.web.bst; +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.ruoyi.bst.hardwareVersion.domain.HardwareVersion; import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionQuery; import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO; @@ -10,12 +25,6 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.util.List; /** * 硬件版本Controller @@ -43,6 +52,15 @@ public class HardwareVersionController extends BaseController return getDataTable(list); } + /** + * 查询全部硬件版本列表 + */ + @PreAuthorize("@ss.hasPermi('bst:hardwareVersion:list')") + @GetMapping("/all") + public AjaxResult all() { + return success(hardwareVersionService.selectAllNames()); + } + /** * 导出硬件版本列表 */