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.getOpenId().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.getOpenId());
|
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.getOpenId());
|
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());
|
}
|
|
}
|