diff --git a/ebike-user/src/main/java/com/cdzy/user/controller/EbikeOrderController.java b/ebike-user/src/main/java/com/cdzy/user/controller/EbikeOrderController.java index 85de61a..ef3b650 100644 --- a/ebike-user/src/main/java/com/cdzy/user/controller/EbikeOrderController.java +++ b/ebike-user/src/main/java/com/cdzy/user/controller/EbikeOrderController.java @@ -4,6 +4,7 @@ import com.cdzy.common.enums.Code; import com.cdzy.common.ex.EbikeException; import com.cdzy.common.model.request.PageParam; import com.cdzy.common.model.response.JsonResult; +import com.cdzy.user.model.dto.EbikeTempLockDto; import com.cdzy.user.model.dto.EbikeUserCyclingDto; import com.cdzy.user.model.dto.EbikeUserCyclingEndDto; import com.cdzy.user.model.entity.EbikeOrder; @@ -184,4 +185,16 @@ public class EbikeOrderController { ebikeOrderService.updateOrderAmount(paymentAmountDto); return JsonResult.success(); } + + /** + * 临时锁车 + * + * @param tempLockDto 临时锁车参数 + */ + @PostMapping("/tempLock") + public JsonResult tempLock(@RequestBody @Validated EbikeTempLockDto tempLockDto) { + ebikeOrderService.tempLock(tempLockDto); + return JsonResult.success(); + } + } diff --git a/ebike-user/src/main/java/com/cdzy/user/enums/EbikeTempLockStatus.java b/ebike-user/src/main/java/com/cdzy/user/enums/EbikeTempLockStatus.java new file mode 100644 index 0000000..17642a6 --- /dev/null +++ b/ebike-user/src/main/java/com/cdzy/user/enums/EbikeTempLockStatus.java @@ -0,0 +1,21 @@ +package com.cdzy.user.enums; + +/** + * 锁车状态 + * + * @author yanglei + * @since 2026-02-25 16:26 + */ + +public interface EbikeTempLockStatus { + + /** + * 0-临时解锁 + */ + int OPEN = 0; + + /** + * 1-临时锁车 + */ + int LOCK = 1; +} diff --git a/ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeTempLockDto.java b/ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeTempLockDto.java new file mode 100644 index 0000000..5ee0782 --- /dev/null +++ b/ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeTempLockDto.java @@ -0,0 +1,45 @@ +package com.cdzy.user.model.dto; + +import com.cdzy.user.handler.PointDeserializer; +import com.cdzy.user.handler.PointSerializer; +import com.cdzy.user.handler.PointTypeHandler; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.mybatisflex.annotation.Column; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.locationtech.jts.geom.Point; + +/** + * @author yanglei + * @since 2026-02-25 16:02 + */ +@Data +public class EbikeTempLockDto { + + /** + * 锁车状态 0-开锁 1-临时锁车 + */ + @NotNull(message = "开锁状态不能为空") + private Integer lockStatus; + + /** + * 订单id + */ + @NotNull(message = "订单id不能为空") + private Long orderId; + + /** + * 车辆编号 + */ + @NotNull(message = "车辆编号不能为空") + private String bikeCode; + + /** + * 当前位置 + */ + @Column(typeHandler = PointTypeHandler.class) + @JsonSerialize(using = PointSerializer.class) + @JsonDeserialize(using = PointDeserializer.class) + private Point location; +} diff --git a/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeOrder.java b/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeOrder.java index 4b5daa7..d06c2d0 100644 --- a/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeOrder.java +++ b/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeOrder.java @@ -195,4 +195,9 @@ public class EbikeOrder implements Serializable { * 是否免费订单 true-免费 false-收费 */ private Boolean isFreeOrder; + + /** + * 临时锁车 0-未临时锁车 1-临时锁车 + */ + private Integer tempLock; } diff --git a/ebike-user/src/main/java/com/cdzy/user/service/EbikeOrderService.java b/ebike-user/src/main/java/com/cdzy/user/service/EbikeOrderService.java index 56f7b0f..4a28376 100644 --- a/ebike-user/src/main/java/com/cdzy/user/service/EbikeOrderService.java +++ b/ebike-user/src/main/java/com/cdzy/user/service/EbikeOrderService.java @@ -1,6 +1,7 @@ package com.cdzy.user.service; import com.cdzy.common.model.request.PageParam; +import com.cdzy.user.model.dto.EbikeTempLockDto; import com.cdzy.user.model.dto.EbikeUserCyclingDto; import com.cdzy.user.model.dto.EbikeUserCyclingEndDto; import com.cdzy.user.model.entity.EbikeOrder; @@ -142,4 +143,11 @@ public interface EbikeOrderService extends IService { * @param paymentAmountDto 车辆编号 */ void updateOrderAmount(FeignEbikePaymentAmountDto paymentAmountDto); + + /** + * 临时锁车 + * + * @param tempLockDto 临时锁车参数 + */ + void tempLock(EbikeTempLockDto tempLockDto); } diff --git a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeOrderServiceImpl.java b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeOrderServiceImpl.java index 8da71c0..268fd05 100644 --- a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeOrderServiceImpl.java +++ b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeOrderServiceImpl.java @@ -8,11 +8,13 @@ import com.cdzy.common.model.response.JsonResult; import com.cdzy.user.enums.EbikeOrderDetailType; import com.cdzy.user.enums.EbikePaymentMethod; import com.cdzy.user.enums.EbikePaymentTradeStatus; +import com.cdzy.user.enums.EbikeTempLockStatus; import com.cdzy.user.enums.OrderStatus; import com.cdzy.user.enums.OrderType; import com.cdzy.user.enums.TimeRangeEnum; import com.cdzy.user.mapper.EbikeOrderMapper; import com.cdzy.user.model.dto.EbikeCostDetailDto; +import com.cdzy.user.model.dto.EbikeTempLockDto; import com.cdzy.user.model.dto.EbikeUserCyclingDto; import com.cdzy.user.model.dto.EbikeUserCyclingEndDto; import com.cdzy.user.model.entity.EbikeOrder; @@ -434,6 +436,36 @@ public class EbikeOrderServiceImpl extends ServiceImpl jsonResult = operationsFeignClient.lock(ebikeLockVo); + if (jsonResult.getCode() != Code.SUCCESS) { + throw new EbikeException("临时关锁失败:" + jsonResult.getMessage()); + } + } else if (tempLockDto.getLockStatus().equals(EbikeTempLockStatus.OPEN)) { + // 开锁 + JsonResult jsonResult = operationsFeignClient.openLock(tempLockDto.getBikeCode()); + if (jsonResult.getCode() != Code.SUCCESS) { + throw new EbikeException("开锁失败:" + jsonResult.getMessage()); + } + } + ebikeOrder.setTempLock(tempLockDto.getLockStatus()); + this.mapper.update(ebikeOrder); + } + /** * 计算增长率并格式化为百分比字符串 * diff --git a/ebike-user/src/main/resources/db/init.sql b/ebike-user/src/main/resources/db/init.sql index e07773d..e13eb71 100644 --- a/ebike-user/src/main/resources/db/init.sql +++ b/ebike-user/src/main/resources/db/init.sql @@ -201,6 +201,7 @@ CREATE TABLE "public"."ebike_order" ( "helmet_management_fee" numeric(10,2), "start_location" geometry(POINT, 4326), "end_location" geometry(POINT, 4326), + "temp_lock" int2 DEFAULT 0 NOT NULL, "create_by" int8, "create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP, "update_by" int8, @@ -232,6 +233,7 @@ COMMENT ON COLUMN "public"."ebike_order"."max_fee_amount" IS '封顶金额(元 COMMENT ON COLUMN "public"."ebike_order"."helmet_management_fee" IS '头盔管理费(元)'; COMMENT ON COLUMN "public"."ebike_order"."start_location" IS '骑行初始点'; COMMENT ON COLUMN "public"."ebike_order"."end_location" IS '骑行还车点'; +COMMENT ON COLUMN "public"."ebike_order"."temp_lock" IS '临时锁车 0-未临时锁车 1-临时锁车'; COMMENT ON COLUMN "public"."ebike_order"."create_by" IS '创建人ID'; COMMENT ON COLUMN "public"."ebike_order"."create_time" IS '创建时间'; COMMENT ON COLUMN "public"."ebike_order"."update_by" IS '最后修改人ID';