Commit 47df9630 by 查志伟

C端退款增加配置校验

parent f1fef8a7
......@@ -17,6 +17,7 @@ import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.AfterSalesRefunStateEnum;
import cn.freemud.management.service.adapter.OrderManagerAdapter;
import cn.freemud.management.service.handle.OrderVerifyHandle;
import cn.freemud.management.service.handle.PaymentHandle;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.impl.OrderQueueService;
......@@ -75,6 +76,7 @@ public class RefundService {
private final AssortmentCloudPrinterManager cloudPrinterManager;
private final FMAssistantCloudPrintClient fmAssistantCloudPrintClient;
private final OrderManagerAdapter orderManagerAdapter;
private final OrderVerifyHandle orderVerifyHandle;
private OrderInfoReqs preValidRefund(String partnerId, String orderCode, Byte refundMode) {
// 查询订单信息
......@@ -118,6 +120,9 @@ public class RefundService {
.findAny();
if (exists.isPresent()) throw new ServiceException("商家正在处理中,请稍后……");
}
// 校验是否允许发起退款
if (!orderVerifyHandle.getRefundConfig(order))
throw new ServiceException("该门店不支持线上退款,请联系门店进行线下处理");
//退款是否退配送费
boolean refundDeliveryFee = isRefundDeliveryFee(order);
......
......@@ -3,14 +3,14 @@ package cn.freemud.management.service.handle;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.*;
import cn.freemud.management.enums.DeliveryStatus;
import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.RefundStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.util.ResponseUtil;
import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
import com.freemud.application.sdk.api.ordercenter.entities.v1.AccountBeanV1;
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.enums.*;
......@@ -18,11 +18,12 @@ import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderSourceV1;
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.RefundStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.sdk.api.assortment.message.enums.OrderType;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.constant.OrderRedisKeyConstant;
import com.freemud.sdk.api.assortment.order.entities.OrderRefundConfigEntity;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
......@@ -582,30 +583,47 @@ public class OrderVerifyHandle {
}
/**
* 已完成订单退款配置查询
* 订单退款配置查询
*
* @param data
* @return true=可同意退款
*/
private boolean getRefundConfig(OrderBeanV1 data) {
public boolean getRefundConfig(OrderBeanV1 order) {
return getRefundConfig(order.getCompanyId(), order.getOrderType(), order.getBizType(),
(int)order.getMarketingType(), order.getStatusV2(), order.getExtInfo());
}
/**
* 订单退款配置查询
*
* @return true=可同意退款
*/
public boolean getRefundConfig(OrderInfoReqs order) {
return getRefundConfig(order.getPartnerId(), order.getOrderType(), order.getBizType(),
order.getMarketingType(), order.getOrderState(), order.getExtInfo());
}
/**
* 订单退款配置查询
*
* @return true=可同意退款
*/
private boolean getRefundConfig(String partnerId, Integer orderType, Integer bizType, Integer marketType, Integer orderState, String extStr) {
boolean isFinishRefund = false;
// [华莱士20210410] 微商城订单判断
if(Objects.equals(BizTypeEnum.MALL.getBizType(),data.getBizType())){
if(Objects.equals(BizTypeEnum.MALL.getBizType(), bizType)){
// 除 未支付 拒单 和 取消外,其他可退款
return Stream.of(OrderStatusV1.WAIT_PAY,OrderStatusV1.CANCEL).noneMatch(s -> Objects.equals(data.getStatusV2(),s.getV2Code()));
return Stream.of(OrderStatusV1.WAIT_PAY,OrderStatusV1.CANCEL).noneMatch(s -> Objects.equals(orderState,s.getV2Code()));
}
com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto extInfo = null;
JSONObject jsonObject1 = JSONObject.parseObject(data.getExtInfo());
extInfo = jsonObject1.toJavaObject(com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto.class);
OrderExtInfoDto extInfo = JSON.parseObject(extStr, OrderExtInfoDto.class);
// 查询小程序配置的退款设置
String redisKey = MessageFormat.format(OrderRedisKeyConstant.ORDER_REFUND_CONFIG, data.getCompanyId(), extInfo.getAppid());
String redisKey = MessageFormat.format(OrderRedisKeyConstant.ORDER_REFUND_CONFIG, partnerId, extInfo.getAppid());
String hashKey;
if(MarketTypeEnum.CASHIER.getIndex().byteValue() == data.getMarketingType()){
if(MarketTypeEnum.CASHIER.getIndex().equals(marketType)){
//收银单,使用收银单的退款配置
hashKey = OrderRedisKeyConstant.HashKeyForOrderRefundConfig.CASHIER;
} else {
hashKey = OrderType.TAKE_OUT.getCode().equals(data.getOrderType())
hashKey = OrderType.TAKE_OUT.getCode().equals(orderType)
? OrderRedisKeyConstant.HashKeyForOrderRefundConfig.TAKE_OUT
: OrderRedisKeyConstant.HashKeyForOrderRefundConfig.EAT_IN;
}
......@@ -615,33 +633,33 @@ public class OrderVerifyHandle {
}
OrderRefundConfigEntity config = JSON.parseObject(configStr, OrderRefundConfigEntity.class);
String orderRefund = null;
if(MarketTypeEnum.CASHIER.getIndex().byteValue() == data.getMarketingType()){
if(MarketTypeEnum.CASHIER.getIndex().byteValue() == marketType){
//收银单,使用收银单的退款配置 收银单只有完成的订单,直接判断是否可以退款就行
orderRefund = config.getCashierOrderRefund();
} else if (OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
} else if (OrderType.TAKE_OUT.getCode().equals(orderType)) {
//外卖单,使用外卖单的退款配置
switch (data.getStatus()) {
switch (orderState) {
// 未接单
case 1: orderRefund = config.getDeliveryTakeOrderRefund(); break;
//已接单
case 3: orderRefund = config.getDeliveryReceiptOrderRefund(); break;
//制作完成
case 31: orderRefund = config.getDeliveryCompleteMakeOrderRefund(); break;
case 4: orderRefund = config.getDeliveryCompleteMakeOrderRefund(); break;
// 订单完成
case 5: orderRefund = config.getDeliveryOrderRefund(); break;
case 6: orderRefund = config.getDeliveryOrderRefund(); break;
default: break;
}
} else {
//其他,使用堂食的退款配置(必须先判断收银单,因为收银单的类型也是堂食,只是orderClient不一样
switch (data.getStatus()) {
switch (orderState) {
// 未接单
case 1: orderRefund = config.getTakeOrderRefund(); break;
//已接单
case 3: orderRefund = config.getReceiptOrderRefund(); break;
//制作完成
case 31: orderRefund = config.getCompleteMakeOrderRefund(); break;
case 4: orderRefund = config.getCompleteMakeOrderRefund(); break;
// 订单完成
case 5: orderRefund = config.getOrderRefund(); break;
case 6: orderRefund = config.getOrderRefund(); break;
default: break;
}
}
......
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