新增免押相关接口
This commit is contained in:
@ -11,6 +11,7 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
public enum PayStatusEnum {
|
public enum PayStatusEnum {
|
||||||
|
INIT("INIT", "初始化"),
|
||||||
USERPAYING("USERPAYING", "用户支付中"),
|
USERPAYING("USERPAYING", "用户支付中"),
|
||||||
SUCCESS("SUCCESS", "支付成功"),
|
SUCCESS("SUCCESS", "支付成功"),
|
||||||
PAYERROR("PAYERROR", "支付失败"),
|
PAYERROR("PAYERROR", "支付失败"),
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
public enum SubOrderTypeEnum {
|
public enum SubOrderTypeEnum {
|
||||||
|
NO_DEPOSIT("NO_DEPOSIT", "免押冻结订单"),
|
||||||
DEPOSIT("DEPOSIT", "押金订单"),
|
DEPOSIT("DEPOSIT", "押金订单"),
|
||||||
RENTCAR("RENTCAR", "租车订单"),
|
RENTCAR("RENTCAR", "租车订单"),
|
||||||
RENTBATTEY("RENTBATTEY", "租电订单"),
|
RENTBATTEY("RENTBATTEY", "租电订单"),
|
||||||
|
|||||||
@ -22,6 +22,13 @@ public interface OrderService {
|
|||||||
*/
|
*/
|
||||||
RentCarOrderResultDTO submitRentCarOrder(RentCarOrderReq rentCarOrderReq);
|
RentCarOrderResultDTO submitRentCarOrder(RentCarOrderReq rentCarOrderReq);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 免押下单
|
||||||
|
* @param rentCarOrderReq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
RentCarOrderResultDTO depositFreeSubmitRentCarOrder(RentCarOrderReq rentCarOrderReq);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 续租车
|
* 续租车
|
||||||
* @param rentCarOrderReq
|
* @param rentCarOrderReq
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import com.sczx.order.service.OrderService;
|
|||||||
import com.sczx.order.service.PayService;
|
import com.sczx.order.service.PayService;
|
||||||
import com.sczx.order.thirdpart.dto.*;
|
import com.sczx.order.thirdpart.dto.*;
|
||||||
import com.sczx.order.thirdpart.dto.req.AlipayCloseRequest;
|
import com.sczx.order.thirdpart.dto.req.AlipayCloseRequest;
|
||||||
|
import com.sczx.order.thirdpart.dto.req.AlipayFundFreezeRequest;
|
||||||
import com.sczx.order.thirdpart.dto.req.CarQueryConditionReq;
|
import com.sczx.order.thirdpart.dto.req.CarQueryConditionReq;
|
||||||
import com.sczx.order.thirdpart.integration.CarInteg;
|
import com.sczx.order.thirdpart.integration.CarInteg;
|
||||||
import com.sczx.order.thirdpart.integration.PayInteg;
|
import com.sczx.order.thirdpart.integration.PayInteg;
|
||||||
@ -143,9 +144,7 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
OrderMainPO orderMainPO = OrderConvert.INSTANCE.subOrderToPo(rentCarOrderReq, userInfoDTO, rentCarRuleDTO);
|
OrderMainPO orderMainPO = OrderConvert.INSTANCE.subOrderToPo(rentCarOrderReq, userInfoDTO, rentCarRuleDTO);
|
||||||
orderMainPO.setOperatorId(Long.valueOf(companyStoreDTO.getOperatingCompanyId()));
|
orderMainPO.setOperatorId(Long.valueOf(companyStoreDTO.getOperatingCompanyId()));
|
||||||
orderMainPO.setOrderNo(OrderUtil.generateOrderNo());
|
orderMainPO.setOrderNo(OrderUtil.generateOrderNo());
|
||||||
//TODO 默认应该是待支付状态,这里先默认支付完成待取车
|
|
||||||
orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
||||||
// orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PICK.getCode());
|
|
||||||
orderMainPO.setFirstOrderTime(LocalDateTime.now());
|
orderMainPO.setFirstOrderTime(LocalDateTime.now());
|
||||||
|
|
||||||
//设置预计还车时间
|
//设置预计还车时间
|
||||||
@ -238,6 +237,11 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RentCarOrderResultDTO depositFreeSubmitRentCarOrder(RentCarOrderReq rentCarOrderReq) {
|
||||||
|
//TODO - 免押冻结
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@ -394,23 +398,37 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
|
|
||||||
LambdaQueryWrapper<OrderSubPO> orderSubQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<OrderSubPO> orderSubQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
orderSubQueryWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId());
|
orderSubQueryWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId());
|
||||||
orderSubQueryWrapper.eq(OrderSubPO::getPayStatus, PayStatusEnum.USERPAYING.getCode());
|
orderSubQueryWrapper.in(OrderSubPO::getPayStatus, Arrays.asList(PayStatusEnum.USERPAYING.getCode(), PayStatusEnum.INIT.getCode()));
|
||||||
orderSubQueryWrapper.orderByDesc(OrderSubPO::getCreatedAt).last(" limit 1");
|
orderSubQueryWrapper.orderByDesc(OrderSubPO::getCreatedAt);
|
||||||
OrderSubPO orderSubPO = orderSubRepo.getOne(orderSubQueryWrapper);
|
List<OrderSubPO> orderSubPOList = orderSubRepo.list(orderSubQueryWrapper);
|
||||||
boolean closePayOrder = false;
|
boolean closePayOrder = false;
|
||||||
//获取门店信息
|
//获取门店信息
|
||||||
CompanyStoreDTO companyStoreDTO = storeInteg.getStoreById(Integer.valueOf(orderMainPO.getStoreId().toString()));
|
CompanyStoreDTO companyStoreDTO = storeInteg.getStoreById(Integer.valueOf(orderMainPO.getStoreId().toString()));
|
||||||
|
OrderSubPO rentOrder = orderSubPOList.stream().filter(orderSubPO -> StringUtils.equalsIgnoreCase(orderSubPO.getSuborderType(), SubOrderTypeEnum.RENTCAR.getCode())).findFirst().orElse( new OrderSubPO());
|
||||||
//关闭支付单
|
//关闭支付单
|
||||||
if(StringUtils.equalsIgnoreCase(orderSubPO.getPaymentMethod(), PaymentTypeEnum.WX_PAY.getCode())){
|
if(StringUtils.equalsIgnoreCase(rentOrder.getPaymentMethod(), PaymentTypeEnum.WX_PAY.getCode())){
|
||||||
log.info("开始关闭支付单");
|
log.info("开始关闭微信租车支付单");
|
||||||
closePayOrder = payInteg.closeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()), orderSubPO.getPaymentId());
|
closePayOrder = payInteg.closeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()), rentOrder.getPaymentId());
|
||||||
} else if(StringUtils.equalsIgnoreCase(orderSubPO.getPaymentMethod(), PaymentTypeEnum.ZFB_PAY.getCode())){
|
} else if(StringUtils.equalsIgnoreCase(rentOrder.getPaymentMethod(), PaymentTypeEnum.ZFB_PAY.getCode())){
|
||||||
log.info("开始关闭支付宝支付单");
|
|
||||||
AlipayCloseRequest alipayCloseRequest = new AlipayCloseRequest();
|
if(orderMainPO.getIsDepositFree()){
|
||||||
alipayCloseRequest.setCompanyId(Long.valueOf(companyStoreDTO.getOperatingCompanyId()));
|
OrderSubPO noDepositOrder = orderSubPOList.stream().filter(orderSubPO -> StringUtils.equalsIgnoreCase(orderSubPO.getSuborderType(), SubOrderTypeEnum.NO_DEPOSIT.getCode())).findFirst().orElse(null);
|
||||||
alipayCloseRequest.setOutTradeNo(orderSubPO.getPaymentId());
|
if(Objects.nonNull(noDepositOrder)){
|
||||||
closePayOrder = payInteg.alipayCloseOrder(alipayCloseRequest);
|
log.info("开始取消支付宝押金冻结支付单");
|
||||||
|
AlipayFundFreezeRequest fundFreezeRequest = new AlipayFundFreezeRequest();
|
||||||
|
fundFreezeRequest.setCompanyId(companyStoreDTO.getOperatingCompanyId().toString());
|
||||||
|
fundFreezeRequest.setOutOrderNo(noDepositOrder.getPaymentId());
|
||||||
|
closePayOrder = payInteg.cancelFundFreeze(fundFreezeRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(StringUtils.equalsIgnoreCase(rentOrder.getPayStatus(), PayStatusEnum.USERPAYING.getCode())){
|
||||||
|
log.info("开始关闭支付宝租车支付单");
|
||||||
|
AlipayCloseRequest alipayCloseRequest = new AlipayCloseRequest();
|
||||||
|
alipayCloseRequest.setCompanyId(Long.valueOf(companyStoreDTO.getOperatingCompanyId()));
|
||||||
|
alipayCloseRequest.setOutTradeNo(rentOrder.getPaymentId());
|
||||||
|
closePayOrder = payInteg.alipayCloseOrder(alipayCloseRequest);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(closePayOrder){
|
if(closePayOrder){
|
||||||
|
|||||||
@ -0,0 +1,14 @@
|
|||||||
|
package com.sczx.order.thirdpart.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@ApiModel("支付宝资金冻结响应参数")
|
||||||
|
@Data
|
||||||
|
public class AlipayFundFreezeResponse {
|
||||||
|
private boolean success;
|
||||||
|
private String message;
|
||||||
|
private String outTradeNo; // 商户订单号
|
||||||
|
private String orderStr; // 支付串(用于前端调起支付)
|
||||||
|
private String code; // 状态码
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
package com.sczx.order.thirdpart.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@ApiModel("支付宝资金冻结响应参数")
|
||||||
|
@Data
|
||||||
|
public class AlipayQueryFreezeResponse {
|
||||||
|
private boolean success;
|
||||||
|
private String message;
|
||||||
|
private String outTradeNo; // 商户订单号
|
||||||
|
private String authNo; // 支付串(用于前端调起支付)
|
||||||
|
private String code; // 状态码
|
||||||
|
}
|
||||||
@ -62,4 +62,7 @@ public class UnifiedPaymentInfoDTO {
|
|||||||
|
|
||||||
@ApiModelProperty(value = "支付宝交易号")
|
@ApiModelProperty(value = "支付宝交易号")
|
||||||
private String tradeNo; // 支付宝交易号
|
private String tradeNo; // 支付宝交易号
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "支付宝芝麻信用免押支付串(用于前端调起支付)")
|
||||||
|
private String orderStr;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
package com.sczx.order.thirdpart.dto.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@ApiModel("支付宝资金冻结请求参数")
|
||||||
|
@Data
|
||||||
|
public class AlipayFinishFreezeRequest {
|
||||||
|
private String companyId;
|
||||||
|
@ApiModelProperty(value = "支付宝资金授权订单号")
|
||||||
|
private String authNo;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "解冻请求流水号")
|
||||||
|
private String outRequestNo;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "解冻金额")
|
||||||
|
private String amount;
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.sczx.order.thirdpart.dto.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@ApiModel("支付宝资金冻结请求参数")
|
||||||
|
@Data
|
||||||
|
public class AlipayFundFreezeRequest {
|
||||||
|
private String companyId;
|
||||||
|
private String outOrderNo;
|
||||||
|
private String title;
|
||||||
|
private String amount;
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
package com.sczx.order.thirdpart.dto.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@ApiModel("支付宝资金冻结请求参数")
|
||||||
|
@Data
|
||||||
|
public class AlipayQueryFreezeRequest {
|
||||||
|
private String companyId;
|
||||||
|
private String outOrderNo;
|
||||||
|
private String operationType;
|
||||||
|
}
|
||||||
@ -1,9 +1,6 @@
|
|||||||
package com.sczx.order.thirdpart.facade;
|
package com.sczx.order.thirdpart.facade;
|
||||||
|
|
||||||
import com.sczx.order.thirdpart.dto.AlipayCreateResponse;
|
import com.sczx.order.thirdpart.dto.*;
|
||||||
import com.sczx.order.thirdpart.dto.AlipayQueryResponse;
|
|
||||||
import com.sczx.order.thirdpart.dto.AlipayResponse;
|
|
||||||
import com.sczx.order.thirdpart.dto.PaymentResponse;
|
|
||||||
import com.sczx.order.thirdpart.dto.req.*;
|
import com.sczx.order.thirdpart.dto.req.*;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@ -86,4 +83,32 @@ public interface PayFacade {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/api/alipay/refundQuery")
|
@PostMapping("/api/alipay/refundQuery")
|
||||||
AlipayResponse alipayRefundQuery(@RequestBody AlipayRefundRequest request);
|
AlipayResponse alipayRefundQuery(@RequestBody AlipayRefundRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 冻结接口
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/authAlipay/fundFreeze")
|
||||||
|
AlipayFundFreezeResponse fundFreeze(@RequestBody AlipayFundFreezeRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消冻结
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/authAlipay/cancelFundFreeze")
|
||||||
|
AlipayFundFreezeResponse cancelFundFreeze(@RequestBody AlipayFundFreezeRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询冻结
|
||||||
|
* @param alipayQueryFreezeRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/authAlipay/queryFundFreeze")
|
||||||
|
AlipayQueryFreezeResponse queryFundFreeze(@RequestBody AlipayQueryFreezeRequest alipayQueryFreezeRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 完结冻结
|
||||||
|
* @param alipayFinishFreezeRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/authAlipay/finishFreeze")
|
||||||
|
AlipayResponse finishFreeze(@RequestBody AlipayFinishFreezeRequest alipayFinishFreezeRequest);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -220,4 +220,69 @@ public class PayInteg {
|
|||||||
throw new InnerException("支付宝查询退款失败");
|
throw new InnerException("支付宝查询退款失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 免押冻结
|
||||||
|
*/
|
||||||
|
public AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest request) {
|
||||||
|
try {
|
||||||
|
AlipayFundFreezeResponse result = payFacade.fundFreeze( request);
|
||||||
|
if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
throw new InnerException("免押冻结失败");
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
log.error("免押冻结失败",e);
|
||||||
|
throw new InnerException("免押冻结失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消冻结
|
||||||
|
*/
|
||||||
|
|
||||||
|
public boolean cancelFundFreeze(AlipayFundFreezeRequest request) {
|
||||||
|
try {
|
||||||
|
AlipayFundFreezeResponse result = payFacade.cancelFundFreeze( request);
|
||||||
|
if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
throw new InnerException("取消免押冻结失败");
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
log.error("取消免押冻结失败",e);
|
||||||
|
throw new InnerException("取消免押冻结失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest) {
|
||||||
|
try {
|
||||||
|
AlipayQueryFreezeResponse result = payFacade.queryFundFreeze( alipayQueryFreezeRequest);
|
||||||
|
if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
throw new InnerException("查询免押冻结失败");
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
log.error("查询免押押冻结失败",e);
|
||||||
|
throw new InnerException("查询免押冻结失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public AlipayResponse finishFreeze(AlipayFinishFreezeRequest alipayFinishFreezeRequest) {
|
||||||
|
try {
|
||||||
|
AlipayResponse result = payFacade.finishFreeze(alipayFinishFreezeRequest);
|
||||||
|
if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
throw new InnerException("完成免押冻结失败");
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
log.error("完成免押押冻结失败",e);
|
||||||
|
throw new InnerException("完成免押冻结失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user