2021与蓝度共同重构项目,服务端
fix
zhanzhiqin
2022-06-30 b7cb5ffc4c21e69d846df29a5a641fcc8946a6e2
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
package com.sandu.ximon.admin.controller;
 
import cn.hutool.core.map.MapUtil;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.security.annotation.AnonymousAccess;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.param.PayParam;
import com.sandu.ximon.admin.pay.alipay.UsrAlipayConfigService;
import com.sandu.ximon.admin.pay.wx.WxFastPayService;
import com.sandu.ximon.admin.service.C3ChargingService;
import com.sandu.ximon.admin.service.C3mChargingChargeService;
import com.sandu.ximon.admin.service.C3mOrderService;
import com.sandu.ximon.admin.utils.AliPayUtils;
import com.sandu.ximon.dao.bo.C3mOrderBo;
import com.sandu.ximon.dao.domain.C3mCharging;
import com.sandu.ximon.dao.domain.C3mOrder;
import com.sandu.ximon.dao.enums.OrderType;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.bind.annotation.*;
 
import java.math.BigDecimal;
import java.util.List;
import java.util.SortedMap;
 
/**
 * @Author liuhaonan
 * @Version 1.0
 */
@RestController
@AllArgsConstructor
@RequestMapping("/v1/c3mOrder")
public class C3mOrderController {
 
    private final C3mOrderService c3mOrderService;
    private final C3ChargingService c3mService;
    private final UsrAlipayConfigService alipayConfigService;
    private final WxFastPayService wxPayService;
    private final C3mChargingChargeService c3mChargingChargeService;
 
 
    /**
     * 退款
     *
     * @return
     */
    @PostMapping("/refond")
    public ResponseVO<Object> refond(@RequestBody PayParam params) {
        if (params.getOutTradeNo().isEmpty() || params.getOutTradeNo() == null) {
            throw new BusinessException("退款参数不能为空");
        }
        // 0.00 用于占位 没有实际用处  退款接口好几个地方调用  不太好改
        return ResponseUtil.success(c3mOrderService.orderRefund(params.getOutTradeNo(),
                0.00));
    }
 
    /**
     * 预付款,生成订单(或直接从redis中获取当前未过期的订单)
     *
     * @return
     */
    @AnonymousAccess
    @PostMapping("/advancePay")
    public ResponseVO<Object> advancePayOrder(@RequestBody PayParam param) throws WxErrorException {
        if (param.getWxCode().isEmpty()) {
            throw new BusinessException("微信code不能为空");
        }
        if (param.getPoleId() == null || param.getSubscribeChargingCapacity() == null) {
            throw new BusinessException("充电桩id或充电容量不能为空");
        }
        if (param.getSubscribeChargingCapacity() < 1) {
            throw new BusinessException("充电容量不能小于1Kw/h");
        }
        //  C3充电桩实体
        C3mCharging c3m = c3mService.getC3mByPoleId(param.getPoleId());
        if (null == c3m) {
            throw new BusinessException("未找到当前充电桩");
        }
        //获取预付金额
        BigDecimal TotalAmount = c3mChargingChargeService.getCostByC3id(c3m.getC3Id(), param.getSubscribeChargingCapacity());
        //转换为double类型
        double totalAmount = TotalAmount.doubleValue();
        //生成订单
        C3mOrder c3mOrderEntity = c3mOrderService.advancePayOrder(param.getPoleId(), c3m, "wxpay"
                , totalAmount, param.getSubscribeChargingCapacity(), param.getWxCode());
        if (null == c3mOrderEntity) {
            throw new BusinessException("该充电桩正被使用!");
        }
 
        param.setOutTradeNo(c3mOrderEntity.getOutTradeNo());
        param.setTotalAmount(c3mOrderEntity.getTotalAmount());
        String s = WxFastPayService.parseWxAmount(param.getTotalAmount().toString());
        //生成微信预付订单
        SortedMap<Object, Object> result = wxPayService.miniAppPay("扫码充电支付(C3充电桩)", param.getOutTradeNo(), Integer.valueOf(s), param.getPoleId(), param.getWxCode());
        return ResponseUtil.success(result);
    }
 
 
    /**
     * 订单状态查询  微信支付
     *
     * @param param
     * @return
     */
    @RequestMapping("/queryOrder")
    public ResponseVO<Object> queryOrder(@RequestBody PayParam param) {
        if (param.getOrderId() == null) {
            throw new BusinessException("请输入正确的订单id");
        }
        C3mOrder order = c3mOrderService.getById(param.getOrderId());
        if (order == null) {
            throw new BusinessException("订单不存在");
        }
        if ((OrderType.ALIPAY.getCode()).equals(order.getOrderType())) {
            return ResponseUtil.success(AliPayUtils.alipayQuery(order.getOutTradeNo(), param.getPoleId()));
        } else if ((OrderType.WXPAY.getCode()).equals(order.getOrderType())) {
            return ResponseUtil.success(wxPayService.WxOrderQuery(param.getPoleId(), order.getOutTradeNo()));
        } else {
            return ResponseUtil.success("支付方式异常");
        }
 
    }
 
    /**
     * 订单列表
     */
    @GetMapping("/list")
    public ResponseVO<Object> list(BaseConditionVO baseConditionVO) {
        List<C3mOrderBo> list = c3mOrderService.orderList(baseConditionVO);
        return ResponseUtil.successPage(list);
    }
 
    /**
     * 获取wx的openid
     */
    @AnonymousAccess
    @PostMapping("/getWxOpenId")
    public ResponseVO<Object> getWxOpenId(@RequestBody PayParam param) throws WxErrorException {
        if (param.getWxCode() == null || param.getPoleId() == null || param.getWxCode().isEmpty()) {
            throw new BusinessException("参数不能为空");
        }
        String openId = wxPayService.getOpenId(param.getPoleId(), param.getWxCode());
        return ResponseUtil.success(MapUtil.builder().put("openId", openId).build());
    }
 
}