Commit 5b14488d by ping.wu

调用取消支付接口查询支付状态,关闭预支付订单

parent d82e224b
package cn.freemud.entities.dto.pay;
import lombok.Data;
@Data
public class MultiPaymentRespDto {
private String ebCode;
private String endTransTradeNo;
private String fmTradeNo;
private Integer mcouponAmount;
private String outOrderNo;
private Integer payAmount;
private Integer pcouponAmount;
private String platformTradeNo;
private String status;
private String transId;
private String ver;
private String appId;
private String userId;
private String platformMchId;
private String tradeTime;
private String transCurrency;
}
package cn.freemud.entities.dto.pay;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class MultiQueryRequest {
/**
* 开启渠道端查询,默认不开启
*/
private boolean enable_platform_data_query;
/**
* 外部交易流水号,由上游系统生成,需保证唯一(支付标识)
*/
private String outOrderNo;
/**
* 商户编号(由非码提供)
*/
private Integer partnerId;
/**
* 商家门店号(在线支付需要提前定义)
*/
private String storeId;
/**
* 接口版本,默认30
*/
private String ver;
}
package cn.freemud.entities.dto.pay;
import lombok.Data;
import java.util.List;
/**
* 聚合查询返回
*/
@Data
public class MultiQueryRespDto<T> {
private int code;
private String msg;
private T data;
@lombok.Data
public class Data {
public List<MultiPaymentRespDto> queryList;
}
}
\ No newline at end of file
......@@ -13,7 +13,7 @@
package cn.freemud.service.impl;
import cn.freemud.adapter.*;
import cn.freemud.amp.body.MessagePushNewMqBody;
//import cn.freemud.amp.body.MessagePushNewMqBody;
import cn.freemud.amqp.Header;
import cn.freemud.amqp.MQAction;
import cn.freemud.amqp.MQMessage;
......@@ -24,26 +24,29 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.OrderRefundConstant;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.MCCafeDeliveryBaseResponse;
//import cn.freemud.entities.dto.MCCafeDeliveryBaseResponse;
import cn.freemud.entities.dto.PayAccessResponse;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.delivery.OrderRemindRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
import cn.freemud.entities.dto.delivery.QueryLocusRiderTrackDto;
import cn.freemud.entities.dto.delivery.ResRiderTrackDto;
//import cn.freemud.entities.dto.delivery.OrderRemindRequestDto;
//import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
//import cn.freemud.entities.dto.delivery.QueryLocusRiderTrackDto;
//import cn.freemud.entities.dto.delivery.ResRiderTrackDto;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.ecology.SendMessageResponse;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
//import cn.freemud.entities.dto.ecology.SendMessageRequest;
//import cn.freemud.entities.dto.ecology.SendMessageResponse;
//import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.order.FacePayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.pay.CombPayResponse;
import cn.freemud.entities.dto.pay.MultiPaymentRespDto;
import cn.freemud.entities.dto.pay.MultiQueryRequest;
import cn.freemud.entities.dto.pay.MultiQueryRespDto;
import cn.freemud.entities.dto.promotion.*;
import cn.freemud.entities.dto.product.AttributeValue;
import cn.freemud.entities.dto.product.GroupDetail;
......@@ -84,7 +87,7 @@ import cn.freemud.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
//import com.alibaba.fastjson.TypeReference;
import com.freemud.api.assortment.datamanager.entity.db.*;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType;
......@@ -106,7 +109,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.PayItem;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
//import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
......@@ -138,9 +141,9 @@ import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig;
import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsg;
import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsgDataValue;
//import com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig;
//import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsg;
//import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsgDataValue;
import com.freemud.sdk.api.assortment.message.enums.MessageEventType;
import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest;
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
......@@ -172,8 +175,8 @@ import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils;
//import org.joda.time.DateTime;
//import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
......@@ -195,6 +198,8 @@ import static cn.freemud.constant.OrderRefundConstant.ALLOW_REFUND;
public class OrderServiceImpl implements Orderservice {
private final Integer RESPONSE_SUCCESS_CODE = 100;
private static final Integer MULITI_RESPONSE = 200;
private static final String SUCCESS = "SUCCESS";
private static Gson gson = new Gson();
......@@ -227,6 +232,9 @@ public class OrderServiceImpl implements Orderservice {
@Value("${query.order.es:true}")
private Boolean queryOrderEs;
@Value("${query.pay.order:true}")
private Boolean queryPayOrder;
@Autowired
private AssortmentCloudPrinterManager cloudPrinterManager;
// @Autowired
......@@ -1674,6 +1682,10 @@ public class OrderServiceImpl implements Orderservice {
if (!OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_DELETE_ERROR.getCode(), "订单状态不允许删除");
}
//关闭预支付
if(queryPayOrder && closePrePay(orderBean)){
return ResponseUtil.error(ResponseResult.ORDER_DELETE_ERROR.getCode(), "订单状态不允许删除");
}
// DeleteOrderDto deleteOrderDto = orderAdapter.convent2DeleteOrderDto(deleteOrderVo.getOid());
//
// DeleteOrderRequest var1 = new DeleteOrderRequest();
......@@ -3790,6 +3802,75 @@ public class OrderServiceImpl implements Orderservice {
orderSdkService.updateAbnormalState(sdkUpdateAbnormalState);
}
/**
* 关闭预支付
*/
private boolean closePrePay(OrderBean orderBean) {
//是否支付成功
boolean paySuccess = false;
OrderExtInfoDto extInfo = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
List<QueryOrdersResponse.DataBean.OrderBean.OrderPayItem> orderPayItemList = orderBean.getOrderPayItem();
if (null != orderPayItemList && orderPayItemList.size() > 0) {
Integer partnerId = Integer.valueOf(orderBean.getCompanyId());
MultiQueryRequest request = new MultiQueryRequest();
request.setEnable_platform_data_query(false);
request.setPartnerId(partnerId);
request.setStoreId(orderBean.getShopId());
request.setOutOrderNo(orderBean.getOid());
//查询聚合支付结果
MultiQueryRespDto<MultiQueryRespDto.Data> response = comPayClient.paymentApplicationQuery(request, partnerId);
if (response != null && response.getData() != null && Objects.equals(response.getCode(), MULITI_RESPONSE)) {
List<MultiPaymentRespDto> multiPaymentRespDtoArrayList = response.getData().getQueryList();
if (null != multiPaymentRespDtoArrayList && multiPaymentRespDtoArrayList.size() > 0) {
int successData = 0;
for (MultiPaymentRespDto multiPaymentRespDto : multiPaymentRespDtoArrayList) {
if (Objects.equals(multiPaymentRespDto.getStatus(), SUCCESS)) {
successData++;
}
}
if (successData >= multiPaymentRespDtoArrayList.size()) {
paySuccess = true;
}
}
}
}else {
//判断当前订单是否存在预支付订单
if (extInfo != null && StringUtils.isNotEmpty(extInfo.getFmId())) {
//订单状态未支付且存在预支付订单:
// 1.查询预支付订单支付状态
PaymentQueryRequest paymentQueryRequest = new PaymentQueryRequest();
paymentQueryRequest.setPartnerId(orderBean.getCompanyId());
paymentQueryRequest.setStoreId(orderBean.getShopId());
paymentQueryRequest.setFmId(extInfo.getFmId());
paymentQueryRequest.setVer("2");
com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryResponse> queryResponseBaseResponse = paymentNewService.query(paymentQueryRequest, LogThreadLocal.getTrackingNo());
//判断预支付订单状态
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), queryResponseBaseResponse.getCode())) {
throw new ServiceException(ResponseResult.ORDER_PAY_GETPRE_MESSAGE_ERROR);
}
//判断当前预支付订单是否已经支付成功
if (ObjectUtils.equals(TradeState.SUCCESS.getCode(), queryResponseBaseResponse.getData().getTradeState())) {
paySuccess = true;
}
}
}
if(!paySuccess){
PaymentCloseUnifiedOrderRequest closeUnifiedOrderRequest = new PaymentCloseUnifiedOrderRequest();
closeUnifiedOrderRequest.setFmId(extInfo.getFmId());
closeUnifiedOrderRequest.setVer("2");
closeUnifiedOrderRequest.setPartnerId(orderBean.getCompanyId());
closeUnifiedOrderRequest.setStoreId(orderBean.getShopId());
com.freemud.application.sdk.api.base.BaseResponse<PaymentCloseUnifiedOrderResponse> cancelNewUnifiedOrder = paymentNewService.cancelNewUnifiedOrder(closeUnifiedOrderRequest, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), cancelNewUnifiedOrder.getCode())) {
throw new ServiceException(ResponseResult.ORDER_PRE_PAYMENT_CLOSE_FAILED);
}
}
return paySuccess;
}
private void closeHistoryPrePay(OrderBean orderBean) {
OrderExtInfoDto extInfo = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
......
......@@ -14,6 +14,8 @@
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.pay.CombPayResponse;
import cn.freemud.entities.dto.pay.MultiQueryRequest;
import cn.freemud.entities.dto.pay.MultiQueryRespDto;
import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -26,11 +28,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface ComPayClient {
// TODO: 21-4-1 待合并
/**
* 统一下单
* 混合支付统一下单
*/
@PostMapping("/payment/application/pay")
CombPayResponse combPay(@RequestBody CombPayRequest combPayRequest, @RequestHeader("partnerId") String partnerId);
/**
* 混合支付查询接口
*/
@PostMapping("/payment/application/query")
MultiQueryRespDto<MultiQueryRespDto.Data> paymentApplicationQuery(MultiQueryRequest multiQueryRequest, @RequestHeader("partnerId") Integer partnerId);
}
......@@ -27,7 +27,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
public interface MulitiPaymentClient {
/**
* 统一活动查询接口
* 混合支付退款接口
*/
@PostMapping("/payment/application/refund")
MultiOrderRefundResponse paymentApplicationRefund(MultiOrderRefundRequest multiOrderRefundRequest, @RequestHeader("partnerId") String partnerId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment