MrShi
昨天 7ee466ebc953bb5640bcf42f2b8e2a87aa471c21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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));
    }
 
 
}