关锁逻辑封装

This commit is contained in:
attiya 2025-04-17 15:46:44 +08:00
parent ac6ef73cfe
commit 44165f4dac

View File

@ -2,7 +2,6 @@ package com.cdzy.orders.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.cdzy.common.enums.Code;
import com.cdzy.common.model.CoreResult;
import com.cdzy.common.model.JsonResult;
import com.cdzy.common.model.ResGPSDto;
import com.cdzy.orders.component.EbikeCoreHandler;
@ -10,10 +9,13 @@ import com.cdzy.orders.enums.CmdCode;
import com.cdzy.orders.enums.EbikeRegionInOperation;
import com.cdzy.orders.enums.OrderStatus;
import com.cdzy.orders.enums.OrderType;
import com.cdzy.orders.mapper.UserOrdersMapper;
import com.cdzy.orders.model.dto.req.ReqBikeDto;
import com.cdzy.orders.model.dto.req.ReqOrderDto;
import com.cdzy.orders.model.dto.res.RedisPoint;
import com.cdzy.orders.model.dto.res.RspBikeDto;
import com.cdzy.orders.model.entity.UserOrders;
import com.cdzy.orders.service.UserOrdersService;
import com.cdzy.orders.uitls.RedisUtil;
import com.cdzy.orders.uitls.TimeUtils;
import com.ebike.feign.clients.MaintenanceFeignClient;
@ -24,9 +26,6 @@ import com.ebike.feign.model.rsp.FeignEbikeEcuInfo;
import com.ebike.feign.model.rsp.FeignEbikeRegionDto;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cdzy.orders.model.entity.UserOrders;
import com.cdzy.orders.mapper.UserOrdersMapper;
import com.cdzy.orders.service.UserOrdersService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -121,6 +120,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, UserOrd
@Override
public Long doneRide(ReqOrderDto orderDto) {
String userId = orderDto.getUserId();
UserOrders userOrders = getOrder(orderDto);
userOrders.setEndTime(LocalDateTime.now());
JsonResult<FeignEbikeBikeInfoDto> jsonResult = maintenanceFeignClient.getEbikeInfoByCode(orderDto.getBikeCode());
@ -150,7 +150,13 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, UserOrd
//TODO:区域校验校验是否在停车区内;时间校验根据规则做时间校验判断收费多少.需要支付则为待支付状态不需要则为取消状态
userOrders.setStatus(OrderStatus.PENDING_PAYMENT);
userOrdersMapper.update(userOrders);
//TODO:关锁
//关锁,并且等待结果
CompletableFuture<String> stringCompletableFuture = ebikeCoreHandler.executeCommand(ecuInfo, CmdCode.LOCK, Long.valueOf(bikeInfoDto.getBikeId()), userId);
String response = stringCompletableFuture.join();
JSONObject jsonObject = JSONObject.parseObject(response);
if (jsonObject.getInteger("code") != 0) {
throw new RuntimeException("关锁失败");
}
return userOrders.getOrderId();
}