package com.doumee.api.web;
|
|
import com.doumee.core.annotation.LoginRequired;
|
import com.doumee.core.annotation.LoginShopRequired;
|
import com.doumee.core.annotation.trace.Trace;
|
import com.doumee.core.model.ApiResponse;
|
import com.doumee.core.model.PageData;
|
import com.doumee.core.model.PageWrap;
|
import com.doumee.dao.dto.CancelOrderDTO;
|
import com.doumee.dao.dto.CreateOrderDTO;
|
import com.doumee.dao.dto.DriverVerifyDTO;
|
import com.doumee.dao.dto.ShopVerifyDTO;
|
import com.doumee.dao.dto.MyOrderDTO;
|
import com.doumee.dao.vo.MyOrderDetailVO;
|
import com.doumee.dao.vo.MyOrderVO;
|
import com.doumee.dao.vo.OverdueFeeVO;
|
import com.doumee.dao.vo.PayResponse;
|
import com.doumee.service.business.OrdersService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.validation.Valid;
|
import java.util.Objects;
|
|
/**
|
* 订单接口
|
*
|
* @Author : Rk
|
* @create 2025/7/15 15:49
|
*/
|
@Api(tags = "订单接口")
|
@Trace(exclude = true)
|
@RestController
|
@RequestMapping("/web/order")
|
@Slf4j
|
public class OrdersApi extends ApiController {
|
|
@Autowired
|
private OrdersService ordersService;
|
|
@Autowired
|
private RedisTemplate<String, Object> redisTemplate;
|
|
@LoginRequired
|
@ApiOperation(value = "创建订单", notes = "创建就地/异地寄存订单,返回微信支付参数")
|
@PostMapping("/create")
|
public ApiResponse<PayResponse> createOrder(@RequestBody @Valid CreateOrderDTO dto) {
|
PayResponse payResponse = ordersService.createOrder(dto, getMemberId());
|
if (Objects.nonNull(payResponse) && StringUtils.isNotBlank(payResponse.getLockKey())) {
|
redisTemplate.delete(payResponse.getLockKey());
|
}
|
return ApiResponse.success("操作成功", payResponse);
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "继续支付", notes = "待支付订单重新唤起微信支付")
|
@PostMapping("/continuePay/{orderId}")
|
public ApiResponse<PayResponse> continuePay(@PathVariable Integer orderId) {
|
return ApiResponse.success("操作成功", ordersService.continuePay(orderId, getMemberId()));
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "会员订单分页", notes = "小程序端,按状态筛选")
|
@PostMapping("/myPage")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
|
})
|
public ApiResponse<PageData<MyOrderVO>> myPage(@RequestBody @Validated PageWrap<MyOrderDTO> pageWrap) {
|
return ApiResponse.success("查询成功", ordersService.findMyOrderPage(pageWrap, getMemberId()));
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "会员订单详情", notes = "小程序端,查询当前会员的订单详情")
|
@GetMapping("/detail/{orderId}")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "path", dataType = "Integer", name = "orderId", value = "订单主键", required = true),
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
|
})
|
public ApiResponse<MyOrderDetailVO> detail(@PathVariable Integer orderId) {
|
return ApiResponse.success("查询成功", ordersService.findMyOrderDetail(orderId, getMemberId()));
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "会员取消订单", notes = "仅异地寄存订单可取消")
|
@PostMapping("/cancel")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
|
})
|
public ApiResponse cancel(@RequestBody @Validated CancelOrderDTO dto) {
|
ordersService.cancelOrder(dto.getOrderId(), getMemberId(), dto.getCancelReason());
|
return ApiResponse.success("操作成功");
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "查询超时费用", notes = "查询订单逾期天数和逾期费用")
|
@GetMapping("/overdueFee/{orderId}")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "path", dataType = "Integer", name = "orderId", value = "订单主键", required = true),
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
|
})
|
public ApiResponse<OverdueFeeVO> overdueFee(@PathVariable Integer orderId) {
|
return ApiResponse.success("查询成功", ordersService.calculateOverdueFee(orderId));
|
}
|
|
@LoginShopRequired
|
@ApiOperation(value = "门店核销收件", notes = "门店通过核销码确认收件/取件")
|
@PostMapping("/shopVerify")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "门店token值", required = true)
|
})
|
public ApiResponse shopVerify(@RequestBody @Validated ShopVerifyDTO dto) {
|
ordersService.shopVerifyOrder(dto.getVerifyCode(), getShopId(), dto.getImages(), dto.getRemark());
|
return ApiResponse.success("核销成功");
|
}
|
|
@LoginShopRequired
|
@ApiOperation(value = "核销司机码", notes = "异地寄存且有取件门店的订单,通过司机核销码确认到店")
|
@PostMapping("/driverVerify")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
|
})
|
public ApiResponse driverVerify(@RequestBody @Validated DriverVerifyDTO dto) {
|
ordersService.driverVerifyOrder(dto.getVerifyCode(), dto.getImages(), dto.getRemark(), getShopId());
|
return ApiResponse.success("核销成功");
|
}
|
|
@LoginShopRequired
|
@ApiOperation(value = "门店订单详情", notes = "门店端查询订单详情,支持订单主键或核销码查询")
|
@GetMapping("/shopDetail")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "门店token值", required = true),
|
@ApiImplicitParam(paramType = "query", dataType = "Integer", name = "orderId", value = "订单主键"),
|
@ApiImplicitParam(paramType = "query", dataType = "String", name = "verifyCode", value = "核销码")
|
})
|
public ApiResponse<MyOrderDetailVO> shopDetail(@RequestParam(required = false) Integer orderId,
|
@RequestParam(required = false) String verifyCode) {
|
return ApiResponse.success("查询成功", ordersService.findShopOrderDetail(orderId, verifyCode));
|
}
|
|
|
}
|