Commit 47df9630 by 查志伟

C端退款增加配置校验

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