diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeStatisticsController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeStatisticsController.java index e57af88..ba62ff9 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeStatisticsController.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeStatisticsController.java @@ -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; + } } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeIsSuperAdminVo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeIsSuperAdminVo.java new file mode 100644 index 0000000..4f98744 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeIsSuperAdminVo.java @@ -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; +} 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 e0d5083..5bff4a8 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 @@ -168,34 +168,7 @@ public class EbikeOrderServiceImpl extends ServiceImpl 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 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 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 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 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 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 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 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 orderDetails = buildOrderDetails(order, ebikeCostDetail); + ebikeOrderDetailService.saveBatch(orderDetails); + return order.getOrderId(); + } }