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 f39e846..254b88f 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 @@ -188,6 +188,10 @@ public class Area extends BaseEntity implements LogBizParam @ApiModelProperty("响铃寻车是否必须在范围内") private Boolean requiredRingRadius; + @Excel(name = "超时是否自动断电") + @ApiModelProperty("超时是否自动断电") + private Boolean timeoutLock; + @Override public Object logBizId() { return id; 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 e6eec47..28c63d3 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 @@ -48,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ba.outage_distance, ba.ring_radius, ba.required_ring_radius, + ba.timeout_lock, su.nick_name as user_name, su.agent_id as agent_id, su.user_name as user_phone, @@ -85,6 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and su.nick_name like concat('%', #{query.userName}, '%') and suc.nick_name like concat('%', #{query.createName}, '%') and su.user_name like concat('%', #{query.userPhone}, '%') + and ba.timeout_lock = #{query.timeoutLock} and ba.id in @@ -166,6 +168,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" outage_distance, ring_radius, required_ring_radius, + timeout_lock, #{userId}, @@ -204,6 +207,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{outageDistance}, #{ringRadius}, #{requiredRingRadius}, + #{timeoutLock}, @@ -252,6 +256,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" outage_distance = #{data.outageDistance}, ring_radius = #{data.ringRadius}, required_ring_radius = #{data.requiredRingRadius}, + timeout_lock = #{data.timeoutLock}, diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/area/service/impl/AreaConverterImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/area/service/impl/AreaConverterImpl.java index 4ec537f..048f259 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/area/service/impl/AreaConverterImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/area/service/impl/AreaConverterImpl.java @@ -32,6 +32,7 @@ public class AreaConverterImpl implements AreaConverter { po.setAreaOutOutage(data.getAreaOutOutage()); po.setBoundaryDistance(data.getBoundaryDistance()); po.setOutageDistance(data.getOutageDistance()); + po.setTimeoutLock(data.getTimeoutLock()); // 还车设置 po.setError(data.getError()); @@ -74,7 +75,8 @@ public class AreaConverterImpl implements AreaConverter { po.setAreaOutOutage(data.getAreaOutOutage()); po.setBoundaryDistance(data.getBoundaryDistance()); po.setOutageDistance(data.getOutageDistance()); - + po.setTimeoutLock(data.getTimeoutLock()); + // 还车设置 po.setError(data.getError()); po.setReturnVerify(data.getReturnVerify()); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/areaSub/utils/AreaSubUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/areaSub/utils/AreaSubUtil.java index d15a62b..95de45d 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/areaSub/utils/AreaSubUtil.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/areaSub/utils/AreaSubUtil.java @@ -6,6 +6,7 @@ import java.util.List; import org.locationtech.jts.geom.Geometry; import com.ruoyi.bst.areaSub.domain.AreaSubVO; +import com.ruoyi.bst.areaSub.domain.enums.AreaSubStatus; import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.common.utils.map.GeoUtils; @@ -35,6 +36,9 @@ public class AreaSubUtil { if (geometry == null) { continue; } + if (AreaSubStatus.DISABLED.getCode().equals(area.getStatus())) { + continue; + } if(area.getError() != null ){ tolerance = area.getError(); } @@ -67,6 +71,9 @@ public class AreaSubUtil { if (geometry == null) { continue; } + if (AreaSubStatus.DISABLED.getCode().equals(area.getStatus())) { + continue; + } if (area.getError() != null) { tolerance = area.getError(); } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceVO.java index a1e1319..3038847 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceVO.java @@ -1,6 +1,7 @@ package com.ruoyi.bst.device.domain; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.time.LocalTime; import org.springframework.format.annotation.DateTimeFormat; @@ -67,7 +68,7 @@ public class DeviceVO extends Device { @ApiModelProperty("是否必须停车点还车") private Boolean areaParkingReturn; - // 订单 + // 订单设备 @ApiModelProperty("当前订单ID") private Long orderId; @ApiModelProperty("当前订单状态") @@ -76,8 +77,18 @@ public class DeviceVO extends Device { private String orderNo; @ApiModelProperty("当前订单设备状态") private String orderDeviceStatus; + @ApiModelProperty("当前订单设备开始时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime orderDeviceStartTime; + @ApiModelProperty("当前订单设备结束时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime orderDeviceEndTime; @ApiModelProperty("当前订单用户ID") private Long orderUserId; + @ApiModelProperty("当前订单用户名称") + private String orderUserName; + @ApiModelProperty("当前订单用户手机号") + private String orderUserPhone; // 硬件版本 @ApiModelProperty("硬件版本") diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml index d94eb72..518b943 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml @@ -44,7 +44,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bd.last_online_time, bd.order_device_id, bd.software_version, - bd.last_user_id, mch.nick_name as mch_name, mch.point as mch_point, bm.name as model_name, @@ -73,10 +72,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bo.user_id as order_user_id, bod.status as order_device_status, bod.order_id as order_id, + bod.start_time as order_device_start_time, + bod.end_time as order_device_end_time, bhv.version as hardware_version, bhv.instructions as hardware_version_instructions, - bul.nick_name as last_user_name, - bul.user_name as last_user_phone + suo.nick_name as order_user_name, + suo.user_name as order_user_phone from @@ -84,13 +85,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bst_device bd left join sys_user mch on bd.mch_id = mch.user_id left join bst_model bm on bd.model_id = bm.id + left join bst_hardware_version bhv on bhv.id = bd.hardware_version_id left join bst_area ba on bd.area_id = ba.id left join sys_user basu on basu.user_id = ba.user_id left join sys_user basua on basua.user_id = basu.agent_id - left join sys_user bul on bul.user_id = bd.last_user_id left join bst_order_device bod on bod.id = bd.order_device_id left join bst_order bo on bo.id = bod.order_id - left join bst_hardware_version bhv on bhv.id = bd.hardware_version_id + left join sys_user suo on suo.user_id = bo.user_id @@ -122,11 +123,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and basua.nick_name like concat('%', #{query.areaAgentName}, '%') and bo.no like concat('%', #{query.orderNo}, '%') and bd.id != #{query.excludeId} - and bd.last_user_id = #{query.lastUserId} - and bul.nick_name like concat('%', #{query.lastUserName}, '%') - and bul.user_name like concat('%', #{query.lastUserPhone}, '%') and mch.nick_name like concat('%', #{query.mchName}, '%') and bm.name like concat('%', #{query.modelName}, '%') + and suo.nick_name like concat('%', #{query.orderUserName}, '%') + and suo.user_name like concat('%', #{query.orderUserPhone}, '%') and bd.last_location_time <= #{query.lastTimeEnd} and bd.last_location_time >= #{query.lastTimeStart} @@ -230,7 +230,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" last_online_time, order_device_id, software_version, - last_user_id, #{modelId}, @@ -265,7 +264,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{lastOnlineTime}, #{orderDeviceId}, #{softwareVersion}, - #{lastUserId}, @@ -310,7 +308,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bd.last_online_time = #{data.lastOnlineTime}, bd.order_device_id = #{data.orderDeviceId}, bd.software_version = #{data.softwareVersion}, - bd.last_user_id = #{data.lastUserId}, @@ -373,8 +370,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bd.longitude, bd.latitude, bod.status as order_device_status, - bod.order_id + bod.order_id, + bm.full_voltage as model_full_voltage, + bm.low_voltage as model_low_voltage, + bm.full_endurance as model_full_endurance from bst_device bd + left join bst_model bm on bm.id = bd.model_id left join bst_order_device bod on bod.id = bd.order_device_id diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderQuery.java index 85ffe43..0044ec3 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderQuery.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderQuery.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data -public class OrderQuery extends OrderVO { +public class OrderQuery extends OrderVO { @ApiModelProperty("id列表") private List ids; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java index 92e5b5e..598606c 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java @@ -5,12 +5,13 @@ import java.time.LocalDateTime; import java.util.List; import com.ruoyi.bst.orderDevice.domain.OrderDeviceVO; +import com.ruoyi.iot.interfaces.IotDevice; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data -public class OrderVO extends Order { +public class OrderVO extends Order implements IotDevice { // 订单设备 @ApiModelProperty("当前设备ID") @@ -33,6 +34,10 @@ public class OrderVO extends Order { private BigDecimal returnLon; @ApiModelProperty("还车纬度") private BigDecimal returnLat; + @ApiModelProperty("当前经度") + private BigDecimal currentLon; + @ApiModelProperty("当前纬度") + private BigDecimal currentLat; @ApiModelProperty("订单设备列表") private List orderDeviceList; @@ -65,4 +70,18 @@ public class OrderVO extends Order { private BigDecimal payAdminRefund; + @Override + public String mac() { + return this.deviceMac; + } + + @Override + public BigDecimal longitude() { + return this.currentLon; + } + + @Override + public BigDecimal latitude() { + return this.currentLat; + } } 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 e926fce..27fdd46 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 @@ -9,6 +9,9 @@ import lombok.Data; @Data public class OrderInParkingVO { + + @ApiModelProperty("停车区数量") + private Integer parkingCount; @ApiModelProperty("手机定位所在停车区") private AreaSubVO mobileAreaSub; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml index 97ad65a..80cec45 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml @@ -72,7 +72,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bod.end_area_sub_name, bod.return_mode, bod.return_lon, - bod.return_lat + bod.return_lat, + bd.longitude as current_lon, + bd.latitude as current_lat from @@ -82,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sys_user su on bo.user_id = su.user_id left join bst_pay bp on bo.pay_id = bp.id left join bst_order_device bod on bod.id = bo.order_device_id + left join bst_device bd on bod.device_id = bd.id diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderValidator.java index 696a596..e8afc76 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderValidator.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderValidator.java @@ -90,4 +90,15 @@ public interface OrderValidator { */ boolean canOperate(Long orderId); + /** + * 校验订单是否超时 + * @param order 订单 + * @return 是否超时 + */ + boolean isTimeout(OrderVO order); + + /** + * 是否是用户 + */ + boolean isUser(Long orderId, Long userId); } 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 7c38434..fcdc3e6 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 @@ -1,5 +1,6 @@ package com.ruoyi.bst.order.service.impl; +import java.time.LocalDateTime; import java.time.LocalTime; import java.util.Collections; import java.util.HashSet; @@ -165,6 +166,12 @@ public class OrderValidatorImpl implements OrderValidator{ public void checkInParking(AreaVO area, OrderInParkingVO inParkingVO) { log.info("【还车定位校验】运营区:{},定位数据:{}", area.getName(), inParkingVO); ServiceUtil.assertion(inParkingVO == null, "参数错误,停车点信息不存在"); + ServiceUtil.assertion(area == null, "参数错误,运营区信息不存在"); + + if (inParkingVO.getParkingCount() != null && inParkingVO.getParkingCount() == 0) { + log.warn("运营区{}的停车区数量为0,无需校验停车区", area.getName()); + return; + } boolean mustInParking = area.getParkingReturn() != null && area.getParkingReturn(); boolean inParking = inParkingVO.getInParking() != null && inParkingVO.getInParking(); @@ -224,4 +231,15 @@ public class OrderValidatorImpl implements OrderValidator{ List list = orderMapper.selectIdByQuery(query); return new HashSet<>(list).containsAll(orderIds); } + + @Override + public boolean isTimeout(OrderVO order) { + return order != null && order.getMaxTime() != null && order.getMaxTime().isBefore(LocalDateTime.now()); + } + + @Override + public boolean isUser(Long orderId, Long userId) { + OrderVO order = orderMapper.selectOrderById(orderId); + return isUser(order, userId); + } } 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 0ece95a..87bce18 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 @@ -126,6 +126,10 @@ public class OrderUtil { BigDecimal deviceLon = device.getLongitude(); BigDecimal deviceLat = device.getLatitude(); + // 停车区数量 + int parkingCount = parkingList == null ? 0 : parkingList.size(); + vo.setParkingCount(parkingCount); + // 通过设备定位获取所在停车点 AreaSubVO deviceAreaSub = AreaSubUtil.getInAreaSub(parkingList, deviceLon, deviceLat, areaError); vo.setDeviceAreaSub(deviceAreaSub); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/service/impl/OrderDeviceServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/service/impl/OrderDeviceServiceImpl.java index b42c782..c8e27f6 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/service/impl/OrderDeviceServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/service/impl/OrderDeviceServiceImpl.java @@ -182,11 +182,11 @@ public class OrderDeviceServiceImpl implements OrderDeviceService query.setStatusList(OrderDeviceStatus.canStart()); int rows = orderDeviceMapper.updateByQuery(data, query); - if (rows > 0 ) { - // 更新设备最后一次使用的用户ID - int update = deviceService.updateLastUserId(orderDevice.getDeviceId(), orderDevice.getOrderUserId()); - ServiceUtil.assertion(update != 1, "更新设备最后一次使用的用户ID失败"); - } + // if (rows > 0 ) { + // // 更新设备最后一次使用的用户ID + // int update = deviceService.updateLastUserId(orderDevice.getDeviceId(), orderDevice.getOrderUserId()); + // ServiceUtil.assertion(update != 1, "更新设备最后一次使用的用户ID失败"); + // } return rows; }); @@ -236,8 +236,8 @@ public class OrderDeviceServiceImpl implements OrderDeviceService int rows = orderDeviceMapper.updateByQuery(data, query); // 清除设备当前订单设备ID - int clear = deviceService.clearCurrentOrderDevice(orderDevice.getDeviceId(), orderDevice.getId()); - ServiceUtil.assertion(clear != 1, "清除设备当前订单ID失败"); + // int clear = deviceService.clearCurrentOrderDevice(orderDevice.getDeviceId(), orderDevice.getId()); + // ServiceUtil.assertion(clear != 1, "清除设备当前订单ID失败"); return rows; }); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/service/impl/RefundConverterImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/service/impl/RefundConverterImpl.java index 473d62c..17fdb51 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/service/impl/RefundConverterImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/service/impl/RefundConverterImpl.java @@ -22,6 +22,7 @@ public class RefundConverterImpl implements RefundConverter{ refund.setReason(dto.getRefundReason()); refund.setUserId(dto.getUserId()); refund.setUserName(dto.getUserName()); + refund.setType(dto.getType()); return refund; } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java b/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java index 4a158fb..29c0506 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java +++ b/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java @@ -9,18 +9,19 @@ import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; +import com.ruoyi.bst.device.service.DeviceIotService; import com.ruoyi.bst.locationLog.domain.vo.LocationLogPositionVO; import com.ruoyi.bst.locationLog.service.LocationLogService; import com.ruoyi.bst.locationLog.utils.LocationLogUtil; import com.ruoyi.bst.order.domain.OrderQuery; import com.ruoyi.bst.order.domain.OrderVO; -import com.ruoyi.bst.order.domain.dto.OrderEndDTO; -import com.ruoyi.bst.order.domain.enums.OrderReturnType; import com.ruoyi.bst.order.domain.enums.OrderStatus; import com.ruoyi.bst.order.mapper.OrderMapper; import com.ruoyi.bst.order.service.OrderService; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.collection.CollectionUtils; +import com.ruoyi.iot.constants.IotConstants; +import com.ruoyi.iot.service.IotService; import lombok.extern.slf4j.Slf4j; @@ -37,6 +38,11 @@ public class OrderTask implements ApplicationRunner { @Autowired private LocationLogService locationLogService; + @Autowired + private DeviceIotService deviceIotService; + + @Autowired + private IotService iotService; @Override public void run(ApplicationArguments args) throws Exception { @@ -55,9 +61,9 @@ public class OrderTask implements ApplicationRunner { } /** - * 关闭超过最大可用时间的订单 + * 处理超过最大可用时间的订单 */ - public void closeExpireMaxTimeOrder() { + public void handleExpireMaxTimeOrder() { // 查询超过最大可用时间的订单 OrderQuery query = new OrderQuery(); query.setStatusList(OrderStatus.inUse()); @@ -71,11 +77,12 @@ public class OrderTask implements ApplicationRunner { for (OrderVO order : orderList) { try { - OrderEndDTO dto = new OrderEndDTO(); - dto.setReturnType(OrderReturnType.SYSTEM.getCode()); - dto.setOrderId(order.getId()); - dto.setEndReason("超时系统自动结束"); - orderService.endOrder(dto); + // OrderEndDTO dto = new OrderEndDTO(); + // dto.setReturnType(OrderReturnType.SYSTEM.getCode()); + // dto.setOrderId(order.getId()); + // dto.setEndReason("超时系统自动结束"); + // orderService.endOrder(dto); + iotService.play(order, IotConstants.PLAY_END, "超时系统警告"); } catch (Exception e) { log.error("结束订单失败,订单ID:{}", order.getId(), e); } 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 index 6b39453..f01f8bd 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceIotController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppDeviceIotController.java @@ -50,6 +50,7 @@ public class AppDeviceIotController extends BaseController { ServiceUtil.assertion(device == null, "当前车辆不存在,无法响铃寻车"); if (device.getAreaRequiredRingRadius() != null && device.getAreaRequiredRingRadius()) { + ServiceUtil.assertion(lon == null || lat == null, "请开启定位后重试"); BigDecimal distance = GeoUtils.calculateDistance(device.getLatitude(), device.getLongitude(), lat, lon); ServiceUtil.assertion(MathUtils.biggerThan(distance, device.getAreaRingRadius()), "您当前距离车辆%s米,无法响铃寻车。请距离车辆%s米以内再试", distance, device.getAreaRingRadius()); diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppLocationLogController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppLocationLogController.java index 68bfab0..d7ff8d3 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppLocationLogController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppLocationLogController.java @@ -1,12 +1,51 @@ package com.ruoyi.web.app; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.bst.locationLog.domain.LocationLogQuery; +import com.ruoyi.bst.locationLog.domain.LocationLogVO; +import com.ruoyi.bst.locationLog.service.LocationLogService; +import com.ruoyi.bst.order.service.OrderValidator; import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; + +import io.swagger.annotations.ApiOperation; + @RestController @RequestMapping("/app/locationLog") public class AppLocationLogController extends BaseController { + + @Autowired + private LocationLogService locationLogService; + + @Autowired + private OrderValidator orderValidator; + + private boolean canView(Long orderId) { + return orderValidator.isUser(orderId, getUserId()); + } + + @ApiOperation("根据订单ID查询定位日志") + @GetMapping("/allByOrder") + public AjaxResult getAllByOrder(Long orderId) { + if (orderId == null) { + return error("订单ID不允许为空"); + } + if (!canView(orderId)) { + return error("您无权查看ID为" + orderId + "的订单轨迹"); + } + + LocationLogQuery query = new LocationLogQuery(); + query.setOrderId(orderId); + List list = locationLogService.selectLocationLogList(query); + return success(list); + } + } 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 10edd8d..fc9899c 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 @@ -129,6 +129,7 @@ public class AppOrderController extends BaseController { OrderVO order = orderService.selectOrderById(orderId); ServiceUtil.assertion(order == null, "订单不存在"); ServiceUtil.assertion(!orderValidator.canOpenDevice(order, getUserId()), "您无权操作ID为%s的订单设备开启", order.getId()); + ServiceUtil.assertion(orderValidator.isTimeout(order), "当前订单已超时,请在安全的区域还车"); return success(orderService.openDevice(order, true)); } @@ -139,6 +140,7 @@ public class AppOrderController extends BaseController { OrderVO order = orderService.selectOrderById(dto.getOrderId()); ServiceUtil.assertion(order == null, "订单不存在"); ServiceUtil.assertion(!orderValidator.canCloseDevice(order, getUserId()), "您无权操作ID为%s的订单设备关闭", order.getId()); + ServiceUtil.assertion(orderValidator.isTimeout(order), "当前订单已超时,请在安全的区域还车"); dto.setRequiredIot(true); return success(orderService.closeDevice(dto)); } @@ -149,6 +151,7 @@ public class AppOrderController extends BaseController { public AjaxResult changeDevice(@RequestBody @Validated OrderChangeDeviceDTO dto) { OrderVO order = orderService.selectOrderById(dto.getOrderId()); ServiceUtil.assertion(!orderValidator.canChangeDevice(order, getUserId()), "您无权操作ID为%s的订单换车", order.getId()); + ServiceUtil.assertion(orderValidator.isTimeout(order), "当前订单已超时,请在安全的区域还车"); dto.setUserId(getUserId()); dto.setUserName(getNickName()); return toAjax(orderService.changeDevice(dto));