Commit b2aab53f by 周晓航

【订C】新增订单退款成功回调接口,需要修改售后单状态(原因:发起退款时支付那边可能是退款中状态,定时任务补偿后需要回调订单)

parent b85b4c71
package com.freemud.sdk.api.assortment.order.response.order; package com.freemud.sdk.api.assortment.order.response.order;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -22,7 +23,16 @@ public class MultiOrderRefundResponse<T> { ...@@ -22,7 +23,16 @@ public class MultiOrderRefundResponse<T> {
} }
@Data @Data
public static class RefundPlatformResponse{ public static class RefundPlatformResponse {
/**
* 退款中状态码需要单独处理
*/
public static Integer REFUNDED_RESULTCODE = 8200305;
/**
* 退款成功
*/
public static Integer REFUND_SUCCESS = 100;
private String endTransTradeNo; private String endTransTradeNo;
private String fmRefundNo; private String fmRefundNo;
private String fmTradeNo; private String fmTradeNo;
...@@ -39,5 +49,11 @@ public class MultiOrderRefundResponse<T> { ...@@ -39,5 +49,11 @@ public class MultiOrderRefundResponse<T> {
private Integer totalAmount; private Integer totalAmount;
private String transId; private String transId;
private String ebcode; private String ebcode;
@ApiModelProperty(value = "业务返回码 8200305 代表退款中 100是成功 其他 都是失败")
private Integer resultCode;
@ApiModelProperty(value = "业务返回消息")
private String resultMsg;
} }
} }
\ No newline at end of file
...@@ -556,5 +556,16 @@ public class OrderController { ...@@ -556,5 +556,16 @@ public class OrderController {
return ResponseUtil.success(orderAdapterService.getOrderConfig(request)); return ResponseUtil.success(orderAdapterService.getOrderConfig(request));
} }
/**
* 同意退款, 支付服务退款失败的补偿接口
*
* 退款成功会回调该接口进行后续流程补偿
*/
@IsConvertEN
@ApiAnnotation(logMessage = "/order/refund/callback")
@PostMapping("/refund/callback")
public BaseResponse refundSuccessCallback(@Validated @LogParams @RequestBody RefundSuccessCallbackVo req) {
return orderAdapterService.refundSuccessCallback(req);
}
} }
package cn.freemud.entities.vo;
import javax.validation.constraints.NotBlank;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/6/8 17:38
* @description :
*/
public class RefundSuccessCallbackVo {
/**
* 商户号
*/
@NotBlank(message = "商户号不能为空")
private String partnerId;
/**
* 订单号
*/
@NotBlank(message = "订单编号不能为空")
private String orderCode;
/**
* 退款序列号
*/
private String refundId;
}
...@@ -108,7 +108,7 @@ public class OrderAdapterServiceImpl { ...@@ -108,7 +108,7 @@ public class OrderAdapterServiceImpl {
@Autowired @Autowired
private MCCafeOrderService mcCafeOrderService; private MCCafeOrderService mcCafeOrderService;
// private UniversalOrderService universalOrderService; // private UniversalOrderService universalOrderService;
@Autowired @Autowired
private CreateOrderServiceFactory createOrderServiceFactory; private CreateOrderServiceFactory createOrderServiceFactory;
@Autowired @Autowired
...@@ -152,7 +152,7 @@ public class OrderAdapterServiceImpl { ...@@ -152,7 +152,7 @@ public class OrderAdapterServiceImpl {
private SvcTransactionClient svcTransactionClient; private SvcTransactionClient svcTransactionClient;
//获取下单实现对象 //获取下单实现对象
private OrderFactoryService getCreateOrderBean(AssortmentCustomerInfoVo assortmentCustomerInfoVo,CreateOrderVo createOrderVo){ private OrderFactoryService getCreateOrderBean(AssortmentCustomerInfoVo assortmentCustomerInfoVo, CreateOrderVo createOrderVo) {
// 扩展字段中存储 sessionKey // 扩展字段中存储 sessionKey
createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey()); createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey());
if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐 if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐
...@@ -174,7 +174,7 @@ public class OrderAdapterServiceImpl { ...@@ -174,7 +174,7 @@ public class OrderAdapterServiceImpl {
} }
//抖音卖券 //抖音卖券
if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),createOrderVo.getBizType())) { if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(), createOrderVo.getBizType())) {
return sellCouponOrderServiceImpl; return sellCouponOrderServiceImpl;
} }
return orderService; return orderService;
...@@ -183,6 +183,7 @@ public class OrderAdapterServiceImpl { ...@@ -183,6 +183,7 @@ public class OrderAdapterServiceImpl {
/** /**
* 创建无单 收银订单 * 创建无单 收银订单
* 不需要查询购物车,没有商品,流程上 只需要创建一个订单然后唤起预支付就行了 * 不需要查询购物车,没有商品,流程上 只需要创建一个订单然后唤起预支付就行了
*
* @param createOrderDto 请求信息 * @param createOrderDto 请求信息
*/ */
public CreateOrderResponseVo createCashierOrder(CreateCashierOrderDto createOrderDto) { public CreateOrderResponseVo createCashierOrder(CreateCashierOrderDto createOrderDto) {
...@@ -220,7 +221,7 @@ public class OrderAdapterServiceImpl { ...@@ -220,7 +221,7 @@ public class OrderAdapterServiceImpl {
if (!LockUtils.lock(redisCache.getRedisTemplate(), createOrderKey, expire)) { if (!LockUtils.lock(redisCache.getRedisTemplate(), createOrderKey, expire)) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_CREATE_ERROR); return ResponseUtil.error(ResponseResult.ORDER_NOT_CREATE_ERROR);
} }
OrderFactoryService orderFactoryService = getCreateOrderBean(assortmentCustomerInfoVo,createOrderVo); OrderFactoryService orderFactoryService = getCreateOrderBean(assortmentCustomerInfoVo, createOrderVo);
CreateOrderBONew createOrderBO = new CreateOrderBONew(createOrderVo); CreateOrderBONew createOrderBO = new CreateOrderBONew(createOrderVo);
//赋值缓存用户信息 //赋值缓存用户信息
createOrderBO.setUserLoginInfoDto(assortmentCustomerInfoVo); createOrderBO.setUserLoginInfoDto(assortmentCustomerInfoVo);
...@@ -320,36 +321,36 @@ public class OrderAdapterServiceImpl { ...@@ -320,36 +321,36 @@ public class OrderAdapterServiceImpl {
result = orderCommonService.paySuccessCallback(message, confirmOrderDto, orderBeans); result = orderCommonService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break; break;
case 27: //抖音卖券订单处理 OrderClientType.TIKTOKPAY.getIndex() case 27: //抖音卖券订单处理 OrderClientType.TIKTOKPAY.getIndex()
if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())) { if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(), orderBean.getBizType())) {
result = sellCouponOrderService.paySuccessCallbackForTiktok(message, confirmOrderDto, orderBeans); result = sellCouponOrderService.paySuccessCallbackForTiktok(message, confirmOrderDto, orderBeans);
break; break;
} }
break; break;
// bizType不等于4的,非积分商城订单,继续往下走 // bizType不等于4的,非积分商城订单,继续往下走
case 12: //app订单 OrderClientType.APP.getIndex() case 12: //app订单 OrderClientType.APP.getIndex()
if (!Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())) { if (!Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(), orderBean.getBizType())) {
// bizType为卖券的订单,不走app订单逻辑 // bizType为卖券的订单,不走app订单逻辑
result = appOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); result = appOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break; break;
} }
default://微信,支付宝渠道 default://微信,支付宝渠道
// 积分商城订单 // 积分商城订单
if (Objects.equals(BizTypeEnum.INTEGRAL_MALL.getBizType(),orderBean.getBizType())) { if (Objects.equals(BizTypeEnum.INTEGRAL_MALL.getBizType(), orderBean.getBizType())) {
result = pointsMallOrderService.paySuccessCallback(message,orderBeans); result = pointsMallOrderService.paySuccessCallback(message, orderBeans);
break; break;
} }
// 买券虚拟订单 // 买券虚拟订单
if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())) { if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(), orderBean.getBizType())) {
result = sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); result = sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break; break;
} }
// 微商城订单处理 // 微商城订单处理
if (Objects.equals(BizTypeEnum.MALL.getBizType(),orderBean.getBizType())){ if (Objects.equals(BizTypeEnum.MALL.getBizType(), orderBean.getBizType())) {
result = mallOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); result = mallOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break; break;
} }
// 收银单处理 // 收银单处理
if (Objects.equals(MarketTypeEnum.CASHIER.getIndex(),orderBean.getMarketingType().intValue())) { if (Objects.equals(MarketTypeEnum.CASHIER.getIndex(), orderBean.getMarketingType().intValue())) {
result = cashierOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); result = cashierOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break; break;
} }
...@@ -359,16 +360,16 @@ public class OrderAdapterServiceImpl { ...@@ -359,16 +360,16 @@ public class OrderAdapterServiceImpl {
break; break;
} }
// 默认点餐处理(点餐业务和预定业务) // 默认点餐处理(点餐业务和预定业务)
if (Objects.equals(BizTypeEnum.ORDINARY.getBizType(),orderBean.getBizType()) if (Objects.equals(BizTypeEnum.ORDINARY.getBizType(), orderBean.getBizType())
|| Objects.equals(BizTypeEnum.ADVANCE_ORDER.getBizType(),orderBean.getBizType())) { || Objects.equals(BizTypeEnum.ADVANCE_ORDER.getBizType(), orderBean.getBizType())) {
result = orderService.paySuccessCallback(message, confirmOrderDto, orderBeans); result = orderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break; break;
} }
} }
//储值卡订单消费后通知储值交易服务 //储值卡订单消费后通知储值交易服务
if(CollectionUtils.isNotEmpty(message.getSvcPayItems())){ if (CollectionUtils.isNotEmpty(message.getSvcPayItems())) {
sendSvcPayInfoToSvcTransaction(message.getSvcPayItems(),orderBean.getCompanyId(),orderBean.getOid(),orderBean.getUserId(),orderBean.getShopId()); sendSvcPayInfoToSvcTransaction(message.getSvcPayItems(), orderBean.getCompanyId(), orderBean.getOid(), orderBean.getUserId(), orderBean.getShopId());
} }
return result; return result;
} catch (Exception e) { } catch (Exception e) {
...@@ -379,8 +380,8 @@ public class OrderAdapterServiceImpl { ...@@ -379,8 +380,8 @@ public class OrderAdapterServiceImpl {
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息 // 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if (orderBean != null && orderCenterProperties.isUrgentCallbackOpen()) { if (orderBean != null && orderCenterProperties.isUrgentCallbackOpen()) {
// 查询 // 查询
OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(),2,null,null); OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(), 2, null, null);
ApiLog.infoMessage("紧急方案 支付成功直接调用callback,orderCode:{},requestId:{}",requestVo.getOrderCode(),requestVo.getRequestId()); ApiLog.infoMessage("紧急方案 支付成功直接调用callback,orderCode:{},requestId:{}", requestVo.getOrderCode(), requestVo.getRequestId());
orderCallbackClient.callbackOrder(requestVo); orderCallbackClient.callbackOrder(requestVo);
} }
} }
...@@ -400,21 +401,18 @@ public class OrderAdapterServiceImpl { ...@@ -400,21 +401,18 @@ public class OrderAdapterServiceImpl {
// } // }
// return ResponseUtil.error(ResponseResult.PARAMETER_MISSING); // return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
// } // }
public BaseResponse<PlugInParameter> getPaymentConfig(PaymentConfigVo paymentConfigVo) {
public BaseResponse<PlugInParameter> getPaymentConfig(PaymentConfigVo paymentConfigVo){
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(paymentConfigVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(paymentConfigVo.getSessionId());
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) { if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
} }
//周周惠插件要返回参数 //周周惠插件要返回参数
if(paymentConfigVo.getPlugInType() != null && paymentConfigVo.getPlugInType() == 2){ if (paymentConfigVo.getPlugInType() != null && paymentConfigVo.getPlugInType() == 2) {
return ResponseUtil.success(payService.getPlugInParameter(paymentConfigVo.getPartnerId(),assortmentCustomerInfoVo.getWxAppId(),paymentConfigVo.getShopId())); return ResponseUtil.success(payService.getPlugInParameter(paymentConfigVo.getPartnerId(), assortmentCustomerInfoVo.getWxAppId(), paymentConfigVo.getShopId()));
} }
//1元插件要返回参数 //1元插件要返回参数
return ResponseUtil.success(payService.getPlugInParameter(paymentConfigVo.getPartnerId(),assortmentCustomerInfoVo.getWxAppId())); return ResponseUtil.success(payService.getPlugInParameter(paymentConfigVo.getPartnerId(), assortmentCustomerInfoVo.getWxAppId()));
} }
...@@ -438,11 +436,11 @@ public class OrderAdapterServiceImpl { ...@@ -438,11 +436,11 @@ public class OrderAdapterServiceImpl {
if (null == configType) if (null == configType)
throw new ServiceException(ResponseResult.PARAMETER_MISSING); throw new ServiceException(ResponseResult.PARAMETER_MISSING);
String key = configType.getKey() + request.getPartnerId()+ "_" + request.getMiniAppId(); String key = configType.getKey() + request.getPartnerId() + "_" + request.getMiniAppId();
String configStr = redisCache.hashGet(key, configType.getType()); String configStr = redisCache.hashGet(key, configType.getType());
if (StringUtils.isBlank(configStr)){ if (StringUtils.isBlank(configStr)) {
OpenPlatformOrderConfig openPlatformOrderConfig = openPlatformOrderConfigManager.getOrderConfigByType(request); OpenPlatformOrderConfig openPlatformOrderConfig = openPlatformOrderConfigManager.getOrderConfigByType(request);
if (null != openPlatformOrderConfig){ if (null != openPlatformOrderConfig) {
configStr = openPlatformOrderConfig.getTypeValue(); configStr = openPlatformOrderConfig.getTypeValue();
} }
} }
...@@ -450,7 +448,7 @@ public class OrderAdapterServiceImpl { ...@@ -450,7 +448,7 @@ public class OrderAdapterServiceImpl {
return configStr; return configStr;
} }
private void sendSvcPayInfoToSvcTransaction(List<SvcPayItem> svcPayItems,String partnerId,String orderCode,String memberId,String storeId){ private void sendSvcPayInfoToSvcTransaction(List<SvcPayItem> svcPayItems, String partnerId, String orderCode, String memberId, String storeId) {
ConsumeHistoryCreateRequest request = new ConsumeHistoryCreateRequest(); ConsumeHistoryCreateRequest request = new ConsumeHistoryCreateRequest();
try { try {
request.setPartnerId(partnerId); request.setPartnerId(partnerId);
...@@ -461,9 +459,19 @@ public class OrderAdapterServiceImpl { ...@@ -461,9 +459,19 @@ public class OrderAdapterServiceImpl {
request.setCardRequestNo(svcTransIds); request.setCardRequestNo(svcTransIds);
svcTransactionClient.consumeHistoryCreate(request); svcTransactionClient.consumeHistoryCreate(request);
}catch (Exception e){ } catch (Exception e) {
ErrorLog.printErrorLog("sendSvcPayInfoToSvcTransaction","paySuccessCallback",request,e); ErrorLog.printErrorLog("sendSvcPayInfoToSvcTransaction", "paySuccessCallback", request, e);
} }
} }
/**
* 支付退款成功回调
*
* @param req
* @return
*/
public BaseResponse refundSuccessCallback(RefundSuccessCallbackVo req) {
return null;
}
} }
package cn.freemud.management.adapter; package cn.freemud.management.adapter;
import cn.freemud.management.entities.dto.request.pay.AgentPayRefundReq;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto; import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
...@@ -76,6 +78,21 @@ public class PaymentSdkAdapter { ...@@ -76,6 +78,21 @@ public class PaymentSdkAdapter {
return multiQueryRequest; return multiQueryRequest;
} }
@SneakyThrows
public AgentPayRefundReq getAgentPayefundReq(OrderBeanV1 orderBean, BigDecimal refundAmount) {
OrderExtInfoDto ext = JSON.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
AgentPayRefundReq req = new AgentPayRefundReq();
req.setPartnerId(orderBean.getCompanyId());
req.setStoreId(orderBean.getShopId());
req.setFmTradeNo(ext.getPayTransId());
req.setOutOrderNo(orderBean.getOid());
req.setRefundTradeNo(this.getRefundSerialNo().toString());
req.setRefundAmount(refundAmount.longValue());
req.setNotifyUrl(refundNotifyCallback);
req.setVer("V1");
return req;
}
public Long getRefundSerialNo() { public Long getRefundSerialNo() {
return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000; return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000;
} }
......
package cn.freemud.management.entities.dto.response.pay; package cn.freemud.management.entities.dto.response.pay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -20,6 +21,7 @@ public class AgentPayRefundResp { ...@@ -20,6 +21,7 @@ public class AgentPayRefundResp {
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class DataDTO { public static class DataDTO {
private String fmTradeNo; private String fmTradeNo;
private String endTransTradeNo; private String endTransTradeNo;
private String platformTradeNo; private String platformTradeNo;
...@@ -35,6 +37,12 @@ public class AgentPayRefundResp { ...@@ -35,6 +37,12 @@ public class AgentPayRefundResp {
private String refundTime; private String refundTime;
private String transId; private String transId;
private String ebcode; private String ebcode;
@ApiModelProperty(value = "业务返回码")
private Integer resultCode;
@ApiModelProperty(value = "业务返回消息")
private String resultMsg;
} }
public boolean isOk() { public boolean isOk() {
......
...@@ -181,6 +181,8 @@ public enum ResponseResult { ...@@ -181,6 +181,8 @@ public enum ResponseResult {
REFUND_EXCEPTION("58004", "支付退款异常"), REFUND_EXCEPTION("58004", "支付退款异常"),
REFUND_FAIL("58005", "支付退款失败"), REFUND_FAIL("58005", "支付退款失败"),
NOT_SUFFICIENT_FUNDS("8200201", "商户余额不足"), NOT_SUFFICIENT_FUNDS("8200201", "商户余额不足"),
CHECK_PARAM_ERROR("58006", "支付退款请求参数校验异常"),
REFUND_FAIL_WAIT_CALLBACK("58007", "支付退款失败,等待回调补偿中"),
/** /**
* 优惠券活动 * 优惠券活动
*/ */
......
...@@ -13,7 +13,6 @@ import cn.freemud.management.thirdparty.MulitiPaymentClient; ...@@ -13,7 +13,6 @@ import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.thirdparty.OMSPaymentClient; import cn.freemud.management.thirdparty.OMSPaymentClient;
import cn.freemud.management.util.RedisUtil; import cn.freemud.management.util.RedisUtil;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager; import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager;
...@@ -41,6 +40,7 @@ import java.math.BigDecimal; ...@@ -41,6 +40,7 @@ import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
...@@ -100,25 +100,89 @@ public class PaymentHandle { ...@@ -100,25 +100,89 @@ public class PaymentHandle {
if (ObjectUtils.equals(orderBean.getAmount(), 0L)) { if (ObjectUtils.equals(orderBean.getAmount(), 0L)) {
return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId()); return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId());
} }
BaseResponse<OrderRefundResponse> orderRefundResponse; BaseResponse<OrderRefundResponse> orderRefundResponse = this.orderPayRefund(orderRefundRequest);
// orderRefundResponse = standardPaymentService.orderRefund(orderRefundRequest, LogThreadLocal.getTrackingNo());
orderRefundResponse = this.orderPayRefund(orderRefundRequest);
if (orderRefundResponse == null) { if (orderRefundResponse == null) {
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION); refundStatus = PayRefundStatus.RUNNING;
} } else {
if (ObjectUtils.notEqual(orderRefundResponse.getCode(), SUCCESS)) { if (ObjectUtils.notEqual(orderRefundResponse.getCode(), SUCCESS)) {
//商户余额不足的情况下,返回异常特殊处理. refundStatus = PayRefundStatus.FAIL;
if (ResponseResult.NOT_SUFFICIENT_FUNDS.getCode().equals(orderRefundResponse.getCode())) { } else {
throw new OrderServiceException(ResponseResult.NOT_SUFFICIENT_FUNDS); Integer resultCode = orderRefundResponse.getData().getStatusCode();
refundStatus = this.getFinalRefundStatus(resultCode);
} }
ResponseResult refundFail = ResponseResult.REFUND_FAIL;
refundFail.setMessage(orderRefundResponse.getMessage());
throw new OrderServiceException(refundFail);
} }
refundStatus = ObjectUtils.equals(PayRefundStatus.SUCCESS.getCode(), orderRefundResponse.getData().getRefundStatus()) ? PayRefundStatus.SUCCESS : PayRefundStatus.RUNNING;
return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId()); return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId());
} }
private PayRefundStatus getFinalRefundStatus(Integer resultCode) {
switch (resultCode) {
// 退款中状态码需要单独处理
case 8200305:
return PayRefundStatus.RUNNING;
// 退款成功
case 100:
return PayRefundStatus.SUCCESS;
default:
return PayRefundStatus.FAIL;
}
}
private PayRefundRequestDto queryWxAppStore(BaseResponse<PaymentQueryOrderResponseDto> payQueryOrderResponse, PayRefundRequestDto refundRequest) {
String payCode = null;
if (Objects.equals(payQueryOrderResponse.getCode(), "100") && payQueryOrderResponse.getData() != null) {
refundRequest.setTotalAmount((payQueryOrderResponse.getData()).getAmount());
payCode = payQueryOrderResponse.getCode();
}
if (refundRequest.getTotalAmount() == null || refundRequest.getTotalAmount() == 0L) {
refundRequest.setTotalAmount(refundRequest.getRefundAmount());
}
AssortmentOpenPlatformIappWxappStore wxAppStore = this.assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(refundRequest.getAppId(), refundRequest.getStoreId(), payCode);
PayRefundRequestDto request = new PayRefundRequestDto();
request.setStoreId(refundRequest.getStoreId());
request.setStationId(refundRequest.getStationId());
request.setOperatorId(refundRequest.getOperatorId());
request.setTransId(refundRequest.getOrgTransId());
request.setBusinessDate(refundRequest.getBusinessDate());
request.setFmId(refundRequest.getOrgPayFmId());
request.setTotalAmount(refundRequest.getTotalAmount());
request.setRefundAmount(refundRequest.getRefundAmount());
request.setRefundId(refundRequest.getRefundId());
request.setRefundDesc(refundRequest.getRefundDesc());
request.setNotifyUrl(refundRequest.getNotifyUrl());
request.setPartnerId(refundRequest.getPartnerId());
request.setVer(2);
request.setExtendParams(refundRequest.getExtendParams());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam = this.checkParam(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount(), wxAppStore);
if (!Objects.equals(checkParam.getCode(), "100")) {
return null;
}
return request;
}
/**
* @param refundRequest
* @return
*/
private BaseResponse<PaymentQueryOrderResponseDto> queryPayOrder(PayRefundRequestDto refundRequest) {
PaymentQueryOrderRequestDto paymentQueryOrderRequest = new PaymentQueryOrderRequestDto();
paymentQueryOrderRequest.setPartnerId(refundRequest.getPartnerId());
paymentQueryOrderRequest.setStoreId(refundRequest.getStoreId());
paymentQueryOrderRequest.setFrontTransId(refundRequest.getOrgTransId());
BaseResponse<PaymentQueryOrderResponseDto> payQueryOrderResponse = null;
try {
payQueryOrderResponse = paymentNewClient.payQueryOrder(paymentQueryOrderRequest);
} catch (Exception e) {
cn.freemud.base.log.ErrorLog.errorConvertJson(this.getClass(), "paymentcenter/queryOrder error", e);
}
if (payQueryOrderResponse == null) {
return null;
}
return payQueryOrderResponse;
}
/** /**
* 代付订单退款 * 代付订单退款
* *
...@@ -126,31 +190,29 @@ public class PaymentHandle { ...@@ -126,31 +190,29 @@ public class PaymentHandle {
* @return * @return
*/ */
public PayRefundResponse agentPayRefund(OrderBeanV1 orderBean) { public PayRefundResponse agentPayRefund(OrderBeanV1 orderBean) {
PayRefundResponse ret = new PayRefundResponse(); PayRefundStatus refundStatus = PayRefundStatus.SUCCESS;
String fmRefundNo = "";
try { try {
OrderExtInfoDto ext = JSON.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class); AgentPayRefundReq req = paymentSdkAdapter.getAgentPayefundReq(orderBean, this.getRefundAmount(orderBean));
AgentPayRefundReq req = new AgentPayRefundReq();
req.setPartnerId(orderBean.getCompanyId());
req.setStoreId(orderBean.getShopId());
req.setFmTradeNo(ext.getPayTransId());
req.setOutOrderNo(orderBean.getOid());
req.setRefundTradeNo(paymentSdkAdapter.getRefundSerialNo().toString());
req.setRefundAmount(this.getRefundAmount(orderBean).longValue());
req.setVer("V1");
AgentPayRefundResp resp = mulitiPaymentClient.agentPayRefund(req); AgentPayRefundResp resp = mulitiPaymentClient.agentPayRefund(req);
logUtil.info("fisherman refundRespons ---> "+orderBean.getOid() + "---", JSON.toJSONString(req), JSON.toJSONString(resp)); if (!resp.isOk()) {
if (!resp.isOk()) throw new Exception("退款失败"); refundStatus = PayRefundStatus.RUNNING;
ret.setRefundId(resp.getData().getFmRefundNo()); }
ret.setPayRefundStatus(PayRefundStatus.SUCCESS); AgentPayRefundResp.DataDTO data = resp.getData();
if (Objects.nonNull(data)) {
refundStatus = this.getFinalRefundStatus(data.getResultCode());
}
fmRefundNo = resp.getData().getFmRefundNo();
} catch (Throwable e) { } catch (Throwable e) {
ret.setPayRefundStatus(PayRefundStatus.FAIL); refundStatus = PayRefundStatus.FAIL;
} }
return ret; return this.handlePayRefundResponse(refundStatus, fmRefundNo);
} }
/** /**
* 卖券调用退款 * 卖券调用退款
*
* @param reason * @param reason
* @param orderBean * @param orderBean
* @return -2正常 -1 不需要退款 0其他异常 1账户余额不足 2 系统异常 * @return -2正常 -1 不需要退款 0其他异常 1账户余额不足 2 系统异常
...@@ -278,7 +340,7 @@ public class PaymentHandle { ...@@ -278,7 +340,7 @@ public class PaymentHandle {
private PayRefundResponse handlePayRefundResponse(PayRefundStatus refundStatus, String refundId) { private PayRefundResponse handlePayRefundResponse(PayRefundStatus refundStatus, String refundId) {
PayRefundResponse payRefundResponse = new PayRefundResponse(); PayRefundResponse payRefundResponse = new PayRefundResponse();
payRefundResponse.setPayRefundStatus(refundStatus); payRefundResponse.setPayRefundStatus(refundStatus);
payRefundResponse.setRefundId(refundId.toString()); payRefundResponse.setRefundId(refundId);
return payRefundResponse; return payRefundResponse;
} }
...@@ -287,12 +349,29 @@ public class PaymentHandle { ...@@ -287,12 +349,29 @@ public class PaymentHandle {
MultiOrderRefundRequest multiOrderRefundRequest = paymentSdkAdapter.getMultiOrderPayRefundRequest(orderBean, getRefundAmount(orderBean)); MultiOrderRefundRequest multiOrderRefundRequest = paymentSdkAdapter.getMultiOrderPayRefundRequest(orderBean, getRefundAmount(orderBean));
MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest, orderBean.getCompanyId()); MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest, orderBean.getCompanyId());
if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) { if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION); // fisherman 退款异常 也当做 退款中处理
refundStatus = PayRefundStatus.RUNNING;
} }
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList; List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList;
if (null != refundPlatformResponseList && refundPlatformResponseList.size() > 0) { if (null != refundPlatformResponseList && refundPlatformResponseList.size() > 0) {
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()), orderBean.getOid(), 1L, TimeUnit.DAYS); redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()), orderBean.getOid(), 1L, TimeUnit.DAYS);
} }
if (CollectionUtils.isNotEmpty(refundPlatformResponseList)) {
long refundError = refundPlatformResponseList.stream()
.filter(s -> s.getResultCode().compareTo(MultiOrderRefundResponse.RefundPlatformResponse.REFUNDED_RESULTCODE) != 0
&& s.getResultCode().compareTo(MultiOrderRefundResponse.RefundPlatformResponse.REFUND_SUCCESS) != 0)
.count();
if (refundError > 0L) {
refundStatus = PayRefundStatus.FAIL;
}
// 退款中
long refunded = refundPlatformResponseList.stream()
.filter(s -> s.getResultCode().compareTo(MultiOrderRefundResponse.RefundPlatformResponse.REFUNDED_RESULTCODE) == 0)
.count();
if (refunded > 0L) {
refundStatus = PayRefundStatus.RUNNING;
}
}
return handlePayRefundResponse(refundStatus, multiOrderRefundRequest.getRefundTradeNo()); return handlePayRefundResponse(refundStatus, multiOrderRefundRequest.getRefundTradeNo());
} }
...@@ -302,70 +381,29 @@ public class PaymentHandle { ...@@ -302,70 +381,29 @@ public class PaymentHandle {
*/ */
public BaseResponse<OrderRefundResponse> orderPayRefund(PayRefundRequestDto refundRequest) { public BaseResponse<OrderRefundResponse> orderPayRefund(PayRefundRequestDto refundRequest) {
PaymentQueryOrderRequestDto paymentQueryOrderRequest = new PaymentQueryOrderRequestDto(); // step1 查询支付
BaseResponse<PaymentQueryOrderResponseDto> paymentQueryOrderResponseDtoBaseResponse = this.queryPayOrder(refundRequest);
paymentQueryOrderRequest.setPartnerId(refundRequest.getPartnerId()); if (Objects.isNull(paymentQueryOrderResponseDtoBaseResponse)) {
paymentQueryOrderRequest.setStoreId(refundRequest.getStoreId()); throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION);
paymentQueryOrderRequest.setFrontTransId(refundRequest.getOrgTransId());
BaseResponse<PaymentQueryOrderResponseDto> payQueryOrderResponse = null;
try {
payQueryOrderResponse = paymentNewClient.payQueryOrder(paymentQueryOrderRequest);
}catch (Exception e){
cn.freemud.base.log.ErrorLog.errorConvertJson(this.getClass(), "paymentcenter/queryOrder error", e);
}
if(payQueryOrderResponse == null){
return null;
}
Long vipAmount = 0L;
String payCode = null;
if (Objects.equals(payQueryOrderResponse.getCode(), "100") && payQueryOrderResponse.getData() != null) {
if ((payQueryOrderResponse.getData()).getVipAmount() != null && (payQueryOrderResponse.getData()).getVipAmount() != 0) {
vipAmount = (long) (payQueryOrderResponse.getData()).getVipAmount();
}
refundRequest.setTotalAmount((payQueryOrderResponse.getData()).getAmount());
payCode = payQueryOrderResponse.getCode();
} }
// step2 查询退款配置
if (refundRequest.getTotalAmount() == null || refundRequest.getTotalAmount() == 0L) { PayRefundRequestDto request = this.queryWxAppStore(paymentQueryOrderResponseDtoBaseResponse, refundRequest);
refundRequest.setTotalAmount(refundRequest.getRefundAmount()); if (Objects.isNull(request)) {
throw new OrderServiceException(ResponseResult.CHECK_PARAM_ERROR);
} }
AssortmentOpenPlatformIappWxappStore wxAppStore = this.assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(refundRequest.getAppId(), refundRequest.getStoreId(), payCode); // step3 退款
PayRefundRequestDto request = new PayRefundRequestDto();
request.setStoreId(refundRequest.getStoreId());
request.setStationId(refundRequest.getStationId());
request.setOperatorId(refundRequest.getOperatorId());
request.setTransId(refundRequest.getOrgTransId());
request.setBusinessDate(refundRequest.getBusinessDate());
request.setFmId(refundRequest.getOrgPayFmId());
request.setTotalAmount(refundRequest.getTotalAmount());
request.setRefundAmount(refundRequest.getRefundAmount());
request.setRefundId(refundRequest.getRefundId());
request.setRefundDesc(refundRequest.getRefundDesc());
request.setNotifyUrl(refundRequest.getNotifyUrl());
request.setPartnerId(refundRequest.getPartnerId());
request.setVer(2);
request.setExtendParams(refundRequest.getExtendParams());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam = this.checkParam(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount(), wxAppStore);
if (!Objects.equals(checkParam.getCode(), "100")) {
return checkParam;
} else {
// String receiveJsonStr = this.setPayValueFromSDKByManager(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount() + vipAmount, vipAmount, wxAppStore.getIndirectId(), false);
// if (!StringUtils.isEmpty(receiveJsonStr)) {
// request.setAccountDivided(receiveJsonStr);
// }
BaseResponse<PayRefundData> refundNewResponse = null; BaseResponse<PayRefundData> refundNewResponse = null;
try { try {
refundNewResponse = paymentNewClient.payRefund(request); refundNewResponse = paymentNewClient.payRefund(request);
}catch (Exception e){ } catch (Exception e) {
ErrorLog.errorConvertJson(this.getClass(), "paymentcenter/refund error", e); ErrorLog.errorConvertJson(this.getClass(), "paymentcenter/refund error", e);
} }
if(refundNewResponse == null){
if (refundNewResponse == null) {
return null; return null;
} }
logUtil.info("paymentcenter/refund", JSONObject.toJSONString(request),JSONObject.toJSONString(refundNewResponse)); logUtil.info("paymentcenter/refund", JSONObject.toJSONString(request), JSONObject.toJSONString(refundNewResponse));
if (Objects.equals(refundNewResponse.getCode(), "100")) { if (Objects.equals(refundNewResponse.getCode(), "100")) {
PayRefundData refundData = refundNewResponse.getData(); PayRefundData refundData = refundNewResponse.getData();
if (null != refundData) { if (null != refundData) {
...@@ -383,15 +421,9 @@ public class PaymentHandle { ...@@ -383,15 +421,9 @@ public class PaymentHandle {
return ResponseUtils.success(refundResponse); return ResponseUtils.success(refundResponse);
} }
} }
if (!Arrays.asList("8200201", "8200202", "8200203", "8200204", "8200205").contains(refundNewResponse.getCode())) {
// this.emailAlertService.sendEmailAlert("支付退款失败", "请求json:" + JSONObject.toJSONString(request) + "返回msg:" + refundNewResponse.getMessage());
}
return ResponseUtils.error(refundNewResponse.getCode(), refundNewResponse.getMessage()); return ResponseUtils.error(refundNewResponse.getCode(), refundNewResponse.getMessage());
} }
}
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) { public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) {
if (StringUtils.isBlank(partnerId)) { if (StringUtils.isBlank(partnerId)) {
...@@ -409,7 +441,7 @@ public class PaymentHandle { ...@@ -409,7 +441,7 @@ public class PaymentHandle {
public Integer getRefundStatus(Integer resultCode) { public Integer getRefundStatus(Integer resultCode) {
if (Objects.equals(resultCode, SUCCESS_RESPONSE_CODE_INT)) { if (Objects.equals(resultCode, SUCCESS_RESPONSE_CODE_INT)) {
return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode(); return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode();
}else if (Objects.equals(resultCode, SUCCESS_RESPONSE_101_CODE_INT)) { } else if (Objects.equals(resultCode, SUCCESS_RESPONSE_101_CODE_INT)) {
return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode(); return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode();
} else { } else {
return Objects.equals(resultCode, REFUND_RESPONSE_CODE) ? PaymentRefundStatus.PAYMENT_REFUND_STATUS_4.getCode() : PaymentRefundStatus.PAYMENT_REFUND_STATUS_2.getCode(); return Objects.equals(resultCode, REFUND_RESPONSE_CODE) ? PaymentRefundStatus.PAYMENT_REFUND_STATUS_4.getCode() : PaymentRefundStatus.PAYMENT_REFUND_STATUS_2.getCode();
......
...@@ -221,6 +221,7 @@ public class SaasOrderHandle { ...@@ -221,6 +221,7 @@ public class SaasOrderHandle {
if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) { if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest); baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest);
} else { } else {
// fisherman 这里有缺陷 退款失败也是最终状态, 基础服务售后状态不能为 4 不然用户无法重新发起售后单
baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest); baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest);
} }
if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) { if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
......
...@@ -108,7 +108,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -108,7 +108,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
QueryFlag query = QueryFlag.builder().queryBusinessInfo(true).queryStoreInfo(true).build(); QueryFlag query = QueryFlag.builder().queryBusinessInfo(true).queryStoreInfo(true).build();
ConsoleResponseDTO<BizDTO> storeMix = this.getStoreMix(query, orderBean.getCompanyId(), orderBean.getShopId()); ConsoleResponseDTO<BizDTO> storeMix = this.getStoreMix(query, orderBean.getCompanyId(), orderBean.getShopId());
boolean idAutoCreate = false; boolean idAutoCreate = false;
if (storeMix!=null && ObjectUtils.equals(ResponseResult.SUCCESS.getCode(), storeMix.getStatusCode())) { if (storeMix != null && ObjectUtils.equals(ResponseResult.SUCCESS.getCode(), storeMix.getStatusCode())) {
BizDTO bizVO = storeMix.getBizVO(); BizDTO bizVO = storeMix.getBizVO();
// fisherman 预约单不走自动|半自动派单逻辑 【【野萃山】手动派单增加半自动配置】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001040800 // fisherman 预约单不走自动|半自动派单逻辑 【【野萃山】手动派单增加半自动配置】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001040800
boolean reservedExpress = Objects.equals(orderBean.getNewOrderType(), OrderType.GENERAL_EXPRESS.getIndex()); boolean reservedExpress = Objects.equals(orderBean.getNewOrderType(), OrderType.GENERAL_EXPRESS.getIndex());
...@@ -137,13 +137,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -137,13 +137,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
// 创建配送单 // 创建配送单
deliveryHandle.createDelivery(orderBean, request, storeMix, idAutoCreate); deliveryHandle.createDelivery(orderBean, request, storeMix, idAutoCreate);
// 推送pos、微信消息中心 重复接单不重复推消息(针对蜜雪做的修改) // 推送pos、微信消息中心 重复接单不重复推消息(针对蜜雪做的修改)
if(baseResponse != null && baseResponse.getResult() == null){ if (baseResponse != null && baseResponse.getResult() == null) {
orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM, request.getReason()); orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM, request.getReason());
} }
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息 // 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if (orderCenterProperties.isUrgentCallbackOpen()) { if (orderCenterProperties.isUrgentCallbackOpen()) {
OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(),3,null,null); OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(), 3, null, null);
ApiLog.infoMessage("紧急方案 接单成功直接调用callback,orderCode:{},requestId:{}",requestVo.getOrderCode(),requestVo.getRequestId()); ApiLog.infoMessage("紧急方案 接单成功直接调用callback,orderCode:{},requestId:{}", requestVo.getOrderCode(), requestVo.getRequestId());
orderCallbackClient.callbackOrder(requestVo); orderCallbackClient.callbackOrder(requestVo);
} }
return ResponseUtil.success(new OrderManagerResponse(storeMix.getBizVO().getBusinessInfo().getOrderPrintConfig(), orderBean.getGmtExpect(), return ResponseUtil.success(new OrderManagerResponse(storeMix.getBizVO().getBusinessInfo().getOrderPrintConfig(), orderBean.getGmtExpect(),
...@@ -208,14 +208,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -208,14 +208,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override @Override
public BaseResponse<OrderManagerResponse> orderReject(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderReject(OrderManagerRequest request, OrderBeanV1 orderBean) {
//支付退款 //支付退款
PayRefundResponse refundResponse ; PayRefundResponse refundResponse;
try { try {
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){ if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) {
refundResponse = paymentHandle.multiRefund(orderBean); refundResponse = paymentHandle.multiRefund(orderBean);
}else{ } else {
refundResponse = paymentHandle.refund(request, orderBean); refundResponse = paymentHandle.refund(request, orderBean);
} }
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错 } catch (OrderServiceException orderEx) { // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult()); return ResponseUtil.error(orderEx.getResult());
} }
//订单拒单 //订单拒单
...@@ -224,12 +224,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -224,12 +224,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
orderBaseService.sendMessage(orderBean, OperateType.ORDER_REJECT, request.getReason()); orderBaseService.sendMessage(orderBean, OperateType.ORDER_REJECT, request.getReason());
//todo 可以考虑基于订单回调异步实现 //todo 可以考虑基于订单回调异步实现
//冲正库存 //冲正库存
stockHandle.revert(request,orderBean); stockHandle.revert(request, orderBean);
return ResponseUtil.success(); return ResponseUtil.success();
} }
/** /**
* 同意退款 * 同意退款
* *
...@@ -240,32 +239,39 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -240,32 +239,39 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override @Override
public BaseResponse<OrderManagerResponse> orderAgreeRefund(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderAgreeRefund(OrderManagerRequest request, OrderBeanV1 orderBean) {
//取消配送单 //取消配送单
deliveryHandle.cancelDelivery(orderBean,request); deliveryHandle.cancelDelivery(orderBean, request);
//支付退款 //支付退款
PayRefundResponse refundResponse; PayRefundResponse refundResponse;
try { try {
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){ if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) {
// payment/application/refund
refundResponse = paymentHandle.multiRefund(orderBean); refundResponse = paymentHandle.multiRefund(orderBean);
}else{ } else {
OrderExtendedReq ext = orderBean.getOrderExtended(); OrderExtendedReq ext = orderBean.getOrderExtended();
if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) { if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) {
//代付人信息不为空 并且和订单创建人不一样,表示代付单 //代付人信息不为空 并且和订单创建人不一样,表示代付单 payment/application/agentRefund
refundResponse = paymentHandle.agentPayRefund(orderBean); refundResponse = paymentHandle.agentPayRefund(orderBean);
} else { } else {
//正常订单现金退款 //正常订单现金退款 paymentcenter/refund
refundResponse = paymentHandle.refund(request, orderBean); refundResponse = paymentHandle.refund(request, orderBean);
} }
} }
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错 } catch (OrderServiceException orderEx) { // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult()); return ResponseUtil.error(orderEx.getResult());
} }
// fisherman --> 退款中的状态 阻止后续流程 等待支付回调
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.RUNNING.getCode()) == 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL_WAIT_CALLBACK);
}
//订单同意退款 //订单同意退款
saasOrderHandle.refundAgree(request, refundResponse, orderBean); saasOrderHandle.refundAgree(request, refundResponse, orderBean);
// 推送pos、微信消息中心 // 推送pos、微信消息中心
orderBaseService.sendMessage(orderBean, ORDER_AGREE_REFUND, request.getReason()); orderBaseService.sendMessage(orderBean, ORDER_AGREE_REFUND, request.getReason());
//todo 可以考虑基于订单回调异步实现 //todo 可以考虑基于订单回调异步实现
//冲正库存 //冲正库存
stockHandle.revert(request,orderBean); stockHandle.revert(request, orderBean);
return ResponseUtil.success(); return ResponseUtil.success();
} }
...@@ -279,7 +285,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -279,7 +285,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override @Override
public BaseResponse<OrderManagerResponse> orderRejectRefund(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderRejectRefund(OrderManagerRequest request, OrderBeanV1 orderBean) {
//拒绝退款 //拒绝退款
saasOrderHandle.refundReject(request,orderBean); saasOrderHandle.refundReject(request, orderBean);
// 推送pos、微信消息中心 // 推送pos、微信消息中心
orderBaseService.sendMessage(orderBean, OperateType.ORDER_REJECT_REFUND, request.getReason()); orderBaseService.sendMessage(orderBean, OperateType.ORDER_REJECT_REFUND, request.getReason());
return ResponseUtil.success(); return ResponseUtil.success();
...@@ -289,21 +295,21 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -289,21 +295,21 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
* 取消订单 * 取消订单
*/ */
@Override @Override
public BaseResponse<OrderManagerResponse> orderCancel(OrderManagerRequest request, OrderBeanV1 orderBean){ public BaseResponse<OrderManagerResponse> orderCancel(OrderManagerRequest request, OrderBeanV1 orderBean) {
if (BizTypeEnum.ORDINARY.getBizType().compareTo(orderBean.getBizType()) == 0 if (BizTypeEnum.ORDINARY.getBizType().compareTo(orderBean.getBizType()) == 0
&& MarketTypeEnum.TIKTOK_MARKET_ORDER.getIndex().compareTo(Byte.toUnsignedInt(orderBean.getMarketingType())) == 0) { && MarketTypeEnum.TIKTOK_MARKET_ORDER.getIndex().compareTo(Byte.toUnsignedInt(orderBean.getMarketingType())) == 0) {
this.orderAgreeRefund(request, orderBean); this.orderAgreeRefund(request, orderBean);
return ResponseUtil.success(); return ResponseUtil.success();
} }
List<Integer> newOrderStatusList = Arrays.asList(OrderStatusV1.RECEIPT.getV2Code(),OrderStatusV1.COMPLETE.getV2Code(),OrderStatusV1.COMPLETE_MAKE.getV2Code()); List<Integer> newOrderStatusList = Arrays.asList(OrderStatusV1.RECEIPT.getV2Code(), OrderStatusV1.COMPLETE.getV2Code(), OrderStatusV1.COMPLETE_MAKE.getV2Code());
List<String> sourceList = Arrays.asList(OrderSourceV1.SAAS.getCode(),OrderSourceV1.ALIPAY.getCode(),OrderSourceV1.APP.getCode()); List<String> sourceList = Arrays.asList(OrderSourceV1.SAAS.getCode(), OrderSourceV1.ALIPAY.getCode(), OrderSourceV1.APP.getCode());
if (sourceList.contains(orderBean.getSource()) && newOrderStatusList.contains(orderBean.getStatusV2())) { if (sourceList.contains(orderBean.getSource()) && newOrderStatusList.contains(orderBean.getStatusV2())) {
return executeRefund(request,orderBean, OperateType.ORDER_REJECT.getOpType()); return executeRefund(request, orderBean, OperateType.ORDER_REJECT.getOpType());
} else if (OrderSourceV1.MEAL.getCode().equals(orderBean.getSource())) { } else if (OrderSourceV1.MEAL.getCode().equals(orderBean.getSource())) {
if (OrderStatusV1.WAIT_PAY.getV2Code().equals(orderBean.getStatusV2()) || PayType.CASH_ON_DELIVERY.getCode().compareTo(orderBean.getPayType()) == 0) { if (OrderStatusV1.WAIT_PAY.getV2Code().equals(orderBean.getStatusV2()) || PayType.CASH_ON_DELIVERY.getCode().compareTo(orderBean.getPayType()) == 0) {
return executeCancel(request,orderBean, PayRefundStatus.SUCCESS.getCode(), AfterSalesType.SYSTEM_CANCEL.getIndex(), Integer.valueOf(orderBean.getOrderClient())); return executeCancel(request, orderBean, PayRefundStatus.SUCCESS.getCode(), AfterSalesType.SYSTEM_CANCEL.getIndex(), Integer.valueOf(orderBean.getOrderClient()));
} else { } else {
return executeRefund(request,orderBean, OperateType.ORDER_REJECT.getOpType()); return executeRefund(request, orderBean, OperateType.ORDER_REJECT.getOpType());
} }
} else if (OrderSourceV1.POS.getCode().equals(orderBean.getSource())) { } else if (OrderSourceV1.POS.getCode().equals(orderBean.getSource())) {
return posCancel(orderBean); return posCancel(orderBean);
...@@ -313,12 +319,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -313,12 +319,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
/** /**
* 退款操作 * 退款操作
*
* @param request * @param request
* @param orderBean * @param orderBean
* @param operationType * @param operationType
* @return * @return
*/ */
private BaseResponse<OrderManagerResponse> executeRefund(OrderManagerRequest request,OrderBeanV1 orderBean, String operationType) { private BaseResponse<OrderManagerResponse> executeRefund(OrderManagerRequest request, OrderBeanV1 orderBean, String operationType) {
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderCancel(orderBean, OperateType.ORDER_AGREE_REFUND.getOpType()); BaseResponse verifyResponse = orderVerifyHandle.orderCancel(orderBean, OperateType.ORDER_AGREE_REFUND.getOpType());
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
...@@ -329,7 +336,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -329,7 +336,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if (operationType.equalsIgnoreCase(OperateType.ORDER_REJECT.getOpType())) { if (operationType.equalsIgnoreCase(OperateType.ORDER_REJECT.getOpType())) {
baseResponse = this.orderReject(request, orderBean); baseResponse = this.orderReject(request, orderBean);
} }
if(null == baseResponse || !ObjectUtils.equals(SUCCESS,Integer.valueOf(baseResponse.getCode()))){ if (null == baseResponse || !ObjectUtils.equals(SUCCESS, Integer.valueOf(baseResponse.getCode()))) {
if (PAY_RETURN_FILTER_CODES.contains(baseResponse.getCode())) { if (PAY_RETURN_FILTER_CODES.contains(baseResponse.getCode())) {
return ResponseUtil.error(ResponseResult.getResponseResult(baseResponse.getCode())); return ResponseUtil.error(ResponseResult.getResponseResult(baseResponse.getCode()));
} }
...@@ -346,7 +353,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -346,7 +353,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
* @param refundStatus 支付退款状态 * @param refundStatus 支付退款状态
* @return * @return
*/ */
private BaseResponse<OrderManagerResponse> executeCancel(OrderManagerRequest request,OrderBeanV1 order, Integer refundStatus, Integer afterSalesType, Integer orderClient) { private BaseResponse<OrderManagerResponse> executeCancel(OrderManagerRequest request, OrderBeanV1 order, Integer refundStatus, Integer afterSalesType, Integer orderClient) {
Integer createEvent; Integer createEvent;
if (PayRefundStatus.RUNNING.getCode().equals(refundStatus)) { if (PayRefundStatus.RUNNING.getCode().equals(refundStatus)) {
createEvent = CreateEventEnum.FIVE.getType(); createEvent = CreateEventEnum.FIVE.getType();
...@@ -363,9 +370,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -363,9 +370,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
orderCancelReq.setCreateEvent(createEvent); orderCancelReq.setCreateEvent(createEvent);
orderCancelReq.setOrderClient(orderClient == null ? OrderClientType.SAAS.getIndex() : orderClient); orderCancelReq.setOrderClient(orderClient == null ? OrderClientType.SAAS.getIndex() : orderClient);
orderCancelReq.setOperator(request.getOperator()); orderCancelReq.setOperator(request.getOperator());
OrderBaseResp baseResponse = orderSdkService.cancelOrder(orderCancelReq,UUID.randomUUID().toString()); OrderBaseResp baseResponse = orderSdkService.cancelOrder(orderCancelReq, UUID.randomUUID().toString());
if (!ObjectUtils.equals(SUCCESS,Integer.valueOf(baseResponse.getCode()))) { if (!ObjectUtils.equals(SUCCESS, Integer.valueOf(baseResponse.getCode()))) {
this.commonSendEmailAlert(order,baseResponse,"拒单在支付退款后的取消订单操作失败"); this.commonSendEmailAlert(order, baseResponse, "拒单在支付退款后的取消订单操作失败");
return ResponseUtil.error(ResponseResult.PARTNER_ORDER_CANCEL_ERROR); return ResponseUtil.error(ResponseResult.PARTNER_ORDER_CANCEL_ERROR);
} }
return ResponseUtil.success(); return ResponseUtil.success();
...@@ -380,24 +387,24 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -380,24 +387,24 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
orderCancelReq.setAfterSalesType(AfterSalesType.PARTNER_CANCEL.getIndex()); orderCancelReq.setAfterSalesType(AfterSalesType.PARTNER_CANCEL.getIndex());
orderCancelReq.setCreateEvent(CreateEventEnum.FOUR.getType()); orderCancelReq.setCreateEvent(CreateEventEnum.FOUR.getType());
orderCancelReq.setOrderClient(OrderClientType.POS.getIndex()); orderCancelReq.setOrderClient(OrderClientType.POS.getIndex());
OrderBaseResp baseResponse = orderSdkService.cancelOrder(orderCancelReq,UUID.randomUUID().toString()); OrderBaseResp baseResponse = orderSdkService.cancelOrder(orderCancelReq, UUID.randomUUID().toString());
if (!Objects.equals(SUCCESS,Integer.valueOf(baseResponse.getCode()))){ if (!Objects.equals(SUCCESS, Integer.valueOf(baseResponse.getCode()))) {
this.commonSendEmailAlert(order,baseResponse,"posCancel 取消订单失败"); this.commonSendEmailAlert(order, baseResponse, "posCancel 取消订单失败");
return ResponseUtil.error(ResponseResult.PARTNER_ORDER_CANCEL_ERROR); return ResponseUtil.error(ResponseResult.PARTNER_ORDER_CANCEL_ERROR);
} }
// 储值卡退款 // 储值卡退款
OrderExtInfoDto orderExtInfoDto = JSONObject.parseObject(order.getExtInfo(), OrderExtInfoDto.class) == null ? new OrderExtInfoDto() : JSONObject.parseObject(order.getExtInfo(), OrderExtInfoDto.class); OrderExtInfoDto orderExtInfoDto = JSONObject.parseObject(order.getExtInfo(), OrderExtInfoDto.class) == null ? new OrderExtInfoDto() : JSONObject.parseObject(order.getExtInfo(), OrderExtInfoDto.class);
//支付退款 //支付退款
if (orderExtInfoDto != null && orderExtInfoDto.getSvcAmount()!= null && StringUtils.isNotEmpty(orderExtInfoDto.getSvcCardCode()) && order.getPayStatus() > 1){ if (orderExtInfoDto != null && orderExtInfoDto.getSvcAmount() != null && StringUtils.isNotEmpty(orderExtInfoDto.getSvcCardCode()) && order.getPayStatus() > 1) {
PayRefundResponse refundResponse = paymentHandle.posOrderPayRefund(order, orderExtInfoDto); PayRefundResponse refundResponse = paymentHandle.posOrderPayRefund(order, orderExtInfoDto);
if(!ObjectUtils.equals(PayRefundStatus.SUCCESS,refundResponse.getPayRefundStatus())){ if (!ObjectUtils.equals(PayRefundStatus.SUCCESS, refundResponse.getPayRefundStatus())) {
return ResponseUtil.error(ResponseResult.PARTNER_ORDER_CANCEL_ERROR); return ResponseUtil.error(ResponseResult.PARTNER_ORDER_CANCEL_ERROR);
} }
} }
return ResponseUtil.success(); return ResponseUtil.success();
} }
private void commonSendEmailAlert(OrderBeanV1 order, OrderBaseResp baseResponse,String desc){ private void commonSendEmailAlert(OrderBeanV1 order, OrderBaseResp baseResponse, String desc) {
emailAlertService.sendEmailAlert(desc, "请求json:" + JSONObject.toJSONString(order) + "返回msg:" + baseResponse.getMessage()); emailAlertService.sendEmailAlert(desc, "请求json:" + JSONObject.toJSONString(order) + "返回msg:" + baseResponse.getMessage());
} }
...@@ -412,8 +419,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -412,8 +419,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override @Override
public BaseResponse orderCancelDelivery(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse orderCancelDelivery(OrderManagerRequest request, OrderBeanV1 orderBean) {
BaseResponse response = deliveryHandle.cancelDelivery(orderBean,request); BaseResponse response = deliveryHandle.cancelDelivery(orderBean, request);
if (!Objects.equals(response.getCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)){ if (!Objects.equals(response.getCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)) {
return response; return response;
} }
OrderExpressReq expressReq = new OrderExpressReq(); OrderExpressReq expressReq = new OrderExpressReq();
...@@ -421,15 +428,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -421,15 +428,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
expressReq.setPartnerId(orderBean.getCompanyId()); expressReq.setPartnerId(orderBean.getCompanyId());
expressReq.setOrderSubState(DeliveryStatus.DELIVERYCANCEL.getCode()); expressReq.setOrderSubState(DeliveryStatus.DELIVERYCANCEL.getCode());
OrderBaseResp orderBaseResp = orderSdkService.updateDeliveryInfo(expressReq, LogThreadLocal.getTrackingNo()); OrderBaseResp orderBaseResp = orderSdkService.updateDeliveryInfo(expressReq, LogThreadLocal.getTrackingNo());
if (!Objects.equals(orderBaseResp.getCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)){ if (!Objects.equals(orderBaseResp.getCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)) {
this.commonSendEmailAlert(orderBean,orderBaseResp,"取消配送,修改订单配送状态失败"); this.commonSendEmailAlert(orderBean, orderBaseResp, "取消配送,修改订单配送状态失败");
return ResponseUtil.error(ResponseResult.ORDER_DELIVERY_EDIT_FAILED); return ResponseUtil.error(ResponseResult.ORDER_DELIVERY_EDIT_FAILED);
} }
return ResponseUtil.success(); return ResponseUtil.success();
} }
/** /**
*
* @param query * @param query
* @param partnerId * @param partnerId
* @param storeId * @param storeId
......
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