Compare commits
2 Commits
00fdf93c24
...
bd05aaa23a
| Author | SHA1 | Date | |
|---|---|---|---|
| bd05aaa23a | |||
| fe1f19a2b1 |
@ -3,12 +3,13 @@ package com.cdzy.ebikeoperate.service.impl;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.cdzy.common.model.JsonResult;
|
||||
import com.cdzy.common.model.PageParam;
|
||||
import com.cdzy.ebikeoperate.enums.EbikeRegionInOperation;
|
||||
import com.cdzy.ebikeoperate.enums.RegionLevelType;
|
||||
import com.cdzy.ebikeoperate.mapper.EbikeOperationRegionMapper;
|
||||
import com.cdzy.ebikeoperate.mapper.EbikePointMapper;
|
||||
import com.cdzy.ebikeoperate.mapper.EbikeSiteImagesMapper;
|
||||
import com.cdzy.ebikeoperate.mapper.EbikeSiteRegionMapper;
|
||||
import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto;
|
||||
import com.cdzy.common.model.ReqBatchRegionDto;
|
||||
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto;
|
||||
import com.cdzy.ebikeoperate.model.dto.request.ReqSiteRegionDto;
|
||||
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionInfoDto;
|
||||
@ -147,10 +148,20 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
|
||||
.leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_SITE_REGION.SITE_LEVEL))
|
||||
.leftJoin(EBIKE_SITE_TYPE).on(EBIKE_SITE_TYPE.SITE_TYPE_VALUE.eq(EBIKE_SITE_REGION.SITE_LEVEL))
|
||||
.where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.SITE))
|
||||
.where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(operationRegionId, Objects.nonNull(operationRegionId)));
|
||||
.where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(operationRegionId, Objects.nonNull(operationRegionId)))
|
||||
.where(EBIKE_OPERATION_REGION.IN_OPERATION.eq(EbikeRegionInOperation.IN));
|
||||
return this.mapper.selectListWithRelationsByQueryAs(queryWrapper,ResEbikeSiteRegionPageDto.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getInOperationIds(List<Long> operationRegionIds){
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.select(EBIKE_OPERATION_REGION.OPERATION_REGION_ID)
|
||||
.where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.in(operationRegionIds))
|
||||
.where(EBIKE_OPERATION_REGION.IN_OPERATION.eq(EbikeRegionInOperation.IN));
|
||||
return operationRegionMapper.selectListByQueryAs(queryWrapper,Long.class);
|
||||
}
|
||||
|
||||
private void delImages(Long siteRegionId) throws Exception {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_SITE_IMAGES.SITE_REGION_ID.eq(siteRegionId));
|
||||
|
||||
@ -3,6 +3,7 @@ package com.cdzy.orders.service.impl;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.cdzy.common.enums.Code;
|
||||
import com.cdzy.common.model.JsonResult;
|
||||
import com.cdzy.common.model.ReqBatchRegionDto;
|
||||
import com.cdzy.common.model.ResGPSDto;
|
||||
import com.cdzy.common.utils.ConvertUtil;
|
||||
import com.cdzy.orders.component.EbikeCoreHandler;
|
||||
@ -10,10 +11,7 @@ import com.cdzy.orders.enums.*;
|
||||
import com.cdzy.orders.mapper.EbikeOrderDetailsMapper;
|
||||
import com.cdzy.orders.mapper.UserOrdersMapper;
|
||||
import com.cdzy.orders.model.dto.req.*;
|
||||
import com.cdzy.orders.model.dto.res.RedisPoint;
|
||||
import com.cdzy.orders.model.dto.res.RspBikeDto;
|
||||
import com.cdzy.orders.model.dto.res.RspOrderDetailsInfo;
|
||||
import com.cdzy.orders.model.dto.res.RspOrderDetailsUserList;
|
||||
import com.cdzy.orders.model.dto.res.*;
|
||||
import com.cdzy.orders.model.entity.EbikeOrderDetails;
|
||||
import com.cdzy.orders.model.entity.EbikeUser;
|
||||
import com.cdzy.orders.model.entity.EbikeUserOrders;
|
||||
@ -127,7 +125,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
throw new RuntimeException("开锁失败");
|
||||
}
|
||||
//添加借车单量
|
||||
Long siteRegionId = redisUtil.isPointInSiteWithSiteRegionId(resGpsDto.getLongitude(), resGpsDto.getLatitude(),regionDto.getOperationRegionId());
|
||||
Long siteRegionId = redisUtil.isPointInSiteWithSiteRegionId(resGpsDto.getLongitude(), resGpsDto.getLatitude(), regionDto.getOperationRegionId());
|
||||
operateFeignClient.addBorrowing(siteRegionId);
|
||||
|
||||
userOrders.setBikeId(bikeInfoDto.getBikeId());
|
||||
@ -173,7 +171,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
|
||||
ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto = operateJsonResult.getData();
|
||||
//费用计算
|
||||
costCalculation(feignEbikeSysRcostsetDto, resGpsDto, regionDto, userOrders,Boolean.TRUE);
|
||||
costCalculation(feignEbikeSysRcostsetDto, resGpsDto, regionDto, userOrders, Boolean.TRUE);
|
||||
userOrdersMapper.update(userOrders);
|
||||
//关锁,并且等待结果
|
||||
CompletableFuture<String> stringCompletableFuture = ebikeCoreHandler.executeCommand(ecuInfo, CmdCode.LOCK, Long.valueOf(bikeInfoDto.getBikeId()), userId);
|
||||
@ -183,7 +181,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
throw new RuntimeException("关锁失败");
|
||||
}
|
||||
//添加还车单量
|
||||
Long siteRegionId = redisUtil.isPointInSiteWithSiteRegionId(resGpsDto.getLongitude(), resGpsDto.getLatitude(),regionDto.getOperationRegionId());
|
||||
Long siteRegionId = redisUtil.isPointInSiteWithSiteRegionId(resGpsDto.getLongitude(), resGpsDto.getLatitude(), regionDto.getOperationRegionId());
|
||||
operateFeignClient.addReturn(siteRegionId);
|
||||
|
||||
return userOrders.getOrderId();
|
||||
@ -304,6 +302,16 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
return redisUtil.isPointInParking(resGpsDto.getLongitude(), resGpsDto.getLatitude(), regionDto.getOperationRegionId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refundApply(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_USER_ORDERS.ORDER_ID.eq(orderId))
|
||||
.where(EBIKE_USER_ORDERS.STATUS.eq(OrderStatus.PAID));
|
||||
EbikeUserOrders userOrders = this.mapper.selectOneByQuery(queryWrapper);
|
||||
userOrders.setStatus(OrderStatus.REFUND_APPLYING);
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refund(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
@ -324,6 +332,26 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rejectRefund(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_USER_ORDERS.ORDER_ID.eq(orderId))
|
||||
.where(EBIKE_USER_ORDERS.STATUS.eq(OrderStatus.REFUNDING));
|
||||
EbikeUserOrders userOrders = this.mapper.selectOneByQuery(queryWrapper);
|
||||
userOrders.setStatus(OrderStatus.REFUND_REJECTED);
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failRefund(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_USER_ORDERS.ORDER_ID.eq(orderId))
|
||||
.where(EBIKE_USER_ORDERS.STATUS.eq(OrderStatus.REFUNDING));
|
||||
EbikeUserOrders userOrders = this.mapper.selectOneByQuery(queryWrapper);
|
||||
userOrders.setStatus(OrderStatus.REFUND_FAILED);
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RspOrderDetailsInfo orderDetailsInfo(Long orderId) {
|
||||
return this.mapper.selectOneWithRelationsByIdAs(orderId, RspOrderDetailsInfo.class);
|
||||
@ -355,7 +383,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
|
||||
ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto = operateJsonResult.getData();
|
||||
//费用计算
|
||||
costCalculation(feignEbikeSysRcostsetDto, resGpsDto, regionDto, userOrders,Boolean.FALSE);
|
||||
costCalculation(feignEbikeSysRcostsetDto, resGpsDto, regionDto, userOrders, Boolean.FALSE);
|
||||
return userOrders.getTotalAmount();
|
||||
}
|
||||
|
||||
@ -381,14 +409,14 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
//1-单次骑行 2-骑行卡购买 3-会员卡续费
|
||||
switch (ot) {
|
||||
case 1:
|
||||
ebikePaymentDto.setGoodsTag("单次骑行");
|
||||
break;
|
||||
ebikePaymentDto.setGoodsTag("单次骑行");
|
||||
break;
|
||||
case 2:
|
||||
ebikePaymentDto.setGoodsTag("骑行卡购买");
|
||||
break;
|
||||
ebikePaymentDto.setGoodsTag("骑行卡购买");
|
||||
break;
|
||||
case 3:
|
||||
ebikePaymentDto.setGoodsTag("会员卡续费");
|
||||
break;
|
||||
ebikePaymentDto.setGoodsTag("会员卡续费");
|
||||
break;
|
||||
}
|
||||
AmountDto amountDto = new AmountDto();
|
||||
amountDto.setTotal(orderDetailsInfo.getActualAmount().doubleValue());
|
||||
@ -432,7 +460,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
* @param regionDto 运营区域信息
|
||||
* @param userOrders 订单信息
|
||||
*/
|
||||
void costCalculation(ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto, ResGPSDto resGpsDto, FeignEbikeRegionDto regionDto, EbikeUserOrders userOrders,boolean orderDetailsCreate) {
|
||||
void costCalculation(ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto, ResGPSDto resGpsDto, FeignEbikeRegionDto regionDto, EbikeUserOrders userOrders, boolean orderDetailsCreate) {
|
||||
BigDecimal totalAmount = BigDecimal.ZERO;
|
||||
List<EbikeOrderDetails> list = new ArrayList<>();
|
||||
//是否在运营区内
|
||||
@ -473,7 +501,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
resGpsDto.setInOperation(pointInOperation);
|
||||
resGpsDto.setInParking(pointInParking);
|
||||
resGpsDto.setLatestTimestamp(System.currentTimeMillis());
|
||||
redisUtil.set(resGpsDto.getEcuSn(),regionDto);
|
||||
redisUtil.set(resGpsDto.getEcuSn(), regionDto);
|
||||
//时长费用计算(已知超出免费时长
|
||||
Character timeDivisionCharging = feignEbikeSysRcostsetDto.getTimeDivisionCharging();
|
||||
BigDecimal decimal = switch (timeDivisionCharging) {
|
||||
@ -490,7 +518,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
userOrders.setStatus(OrderStatus.PENDING_PAYMENT);
|
||||
userOrders.setTotalAmount(totalAmount);
|
||||
userOrders.setActualAmount(totalAmount);
|
||||
if (orderDetailsCreate){
|
||||
if (orderDetailsCreate) {
|
||||
orderDetailsMapper.insertBatch(list);
|
||||
}
|
||||
}
|
||||
@ -516,7 +544,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
LocalTime endTime = timePeriodDto.getEndTime();
|
||||
LocalTime startupTime = timePeriodDto.getStartupTime();
|
||||
boolean range = TimeUtils.isTimeWithinRange(localTime, startupTime, endTime);
|
||||
if (range){
|
||||
if (range) {
|
||||
BigDecimal startupCost = timePeriodDto.getStartupCost();
|
||||
Integer startupDuration = timePeriodDto.getStartupDuration();
|
||||
EbikeOrderDetails startupCostDetails = new EbikeOrderDetails(userOrders.getOrderId(), OrderDetailsType.TRAVEL_EXPENSES_DURING_PEAK_HOURS, "高峰时段起步费用", startupCost, JSONObject.toJSONString(feignEbikeSysRcostsetDto), null, LocalDateTime.now());
|
||||
@ -540,8 +568,8 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
decimal = defaultCostCalculation(list,userOrders,feignEbikeSysRcostsetDto,userOrders.getOrderId());
|
||||
} else {
|
||||
decimal = defaultCostCalculation(list, userOrders, feignEbikeSysRcostsetDto, userOrders.getOrderId());
|
||||
}
|
||||
return decimal;
|
||||
}
|
||||
@ -619,7 +647,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
/**
|
||||
* 检查是否高峰时段
|
||||
*
|
||||
* @param start 骑行开始时间
|
||||
* @param start 骑行开始时间
|
||||
* @param feignEbikeSysRcostsetDto 计费规则
|
||||
* @return 是否
|
||||
*/
|
||||
@ -630,7 +658,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
LocalTime endTime = timePeriodDto.getEndTime();
|
||||
LocalTime startupTime = timePeriodDto.getStartupTime();
|
||||
boolean range = TimeUtils.isTimeWithinRange(localTime, startupTime, endTime);
|
||||
if (range){
|
||||
if (range) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -672,6 +700,7 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
}
|
||||
return decimal;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID获取订单详情列表(带分页。
|
||||
*
|
||||
@ -679,21 +708,39 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
* @ 用户订单表详情
|
||||
*/
|
||||
@Override
|
||||
public List<RspOrderDetailsUserList> orderDetailsUserList(ReqOrderDetailsDto params) {
|
||||
public List<RspOrderDetailsUserList> orderDetailsUserList(ReqOrderDetailsDto params) {
|
||||
String userId = params.getUserId().toString();
|
||||
PageParam pageParam = params.getPageParam();
|
||||
Integer pageNum= pageParam.getPageNum();
|
||||
Integer pageSize= pageParam.getPageSize();
|
||||
Integer pageNum = pageParam.getPageNum();
|
||||
Integer pageSize = pageParam.getPageSize();
|
||||
Integer offset = (pageNum - 1) * pageSize; // 计算OFFSET
|
||||
List<RspOrderDetailsUserList> orderDetailsUserList = userOrdersMapper.getOrderDetailsUserList(userId,offset,pageSize);
|
||||
List<RspOrderDetailsUserList> orderDetailsUserList = userOrdersMapper.getOrderDetailsUserList(userId, offset, pageSize);
|
||||
return orderDetailsUserList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonResult<?> siteRegionList(ReqSiteDto siteDto) {
|
||||
String operationId = redisUtil.isPointInAllOperationWithOperationId(siteDto.getLongitude(), siteDto.getLatitude());
|
||||
public JsonResult<?> siteRegionList(ReqSiteDto siteDto) {
|
||||
List<ResOperationInAllDto> area = redisUtil.findNearbyAreaByOperationInAll(siteDto.getLongitude(), siteDto.getLatitude());
|
||||
List<Long> ids = area.stream().map(dto -> {
|
||||
String areaId = dto.getAreaId();
|
||||
return Long.valueOf(areaId);
|
||||
}).toList();
|
||||
JsonResult<List<Long>> jsonResult = operateFeignClient.operationRegionIdFilter(new ReqBatchRegionDto(ids));
|
||||
if (jsonResult.getCode() != Code.SUCCESS) {
|
||||
throw new RuntimeException("获取运营区信息错误");
|
||||
}
|
||||
List<Long> data = jsonResult.getData();
|
||||
if (data == null || !data.isEmpty()) {
|
||||
return JsonResult.success(List.of());
|
||||
}
|
||||
List<ResOperationInAllDto> list = area.stream().filter(dto -> {
|
||||
String areaId = dto.getAreaId();
|
||||
Long aLong = Long.valueOf(areaId);
|
||||
return data.contains(aLong);
|
||||
}).toList();
|
||||
String operationId = redisUtil.isPointInAllOperationWithOperationId(siteDto.getLongitude(), siteDto.getLatitude(),list);
|
||||
if (operationId == null) {
|
||||
return JsonResult.success();
|
||||
return JsonResult.success(List.of());
|
||||
}
|
||||
return operateFeignClient.selectSiteListByOperationRegionId(Long.valueOf(operationId));
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user