liujie
2026-05-07 ea86cc455053b205e1b8ca88de4e91e6c64ec298
免密
20个文件已添加
3个文件已修改
997 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderCancelDto.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderCreateDto.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderQueryDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderWxPayDto.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditPaySignDto.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditPaySignQueryDto.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditPrecreateDto.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/RefundRequestDto.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/UnsignCreditPayDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/payFront/XpPayFrontClientFallbackFactory.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderCancelVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderCreateVo.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderQueryVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderWxPayVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditPaySignQueryVo.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditPaySignVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditPrecreateVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/RefundVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/UnsignCreditPayVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/dto/ServiceNameConstantsEnum.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderCancelDto.java
New file
@@ -0,0 +1,41 @@
package com.xiaopeng.api.dto.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "取消订单参数")
public class CreditOrderCancelDto {
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方订单id")
    @NotBlank(message = "业务方订单id不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    @NotBlank(message = "支付中心授权单号不能为空")
    private String authOrderId;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "用户此订单是否守约")
    private String isFulfilled;
    @ApiModelProperty(value = "对本次操作的附言描述,透传支付宝")
    private String remark;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderCreateDto.java
New file
@@ -0,0 +1,77 @@
package com.xiaopeng.api.dto.payFront;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Data
@ApiModel(value = "信用下单参数")
public class CreditOrderCreateDto {
    @ApiModelProperty(value = "用户id")
    private Long uid;
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "业务方订单id,同一个订单只会生成一个信用单")
    @NotBlank(message = "业务方订单id不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "订单超时时间,不传默认不会超时 yyyy-MM-dd HH:mm:ss")
    private String expireTime;
    @ApiModelProperty(value = "开通签约时传入的外部请求号,signOrderId和mercToken必传一个")
    private String signOrderId;
    @ApiModelProperty(value = "外部协议号,和信用协议号一对一映射,如果不传默认取signOrderId对应的协议号")
    private String mercToken;
    @ApiModelProperty(value = "订单扣款上限金额,单位分")
    private Long orderAmount;
    @ApiModelProperty(value = "微信用户在商户对应appid下的唯一标识")
    private String openId;
    @ApiModelProperty(value = "订单标题,展示在用户订单")
    @NotBlank(message = "订单标题不能为空")
    private String subject;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
    private String payType;
    @ApiModelProperty(value = "是否需要用户确认,RT固定传true")
    private String needUserConfirm;
    @ApiModelProperty(value = "回调订单授权结果地址")
    private String payCallbackUrl;
    @ApiModelProperty(value = "后付费项目")
    @Valid
    @JsonProperty("post_payments")
    private List<PostPayment> postPayments;
    @Data
    @ApiModel(value = "PostPayment对象", description = "后付费项目")
    public static class PostPayment {
        @ApiModelProperty(value = "付费名称,不能超过20个字符")
        @NotBlank(message = "付费名称不能为空")
        private String name;
        @ApiModelProperty(value = "付费说明,对付费项目的详细说明,不超过30个字符")
        @NotBlank(message = "付费说明不能为空")
        private String description;
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderQueryDto.java
New file
@@ -0,0 +1,35 @@
package com.xiaopeng.api.dto.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "查询信用订单参数")
public class CreditOrderQueryDto {
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方订单id")
    @NotBlank(message = "业务方订单id不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    @NotBlank(message = "支付中心授权单号不能为空")
    private String authOrderId;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderWxPayDto.java
New file
@@ -0,0 +1,62 @@
package com.xiaopeng.api.dto.payFront;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ApiModel(value = "异步完结扣款订单参数")
public class CreditOrderWxPayDto {
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方订单id")
    @NotBlank(message = "业务方订单id不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号(商户订单号)")
    @NotBlank(message = "支付中心授权单号不能为空")
    private String authOrderId;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "回调订单完结结果地址,没有填则从商户配置中取")
    @NotBlank(message = "回调订单完结结果地址不能为空")
    private String payCallbackUrl;
    @ApiModelProperty(value = "信用订单本次扣款金额,单位分")
    @NotNull(message = "扣款金额不能为空")
    private Long totalAmount;
    @ApiModelProperty(value = "订单标题,展示在用户订单")
    @NotBlank(message = "订单标题不能为空")
    private String subject;
    @ApiModelProperty(value = "对本次操作的附言描述,透传支付宝or微信(30字符以内)")
    private String remark;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
    private String payType;
    @ApiModelProperty(value = "支付场景,APP支付:3,支付宝小程序:9,默认未知场景:99")
    private Integer payScene;
    @ApiModelProperty(value = "后付费项目")
    @Valid
    @JsonProperty("post_payments")
    private List<CreditOrderCreateDto.PostPayment> postPayments;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditPaySignDto.java
New file
@@ -0,0 +1,40 @@
package com.xiaopeng.api.dto.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "微信支付分开通签约参数")
public class CreditPaySignDto {
    @ApiModelProperty(value = "用户id")
    private Long uid;
    @ApiModelProperty(value = "用户成功完成芝麻先用后付开通流程后,跳转回商户的页面地址")
    private String returnUrl;
    @ApiModelProperty(value = "用户中断开通流程后,跳转回商户的页面地址")
    private String cancelUrl;
    @ApiModelProperty(value = "回调开通结果地址,没有填则从商户配置中取")
    private String callbackUrl;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方外部单号,不同的支付宝用户需要传递不同的外部单号")
    @NotBlank(message = "业务方外部单号不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditPaySignQueryDto.java
New file
@@ -0,0 +1,33 @@
package com.xiaopeng.api.dto.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "主动查询开通结果参数")
public class CreditPaySignQueryDto {
    @ApiModelProperty(value = "用户id")
    private Long uid;
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "业务方外部单号,不同的用户需要传递不同的外部单号")
    @NotBlank(message = "业务方外部单号不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "外部协议号,和渠道协议号一对一映射,优先查询")
    private String mercToken;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分,不传查所有")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditPrecreateDto.java
New file
@@ -0,0 +1,87 @@
package com.xiaopeng.api.dto.payFront;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
@Data
@ApiModel(value = "预下单参数")
public class CreditPrecreateDto {
    @ApiModelProperty(value = "用户uid")
    private String uid;
    @ApiModelProperty(value = "业务appid")
    @NotBlank(message = "业务appid不能为空")
    private String bizId;
    @ApiModelProperty(value = "业务订单号")
    @NotBlank(message = "业务订单号不能为空")
    private String bizOrderId;
    @ApiModelProperty(value = "支付场景")
    @NotNull(message = "支付场景不能为空")
    private Integer payScene;
    @ApiModelProperty(value = "支付金额,分为单位")
    @NotNull(message = "支付金额不能为空")
    private Integer amount;
    @ApiModelProperty(value = "订单类别")
    @NotBlank(message = "订单类别不能为空")
    private String category;
    @ApiModelProperty(value = "订单标题")
    @NotBlank(message = "订单标题不能为空")
    private String title;
    @ApiModelProperty(value = "订单详情")
    @NotBlank(message = "订单详情不能为空")
    private String detail;
    @ApiModelProperty(value = "订单支付失效时间")
    private String expireTime;
    @ApiModelProperty(value = "业务支付拓展参数")
    private Map<String, String> businessExtend;
    @ApiModelProperty(value = "业务拓展参数,透传")
    private String extBusinessData;
    @ApiModelProperty(value = "业务拓展参数,不透传")
    private String extBusinessData2;
    @ApiModelProperty(value = "微信用户在商户appid下的唯一标识")
    private String wxOpenId;
    @ApiModelProperty(value = "免检登录态开关")
    private String noLoginCheck;
    @ApiModelProperty(value = "分账串")
    private String ledgerInfo;
    @ApiModelProperty(value = "分账类型")
    private String ledgerInfoType;
    @ApiModelProperty(value = "支付宝小程序支付用户id")
    private String alipayMiniUserId;
    @ApiModelProperty(value = "支付宝芝麻授权调用")
    private String alipayZhimaAuth;
    @ApiModelProperty(value = "回调订单授权结果地址")
    private String authCallbackUrl;
    @ApiModelProperty(value = "是否需要用户确认")
    private String needUserConfirm;
    @ApiModelProperty(value = "后付费项目")
    @JsonProperty("post_payments")
    private List<CreditOrderCreateDto.PostPayment> postPayments;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/RefundRequestDto.java
New file
@@ -0,0 +1,50 @@
package com.xiaopeng.api.dto.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "退款参数")
public class RefundRequestDto {
    @ApiModelProperty(value = "业务appid")
    @NotBlank(message = "业务appid不能为空")
    private String bizId;
    @ApiModelProperty(value = "业务订单号")
    @NotBlank(message = "业务订单号不能为空")
    private String bizOrderId;
    @ApiModelProperty(value = "业务退款订单号")
    @NotBlank(message = "业务退款订单号不能为空")
    private String bizRefundId;
    @ApiModelProperty(value = "退款金额,分为单位")
    @NotNull(message = "退款金额不能为空")
    private Integer amount;
    @ApiModelProperty(value = "退款原因类型")
    private String refundType;
    @ApiModelProperty(value = "退款拓展字段")
    private String refundExtend;
    @ApiModelProperty(value = "分账退款分账串")
    private String refundLedgerInfo;
    @ApiModelProperty(value = "退款回调地址")
    private String refundCallbackUrl;
    @ApiModelProperty(value = "退款业务数据")
    private String refundBusinessData;
    @ApiModelProperty(value = "退款透传字段")
    private String refundPassThroughData;
    @ApiModelProperty(value = "银联小U退款专用,是否退券标识")
    private Integer refundCouponFlag;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/UnsignCreditPayDto.java
New file
@@ -0,0 +1,35 @@
package com.xiaopeng.api.dto.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "微信支付分取消授权参数")
public class UnsignCreditPayDto {
    @ApiModelProperty(value = "用户id")
    private Long uid;
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    @ApiModelProperty(value = "业务方外部单号,不同的用户需要传递不同的外部单号")
    @NotBlank(message = "业务方外部单号不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "外部协议号,和渠道协议号一对一映射,优先查询")
    @NotBlank(message = "外部协议号不能为空")
    private String mercToken;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/payFront/XpPayFrontClientFallbackFactory.java
New file
@@ -0,0 +1,91 @@
package com.xiaopeng.api.factory.payFront;
import com.xiaopeng.api.dto.payFront.CreditOrderCancelDto;
import com.xiaopeng.api.dto.payFront.CreditOrderCreateDto;
import com.xiaopeng.api.dto.payFront.CreditOrderQueryDto;
import com.xiaopeng.api.dto.payFront.CreditOrderWxPayDto;
import com.xiaopeng.api.dto.payFront.CreditPaySignDto;
import com.xiaopeng.api.dto.payFront.CreditPaySignQueryDto;
import com.xiaopeng.api.dto.payFront.CreditPrecreateDto;
import com.xiaopeng.api.dto.payFront.RefundRequestDto;
import com.xiaopeng.api.dto.payFront.UnsignCreditPayDto;
import com.xiaopeng.api.feignClient.payFront.XpPayFrontClient;
import com.xiaopeng.api.vo.payFront.CreditOrderCancelVo;
import com.xiaopeng.api.vo.payFront.CreditOrderCreateVo;
import com.xiaopeng.api.vo.payFront.CreditOrderQueryVo;
import com.xiaopeng.api.vo.payFront.CreditOrderWxPayVo;
import com.xiaopeng.api.vo.payFront.CreditPaySignQueryVo;
import com.xiaopeng.api.vo.payFront.CreditPaySignVo;
import com.xiaopeng.api.vo.payFront.CreditPrecreateVo;
import com.xiaopeng.api.vo.payFront.RefundVo;
import com.xiaopeng.api.vo.payFront.UnsignCreditPayVo;
import com.xiaopeng.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * Pay front Feign fallback factory.
 *
 * @author mitao
 */
@Slf4j
@Component
public class XpPayFrontClientFallbackFactory implements FallbackFactory<XpPayFrontClient> {
    @Override
    public XpPayFrontClient create(Throwable cause) {
        log.error("pay front service call failed: {}", cause.getMessage());
        return new XpPayFrontClient() {
            @Override
            public R<CreditPaySignVo> creditPaySign(CreditPaySignDto dto) {
                return fail("credit pay sign failed");
            }
            @Override
            public R<CreditPaySignQueryVo> queryCreditPaySign(CreditPaySignQueryDto dto) {
                return fail("credit pay sign query failed");
            }
            @Override
            public R<CreditOrderCreateVo> createCreditOrder(CreditOrderCreateDto dto) {
                return fail("credit order create failed");
            }
            @Override
            public R<CreditOrderWxPayVo> creditOrderWxPay(CreditOrderWxPayDto dto) {
                return fail("credit order wxPay failed");
            }
            @Override
            public R<CreditOrderCancelVo> cancelCreditOrder(CreditOrderCancelDto dto) {
                return fail("credit order cancel failed");
            }
            @Override
            public R<CreditOrderQueryVo> queryCreditOrder(CreditOrderQueryDto dto) {
                return fail("credit order query failed");
            }
            @Override
            public R<RefundVo> refund(RefundRequestDto dto) {
                return fail("refund failed");
            }
            @Override
            public R<CreditPrecreateVo> precreate(CreditPrecreateDto dto) {
                return fail("precreate failed");
            }
            @Override
            public R<UnsignCreditPayVo> unsign(UnsignCreditPayDto dto) {
                return fail("credit pay unsign failed");
            }
            private <T> R<T> fail(String message) {
                log.error("{}: {}", message, cause.getMessage());
                return R.fail(message);
            }
        };
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java
New file
@@ -0,0 +1,64 @@
package com.xiaopeng.api.feignClient.payFront;
import com.xiaopeng.api.dto.payFront.CreditOrderCancelDto;
import com.xiaopeng.api.dto.payFront.CreditOrderCreateDto;
import com.xiaopeng.api.dto.payFront.CreditOrderQueryDto;
import com.xiaopeng.api.dto.payFront.CreditOrderWxPayDto;
import com.xiaopeng.api.dto.payFront.CreditPaySignDto;
import com.xiaopeng.api.dto.payFront.CreditPaySignQueryDto;
import com.xiaopeng.api.dto.payFront.CreditPrecreateDto;
import com.xiaopeng.api.dto.payFront.RefundRequestDto;
import com.xiaopeng.api.dto.payFront.UnsignCreditPayDto;
import com.xiaopeng.api.factory.payFront.XpPayFrontClientFallbackFactory;
import com.xiaopeng.api.vo.payFront.CreditOrderCancelVo;
import com.xiaopeng.api.vo.payFront.CreditOrderCreateVo;
import com.xiaopeng.api.vo.payFront.CreditOrderQueryVo;
import com.xiaopeng.api.vo.payFront.CreditOrderWxPayVo;
import com.xiaopeng.api.vo.payFront.CreditPaySignQueryVo;
import com.xiaopeng.api.vo.payFront.CreditPaySignVo;
import com.xiaopeng.api.vo.payFront.CreditPrecreateVo;
import com.xiaopeng.api.vo.payFront.RefundVo;
import com.xiaopeng.api.vo.payFront.UnsignCreditPayVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * 支付中心Feign客户端
 *
 * @author mitao
 */
@FeignClient(contextId = "XpPayFrontClient",
        value = ServiceNameConstantsEnum.XP_PAY_FRONT_BOOT,
        fallbackFactory = XpPayFrontClientFallbackFactory.class)
public interface XpPayFrontClient {
    @PostMapping("/logan/pay/creditPay/sign")
    R<CreditPaySignVo> creditPaySign(@RequestBody CreditPaySignDto dto);
    @PostMapping("/logan/pay/creditPay/sign/query")
    R<CreditPaySignQueryVo> queryCreditPaySign(@RequestBody CreditPaySignQueryDto dto);
    @PostMapping("/logan/pay/creditPay/creditOrder/create")
    R<CreditOrderCreateVo> createCreditOrder(@RequestBody CreditOrderCreateDto dto);
    @PostMapping("/logan/pay/creditPay/creditOrder/wxPay")
    R<CreditOrderWxPayVo> creditOrderWxPay(@RequestBody CreditOrderWxPayDto dto);
    @PostMapping("/logan/pay/creditPay/creditOrder/cancel")
    R<CreditOrderCancelVo> cancelCreditOrder(@RequestBody CreditOrderCancelDto dto);
    @PostMapping("/logan/pay/creditPay/creditOrder/query")
    R<CreditOrderQueryVo> queryCreditOrder(@RequestBody CreditOrderQueryDto dto);
    @PostMapping("/logan/v1/order/refund")
    R<RefundVo> refund(@RequestBody RefundRequestDto dto);
    @PostMapping("/logan/v1/order/precreate")
    R<CreditPrecreateVo> precreate(@RequestBody CreditPrecreateDto dto);
    @PostMapping("/logan/pay/creditPay/unsign")
    R<UnsignCreditPayVo> unsign(@RequestBody UnsignCreditPayDto dto);
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderCancelVo.java
New file
@@ -0,0 +1,25 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "取消订单响应")
public class CreditOrderCancelVo {
    @ApiModelProperty(value = "业务方订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    private String authOrderId;
    @ApiModelProperty(value = "信用订单状态")
    private String creditOrderStatus;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分)")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderCreateVo.java
New file
@@ -0,0 +1,27 @@
package com.xiaopeng.api.vo.payFront;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "信用下单响应")
public class CreditOrderCreateVo {
    @ApiModelProperty(value = "业务方订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "支付中心授权单号(商户订单号)")
    private String authOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分)")
    private String payType;
    @ApiModelProperty(value = "跳转微信侧小程序订单数据")
    @JsonProperty("package")
    private String packageValue;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderQueryVo.java
New file
@@ -0,0 +1,28 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "查询信用订单响应")
public class CreditOrderQueryVo {
    @ApiModelProperty(value = "业务方订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    private String authOrderId;
    @ApiModelProperty(value = "微信用户在商户对应appid下的唯一标识")
    private String openId;
    @ApiModelProperty(value = "信用订单状态")
    private String creditOrderStatus;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分)")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditOrderWxPayVo.java
New file
@@ -0,0 +1,28 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "异步完结扣款订单响应")
public class CreditOrderWxPayVo {
    @ApiModelProperty(value = "业务方订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    private String authOrderId;
    @ApiModelProperty(value = "信用订单状态")
    private String creditOrderStatus;
    @ApiModelProperty(value = "信用订单本次扣款金额,单位分")
    private Long totalAmount;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分)")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditPaySignQueryVo.java
New file
@@ -0,0 +1,41 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "主动查询开通结果响应")
public class CreditPaySignQueryVo {
    @ApiModelProperty(value = "签约列表")
    private List<Sign> signList;
    @Data
    @ApiModel(value = "CreditPaySign对象", description = "签约结果")
    public static class Sign {
        @ApiModelProperty(value = "外部协议号,和渠道协议号一对一映射,空则表示未开通")
        private String mercToken;
        @ApiModelProperty(value = "外部请求号,和渠道协议号一对一映射,空则表示未开通")
        private String signOrderId;
        @ApiModelProperty(value = "业务方外部单号,不同的支付宝用户需要传递不同的外部单号")
        private String businessOrderId;
        @ApiModelProperty(value = "协议号状态:VALID(已签约),INVALID(未签约),INIT(初始化可当作未签约),WAIT(解约中)")
        private String status;
        @ApiModelProperty(value = "用户id")
        private Long uid;
        @ApiModelProperty(value = "开通时间 yyyy-MM-dd HH:mm:ss")
        private String bizTime;
        @ApiModelProperty(value = "支付类型")
        private String payType;
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditPaySignVo.java
New file
@@ -0,0 +1,28 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "微信支付分开通签约响应")
public class CreditPaySignVo {
    @ApiModelProperty(value = "签名串,小程序跳转使用 or 微信支付分:预授权token")
    private String signStr;
    @ApiModelProperty(value = "芝麻服务id,小程序跳转使用")
    private String zmServiceId;
    @ApiModelProperty(value = "APP跳转URL")
    private String schemaUrl;
    @ApiModelProperty(value = "业务方id")
    private String businessId;
    @ApiModelProperty(value = "支付宝下载跳转URL")
    private String downloadAlipayUrl;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分)")
    private String payType;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/CreditPrecreateVo.java
New file
@@ -0,0 +1,22 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "预下单响应")
public class CreditPrecreateVo {
    @ApiModelProperty(value = "业务订单号")
    private String bizOrderId;
    @ApiModelProperty(value = "预支付id")
    private String prePayId;
    @ApiModelProperty(value = "收银台url")
    private String url;
    @ApiModelProperty(value = "收银台token")
    private String token;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/RefundVo.java
New file
@@ -0,0 +1,38 @@
package com.xiaopeng.api.vo.payFront;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel(value = "退款响应")
public class RefundVo {
    @ApiModelProperty(value = "业务订单号")
    private String bizOrderId;
    @ApiModelProperty(value = "业务退款订单号")
    private String bizRefundId;
    @ApiModelProperty(value = "支付订单号")
    private String payOrderId;
    @ApiModelProperty(value = "支付平台退款订单号")
    private String refundOrderId;
    @ApiModelProperty(value = "渠道订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "用户uid")
    private String uid;
    @ApiModelProperty(value = "退款金额,单位为分")
    private Integer amount;
    @ApiModelProperty(value = "退款订单创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/UnsignCreditPayVo.java
New file
@@ -0,0 +1,28 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "微信支付分取消授权响应")
public class UnsignCreditPayVo {
    @ApiModelProperty(value = "业务方订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "渠道返回支付服务订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    private String authOrderId;
    @ApiModelProperty(value = "开放用户id")
    private String openId;
    @ApiModelProperty(value = "信用订单状态")
    private String creditOrderStatus;
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分)")
    private String payType;
}
xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -63,4 +63,5 @@
com.xiaopeng.api.factory.vehicleConvoy.VehicleMacClientFallbackFactory
com.xiaopeng.api.factory.account.XpOperationsUserClientFallbackFactory
com.xiaopeng.api.factory.pushMessage.WebSocketMessageFallbackFactory
com.xiaopeng.api.factory.operation.XpOfficialPartnerClientFallbackFactory
com.xiaopeng.api.factory.operation.XpOfficialPartnerClientFallbackFactory
com.xiaopeng.api.factory.payFront.XpPayFrontClientFallbackFactory
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/dto/ServiceNameConstantsEnum.java
@@ -77,5 +77,9 @@
     * 小鹏数字秘钥服务
     */
    String XP_DIGITAL_KEY_BOOT = "xp-digital-key-boot";
    /**
     * 支付中心
     */
    String XP_PAY_FRONT_BOOT = "xp-pay-front-boot";
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -21,6 +21,9 @@
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.order.*;
import com.xiaopeng.api.dto.payFront.CreditOrderCreateDto;
import com.xiaopeng.api.dto.payFront.CreditPaySignQueryDto;
import com.xiaopeng.api.dto.payFront.CreditPrecreateDto;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
import com.xiaopeng.api.dto.statistics.DailyCountDTO;
import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
@@ -36,6 +39,7 @@
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.operation.*;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
import com.xiaopeng.api.feignClient.payFront.XpPayFrontClient;
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.*;
import com.xiaopeng.api.model.maintenance.XpTaskRule;
@@ -55,6 +59,8 @@
import com.xiaopeng.api.vo.operation.NearestNextVo;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.order.*;
import com.xiaopeng.api.vo.payFront.CreditOrderCreateVo;
import com.xiaopeng.api.vo.payFront.CreditPaySignQueryVo;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.BluetoothDeliverVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
@@ -196,6 +202,9 @@
    @Resource
    private OfficialPartnerUtil officialPartnerUtil;
    @Resource
    private XpPayFrontClient xpPayFrontClient;
    @Value("${robotaxi.appId:xp_robotaxi_api}")
    private String appid;
@@ -3218,27 +3227,90 @@
    @Override
    public R payment(XpOrderPayDto dto, String uid) {
        // mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可
        XpOrder order = this.getById(dto.getOrderId());
        order.setStatus(9);
        order.setAppUserId(null);
        if (order.getCouponId() != null) {
            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
            useUserCouponDto.setUserCouponId(order.getCouponId());
            R<BigDecimal> decimalR = xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
            if (decimalR.getCode() == 200) {
                order.setCouponMoney(decimalR.getData());
                if (order.getCouponMoney().compareTo(order.getOrderMoney()) > 0) {
                    order.setPayMoney(BigDecimal.ZERO);
                    order.setCouponMoney(order.getOrderMoney());
                } else {
                    order.setPayMoney(order.getOrderMoney().subtract(decimalR.getData()));
                }
        // 1.0 免密  //查询是否开通免密
        // 1先查用户是否申请  申请了拿到通过的businessOrderId
        boolean signed = false;
        CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
        creditPaySignQueryDto.setUid(Long.valueOf(uid));
        creditPaySignQueryDto.setBusinessId(appid);
        creditPaySignQueryDto.setCategory("xp_robotaxi_api");
        creditPaySignQueryDto.setBusinessOrderId("");
        R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
        if (creditPaySignQueryVoR.getCode()==200) {
            CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
            // 查看是否有签约的
            long count = data.getSignList().stream().filter(e -> e.getStatus().equals("VALID")).count();
            if (count > 0){
                signed = true;
            }
        }
        baseMapper.updateById(order);
        bootCommonService.setCache_orderStatus(order.getId(), order, null);
        return R.ok();
        if(signed){
            // y已签约 1.信用下单
            CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
            creditOrderCreateDto.setUid(Long.valueOf(uid));
            creditOrderCreateDto.setBusinessId(appid);
            creditOrderCreateDto.setCategory("xp_robotaxi_api");
            creditOrderCreateDto.setBusinessOrderId("");
            creditOrderCreateDto.setSubject("信用下单");
            creditOrderCreateDto.setPayType("13");
            // 信用下单
            ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
            CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
            postPayment.setName("收费标准");
            postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
            postPayments.add(postPayment);
            creditOrderCreateDto.setPostPayments(postPayments);
            R<CreditOrderCreateVo> creditOrderCreateVoR = xpPayFrontClient.createCreditOrder(creditOrderCreateDto);
            if(creditOrderCreateVoR.getCode()==200){
                CreditOrderCreateVo data = creditOrderCreateVoR.getData();
                return R.ok(data.getPackageValue());
            }
        }else {
            // 未签约
            // 调用预下单接口
            XpOrder order = this.getById(dto.getOrderId());
            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
            creditPrecreateDto.setUid(uid);
            creditPrecreateDto.setBizId(appid);
            creditPrecreateDto.setBizOrderId("");
            creditPrecreateDto.setPayScene(99);
            creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
            creditPrecreateDto.setCategory("信用下单");
            creditPrecreateDto.setTitle("信用下单");
            creditPrecreateDto.setDetail("信用下单");
        }
        // mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可
//        XpOrder order = this.getById(dto.getOrderId());
//        order.setStatus(9);
//        order.setAppUserId(null);
//        if (order.getCouponId() != null) {
//            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
//            useUserCouponDto.setUserCouponId(order.getCouponId());
//            R<BigDecimal> decimalR = xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
//            if (decimalR.getCode() == 200) {
//                order.setCouponMoney(decimalR.getData());
//                if (order.getCouponMoney().compareTo(order.getOrderMoney()) > 0) {
//                    order.setPayMoney(BigDecimal.ZERO);
//                    order.setCouponMoney(order.getOrderMoney());
//                } else {
//                    order.setPayMoney(order.getOrderMoney().subtract(decimalR.getData()));
//                }
//            }
//        }
//        baseMapper.updateById(order);
//        bootCommonService.setCache_orderStatus(order.getId(), order, null);
        return R.fail();
    }
    /**