puzhibing
2026-05-19 2d0312de30b3783ecf254d146dc6322d74690762
Merge branch '1.1' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

# Conflicts:
# xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/payFront/XpPayFrontClientFallbackFactory.java
# xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java
# xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
# xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
# xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java
11个文件已添加
12个文件已修改
965 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/frdXfipEvent/XpFrdXfipEventCouponLineDTO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/frdXfipEvent/XpFrdXfipEventIngestContentDTO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/frdXfipEvent/XpFrdXfipEventIngestReqDTO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderCreateDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/PayOrderQueryDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/frdXfipEvent/XpFrdXfipEventClientFallbackFactory.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/payFront/XpPayFrontClientFallbackFactory.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/frdXfipEvent/XpFrdXfipEventClient.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/frdXfipEvent/XpFrdXfipEventIngestRespVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/PayOrderQueryVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | 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/controller/XpOrderController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPayCallDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPaySuccessCallDto.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/CreditPayCallVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaskOrderSendSmsUtil.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserController.java
@@ -106,6 +106,12 @@
        //调用其他接口获取 免密结果
        Boolean signed = false;
        // 获取用户开通情况
        List<XpPayFront> xpPayFronts = xpPayFrontMapper.selectList(new LambdaQueryWrapper<XpPayFront>().eq(XpPayFront::getUserId, uid).orderByDesc(BaseModel::getCreateTime));
        if (xpPayFronts.isEmpty()) {
            return R.ok(signed);
        }
        CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
        creditPaySignQueryDto.setUid(Long.valueOf(uid));
        creditPaySignQueryDto.setBusinessId("xp-robotaxi");
@@ -146,7 +152,7 @@
                CreditPaySignVo data = creditPaySignVoR.getData();
                XpPayFront xpPayFront = new XpPayFront();
                xpPayFront.setUserId(Long.valueOf(uid));
                xpPayFront.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
                xpPayFront.setBusinessOrderId(creditPaySignDto.getBusinessOrderId());
                xpPayFrontMapper.insert(xpPayFront);
                return R.ok(data);
            }
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/frdXfipEvent/XpFrdXfipEventCouponLineDTO.java
New file
@@ -0,0 +1,39 @@
package com.xiaopeng.api.dto.frdXfipEvent;
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.math.BigDecimal;
@Data
@ApiModel(value = "FRD XFIP 券行项目")
public class XpFrdXfipEventCouponLineDTO {
    @ApiModelProperty(value = "券ID")
    @NotBlank(message = "couponId不能为空")
    private String couponId;
    @ApiModelProperty(value = "券类型,ACTIVITY/SALES")
    @NotBlank(message = "couponType不能为空")
    private String couponType;
    @ApiModelProperty(value = "供应商编码")
    private String supplierCode;
    @ApiModelProperty(value = "我司承担金额")
    private BigDecimal selfBorneAmount;
    @ApiModelProperty(value = "三方承担金额")
    private BigDecimal thirdPartyBorneAmount;
    @ApiModelProperty(value = "券抵扣金额")
    @NotNull(message = "couponDeductionAmount不能为空")
    private BigDecimal couponDeductionAmount;
    @ApiModelProperty(value = "券发行公司主体")
    @NotBlank(message = "couponIssuerCompanyCode不能为空")
    private String couponIssuerCompanyCode;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/frdXfipEvent/XpFrdXfipEventIngestContentDTO.java
New file
@@ -0,0 +1,84 @@
package com.xiaopeng.api.dto.frdXfipEvent;
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.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "FRD XFIP 事件上报业务报文")
public class XpFrdXfipEventIngestContentDTO {
    @ApiModelProperty(value = "公司代码")
    @NotBlank(message = "companyCode不能为空")
    private String companyCode;
    @ApiModelProperty(value = "订单类型,SELF_OPERATED/INTERCONNECT")
    @NotBlank(message = "orderType不能为空")
    private String orderType;
    @ApiModelProperty(value = "主订单号")
    @NotBlank(message = "businessOrderNo不能为空")
    private String businessOrderNo;
    @ApiModelProperty(value = "子订单号")
    @NotBlank(message = "subOrderNo不能为空")
    private String subOrderNo;
    @ApiModelProperty(value = "支付类型,PRE_PAY/POST_PAY")
    @NotBlank(message = "paymentType不能为空")
    private String paymentType;
    @ApiModelProperty(value = "订单状态")
    @NotBlank(message = "orderStatus不能为空")
    private String orderStatus;
    @ApiModelProperty(value = "结算日期,格式yyyyMMdd")
    @NotBlank(message = "settlementDate不能为空")
    private String settlementDate;
    @ApiModelProperty(value = "物料号")
    @NotBlank(message = "materialNo不能为空")
    private String materialNo;
    @ApiModelProperty(value = "客商编码")
    @NotBlank(message = "businessPartnerCode不能为空")
    private String businessPartnerCode;
    @ApiModelProperty(value = "币种")
    @NotBlank(message = "currency不能为空")
    private String currency;
    @ApiModelProperty(value = "确认收入金额(含税)")
    @NotNull(message = "confirmedRevenueAmount不能为空")
    private BigDecimal confirmedRevenueAmount;
    @ApiModelProperty(value = "收客户现金金额")
    @NotNull(message = "cashCollectedAmount不能为空")
    private BigDecimal cashCollectedAmount;
    @ApiModelProperty(value = "消耗券总额")
    @NotNull(message = "couponConsumedTotal不能为空")
    private BigDecimal couponConsumedTotal;
    @ApiModelProperty(value = "收款流水号")
    @NotBlank(message = "paymentFlowNo不能为空")
    private String paymentFlowNo;
    @ApiModelProperty(value = "流水金额")
    @NotNull(message = "paymentFlowAmount不能为空")
    private BigDecimal paymentFlowAmount;
    @ApiModelProperty(value = "支付渠道")
    @NotBlank(message = "paymentChannel不能为空")
    private String paymentChannel;
    @ApiModelProperty(value = "券行项目数组")
    @Valid
    private List<XpFrdXfipEventCouponLineDTO> couponLines;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/frdXfipEvent/XpFrdXfipEventIngestReqDTO.java
New file
@@ -0,0 +1,31 @@
package com.xiaopeng.api.dto.frdXfipEvent;
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;
@Data
@ApiModel(value = "FRD XFIP 事件上报请求")
public class XpFrdXfipEventIngestReqDTO {
    @ApiModelProperty(value = "事件唯一ID")
    @NotBlank(message = "eventId不能为空")
    private String eventId;
    @ApiModelProperty(value = "业务线标识,RT/CHARGING/VEHICLE_SALES")
    @NotBlank(message = "businessLine不能为空")
    private String businessLine;
    @ApiModelProperty(value = "幂等ID")
    @NotBlank(message = "reqId不能为空")
    private String reqId;
    @ApiModelProperty(value = "业务报文")
    @Valid
    @NotNull(message = "content不能为空")
    private XpFrdXfipEventIngestContentDTO content;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/CreditOrderCreateDto.java
@@ -28,6 +28,9 @@
    @NotBlank(message = "业务方订单id不能为空")
    private String businessOrderId;
    @ApiModelProperty(value = "业务方参数,以json形式传递")
    private String businessExtendData;
    @ApiModelProperty(value = "订单超时时间,不传默认不会超时 yyyy-MM-dd HH:mm:ss")
    private String expireTime;
@@ -74,4 +77,6 @@
        @NotBlank(message = "付费说明不能为空")
        private String description;
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/payFront/PayOrderQueryDto.java
New file
@@ -0,0 +1,20 @@
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 PayOrderQueryDto {
    @ApiModelProperty(value = "业务appid,业务接入时由支付平台分配提供")
    @NotBlank(message = "bizId不能为空")
    private String bizId;
    @ApiModelProperty(value = "业务订单号")
    @NotBlank(message = "bizOrderId不能为空")
    private String bizOrderId;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/frdXfipEvent/XpFrdXfipEventClientFallbackFactory.java
New file
@@ -0,0 +1,31 @@
package com.xiaopeng.api.factory.frdXfipEvent;
import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestReqDTO;
import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
import com.xiaopeng.api.vo.frdXfipEvent.XpFrdXfipEventIngestRespVO;
import com.xiaopeng.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * fallback factory.
 *
 * @author mitao
 */
@Slf4j
@Component
public class XpFrdXfipEventClientFallbackFactory implements FallbackFactory<XpFrdXfipEventClient> {
    @Override
    public XpFrdXfipEventClient create(Throwable cause) {
        return new XpFrdXfipEventClient() {
            @Override
            public R<XpFrdXfipEventIngestRespVO> ingest(XpFrdXfipEventIngestReqDTO reqDTO) {
                log.error("XpFrdXfipEventClient ingest error:{}", cause.getMessage());
                return R.fail("frd xfip event ingest failed");
            }
        };
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/payFront/XpPayFrontClientFallbackFactory.java
@@ -7,6 +7,7 @@
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.PayOrderQueryDto;
import com.xiaopeng.api.dto.payFront.RefundRequestDto;
import com.xiaopeng.api.dto.payFront.UnsignCreditPayDto;
import com.xiaopeng.api.feignClient.payFront.XpPayFrontClient;
@@ -17,6 +18,7 @@
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.PayOrderQueryVo;
import com.xiaopeng.api.vo.payFront.RefundVo;
import com.xiaopeng.api.vo.payFront.UnsignCreditPayVo;
import com.xiaopeng.common.core.domain.R;
@@ -78,6 +80,11 @@
            }
            @Override
            public R<PayOrderQueryVo> queryPayOrder(PayOrderQueryDto dto) {
                return fail("pay order query failed");
            }
            @Override
            public R<UnsignCreditPayVo> unsign(UnsignCreditPayDto dto) {
                return fail("credit pay unsign failed");
            }
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/frdXfipEvent/XpFrdXfipEventClient.java
New file
@@ -0,0 +1,23 @@
package com.xiaopeng.api.feignClient.frdXfipEvent;
import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestReqDTO;
import com.xiaopeng.api.factory.frdXfipEvent.XpFrdXfipEventClientFallbackFactory;
import com.xiaopeng.api.vo.frdXfipEvent.XpFrdXfipEventIngestRespVO;
import com.xiaopeng.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * 支付中心Feign客户端
 *
 * @author mitao
 */
@FeignClient(name = "xp-frd-xfip-event-boot", fallbackFactory = XpFrdXfipEventClientFallbackFactory.class)
public interface XpFrdXfipEventClient {
    @PostMapping("/logan/event/v1/ingest")
    R<XpFrdXfipEventIngestRespVO> ingest(@RequestBody XpFrdXfipEventIngestReqDTO reqDTO);
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/payFront/XpPayFrontClient.java
@@ -7,6 +7,7 @@
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.PayOrderQueryDto;
import com.xiaopeng.api.dto.payFront.RefundRequestDto;
import com.xiaopeng.api.dto.payFront.UnsignCreditPayDto;
import com.xiaopeng.api.factory.payFront.XpPayFrontClientFallbackFactory;
@@ -17,6 +18,7 @@
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.PayOrderQueryVo;
import com.xiaopeng.api.vo.payFront.RefundVo;
import com.xiaopeng.api.vo.payFront.UnsignCreditPayVo;
import com.xiaopeng.common.core.domain.R;
@@ -62,6 +64,11 @@
    @PostMapping("/logan/v1/order/precreate")
    R<CreditPrecreateVo> precreate(@RequestBody CreditPrecreateDto dto);
    @PostMapping("/logan/pay/creditPay/unsign")
    R<UnsignCreditPayVo> unsign(@RequestBody UnsignCreditPayDto dto);
    // 预支付查询订单
    @PostMapping("/logan/v1/order/query")
    R<PayOrderQueryVo> queryPayOrder(@RequestBody PayOrderQueryDto dto);
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java
@@ -115,7 +115,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime getoffTime;
    @ApiModelProperty(value = "支付方式(1=微信,2=其他)")
    @ApiModelProperty(value = "支付方式(1=微信,2=其他 3免密)")
    private Integer payType;
    @ApiModelProperty(value = "订单金额")
@@ -282,4 +282,24 @@
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号(商户订单号)")
    @TableField("auth_order_id")
    private String authOrderId;
    @ApiModelProperty(value = "信用下单接口获取的业务id")
    @TableField("business_order_id")
    private String businessOrderId;
    @ApiModelProperty(value = "业务主单号")
    @TableField("main_order_id")
    private String mainOrderId;
    @ApiModelProperty(value = "推送财务状态 1成功 0未推送 2失败")
    @TableField("frd_xfip_evenet_status")
    private Integer frdXfipEvenetStatus;
    @ApiModelProperty(value = "推送事件id")
    @TableField("frd_xfip_evenet_id")
    private String frdXfipEvenetId;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/frdXfipEvent/XpFrdXfipEventIngestRespVO.java
New file
@@ -0,0 +1,19 @@
package com.xiaopeng.api.vo.frdXfipEvent;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "FRD XFIP 事件上报响应")
public class XpFrdXfipEventIngestRespVO {
    @ApiModelProperty(value = "事件唯一ID")
    private String eventId;
    @ApiModelProperty(value = "接收状态,ACCEPTED/DUPLICATE/REJECTED")
    private String receiveStatus;
    @ApiModelProperty(value = "接收时间")
    private String receiveTime;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/payFront/PayOrderQueryVo.java
New file
@@ -0,0 +1,46 @@
package com.xiaopeng.api.vo.payFront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "查询订单详情响应")
public class PayOrderQueryVo {
    @ApiModelProperty(value = "业务订单号")
    private String bizOrderId;
    @ApiModelProperty(value = "支付平台支付订单号")
    private String payOrderId;
    @ApiModelProperty(value = "订单类别")
    private String category;
    @ApiModelProperty(value = "用户标识")
    private String uid;
    @ApiModelProperty(value = "订单标题")
    private String title;
    @ApiModelProperty(value = "支付金额,分为单位")
    private Long amount;
    @ApiModelProperty(value = "订单支付状态,0未支付,1支付成功,2支付失败,3支付中")
    private Integer payStatus;
    @ApiModelProperty(value = "订单创建时间,格式yyyy-MM-dd HH:mm:ss")
    private String createTime;
    @ApiModelProperty(value = "支付场景")
    private Integer payScene;
    @ApiModelProperty(value = "支付方式")
    private Integer payType;
    @ApiModelProperty(value = "支付成功时间,格式yyyy-MM-dd HH:mm:ss")
    private String payFinishTime;
    @ApiModelProperty(value = "业务透传的参数,对应businessExtendData")
    private String extData;
}
xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -64,4 +64,5 @@
com.xiaopeng.api.factory.account.XpOperationsUserClientFallbackFactory
com.xiaopeng.api.factory.pushMessage.WebSocketMessageFallbackFactory
com.xiaopeng.api.factory.operation.XpOfficialPartnerClientFallbackFactory
com.xiaopeng.api.factory.payFront.XpPayFrontClientFallbackFactory
com.xiaopeng.api.factory.payFront.XpPayFrontClientFallbackFactory
com.xiaopeng.api.factory.frdXfipEvent.XpFrdXfipEventClientFallbackFactory
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/dto/ServiceNameConstantsEnum.java
@@ -81,5 +81,9 @@
     * 支付中心
     */
    String XP_PAY_FRONT_BOOT = "xp-pay-front-boot";
    /**
     * 财务中台 - 事件引擎服务
     */
    String XP_FRD_XFIP_EVENT_BOOT = "xp-frd-xfip-event-boot";
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -16,6 +16,7 @@
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.dto.vehicleConvoy.BleInfoResponseDto;
import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.feignClient.operation.XpWhiteListClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.BluetoothUnlockClient;
@@ -24,6 +25,7 @@
import com.xiaopeng.api.model.operation.XpOfficialPartner;
import com.xiaopeng.api.model.operation.XpSystemSetting;
import com.xiaopeng.api.model.operation.XpWhitelist;
import com.xiaopeng.api.model.order.OrderTrajectory;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.account.LoginUser;
@@ -40,13 +42,11 @@
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.utils.WebUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.log.annotation.AdminOperationLog;
import com.xiaopeng.common.log.enums.AdminBusinessType;
import com.xiaopeng.common.log.enums.AdminOperationType;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.order.config.BluetoothDebugConfig;
import com.xiaopeng.order.dto.OrderNavigationDto;
import com.xiaopeng.order.model.dto.*;
import com.xiaopeng.api.model.order.OrderTrajectory;
import com.xiaopeng.order.mangodb.service.OrderTrajectoryService;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
@@ -57,6 +57,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;
@@ -116,8 +117,6 @@
    @Resource
    private  VehicleMacClient vehicleMacClient;
    @Resource
    private SysGroupMenuClient groupMenuClient;
    @Resource
    private XpWhiteListClient xpWhiteListClient;
@@ -164,6 +163,23 @@
        }
        return R.ok(0L);
    }
    /**
     * 查询是否有未支付订单
     * 返回0 可以下单,非0为未支付订单ID
     */
    @PostMapping("/logan/inner/order/has-unpay-order")
    @ApiOperation(value = "查询是否有未支付订单", tags = {"内部接口"})
    public R<Long> hasUnPayOrder(String uid) {
        XpOrder order = xpOrderService.getOne(new LambdaQueryWrapper<XpOrder>()
                .eq(XpOrder::getAppUserId, Long.parseLong(uid))
                .eq(XpOrder::getStatus, 8)
                .last("LIMIT 1"));
        if (order != null) {
            return R.ok(order.getId());
        }
        return R.ok(0L);
    }
    /**
@@ -1011,6 +1027,7 @@
    }
    /**
     * 将订单推单状态还原重新推单
     * @param orderId
@@ -1028,4 +1045,62 @@
        }
        return R.ok();
    }
    /**
     * 信用支付下单回调
     */
    @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("成功");
            // 对接财务
            xpOrderService.xpFrdXfipEventPush(order,dto.getPayFee(),dto.getOrderId());
            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,16 @@
     */
    OrderStatusFromOrderIdVo queryOrderStatusFromOrderId(Long orderId);
    /**
     * 订单支付成功后的回调
     * @param order
     */
    void creditPayCall(XpOrder order);
    /**
     * 订单支付成功后 对接财务
     * @param order
     */
    void xpFrdXfipEventPush(XpOrder order,Long payFee,String orderId);
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -18,6 +18,9 @@
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.automaticPilot.VehicleEventDTO;
import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventCouponLineDTO;
import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestContentDTO;
import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestReqDTO;
import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
@@ -34,6 +37,7 @@
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.automaticPilot.VehicleBuriedPointClient;
import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.map.XpStationClient;
@@ -57,6 +61,7 @@
import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderStatus;
import com.xiaopeng.api.vo.automaticPilot.protobuf.TaskActionType;
import com.xiaopeng.api.vo.frdXfipEvent.XpFrdXfipEventIngestRespVO;
import com.xiaopeng.api.vo.operation.NearestNextVo;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.order.*;
@@ -218,6 +223,9 @@
    private XpPayFrontClient xpPayFrontClient;
    @Resource
    private XpStationClient xpStationClient;
    @Resource
    private XpFrdXfipEventClient xpFrdXfipEventClient;
    @Value("${robotaxi.appId:xp_robotaxi_api}")
    private String appid;
@@ -3418,87 +3426,100 @@
    public R payment(XpOrderPayDto dto, String uid) {
//        XpOrder order = this.getById(dto.getOrderId());
//
//        HashMap<String, Object> resultMap = new HashMap<>();
//
//        // 1.0 免密  //查询是否开通免密
//        // 1先查用户是否申请  申请了拿到通过的businessOrderId
//        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;
//            }
//        }
//
//
//        if(signed){
//            // y已签约 1.信用下单
//            CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
//            creditOrderCreateDto.setUid(Long.valueOf(uid));
//            creditOrderCreateDto.setBusinessId("xp-robotaxi");
//            creditOrderCreateDto.setCategory("009001");
//            creditOrderCreateDto.setBusinessOrderId("");
//            creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
//            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();
//                resultMap.put("status", 1);
//                resultMap.put("value", data);
//
//                order.setPayType(3);
//                order.setAuthOrderId(data.getAuthOrderId());
//
//                return R.ok(resultMap);
//            }
//
//        }else {
//
//            // 未签约
//            // 调用预下单接口
//            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
//            creditPrecreateDto.setUid(uid);
//            creditPrecreateDto.setBizId("xp-robotaxi");
//            creditPrecreateDto.setBizOrderId("");
//            creditPrecreateDto.setPayScene(99);
//            creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
//            creditPrecreateDto.setCategory("009001");
//            creditPrecreateDto.setTitle("信用下单");
//            creditPrecreateDto.setDetail("信用下单");
//
//            HashMap<String, String> businessExtend = new HashMap<>();
//            businessExtend.put("returnUrl", "");
//            businessExtend.put("notifyUrl", "");
//            creditPrecreateDto.setBusinessExtend(businessExtend);
//
//            R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
//            if (creditPrecreateVoR.getCode()==200) {
//                CreditPrecreateVo data = creditPrecreateVoR.getData();
//                resultMap.put("status", 2);
//                resultMap.put("value", data);
//                return R.ok(resultMap);
//            }
//        }
//        return R.fail();
        XpOrder order = this.getById(dto.getOrderId());
        HashMap<String, Object> resultMap = new HashMap<>();
        // 1.0 免密  //查询是否开通免密
        // 1先查用户是否申请  申请了拿到通过的businessOrderId
        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;
            }
        }
        if(signed){
            // y已签约 1.信用下单
            CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
            creditOrderCreateDto.setUid(Long.valueOf(uid));
            creditOrderCreateDto.setBusinessId("xp-robotaxi");
            creditOrderCreateDto.setCategory("009001");
            creditOrderCreateDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
            creditOrderCreateDto.setPayType("13");
            creditOrderCreateDto.setPayCallbackUrl("");
            creditOrderCreateDto.setBusinessExtendData("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
            // 信用下单
            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();
                resultMap.put("status", 1);
                resultMap.put("value", data);
                order.setPayType(3);
                order.setAuthOrderId(data.getAuthOrderId());
                order.setBusinessOrderId(creditOrderCreateDto.getBusinessOrderId());
                order.setMainOrderId(order.getOrderNumber());
                return R.ok(resultMap);
            }
        }else {
            // 未签约
            // 调用预下单接口
            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
            creditPrecreateDto.setUid(uid);
            creditPrecreateDto.setBizId("xp-robotaxi");
            creditPrecreateDto.setBizOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            creditPrecreateDto.setPayScene(99);
            creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
            creditPrecreateDto.setCategory("009001");
            creditPrecreateDto.setTitle("信用下单");
            creditPrecreateDto.setDetail("信用下单");
            HashMap<String, String> businessExtend = new HashMap<>();
            businessExtend.put("returnUrl", "");
            businessExtend.put("notifyUrl", "");
            creditPrecreateDto.setBusinessExtend(businessExtend);
            creditPrecreateDto.setExtBusinessData2("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
            R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
            if (creditPrecreateVoR.getCode()==200) {
                CreditPrecreateVo data = creditPrecreateVoR.getData();
                resultMap.put("status", 2);
                resultMap.put("value", data);
                order.setPayType(1);
                order.setBusinessOrderId(creditPrecreateDto.getBizOrderId());
                order.setMainOrderId(order.getOrderNumber());
                this.updateById(order);
                return R.ok(resultMap);
            }
        }
@@ -3522,7 +3543,7 @@
        }
        baseMapper.updateById(order);
        bootCommonService.setCache_orderStatus(order.getId(), order, null);
        return R.ok();
        return R.fail();
    }
    /**
@@ -4885,19 +4906,157 @@
                    postPayments.add(postPayment);
                    creditOrderWxPayDto.setPostPayments(postPayments);
                    R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(creditOrderWxPayDto);
                }else if(creditOrderQueryVo.getCreditOrderStatus().equals("CREATED") || creditOrderQueryVo.getCreditOrderStatus().equals("DOING")){
                }
            }
        }else {
            // 微信支付也需要查询下
            PayOrderQueryDto queryDto = new PayOrderQueryDto();
            queryDto.setBizId("xp-robotaxi");
            queryDto.setBizOrderId(order.getBusinessOrderId());
            R<PayOrderQueryVo> payOrderQueryVoR = xpPayFrontClient.queryPayOrder(queryDto);
            if(payOrderQueryVoR.getCode()==200){
                PayOrderQueryVo payOrderQueryVo = payOrderQueryVoR.getData();
                if(payOrderQueryVo.getPayStatus()==1){
                    // 支付成功
                    order.setStatus(9);
                    order.setAppUserId(null);
                    order.setAuthOrderId(payOrderQueryVo.getPayOrderId());
                    if(payOrderQueryVo.getPayType()==13){
                        order.setPayType(3);
                    }
                    this.updateById(order);
                    // 财务推送
                    xpFrdXfipEventPush(order,payOrderQueryVo.getAmount(),payOrderQueryVo.getPayOrderId());
                }
            }
        }
        OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
        orderStatusFromOrderIdVo.setOrderId(order.getId());
        orderStatusFromOrderIdVo.setStatus(order.getStatus());
        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);
    }
    /**
     * 对接财务数据推送
     * @param order
     */
    @Override
    public void xpFrdXfipEventPush(XpOrder order,Long payFee,String orderId) {
        if(order.getFrdXfipEvenetStatus()==1){
            return;
        }
        XpFrdXfipEventIngestReqDTO xpFrdXfipEventIngestReqDTO = new XpFrdXfipEventIngestReqDTO();
        xpFrdXfipEventIngestReqDTO.setEventId("RT_04");
        xpFrdXfipEventIngestReqDTO.setBusinessLine("RT");
        xpFrdXfipEventIngestReqDTO.setReqId(OrderCodeUtil.getOrderCode("FRDXFOPEVENT"));
        XpFrdXfipEventIngestContentDTO xpFrdXfipEventIngestContentDTO = new XpFrdXfipEventIngestContentDTO();
        xpFrdXfipEventIngestContentDTO.setCompanyCode("8000");
        xpFrdXfipEventIngestContentDTO.setOrderType("SELF_OPERATED");
        xpFrdXfipEventIngestContentDTO.setBusinessOrderNo(order.getMainOrderId());
        xpFrdXfipEventIngestContentDTO.setSubOrderNo(order.getBusinessOrderId());
        xpFrdXfipEventIngestContentDTO.setPaymentType("POST_PAY");
        xpFrdXfipEventIngestContentDTO.setOrderStatus("结算完成");
        xpFrdXfipEventIngestContentDTO.setSettlementDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
        xpFrdXfipEventIngestContentDTO.setMaterialNo("XE2000398");
        xpFrdXfipEventIngestContentDTO.setBusinessPartnerCode("5004901");
        xpFrdXfipEventIngestContentDTO.setCurrency("CNY");
        xpFrdXfipEventIngestContentDTO.setConfirmedRevenueAmount(order.getOrderMoney());
        xpFrdXfipEventIngestContentDTO.setCashCollectedAmount(new BigDecimal(payFee).divide(BigDecimal.valueOf(100), 2,RoundingMode.HALF_UP));
        xpFrdXfipEventIngestContentDTO.setCouponConsumedTotal(order.getCouponMoney()==null?BigDecimal.ZERO:order.getCouponMoney());
        xpFrdXfipEventIngestContentDTO.setPaymentFlowNo(orderId);
        xpFrdXfipEventIngestContentDTO.setPaymentFlowAmount(new BigDecimal(payFee).divide(BigDecimal.valueOf(100), 2,RoundingMode.HALF_UP));
        xpFrdXfipEventIngestContentDTO.setPaymentChannel("WECHAT");
        if(order.getCouponId()!=null){
            ArrayList<XpFrdXfipEventCouponLineDTO> list = new ArrayList<>(1);
            XpFrdXfipEventCouponLineDTO xpFrdXfipEventCouponLineDTO = new XpFrdXfipEventCouponLineDTO();
            xpFrdXfipEventCouponLineDTO.setCouponId(String.valueOf(order.getCouponId()));
            xpFrdXfipEventCouponLineDTO.setCouponType("ACTIVITY");
//            xpFrdXfipEventCouponLineDTO.setCouponIssuerCompanyCode("5004901");
//            xpFrdXfipEventCouponLineDTO.setSelfBorneAmount(order.getCouponMoney());
//            xpFrdXfipEventCouponLineDTO.setThirdPartyBorneAmount(BigDecimal.ZERO);
            xpFrdXfipEventCouponLineDTO.setCouponDeductionAmount(order.getCouponMoney());
            xpFrdXfipEventCouponLineDTO.setCouponIssuerCompanyCode("8000");
            list.add(xpFrdXfipEventCouponLineDTO);
            xpFrdXfipEventIngestContentDTO.setCouponLines(list);
        }
        xpFrdXfipEventIngestReqDTO.setContent(xpFrdXfipEventIngestContentDTO);
        R<XpFrdXfipEventIngestRespVO> ingest = xpFrdXfipEventClient.ingest(xpFrdXfipEventIngestReqDTO);
        if(ingest.getCode()==200){
            XpFrdXfipEventIngestRespVO data = ingest.getData();
            if(!data.getReceiveStatus().equals("REJECTED")){
                // 推送成功
                order.setFrdXfipEvenetStatus(1);
                order.setFrdXfipEvenetId(data.getEventId());
            }else {
                // 推送失败
                order.setFrdXfipEvenetStatus(2);
                order.setFrdXfipEvenetId(data.getEventId());
            }
            log.info("xpFrdXfipEventPush:{}",data);
        }else {
            // 重试1次
            ingest = xpFrdXfipEventClient.ingest(xpFrdXfipEventIngestReqDTO);
            XpFrdXfipEventIngestRespVO data = ingest.getData();
            if(ingest.getCode()==200){
                if(!data.getReceiveStatus().equals("REJECTED")){
                    // 推送成功
                    order.setFrdXfipEvenetStatus(1);
                    order.setFrdXfipEvenetId(data.getEventId());
                }else {
                    // 推送失败
                    order.setFrdXfipEvenetStatus(2);
                    order.setFrdXfipEvenetId(data.getEventId());
                }
                log.info("xpFrdXfipEventPush:{}",data);
            }else {
                // 推送失败
                order.setFrdXfipEvenetStatus(2);
                order.setFrdXfipEvenetId(data.getEventId());
            }
            log.info("xpFrdXfipEventPush:{}",ingest.getMsg());
        }
        order.setAppUserId(null);
        updateById(order);
    }
@@ -4921,10 +5080,10 @@
        // 通过uid 和时间查出来数据  先判断是否传入了分页
        if (query.getPageNo()!=null && query.getPageSize()!=null) {
            Page<XpOrder> page = new Page<>(query.getPageNo(), query.getPageSize());
            Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime));
            Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime).orderByDesc(BaseModel::getCreateTime));
            list = orderPage.getRecords();
        }else {
            list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime));
            list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime).orderByDesc(BaseModel::getCreateTime));
        }
        if(list.isEmpty()){
@@ -4944,18 +5103,18 @@
            xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber());
            xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney());
            xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney());
            xpInvoiceVo.setOrderFinishTime(String.valueOf(xpOrder.getTripEnd()));
            xpInvoiceVo.setOrderFinishTime(xpOrder.getTripEnd()!=null?String.valueOf(xpOrder.getTripEnd()):"");
            xpInvoiceVo.setXpInvoiceFlag(true);
            xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus());
            XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary();
            // yyyy-MM-dd格式
            itinerary.setTripStartDate(xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            itinerary.setTripEndDate(xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            itinerary.setTripStartDate(xpOrder.getAcceptanceTime()!=null?xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
            itinerary.setTripEndDate(xpOrder.getTripEnd()!=null?xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
            XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get();
            itinerary.setCarType(xpVehicle.getVehicleModel());
            itinerary.setTripStartDate(xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            itinerary.setTripStartDate(xpOrder.getBoardingTime()!=null?xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
            itinerary.setCity(xpOrder.getCityName());
            itinerary.setStartPoint(xpOrder.getStartAddress());
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaskOrderSendSmsUtil.java
@@ -37,6 +37,10 @@
    @Resource
    private SmsClient smsClient;
    @Value("${robotaxi.sms.app-id:1476153389173952512}")
    private String smsAppId;
//    @Value("${sms.appid:}")
//    private String smsAppId;
//
@@ -84,13 +88,13 @@
        }
        SmsVo smsVo = new SmsVo();
        smsVo.setAppId("");
        smsVo.setAppId(smsAppId);
        smsVo.setPushType(1);
        smsVo.setReceivers(userInfo.getMobile());
        smsVo.setTemplateCode("orderPayTemplateCode");
        smsVo.setAppPushConfigCode("orderPayAppPushConfigCode");
        smsVo.setTemplateCode("RTOrderUnpaidTpl");
        smsVo.setAppPushConfigCode("RTOrderUnpaidSms");
        smsVo.setParams(new HashMap<>());
        smsVo.getParams().put("orderNo", order.getOrderNumber());
        smsVo.getParams().put("orderAmount", order.getOrderMoney().toString());
        SmsDto result = smsClient.pushSms(smsVo);
        if (result == null || result.getCode() == null || result.getCode() != 200) {
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java
@@ -12,6 +12,43 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverBaseInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverCancelRegisterInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverContractInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverMobileTerminalInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverPositionInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverPunishInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverReputationInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverRegisterInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverStatisticsInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverTrainingInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationDriverVehicleRelationInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOperateArriveInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOrderCancelInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOrderMatchInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOrderCreateInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOrderViolationInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOperateDepartInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationOperatePayInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleCancelReportInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPassengerComplaintInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPassengerEvaluateInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPassengerBaseInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformAggregationInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformLicenseInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformPauseOperationRegisterInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformOperationRegisterInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformInvestorInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformPayInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformPriceInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationPlatformServiceInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleBaseInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleInsuranceInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleMileageInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleOperationRegisterInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleOperateLoginInfoDTO;
import com.xiaopeng.vehicleConvoy.model.dto.RegulationVehicleOperateLogoutInfoDTO;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.vehicleConvoy.model.dto.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;