关锁逻辑封装

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.alibaba.fastjson2.JSONObject;
import com.cdzy.common.enums.Code; import com.cdzy.common.enums.Code;
import com.cdzy.common.model.CoreResult;
import com.cdzy.common.model.JsonResult; import com.cdzy.common.model.JsonResult;
import com.cdzy.common.model.ResGPSDto; import com.cdzy.common.model.ResGPSDto;
import com.cdzy.orders.component.EbikeCoreHandler; 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.EbikeRegionInOperation;
import com.cdzy.orders.enums.OrderStatus; import com.cdzy.orders.enums.OrderStatus;
import com.cdzy.orders.enums.OrderType; 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.ReqBikeDto;
import com.cdzy.orders.model.dto.req.ReqOrderDto; import com.cdzy.orders.model.dto.req.ReqOrderDto;
import com.cdzy.orders.model.dto.res.RedisPoint; import com.cdzy.orders.model.dto.res.RedisPoint;
import com.cdzy.orders.model.dto.res.RspBikeDto; 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.RedisUtil;
import com.cdzy.orders.uitls.TimeUtils; import com.cdzy.orders.uitls.TimeUtils;
import com.ebike.feign.clients.MaintenanceFeignClient; 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.ebike.feign.model.rsp.FeignEbikeRegionDto;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl; 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 jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -121,6 +120,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, UserOrd
@Override @Override
public Long doneRide(ReqOrderDto orderDto) { public Long doneRide(ReqOrderDto orderDto) {
String userId = orderDto.getUserId();
UserOrders userOrders = getOrder(orderDto); UserOrders userOrders = getOrder(orderDto);
userOrders.setEndTime(LocalDateTime.now()); userOrders.setEndTime(LocalDateTime.now());
JsonResult<FeignEbikeBikeInfoDto> jsonResult = maintenanceFeignClient.getEbikeInfoByCode(orderDto.getBikeCode()); JsonResult<FeignEbikeBikeInfoDto> jsonResult = maintenanceFeignClient.getEbikeInfoByCode(orderDto.getBikeCode());
@ -150,7 +150,13 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, UserOrd
//TODO:区域校验校验是否在停车区内;时间校验根据规则做时间校验判断收费多少.需要支付则为待支付状态不需要则为取消状态 //TODO:区域校验校验是否在停车区内;时间校验根据规则做时间校验判断收费多少.需要支付则为待支付状态不需要则为取消状态
userOrders.setStatus(OrderStatus.PENDING_PAYMENT); userOrders.setStatus(OrderStatus.PENDING_PAYMENT);
userOrdersMapper.update(userOrders); 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(); return userOrders.getOrderId();
} }