Commit a05de75d by rui.zhu

Merge branch 'feature/售后单记录支付信息'

parents c57bc6b5 087f1d6c
package com.freemud.sdk.api.assortment.order.request.order;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.sdk.api.assortment.order.config.BaseConfig;
import lombok.Data;
......@@ -94,4 +95,10 @@ public class BaseQueryOrderRequest extends BaseConfig {
* 1是服务端自动接单
*/
private Integer acceptMode;
/**
* 对退款明细的记录
*/
private List<OrderCancelReq.PayRefundItem> payRefundItemList;
}
......@@ -14,12 +14,14 @@ package com.freemud.sdk.api.assortment.order.request.order;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.sdk.api.assortment.order.config.BaseConfig;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
@Data
public class CancelOrderRequest extends BaseConfig {
......@@ -102,6 +104,11 @@ public class CancelOrderRequest extends BaseConfig {
private Integer refundState;
/**
* 对退款明细的记录
*/
private List<OrderCancelReq.PayRefundItem> payRefundItemList;
/**
* 售后单拓展信息
*/
private AfterSalesOrderExtInfoReq extInfoReq;
......
......@@ -58,5 +58,14 @@ public class MultiOrderRefundResponse<T> {
@ApiModelProperty(value = "业务返回消息")
private String resultMsg;
@ApiModelProperty(value = "支付方式编号")
private String payMethodCode;
@ApiModelProperty(value = "现金类型")
private String cashType;
@ApiModelProperty(value = "支付条码")
private String uniqueCode;
}
}
\ No newline at end of file
......@@ -986,6 +986,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setOperationClient(cancelOrderRequest.getOperationClient());
request.setRefundState(cancelOrderRequest.getRefundState());
request.setRefundDeliveryAmount(cancelOrderRequest.isRefundDeliveryAmount());
request.setPayRefundItemList(cancelOrderRequest.getPayRefundItemList());
com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp response = orderSdkService.cancelOrder(request, cancelOrderRequest.getTrackingNo());
return orderSdkAdapter.convent2BaseOrderResponse(response);
}
......@@ -1124,6 +1125,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setOperator(baseQueryOrderRequest.getOperator());
request.setOperationClient(baseQueryOrderRequest.getOperationClient());
request.setRefundState(baseQueryOrderRequest.getRefundState());
request.setPayRefundItemList(baseQueryOrderRequest.getPayRefundItemList());
com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp response = orderSdkService.adultApproveWithRefundComplete(request, baseQueryOrderRequest.getTrackingNo());
return orderSdkAdapter.convent2BaseOrderResponse(response);
}
......@@ -1139,6 +1141,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setAfterSerialNo(baseQueryOrderRequest.getRefundSerialNo());
request.setOperationClient(baseQueryOrderRequest.getOperationClient());
request.setRefundState(baseQueryOrderRequest.getRefundState());
request.setPayRefundItemList(baseQueryOrderRequest.getPayRefundItemList());
com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp response = orderSdkService.adultWithRefundComplete(request, baseQueryOrderRequest.getTrackingNo());
return orderSdkAdapter.convent2BaseOrderResponse(response);
}
......
......@@ -49,4 +49,19 @@ public class RefundNotifyCallbackRequestVo {
* 退款流水号
*/
private String refundId;
/**
* 退款发起时间
*/
private String businessDate;
/**
* 支付渠道编号
*/
private String payCode;
/**
* 退款时间 格式:yyyyMMddHHmmss
*/
private String refundTime;
}
......@@ -27,6 +27,7 @@ import cn.freemud.service.store.StoreManager;
import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.service.thirdparty.FMAssistantCloudPrintClient;
import cn.freemud.utils.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentCloudPrinter;
import com.freemud.api.assortment.datamanager.manager.AssortmentCloudPrinterManager;
......@@ -51,6 +52,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
......@@ -281,9 +283,17 @@ public class RefundService {
*/
private void refundOrder(OrderInfoReqs order, String reason, String remark, Boolean isRefundDeliveryFee, Byte refundMode) {
int state = PayRefundStatus.SUCCESS.getCode();
List<OrderCancelReq.PayRefundItem> refundItemList = new ArrayList<>();
if (order.getSettlementAmount().longValue() > 0) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(order, reason);
state = refundResponse.getPayRefundStatus().getCode();
if (CollectionUtils.isNotEmpty(refundResponse.getPayRefundItemList())) {
refundResponse.getPayRefundItemList().forEach(item -> {
OrderCancelReq.PayRefundItem refundItem = new OrderCancelReq.PayRefundItem();
BeanUtils.copyProperties(item, refundItem);
refundItemList.add(refundItem);
});
}
}
OrderCancelReq req = OrderCancelReqAdapter.convert(order, UUID.randomUUID().toString(),
......@@ -292,6 +302,8 @@ public class RefundService {
if (Objects.equals(PayRefundStatus.SUCCESS.getCode(), state)) {
//退款成功
req.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent());
// 设置退款信息
req.setPayRefundItemList(refundItemList);
} else if (Objects.equals(PayRefundStatus.RUNNING.getCode(), state)) {
req.setCreateEvent(null);
req.setRefundState(AfterSalesRefunStateEnum.STATE_2.getIndex());
......
......@@ -56,7 +56,6 @@ import cn.freemud.handler.MemberBlacklistHandler;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
......@@ -115,9 +114,7 @@ import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.sdk.api.assortment.message.enums.MessageEventType;
import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest;
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService;
import com.freemud.sdk.api.assortment.order.enums.AutoOrderConfigTime;
import com.freemud.sdk.api.assortment.order.enums.OperationClientEnum;
......@@ -132,7 +129,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -620,6 +616,15 @@ public class OrderServiceImpl implements Orderservice {
request.setTrackingNo(trackingNo);
request.setOperationClient(OperationClientEnum.STATE_6.getIndex());
request.setRefundState(AfterSalesRefunStateEnum.STATE_4.getIndex());
List<OrderCancelReq.PayRefundItem> refundItemList = new ArrayList<>();
OrderCancelReq.PayRefundItem refundItem = new OrderCancelReq.PayRefundItem();
refundItem.setPayChannelType(Integer.valueOf(PayChannelType.getByEbcode(requestVo.getPayCode()).getIndex()));
refundItem.setPayChannelName(PayChannelType.getByEbcode(requestVo.getPayCode()).getName());
refundItem.setAmount(requestVo.getRefundAmount());
refundItem.setRefundTradeNo(requestVo.getRefundTradeNo());
refundItem.setRefundTime(DateUtil.convert2Date(requestVo.getRefundTime(), "yyyyMMddHHmmss").getTime());
refundItemList.add(refundItem);
request.setPayRefundItemList(refundItemList);
BaseOrderResponse response = orderCenterSdkService.orderRefundComplete(request);
if (response == null || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getErrcode())) {
return refundFaileMessage("orderRefundComplete fail" + response);
......
......@@ -27,6 +27,7 @@ import cn.freemud.enums.PaySuccessSource;
import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.TradeState;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.adapter.OrderCancelReqAdapter;
import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
......@@ -1445,7 +1446,7 @@ public class PayServiceImpl {
refundResponse.setMsg(refundData.getResultMsg());
refundResponse.setRefundAmount(refundData.getRefundAmount());
refundResponse.setTotalAmount(refundData.getTotalAmount());
refundResponse.setRefundStatus(this.getRefundStatus(refundData.getResultCode()));
refundResponse.setRefundStatus(OrderCancelReqAdapter.getRefundStatus(refundData.getResultCode()));
refundResponse.setRefundTradeNo(refundData.getRefundTradeNo());
refundResponse.setTradeNo(refundData.getRefundTradeNo());
refundResponse.setThirdPartRefundTradeNo(refundData.getThirdPartRefundTradeNo());
......@@ -1462,20 +1463,8 @@ public class PayServiceImpl {
return ResponseUtils.error(refundNewResponse.getCode(), refundNewResponse.getMessage());
}
}
public 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();
}
}
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount) {
if (StringUtils.isBlank(partnerId)) {
return ResponseUtils.error("501", "商户号不能为空");
......
package cn.freemud.management.adapter;
import cn.freemud.base.util.DateUtil;
import cn.freemud.management.entities.dto.request.order.RefundSuccessCallbackVo;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundData;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.PaymentRefundStatus;
import com.freemud.application.sdk.api.ordercenter.enums.CashTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.PayMethodEnum;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import static cn.freemud.management.service.handle.PaymentHandle.*;
/**
* @author Clover.z
* @version 1.0.0
* @since 1.0.0
*/
public class OrderCancelReqAdapter {
public static List<OrderCancelReq.PayRefundItem> convert(List<PayRefundResponse.PayRefundItem> list) {
List<OrderCancelReq.PayRefundItem> refundItemList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
OrderCancelReq.PayRefundItem refundItem = new OrderCancelReq.PayRefundItem();
BeanUtils.copyProperties(item, refundItem);
refundItemList.add(refundItem);
});
}
return refundItemList;
}
public static PayRefundResponse.PayRefundItem convert(OrderRefundResponse orderRefundData) {
PayRefundResponse.PayRefundItem refundItem = new PayRefundResponse.PayRefundItem();
if (StringUtils.isNotBlank(orderRefundData.getCashType())) {
refundItem.setPayChannelType(Integer.valueOf(orderRefundData.getCashType()));
refundItem.setPayChannelName(CashTypeEnum.getByCode(orderRefundData.getCashType()).getDesc());
} else {
refundItem.setPayChannelType(PayMethodEnum.getByCode(orderRefundData.getPayMethodCode()).getIndex());
refundItem.setPayChannelName(PayMethodEnum.getByCode(orderRefundData.getPayMethodCode()).getDesc());
}
refundItem.setAmount(orderRefundData.getRefundAmount().intValue());
refundItem.setRefundTradeNo(orderRefundData.getRefundTradeNo());
refundItem.setRefundTime(DateUtil.convert2Date(orderRefundData.getRefundTime(), "yyyy-MM-dd HH:mm:ss").getTime());
refundItem.setCardCode(PayMethodEnum.TSVC.getCode().equals(orderRefundData.getPayMethodCode()) ? orderRefundData.getUniqueCode() : null);
return refundItem;
}
public static List<PayRefundResponse.PayRefundItem> convertMultiRefundItem(List<MultiOrderRefundResponse.RefundPlatformResponse> orderRefundList) {
return orderRefundList.stream()
.map(r -> {
PayRefundResponse.PayRefundItem refundItem = new PayRefundResponse.PayRefundItem();
if (StringUtils.isNotBlank(r.getCashType())) {
refundItem.setPayChannelType(Integer.valueOf(r.getCashType()));
refundItem.setPayChannelName(CashTypeEnum.getByCode(r.getCashType()).getDesc());
} else {
refundItem.setPayChannelType(PayMethodEnum.getByCode(r.getPayMethodCode()).getIndex());
refundItem.setPayChannelName(PayMethodEnum.getByCode(r.getPayMethodCode()).getDesc());
}
refundItem.setAmount(r.getSettleRefundAmount());
refundItem.setRefundTradeNo(r.getRefundTradeNo());
refundItem.setRefundTime(DateUtil.convert2Date(r.getRefundTime(), "yyyy-MM-dd HH:mm:ss").getTime());
refundItem.setCardCode(PayMethodEnum.TSVC.getCode().equals(r.getPayMethodCode()) ? r.getUniqueCode() : null);
return refundItem;
})
.collect(Collectors.toList());
}
public static List<PayRefundResponse.PayRefundItem> convert(RefundSuccessCallbackVo request) {
List<PayRefundResponse.PayRefundItem> payRefundItemList = Lists.newArrayList();
PayRefundResponse.PayRefundItem payRefundItem = new PayRefundResponse.PayRefundItem();
payRefundItem.setRefundTradeNo(request.getRefundTradeNo());
if (StringUtils.isNotBlank(request.getCashType())) {
payRefundItem.setPayChannelType(Integer.valueOf(request.getCashType()));
payRefundItem.setPayChannelName(CashTypeEnum.getByCode(request.getCashType()).getDesc());
} else {
payRefundItem.setPayChannelType(PayMethodEnum.getByCode(request.getPayMethodCode()).getIndex());
payRefundItem.setPayChannelName(PayMethodEnum.getByCode(request.getPayMethodCode()).getDesc());
}
payRefundItem.setAmount(request.getRefundAmount());
payRefundItem.setRefundTime(DateUtil.convert2Date(request.getRefundTime(), "yyyy-MM-dd HH:mm:ss").getTime());
payRefundItem.setCardCode(PayMethodEnum.TSVC.getCode().equals(request.getPayMethodCode()) ? request.getUniqueCode() : null);
payRefundItemList.add(payRefundItem);
return payRefundItemList;
}
public static OrderRefundResponse convert(PayRefundData 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());
refundResponse.setCashType(refundData.getCashType());
refundResponse.setPayMethodCode(refundData.getPayMethodCode());
refundResponse.setUniqueCode(refundData.getUniqueCode());
refundResponse.setRefundTime(refundData.getRefundTime());
return refundResponse;
}
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();
}
}
}
......@@ -72,4 +72,13 @@ public class RefundSuccessCallbackVo {
@ApiModelProperty(value = "间联退款单号")
private String refundEndTransId;
@ApiModelProperty(value = "支付方式编号", position = 10)
private String payMethodCode;
@ApiModelProperty(value = "现金类型", position = 11)
private String cashType;
@ApiModelProperty(value = "支付条码", position = 12)
private String uniqueCode;
}
package cn.freemud.management.entities.dto.response.pay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
......@@ -14,5 +15,26 @@ public class OrderRefundResponse {
private Long refundAmount;
private Long totalAmount;
private Integer refundStatus;
/**
* 退款成功时间
*/
private String refundTime;
/**
* 支付方式
* {@link com.freemud.application.sdk.api.ordercenter.enums.PayMethodEnum}
*/
private String payMethodCode;
/**
* 现金类型, 当payMethodCode为其他的时候,存在该值
* {@link com.freemud.application.sdk.api.ordercenter.enums.CashTypeEnum}
*/
private String cashType;
/**
* 支付条码, 当支付方式为储值卡的时候,该字段为卡号
*/
private String uniqueCode;
}
......@@ -11,8 +11,35 @@ public class PayRefundData {
private String tradeNo;
private String refundTradeNo;
private String thirdPartRefundTradeNo;
/**
* 申请退款金额
*/
private Long refundAmount;
private Long totalAmount;
private Integer refundStatus;
/**
* 退款成功时间
*/
private String refundTime;
/**
* 支付渠道编号
*/
private String payCode;
/**
* 支付方式
* {@link com.freemud.application.sdk.api.ordercenter.enums.PayMethodEnum}
*/
private String payMethodCode;
/**
* 现金类型, 当payMethodCode为其他的时候,存在该值
* {@link com.freemud.application.sdk.api.ordercenter.enums.CashTypeEnum}
*/
private String cashType;
/**
* 支付条码, 当支付方式为储值卡的时候,该字段为卡号
*/
private String uniqueCode;
}
......@@ -4,6 +4,8 @@ import cn.freemud.management.enums.ResponseResult;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -43,4 +45,37 @@ public class PayRefundResponse {
* 是否为部分退款订单
*/
private Boolean partRefund = false;
/**
* 对退款明细的记录
*/
private List<PayRefundItem> payRefundItemList;
@Data
public static class PayRefundItem {
/**
* 退款支付渠道
*/
private Integer payChannelType;
/**
* 退款支付渠道名称
*/
private String payChannelName;
/**
* 退款金额
*/
private Integer amount;
/**
* 退款流水编号
*/
private String refundTradeNo;
/**
* 退款时间 单位毫秒
*/
private Long refundTime;
/**
* 退款储值卡卡号(退款渠道为储值卡时,则必须传递)
*/
private String cardCode;
}
}
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();
}
}
}
package cn.freemud.management.service.handle;
import cn.freemud.base.util.DateUtil;
import cn.freemud.management.adapter.OrderCancelReqAdapter;
import cn.freemud.management.adapter.PaymentSdkAdapter;
import cn.freemud.management.entities.dto.request.pay.AgentPayRefundReq;
import cn.freemud.management.entities.dto.response.pay.AgentPayRefundResp;
......@@ -7,6 +9,9 @@ import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.util.RedisUtil;
import cn.freemud.redis.RedisCache;
import com.freemud.application.sdk.api.ordercenter.enums.CashTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.enums.PayMethodEnum;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
......@@ -17,10 +22,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class MultiRefundService {
......@@ -109,6 +113,9 @@ public class MultiRefundService {
}
PayRefundResponse payRefundResponse = handlePayRefundResponse(refundStatus, req.getRefundTradeNo());
if (PayRefundStatus.SUCCESS.equals(refundStatus)) {
payRefundResponse.setPayRefundItemList(OrderCancelReqAdapter.convertMultiRefundItem(resp.getData().getRefundPlatformResponseList()));
}
if (StringUtils.isNotEmpty(message)) {
payRefundResponse.setMessage(message);
}
......@@ -122,6 +129,7 @@ public class MultiRefundService {
public PayRefundResponse agentPayRefund(String partnerId, String storeCode, String orderCode, BigDecimal refundAmount, String fmTradeNo) {
PayRefundStatus refundStatus = PayRefundStatus.SUCCESS;
String fmRefundNo = "";
List<PayRefundResponse.PayRefundItem> refundItems = new ArrayList<>();
try {
AgentPayRefundReq req = paymentSdkAdapter.getAgentPayRefundReq(partnerId, storeCode, orderCode, refundAmount, fmTradeNo);
AgentPayRefundResp resp = mulitiPaymentClient.agentPayRefund(req);
......@@ -132,11 +140,20 @@ public class MultiRefundService {
if (Objects.nonNull(data)) {
refundStatus = this.getFinalRefundStatus(data.getResultCode());
fmRefundNo = data.getFmRefundNo();
PayRefundResponse.PayRefundItem refundItem = new PayRefundResponse.PayRefundItem();
refundItem.setPayChannelType(Integer.valueOf(PayChannelType.getByEbcode(data.getEbcode()).getIndex()));
refundItem.setPayChannelName(PayChannelType.getByEbcode(data.getEbcode()).getName());
refundItem.setAmount(data.getRefundAmount());
refundItem.setRefundTradeNo(data.getRefundEndTransTradeNo());
refundItem.setRefundTime(DateUtil.convert2Date(data.getRefundTime(), "yyyy-MM-dd HH:mm:ss").getTime());
refundItems.add(refundItem);
}
} catch (Throwable e) {
refundStatus = PayRefundStatus.FAIL;
}
return this.handlePayRefundResponse(refundStatus, fmRefundNo);
PayRefundResponse payRefundResponse = this.handlePayRefundResponse(refundStatus, fmRefundNo);
payRefundResponse.setPayRefundItemList(refundItems);
return payRefundResponse;
}
......
package cn.freemud.management.service.handle;
import cn.freemud.base.util.DateUtil;
import cn.freemud.management.adapter.OrderCancelReqAdapter;
import cn.freemud.management.adapter.PaymentSdkAdapter;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
......@@ -17,7 +19,9 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.BaseResponse;
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.enums.CashTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.PayMethodEnum;
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;
......@@ -34,10 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
......@@ -195,26 +196,22 @@ public class PaymentHandle {
}
BaseResponse<OrderRefundResponse> orderRefundResponse = this.orderPayRefund(refundReq);
String message = null;
List<PayRefundResponse.PayRefundItem> refundItemList = new ArrayList<>();
if (orderRefundResponse == null) {
refundStatus = PayRefundStatus.RUNNING;
} else {
refundStatus = this.getFinalRefundStatus(Integer.valueOf(orderRefundResponse.getCode()));
message = orderRefundResponse.getMessage();
refundItemList.add(OrderCancelReqAdapter.convert(orderRefundResponse.getData()));
}
PayRefundResponse payRefundResponse = handlePayRefundResponse(refundStatus, refundReq.getRefundId());
payRefundResponse.setPayRefundItemList(refundItemList);
if (message != null) {
payRefundResponse.setMessage(message);
}
return payRefundResponse;
}
/**
* 代付订单退款
*
*/
private PayRefundStatus getFinalRefundStatus(Integer resultCode) {
return PayRefundStatus.getByPayResultCode(resultCode);
}
......@@ -411,18 +408,7 @@ public class PaymentHandle {
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);
return ResponseUtils.success(OrderCancelReqAdapter.convert(refundData));
}
}
return ResponseUtils.error(refundNewResponse.getCode(), refundNewResponse.getMessage());
......@@ -440,16 +426,4 @@ public class PaymentHandle {
return ResponseUtils.success();
}
}
private 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();
}
}
}
......@@ -2,6 +2,7 @@ package cn.freemud.management.service.handle;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.adapter.BaseQueryOrderRequestAdapter;
import cn.freemud.management.adapter.OrderCancelReqAdapter;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.AfterSalesApplyClientEnum;
......@@ -14,6 +15,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.RefundStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.AfterSalesRefundFailReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderModifyRelatingCodeReq;
import com.freemud.application.sdk.api.ordercenter.request.POSOrderOperationBaseReq;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
......@@ -28,12 +30,15 @@ import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.CancelOrderRequest;
import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
......@@ -203,6 +208,17 @@ public class SaasOrderHandle {
//作废订单
CancelOrderRequest cancelOrderRequest = orderSdkAdapter.getCancelOrderRequest(request.getOperator(), request.getReason(), refundResponse.getPayRefundStatus(), refundResponse.getRefundId(), orderBean);
cancelOrderRequest.setOperationClient(request.getOperationClient());
List<OrderCancelReq.PayRefundItem> refundItemList = new ArrayList<>();
if (!CollectionUtils.isEmpty(refundResponse.getPayRefundItemList())) {
refundResponse.getPayRefundItemList().forEach(item -> {
OrderCancelReq.PayRefundItem refundItem = new OrderCancelReq.PayRefundItem();
BeanUtils.copyProperties(item, refundItem);
refundItemList.add(refundItem);
});
}
cancelOrderRequest.setPayRefundItemList(refundItemList);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderReject(cancelOrderRequest);
if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
return ResponseUtil.error(ResponseResult.AFFIRM_ORDER_FAIL);
......@@ -243,6 +259,7 @@ public class SaasOrderHandle {
refundAgreeRequest.setOperationClient(request.getOperationClient());
BaseOrderResponse baseOrderResponse = null;
if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
refundAgreeRequest.setPayRefundItemList(OrderCancelReqAdapter.convert(refundResponse.getPayRefundItemList()));
// fisherman 判断是否在退款中, 如果是退款中 调用退货完成
if (orderBean.getAfterSalesOrderResp().getAfterSalesStatus().compareTo(AfterSalesRefunStateEnum.STATE_1.getIndex()) != 0) {
baseOrderResponse = orderCenterSdkService.orderRefundComplete(refundAgreeRequest);
......@@ -274,6 +291,7 @@ public class SaasOrderHandle {
refundAgreeRequest.setOperationClient(request.getOperationClient());
PayRefundStatus payRefundStatus = refundResponse.getPayRefundStatus();
if (payRefundStatus.getCode().equals(PayRefundStatus.SUCCESS.getCode())) {
refundAgreeRequest.setPayRefundItemList(OrderCancelReqAdapter.convert(refundResponse.getPayRefundItemList()));
// 退款成功 调用 -> /afterSales/v2/adultRefundComplete
orderCenterSdkService.orderRefundComplete(refundAgreeRequest);
} else {
......
package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.adapter.OrderCancelReqAdapter;
import cn.freemud.management.constant.ResponseCodeConstant;
import cn.freemud.management.entities.dto.request.console.*;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
......@@ -510,6 +511,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
}
refundResponse.setPayRefundStatus(payRefundStatus);
refundResponse.setRefundId(request.getRefundId());
refundResponse.setPayRefundItemList(OrderCancelReqAdapter.convert(request));
OrderManagerRequest omRequest = new OrderManagerRequest();
omRequest.setReason(reason);
......
package com.freemud.application.sdk.api.ordercenter.enums;
public enum CashTypeEnum {
HLM("50", "汇来米"),
SQB("51", "收钱吧"),
CASH("52", "现金");
private String code;
private String desc;
CashTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static CashTypeEnum getByCode(String code) {
if (code == null) {
return null;
}
for (CashTypeEnum cashTypeEnum : values()) {
if (cashTypeEnum.getCode().equals(code)) {
return cashTypeEnum;
}
}
return null;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
package com.freemud.application.sdk.api.ordercenter.enums;
public enum PayMethodEnum {
TZFB("TZFB", "支付宝", 2),
TYL("TYL", "银联", 13),
TWX("TWX", "微信", 1),
TSVC("TSVC", "储值卡", 3),
TOTHER("TOTHER", "其他支付", 10),
;
private String code;
private Integer index;
private String desc;
PayMethodEnum(String code, String desc, Integer index) {
this.code = code;
this.desc = desc;
this.index = index;
}
public static PayMethodEnum getByCode(String code) {
if (code == null) {
return null;
}
for (PayMethodEnum payStatus : values()) {
if (payStatus.getCode().equals(code)) {
return payStatus;
}
}
return null;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
}
......@@ -14,6 +14,8 @@ package com.freemud.application.sdk.api.ordercenter.request;
import lombok.Data;
import java.util.List;
@Data
public class AfterSalesOperateReq {
......@@ -55,4 +57,37 @@ public class AfterSalesOperateReq {
* 售后退款状态 0:未定义(存量数据) 1:未退款 2:退款中 3:退款失败 4:已退款
*/
private Integer refundState;
/**
* 对退款明细的记录
*/
private List<OrderCancelReq.PayRefundItem> payRefundItemList;
@Data
public static class PayRefundItem {
/**
* 退款支付渠道
*/
private Integer payChannelType;
/**
* 退款支付渠道名称
*/
private String payChannelName;
/**
* 退款金额
*/
private Integer amount;
/**
* 退款流水编号
*/
private String refundTradeNo;
/**
* 退款时间 单位毫秒
*/
private Long refundTime;
/**
* 退款储值卡卡号(退款渠道为储值卡时,则必须传递)
*/
private String cardCode;
}
}
......@@ -16,6 +16,7 @@ import com.freemud.application.sdk.api.ordercenter.request.create.OrderTaskReq;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class OrderCancelReq {
......@@ -97,4 +98,37 @@ public class OrderCancelReq {
* 是否部分退,默认否(全退)
*/
private Boolean isPartRefund = false;
/**
* 对退款明细的记录
*/
private List<PayRefundItem> payRefundItemList;
@Data
public static class PayRefundItem {
/**
* 退款支付渠道
*/
private Integer payChannelType;
/**
* 退款支付渠道名称
*/
private String payChannelName;
/**
* 退款金额
*/
private Integer amount;
/**
* 退款流水编号
*/
private String refundTradeNo;
/**
* 退款时间 单位毫秒
*/
private Long refundTime;
/**
* 退款储值卡卡号(退款渠道为储值卡时,则必须传递)
*/
private String cardCode;
}
}
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