Commit a2b92cdf by xiaoer.li@freemud.com

Merge branch 'feature/2.1.11-支付超时回调直接退款'

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/controller/OrderController.java
#	order-application-service/src/main/java/cn/freemud/service/Orderservice.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
parents ece0891a 3f530c22
...@@ -231,7 +231,8 @@ public class OrderController { ...@@ -231,7 +231,8 @@ public class OrderController {
@ApiAnnotation(logMessage = "deleteOrderById") @ApiAnnotation(logMessage = "deleteOrderById")
@PostMapping("/deleteOrderById") @PostMapping("/deleteOrderById")
public BaseResponse deleteOrderById(@Validated @LogParams @RequestBody DeleteOrderVo deleteOrderVo) { public BaseResponse deleteOrderById(@Validated @LogParams @RequestBody DeleteOrderVo deleteOrderVo) {
return orderservice.deleteOrderById(deleteOrderVo); //return orderservice.deleteOrderById(deleteOrderVo);
return orderservice.cancelPayOrder(deleteOrderVo);
} }
/** /**
...@@ -373,6 +374,16 @@ public class OrderController { ...@@ -373,6 +374,16 @@ public class OrderController {
} }
/** /**
* timeOutRefund
* @param timeOutOrderVo
* @return
*/
@ApiAnnotation(logMessage = "timeOutOrderRefund")
@PostMapping("/timeOutOrderRefund")
public BaseResponse timeOutOrderRefund(@Validated @LogParams @RequestBody TimeOutOrderVo timeOutOrderVo){
return orderservice.timeOutOrderRefund(timeOutOrderVo);
}
/**
* 根据订单号查询配送操作日志及骑手位置 * 根据订单号查询配送操作日志及骑手位置
* @param requestVo * @param requestVo
* @return * @return
......
...@@ -200,7 +200,7 @@ public class QueryOrdersResponseDto { ...@@ -200,7 +200,7 @@ public class QueryOrdersResponseDto {
private List<OrderCostResp> orderCostDetailList; private List<OrderCostResp> orderCostDetailList;
private List<QueryOrdersResponse.DataBean.OrderBean.OrderPayItem> orderPayItem; private List<QueryOrdersResponse.DataBean.OrderBean.OrderPayItem> orderPayItem;
private Integer abnormalState;
/** /**
* 订单操作状态(从订单操作历史表中获取) * 订单操作状态(从订单操作历史表中获取)
*/ */
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: GetProductVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: liming.guo
* @date: 2018/5/16 17:35
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class TimeOutOrderVo {
@NotEmpty(message = "订单编号不能为空")
private String oid;
private String partnerId;
}
...@@ -143,5 +143,7 @@ public interface Orderservice { ...@@ -143,5 +143,7 @@ public interface Orderservice {
*/ */
BaseResponse queryCollageOrderById(Integer operation,String sessionId, String oid, String partnerId,String channel); BaseResponse queryCollageOrderById(Integer operation,String sessionId, String oid, String partnerId,String channel);
BaseResponse timeOutOrderRefund(TimeOutOrderVo timeOutOrderVo);
BaseResponse queryOrderRider(OrderRiderRequestVo requestVo); BaseResponse queryOrderRider(OrderRiderRequestVo requestVo);
} }
...@@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Map; import java.util.Map;
/** /**
...@@ -86,7 +87,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -86,7 +87,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private OrderCommonService orderCommonService; private OrderCommonService orderCommonService;
@Autowired @Autowired
private SellCouponOrderServiceImpl sellCouponOrderService; private SellCouponOrderServiceImpl sellCouponOrderService;
@Value("${saas.autoRefund.client}")
private String autoRefundClient;
@Override @Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) { public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
...@@ -236,6 +238,12 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -236,6 +238,12 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){ if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){
return orderAdapter.sendPaySuccessNoticeMessage(); return orderAdapter.sendPaySuccessNoticeMessage();
} }
Integer client = OrderSourceType.getClientByCode(orderBean.getSource());
//若是app订单超时回调了 订单已取消则做退款处理
if (OrderStatus.CALCEL.getCode().equals(orderBean.getStatus()) && Arrays.asList(autoRefundClient.split(",")).contains(client.toString())) {
orderService.timeOutRefund(orderBean);
return orderAdapter.sendPaySuccessNoticeMessage();
}
/** /**
* 围餐处理 * 围餐处理
*/ */
......
...@@ -92,6 +92,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType; ...@@ -92,6 +92,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq; import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.SdkUpdateAbnormalState;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq; import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp; import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse; import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
...@@ -101,8 +102,12 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettl ...@@ -101,8 +102,12 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettl
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest; import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.PaymentCloseUnifiedOrderRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.PaymentQueryRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest; import com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest;
import com.freemud.application.sdk.api.paymentcenter.client.response.CodePayResponse; import com.freemud.application.sdk.api.paymentcenter.client.response.CodePayResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.PaymentCloseUnifiedOrderResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.PaymentQueryResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.SVCCardAmountResponse; import com.freemud.application.sdk.api.paymentcenter.client.response.SVCCardAmountResponse;
import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService; import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService;
import com.freemud.application.sdk.api.storecenter.request.GetListByCodesRequest; import com.freemud.application.sdk.api.storecenter.request.GetListByCodesRequest;
...@@ -140,6 +145,7 @@ import com.google.gson.Gson; ...@@ -140,6 +145,7 @@ import com.google.gson.Gson;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringBuilder;
...@@ -290,6 +296,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -290,6 +296,7 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private SvcComPayClient svcComPayClient; private SvcComPayClient svcComPayClient;
@Autowired @Autowired
private OrderRelationFactory orderRelationFactory; private OrderRelationFactory orderRelationFactory;
...@@ -1246,6 +1253,20 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1246,6 +1253,20 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseVo); return ResponseUtil.success(responseVo);
} }
@Override
public BaseResponse timeOutOrderRefund(TimeOutOrderVo timeOutOrderVo) {
Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans = this.getOrderBeanByOrderId(timeOutOrderVo.getOid());
if (MapUtils.isEmpty(orderBeans)) {
ResponseUtil.error("404","订单不存在");
}
QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
if (OrderStatus.CALCEL.getCode().equals(orderBean.getStatus())){
this.timeOutRefund(orderBean);
}
return ResponseUtil.success();
}
private String getRedpacketsPicture(String activityId) { private String getRedpacketsPicture(String activityId) {
if (StringUtils.isNotBlank(activityId)) { if (StringUtils.isNotBlank(activityId)) {
try { try {
...@@ -1703,7 +1724,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1703,7 +1724,7 @@ public class OrderServiceImpl implements Orderservice {
if (!OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) { if (!OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_DELETE_ERROR.getCode(), "订单状态不允许取消"); return ResponseUtil.error(ResponseResult.ORDER_DELETE_ERROR.getCode(), "订单状态不允许取消");
} }
// this.closeHistoryPrePay(orderBean);
CancelOrderRequest var1 = new CancelOrderRequest(); CancelOrderRequest var1 = new CancelOrderRequest();
var1.setOrderId(deleteOrderVo.getOid()); var1.setOrderId(deleteOrderVo.getOid());
var1.setPartnerId(deleteOrderVo.getPartnerId()); var1.setPartnerId(deleteOrderVo.getPartnerId());
...@@ -3678,4 +3699,82 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3678,4 +3699,82 @@ public class OrderServiceImpl implements Orderservice {
} }
return map; return map;
} }
/**
* 超时回调直接退款
* @param orderBean
*/
public void timeOutRefund(QueryOrdersResponseDto.DataBean.OrderBean orderBean) {
//调用支付退款
log.info("payment timeout callback for refund orderDto={}",JSON.toJSONString(orderBean));
Integer abState = 4;
String noPay = "8200404";
if (abState.equals(orderBean.getAbnormalState()) ) {
log.info("payment timeout callback for refund is exist");
return;
}
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> response = null;
Long refundId = System.currentTimeMillis();
OrderExtInfoDto orderExtInfoDTO = gson.fromJson(orderBean.getExtInfo(), OrderExtInfoDto.class);
if (orderExtInfoDTO==null || StringUtils.isBlank(orderExtInfoDTO.getFmId())) {
log.info("payment timeout callback for refund not create pre order");
return;
}
Integer state = PayRefundStatus.SUCCESS.getCode();
orderBean.setPayVoucher(orderExtInfoDTO.getFmId());
SdkUpdateAbnormalState sdkUpdateAbnormalState = new SdkUpdateAbnormalState();
String desc = "支付未及时回调";
com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, orderBean.getOid());
response = standardPaymentService.orderRefund(orderPayRefundRequest, LogTreadLocal.getTrackingNo());
log.info("payment timeout callback for refund orderId={},request={},resp={}",orderBean.getOid(),JSON.toJSONString(orderPayRefundRequest),JSON.toJSONString(response));
if (response!=null && noPay.equals(response.getCode())) {
return;
}
if (response!=null || state.equals(response.getData().getRefundStatus())) {
sdkUpdateAbnormalState.setAbnormalDesc(desc+",退款成功");
} else {
sdkUpdateAbnormalState.setAbnormalDesc(desc+",退款失败");
}
sdkUpdateAbnormalState.setPartnerId(orderBean.getCompanyId());
sdkUpdateAbnormalState.setAbnormalState(4);
sdkUpdateAbnormalState.setOrderCode(orderBean.getOid());
orderSdkService.updateAbnormalState(sdkUpdateAbnormalState);
}
private void closeHistoryPrePay(OrderBean orderBean) {
OrderExtInfoDto extInfo = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
//判断当前订单是否存在预支付订单
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())){
throw new ServiceException(ResponseResult.ORDER_HAS_PAID);
}
// 3.取消前一个预支付订单 调用支付取消预支付订单,如果预支付订单已经取消了再调用取消预支付订单接口会报错的
if(ObjectUtils.equals(TradeState.NOTPAY.getCode(), queryResponseBaseResponse.getData().getTradeState())) {
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);
}
}
}
}
} }
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