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.CommentOrderDTO;
|
import com.doumee.dao.dto.ConfirmArriveDTO;
|
import com.doumee.dao.dto.CreateOrderDTO;
|
import com.doumee.dao.dto.DriverVerifyDTO;
|
import com.doumee.dao.dto.ShopVerifyDTO;
|
import com.doumee.dao.dto.StoreOutDTO;
|
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()));
|
}
|
|
@LoginShopRequired
|
@ApiOperation(value = "门店订单分页", notes = "门店端,查询存件/取件门店为当前门店的订单")
|
@PostMapping("/shopPage")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "门店token值", required = true)
|
})
|
public ApiResponse<PageData<MyOrderVO>> shopPage(@RequestBody @Validated PageWrap<MyOrderDTO> pageWrap) {
|
return ApiResponse.success("查询成功", ordersService.findShopOrderPage(pageWrap, getShopId()));
|
}
|
|
@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));
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "逾期费用支付", notes = "逾期订单唤起微信支付")
|
@PostMapping("/payOverdueFee/{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<PayResponse> payOverdueFee(@PathVariable Integer orderId) {
|
return ApiResponse.success("操作成功", ordersService.payOverdueFee(orderId, getMemberId()));
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "会员删除订单", notes = "仅已完成/已取消/已退款订单可删除,逻辑删除")
|
@PostMapping("/delete/{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 deleteOrder(@PathVariable Integer orderId) {
|
ordersService.deleteMyOrder(orderId, getMemberId());
|
return ApiResponse.success("删除成功");
|
}
|
|
@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));
|
}
|
|
@LoginShopRequired
|
@ApiOperation(value = "门店确认出库", notes = "取件门店确认出库,订单完成")
|
@PostMapping("/storeOut")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "门店token值", required = true)
|
})
|
public ApiResponse storeOut(@RequestBody @Validated StoreOutDTO dto) {
|
ordersService.confirmStoreOut(dto.getOrderId(), getShopId(), dto.getImages(), dto.getRemark());
|
return ApiResponse.success("出库成功");
|
}
|
|
@LoginShopRequired
|
@ApiOperation(value = "确认顾客到店", notes = "门店确认顾客已到店取件,检查逾期/退款")
|
@PostMapping("/confirmArrived")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "门店token值", required = true)
|
})
|
public ApiResponse confirmArrived(@RequestBody @Validated ConfirmArriveDTO dto) {
|
ordersService.confirmCustomerArrived(dto.getOrderId(), getShopId());
|
return ApiResponse.success("操作成功");
|
}
|
|
@LoginRequired
|
@ApiOperation(value = "订单评价", notes = "已完成且未评价的订单可进行评价")
|
@PostMapping("/comment")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
|
})
|
public ApiResponse comment(@RequestBody @Validated CommentOrderDTO dto) {
|
ordersService.commentOrder(dto, getMemberId());
|
return ApiResponse.success("评价成功");
|
}
|
|
|
}
|