package com.xiaopeng.operation.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.model.operation.XpPricing;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.controller.BaseController;
import com.xiaopeng.common.core.web.domain.AjaxResult;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.operation.dto.XpOrderDto;
import com.xiaopeng.operation.service.XpPricingService;
import com.xiaopeng.api.vo.operation.RouteAndFareVo;
import com.xiaopeng.operation.vo.SaveOrderVo;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
/**
*
* 费项管理 前端控制器
*
*
* @author mitao
* @since 2026-02-03
*/
@Slf4j
@RestController
@RequestMapping("")
@Api(tags = "费用管理")
public class XpPricingController extends BaseController {
private final XpPricingService xpPricingService;
public XpPricingController(XpPricingService xpPricingService) {
this.xpPricingService = xpPricingService;
}
@PostMapping("/base/v1/mini-program/navigation/route-and-fare")
@ApiOperation(value = "导航-获取路线和费用",tags = {"小程序-获取路线和费用"},response = RouteAndFareVo.class)
@XpClientCheck(checkToken = false, checkOtpToken = true)
public R getRouteAndFare(@RequestBody @Valid RouteAndFareDto routeAndFareDto, HttpServletRequest request) {
// uid已通过拦截器otp校验,可以直接使用
String uid = request.getHeader("XP-Uid");
return R.ok(xpPricingService.getRouteAndFare(routeAndFareDto,uid));
}
// 根据开通城市 获取定价
@GetMapping("/getPricingByCityId/{cityId}")
public R getPricingByCityId(@PathVariable("cityId")Long cityId) {
XpPricing pricing = xpPricingService.lambdaQuery().eq(XpPricing::getCityId, cityId).last("limit 1").one();
return R.ok(pricing);
}
@GetMapping("/base/v1/mini-program/pricing/rules/{openCityId}")
@ApiOperation(value = "获取费用规则",tags = {"小程序-根据开通城市获取费用规则"},response = String.class)
public R> getPricingRules(@PathVariable Long openCityId) {
XpPricing xpPricing = xpPricingService.getOne(new LambdaQueryWrapper().eq(XpPricing::getCityId, openCityId).eq(XpPricing::getPricingType, 1).last("limit 1"));
if(xpPricing!=null){
return R.ok(xpPricing.getPriceRule());
}
return R.ok("");
}
/**
* 获取等待时间
* @param dto
* @return
*/
@PostMapping("/base/v1/mini-program/pricing/getWaitTime")
@ApiOperation(value = "获取等待时间",tags = {"小程序-获取等待时间"},response = Integer.class)
public R getWaitTime(@RequestBody LonLatDto dto){
return R.ok(xpPricingService.getWaitTime(dto.getLongitude(),dto.getLatitude()));
}
/**
* 播单
*/
@PostMapping("/base/v1/mini-program/order/save")
@ApiOperation(value = "保存订单",tags = {"小程序-保存订单"})
@XpClientCheck(checkToken = false, checkOtpToken = true)
public R saveOrder(@RequestBody @Validated XpOrderDto dto, HttpServletRequest request) {
String uid = request.getHeader("XP-Uid");
Long l = xpPricingService.saveOrder(dto, uid);
SaveOrderVo saveOrderVo = new SaveOrderVo();
saveOrderVo.setOrderId(l);
return R.ok(saveOrderVo);
}
}