Commit f5fdd70e by 查志伟

Merge branch '20210811-生态配置redis结构改造-zhiwei.zha'

parents dacd03b5 e9f765cc
......@@ -14,6 +14,7 @@ package cn.freemud.adapter;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.constant.KgdRedisKeyConstant;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.*;
......@@ -96,6 +97,7 @@ import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.time.Instant;
import java.util.*;
import java.util.function.Function;
......@@ -2078,12 +2080,16 @@ public class OrderAdapter {
// 除 未支付 拒单 和 取消外,其他可退款
return Stream.of(OrderStatus.WAIT_PAY, OrderStatus.REFUSE, OrderStatus.CALCEL).noneMatch(s -> Objects.equals(status, s));
}
boolean canRefund = false;
List<AssortmentOpenPlatformPartnerWxappConfig> wxappConfigs = cacheWxappConfigManager.cacheSelectDefaultPage(wxAppId, "2");
Map<String, AssortmentOpenPlatformPartnerWxappConfig> configMap = wxappConfigs.stream().collect(Collectors.toMap(AssortmentOpenPlatformPartnerWxappConfig::getAppKey, Function.identity()));
AssortmentOpenPlatformPartnerWxappConfig orderRefund;
// 查询小程序配置的退款设置
boolean canRefund = false;
String hkey = OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType()) ? KgdRedisKeyConstant.REFUND_CFG_TAKE_OUT : KgdRedisKeyConstant.REFUND_CFG_EAT_IN;
String configStr = redisCache.hashGet(MessageFormat.format(KgdRedisKeyConstant.ORDER_REFUND_CONFIG, orderBean.getCompanyId(), wxAppId), hkey);
if (StringUtils.isEmpty(configStr)) {
return true;
}
JSONObject config = JSON.parseObject(configStr);
String orderRefund;
//订单状态
switch (status) {
......@@ -2091,33 +2097,33 @@ public class OrderAdapter {
case TAKE_ORDER:
//区分外卖单和到店订单,判断是否可以退款
if (OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_TAKE_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_TAKE_ORDER_REFUND.getKeyValue());
} else {
orderRefund = configMap.get(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
}
if (orderRefund == null || ALLOW_REFUND.equals(orderRefund.getAppValue())) {
if (orderRefund == null || ALLOW_REFUND.equals(orderRefund)) {
canRefund = true;
}
break;
//已接单
case RECEIPT:
if (OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_RECEIPT_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_RECEIPT_ORDER_REFUND.getKeyValue());
} else {
orderRefund = configMap.get(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
}
if (orderRefund == null || ALLOW_REFUND.equals(orderRefund.getAppValue())) {
if (orderRefund == null || ALLOW_REFUND.equals(orderRefund)) {
canRefund = true;
}
break;
//制作完成
case COMPLETE_MAKE:
if (OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_COMPLETE_MAKE_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_COMPLETE_MAKE_ORDER_REFUND.getKeyValue());
} else {
orderRefund = configMap.get(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue())) {
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund)) {
canRefund = true;
}
break;
......@@ -2126,20 +2132,27 @@ public class OrderAdapter {
long currentTime = System.currentTimeMillis();
long gmtModified = orderBean.getGmtModified();
// 因允许退款日期在外卖类型的value中,如果订单类型为堂食,则会取不到这个值
if (!OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
configStr = redisCache.hashGet(MessageFormat.format(KgdRedisKeyConstant.ORDER_REFUND_CONFIG, orderBean.getCompanyId(), wxAppId), KgdRedisKeyConstant.REFUND_CFG_TAKE_OUT);
if (StringUtils.isNotEmpty(configStr)) {
// 将允许退款日期的配置放到config中
config.put(OrderRefundEnum.REFUND_DATA_RANGE.getKeyValue(), JSON.parseObject(configStr).getString(OrderRefundEnum.REFUND_DATA_RANGE.getKeyValue()));
}
}
long value = 0L;
AssortmentOpenPlatformPartnerWxappConfig refundDateConfig = configMap.get(OrderRefundEnum.REFUND_DATA_RANGE.getKeyValue());
String refundDateConfig = config.getString(OrderRefundEnum.REFUND_DATA_RANGE.getKeyValue());
if (null != refundDateConfig) {
String appValue = refundDateConfig.getAppValue();
value = Long.parseLong(StringUtils.isEmpty(appValue) ? "0" : appValue);
value = Long.parseLong(StringUtils.isEmpty(refundDateConfig) ? "0" : refundDateConfig);
}
long allowRefundTime = gmtModified + value * 24 * 60 * 60 * 1000;
if (OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_ORDER_REFUND.getKeyValue());
} else {
orderRefund = configMap.get(OrderRefundEnum.ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.ORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()) && (allowRefundTime - currentTime) >= 0) {
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund) && (allowRefundTime - currentTime) >= 0) {
canRefund = true;
}
break;
......
package cn.freemud.constant;
/**
* @author Clover.z
* @Date 2021/8/11
* @Desc
*/
public class KgdRedisKeyConstant {
/**
* 订单是否支持退款配置 缓存key
* 0:商户号
* 1:小程序appId
*
* value: hash结构
* hkey : eatInType 堂食 和takeOutType 外卖
* 具体配置为json字符串
*/
public static final String ORDER_REFUND_CONFIG = "kgd:order_refund_config_{0}_{1}";
/**
* 订单类型为堂食 redis配置的hkey
*/
public static final String REFUND_CFG_EAT_IN = "eatInType";
/**
* 订单类型为外卖 redis配置的hkey
*/
public static final String REFUND_CFG_TAKE_OUT = "takeOutType";
}
......@@ -15,17 +15,18 @@ package cn.freemud.enums;
public enum OrderRefundEnum {
ORDER_REFUND("orderRefund", "已完成订单是否允许退款"),
REFUND_DATA_RANGE("refundDateRange", "退款允许日期"),
TAKEORDER_REFUND("takeOrderRefund", "未接单是否支持退款"),
RECEIPTORDER_REFUND("receiptOrderRefund", "已接单是否支持退款"),
COMPLETEMAKEORDER_REFUND("completeMakeOrderRefund", "制作完成是否支持退款"),
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费"),
DELIVERY_TAKE_ORDER_REFUND("deliveryTakeOrderRefund","外卖单未接单是否支持退款"),
DELIVERY_RECEIPT_ORDER_REFUND("deliveryReceiptOrderRefund","外卖单已接单是否支持退款"),
DELIVERY_COMPLETE_MAKE_ORDER_REFUND("deliveryCompleteMakeOrderRefund","外卖单制作完成是否支持退款"),
DELIVERY_ORDER_REFUND("deliveryOrderRefund","外卖单订单完成是否支持退款");
DELIVERY_ORDER_REFUND("deliveryOrderRefund","外卖单订单完成是否支持退款"),
REFUND_DATA_RANGE("refundDateRange", "退款允许日期"),
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费"),
REFUND_REVERSE_COUPON("refundReverseCoupon", "退款退优惠券");
;
private String keyValue;
......
......@@ -19,6 +19,7 @@ import cn.freemud.amqp.MQMessage;
import cn.freemud.amqp.MQService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.KgdRedisKeyConstant;
import cn.freemud.constant.OrderRefundConstant;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
......@@ -149,6 +150,7 @@ import org.springframework.stereotype.Service;
import tk.mybatis.mapper.util.StringUtil;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
......@@ -1791,6 +1793,7 @@ public class OrderServiceImpl implements Orderservice {
}
String memberId = userInfo.getMemberId();
String partnerId = userInfo.getPartnerId();
String wxAppId = userInfo.getWxAppId();
if (StringUtils.isBlank(orderRefundVo.getOid())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
......@@ -1911,9 +1914,7 @@ public class OrderServiceImpl implements Orderservice {
}
//}
List<AssortmentOpenPlatformPartnerWxappConfig> partnerWxappConfigs = cacheOpenPlatformPartnerWxappConfigManager.cacheSelectDefaultPage(userInfo.getWxAppId(), "2");
Map<String, AssortmentOpenPlatformPartnerWxappConfig> configMap = partnerWxappConfigs.stream().collect(Collectors.toMap(AssortmentOpenPlatformPartnerWxappConfig::getAppKey, Function.identity()));
boolean isRefundDeliveryFee = true;
//商城查询配送费
......@@ -1940,13 +1941,17 @@ public class OrderServiceImpl implements Orderservice {
}
}
}else {
AssortmentOpenPlatformPartnerWxappConfig refundDeliveryFeeConfig = configMap.get(OrderRefundEnum.REFUND_DELIVERY_FEE_ENABLE.getKeyValue());
// AppLogUtil.infoLog("orderRefund of oid:{}, {}, {}", orderBean.getOid(), orderBean.getStatus(), (null != refundDeliveryFeeConfig ? ToStringBuilder.reflectionToString(refundDeliveryFeeConfig) : null));
// 0、null表示 关闭 ; 1 表示开启
if (null != refundDeliveryFeeConfig
&& Arrays.asList(OrderStatus.DISTRIBUTION.getCode(), OrderStatus.COMPLETE.getCode()).contains(orderBean.getStatus())
&& !ALLOW_REFUND.equals(refundDeliveryFeeConfig.getAppValue())) {
isRefundDeliveryFee = false;
// 查询小程序是否配置了退运费
String configStr = redisCache.hashGet(MessageFormat.format(KgdRedisKeyConstant.ORDER_REFUND_CONFIG, orderBean.getCompanyId(), wxAppId), KgdRedisKeyConstant.REFUND_CFG_TAKE_OUT);
if (StringUtils.isNotEmpty(configStr)) {
JSONObject config = JSON.parseObject(configStr);
String refundDeliveryFeeConfig = config.getString(OrderRefundEnum.REFUND_DELIVERY_FEE_ENABLE.getKeyValue());
// 0、null表示 关闭 ; 1 表示开启
if (null != refundDeliveryFeeConfig
&& Arrays.asList(OrderStatus.DISTRIBUTION.getCode(), OrderStatus.COMPLETE.getCode()).contains(orderBean.getStatus())
&& !ALLOW_REFUND.equals(refundDeliveryFeeConfig)) {
isRefundDeliveryFee = false;
}
}
}
......
package cn.freemud.management.constant;
/**
* @author Clover.z
* @Date 2021/8/11
* @Desc
*/
public class KgdRedisKeyConstant {
/**
* 订单是否支持退款配置 缓存key
* 0:商户号
* 1:小程序appId
*
* value: hash结构
* hkey : eatInType 堂食 和takeOutType 外卖
* 具体配置为json字符串
*/
public static final String ORDER_REFUND_CONFIG = "kgd:order_refund_config_{0}_{1}";
/**
* 订单类型为堂食 redis配置的hkey
*/
public static final String REFUND_CFG_EAT_IN = "eatInType";
/**
* 订单类型为外卖 redis配置的hkey
*/
public static final String REFUND_CFG_TAKE_OUT = "takeOutType";
}
......@@ -15,16 +15,17 @@ package cn.freemud.management.enums;
public enum OrderRefundEnum {
ORDER_REFUND("orderRefund", "已完成订单是否允许退款"),
REFUND_DATA_RANGE("refundDateRange", "退款允许日期"),
TAKEORDER_REFUND("takeOrderRefund", "未接单是否支持退款"),
RECEIPTORDER_REFUND("receiptOrderRefund", "已接单是否支持退款"),
COMPLETEMAKEORDER_REFUND("completeMakeOrderRefund", "制作完成是否支持退款"),
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费"),
DELIVERY_TAKE_ORDER_REFUND("deliveryTakeOrderRefund","外卖单未接单是否支持退款"),
DELIVERY_RECEIPT_ORDER_REFUND("deliveryReceiptOrderRefund","外卖单已接单是否支持退款"),
DELIVERY_COMPLETE_MAKE_ORDER_REFUND("deliveryCompleteMakeOrderRefund","外卖单制作完成是否支持退款"),
DELIVERY_ORDER_REFUND("deliveryOrderRefund","外卖单订单完成是否支持退款");
DELIVERY_ORDER_REFUND("deliveryOrderRefund","外卖单订单完成是否支持退款"),
REFUND_DATA_RANGE("refundDateRange", "退款允许日期"),
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费"),
REFUND_REVERSE_COUPON("refundReverseCoupon", "退款退优惠券");
private String keyValue;
......
......@@ -2,11 +2,14 @@ package cn.freemud.management.service.handle;
import cn.freemud.base.entity.BaseResponse;
//import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.management.constant.KgdRedisKeyConstant;
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.pay.RefundConfig;
import cn.freemud.management.enums.*;
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.entity.db.AssortmentOpenPlatformPartnerWxappConfig;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
......@@ -26,11 +29,13 @@ import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -69,6 +74,8 @@ public class OrderVerifyHandle {
private OrderCenterSdkService orderCenterSdkService;
@Autowired
private DeliveryHandle deliveryHandle;
@Autowired
private RedisCache redisCache;
@Value("${delivery.support.ordersource}")
private String supportOrderSource;
......@@ -549,13 +556,19 @@ public class OrderVerifyHandle {
// 除 未支付 拒单 和 取消外,其他可退款
return Stream.of(OrderStatus.WAIT_PAY,OrderStatus.REFUSE,OrderStatus.CANCEL).noneMatch(s -> Objects.equals(data.getStatus(),s.getCode()));
}
boolean canRefund = false;
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);
List<AssortmentOpenPlatformPartnerWxappConfig> partnerWxappConfigs = cacheOpenPlatformPartnerWxappConfigManager.cacheSelectDefaultPage(extInfo.getAppid(), "2");
Map<String, AssortmentOpenPlatformPartnerWxappConfig> configMap = partnerWxappConfigs.stream().collect(Collectors.toMap(AssortmentOpenPlatformPartnerWxappConfig::getAppKey, Function.identity()));
AssortmentOpenPlatformPartnerWxappConfig orderRefund;
// 查询小程序配置的退款设置
String hkey = OrderType.TAKE_OUT.getCode().equals(data.getOrderType()) ? KgdRedisKeyConstant.REFUND_CFG_TAKE_OUT : KgdRedisKeyConstant.REFUND_CFG_EAT_IN;
String configStr = redisCache.hashGet(MessageFormat.format(KgdRedisKeyConstant.ORDER_REFUND_CONFIG, data.getCompanyId(), extInfo.getAppid()), hkey);
if (StringUtils.isEmpty(configStr)) {
return true;
}
JSONObject config = JSON.parseObject(configStr);
String orderRefund;
//订单状态
switch (data.getStatus()) {
......@@ -563,44 +576,44 @@ public class OrderVerifyHandle {
case 1:
//区分外卖单和到店订单,判断是否可以退款
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_TAKE_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_TAKE_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
}
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()))) {
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund))) {
isFinishRefund = true;
}
break;
//已接单
case 3:
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_RECEIPT_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_RECEIPT_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
}
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()))) {
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund))) {
isFinishRefund = true;
}
break;
//制作完成
case 31:
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_COMPLETE_MAKE_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_COMPLETE_MAKE_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue())) {
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund)) {
isFinishRefund = true;
}
break;
// 订单完成
case 5:
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.DELIVERY_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.ORDER_REFUND.getKeyValue());
orderRefund = config.getString(OrderRefundEnum.ORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue())) {
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund)) {
isFinishRefund = true;
}
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