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