1
sunshine
2024-11-05 92a9e53e82c74d36a72eb92f93777bbb16e2db73
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
package com.nova.sankuai.controller.v1.platform;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nova.sankuai.domain.dto.*;
import com.nova.sankuai.domain.entity.AlipayRefundRecord;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.nova.sankuai.domain.entity.AlipayOrderInfo;
import com.nova.sankuai.domain.vo.AlipayOrderInfoVO;
import com.nova.sankuai.infra.config.CommonException;
import com.nova.sankuai.infra.utils.Jsr303Validator;
import com.nova.sankuai.infra.utils.ResultJson;
import com.nova.sankuai.security.UserDetail;
import com.nova.sankuai.service.IAlipayPlatformService;import com.nova.sankuai.service.IVipCardOrderService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Map;
 
@Slf4j
@RestController
public class AlipayPlatformController {
 
    private final IAlipayPlatformService alipayPlatformService;
    private final Jsr303Validator validator;
    @Resource
    private IVipCardOrderService vipCardOrderService;
 
    public AlipayPlatformController(IAlipayPlatformService alipayPlatformService,
                                    Jsr303Validator validator) {
        this.alipayPlatformService = alipayPlatformService;
        this.validator = validator;
    }
 
    @PostMapping(value = "/api/v2/alipay-platform/order-create")
    ResultJson<String> orderCreateV2(@RequestBody String encodedString) {
        AlipayOrderCreateDTO createDTO = alipayPlatformService.decode(encodedString, AlipayOrderCreateDTO.class);
        if (validator.isLegal(createDTO)) {
            String form = alipayPlatformService.orderCreate(createDTO);
            return ResultJson.ok(form);
        }
        throw new CommonException(validator.getValidationMsg(createDTO));
    }
 
    @PostMapping(value = "/api/v1/alipay-platform/order-create")
    ResultJson<Map<String, String>> orderCreate(@RequestBody String encodedString) {
        AlipayOrderCreateDTO createDTO = alipayPlatformService.decode(encodedString, AlipayOrderCreateDTO.class);
        if (validator.isLegal(createDTO)) {
            String form = alipayPlatformService.orderCreate(createDTO);
            return ResultJson.ok(alipayPlatformService.sign(form));
        }
        throw new CommonException(validator.getValidationMsg(createDTO));
    }
 
    @PostMapping("/api/v1/alipay-platform/order-query")
    ResultJson<Map<String, String>> orderQuery(@RequestBody String encodedString) {
        AlipayOrderQueryDTO queryDTO = alipayPlatformService.decode(encodedString, AlipayOrderQueryDTO.class);
        if (validator.isLegal(queryDTO)) {
            AlipayOrderInfoVO res = alipayPlatformService.orderQuery(queryDTO);
            return ResultJson.ok(alipayPlatformService.sign(alipayPlatformService.toJsonString(res)));
        }
        throw new CommonException(validator.getValidationMsg(queryDTO));
    }
 
    @PostMapping("/api/v1/alipay-platform/notify")
    String alipayNotify(HttpServletRequest request) {
        Map<String, String[]> paramMap = request.getParameterMap();
        alipayPlatformService.handleNotify(paramMap);
        return "success";
    }
 
    @ApiOperation("退款申请提交")
    @PostMapping("/api/v2/alipay-platform/refund-submit")
    ResultJson<String> refundSubmit(@RequestBody AlipayRefundDTO refundDTO) {
        alipayPlatformService.refund(refundDTO);
        return ResultJson.ok("退款申请提交成功");
    }
 
    @ApiOperation("退款金额确定")
    @PostMapping("/api/v2/alipay-platform/refund-amount")
    ResultJson<BigDecimal> refundAmount(@AuthenticationPrincipal UserDetail user) {
        return ResultJson.ok(alipayPlatformService.refundAmountCalculate(user));
    }
 
    @ApiOperation("退款申请分页查询")
    @PostMapping("/api/v2/alipay-platform/refund-list")
    ResultJson<IPage<AlipayRefundRecord>> refundList(@RequestBody AlipayRefundQueryDTO queryDTO) {
        IPage<AlipayRefundRecord> page = alipayPlatformService.refundList(queryDTO);
        return ResultJson.ok(page);
    }
 
    @ApiOperation("退款申请状态修改")
    @PostMapping("/api/v2/alipay-platform/refund-finish")
    ResultJson<String> refundFinish(@RequestBody AlipayRefundFinishDTO finishDTO) {
        alipayPlatformService.refundFinish(finishDTO);
        return ResultJson.ok("退款处理完成");
    }
 
    @PostMapping("/api/v1/alipay-platform/notifyInnerVipOrder")
    @ApiOperation(value = "回调更新内部会员服务订单信息")
    public String notifyInnerVipOrder(@RequestBody String params) {
        try {
            log.info("回调更新内部会员服务订单信息开始,原始参数:" + params);
            JSONObject json = JSONUtil.parseObj(params);
            String encodedString = json.getStr("value");
            AlipayOrderInfo alipayOrderInfo = alipayPlatformService.decodeByPublicKey(encodedString, AlipayOrderInfo.class);
            vipCardOrderService.notifyInnerVipOrder(alipayOrderInfo);
            return "ok";
        } catch (Exception e) {
            return "fail";
        }
    }
}