Commit a3f4deb6 by 周晓航

Merge branch 'feature/xukang_20211201_虚拟订单退款' into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/controller/OrderController.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
parents 1b656eed c901851a
...@@ -91,4 +91,10 @@ public class OrderRefundConfigEntity { ...@@ -91,4 +91,10 @@ public class OrderRefundConfigEntity {
* 1-允许 * 1-允许
*/ */
private String cashierOrderRefund; private String cashierOrderRefund;
/**
* 卖券订单是否可以申请退款
* null <=0 都不可以申请退款
*/
private Integer couponOrderRefundDayLimit;
} }
...@@ -5,7 +5,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderModifyRelatingCo ...@@ -5,7 +5,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderModifyRelatingCo
import com.freemud.application.sdk.api.ordercenter.request.QueryAfterSalesOrderConditionsReq; import com.freemud.application.sdk.api.ordercenter.request.QueryAfterSalesOrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.QueryLineUpOrderReq; import com.freemud.application.sdk.api.ordercenter.request.QueryLineUpOrderReq;
import com.freemud.application.sdk.api.ordercenter.response.AfterSalesListResp; import com.freemud.application.sdk.api.ordercenter.response.AfterSalesListResp;
//import com.freemud.application.sdk.api.ordercenter.response.OrderStateInfoResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse;
import com.freemud.sdk.api.assortment.order.request.order.*; import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.*; import com.freemud.sdk.api.assortment.order.response.order.*;
...@@ -420,4 +420,11 @@ public interface OrderCenterSdkService { ...@@ -420,4 +420,11 @@ public interface OrderCenterSdkService {
* 小助手日结统计订单信息查询(分页,从库查询) * 小助手日结统计订单信息查询(分页,从库查询)
*/ */
QueryOrdersResponse getOrderListByDb(QueryOrdersByConditionsRequest queryOrdersByConditionsRequest); QueryOrdersResponse getOrderListByDb(QueryOrdersByConditionsRequest queryOrdersByConditionsRequest);
/**
* 查询订单信息 基于基础服务
* @param baseQueryOrderRequest
* @return
*/
QueryByCodeResponse queryOrderByIdV2(BaseQueryOrderRequest baseQueryOrderRequest);
} }
...@@ -2358,4 +2358,16 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService { ...@@ -2358,4 +2358,16 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
return orderSdkAdapter.convent2OrdersResponseByES(baseDownLoadResponse); return orderSdkAdapter.convent2OrdersResponseByES(baseDownLoadResponse);
} }
/**
* 查询订单信息 基于基础服务
* @param request
* @return
*/
@Override
public QueryByCodeResponse queryOrderByIdV2(BaseQueryOrderRequest request) {
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(request.getOrderClient(), request.getOrderId(),
request.getThirdOrderCode(), request.getWithOperationHistory(), request.getTrackingNo());
return orderInfo;
}
} }
...@@ -897,6 +897,7 @@ public class OrderAdapter { ...@@ -897,6 +897,7 @@ public class OrderAdapter {
responseVo.setMcCafeOrderTag(maCafePickTag); responseVo.setMcCafeOrderTag(maCafePickTag);
} }
responseVo.setTableNumber(ordersBean.getBarCounter()); responseVo.setTableNumber(ordersBean.getBarCounter());
// fisherman 支付状态描述
responseVo.setPayStatus(ordersBean.getPayStatus()); responseVo.setPayStatus(ordersBean.getPayStatus());
responseVo.setPayStatusDesc(Optional.ofNullable(PayStatus.getByCode(ordersBean.getPayStatus())) responseVo.setPayStatusDesc(Optional.ofNullable(PayStatus.getByCode(ordersBean.getPayStatus()))
.map(PayStatus::getDesc).orElse("")); .map(PayStatus::getDesc).orElse(""));
...@@ -1145,10 +1146,6 @@ public class OrderAdapter { ...@@ -1145,10 +1146,6 @@ public class OrderAdapter {
responseVo.setEnableRefund(true); responseVo.setEnableRefund(true);
} }
responseVo.setBizType(ordersBean.getBizType()); responseVo.setBizType(ordersBean.getBizType());
//6:卖券虚拟商品 暂不能申请退款
if (ordersBean.getBizType() == 6) {
responseVo.setButtonRefund(false);
}
List<Integer> enableRefundCodes = Lists.newArrayList(Arrays.asList( List<Integer> enableRefundCodes = Lists.newArrayList(Arrays.asList(
OrderStatus.RECEIPT.getCode(), OrderStatus.COMPLETE_MAKE.getCode())); OrderStatus.RECEIPT.getCode(), OrderStatus.COMPLETE_MAKE.getCode()));
if (enableRefundCodes.contains(ordersBean.getStatus()) && PayStatus.HAVE_PAID.getCode().equals(ordersBean.getPayStatus())) { if (enableRefundCodes.contains(ordersBean.getStatus()) && PayStatus.HAVE_PAID.getCode().equals(ordersBean.getPayStatus())) {
...@@ -1751,6 +1748,7 @@ public class OrderAdapter { ...@@ -1751,6 +1748,7 @@ public class OrderAdapter {
/** /**
* 是否支持退款 * 是否支持退款
* fisherman 虚拟券是否可退款 在这里进行操作判断 【ID1039143】 1.已完成状态,2.配置的属性值>0&&时间范围内
* *
* @param orderBean 订单详情 * @param orderBean 订单详情
* @param wxAppId wxappId * @param wxAppId wxappId
...@@ -1782,6 +1780,11 @@ public class OrderAdapter { ...@@ -1782,6 +1780,11 @@ public class OrderAdapter {
} }
} }
} }
// fisherman 虚拟券商品是否可退款配置校验
if (orderBean.getBizType().compareTo(BizTypeEnum.SALE_COUPON.getBizType()) == 0) {
return this.checkRefundButtionBizTypeIs6(orderBean.getCompanyId(), orderBean.getBizType(),
orderBean.getStatus(),wxAppId, new Date(orderBean.getGmtCreate()));
}
boolean canRefund = false; boolean canRefund = false;
// 查询小程序配置的退款设置 // 查询小程序配置的退款设置
...@@ -1855,6 +1858,38 @@ public class OrderAdapter { ...@@ -1855,6 +1858,38 @@ public class OrderAdapter {
} }
/** /**
* 校验是否配置了 虚拟券 bizTYpe=6 可以退款
*
* @param partnerId
* @param bizType
* @param orderState
* @param wxAppId
* @param createTime
* @return
*/
public boolean checkRefundButtionBizTypeIs6(String partnerId, Integer bizType, Integer orderState, String wxAppId, Date createTime) {
if (bizType.compareTo(BizTypeEnum.SALE_COUPON.getBizType()) != 0 || orderState.compareTo(OrderStatusV1.COMPLETE.getV1Code()) != 0) {
return false;
}
String redisKey = MessageFormat.format(OrderRedisKeyConstant.ORDER_REFUND_CONFIG, partnerId, wxAppId);
String hashKey = OrderRedisKeyConstant.HashKeyForOrderRefundConfig.EAT_IN;
String configStr = redisCache.hashGet(redisKey, hashKey);
if (StringUtils.isNotEmpty(configStr)) {
OrderRefundConfigEntity config = JSON.parseObject(configStr, OrderRefundConfigEntity.class);
Integer couponOrderRefundDayLimit = config.getCouponOrderRefundDayLimit();
// 必须配置了, 而且创建时间 不大于 这个时间
if (couponOrderRefundDayLimit != null && couponOrderRefundDayLimit.compareTo(0) > 0) {
Date date = DateUtil.addDays(createTime, couponOrderRefundDayLimit);
// 当前时间在 配置时间前面 才可以申请退款
if (new Date().before(date)) {
return true;
}
}
}
return false;
}
/**
* 预约时间 * 预约时间
* @param gmtExpect * @param gmtExpect
* @return true 可退 false不可操作 * @return true 可退 false不可操作
......
...@@ -20,14 +20,8 @@ import cn.freemud.entities.dto.order.OrderInvoiceConfigVo; ...@@ -20,14 +20,8 @@ import cn.freemud.entities.dto.order.OrderInvoiceConfigVo;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; 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.CreateCashierOrderVo; import cn.freemud.entities.vo.order.*;
import cn.freemud.entities.vo.order.CreateOrderInvoiceRequest;
import cn.freemud.entities.vo.order.GetInvoiceConfigRequest;
import cn.freemud.entities.vo.order.PaymentConfigVo;
import cn.freemud.entities.vo.order.OrderAppealVo;
import cn.freemud.handler.OrderReportJobHandler; import cn.freemud.handler.OrderReportJobHandler;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.monitorcenter.tools.HealthUtil;
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;
...@@ -38,12 +32,6 @@ import cn.freemud.utils.ResponseUtil; ...@@ -38,12 +32,6 @@ import cn.freemud.utils.ResponseUtil;
import cn.freemud.xxljob.OrderCountJobHandler; import cn.freemud.xxljob.OrderCountJobHandler;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams; import com.freemud.application.sdk.api.log.LogParams;
import com.freemud.thirdparty.wechat.WeChatClient;
import com.freemud.thirdparty.wechat.constant.WeChatConstant;
import com.freemud.thirdparty.wechat.entities.WeChatBaseResponse;
import com.freemud.thirdparty.wechat.entities.vo.NullFieldVo;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderDeliverySendRequestVO;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderSycnPayRequestVO;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -253,6 +241,7 @@ public class OrderController { ...@@ -253,6 +241,7 @@ public class OrderController {
return orderservice.orderRefund(orderRefundVo); return orderservice.orderRefund(orderRefundVo);
} }
/** /**
* 获取订单排队号 * 获取订单排队号
*/ */
...@@ -510,5 +499,15 @@ public class OrderController { ...@@ -510,5 +499,15 @@ public class OrderController {
return orderAdapterService.getPaymentConfig(createOrderVo); return orderAdapterService.getPaymentConfig(createOrderVo);
} }
/**
* 卖券订单申请退款
*/
@ApiAnnotation(logMessage = "couponOrderRefund")
@PostMapping("/couponOrderRefund")
public BaseResponse couponOrderRefund(@Validated @LogParams @RequestBody OrderRefundVo orderRefundVo) {
return orderservice.couponOrderRefund(orderRefundVo);
}
} }
package cn.freemud.entities.dto.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/3 下午4:14
* @description :
*/
@Data
public class CheckAndCancelRequest {
@ApiModelProperty(value = "商户号", required = true)
private Integer partnerId;
@ApiModelProperty(value = "会员id", required = true)
private String memberId;
@ApiModelProperty(value = "券号列表", required = true)
private List<String> couponCodeList;
@ApiModelProperty(value = "作废原因", required = true)
private String cancelReason = "用户申请退款,订单作废券请求";
}
package cn.freemud.entities.dto.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/3 下午4:15
* @description :
*/
@Data
public class CheckAndCancelResponseDTO {
public static int SUCCESS = 1;
public static int PROTION_FAIL = 2;
public static int FAIL = 3;
@ApiModelProperty(value = "作废结果,1:已全部作废,2:部分作废失败,3:不可作废", required = true)
private Integer resultCode;
@ApiModelProperty(value = "作废结果说明,如resultCode为3时,代表不可作废的原因(如:xx券已核销)", required = true)
private String memo;
@ApiModelProperty(value = "每个券对应的处理结果", required = true)
private List<CouponCancelMsg> resultList;
}
package cn.freemud.entities.dto.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/3 下午4:17
* @description :
*/
@Data
public class CouponCancelMsg {
@ApiModelProperty(value = "券号", required = true)
private String code;
@ApiModelProperty(value = "券名称", required = true)
private String name;
@ApiModelProperty(value = "作废结果,0:未处理,1:已作废,2:不可作废,3:作废失败,4:券不存在", required = true)
private Integer result;
@ApiModelProperty(value = "作废结果result对应的说明文字", required = true)
private String memo;
}
package cn.freemud.entities.dto.order;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/3 上午10:36
* @description :
*/
@Data
@Builder
@AllArgsConstructor
public class RefundFailureRequestDTO {
/**
* 0:其他
*/
public static int FAILURETYPE_OTHER = 0;
/**
* 1:账户无余额
*/
public static int FAILURETYPE_NOT_SUFFICIENT_FUNDS = 1;
/**
* 2:系统异常
*/
public static int FAILURETYPE_SYSTEM_ERROR = 2;
/**
*
*/
private String orderCode;
/**
* 失败类型 0:其他 1:账户无余额2:系统异常
*/
private int failureType;
/**
* 失败原因
*/
private String reason;
/**
*
*/
private String partnerId;
/**
*
*/
private String operator;
private int ver = 0;
}
package cn.freemud.entities.dto.user;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/6 上午11:36
* @description :
*/
@Data
public class UserBaseResponsDTO<T> {
private String code;
private String message;
private T data;
}
package cn.freemud.entities.dto.user;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/6 上午11:35
* @description :
*/
@Data
public class UserCouponCheckRequest {
@ApiModelProperty(value = "商户号", required = true)
private String partnerId;
@ApiModelProperty(value = "会员id", required = true)
private String memberId;
@ApiModelProperty(value = "券号列表", required = true)
private List<String> couponCodes;
}
...@@ -18,6 +18,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -18,6 +18,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotBlank;
/** /**
* 用户退款申请 * 用户退款申请
* *
...@@ -28,10 +30,10 @@ import org.hibernate.validator.constraints.NotEmpty; ...@@ -28,10 +30,10 @@ import org.hibernate.validator.constraints.NotEmpty;
@Data @Data
public class OrderRefundVo { public class OrderRefundVo {
@NotEmpty(message = "sessionId 不能为空") @NotBlank(message = "sessionId 不能为空")
private String sessionId; private String sessionId;
@NotEmpty(message = "订单编号不能为空") @NotBlank(message = "订单编号不能为空")
private String oid; private String oid;
private String reason; private String reason;
......
...@@ -12,6 +12,19 @@ ...@@ -12,6 +12,19 @@
*/ */
package cn.freemud.enums; package cn.freemud.enums;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
/**
* @warning !!!
* 这里的订单状态依据的是 老订单的转换操作, 基础服务给出的订单状态如下:
* 1待支付
* 2下单
* 3已接单
* 4制作完成 5配送中 4/5的状态根据订单类型(自提/外卖)二选一不会同时出现
* 6已完成
* 7已关闭(退款完成)
* @see OrderStatusV1
*/
public enum OrderStatus { public enum OrderStatus {
TAKE_ORDER(1, "下单","place an order"), TAKE_ORDER(1, "下单","place an order"),
......
...@@ -12,19 +12,31 @@ ...@@ -12,19 +12,31 @@
*/ */
package cn.freemud.enums; package cn.freemud.enums;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* 基础服务订单类型如下:
* 1=常规堂食,
* 2=预约堂食,
* 3=常规外送,
* 4=预约外送,
* 5=常规自取,
* 6=预约自取
*
* @see OrderSdkAdapter#getOldOrderType(java.lang.Integer)
* 该类为老订单类型:
*/
public enum OrderType { public enum OrderType {
TAKE_OUT(1, "外卖","takeOut"), TAKE_OUT(1, "外卖", "takeOut"),
PRE_ORDER(2, "预订单","preOrder"), PRE_ORDER(2, "预订单", "preOrder"),
MALL(3, "商城","mall"), MALL(3, "商城", "mall"),
COLLECT_GOODS(4, "打包带走","collectGoods"), COLLECT_GOODS(4, "打包带走", "collectGoods"),
EAT_IN(5, "店内就餐","eatIn") EAT_IN(5, "店内就餐", "eatIn");
;
private Integer code; private Integer code;
private String desc; private String desc;
...@@ -33,7 +45,7 @@ public enum OrderType { ...@@ -33,7 +45,7 @@ public enum OrderType {
*/ */
private String tackDesc; private String tackDesc;
OrderType(Integer code, String desc,String tackDesc) { OrderType(Integer code, String desc, String tackDesc) {
this.code = code; this.code = code;
this.desc = desc; this.desc = desc;
this.tackDesc = tackDesc; this.tackDesc = tackDesc;
...@@ -66,7 +78,7 @@ public enum OrderType { ...@@ -66,7 +78,7 @@ public enum OrderType {
return returnList; return returnList;
} }
for (OrderType orderType : values()) { for (OrderType orderType : values()) {
for (Integer code: list) { for (Integer code : list) {
if (orderType.getCode().equals(code)) { if (orderType.getCode().equals(code)) {
returnList.add(code); returnList.add(code);
} }
......
...@@ -192,6 +192,7 @@ public enum ResponseResult { ...@@ -192,6 +192,7 @@ public enum ResponseResult {
ORDER_INVOICE_IS_OPENED("45083", "存在选中的订单已开过发票,请重新选择订单",""), ORDER_INVOICE_IS_OPENED("45083", "存在选中的订单已开过发票,请重新选择订单",""),
ORDER_CODES_REPEAT("45084", "同一次开票,选中的订单不能重复,请重新选择订单",""), ORDER_CODES_REPEAT("45084", "同一次开票,选中的订单不能重复,请重新选择订单",""),
ORDER_INVOICE_CONFIG_IS_NULL("45085", "发票配置信息为空,不可开票",""), ORDER_INVOICE_CONFIG_IS_NULL("45085", "发票配置信息为空,不可开票",""),
ORDER_BIZ_TYPE_ERROR("45086", "订单业务类型异常",""),
/** /**
* 售后单 * 售后单
......
...@@ -84,6 +84,7 @@ public interface Orderservice extends OrderFactoryService{ ...@@ -84,6 +84,7 @@ public interface Orderservice extends OrderFactoryService{
*/ */
BaseResponse orderRefund(OrderRefundVo orderRefundVo); BaseResponse orderRefund(OrderRefundVo orderRefundVo);
/** /**
* 获取订单排队号 * 获取订单排队号
*/ */
...@@ -204,4 +205,10 @@ public interface Orderservice extends OrderFactoryService{ ...@@ -204,4 +205,10 @@ public interface Orderservice extends OrderFactoryService{
BaseResponse<OrderInvoiceConfigVo> queryInvoiceConfig(GetInvoiceConfigRequest request); BaseResponse<OrderInvoiceConfigVo> queryInvoiceConfig(GetInvoiceConfigRequest request);
/**
* 卖券订单 申请退款
* @param orderRefundVo
* @return
*/
BaseResponse couponOrderRefund(OrderRefundVo orderRefundVo);
} }
...@@ -24,6 +24,9 @@ import cn.freemud.entities.dto.*; ...@@ -24,6 +24,9 @@ import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto; import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseObj; import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseObj;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto; import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.coupon.CheckAndCancelRequest;
import cn.freemud.entities.dto.coupon.CheckAndCancelResponseDTO;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
import cn.freemud.entities.dto.delivery.*; import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.SendMessageRequest; import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest; import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest;
...@@ -41,6 +44,8 @@ import cn.freemud.entities.dto.store.GetStoreListbyCodesRequest; ...@@ -41,6 +44,8 @@ import cn.freemud.entities.dto.store.GetStoreListbyCodesRequest;
import cn.freemud.entities.dto.store.StoreBaseResponseDto; import cn.freemud.entities.dto.store.StoreBaseResponseDto;
import cn.freemud.entities.dto.store.StoreListResponse; import cn.freemud.entities.dto.store.StoreListResponse;
import cn.freemud.entities.dto.store.StoreMixResponseDto; import cn.freemud.entities.dto.store.StoreMixResponseDto;
import cn.freemud.entities.dto.user.UserBaseResponsDTO;
import cn.freemud.entities.dto.user.UserCouponCheckRequest;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.*; import cn.freemud.entities.vo.order.*;
import cn.freemud.enums.OrderType; import cn.freemud.enums.OrderType;
...@@ -52,6 +57,7 @@ import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto; ...@@ -52,6 +57,7 @@ import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundResponse; import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundResponse;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse; import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import cn.freemud.management.enums.SettlementTypeEnum;
import cn.freemud.management.service.handle.ActivityHandle; import cn.freemud.management.service.handle.ActivityHandle;
import cn.freemud.manager.OrderManager; import cn.freemud.manager.OrderManager;
import cn.freemud.manager.OrderTackCodeManager; import cn.freemud.manager.OrderTackCodeManager;
...@@ -86,6 +92,7 @@ import com.freemud.application.sdk.api.ordercenter.common.OrderAndShoppingCommon ...@@ -86,6 +92,7 @@ import com.freemud.application.sdk.api.ordercenter.common.OrderAndShoppingCommon
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.entities.v1.RefundBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.RefundBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.*; import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.*; import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq; import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse; import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
...@@ -271,6 +278,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -271,6 +278,10 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private StoreClient storeClient; private StoreClient storeClient;
@Autowired
private CouponOnlineClient couponOnlineClient;
@Autowired
private CustomerExtendClient customerExtendClient;
// @Override // @Override
// public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) { // public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
// String trackingNo = LogThreadLocal.getTrackingNo(); // String trackingNo = LogThreadLocal.getTrackingNo();
...@@ -321,7 +332,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -321,7 +332,7 @@ public class OrderServiceImpl implements Orderservice {
public BaseResponse createOrder(CreateOrderBONew createOrderBO) { public BaseResponse createOrder(CreateOrderBONew createOrderBO) {
//创建订单前参数校验与数据获取 //创建订单前参数校验与数据获取
BaseResponse checkResponse = checkOrder.checkCreateOrderInfo(createOrderBO); BaseResponse checkResponse = checkOrder.checkCreateOrderInfo(createOrderBO);
if (checkResponse != null && !ResponseResult.SUCCESS.getCode().equals(checkResponse.getCode()) ) { if (checkResponse != null && !ResponseResult.SUCCESS.getCode().equals(checkResponse.getCode())) {
return checkResponse; return checkResponse;
} }
//创建订单调用集成,不区分订单类型 //创建订单调用集成,不区分订单类型
...@@ -400,7 +411,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -400,7 +411,8 @@ public class OrderServiceImpl implements Orderservice {
orderCenterSdkService.orderEdit(editReq); orderCenterSdkService.orderEdit(editReq);
} }
} }
} catch (Exception ignored) {} //这个异常catch住,不影响业务流程 } catch (Exception ignored) {
} //这个异常catch住,不影响业务流程
String takeCode; String takeCode;
String daySeq; String daySeq;
...@@ -1814,7 +1826,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1814,7 +1826,7 @@ public class OrderServiceImpl implements Orderservice {
// TODO: 2019/9/10 删除订单通知 // TODO: 2019/9/10 删除订单通知
orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus()); orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus());
weChatLiveMsgHandle.reportOrderStatus(orderBean,3); weChatLiveMsgHandle.reportOrderStatus(orderBean, 3);
return ResponseUtil.success(); return ResponseUtil.success();
} }
...@@ -2527,14 +2539,14 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2527,14 +2539,14 @@ public class OrderServiceImpl implements Orderservice {
baseCreateOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo()); baseCreateOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
CreateOrderRequest createOrderRequest = new CreateOrderRequest(); CreateOrderRequest createOrderRequest = new CreateOrderRequest();
createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest); createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest);
createOrderRequest.setOpenId( userLoginInfoDto.getOpenId()); createOrderRequest.setOpenId(userLoginInfoDto.getOpenId());
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo()); createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
CreateOrderResponse createOrderFlowResponse = orderBusinessService.createOrderFlow(createOrderRequest); CreateOrderResponse createOrderFlowResponse = orderBusinessService.createOrderFlow(createOrderRequest);
if (ObjectUtils.notEqual(Integer.valueOf(ResponseResult.SUCCESS.getCode()), createOrderFlowResponse.getErrcode())) { if (ObjectUtils.notEqual(Integer.valueOf(ResponseResult.SUCCESS.getCode()), createOrderFlowResponse.getErrcode())) {
return ResponseUtil.error(createOrderFlowResponse.getErrcode().toString(), createOrderFlowResponse.getErrmsg()); return ResponseUtil.error(createOrderFlowResponse.getErrcode().toString(), createOrderFlowResponse.getErrmsg());
} }
OrderBeanV1 fatherBeanListOne = createOrderFlowResponse.getData(); OrderBeanV1 fatherBeanListOne = createOrderFlowResponse.getData();
OrderBeanV1 productBeanListOne = createOrderFlowResponse.getData(); OrderBeanV1 productBeanListOne = createOrderFlowResponse.getData();
long totalAmount = createOrderFlowResponse.getData().getAmount(); long totalAmount = createOrderFlowResponse.getData().getAmount();
...@@ -2576,7 +2588,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2576,7 +2588,7 @@ public class OrderServiceImpl implements Orderservice {
} }
public OrderExtInfoDto setOrderExtInfo(AssortmentCustomerInfoVo userLoginInfoDto, StoreResponseDto storeResponseDto, public OrderExtInfoDto setOrderExtInfo(AssortmentCustomerInfoVo userLoginInfoDto, StoreResponseDto storeResponseDto,
Integer pushOrderTime, CreateOrderVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto) { Integer pushOrderTime, CreateOrderVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
Integer serviceTime = storeResponseDto.getServiceTime(); Integer serviceTime = storeResponseDto.getServiceTime();
String sessionId = createOrderVo.getSessionId(); String sessionId = createOrderVo.getSessionId();
...@@ -3314,7 +3326,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3314,7 +3326,7 @@ public class OrderServiceImpl implements Orderservice {
} }
@Override @Override
public BaseResponse<OrderInvoiceConfigVo> queryInvoiceConfig(GetInvoiceConfigRequest request){ public BaseResponse<OrderInvoiceConfigVo> queryInvoiceConfig(GetInvoiceConfigRequest request) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(request.getSessionId()); AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(request.getSessionId());
if (userLoginInfoDto == null || StringUtils.isEmpty(userLoginInfoDto.getMemberId())) { if (userLoginInfoDto == null || StringUtils.isEmpty(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
...@@ -3336,6 +3348,276 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3336,6 +3348,276 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(configVo); return ResponseUtil.success(configVo);
} }
@Override
public BaseResponse couponOrderRefund(OrderRefundVo orderRefundVo) {
if (StringUtils.isEmpty(orderRefundVo.getReason())) {
orderRefundVo.setReason("退款");
}
// 校验用户是否登录
BaseResponse<AssortmentCustomerInfoVo> baseResponse = this.checkUserLoginInfoDto(orderRefundVo.getSessionId());
if (!Objects.equals(baseResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return baseResponse;
}
AssortmentCustomerInfoVo userLoginInfoDto = baseResponse.getResult();
// 查询订单
BaseResponse<OrderBeanV1> orderResponse = this.checkOrderAndGetOrderBean(orderRefundVo.getOid());
if (!Objects.equals(orderResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return orderResponse;
}
OrderBeanV1 orderBean = orderResponse.getResult();
// 校验操作
BaseResponse checkResult = this.couponOrderRefundCheck(userLoginInfoDto, orderBean);
if (!Objects.equals(checkResult.getCode(), ResponseResult.SUCCESS.getCode())) {
return checkResult;
}
// fisherman 调用会员获取券的有效性,是否有转赠状态
checkResult = this.customerExtendHandle(orderBean);
if (!Objects.equals(checkResult.getCode(), ResponseResult.SUCCESS.getCode())) {
return checkResult;
}
// fisherman 券作废
checkResult = this.couponOnLineHandle(orderBean);
if (!Objects.equals(checkResult.getCode(), ResponseResult.SUCCESS.getCode())) {
return checkResult;
}
// 走正常退款订单逻辑 这里是否可以丢MQ 异步操作
try {
this.doCouponOrderRefund(orderBean, orderRefundVo);
}catch (Exception e){
RefundFailureRequestDTO requestDTO = RefundFailureRequestDTO.builder().orderCode(orderBean.getOid())
.failureType(RefundFailureRequestDTO.FAILURETYPE_SYSTEM_ERROR)
.reason(JSON.toJSONString(e.getMessage()))
.partnerId(orderBean.getCompanyId())
.operator("")
.ver(0).build();
orderServiceClient.refundFailures(requestDTO);
}
return ResponseUtil.success();
}
/**
*
* @param orderBean
* @return
*/
private BaseResponse customerExtendHandle(OrderBeanV1 orderBean) {
BaseResponse<List<String>> baseResponse = this.couponOrderCommomCheck(orderBean);
if (baseResponse.getCode().compareTo(ResponseResult.SUCCESS.getCode()) != 0) {
return baseResponse;
}
// 获取优惠券
List<String> couponCodeList = baseResponse.getResult();
UserCouponCheckRequest request = new UserCouponCheckRequest();
request.setPartnerId(orderBean.getCompanyId());
request.setMemberId(orderBean.getUserId());
request.setCouponCodes(couponCodeList);
UserBaseResponsDTO<List<String>> responsDTO = customerExtendClient.getMemberCouponCodes(request);
if (responsDTO == null || !Objects.equals(responsDTO.getCode(), ResponseResult.SUCCESS.getCode())) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT, "会员服务调用失败");
}
List<String> responsDTOData = responsDTO.getData();
if (CollectionUtils.isEmpty(responsDTOData) || !responsDTOData.retainAll(couponCodeList)) {
// fisherman 文案让产品提供
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT, "用户优惠券发生变动,无法退款");
}
return ResponseUtil.success();
}
/**
* 调用券码作废操作
* @param orderBean
* @return
*/
private BaseResponse couponOnLineHandle(OrderBeanV1 orderBean) {
if (orderBean.getBizType().compareTo(BizTypeEnum.SALE_COUPON.getBizType()) != 0) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT);
}
BaseResponse<List<String>> baseResponse = this.couponOrderCommomCheck(orderBean);
if (baseResponse.getCode().compareTo(ResponseResult.SUCCESS.getCode()) != 0) {
return baseResponse;
}
// 获取优惠券
List<String> couponCodeList = baseResponse.getResult();
CheckAndCancelRequest request = new CheckAndCancelRequest();
request.setPartnerId(Integer.parseInt(orderBean.getCompanyId()));
request.setMemberId(orderBean.getUserId());
request.setCouponCodeList(couponCodeList);
CouponResponseDTO<CheckAndCancelResponseDTO> responseDTO = couponOnlineClient.checkandcancel(request);
if (responseDTO == null
|| !Objects.equals(responseDTO.getStatusCode(),100)) {
// 直接接口调用失败,
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "操作失败,请稍后重试");
}
CheckAndCancelResponseDTO result = responseDTO.getResult();
// 作废成功
if (result.getResultCode().compareTo(CheckAndCancelResponseDTO.SUCCESS) == 0) {
return ResponseUtil.success();
}
String memo = result.getMemo();
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), memo);
}
private BaseResponse<List<String>> couponOrderCommomCheck(OrderBeanV1 orderBean) {
List<OrderSettlementResp> orderSettlementDetailList = orderBean.getOrderSettlementDetailList();
if (CollectionUtils.isEmpty(orderSettlementDetailList)) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "没有优惠券信息");
}
// 获取优惠券
List<String> couponCodeList = orderSettlementDetailList.stream()
.filter(s -> s.getSettlementType().compareTo(SettlementTypeEnum.SEND_COUPON.getSettlementType()) == 0)
.map(OrderSettlementResp::getExternalObjectId).collect(Collectors.toList());
// fisherman 核销券失败的逻辑处理
if (CollectionUtils.isEmpty(couponCodeList)) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "没有优惠券信息");
}
return ResponseUtil.success(couponCodeList);
}
/**
* 订单退款操作
* 1.调用支付 进行退款
* 2.调用基础服务, 进行订单状态变更
*
* @param orderBean
* @return
*/
private void doCouponOrderRefund(OrderBeanV1 orderBean, OrderRefundVo orderRefundVo) {
// 支付金额 大于0 调用支付 进行退款
Long refundId = System.currentTimeMillis();
int state = PayRefundStatus.SUCCESS.getCode();
if (orderBean.getActualPayAmount().compareTo(0L) > 0) {
//调用支付退款
com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, orderRefundVo.getOid());
//抖音支付退款必传
orderPayRefundRequest.setRefundDesc(orderRefundVo.getReason() == null ? "用户退款" : orderRefundVo.getReason());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> response = payServiceImpl.orderRefund(orderPayRefundRequest);
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
String failMsg = Objects.isNull(response) ? "支付退款失败" : JSON.toJSONString(response);
//TODO 退款失败则记录到世昌的表里
RefundFailureRequestDTO requestDTO = RefundFailureRequestDTO.builder().orderCode(orderBean.getOid())
.failureType(RefundFailureRequestDTO.FAILURETYPE_NOT_SUFFICIENT_FUNDS)
.reason(failMsg)
.partnerId(orderBean.getCompanyId())
.operator("")
.ver(0).build();
orderServiceClient.refundFailures(requestDTO);
}
//获取支付返回退款状态
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
}
// 调用基础服务, 进行订单状态变更
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(),
orderBean.getCompanyId(), AfterSalesType.USER_CANCEL, orderRefundVo.getReason(), LogThreadLocal.getTrackingNo(), refundId.toString());
cancelOrderRequest.setOperator(orderBean.getUserName());
cancelOrderRequest.setPartnerId(orderBean.getCompanyId());
if (Objects.equals(PayRefundStatus.RUNNING.getCode(), state)) {
// 退款中
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.RETURN_COMPLETE.getCreateEvent());
} else if (Objects.equals(PayRefundStatus.SUCCESS.getCode(), state)) {
//退款成功
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent());
}else {
// 退款失败,直接给基础服务null 用于后续补偿操作
cancelOrderRequest.setCreateEvent(null);
}
cancelOrderRequest.setReqRemark(orderRefundVo.getRemarks());
cancelOrderRequest.setRefundDeliveryAmount(false);
// 商城订单 增加拓展信息
CancelOrderRequest.AfterSalesOrderExtInfoReq salesOrderExtInfoReq = new CancelOrderRequest.AfterSalesOrderExtInfoReq();
salesOrderExtInfoReq.setRefundMode(orderRefundVo.getRefundMode());
cancelOrderRequest.setExtInfoReq(salesOrderExtInfoReq);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderCancel(cancelOrderRequest);
if (baseOrderResponse == null || !ObjectUtils.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, baseOrderResponse.getErrcode())) {
throw new ServiceException(ResponseResult.ORDER__ERRORREFUND);
}
// 删除订单 通知活动添加商品库存 status 需要老订单的 ordercode
// orderQueueService.backOrdersStatusChange(orderBean.getOrderCode(), orderBean.getOrderState(), orderBean.getPayState());
}
/**
* 校验订单是否可退款等
*
* @param userLoginInfoDto
* @param orderBean
* @return
*/
private BaseResponse couponOrderRefundCheck(AssortmentCustomerInfoVo userLoginInfoDto, OrderBeanV1 orderBean) {
// 校验是否是用户订单
if (!Objects.equals(userLoginInfoDto.getMemberId(), orderBean.getUserId())) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "不能操作非本人的订单");
}
// 是否是卖券订单
if (orderBean.getBizType().compareTo(BizTypeEnum.SALE_COUPON.getBizType()) != 0) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "只可操作卖券订单");
}
// 校验订单状态 卖券订单只有在6已完成状态下 才能退款
if (orderBean.getStatus().compareTo(OrderStatusV1.COMPLETE.getV1Code()) != 0) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "只可操作完成的订单");
}
// 校验一遍是否有售后单
if (CollectionUtils.isNotEmpty(orderBean.getRefundList())) {
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(), "已存在退款申请,请耐心等待处理");
}
// fisherman 需要核实一下 是否申请退款,订单主状态还不会变
// fisherman 查询配置是否能退款 未完成
boolean isTrue = orderAdapter.checkRefundButtionBizTypeIs6(orderBean.getCompanyId(), orderBean.getBizType(),
orderBean.getStatus(),userLoginInfoDto.getWxAppId(), new Date(orderBean.getGmtCreate()));
if (isTrue) {
return ResponseUtil.success();
}
return ResponseUtil.error(ResponseResult.OPERATE_NOT_SUPPORT.getCode(),"虚拟券退款配置未启用,请联系客服");
}
/**
* 调用基础服务 获取订单信息
*
* @param oid
* @return
*/
private BaseResponse<OrderBeanV1> checkOrderAndGetOrderBean(String oid) {
if (StringUtils.isBlank(oid)) {
return ResponseUtil.error(ResponseResult.ORDER_CODE_EMPTY);
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(oid);
baseQueryOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
QueryOrderByIdResponse queryOrderByIdResponse = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
if (queryOrderByIdResponse == null || queryOrderByIdResponse.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
OrderBeanV1 data = queryOrderByIdResponse.getData();
return ResponseUtil.success(data);
}
/**
* 查询用户 是否登录
*
* @param sessionId
* @return
*/
private BaseResponse<AssortmentCustomerInfoVo> checkUserLoginInfoDto(String sessionId) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(sessionId);
if (userLoginInfoDto == null || StringUtils.isEmpty(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
return ResponseUtil.success(userLoginInfoDto);
}
/** /**
* 支付退款成功,订单未创建售后单 * 支付退款成功,订单未创建售后单
......
...@@ -50,4 +50,15 @@ public interface CouponOnlineClient { ...@@ -50,4 +50,15 @@ public interface CouponOnlineClient {
statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE) statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping(value = "/fastBatchQueryTemplateInfo") @PostMapping(value = "/fastBatchQueryTemplateInfo")
CouponResponseDTO<List<FastTemplateInfoResponseVO>> fastBatchQueryTemplateInfo(@RequestBody FastBatchQueryTemplateInfoRequest request); CouponResponseDTO<List<FastTemplateInfoResponseVO>> fastBatchQueryTemplateInfo(@RequestBody FastBatchQueryTemplateInfoRequest request);
/**
* 调用券码,作废券
* @param request
* @return
*/
@LogIgnoreFeign(logMessage="checkandcancel",messageFieldName= ResponseCodeKeyConstant.MSG,
statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping(value = "coupon/standard/checkandcancel")
CouponResponseDTO<CheckAndCancelResponseDTO> checkandcancel(@RequestBody CheckAndCancelRequest request);
} }
...@@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.PostMapping; ...@@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@FeignClient(name = "customer-extend-service", url = "${saas.customerextendclient.feign.url}") @FeignClient(name = "customer-extend-service", url = "${saas.customerextendclient.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"}) @RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CustomerExtendClient { public interface CustomerExtendClient {
...@@ -39,4 +41,15 @@ public interface CustomerExtendClient { ...@@ -39,4 +41,15 @@ public interface CustomerExtendClient {
@LogIgnoreFeign(logMessage="b2bReceiveCard") @LogIgnoreFeign(logMessage="b2bReceiveCard")
@PostMapping(value = "/customerextendservice/qujia/b2breceiveCard") @PostMapping(value = "/customerextendservice/qujia/b2breceiveCard")
B2bReceiveCardResponseDto b2bReceiveCard(@RequestBody B2bReceiveCardRequestDto request); B2bReceiveCardResponseDto b2bReceiveCard(@RequestBody B2bReceiveCardRequestDto request);
/**
* 校验request里面的券 是否正常
* @param request
* @return 如果和request 返回券一致 表示正常
* 这个接口 无力吐槽
*/
@LogIgnoreFeign(logMessage="getMemberCouponCodes")
@PostMapping(value = "/customerextendservice/coupon/getMemberCouponCodes")
UserBaseResponsDTO<List<String>> getMemberCouponCodes(@RequestBody UserCouponCheckRequest request);
} }
...@@ -4,6 +4,7 @@ import cn.freemud.annotations.LogIgnoreFeign; ...@@ -4,6 +4,7 @@ import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.QueryInvoiceRepDto; import cn.freemud.entities.dto.QueryInvoiceRepDto;
import cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse; import cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse;
import cn.freemud.entities.dto.order.RefundFailureRequestDTO;
import cn.freemud.entities.dto.pay.OrderInvoiceRequest; import cn.freemud.entities.dto.pay.OrderInvoiceRequest;
import cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest; import cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest;
import cn.freemud.entities.vo.QueryInvoiceReq; import cn.freemud.entities.vo.QueryInvoiceReq;
...@@ -38,4 +39,11 @@ public interface OrderServiceClient { ...@@ -38,4 +39,11 @@ public interface OrderServiceClient {
@PostMapping(value = "/order/v2/invoice/list/forUser") @PostMapping(value = "/order/v2/invoice/list/forUser")
QueryInvoiceRepDto queryInvoiceList(@RequestBody QueryInvoiceReq queryInvoiceReq); QueryInvoiceRepDto queryInvoiceList(@RequestBody QueryInvoiceReq queryInvoiceReq);
/**
* 虚拟券退款操作失败记录,用于后期补偿
*/
@LogIgnoreFeign(logMessage="refundFailures")
@PostMapping("/order/v2/refundFailures")
BaseResponse refundFailures(@RequestBody RefundFailureRequestDTO requestDTO);
} }
...@@ -7,6 +7,7 @@ public enum SettlementTypeEnum { ...@@ -7,6 +7,7 @@ public enum SettlementTypeEnum {
CASH_COUPON(10, "代金券"), CASH_COUPON(10, "代金券"),
DISCOUNT_COUPON(208, "折扣券"), DISCOUNT_COUPON(208, "折扣券"),
PRODUCT_COUPON(118, "商品券"), PRODUCT_COUPON(118, "商品券"),
SEND_COUPON(216, "购买券包发的优惠券"),
; ;
private int settlementType; private int settlementType;
......
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