Commit ac2ff3c1 by 周晓航

Merge branch 'KA-新增同意退款回调逻辑处理' into pre

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	order-management/src/main/java/cn/freemud/management/service/adapter/OrderManagerAdapter.java
parents bfa066e3 bfd25c88
...@@ -19,7 +19,8 @@ public enum PayRefundStatus { ...@@ -19,7 +19,8 @@ public enum PayRefundStatus {
/** /**
* 额外状态码 用于判断逻辑, * 额外状态码 用于判断逻辑,
*/ */
NOT_SUFFICIENT_FUNDS(8200201,"余额不足"); NOT_SUFFICIENT_FUNDS(8200201,"余额不足"),
COMPATIBILITY_STATUS(9999999,"兼容爱马哥报错");
private Integer code; private Integer code;
private String desc; private String desc;
......
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
...@@ -22,6 +22,7 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; ...@@ -22,6 +22,7 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo; import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
import cn.freemud.entities.vo.order.*; import cn.freemud.entities.vo.order.*;
import cn.freemud.handler.OrderReportJobHandler; import cn.freemud.handler.OrderReportJobHandler;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.service.EncircleOrderService; import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.Orderservice; import cn.freemud.service.Orderservice;
import cn.freemud.service.PointsMallOrderService; import cn.freemud.service.PointsMallOrderService;
......
...@@ -207,6 +207,7 @@ public enum ResponseResult { ...@@ -207,6 +207,7 @@ public enum ResponseResult {
*/ */
PAY_BACKEND_CONFIG_ERROR("58003", "支付交易异常","Abnormal payment transaction"), PAY_BACKEND_CONFIG_ERROR("58003", "支付交易异常","Abnormal payment transaction"),
PAY_SVC_CONFIG_ERROR("58004", "不支持储值卡支付",""), PAY_SVC_CONFIG_ERROR("58004", "不支持储值卡支付",""),
PAY_REFUND_ERROR("58005", "退款已受理,请等待",""),
/** /**
* 优惠券活动 * 优惠券活动
*/ */
......
...@@ -18,6 +18,7 @@ import cn.freemud.entities.vo.order.PaymentConfigVo; ...@@ -18,6 +18,7 @@ import cn.freemud.entities.vo.order.PaymentConfigVo;
import cn.freemud.entities.vo.order.PlugInParameter; import cn.freemud.entities.vo.order.PlugInParameter;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.service.handle.SaasOrderHandle; import cn.freemud.management.service.handle.SaasOrderHandle;
import cn.freemud.management.thirdparty.OrderCallbackClient; import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.manager.OpenPlatformOrderConfigManager; import cn.freemud.manager.OpenPlatformOrderConfigManager;
...@@ -122,7 +123,7 @@ public class OrderAdapterServiceImpl { ...@@ -122,7 +123,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
...@@ -170,7 +171,7 @@ public class OrderAdapterServiceImpl { ...@@ -170,7 +171,7 @@ public class OrderAdapterServiceImpl {
private EmailAlertService emailAlertService; private EmailAlertService emailAlertService;
//获取下单实现对象 //获取下单实现对象
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围餐
...@@ -192,7 +193,7 @@ public class OrderAdapterServiceImpl { ...@@ -192,7 +193,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;
...@@ -201,6 +202,7 @@ public class OrderAdapterServiceImpl { ...@@ -201,6 +202,7 @@ public class OrderAdapterServiceImpl {
/** /**
* 创建无单 收银订单 * 创建无单 收银订单
* 不需要查询购物车,没有商品,流程上 只需要创建一个订单然后唤起预支付就行了 * 不需要查询购物车,没有商品,流程上 只需要创建一个订单然后唤起预支付就行了
*
* @param createOrderDto 请求信息 * @param createOrderDto 请求信息
*/ */
public CreateOrderResponseVo createCashierOrder(CreateCashierOrderDto createOrderDto) { public CreateOrderResponseVo createCashierOrder(CreateCashierOrderDto createOrderDto) {
...@@ -238,7 +240,7 @@ public class OrderAdapterServiceImpl { ...@@ -238,7 +240,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);
...@@ -338,36 +340,36 @@ public class OrderAdapterServiceImpl { ...@@ -338,36 +340,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;
} }
...@@ -377,16 +379,16 @@ public class OrderAdapterServiceImpl { ...@@ -377,16 +379,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());
} }
//爱马哥低碳活动 活动结束即可删除此代码,大概2022-09月结束 //爱马哥低碳活动 活动结束即可删除此代码,大概2022-09月结束
sendLowCarbonToWeixin(message,orderBean); sendLowCarbonToWeixin(message,orderBean);
...@@ -399,8 +401,8 @@ public class OrderAdapterServiceImpl { ...@@ -399,8 +401,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);
} }
} }
...@@ -420,21 +422,18 @@ public class OrderAdapterServiceImpl { ...@@ -420,21 +422,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()));
} }
...@@ -458,11 +457,11 @@ public class OrderAdapterServiceImpl { ...@@ -458,11 +457,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();
} }
} }
...@@ -470,7 +469,7 @@ public class OrderAdapterServiceImpl { ...@@ -470,7 +469,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);
...@@ -481,8 +480,8 @@ public class OrderAdapterServiceImpl { ...@@ -481,8 +480,8 @@ 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);
} }
} }
...@@ -574,4 +573,5 @@ public class OrderAdapterServiceImpl { ...@@ -574,4 +573,5 @@ public class OrderAdapterServiceImpl {
} }
return false; return false;
} }
} }
...@@ -2023,9 +2023,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2023,9 +2023,9 @@ public class OrderServiceImpl implements Orderservice {
BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, isRefundDeliveryFee); BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, isRefundDeliveryFee);
if (baseResponse != null) { if (baseResponse != null) {
return baseResponse; return baseResponse;
} } // 删除订单 通知活动添加商品库存
// 删除订单 通知活动添加商品库存
orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus(), orderBean.getPayStatus()); orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus(), orderBean.getPayStatus());
} else { } else {
CancelOrderRequest cancelOrderRequest = new CancelOrderRequest(); CancelOrderRequest cancelOrderRequest = new CancelOrderRequest();
cancelOrderRequest.setPartnerId(orderBean.getCompanyId()); cancelOrderRequest.setPartnerId(orderBean.getCompanyId());
...@@ -2079,50 +2079,24 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2079,50 +2079,24 @@ public class OrderServiceImpl implements Orderservice {
String partnerId = orderBean.getCompanyId(); String partnerId = orderBean.getCompanyId();
int state = PayRefundStatus.SUCCESS.getCode(); int state = PayRefundStatus.SUCCESS.getCode();
if (orderBean.getAmount() != 0) { if (orderBean.getAmount() != 0) {
if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) { OrderManagerRequest orderManagerRequest = new OrderManagerRequest();
//调用支付退款 orderManagerRequest.setReason(orderRefundVo.getReason());
MultiOrderRefundRequest multiOrderRefundRequest = orderAdapter.getMultiOrderPayRefundRequest(orderBean, refundId); PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(orderManagerRequest, orderBean);
MultiOrderRefundResponse multiOrderRefundResponse = payServiceImpl.paymentApplicationRefund(multiOrderRefundRequest, orderBean.getCompanyId()); state = refundResponse.getPayRefundStatus().getCode();
if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
return ResponseUtil.error(ResponseResult.MULTIORDER__ERRORREFUND.getCode(), "multiOrderRefund_failed");
}
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList;
if (null != refundPlatformResponseList && refundPlatformResponseList.size() > 0) {
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()), orderBean.getOid(), 1L, TimeUnit.DAYS);
}
//获取支付返回退款状态
state = PayRefundStatus.SUCCESS.getCode();
} else {
OrderExtendedReq ext = orderBean.getOrderExtended();
if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) {
//代付人信息不为空 并且和订单创建人不一样,表示代付单
PayRefundResponse resp = paymentHandle.agentPayRefund(orderBean);
state = resp.getPayRefundStatus().getCode();
} else {
//调用支付退款
PayRefundRequestDto orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, fatherOrderId);
//抖音支付退款必传
orderPayRefundRequest.setRefundDesc(orderRefundVo.getReason() == null ? "用户退款" : orderRefundVo.getReason());
response = payServiceImpl.orderRefund(orderPayRefundRequest);
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
}
//获取支付返回退款状态
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
}
}
} }
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(),
partnerId, afterSalesType, orderRefundVo.getReason(), LogThreadLocal.getTrackingNo(), refundId.toString()); partnerId, afterSalesType, orderRefundVo.getReason(), LogThreadLocal.getTrackingNo(), refundId.toString());
cancelOrderRequest.setOperator(orderBean.getUserName()); cancelOrderRequest.setOperator(orderBean.getUserName());
cancelOrderRequest.setPartnerId(orderBean.getCompanyId()); cancelOrderRequest.setPartnerId(orderBean.getCompanyId());
if (Objects.equals(PayRefundStatus.RUNNING.getCode(), state)) { if (Objects.equals(PayRefundStatus.FAIL.getCode(), state)) {
// 退款中 // 退款中
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.RETURN_COMPLETE.getCreateEvent()); cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.RETURN_COMPLETE.getCreateEvent());
} else if (Objects.equals(PayRefundStatus.SUCCESS.getCode(), state)) { } else if (Objects.equals(PayRefundStatus.SUCCESS.getCode(), state)) {
//退款成功 //退款成功
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent()); cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent());
} else if (Objects.equals(PayRefundStatus.RUNNING.getCode(), state)) {
cancelOrderRequest.setCreateEvent(null);
} }
cancelOrderRequest.setReqRemark(orderRefundVo.getRemarks()); cancelOrderRequest.setReqRemark(orderRefundVo.getRemarks());
cancelOrderRequest.setRefundDeliveryAmount(isRefundDeliveryFee); cancelOrderRequest.setRefundDeliveryAmount(isRefundDeliveryFee);
...@@ -2135,6 +2109,11 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2135,6 +2109,11 @@ public class OrderServiceImpl implements Orderservice {
if (baseOrderResponse == null || !ObjectUtils.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, baseOrderResponse.getErrcode())) { if (baseOrderResponse == null || !ObjectUtils.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, baseOrderResponse.getErrcode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed"); return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
} }
if (state == PayRefundStatus.RUNNING.getCode().intValue()) {
// 如果退款中, 直接来个申请记录, 退款回调进行处理
return ResponseUtil.error(ResponseResult.PAY_REFUND_ERROR);
}
return null; return null;
} }
...@@ -2339,7 +2318,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2339,7 +2318,10 @@ public class OrderServiceImpl implements Orderservice {
try { try {
messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean); messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean);
messageTemplateRequest.setMessageEventType(messageEventType); messageTemplateRequest.setMessageEventType(messageEventType);
this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest); com.freemud.application.sdk.api.base.BaseResponse baseResponse = this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
if (!Objects.equals(baseResponse.getCode(), ResponseResultEnum.SUCCESS.getCode())) {
AppLogUtil.errorLog("发送支付成功模板消息 失败", orderBean.getOid(), JSON.toJSONString(baseResponse), null);
}
} catch (Exception e) { } catch (Exception e) {
AppLogUtil.errorLog("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e); AppLogUtil.errorLog("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e);
} }
...@@ -3614,7 +3596,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3614,7 +3596,7 @@ public class OrderServiceImpl implements Orderservice {
} else { } else {
resultMap.put(orderCode, resp.getMessage()); resultMap.put(orderCode, resp.getMessage());
} }
}catch (Exception e){ } catch (Exception e) {
resultMap.put(orderCode, e.getMessage()); resultMap.put(orderCode, e.getMessage());
} }
}); });
...@@ -3705,9 +3687,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3705,9 +3687,9 @@ public class OrderServiceImpl implements Orderservice {
Long bLong = Long.valueOf(o2.getCreateTime()); Long bLong = Long.valueOf(o2.getCreateTime());
if (bLong > aLong) { if (bLong > aLong) {
return 1; return 1;
}else if (bLong < aLong){ } else if (bLong < aLong) {
return -1; return -1;
}else { } else {
return 0; return 0;
} }
}); });
...@@ -3954,5 +3936,4 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3954,5 +3936,4 @@ public class OrderServiceImpl implements Orderservice {
} }
} }
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;
} }
......
...@@ -3,6 +3,7 @@ package cn.freemud.management.controller; ...@@ -3,6 +3,7 @@ package cn.freemud.management.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.McCafeOrderManagerRequest; import cn.freemud.management.entities.dto.request.order.McCafeOrderManagerRequest;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.enums.McCafeOperateType; import cn.freemud.management.enums.McCafeOperateType;
import cn.freemud.management.enums.OperateType; import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.ResponseResult; import cn.freemud.management.enums.ResponseResult;
...@@ -72,6 +73,17 @@ public class OrderManagerController { ...@@ -72,6 +73,17 @@ public class OrderManagerController {
} }
} }
/**
* 同意退款, 支付服务退款失败的补偿接口
*
* 退款成功会回调该接口进行后续流程补偿
*/
@ApiAnnotation(logMessage = "/order/refund/callback")
@PostMapping("/refund/callback")
public BaseResponse refundSuccessCallback(@Validated @LogParams @RequestBody RefundSuccessCallbackVo req) {
return orderManagerAdapter.refundSuccessCallback(req);
}
@ApiAnnotation(logMessage = "mcCafeDeliveryCreate") @ApiAnnotation(logMessage = "mcCafeDeliveryCreate")
@ApiOperation(value = "麦咖啡订单入机", notes = "麦咖啡订单入机", produces = "application/json") @ApiOperation(value = "麦咖啡订单入机", notes = "麦咖啡订单入机", produces = "application/json")
@PostMapping("/mcCafe/statusOperate") @PostMapping("/mcCafe/statusOperate")
......
package cn.freemud.management.entities.dto.request.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/6/8 17:38
* @description :
*/
@Data
public class RefundSuccessCallbackVo {
@ApiModelProperty(value = "总金额", position = 10)
private Integer totalAmount;
@ApiModelProperty(value = "退款金额", position = 11)
private Integer refundAmount;
@ApiModelProperty(value = "应结总金额", position = 12)
private Integer settlementTotalAmount;
@ApiModelProperty(value = "应结退款金额", position = 13)
private Integer settlementRefundAmount;
@ApiModelProperty(value = "交易流水号", position = 14)
private String tradeNo;
/**
* 订单编号
*/
private String orderCode;
/**
* 退款描述
*/
private String msg;
@ApiModelProperty(value = "第三方交易流水", position = 15)
private String thirdPartTradeNo;
@ApiModelProperty(value = "退款交易流水号", position = 16)
private String refundTradeNo;
@ApiModelProperty(value = "第三方退款交易流水", position = 17)
private String thirdPartRefundTradeNo;
@ApiModelProperty(value = "格式:yyyyMMddHHmmss", position = 18)
private String refundTime;
@ApiModelProperty(value = "货币类型", position = 19)
private String transCurrency;
@ApiModelProperty(value = "退款状态: 100 退款成功 8200305 处理中, 其他都是失败", position = 20)
private String refundStatus;
@ApiModelProperty(value = "商户号", position = 21)
private String partnerId;
@ApiModelProperty(value = "业务方退款单号", position = 22)
private String refundId;
@ApiModelProperty(value = "业务方支付单号", position = 22)
private String transId;
@ApiModelProperty(value = "间联退款单号")
private String refundEndTransId;
}
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() {
......
package cn.freemud.management.entities.dto.response.pay; package cn.freemud.management.entities.dto.response.pay;
import cn.freemud.management.enums.ResponseResult;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus; import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import lombok.Data; import lombok.Data;
...@@ -28,4 +29,9 @@ public class PayRefundResponse { ...@@ -28,4 +29,9 @@ public class PayRefundResponse {
* 退款序列号 * 退款序列号
*/ */
private String refundId; private String refundId;
/**
* 兼容爱马哥退款报错的字段 ,其他场景不会有值
*/
private ResponseResult result;
} }
...@@ -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", "支付退款失败,等待回调补偿中"),
/** /**
* 优惠券活动 * 优惠券活动
*/ */
......
...@@ -2,6 +2,7 @@ package cn.freemud.management.service; ...@@ -2,6 +2,7 @@ package cn.freemud.management.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse; import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.util.ResponseUtil; import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
...@@ -110,4 +111,14 @@ public interface OrderManagerService { ...@@ -110,4 +111,14 @@ public interface OrderManagerService {
default BaseResponse<OrderManagerResponse> orderCancelDelivery(OrderManagerRequest request, OrderBeanV1 orderBean){ default BaseResponse<OrderManagerResponse> orderCancelDelivery(OrderManagerRequest request, OrderBeanV1 orderBean){
return ResponseUtil.success(); return ResponseUtil.success();
}; };
/**
* 支付退款成功的售后状态回调
* @param request
* @param orderBean
* @return
*/
default BaseResponse refundSuccessCallback(RefundSuccessCallbackVo request, OrderBeanV1 orderBean){
return ResponseUtil.success();
};
} }
...@@ -2,6 +2,7 @@ package cn.freemud.management.service.adapter; ...@@ -2,6 +2,7 @@ package cn.freemud.management.service.adapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse; import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.OperateType; import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.ResponseResult; import cn.freemud.management.enums.ResponseResult;
...@@ -10,6 +11,7 @@ import cn.freemud.management.service.handle.OrderVerifyHandle; ...@@ -10,6 +11,7 @@ import cn.freemud.management.service.handle.OrderVerifyHandle;
import cn.freemud.management.util.ResponseUtil; import cn.freemud.management.util.ResponseUtil;
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.enums.BizTypeEnum; import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.NewOrderStatus;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.RefundStatusV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.RefundStatusV1;
...@@ -57,11 +59,12 @@ public class OrderManagerAdapter { ...@@ -57,11 +59,12 @@ public class OrderManagerAdapter {
} }
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderConfirm(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderConfirm(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* 制作完成 * 制作完成
*
* @param request * @param request
* @return * @return
*/ */
...@@ -74,14 +77,15 @@ public class OrderManagerAdapter { ...@@ -74,14 +77,15 @@ public class OrderManagerAdapter {
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderDoneVerify(orderBean, request); BaseResponse verifyResponse = orderVerifyHandle.orderDoneVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderDone(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderDone(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* 送出 * 送出
*
* @param request * @param request
* @return * @return
*/ */
...@@ -100,19 +104,20 @@ public class OrderManagerAdapter { ...@@ -100,19 +104,20 @@ public class OrderManagerAdapter {
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderDeliveryVerify(orderBean, request); BaseResponse verifyResponse = orderVerifyHandle.orderDeliveryVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return StringUtils.equals(verifyResponse.getCode(), ResponseResult.ORDER_IS_COMPLETE_CAN_NOT_DELIVERY.getCode()) ? handleResponse(request,orderBean,ResponseUtil.success()) : handleResponse(request,orderBean,verifyResponse); return StringUtils.equals(verifyResponse.getCode(), ResponseResult.ORDER_IS_COMPLETE_CAN_NOT_DELIVERY.getCode()) ? handleResponse(request, orderBean, ResponseUtil.success()) : handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderDelivery(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderDelivery(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* 完成 * 完成
*
* @param request * @param request
* @return * @return
*/ */
public BaseResponse<OrderManagerResponse> orderAffirm(OrderManagerRequest request,OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderAffirm(OrderManagerRequest request, OrderBeanV1 orderBean) {
if (orderBean==null){ if (orderBean == null) {
//查询订单 //查询订单
orderBean = orderBaseService.getByOrderCode(request.getOrderId()); orderBean = orderBaseService.getByOrderCode(request.getOrderId());
if (null == orderBean) { if (null == orderBean) {
...@@ -122,10 +127,10 @@ public class OrderManagerAdapter { ...@@ -122,10 +127,10 @@ public class OrderManagerAdapter {
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderAffirmVerify(orderBean, request); BaseResponse verifyResponse = orderVerifyHandle.orderAffirmVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAffirm(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAffirm(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
...@@ -142,9 +147,9 @@ public class OrderManagerAdapter { ...@@ -142,9 +147,9 @@ public class OrderManagerAdapter {
} }
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse; BaseResponse verifyResponse;
if(BizTypeEnum.MALL.getBizType().compareTo(orderBean.getBizType()) == 0){ if (BizTypeEnum.MALL.getBizType().compareTo(orderBean.getBizType()) == 0) {
verifyResponse = orderVerifyHandle.mallOrderRejectVerify(orderBean, request); verifyResponse = orderVerifyHandle.mallOrderRejectVerify(orderBean, request);
}else { } else {
if (!macCafePartnerId.equals(orderBean.getCompanyId())) { if (!macCafePartnerId.equals(orderBean.getCompanyId())) {
verifyResponse = orderVerifyHandle.orderRejectVerify(orderBean, request); verifyResponse = orderVerifyHandle.orderRejectVerify(orderBean, request);
} else { } else {
...@@ -152,14 +157,15 @@ public class OrderManagerAdapter { ...@@ -152,14 +157,15 @@ public class OrderManagerAdapter {
} }
} }
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderReject(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderReject(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* 同意退款 * 同意退款
*
* @param request * @param request
* @return * @return
*/ */
...@@ -171,7 +177,7 @@ public class OrderManagerAdapter { ...@@ -171,7 +177,7 @@ public class OrderManagerAdapter {
} }
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse; BaseResponse verifyResponse;
if(BizTypeEnum.MALL.getBizType()==orderBean.getBizType()){ if (BizTypeEnum.MALL.getBizType() == orderBean.getBizType()) {
verifyResponse = orderVerifyHandle.mallOrderAgreeRefund(orderBean, request); verifyResponse = orderVerifyHandle.mallOrderAgreeRefund(orderBean, request);
}else if(BizTypeEnum.FM_MALL.getBizType()==orderBean.getBizType()){//新版saas商城同意退款校验 }else if(BizTypeEnum.FM_MALL.getBizType()==orderBean.getBizType()){//新版saas商城同意退款校验
verifyResponse = orderVerifyHandle.fmMallOrderAgreeRefund(orderBean, request); verifyResponse = orderVerifyHandle.fmMallOrderAgreeRefund(orderBean, request);
...@@ -179,10 +185,10 @@ public class OrderManagerAdapter { ...@@ -179,10 +185,10 @@ public class OrderManagerAdapter {
verifyResponse = orderVerifyHandle.orderAgreeRefund(orderBean, request); verifyResponse = orderVerifyHandle.orderAgreeRefund(orderBean, request);
} }
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
...@@ -194,22 +200,23 @@ public class OrderManagerAdapter { ...@@ -194,22 +200,23 @@ public class OrderManagerAdapter {
if (null == orderBean) { if (null == orderBean) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST); return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
} }
if(CollectionUtils.isNotEmpty(orderBean.getRefundList())){ if (CollectionUtils.isNotEmpty(orderBean.getRefundList())) {
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderAgreeRefundMCCafe(orderBean, request); BaseResponse verifyResponse = orderVerifyHandle.orderAgreeRefundMCCafe(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
}else { } else {
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancel(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancel(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
} }
/** /**
* 拒绝退款 * 拒绝退款
*
* @param request * @param request
* @return * @return
*/ */
...@@ -221,22 +228,23 @@ public class OrderManagerAdapter { ...@@ -221,22 +228,23 @@ public class OrderManagerAdapter {
} }
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse; BaseResponse verifyResponse;
if(BizTypeEnum.MALL.getBizType()==orderBean.getBizType()){ if (BizTypeEnum.MALL.getBizType() == orderBean.getBizType()) {
verifyResponse = orderVerifyHandle.mallOrderRejectRefund(orderBean, request); verifyResponse = orderVerifyHandle.mallOrderRejectRefund(orderBean, request);
}else{ } else {
verifyResponse = orderVerifyHandle.orderRejectRefund(orderBean, request); verifyResponse = orderVerifyHandle.orderRejectRefund(orderBean, request);
} }
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderRejectRefund(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderRejectRefund(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* 取消订单 * 取消订单
*
* @param request * @param request
* @return * @return
*/ */
...@@ -247,11 +255,12 @@ public class OrderManagerAdapter { ...@@ -247,11 +255,12 @@ public class OrderManagerAdapter {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST); return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancel(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancel(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* 拒绝退款 * 拒绝退款
*
* @param request * @param request
* @return * @return
*/ */
...@@ -264,20 +273,20 @@ public class OrderManagerAdapter { ...@@ -264,20 +273,20 @@ public class OrderManagerAdapter {
//订单接单参数校验 //订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.mcCafeOrderRejectRefund(orderBean, request); BaseResponse verifyResponse = orderVerifyHandle.mcCafeOrderRejectRefund(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) { if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse); return handleResponse(request, orderBean, verifyResponse);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderRejectRefund(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderRejectRefund(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
private BaseResponse<OrderManagerResponse> handleResponse(OrderManagerRequest request, OrderBeanV1 orderBean,BaseResponse result) { private BaseResponse<OrderManagerResponse> handleResponse(OrderManagerRequest request, OrderBeanV1 orderBean, BaseResponse result) {
if (orderBean==null){ if (orderBean == null) {
return result; return result;
} }
RefundStatusV1 refundStatus = CollectionUtils.isNotEmpty(orderBean.getRefundList()) ? RefundStatusV1.getRefundStatusByCodeV1(orderBean.getRefundList().get(0).getStatus()) : null; RefundStatusV1 refundStatus = CollectionUtils.isNotEmpty(orderBean.getRefundList()) ? RefundStatusV1.getRefundStatusByCodeV1(orderBean.getRefundList().get(0).getStatus()) : null;
OrderStatusV1 orderStatus = OrderStatusV1.getByCode(orderBean.getStatus()); OrderStatusV1 orderStatus = OrderStatusV1.getByCode(orderBean.getStatus());
if (ObjectUtils.equals(ResponseResult.SUCCESS.getCode(),result.getCode())){ if (ObjectUtils.equals(ResponseResult.SUCCESS.getCode(), result.getCode())) {
OperateType byOpType = OperateType.getByOpType(request.getOperateType()); OperateType byOpType = OperateType.getByOpType(request.getOperateType());
if (byOpType != null) { if (byOpType != null) {
switch (byOpType) { switch (byOpType) {
...@@ -304,14 +313,15 @@ public class OrderManagerAdapter { ...@@ -304,14 +313,15 @@ public class OrderManagerAdapter {
default: default:
} }
} }
return ResponseUtil.success(new OrderManagerResponse(orderStatus,refundStatus)); return ResponseUtil.success(new OrderManagerResponse(orderStatus, refundStatus));
} }
result.setResult(new OrderManagerResponse(orderStatus,refundStatus)); result.setResult(new OrderManagerResponse(orderStatus, refundStatus));
return result; return result;
} }
/** /**
* 创建配送单 * 创建配送单
*
* @param request * @param request
* @return * @return
*/ */
...@@ -327,10 +337,10 @@ public class OrderManagerAdapter { ...@@ -327,10 +337,10 @@ public class OrderManagerAdapter {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST); return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
} }
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCreateDelivery(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCreateDelivery(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
private BaseResponse<OrderBeanV1> getOrderBean(String orderId){ private BaseResponse<OrderBeanV1> getOrderBean(String orderId) {
//查询订单 //查询订单
OrderBeanV1 orderBean = orderBaseService.getByOrderCode(orderId); OrderBeanV1 orderBean = orderBaseService.getByOrderCode(orderId);
// 防止NPE // 防止NPE
...@@ -342,6 +352,7 @@ public class OrderManagerAdapter { ...@@ -342,6 +352,7 @@ public class OrderManagerAdapter {
/** /**
* 取消配送 * 取消配送
*
* @param request * @param request
* @return * @return
*/ */
...@@ -353,14 +364,14 @@ public class OrderManagerAdapter { ...@@ -353,14 +364,14 @@ public class OrderManagerAdapter {
} }
OrderBeanV1 orderBean = orderBeanResp.getResult(); OrderBeanV1 orderBean = orderBeanResp.getResult();
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancelDelivery(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancelDelivery(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
} }
/** /**
* @see OrderManagerAdapter#orderAgreeRefund(cn.freemud.management.entities.dto.request.order.OrderManagerRequest)
* @param request * @param request
* @return 改操作 无需校验订单参数 直接退款 * @return 改操作 无需校验订单参数 直接退款
* 使用该方法 请先进行报备, 因为不暴露给外部使用, 不属于业务代码 * 使用该方法 请先进行报备, 因为不暴露给外部使用, 不属于业务代码
* @see OrderManagerAdapter#orderAgreeRefund(cn.freemud.management.entities.dto.request.order.OrderManagerRequest)
*/ */
public BaseResponse developRefund(OrderManagerRequest request) { public BaseResponse developRefund(OrderManagerRequest request) {
//查询订单 //查询订单
...@@ -369,8 +380,31 @@ public class OrderManagerAdapter { ...@@ -369,8 +380,31 @@ public class OrderManagerAdapter {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST); return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
} }
// 设置退款金额 // 设置退款金额
orderBean.setAmount(orderVerifyHandle.getRefundAmount(orderBean,false).longValue()); orderBean.setAmount(orderVerifyHandle.getRefundAmount(orderBean, false).longValue());
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean); BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean);
return handleResponse(request,orderBean,orderManagerResponse); return handleResponse(request, orderBean, orderManagerResponse);
}
/**
* 支付退款成功回调
*
* @param request
* @return
*/
public BaseResponse refundSuccessCallback(RefundSuccessCallbackVo request) {
// step 1 查订单
OrderBeanV1 orderBean = orderBaseService.getByOrderCode(request.getOrderCode());
if (null == orderBean) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
// step 2 检查订单状态
//已取消的订单不能操作
if (ObjectUtils.equals(OrderStatusV1.CANCEL.getV2Code(), orderBean.getStatusV2())) {
return ResponseUtil.error(ResponseResult.ORDER_HAS_CANCELED);
}
// step 3 调用后续逻辑操作
orderBeanFactory.getOrderManagerService(orderBean).refundSuccessCallback(request, orderBean);
return ResponseUtil.success();
} }
} }
package cn.freemud.management.service.handle;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundData;
import cn.freemud.management.enums.PaymentRefundStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.util.ResponseUtils;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import org.apache.commons.lang.ObjectUtils;
import java.util.Objects;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/6/13 10:56
* @description :
*/
public class DemoMain {
public static void main(String[] args) {
String str = "{\n" +
" \"code\": \"100\",\n" +
" \"data\": {\n" +
" \"resultCode\": 82004005,\n" +
" \"resultMsg\": \"当前订单有退款记录没有完成\"\n" +
" },\n" +
" \"message\": \"success\"\n" +
"}";
BaseResponse<PayRefundData> refundNewResponse = JSON.parseObject(str, new TypeReference<BaseResponse<PayRefundData>>() {
});
if (Objects.equals(refundNewResponse.getCode(), "100") && refundNewResponse.getData() != null) {
refundNewResponse.setCode(refundNewResponse.getData().getResultCode().toString());
refundNewResponse.setMessage(refundNewResponse.getData().getResultMsg());
}
if (Objects.equals(refundNewResponse.getCode(), "100")) {
PayRefundData refundData = refundNewResponse.getData();
if (null != refundData) {
OrderRefundResponse refundResponse = new OrderRefundResponse();
refundResponse.setStatusCode(refundData.getResultCode());
refundResponse.setMsg(refundData.getResultMsg());
refundResponse.setRefundAmount(refundData.getRefundAmount());
refundResponse.setTotalAmount(refundData.getTotalAmount());
refundResponse.setRefundStatus(getRefundStatus(refundData.getResultCode()));
refundResponse.setRefundTradeNo(refundData.getRefundTradeNo());
refundResponse.setTradeNo(refundData.getRefundTradeNo());
refundResponse.setThirdPartRefundTradeNo(refundData.getThirdPartRefundTradeNo());
refundResponse.setThirdPartTradeNo(refundData.getThirdPartTradeNo());
refundResponse.setTotalAmount(refundData.getTotalAmount());
// return ResponseUtils.success(refundResponse);
}
}
BaseResponse<OrderRefundResponse> orderRefundResponse = ResponseUtils.error(refundNewResponse.getCode(), refundNewResponse.getMessage());
// Integer refundStatus = PayRefundStatus.SUCCESS;
Integer refundStatus = 1;
if (orderRefundResponse == null) {
// refundStatus = PayRefundStatus.RUNNING;
refundStatus = 4;
} else {
refundStatus = getFinalRefundStatus(Integer.valueOf(orderRefundResponse.getCode()));
}
System.out.println(refundStatus);
}
private static Integer getFinalRefundStatus(Integer resultCode) {
switch (resultCode) {
// 退款中状态码需要单独处理
case 8200305:
// return PayRefundStatus.RUNNING;
return 4;
// 退款成功
case 100:
// return PayRefundStatus.SUCCESS;
return 1;
default:
// return PayRefundStatus.FAIL;
return 2;
}
}
private static final String SUCCESS = "100";
public static final Integer SUCCESS_RESPONSE_CODE_INT = 100;
public static final Integer SUCCESS_RESPONSE_101_CODE_INT = 101;
public static final Integer REFUND_RESPONSE_CODE = 8200305;
public static Integer getRefundStatus(Integer resultCode) {
if (Objects.equals(resultCode, SUCCESS_RESPONSE_CODE_INT)) {
return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode();
} else if (Objects.equals(resultCode, SUCCESS_RESPONSE_101_CODE_INT)) {
return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode();
} else {
return Objects.equals(resultCode, REFUND_RESPONSE_CODE) ? PaymentRefundStatus.PAYMENT_REFUND_STATUS_4.getCode() : PaymentRefundStatus.PAYMENT_REFUND_STATUS_2.getCode();
}
}
}
...@@ -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;
...@@ -22,6 +21,7 @@ import com.freemud.application.sdk.api.log.ErrorLog; ...@@ -22,6 +21,7 @@ import com.freemud.application.sdk.api.log.ErrorLog;
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.enums.orderv1.OrderTypeV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
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.response.OrderBaseResp; import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
...@@ -41,6 +41,7 @@ import java.math.BigDecimal; ...@@ -41,6 +41,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
* *
...@@ -85,6 +86,32 @@ public class PaymentHandle { ...@@ -85,6 +86,32 @@ public class PaymentHandle {
@Autowired @Autowired
private LogUtil logUtil; private LogUtil logUtil;
public PayRefundResponse getCommonPayRefundResponse(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse;
try {
if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) {
// payment/application/refund
refundResponse = this.multiRefund(orderBean);
} else {
OrderExtendedReq ext = orderBean.getOrderExtended();
if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) {
//代付人信息不为空 并且和订单创建人不一样,表示代付单 payment/application/agentRefund
refundResponse = this.agentPayRefund(orderBean);
} else {
//正常订单现金退款 paymentcenter/refund
refundResponse = this.refund(request, orderBean);
}
}
} catch (OrderServiceException orderEx) { // 爱马哥兼容,不抛错
ResponseResult result = orderEx.getResult();
refundResponse = new PayRefundResponse();
refundResponse.setPayRefundStatus(PayRefundStatus.COMPATIBILITY_STATUS);
refundResponse.setResult(result);
return refundResponse;
}
return refundResponse;
}
/** /**
* 退款 * 退款
* *
...@@ -100,25 +127,87 @@ public class PaymentHandle { ...@@ -100,25 +127,87 @@ 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)) { refundStatus = this.getFinalRefundStatus(Integer.valueOf(orderRefundResponse.getCode()));
//商户余额不足的情况下,返回异常特殊处理.
if (ResponseResult.NOT_SUFFICIENT_FUNDS.getCode().equals(orderRefundResponse.getCode())) {
throw new OrderServiceException(ResponseResult.NOT_SUFFICIENT_FUNDS);
}
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 82004005:
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 +215,29 @@ public class PaymentHandle { ...@@ -126,31 +215,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 +365,7 @@ public class PaymentHandle { ...@@ -278,7 +365,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 +374,29 @@ public class PaymentHandle { ...@@ -287,12 +374,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,102 +406,55 @@ public class PaymentHandle { ...@@ -302,102 +406,55 @@ 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){ // step2 查询退款配置
return null; PayRefundRequestDto request = this.queryWxAppStore(paymentQueryOrderResponseDtoBaseResponse, refundRequest);
if (Objects.isNull(request)) {
throw new OrderServiceException(ResponseResult.CHECK_PARAM_ERROR);
} }
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()); // step3 退款
payCode = payQueryOrderResponse.getCode(); BaseResponse<PayRefundData> refundNewResponse = null;
try {
refundNewResponse = paymentNewClient.payRefund(request);
} catch (Exception e) {
ErrorLog.errorConvertJson(this.getClass(), "paymentcenter/refund error", e);
} }
if (refundRequest.getTotalAmount() == null || refundRequest.getTotalAmount() == 0L) { if (refundNewResponse == null) {
refundRequest.setTotalAmount(refundRequest.getRefundAmount()); return null;
} }
logUtil.info("paymentcenter/refund", JSONObject.toJSONString(request), JSONObject.toJSONString(refundNewResponse));
AssortmentOpenPlatformIappWxappStore wxAppStore = this.assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(refundRequest.getAppId(), refundRequest.getStoreId(), payCode); //支付状态码取内部值
PayRefundRequestDto request = new PayRefundRequestDto(); if (Objects.equals(refundNewResponse.getCode(), "100") && refundNewResponse.getData() != null) {
request.setStoreId(refundRequest.getStoreId()); refundNewResponse.setCode(refundNewResponse.getData().getResultCode().toString());
request.setStationId(refundRequest.getStationId()); refundNewResponse.setMessage(refundNewResponse.getData().getResultMsg());
request.setOperatorId(refundRequest.getOperatorId()); }
request.setTransId(refundRequest.getOrgTransId()); if (Objects.equals(refundNewResponse.getCode(), "100")) {
request.setBusinessDate(refundRequest.getBusinessDate()); PayRefundData refundData = refundNewResponse.getData();
request.setFmId(refundRequest.getOrgPayFmId()); if (null != refundData) {
request.setTotalAmount(refundRequest.getTotalAmount()); OrderRefundResponse refundResponse = new OrderRefundResponse();
request.setRefundAmount(refundRequest.getRefundAmount()); refundResponse.setStatusCode(refundData.getResultCode());
request.setRefundId(refundRequest.getRefundId()); refundResponse.setMsg(refundData.getResultMsg());
request.setRefundDesc(refundRequest.getRefundDesc()); refundResponse.setRefundAmount(refundData.getRefundAmount());
request.setNotifyUrl(refundRequest.getNotifyUrl()); refundResponse.setTotalAmount(refundData.getTotalAmount());
request.setPartnerId(refundRequest.getPartnerId()); refundResponse.setRefundStatus(this.getRefundStatus(refundData.getResultCode()));
request.setVer(2); refundResponse.setRefundTradeNo(refundData.getRefundTradeNo());
request.setExtendParams(refundRequest.getExtendParams()); refundResponse.setTradeNo(refundData.getRefundTradeNo());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam = this.checkParam(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount(), wxAppStore); refundResponse.setThirdPartRefundTradeNo(refundData.getThirdPartRefundTradeNo());
if (!Objects.equals(checkParam.getCode(), "100")) { refundResponse.setThirdPartTradeNo(refundData.getThirdPartTradeNo());
return checkParam; refundResponse.setTotalAmount(refundData.getTotalAmount());
} else { return ResponseUtils.success(refundResponse);
// 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;
try {
refundNewResponse = paymentNewClient.payRefund(request);
}catch (Exception e){
ErrorLog.errorConvertJson(this.getClass(), "paymentcenter/refund error", e);
}
if(refundNewResponse == null){
return null;
}
logUtil.info("paymentcenter/refund", JSONObject.toJSONString(request),JSONObject.toJSONString(refundNewResponse));
//支付状态码取内部值
if(Objects.equals(refundNewResponse.getCode(), "100") && refundNewResponse.getData() != null){
refundNewResponse.setCode(refundNewResponse.getData().getResultCode().toString());
refundNewResponse.setMessage(refundNewResponse.getData().getResultMsg());
}
if (Objects.equals(refundNewResponse.getCode(), "100")) {
PayRefundData refundData = refundNewResponse.getData();
if (null != refundData) {
OrderRefundResponse refundResponse = new OrderRefundResponse();
refundResponse.setStatusCode(refundData.getResultCode());
refundResponse.setMsg(refundData.getResultMsg());
refundResponse.setRefundAmount(refundData.getRefundAmount());
refundResponse.setTotalAmount(refundData.getTotalAmount());
refundResponse.setRefundStatus(this.getRefundStatus(refundData.getResultCode()));
refundResponse.setRefundTradeNo(refundData.getRefundTradeNo());
refundResponse.setTradeNo(refundData.getRefundTradeNo());
refundResponse.setThirdPartRefundTradeNo(refundData.getThirdPartRefundTradeNo());
refundResponse.setThirdPartTradeNo(refundData.getThirdPartTradeNo());
refundResponse.setTotalAmount(refundData.getTotalAmount());
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)) {
return ResponseUtils.error("501", "商户号不能为空"); return ResponseUtils.error("501", "商户号不能为空");
...@@ -414,7 +471,7 @@ public class PaymentHandle { ...@@ -414,7 +471,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())) {
......
...@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.constant.ResponseCodeConstant; import cn.freemud.management.constant.ResponseCodeConstant;
import cn.freemud.management.entities.dto.request.console.*; import cn.freemud.management.entities.dto.request.console.*;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse; import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.OperateType; import cn.freemud.management.enums.OperateType;
...@@ -30,6 +31,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq; ...@@ -30,6 +31,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq;
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.response.OrderBaseResp; import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.service.EmailAlertService; import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
...@@ -106,9 +108,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -106,9 +108,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override @Override
public BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, OrderBeanV1 orderBean) {
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 +139,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -137,13 +139,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 +210,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -208,14 +210,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 +226,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -224,12 +226,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,36 +241,40 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -240,36 +241,40 @@ 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 = this.getPayRefundResponse(request, orderBean);
try { // 爱马哥报错
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){ if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.COMPATIBILITY_STATUS.getCode()) == 0) {
refundResponse = paymentHandle.multiRefund(orderBean); return ResponseUtil.error(refundResponse.getResult());
}else{
OrderExtendedReq ext = orderBean.getOrderExtended();
if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) {
//代付人信息不为空 并且和订单创建人不一样,表示代付单
refundResponse = paymentHandle.agentPayRefund(orderBean);
} else {
//正常订单现金退款
refundResponse = paymentHandle.refund(request, orderBean);
}
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
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();
} }
/** /**
* 提出 退款公共代码
*
* @param request
* @param orderBean
* @return
*/
private PayRefundResponse getPayRefundResponse(OrderManagerRequest request, OrderBeanV1 orderBean) {
return paymentHandle.getCommonPayRefundResponse(request, orderBean);
}
/**
* 拒绝退款 * 拒绝退款
* *
* @param request * @param request
...@@ -279,7 +284,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -279,7 +284,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 +294,21 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -289,21 +294,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 +318,13 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -313,12 +318,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 +335,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -329,7 +335,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()));
} }
...@@ -342,11 +348,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -342,11 +348,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
/** /**
* 拒单在支付退款后的取消订单操作 * 拒单在支付退款后的取消订单操作
* *
* @param order 订单详情 * @param order 订单详情
* @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 +369,9 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -363,9 +369,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 +386,24 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -380,24 +386,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());
} }
...@@ -405,37 +411,68 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -405,37 +411,68 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
public BaseResponse<OrderManagerResponse> orderCreateDelivery(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse<OrderManagerResponse> orderCreateDelivery(OrderManagerRequest request, OrderBeanV1 orderBean) {
// 使用feign调用 获取门店信息 // 使用feign调用 获取门店信息
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());
// 创建配送单 // 创建配送单
return deliveryHandle.createDelivery(orderBean, request, storeMix, false); return deliveryHandle.createDelivery(orderBean, request, storeMix, false);
} }
@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();
expressReq.setOrderCode(orderBean.getOid()); expressReq.setOrderCode(orderBean.getOid());
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();
} }
@Override
public BaseResponse refundSuccessCallback(RefundSuccessCallbackVo request, OrderBeanV1 orderBean) {
String reason = "支付补偿,订单退款";
AfterSalesOrderResp afterSalesOrderResp = orderBean.getAfterSalesOrderResp();
if (Objects.nonNull(afterSalesOrderResp)) {
reason = afterSalesOrderResp.getAfterSalesReason();
}
//订单同意退款
PayRefundResponse refundResponse = new PayRefundResponse();
String refundStatus = request.getRefundStatus();
PayRefundStatus payRefundStatus = PayRefundStatus.SUCCESS;
if (!Objects.equals(refundStatus, "100")) {
payRefundStatus = PayRefundStatus.FAIL;
}
refundResponse.setPayRefundStatus(payRefundStatus);
refundResponse.setRefundId(request.getRefundId());
OrderManagerRequest omRequest = new OrderManagerRequest();
omRequest.setReason(reason);
omRequest.setOperator("支付退款回调系统补偿");
saasOrderHandle.refundAgree(omRequest, refundResponse, orderBean);
// 推送pos、微信消息中心 未接单前 不需要推送pos
if (!NewOrderStatus.PLACE_AN_ORDER.getIndex().equals(orderBean.getStatusV2())) {
orderBaseService.sendMessage(orderBean, ORDER_AGREE_REFUND, reason);
}
//todo 可以考虑基于订单回调异步实现
//冲正库存
stockHandle.revert(omRequest, orderBean);
return ResponseUtil.success();
}
/** /**
*
* @param query * @param query
* @param partnerId * @param partnerId
* @param storeId * @param storeId
* @return * @return
*/ */
private ConsoleResponseDTO<BizDTO> getStoreMix(QueryFlag query, String partnerId, String storeId) { private ConsoleResponseDTO<BizDTO> getStoreMix(QueryFlag query, String partnerId, String storeId) {
GetStoreMixRequest getStoreMixRequest = GetStoreMixRequest.builder().partnerId(partnerId).storeCode(storeId).build(); GetStoreMixRequest getStoreMixRequest = GetStoreMixRequest.builder().partnerId(partnerId).storeCode(storeId).build();
getStoreMixRequest.setQuery(query); getStoreMixRequest.setQuery(query);
ConsoleResponseDTO<BizDTO> storeMix = consoleApiClient.getStoreMix(getStoreMixRequest); ConsoleResponseDTO<BizDTO> storeMix = consoleApiClient.getStoreMix(getStoreMixRequest);
......
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