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) {