代码优化
This commit is contained in:
parent
bf49850b41
commit
d68b914b92
@ -10,6 +10,7 @@ import com.cdzy.common.model.response.CommonStaffInfo;
|
||||
import com.cdzy.common.model.response.JsonResult;
|
||||
import com.cdzy.operations.model.dto.EbikeCloseOrderDto;
|
||||
import com.cdzy.operations.model.entity.EbikeEcuInfo;
|
||||
import com.cdzy.operations.model.vo.EbikeIsSuperAdminVo;
|
||||
import com.cdzy.operations.service.EbikeEcuInfoService;
|
||||
import com.cdzy.operations.utils.RedisUtil;
|
||||
import com.ebike.feign.clients.UserFeignClient;
|
||||
@ -56,18 +57,10 @@ public class EbikeStatisticsController {
|
||||
*/
|
||||
@PostMapping("/getOrderStatistics")
|
||||
public JsonResult<?> getOrderStatistics(@RequestBody @Validated FeignEbikeOrderStatisticsDto dto) {
|
||||
long staffId = StpUtil.getLoginIdAsLong();
|
||||
CommonStaffInfo staffInfo = StpUtil.getSession().getModel(String.valueOf(staffId), CommonStaffInfo.class);
|
||||
if (staffInfo == null) {
|
||||
throw new EbikeException("当前用户信息不存在");
|
||||
}
|
||||
boolean isSuperAdmin = Optional.ofNullable(staffInfo.getRoles())
|
||||
.orElse(Collections.emptyList())
|
||||
.stream()
|
||||
.anyMatch(CommonEbikeRole::getSysAdmin);
|
||||
EbikeIsSuperAdminVo superAdmin = checkUserIsSuperAdmin();
|
||||
// 判断是否超级管理员
|
||||
if (!isSuperAdmin) {
|
||||
dto.setOperatorId(staffInfo.getOperatorId());
|
||||
if (!superAdmin.isSuperAdmin()) {
|
||||
dto.setOperatorId(superAdmin.getOperatorId());
|
||||
}
|
||||
JsonResult<?> jsonResult = userFeignClient.getOrderStatistics(dto);
|
||||
if (jsonResult.getCode() != Code.SUCCESS) {
|
||||
@ -126,18 +119,10 @@ public class EbikeStatisticsController {
|
||||
@GetMapping("getDiffOperatorOrderList")
|
||||
public JsonResult<?> getDiffOperatorOrderList(String bikeCode, PageParam pageParam) {
|
||||
FeignDiffOperatorOrderList dto = new FeignDiffOperatorOrderList();
|
||||
String staffId = StpUtil.getLoginIdAsString();
|
||||
CommonStaffInfo staffInfo = StpUtil.getSession().getModel(staffId, CommonStaffInfo.class);
|
||||
if (staffInfo == null) {
|
||||
throw new EbikeException("当前用户信息不存在");
|
||||
}
|
||||
boolean isSuperAdmin = Optional.ofNullable(staffInfo.getRoles())
|
||||
.orElse(Collections.emptyList())
|
||||
.stream()
|
||||
.anyMatch(CommonEbikeRole::getSysAdmin);
|
||||
EbikeIsSuperAdminVo superAdmin = checkUserIsSuperAdmin();
|
||||
// 判断是否超级管理员
|
||||
if (!isSuperAdmin) {
|
||||
dto.setOperatorId(staffInfo.getOperatorId());
|
||||
if (!superAdmin.isSuperAdmin()) {
|
||||
dto.setOperatorId(superAdmin.getOperatorId());
|
||||
}
|
||||
dto.setBikeCode(bikeCode);
|
||||
dto.setPageParam(pageParam);
|
||||
@ -147,4 +132,25 @@ public class EbikeStatisticsController {
|
||||
}
|
||||
return JsonResult.success(jsonResult.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前用户是否包含超级管理员角色
|
||||
*
|
||||
* @return ebikeIsSuperAdminVo
|
||||
*/
|
||||
private EbikeIsSuperAdminVo checkUserIsSuperAdmin() {
|
||||
String staffId = StpUtil.getLoginIdAsString();
|
||||
CommonStaffInfo staffInfo = StpUtil.getSession().getModel(staffId, CommonStaffInfo.class);
|
||||
if (staffInfo == null) {
|
||||
throw new EbikeException("当前用户信息不存在");
|
||||
}
|
||||
boolean isSuperAdmin = Optional.ofNullable(staffInfo.getRoles())
|
||||
.orElse(Collections.emptyList())
|
||||
.stream()
|
||||
.anyMatch(CommonEbikeRole::getSysAdmin);
|
||||
EbikeIsSuperAdminVo isSuperAdminVo = new EbikeIsSuperAdminVo();
|
||||
isSuperAdminVo.setSuperAdmin(isSuperAdmin);
|
||||
isSuperAdminVo.setOperatorId(staffInfo.getOperatorId());
|
||||
return isSuperAdminVo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
package com.cdzy.operations.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 用户是否是超级管理员参数
|
||||
*
|
||||
* @author yanglei
|
||||
* @since 2026-02-27 09:17
|
||||
*/
|
||||
@Data
|
||||
public class EbikeIsSuperAdminVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 是否超级管理员
|
||||
*/
|
||||
private boolean isSuperAdmin;
|
||||
|
||||
/**
|
||||
* 运营商id
|
||||
*/
|
||||
private Long operatorId;
|
||||
}
|
||||
@ -168,34 +168,7 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
ebikeOrderDetailVo.setUserHelmetFee(BigDecimal.ZERO);
|
||||
//获取费用详情
|
||||
List<EbikePaymentCostDetailVo> details = ebikeOrderDetailService.getOrderDetailsByOrderId(ebikeOrderDetailVo.getOrderId());
|
||||
if (!CollectionUtils.isEmpty(details)) {
|
||||
for (EbikePaymentCostDetailVo payDetailVo : details) {
|
||||
//1-时长费用 2-起步费用 3-运营区调度费用 4-停车区外调度费用 5-禁停区调度费用 6-头盔使用费用
|
||||
switch (payDetailVo.getDetailType()) {
|
||||
case 1 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserDurationFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 2 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserBaseFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 3, 4, 5 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserDispatchFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 6 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserHelmetFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 7 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setDiscountAmount((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ebikeOrderDetailVo;
|
||||
return getEbikeOrderDetailVo(ebikeOrderDetailVo, details);
|
||||
}
|
||||
|
||||
|
||||
@ -276,50 +249,7 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
order.setEndTime(LocalDateTime.now());
|
||||
order.setEndLocation(endDto.getEndPoint());
|
||||
// 关锁
|
||||
EbikeLockVo ebikeLockVo = new EbikeLockVo();
|
||||
ebikeLockVo.setBikeCode(endDto.getBikeCode());
|
||||
ebikeLockVo.setPoint(endDto.getEndPoint());
|
||||
JsonResult<FeignEbikeUserLockDto> jsonResult = operationsFeignClient.lock(ebikeLockVo);
|
||||
if (jsonResult.getCode() != Code.SUCCESS) {
|
||||
throw new EbikeException("关锁失败:" + jsonResult.getMessage());
|
||||
}
|
||||
FeignEbikeUserLockDto data = jsonResult.getData();
|
||||
// 订单费用计算
|
||||
EbikeCostDetailDto ebikeCostDetail = costCalculation(order.getEndTime(), order, data);
|
||||
// 获取总费用
|
||||
BigDecimal totalAmount = ebikeCostDetail.getTotalCost();
|
||||
// 费用为0,不生成支付订单,直接订单已支付,返回订单id
|
||||
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
|
||||
order.setPaymentTime(LocalDateTime.now());
|
||||
order.setTotalAmount(BigDecimal.ZERO);
|
||||
order.setActualAmount(BigDecimal.ZERO);
|
||||
order.setOrderStatus(OrderStatus.PAID);
|
||||
order.setIsFreeOrder(Boolean.TRUE);
|
||||
updateById(order);
|
||||
return order.getOrderId();
|
||||
}
|
||||
order.setOrderStatus(OrderStatus.PENDING_PAYMENT);
|
||||
order.setTotalAmount(totalAmount);
|
||||
order.setActualAmount(totalAmount);
|
||||
order.setIsFreeOrder(Boolean.FALSE);
|
||||
updateById(order);
|
||||
//生成支付订单
|
||||
EbikePayment payment = EbikePayment.builder()
|
||||
.orderId(order.getOrderId())
|
||||
.costPrice(order.getTotalAmount())
|
||||
.paymentMethod(EbikePaymentMethod.WECHAT)
|
||||
.tradeId(StringUtils.generateLongSnowflakeId("tradeId"))
|
||||
.currency("CNY")
|
||||
.userId(endDto.getUserId())
|
||||
.createBy(endDto.getUserId())
|
||||
.operatorId(order.getOperatorId())
|
||||
.tradeStatus(EbikePaymentTradeStatus.NO_PAYMENT)
|
||||
.build();
|
||||
ebikePaymentService.save(payment);
|
||||
// 保存计算订单详情
|
||||
List<EbikeOrderDetail> orderDetails = buildOrderDetails(order, ebikeCostDetail);
|
||||
ebikeOrderDetailService.saveBatch(orderDetails);
|
||||
return order.getOrderId();
|
||||
return processEndOrder(order, endDto.getBikeCode(), endDto.getEndPoint());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -379,36 +309,10 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
ebikeOrderDetailVo.setUserHelmetFee(BigDecimal.ZERO);
|
||||
//获取费用详情
|
||||
List<EbikePaymentCostDetailVo> details = ebikeOrderDetailService.getOrderDetailsByOrderId(orderId);
|
||||
if (!CollectionUtils.isEmpty(details)) {
|
||||
for (EbikePaymentCostDetailVo payDetailVo : details) {
|
||||
//1-时长费用 2-起步费用 3-运营区调度费用 4-停车区外调度费用 5-禁停区调度费用 6-头盔使用费用
|
||||
switch (payDetailVo.getDetailType()) {
|
||||
case 1 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserDurationFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 2 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserBaseFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 3, 4, 5 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserDispatchFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 6 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserHelmetFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 7 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setDiscountAmount((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ebikeOrderDetailVo;
|
||||
return getEbikeOrderDetailVo(ebikeOrderDetailVo, details);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public FeignEbikeOrderStatisticsVo getOrderStatistics(FeignEbikeOrderStatisticsDto dto) {
|
||||
TimeRangeEnum timeRange = TimeRangeEnum.fromCode(dto.getTimeRange());
|
||||
@ -508,52 +412,7 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
|
||||
order.setEndTime(LocalDateTime.now());
|
||||
order.setEndLocation(location);
|
||||
// 关锁
|
||||
EbikeLockVo ebikeLockVo = new EbikeLockVo();
|
||||
ebikeLockVo.setBikeCode(dto.getBikeCode());
|
||||
ebikeLockVo.setPoint(location);
|
||||
|
||||
JsonResult<FeignEbikeUserLockDto> jsonResult = operationsFeignClient.lock(ebikeLockVo);
|
||||
if (jsonResult.getCode() != Code.SUCCESS) {
|
||||
throw new EbikeException("关锁失败:" + jsonResult.getMessage());
|
||||
}
|
||||
FeignEbikeUserLockDto data = jsonResult.getData();
|
||||
// 订单费用计算
|
||||
EbikeCostDetailDto ebikeCostDetail = costCalculation(order.getEndTime(), order, data);
|
||||
// 获取总费用
|
||||
BigDecimal totalAmount = ebikeCostDetail.getTotalCost();
|
||||
// 费用为0,不生成支付订单,直接订单已支付,返回订单id
|
||||
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
|
||||
order.setPaymentTime(LocalDateTime.now());
|
||||
order.setTotalAmount(BigDecimal.ZERO);
|
||||
order.setActualAmount(BigDecimal.ZERO);
|
||||
order.setOrderStatus(OrderStatus.PAID);
|
||||
order.setIsFreeOrder(Boolean.TRUE);
|
||||
updateById(order);
|
||||
return order.getOrderId();
|
||||
}
|
||||
order.setOrderStatus(OrderStatus.PENDING_PAYMENT);
|
||||
order.setTotalAmount(totalAmount);
|
||||
order.setActualAmount(totalAmount);
|
||||
order.setIsFreeOrder(Boolean.FALSE);
|
||||
updateById(order);
|
||||
//生成支付订单
|
||||
EbikePayment payment = EbikePayment.builder()
|
||||
.orderId(order.getOrderId())
|
||||
.costPrice(order.getTotalAmount())
|
||||
.paymentMethod(EbikePaymentMethod.WECHAT)
|
||||
.tradeId(StringUtils.generateLongSnowflakeId("tradeId"))
|
||||
.currency("CNY")
|
||||
.userId(order.getUserId())
|
||||
.createBy(order.getUserId())
|
||||
.operatorId(order.getOperatorId())
|
||||
.tradeStatus(EbikePaymentTradeStatus.NO_PAYMENT)
|
||||
.build();
|
||||
ebikePaymentService.save(payment);
|
||||
// 保存计算订单详情
|
||||
List<EbikeOrderDetail> orderDetails = buildOrderDetails(order, ebikeCostDetail);
|
||||
ebikeOrderDetailService.saveBatch(orderDetails);
|
||||
return order.getOrderId();
|
||||
return processEndOrder(order, dto.getBikeCode(), location);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -757,4 +616,99 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
.where(EBIKE_ORDER.ORDER_STATUS.eq(OrderStatus.IN_PROGRESS).or(EBIKE_ORDER.ORDER_STATUS.eq(OrderStatus.PENDING_PAYMENT)));
|
||||
return ebikeOrderTransactionMapper.selectOneByQuery(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成订单明细
|
||||
*
|
||||
* @param ebikeOrderDetailVo 用户订单参数
|
||||
* @param details 费用明细
|
||||
* @return 订单明细
|
||||
*/
|
||||
private EbikeOrderDetailVo getEbikeOrderDetailVo(EbikeOrderDetailVo ebikeOrderDetailVo, List<EbikePaymentCostDetailVo> details) {
|
||||
if (!CollectionUtils.isEmpty(details)) {
|
||||
for (EbikePaymentCostDetailVo payDetailVo : details) {
|
||||
//1-时长费用 2-起步费用 3-运营区调度费用 4-停车区外调度费用 5-禁停区调度费用 6-头盔使用费用
|
||||
switch (payDetailVo.getDetailType()) {
|
||||
case 1 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserDurationFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 2 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserBaseFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 3, 4, 5 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserDispatchFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 6 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setUserHelmetFee((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
case 7 -> {
|
||||
BigDecimal current = payDetailVo.getDetailAmount();
|
||||
ebikeOrderDetailVo.setDiscountAmount((current != null ? current : BigDecimal.ZERO));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ebikeOrderDetailVo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束订单
|
||||
*
|
||||
* @param order 订单信息
|
||||
* @param bikeCode 车辆编号
|
||||
* @param endPoint 结束位置
|
||||
* @return 订单id
|
||||
*/
|
||||
private Long processEndOrder(EbikeOrder order, String bikeCode, Point endPoint) {
|
||||
// 关锁
|
||||
EbikeLockVo ebikeLockVo = new EbikeLockVo();
|
||||
ebikeLockVo.setBikeCode(bikeCode);
|
||||
ebikeLockVo.setPoint(endPoint);
|
||||
|
||||
JsonResult<FeignEbikeUserLockDto> jsonResult = operationsFeignClient.lock(ebikeLockVo);
|
||||
if (jsonResult.getCode() != Code.SUCCESS) {
|
||||
throw new EbikeException("关锁失败:" + jsonResult.getMessage());
|
||||
}
|
||||
FeignEbikeUserLockDto data = jsonResult.getData();
|
||||
// 订单费用计算
|
||||
EbikeCostDetailDto ebikeCostDetail = costCalculation(order.getEndTime(), order, data);
|
||||
// 获取总费用
|
||||
BigDecimal totalAmount = ebikeCostDetail.getTotalCost();
|
||||
// 费用为0,不生成支付订单,直接订单已支付,返回订单id
|
||||
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
|
||||
order.setPaymentTime(LocalDateTime.now());
|
||||
order.setTotalAmount(BigDecimal.ZERO);
|
||||
order.setActualAmount(BigDecimal.ZERO);
|
||||
order.setOrderStatus(OrderStatus.PAID);
|
||||
order.setIsFreeOrder(Boolean.TRUE);
|
||||
updateById(order);
|
||||
return order.getOrderId();
|
||||
}
|
||||
order.setOrderStatus(OrderStatus.PENDING_PAYMENT);
|
||||
order.setTotalAmount(totalAmount);
|
||||
order.setActualAmount(totalAmount);
|
||||
order.setIsFreeOrder(Boolean.FALSE);
|
||||
updateById(order);
|
||||
//生成支付订单
|
||||
EbikePayment payment = EbikePayment.builder()
|
||||
.orderId(order.getOrderId())
|
||||
.costPrice(order.getTotalAmount())
|
||||
.paymentMethod(EbikePaymentMethod.WECHAT)
|
||||
.tradeId(StringUtils.generateLongSnowflakeId("tradeId"))
|
||||
.currency("CNY")
|
||||
.userId(order.getUserId())
|
||||
.createBy(order.getUserId())
|
||||
.operatorId(order.getOperatorId())
|
||||
.tradeStatus(EbikePaymentTradeStatus.NO_PAYMENT)
|
||||
.build();
|
||||
ebikePaymentService.save(payment);
|
||||
// 保存计算订单详情
|
||||
List<EbikeOrderDetail> orderDetails = buildOrderDetails(order, ebikeCostDetail);
|
||||
ebikeOrderDetailService.saveBatch(orderDetails);
|
||||
return order.getOrderId();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user