xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java
@@ -282,4 +282,9 @@ @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号(商户订单号)") @TableField("auth_order_id") private String authOrderId; @ApiModelProperty(value = "信用下单接口获取的业务id") @TableField("business_order_id") private String businessOrderId; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -42,6 +42,8 @@ import com.xiaopeng.order.config.BluetoothDebugConfig; import com.xiaopeng.order.dto.OrderNavigationDto; import com.xiaopeng.api.model.order.OrderTrajectory; import com.xiaopeng.order.model.dto.CreditPayCallDto; import com.xiaopeng.order.model.dto.CreditPaySuccessCallDto; import com.xiaopeng.order.model.dto.XpOrderCommentDto; import com.xiaopeng.order.model.dto.XpOrderOperateDTO; import com.xiaopeng.order.model.dto.XpOrderPayDto; @@ -50,6 +52,7 @@ import com.xiaopeng.order.model.query.XpHistoryOrderListQuery; import com.xiaopeng.order.model.query.XpOrderExcelQuery; import com.xiaopeng.order.model.query.XpOrderPageQuery; import com.xiaopeng.order.model.vo.CreditPayCallVo; import com.xiaopeng.order.model.vo.XpOrderDetailVO; import com.xiaopeng.order.model.vo.XpOrderHistoryVO; import com.xiaopeng.order.model.vo.XpOrderPageVO; @@ -930,4 +933,57 @@ } /** * 信用支付下单回调 */ @PostMapping("/base/v1/mini-program/order/creditPayCall") @ApiOperation(value = "信用支付下单回调", tags = {"小程序-发起支付"}, response = CreditPayCallVo.class) public CreditPayCallVo creditPayCall(@RequestBody CreditPayCallDto dto) { CreditPayCallVo vo = new CreditPayCallVo(); vo.setRetCode("0"); vo.setRetMsg("成功"); if (dto == null || (StringUtils.isBlank(dto.getAuthOrderId()) || StringUtils.isBlank(dto.getBusinessOrderId()))) { return vo; } LambdaQueryWrapper<XpOrder> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(XpOrder::getAuthOrderId, dto.getAuthOrderId()); XpOrder order = xpOrderService.getOne(wrapper.last("LIMIT 1")); if (order == null) { return vo; } if ("SUCCESS".equals(dto.getCreditOrderStatus())) { // 发起扣款 xpOrderService.creditPayCall(order); } return vo; } /** * 信用扣款回调 */ @PostMapping("/base/v1/mini-program/order/creditPaySuccessCall") @ApiOperation(value = "信用扣款回调", tags = {"小程序-发起支付"}, response = CreditPayCallVo.class) public CreditPayCallVo creditPaySuccessCall(@RequestBody CreditPaySuccessCallDto dto) { LambdaQueryWrapper<XpOrder> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(XpOrder::getAuthOrderId, dto.getAuthOrderId()); XpOrder order = xpOrderService.getOne(wrapper.last("LIMIT 1")); if(dto.getPayStatus()==1){ order.setStatus(9); order.setAppUserId(null); xpOrderService.updateById(order); CreditPayCallVo vo = new CreditPayCallVo(); vo.setRetCode("0"); vo.setRetMsg("成功"); return vo; } return null; } } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPayCallDto.java
New file @@ -0,0 +1,22 @@ package com.xiaopeng.order.model.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "信用支付下单回调请求") public class CreditPayCallDto { @ApiModelProperty(value = "业务方订单号") private String businessOrderId; @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号") private String authOrderId; @ApiModelProperty(value = "微信支付分订单状态:SUCCESS=授权成功,CLOSED=订单关闭") private String creditOrderStatus; @ApiModelProperty(value = "支付类型") private String payType; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPaySuccessCallDto.java
New file @@ -0,0 +1,93 @@ package com.xiaopeng.order.model.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @Data @ApiModel(value = "信用扣款回调请求") public class CreditPaySuccessCallDto { @ApiModelProperty(value = "业务订单号") private String businessOrderId; @ApiModelProperty(value = "款项分类") private String category; @ApiModelProperty(value = "支付平台订单号") private String orderId; @ApiModelProperty(value = "支付类型:13=微信支付分") private Integer payType; @ApiModelProperty(value = "支付场景,APP支付:3,支付宝小程序:9,默认未知场景:99") private Integer payScene; @ApiModelProperty(value = "订单状态:0=未支付,1=支付成功,2=支付失败,3=订单关闭") private Integer payStatus; @ApiModelProperty(value = "订单金额,单位:分") private Long payFee; @ApiModelProperty(value = "订单标题") private String orderName; @ApiModelProperty(value = "用户ID") private Long userId; @ApiModelProperty(value = "订单创建时间") private Date createTime; @ApiModelProperty(value = "订单失效时间") private Date expireTime; @ApiModelProperty(value = "支付完成时间") private Date payFinishTime; @ApiModelProperty(value = "退款完成时间") private Date refundFinishTime; @ApiModelProperty(value = "业务扩展数据") private String extData; @ApiModelProperty(value = "备注1") private String remark1; @ApiModelProperty(value = "POS渠道") private String posChannel; @ApiModelProperty(value = "渠道商户号") private String channelAccountId; @ApiModelProperty(value = "信用单号") private String authOrderId; @ApiModelProperty(value = "信用单请求渠道单号") private String authOperationId; @ApiModelProperty(value = "渠道订单号") private String channelOrderId; @ApiModelProperty(value = "交易发起时间") private String initiateTime; @ApiModelProperty(value = "交易日期:yyyyMMdd") private String txDate; @ApiModelProperty(value = "交易时刻:HHmmss") private String txTime; @ApiModelProperty(value = "支付宝PID") private String pid; @ApiModelProperty(value = "实收金额,单位:分") private Long receivedAmount; @ApiModelProperty(value = "支付交易号") private String transactionId; @ApiModelProperty(value = "优惠说明") private String thirdPartyDiscountInstruction; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/CreditPayCallVo.java
New file @@ -0,0 +1,16 @@ package com.xiaopeng.order.model.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "信用支付下单回调响应") public class CreditPayCallVo { @ApiModelProperty(value = "响应码:0-成功") private String retCode; @ApiModelProperty(value = "响应描述") private String retMsg; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
@@ -310,4 +310,11 @@ */ OrderStatusFromOrderIdVo queryOrderStatusFromOrderId(Long orderId); /** * 订单支付成功后的回调 * @param order */ void creditPayCall(XpOrder order); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -3353,9 +3353,10 @@ creditOrderCreateDto.setUid(Long.valueOf(uid)); creditOrderCreateDto.setBusinessId("xp-robotaxi"); creditOrderCreateDto.setCategory("009001"); creditOrderCreateDto.setBusinessOrderId(""); creditOrderCreateDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF")); creditOrderCreateDto.setSubject("小鹏集团|robotaxi"); creditOrderCreateDto.setPayType("13"); creditOrderCreateDto.setPayCallbackUrl(""); // 信用下单 @@ -3373,6 +3374,7 @@ order.setPayType(3); order.setAuthOrderId(data.getAuthOrderId()); order.setBusinessOrderId(creditOrderCreateDto.getBusinessOrderId()); return R.ok(resultMap); } @@ -4760,6 +4762,29 @@ return orderStatusFromOrderIdVo; } @Override public void creditPayCall(XpOrder order) { CreditOrderWxPayDto dto = new CreditOrderWxPayDto(); dto.setBusinessId("xp-robotaxi"); dto.setBusinessOrderId(order.getBusinessOrderId()); dto.setAuthOrderId(order.getAuthOrderId()); dto.setCategory("009001"); dto.setPayCallbackUrl(""); dto.setTotalAmount(order.getOrderMoney().multiply(BigDecimal.valueOf(100)).longValue()); dto.setSubject("小鹏集团|robotaxi"); dto.setPayType("13"); List<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(); CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment(); postPayment.setName("收费标准"); postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看"); dto.setPostPayments(postPayments); R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(dto); } /** * 发票列表