无关风月
2024-10-14 039a33d1bfa6ef041161666bbd120c34086fe7c1
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
package com.xinquan.order.controller.client;
 
 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xinquan.common.core.domain.R;
import com.xinquan.common.core.utils.page.BeanUtils;
import com.xinquan.common.core.utils.page.CollUtils;
import com.xinquan.common.core.utils.page.PageDTO;
import com.xinquan.common.core.web.domain.BaseModel;
import com.xinquan.common.security.utils.SecurityUtils;
import com.xinquan.course.api.feign.RemoteCourseService;
import com.xinquan.meditation.api.domain.Meditation;
import com.xinquan.meditation.api.feign.RemoteMeditationService;
import com.xinquan.order.api.domain.Order;
import com.xinquan.order.domain.OrderPaymentRecord;
import com.xinquan.order.domain.vo.ClientPlaceOrderVO;
import com.xinquan.order.service.OrderPaymentRecordService;
import com.xinquan.order.service.OrderService;
import com.xinquan.course.api.domain.OrderCourseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
 
/**
 * <p>
 * 订单表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-08-21
 */
@RestController
@RequiredArgsConstructor
@Api(tags = {"用户端-订单相关接口"})
@RequestMapping("/client/order/order")
public class ClientOrderController {
 
    @Resource
    private OrderService orderService;
    @Resource
    private OrderPaymentRecordService orderPaymentRecordService;
    @Resource
    private RemoteCourseService remoteCourseService;
    @Resource
    private RemoteMeditationService remoteMeditationService;
    @PostMapping("/myOrderCourse")
    @ApiOperation(value = "我的已购",tags = "我的已购")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "state", value = "1冥想 2课程", dataType = "Integer", required = true),
            @ApiImplicitParam(name = "pageCurr", value = "分页参数,当前页码", dataType = "Integer", required = true),
            @ApiImplicitParam(name = "pageSize", value = "分页参数,每页数量", dataType = "Integer", required = true)
    })
    public R<PageDTO<OrderCourseVO>> balanceList(Integer state, Integer pageCurr, Integer pageSize) {
        Long userId = SecurityUtils.getUserId();
        if (userId==0)return R.tokenError("登录失效");
        Page<Order> page = orderService.lambdaQuery()
                .eq(Order::getAppUserId, userId)
                .eq(Order::getOrderFrom, state)
                .ne(Order::getPaymentStatus, 3)
                .orderByDesc(BaseModel::getCreateTime).page(new Page<>(pageCurr, pageSize));
        if (CollUtils.isEmpty(page.getRecords())){
            PageDTO<OrderCourseVO> empty = PageDTO.empty(page);
            return R.ok(empty);
        }
        PageDTO<OrderCourseVO> res = PageDTO.of(page, OrderCourseVO.class);
        for (OrderCourseVO orderCourseVO : res.getList()) {
            switch (orderCourseVO.getChargeType()){
                case 1:
                    Meditation data1 = remoteMeditationService.getMeditationById(orderCourseVO.getBusinessId()).getData();
                    orderCourseVO.setCourseTitle(data1.getMeditationTitle());
                    orderCourseVO.setDescription(data1.getCoverDescription());
                    orderCourseVO.setCoverUrl(data1.getCoverUrl());
                    orderCourseVO.setGeneralPrice(data1.getGeneralPrice());
                    orderCourseVO.setIosPrice(data1.getIosPrice());
                    orderCourseVO.setCount(data1.getRealLearnedNum()+data1.getVirtualLearnedNum());
                    break;
                case 2:
                    OrderCourseVO data = remoteCourseService.getCourseCategoryList(orderCourseVO).getData();
                    BeanUtils.copyProperties(data, orderCourseVO);
                    break;
 
            }
 
        }
        return R.ok(res);
    }
    /**
     * 根据邀请用户ids 查询对应佣金
     */
    @GetMapping("/getCommissionByUserIds/{userIds}")
    public R<String> getCommissionByUserIds(@PathVariable("userIds") String userIds) {
        String[] split = userIds.split(",");
        StringBuilder stringBuilder = new StringBuilder();
        for (String s : split) {
            List<Order> list = orderService.lambdaQuery().eq(Order::getAppUserId, s)
                    .eq(Order::getPaymentStatus, 2).list();
            BigDecimal commissionAmount = list.stream()
                    .filter(t -> t.getCommissionAmount()!= null)
                    .map(Order::getCommissionAmount)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            stringBuilder.append(commissionAmount).append(",");
        }
        StringBuilder stringBuilder1 = stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        return R.ok(stringBuilder1.toString());
    }
 
    /**
     * 创建待支付订单
     *
     * @param targetId    目标id
     * @param orderFrom   订单来源 1=冥想音频 2=课程
     * @param receiverId  被赠送课程APP用户id
     * @param balanceFlag 是否使用余额抵扣 1=是 2=否
     * @param payType     支付方式 1=微信 2=支付宝
     * @return 下单返回数据视图对象
     * @see com.xinquan.order.domain.vo.ClientPlaceOrderVO
     */
    @PostMapping("/placeOrder")
    @ApiOperation(value = "创建待支付订单", notes = "微信|支付宝")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "targetId", value = "目标id", dataType = "Long", required = true),
            @ApiImplicitParam(name = "orderFrom", value = "订单来源 1=冥想音频 2=课程 3=购买会员 4充值", dataType = "Integer", required = true),
            @ApiImplicitParam(name = "receiverId", value = "被赠送课程APP用户id", dataType = "Long", required = false),
            @ApiImplicitParam(name = "balanceFlag", value = "是否使用余额抵扣 1=是 2=否", dataType = "Integer", required = false),
            @ApiImplicitParam(name = "payType", value = "支付方式 1=微信 2=支付宝", dataType = "Integer", required = false)
    })
    public R<ClientPlaceOrderVO> placeOrder(
            @RequestParam(value = "targetId") Long targetId,
            @RequestParam(value = "orderFrom") Integer orderFrom,
            @RequestParam(value = "receiverId", required = false) Long receiverId,
            @RequestParam(value = "balanceFlag") Integer balanceFlag,
            @RequestParam(value = "payType") Integer payType) {
        try {
            return R.ok(
                    orderService.placeOrder(targetId, orderFrom, receiverId,
                            balanceFlag, payType));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 远程调用 根据用户id 查询充值金额
     */
    @PostMapping("/queryChargeByUserId/{userId}")
    public R<String> queryChargeByUserId(@PathVariable("userId") Long userId) {
        BigDecimal reduce = orderService.lambdaQuery()
                .eq(Order::getAppUserId, userId)
                .eq(Order::getOrderFrom, 4)
                .eq(Order::getPaymentStatus, 2)
                .list().stream().filter(t -> t.getTotalAmount() != null)
                .map(Order::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
        return R.ok(reduce.toString());
    }
    /**
     * 远程调用 根据订单id 查询订单明细
     */
    @PostMapping("/getOrderById/{orderId}")
    public R<Order> getOrderById(@PathVariable("orderId") Long orderId) {
        Long userId = SecurityUtils.getUserId();
        if (userId==0)return R.tokenError("登录失效");
        Order one = orderService.lambdaQuery()
                .eq(Order::getId, orderId).one();
        if (one!=null){
            OrderPaymentRecord two = orderPaymentRecordService.lambdaQuery()
                    .eq(OrderPaymentRecord::getOrderId, orderId)
                    .ne(OrderPaymentRecord::getPaymentType, 4)
                    .eq(OrderPaymentRecord::getPaymentStatus, 2).one();
            if (two==null){
                one.setRemark("余额支付");
            }else{
                switch (two.getPaymentType()){
                    case 1:
                        one.setRemark("微信支付");
                        break;
                    case 2:
                        one.setRemark("支付宝支付");
                        break;
                    case 3:
                        one.setRemark("苹果内购");
                }
            }
            if (one.getCommissionId()!=null){
                switch (one.getOrderFrom()){
                    case 1:
                        one.setRemark("购买疗愈");
                        break;
                    case 2:
                        one.setRemark("购买课程");
                        break;
                    case 3:
                        one.setRemark("购买会员");
                        case 4:
                        one.setRemark("充值");
                }
            }
            return R.ok(one);
        }
        return R.ok();
    }
 
 
}