liujie
2026-05-14 3c2c0ff780c35b7046b89457b1de742d410f8c7f
对接免密
1个文件已添加
7个文件已修改
195 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderQueryDto.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/OrderStatusFromOrderIdVo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserController.java
@@ -2,10 +2,18 @@
import com.xiaopeng.account.model.dto.CollectAddrDTO;
import com.xiaopeng.account.service.IXpAppUserService;
import com.xiaopeng.api.dto.payFront.CreditPaySignDto;
import com.xiaopeng.api.dto.payFront.CreditPaySignQueryDto;
import com.xiaopeng.api.dto.payFront.UnsignCreditPayDto;
import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
import com.xiaopeng.api.dto.statistics.UserStatisticsDTO;
import com.xiaopeng.api.feignClient.payFront.XpPayFrontClient;
import com.xiaopeng.api.model.account.XpAppUser;
import com.xiaopeng.api.vo.payFront.CreditPaySignQueryVo;
import com.xiaopeng.api.vo.payFront.CreditPaySignVo;
import com.xiaopeng.api.vo.payFront.UnsignCreditPayVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.utils.OrderCodeUtil;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -34,6 +42,9 @@
    @Resource
    private IXpAppUserService xpAppUserService;
    @Resource
    private XpPayFrontClient xpPayFrontClient;
    /**
     * 获取用户统计数据(内部接口)
@@ -84,9 +95,25 @@
    public R<Boolean> appUserGetPayPwd(HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        //调用其他接口获取 免密结果 todo yyy
        Boolean is = true;
        return R.ok(is);
        //调用其他接口获取 免密结果
        Boolean signed = false;
        CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
        creditPaySignQueryDto.setUid(Long.valueOf(uid));
        creditPaySignQueryDto.setBusinessId("xp-robotaxi");
        creditPaySignQueryDto.setCategory("009001");
        creditPaySignQueryDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
        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;
            }
        }
        return R.ok(signed);
    }
    /**
@@ -95,12 +122,45 @@
    @PostMapping("/api/v1/mini-program/appUser/setPayPwd")
    @ApiOperation(value = "个人中心-设置免密结果", tags = {"小程序-设置免密结果"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<?> appUserSetPayPwd(HttpServletRequest request) {
    public R<?> appUserSetPayPwd(@RequestParam Integer status,HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        //调用其他接口设置免密结果 todo yyy
        //调用其他接口设置免密结果
        if(status==1){
            CreditPaySignDto creditPaySignDto = new CreditPaySignDto();
            creditPaySignDto.setUid(Long.valueOf(uid));
            creditPaySignDto.setBusinessId("xp-robotaxi");
            creditPaySignDto.setCategory("009001");
            creditPaySignDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            creditPaySignDto.setPayType("13");
            R<CreditPaySignVo> creditPaySignVoR = xpPayFrontClient.creditPaySign(creditPaySignDto);
            if(creditPaySignVoR.getCode()==200){
                CreditPaySignVo data = creditPaySignVoR.getData();
                return R.ok(data);
            }
        }else {
            UnsignCreditPayDto unsignCreditPayDto = new UnsignCreditPayDto();
            unsignCreditPayDto.setUid(Long.valueOf(uid));
            unsignCreditPayDto.setBusinessId("xp-robotaxi");
            unsignCreditPayDto.setCategory("009001");
            unsignCreditPayDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            unsignCreditPayDto.setPayType("13");
            R<UnsignCreditPayVo> unsignCreditPayVoR = xpPayFrontClient.unsign(unsignCreditPayDto);
            if(unsignCreditPayVoR.getCode()==200){
                UnsignCreditPayVo data = unsignCreditPayVoR.getData();
                return R.ok(data);
            }
        }
        return R.ok();
    }
//-----------------------------------------------app接口------------------------------------------
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderQueryDto.java
@@ -12,7 +12,7 @@
    @ApiModelProperty(value = "业务方id")
    @NotBlank(message = "业务方id不能为空")
    private String businessId;
    private String businessId="xp-robotaxi";
    @ApiModelProperty(value = "业务方订单id")
    @NotBlank(message = "业务方订单id不能为空")
@@ -27,7 +27,7 @@
    @ApiModelProperty(value = "业务方类目,由支付中心分配")
    @NotBlank(message = "业务方类目不能为空")
    private String category;
    private String category="009001";
    @ApiModelProperty(value = "支付类型(芝麻后付or微信支付分),13: 微信支付分")
    @NotBlank(message = "支付类型不能为空")
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java
@@ -35,9 +35,12 @@
        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);
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java
@@ -273,4 +273,9 @@
    @ApiModelProperty(value = "发票id")
    @TableField("invoice_id")
    private String invoiceId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号(商户订单号)")
    @TableField("auth_order_id")
    private String authOrderId;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/OrderStatusFromOrderIdVo.java
New file
@@ -0,0 +1,12 @@
package com.xiaopeng.api.vo.order;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel("订单支付状态VO")
public class OrderStatusFromOrderIdVo {
    private Long orderId;
    private Integer status;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -876,4 +876,21 @@
        XpOrderInfoVo xpOrderInfoVo = BeanUtil.copyProperties(xpOrder, XpOrderInfoVo.class);
        return R.ok(xpOrderInfoVo);
    }
    @ApiOperation(value = "获取订单支付状态", tags = {"小程序-业务流程"})
    @GetMapping("/api/v1/mini-program/order/queryOrderStatusFromOrderId")
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<OrderStatusFromOrderIdVo> queryOrderStatusFromOrderId(Long orderId) {
        XpOrder order = xpOrderService.getById(orderId);
        OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
        orderStatusFromOrderIdVo.setOrderId(order.getId());
        orderStatusFromOrderIdVo.setStatus(order.getStatus());
        return R.ok( xpOrderService.queryOrderStatusFromOrderId(orderId));
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
@@ -301,4 +301,13 @@
     * @return
     */
    UserOrderInfoVo getOrderHistoryInfo(Long orderId);
    /**
     * 获取订单状态
     * @param orderId
     * @return
     */
    OrderStatusFromOrderIdVo queryOrderStatusFromOrderId(Long orderId);
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -22,9 +22,7 @@
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.payFront.*;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
import com.xiaopeng.api.dto.statistics.DailyCountDTO;
import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
@@ -61,10 +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.payFront.*;
import com.xiaopeng.api.vo.order.FareBreakdownVo;
import com.xiaopeng.api.vo.payFront.CreditPrecreateVo;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.BluetoothDeliverVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
@@ -78,6 +74,7 @@
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.utils.DateUtils;
import com.xiaopeng.common.core.utils.GeodesyUtil;
import com.xiaopeng.common.core.utils.OrderCodeUtil;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.web.domain.BaseModel;
import com.xiaopeng.common.core.web.page.PageInfo;
@@ -3324,6 +3321,8 @@
    public R payment(XpOrderPayDto dto, String uid) {
        XpOrder order = this.getById(dto.getOrderId());
        HashMap<String, Object> resultMap = new HashMap<>();
        // 1.0 免密  //查询是否开通免密
@@ -3333,7 +3332,7 @@
        creditPaySignQueryDto.setUid(Long.valueOf(uid));
        creditPaySignQueryDto.setBusinessId("xp-robotaxi");
        creditPaySignQueryDto.setCategory("009001");
        creditPaySignQueryDto.setBusinessOrderId("");
        creditPaySignQueryDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
        R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
        if (creditPaySignQueryVoR.getCode()==200) {
            CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
@@ -3350,9 +3349,9 @@
            CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
            creditOrderCreateDto.setUid(Long.valueOf(uid));
            creditOrderCreateDto.setBusinessId("xp-robotaxi");
            creditOrderCreateDto.setCategory("xp_robotaxi_api");
            creditOrderCreateDto.setCategory("009001");
            creditOrderCreateDto.setBusinessOrderId("");
            creditOrderCreateDto.setSubject("009001");
            creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
            creditOrderCreateDto.setPayType("13");
@@ -3368,6 +3367,10 @@
                CreditOrderCreateVo data = creditOrderCreateVoR.getData();
                resultMap.put("status", 1);
                resultMap.put("value", data);
                order.setPayType(3);
                order.setAuthOrderId(data.getAuthOrderId());
                return R.ok(resultMap);
            }
@@ -3375,7 +3378,6 @@
            // 未签约
            // 调用预下单接口
            XpOrder order = this.getById(dto.getOrderId());
            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
            creditPrecreateDto.setUid(uid);
            creditPrecreateDto.setBizId("xp-robotaxi");
@@ -4702,6 +4704,59 @@
        return vo;
    }
    /**
     * 查询订单状态
     * @param orderId
     * @return
     */
    @Override
    public OrderStatusFromOrderIdVo queryOrderStatusFromOrderId(Long orderId) {
        XpOrder order = this.getById(orderId);
        if(order==null){
            return null;
        }
        if(order.getPayType()==3){
            // 免密查询 如果成功则调用结算
            CreditOrderQueryDto dto = new CreditOrderQueryDto();
            dto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            dto.setAuthOrderId(order.getAuthOrderId());
            dto.setPayType("13");
            R<CreditOrderQueryVo> creditOrderQueryVoR = xpPayFrontClient.queryCreditOrder(dto);
            if(creditOrderQueryVoR.getCode()==200){
                CreditOrderQueryVo creditOrderQueryVo = creditOrderQueryVoR.getData();
                if(creditOrderQueryVo.getCreditOrderStatus().equals("DONE")){
                    // 订单确认 需要吊起扣款
                    CreditOrderWxPayDto creditOrderWxPayDto = new CreditOrderWxPayDto();
                    creditOrderWxPayDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
                    creditOrderWxPayDto.setAuthOrderId(order.getAuthOrderId());
                    creditOrderWxPayDto.setPayCallbackUrl("13");
                    creditOrderWxPayDto.setTotalAmount( order.getOrderMoney().multiply(BigDecimal.valueOf(100)).longValue());
                    creditOrderWxPayDto.setSubject("小鹏集团|robotaxi");
                    creditOrderWxPayDto.setPayType("13");
                    List<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>();
                    CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
                    postPayment.setName("收费标准");
                    postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
                    postPayments.add(postPayment);
                    creditOrderWxPayDto.setPostPayments(postPayments);
                    R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(creditOrderWxPayDto);
                }else if(creditOrderQueryVo.getCreditOrderStatus().equals("CREATED") || creditOrderQueryVo.getCreditOrderStatus().equals("DOING")){
                }
            }
        }else {
            // 微信支付也需要查询下
        }
        OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
        orderStatusFromOrderIdVo.setOrderId(order.getId());
        orderStatusFromOrderIdVo.setStatus(order.getStatus());
        return orderStatusFromOrderIdVo;
    }
    /**
     * 发票列表