package com.cdzy.operations.controller; import cn.dev33.satoken.stp.StpUtil; import com.cdzy.common.enums.Code; import com.cdzy.common.ex.EbikeException; import com.cdzy.common.model.dto.ResGPSDto; import com.cdzy.common.model.request.PageParam; 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.service.EbikeEcuInfoService; import com.cdzy.operations.utils.RedisUtil; import com.ebike.feign.clients.UserFeignClient; import com.ebike.feign.model.dto.FeignDiffOperatorOrderList; import com.ebike.feign.model.dto.FeignEbikeCloseOrderDto; import com.ebike.feign.model.dto.FeignEbikeOrderStatisticsDto; import com.ebike.feign.model.dto.FeignEbikePaymentAmountDto; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Collections; import java.util.Optional; /** * 用户订单统计 控制层 * * @author yanglei * @since 2026-01-16 15:15 */ @RestController @RequestMapping("/statistics") public class EbikeStatisticsController { @Resource private UserFeignClient userFeignClient; @Resource private RedisUtil redisUtil; @Resource private EbikeEcuInfoService ecuInfoService; /** * 查询用户订单统计 * * @param dto 参数参数 * @return 用户订单数据统计 */ @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(role -> "super_admin".equals(role.getRoleCode())); // 判断是否超级管理员 if (!isSuperAdmin) { dto.setOperatorId(staffInfo.getOperatorId()); } JsonResult jsonResult = userFeignClient.getOrderStatistics(dto); if (jsonResult.getCode() != Code.SUCCESS) { throw new EbikeException(jsonResult.getMessage()); } return JsonResult.success(jsonResult.getData()); } /** * 根据车辆编号修改当前订单金额 * * @param dto 车辆请求参数 */ @PostMapping("updateOrderAmount") public JsonResult updateOrderAmount(@RequestBody @Validated FeignEbikePaymentAmountDto dto) { JsonResult jsonResult = userFeignClient.updateOrderAmount(dto); if (jsonResult.getCode() != Code.SUCCESS) { throw new EbikeException(jsonResult.getMessage()); } return JsonResult.success(); } /** * 结束用户骑行订单 * * @param dto 结束骑行参数 * @return 订单id */ @PostMapping("/closeOrder") public JsonResult closeBikeOrder(@RequestBody @Validated EbikeCloseOrderDto dto) { // 根据车辆编号获取车辆ecu EbikeEcuInfo ebikeEcuInfo = ecuInfoService.getEcu(dto.getBikeCode()); // 从redis获取车辆当前位置 ResGPSDto resGPSDto = (ResGPSDto) redisUtil.getEcu(ebikeEcuInfo.getEcuSn()); FeignEbikeCloseOrderDto ebikeCloseOrderDto = FeignEbikeCloseOrderDto.builder() .bikeCode(dto.getBikeCode()) .lng(resGPSDto.getLongitude()) .lat(resGPSDto.getLatitude()) .build(); //远程调用用户端关锁结束骑行 JsonResult jsonResult = userFeignClient.closeOrder(ebikeCloseOrderDto); if (jsonResult.getCode() != Code.SUCCESS) { throw new EbikeException(jsonResult.getMessage()); } return JsonResult.success(jsonResult.getData()); } /** * 不同运营商获取骑行中与待支付的订单列表 * * @return 订单列表 */ @GetMapping("getDiffOperatorOrderList") public JsonResult getDiffOperatorOrderList(String bikeCode, PageParam pageParam) { FeignDiffOperatorOrderList dto = new FeignDiffOperatorOrderList(); 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(role -> "super_admin".equals(role.getRoleCode())); // 判断是否超级管理员 if (!isSuperAdmin) { dto.setOperatorId(staffInfo.getOperatorId()); } dto.setBikeCode(bikeCode); dto.setPageParam(pageParam); JsonResult jsonResult = userFeignClient.getDiffOperatorOrderList(dto); if (jsonResult.getCode() != Code.SUCCESS) { throw new EbikeException(jsonResult.getMessage()); } return JsonResult.success(jsonResult.getData()); } }