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;