Commit 1866e737 by 王世昌

批量退款

parent 70c5c72b
package com.freemud.sdk.api.assortment.order.request.order;
import lombok.Data;
import lombok.ToString;
import java.util.List;
@Data
public class BatchOrderRefundV2Request {
/**
* 退款订单列表信息
*/
private List<BatchOrderRefundItem> batchSubRefundRequest;
/**
* 退款回调地址
*/
private String notifyUrl;
/**
* 商户编号(由非码提供)
*/
private String partnerId;
/**
* 商家门店号(在线支付需要提前定义)
*/
private String storeId;
/**
* 商家POS机编号(可以使用固定值)
*/
private String stationId;
/**
* 接口版本,必须为2
*/
private String ver;
/**
* 退款订单信息
*/
@Data
public static class BatchOrderRefundItem {
/**
* 非码订单号
*/
private String fmId;
/**
* 外部交易流水号,由上游系统生成,需保证唯一(支付标识)
*/
private String frontTransId;
/**
* 退款金额
*/
private Long refundAmount;
}
}
...@@ -89,5 +89,9 @@ public class CancelOrderRequest extends BaseConfig { ...@@ -89,5 +89,9 @@ public class CancelOrderRequest extends BaseConfig {
* 微商城退款方式 * 微商城退款方式
*/ */
private Byte refundMode; private Byte refundMode;
/**
* 拼团订单批量退款批次号
*/
private Long batchRefundId;
} }
} }
...@@ -4166,4 +4166,25 @@ public class OrderAdapter { ...@@ -4166,4 +4166,25 @@ public class OrderAdapter {
} }
return payTurnoffRefund; return payTurnoffRefund;
} }
public BatchOrderRefundV2Request getBatchOrderRefundV2Request(List<QueryOrdersResponseDto.DataBean.OrderBean> orderBeans,String partnerId,String storeId) {
BatchOrderRefundV2Request orderPayRefundRequest = new BatchOrderRefundV2Request();
// 请自行过滤金额为0的订单
List<BatchOrderRefundV2Request.BatchOrderRefundItem> items = orderBeans.stream().map(orderBean ->{
BatchOrderRefundV2Request.BatchOrderRefundItem item = new BatchOrderRefundV2Request.BatchOrderRefundItem();
item.setFmId(orderBean.getPayVoucher());
// TODO 暂时不考虑第三方订单
item.setFrontTransId(orderBean.getOid());
item.setRefundAmount(orderBean.getAmount());
return item;
}).collect(Collectors.toList());
orderPayRefundRequest.setBatchSubRefundRequest(items);
orderPayRefundRequest.setPartnerId(partnerId);
orderPayRefundRequest.setStoreId(storeId);
orderPayRefundRequest.setVer("2");
orderPayRefundRequest.setStationId("001");
orderPayRefundRequest.setNotifyUrl(refundNotifyCallback);
return orderPayRefundRequest;
}
} }
package cn.freemud.entities.dto.promotion; package cn.freemud.entities.dto.promotion;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
/** /**
* @author wanghanghang * @author wanghanghang
......
package cn.freemud.entities.vo;
import lombok.Data;
/**
* 售后单拓展信息
*/
@Data
public class AfterSalesOrderExtInfoVo {
/**
* 微商城退款方式
*/
private Byte refundMode;
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: GetProductVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: liming.guo
* @date: 2018/5/16 17:35
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import cn.freemud.enums.RefundModeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
/**
* 拼团批量退款申请
*
* @author shichang.wang 2021/4/20
*/
@Data
public class SpellGroupBatchOrderRefundVo {
private String partnerId;
private String storeId;
/**
* 退款方式
*/
private Byte refundMode;
private String reason;
private String remarks;
}
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
*/ */
package cn.freemud.entities.vo; package cn.freemud.entities.vo;
import cn.freemud.enums.RefundReasonEnum;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -35,18 +36,20 @@ public class SpellGroupFailRefundVo { ...@@ -35,18 +36,20 @@ public class SpellGroupFailRefundVo {
/** /**
* 原因 * 取消原因
* {@link cn.freemud.enums.RefundReasonEnum#Other}
* {@link cn.freemud.enums.RefundReasonEnum#SPELL_GROUP_FAIL_TIME_OUT}
* {@link cn.freemud.enums.RefundReasonEnum#SPELL_GROUP_FAIL_SPONSOR_CANCEL}
*/ */
@ApiModelProperty("原因") @ApiModelProperty(value = "取消原因", notes = "取消原因"+ RefundReasonEnum.SPELL_GROUP_FAIL_API_DOC)
private String reason; private Integer reason;
/** /**
* 物流单号 * 订单号列表
*/ */
@NotEmpty(message = "订单号列表 不能为空") @NotEmpty(message = "订单号列表 不能为空")
@ApiModelProperty("订单号列表") @ApiModelProperty("订单号列表")
private List<String> orderCodeList; private List<String> orderCodeList;
} }
package cn.freemud.enums; package cn.freemud.enums;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
...@@ -21,6 +26,9 @@ public enum RefundReasonEnum { ...@@ -21,6 +26,9 @@ public enum RefundReasonEnum {
Misdelivery_Leakage_of_Goods(5, "商品送错送漏"), Misdelivery_Leakage_of_Goods(5, "商品送错送漏"),
Riders_confirm_service_ahead_of_schedule(6, "骑手提前点确认送达"), Riders_confirm_service_ahead_of_schedule(6, "骑手提前点确认送达"),
SPELL_GROUP_FAIL_TIME_OUT(10, "拼团超时取消"),
SPELL_GROUP_FAIL_SPONSOR_CANCEL(11, "团长取消"),
; ;
...@@ -47,4 +55,25 @@ public enum RefundReasonEnum { ...@@ -47,4 +55,25 @@ public enum RefundReasonEnum {
public void setDesc(String desc) { public void setDesc(String desc) {
this.desc = desc; this.desc = desc;
} }
public static final String SPELL_GROUP_FAIL_API_DOC = "微商城拼团失败原因 1:其他 10:拼团超时取消 11:团长取消";
private static class EnumCacheHolder {
private static final Map<Integer, RefundReasonEnum> CACHE;
private static final Map<Integer, RefundReasonEnum> SPELL_GROUP_FAIL_CACHE;
static {
CACHE = Arrays.stream(RefundReasonEnum.values()).collect(Collectors.toMap(RefundReasonEnum::getCode, v -> v));
SPELL_GROUP_FAIL_CACHE = Stream.of(Other,SPELL_GROUP_FAIL_TIME_OUT,SPELL_GROUP_FAIL_SPONSOR_CANCEL).collect(Collectors.toMap(RefundReasonEnum::getCode, v -> v));
}
}
public static RefundReasonEnum getByIndex(Integer index) {
return EnumCacheHolder.CACHE.get(index);
}
public static RefundReasonEnum getSpellGroupReasonByIndex(Integer index) {
return EnumCacheHolder.SPELL_GROUP_FAIL_CACHE.get(index);
}
} }
...@@ -840,23 +840,24 @@ public class MallOrderServiceImpl implements MallOrderService { ...@@ -840,23 +840,24 @@ public class MallOrderServiceImpl implements MallOrderService {
} }
// 是否为 退款退货方式 // 是否为 退款退货方式
AfterSalesOrderExtInfoVo afterSalesOrderExtInfoVo = getAfterSalesOrderExtInfoVo(afterSalesOrderResp); CancelOrderRequest.AfterSalesOrderExtInfoReq afterSalesOrderExtInfoVo = getAfterSalesOrderExtInfoVo(afterSalesOrderResp);
log.debug("售后单信息方式为:{}", afterSalesOrderResp); log.debug("售后单信息方式为:{}", afterSalesOrderResp);
if (Objects.isNull(afterSalesOrderExtInfoVo) || !Objects.equals(RefundModeEnum.REFUND_ALL.getIndex(), afterSalesOrderExtInfoVo.getRefundMode())) { if (Objects.isNull(afterSalesOrderExtInfoVo) || !Objects.equals(RefundModeEnum.REFUND_ALL.getIndex(), afterSalesOrderExtInfoVo.getRefundMode())) {
return ResponseUtil.error(ResponseResult.ORDER_REFUND_EXPRESS_ERROR.getCode(), "当前退款方式无需填写"); return ResponseUtil.error(ResponseResult.ORDER_REFUND_EXPRESS_ERROR.getCode(), "当前退款方式无需填写");
} }
return ResponseUtil.success(); return ResponseUtil.success();
} }
private AfterSalesOrderExtInfoVo getAfterSalesOrderExtInfoVo(AfterSalesOrderResp afterSalesOrderResp) { private CancelOrderRequest.AfterSalesOrderExtInfoReq getAfterSalesOrderExtInfoVo(AfterSalesOrderResp afterSalesOrderResp) {
if (afterSalesOrderResp == null) { if (afterSalesOrderResp == null) {
return null; return null;
} }
AfterSalesOrderExtInfoVo afterSalesOrderExtInfoVo = null; CancelOrderRequest.AfterSalesOrderExtInfoReq afterSalesOrderExtInfoVo = null;
try { try {
afterSalesOrderExtInfoVo = JSON.parseObject(afterSalesOrderResp.getExtInfo(), new com.alibaba.fastjson.TypeReference<AfterSalesOrderExtInfoVo>() { afterSalesOrderExtInfoVo = JSON.parseObject(afterSalesOrderResp.getExtInfo(), new com.alibaba.fastjson.TypeReference< CancelOrderRequest.AfterSalesOrderExtInfoReq>() {
}.getType()); }.getType());
} catch (Exception e) { } catch (Exception e) {
log.error("解析售后单 extInfo 失败"); log.error("解析售后单 extInfo 失败");
......
...@@ -2,6 +2,8 @@ package cn.freemud.service.thirdparty; ...@@ -2,6 +2,8 @@ package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.order.FacePayRequestDto; import cn.freemud.entities.dto.order.FacePayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto; import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import com.freemud.sdk.api.assortment.order.request.order.BatchOrderRefundV2Request;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -29,4 +31,10 @@ public interface PaymentNewClient { ...@@ -29,4 +31,10 @@ public interface PaymentNewClient {
@PostMapping("paymentcenter/facePay") @PostMapping("paymentcenter/facePay")
com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> facePay(@RequestBody FacePayRequestDto orderPayDto); com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> facePay(@RequestBody FacePayRequestDto orderPayDto);
/**
* 批量支付退款
*/
@PostMapping("/payment/application/batch/refund")
PayBatchRefundResponse batchRefund(BatchOrderRefundV2Request batchOrderRefundV2Request);
} }
package cn.freemud.management.entities.dto.response.pay;
import lombok.Data;
/**
* 批量退款
* @author shichang.wang 2021/4/20
*/
@Data
public class PayBatchRefundResponse {
private int code;
private BatchRefundBatchIdData data;
private String msg;
@Data
public static class BatchRefundBatchIdData {
/**
* 退款批次号
*/
private Long batchId;
}
}
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