2026-02-27 09:07:24 +08:00

151 lines
5.6 KiB
Java

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.CommonEbikeRole;
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();
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);
// 判断是否超级管理员
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());
}
}