liujie
2026-05-18 df7ea92f6e128abf309d389bd99ffc4602ee2049
对接财务
8个文件已添加
11个文件已修改
523 ■■■■■ 已修改文件
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 17 ●●●●● 补丁 | 查看 | 原始文档 | 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 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaskOrderSendSmsUtil.java 12 ●●●●● 补丁 | 查看 | 原始文档 | 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.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
@@ -77,6 +79,11 @@
            }
            @Override
            public R<PayOrderQueryVo> queryPayOrder(PayOrderQueryDto dto) {
                return fail("pay order query failed");
            }
            @Override
            public R<?> 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.common.core.domain.R;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
@@ -61,6 +63,11 @@
    @PostMapping("/logan/v1/order/precreate")
    R<CreditPrecreateVo> precreate(@RequestBody CreditPrecreateDto dto);
    @PostMapping("/logan/pay/creditPay/unsign")
    R<?> 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 = "订单金额")
@@ -287,4 +287,19 @@
    @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,11 +16,13 @@
import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
import com.xiaopeng.api.feignClient.operation.XpWhiteListClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.VehicleMacClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.operation.XpOfficialPartner;
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;
@@ -34,20 +36,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.api.model.order.OrderTrajectory;
import com.xiaopeng.order.model.dto.CreditPayCallDto;
import com.xiaopeng.order.model.dto.CreditPaySuccessCallDto;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderOperateDTO;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
import com.xiaopeng.order.model.dto.XpOrderReassignDTO;
import com.xiaopeng.order.model.dto.*;
import com.xiaopeng.order.model.exportExcel.XpOrderExportExcel;
import com.xiaopeng.order.model.query.XpHistoryOrderListQuery;
import com.xiaopeng.order.model.query.XpOrderExcelQuery;
@@ -111,8 +104,6 @@
    @Resource
    private  VehicleMacClient vehicleMacClient;
    @Resource
    private SysGroupMenuClient groupMenuClient;
    @Resource
    private XpWhiteListClient xpWhiteListClient;
@@ -980,6 +971,10 @@
            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/service/IXpOrderService.java
@@ -317,4 +317,9 @@
     */
    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.operation.*;
@@ -56,6 +60,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.*;
@@ -207,6 +212,9 @@
    @Resource
    private XpPayFrontClient xpPayFrontClient;
    @Resource
    private XpFrdXfipEventClient xpFrdXfipEventClient;
    @Value("${robotaxi.appId:xp_robotaxi_api}")
    private String appid;
@@ -3358,6 +3366,9 @@
            creditOrderCreateDto.setPayType("13");
            creditOrderCreateDto.setPayCallbackUrl("");
            creditOrderCreateDto.setBusinessExtendData("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
            // 信用下单
            ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
@@ -3375,6 +3386,7 @@
                order.setPayType(3);
                order.setAuthOrderId(data.getAuthOrderId());
                order.setBusinessOrderId(creditOrderCreateDto.getBusinessOrderId());
                order.setMainOrderId(order.getOrderNumber());
                return R.ok(resultMap);
            }
@@ -3386,7 +3398,7 @@
            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
            creditPrecreateDto.setUid(uid);
            creditPrecreateDto.setBizId("xp-robotaxi");
            creditPrecreateDto.setBizOrderId("");
            creditPrecreateDto.setBizOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            creditPrecreateDto.setPayScene(99);
            creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
            creditPrecreateDto.setCategory("009001");
@@ -3398,11 +3410,19 @@
            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);
            }
        }
@@ -4747,13 +4767,37 @@
                    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();
@@ -4783,6 +4827,97 @@
        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);
    }
@@ -4845,7 +4980,7 @@
            itinerary.setCity(xpOrder.getCityName());
            itinerary.setStartPoint(xpOrder.getStartAddress());
            itinerary.setEndPoint(xpOrder.getEndAddress());
            itinerary.setMileage(xpOrder.getMileageKilometers().toString());
            itinerary.setMileage(xpOrder.getMileageKilometers()!=null ? xpOrder.getMileageKilometers().toString() :"0");
            itinerary.setAmount(xpOrder.getOrderMoney());
            xpInvoiceVo.setItinerary(itinerary);
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) {