package com.xiaopeng.itinerary.controller;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.xiaopeng.api.dto.map.RouteAndFareDto;
|
import com.xiaopeng.api.dto.operation.LonLatDto;
|
import com.xiaopeng.api.model.operation.XpPricing;
|
import com.xiaopeng.api.vo.operation.RouteAndFareVo;
|
import com.xiaopeng.common.core.domain.R;
|
import com.xiaopeng.common.core.web.controller.BaseController;
|
import com.xiaopeng.common.redis.service.RedisService;
|
import com.xiaopeng.itinerary.dto.XpOrderDto;
|
import com.xiaopeng.itinerary.service.IXpGeoQueryEntityService;
|
import com.xiaopeng.itinerary.service.XpPricingService;
|
import com.xiaopeng.api.vo.HotFixInfoVo;
|
import com.xiaopeng.itinerary.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;
|
|
/**
|
* <p>
|
* 费项管理 前端控制器
|
* </p>
|
*
|
* @author mitao
|
* @since 2026-02-03
|
*/
|
|
@Slf4j
|
@RestController
|
@RequestMapping("")
|
@Api(tags = "费用管理")
|
public class XpPricingController extends BaseController {
|
|
private final XpPricingService xpPricingService;
|
private final IXpGeoQueryEntityService xpGeoQueryEntityService;
|
private final RedisService redisService;
|
|
|
public XpPricingController(XpPricingService xpPricingService, IXpGeoQueryEntityService xpGeoQueryEntityService, RedisService redisService) {
|
this.xpPricingService = xpPricingService;
|
this.xpGeoQueryEntityService = xpGeoQueryEntityService;
|
this.redisService = redisService;
|
|
}
|
|
|
@PostMapping("/base/v1/mini-program/navigation/route-and-fare")
|
@ApiOperation(value = "导航-获取路线和费用", tags = {"小程序-获取路线和费用"}, response = RouteAndFareVo.class)
|
@XpClientCheck(checkToken = false, checkOtpToken = true)
|
public R<RouteAndFareVo> getRouteAndFare(@RequestBody @Valid RouteAndFareDto routeAndFareDto, HttpServletRequest request) {
|
// uid已通过拦截器otp校验,可以直接使用
|
String uid = request.getHeader("XP-Uid");
|
return R.ok(xpPricingService.getRouteAndFare(routeAndFareDto, uid));
|
}
|
|
|
|
@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<XpPricing>().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<Integer> 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");
|
String orderId = xpPricingService.saveOrder(dto, uid);
|
if(orderId==null){
|
String language = request.getHeader("language");
|
if(language==null){
|
return R.ok("站点已停止运营");
|
}
|
if("1".equals( language)){
|
return R.ok("站点已停止运营");
|
}
|
if("2".equals( language)){
|
return R.ok("This site has ceased operations");
|
}
|
}
|
SaveOrderVo saveOrderVo = new SaveOrderVo();
|
saveOrderVo.setOrderId(orderId);
|
return R.ok(saveOrderVo);
|
}
|
|
/**
|
* 获取热修复信息
|
* @param
|
* @param
|
* @return
|
*/
|
@GetMapping("/base/v1/mini-program/order/getHotFixInfo")
|
@ApiOperation(value = "获取热修复信息", tags = {"小程序-获取热修复信息"}, response = HotFixInfoVo.class)
|
public R<HotFixInfoVo> getHotFixInfo() {
|
Object cacheObject = redisService.getCacheObject("HOT_FIX_INFO");
|
if(cacheObject!=null){
|
HotFixInfoVo hotFixInfoVo = (HotFixInfoVo) cacheObject;
|
return R.ok(hotFixInfoVo);
|
}
|
HotFixInfoVo hotFixInfoVo = new HotFixInfoVo();
|
hotFixInfoVo.setHotfixStatus(0);
|
return R.ok(hotFixInfoVo);
|
}
|
|
|
|
@GetMapping("/base/v1/mini-program/order/testOrder")
|
public R testOrder(Long orderId, Integer status){
|
xpPricingService.testOrder(orderId, status);
|
return R.ok();
|
}
|
|
|
}
|