Merge remote-tracking branch 'origin/test' into test
This commit is contained in:
@@ -30,6 +30,7 @@ public class ShopUserMoneyEditDTO implements Serializable {
|
|||||||
* 关联id,
|
* 关联id,
|
||||||
* 订单支付/订单退款/霸王餐时 订单id
|
* 订单支付/订单退款/霸王餐时 订单id
|
||||||
* 支付/退款 tb_order_payment.id
|
* 支付/退款 tb_order_payment.id
|
||||||
|
* 消费返现为返现记录id
|
||||||
*/
|
*/
|
||||||
private Long relationId;
|
private Long relationId;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消费返现明细 实体类。
|
* 消费返现明细 实体类。
|
||||||
@@ -26,6 +27,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Table("mk_consume_cashback_record")
|
@Table("mk_consume_cashback_record")
|
||||||
|
@Accessors(chain = true)
|
||||||
public class MkConsumeCashbackRecord implements Serializable {
|
public class MkConsumeCashbackRecord implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import com.czg.market.vo.MkConsumeCashbackVO;
|
|||||||
import com.mybatisflex.core.service.IService;
|
import com.mybatisflex.core.service.IService;
|
||||||
import com.czg.market.entity.MkConsumeCashback;
|
import com.czg.market.entity.MkConsumeCashback;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务层。
|
* 服务层。
|
||||||
*
|
*
|
||||||
@@ -17,4 +19,14 @@ public interface MkConsumeCashbackService extends IService<MkConsumeCashback> {
|
|||||||
MkConsumeCashbackVO detail(Long shopId);
|
MkConsumeCashbackVO detail(Long shopId);
|
||||||
|
|
||||||
Boolean edit(Long shopId, MkConsumeCashbackDTO consumeDiscountDTO) throws ApiNotPrintException;
|
Boolean edit(Long shopId, MkConsumeCashbackDTO consumeDiscountDTO) throws ApiNotPrintException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消费返现
|
||||||
|
* @param shopId 店铺id
|
||||||
|
* @param userId 用户id
|
||||||
|
* @param amount 金额
|
||||||
|
* @param orderId 订单id
|
||||||
|
* @param orderNo 订单号
|
||||||
|
*/
|
||||||
|
void cashback(Long shopId, Long userId, BigDecimal amount, Long orderId, String orderNo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,4 +70,19 @@ public interface TableValueConstant {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface MkConsumeCashback {
|
||||||
|
@Getter
|
||||||
|
enum CashbackType {
|
||||||
|
FIX("fix", "待推送"),
|
||||||
|
PERCENTAGE("percentage", "推送成功");
|
||||||
|
private final String code;
|
||||||
|
private final String msg;
|
||||||
|
|
||||||
|
CashbackType(String code, String msg) {
|
||||||
|
this.code = code;
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import lombok.Getter;
|
|||||||
public enum ShopUserFlowBizEnum {
|
public enum ShopUserFlowBizEnum {
|
||||||
// 会员充值
|
// 会员充值
|
||||||
CASH_IN("cashIn", "会员充值"),
|
CASH_IN("cashIn", "会员充值"),
|
||||||
|
CASHBACK("cashback", "消费返现"),
|
||||||
FREE_IN("freeIn", "霸王餐充值"),
|
FREE_IN("freeIn", "霸王餐充值"),
|
||||||
// 重置奖励
|
// 重置奖励
|
||||||
AWARD_IN("awardIn", "充值奖励"),
|
AWARD_IN("awardIn", "充值奖励"),
|
||||||
|
|||||||
@@ -3,26 +3,34 @@ package com.czg.service.market.service.impl;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.czg.account.dto.shopuser.ShopUserMoneyEditDTO;
|
||||||
import com.czg.account.entity.ShopInfo;
|
import com.czg.account.entity.ShopInfo;
|
||||||
|
import com.czg.account.entity.ShopUser;
|
||||||
import com.czg.account.service.ShopInfoService;
|
import com.czg.account.service.ShopInfoService;
|
||||||
|
import com.czg.account.service.ShopUserService;
|
||||||
import com.czg.constant.TableValueConstant;
|
import com.czg.constant.TableValueConstant;
|
||||||
|
import com.czg.enums.ShopUserFlowBizEnum;
|
||||||
import com.czg.exception.ApiNotPrintException;
|
import com.czg.exception.ApiNotPrintException;
|
||||||
import com.czg.market.dto.MkConsumeCashbackDTO;
|
import com.czg.market.dto.MkConsumeCashbackDTO;
|
||||||
import com.czg.market.dto.MkConsumeDiscountDTO;
|
import com.czg.market.dto.MkConsumeDiscountDTO;
|
||||||
import com.czg.market.entity.MkConsumeCashbackStep;
|
import com.czg.market.entity.*;
|
||||||
import com.czg.market.entity.MkConsumeDiscount;
|
import com.czg.market.service.MkConsumeCashbackRecordService;
|
||||||
import com.czg.market.entity.MkConsumeDiscountRandom;
|
|
||||||
import com.czg.market.vo.MkConsumeCashbackVO;
|
import com.czg.market.vo.MkConsumeCashbackVO;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.update.UpdateWrapper;
|
import com.mybatisflex.core.update.UpdateWrapper;
|
||||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
import com.czg.market.entity.MkConsumeCashback;
|
|
||||||
import com.czg.market.service.MkConsumeCashbackService;
|
import com.czg.market.service.MkConsumeCashbackService;
|
||||||
import com.czg.service.market.mapper.MkConsumeCashbackMapper;
|
import com.czg.service.market.mapper.MkConsumeCashbackMapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务层实现。
|
* 服务层实现。
|
||||||
@@ -30,10 +38,16 @@ import java.math.BigDecimal;
|
|||||||
* @author zs
|
* @author zs
|
||||||
* @since 2025-10-13
|
* @since 2025-10-13
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MkConsumeCashbackServiceImpl extends ServiceImpl<MkConsumeCashbackMapper, MkConsumeCashback> implements MkConsumeCashbackService{
|
public class MkConsumeCashbackServiceImpl extends ServiceImpl<MkConsumeCashbackMapper, MkConsumeCashback> implements MkConsumeCashbackService{
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private ShopInfoService shopInfoService;
|
private ShopInfoService shopInfoService;
|
||||||
|
@DubboReference
|
||||||
|
private ShopUserService shopUserService;
|
||||||
|
@Resource
|
||||||
|
private MkConsumeCashbackRecordService consumeCashbackRecordService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MkConsumeCashbackVO detail(Long shopId) {
|
public MkConsumeCashbackVO detail(Long shopId) {
|
||||||
MkConsumeCashback consumeCashback = getOne(new QueryWrapper().eq(MkConsumeCashback::getMainShopId, shopId));
|
MkConsumeCashback consumeCashback = getOne(new QueryWrapper().eq(MkConsumeCashback::getMainShopId, shopId));
|
||||||
@@ -75,4 +89,36 @@ public class MkConsumeCashbackServiceImpl extends ServiceImpl<MkConsumeCashbackM
|
|||||||
return updateById(consumeCashback);
|
return updateById(consumeCashback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void cashback(Long shopId, Long userId, BigDecimal amount, Long orderId, String orderNo) {
|
||||||
|
Long mainShopId = shopInfoService.getMainIdByShopId(shopId);
|
||||||
|
MkConsumeCashbackVO config = detail(mainShopId);
|
||||||
|
if (config.getIsEnable() == 0) {
|
||||||
|
log.info("消费返现未开启, {}", shopId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getMainShopId, mainShopId).eq(ShopUser::getUserId, userId));
|
||||||
|
List<MkConsumeCashbackStep> cashbackStepList = config.getCashbackStepList();
|
||||||
|
if (cashbackStepList != null && !cashbackStepList.isEmpty()) {
|
||||||
|
// 固定金额
|
||||||
|
if (TableValueConstant.MkConsumeCashback.CashbackType.FIX.getCode().equals(config.getCashbackType())) {
|
||||||
|
|
||||||
|
}
|
||||||
|
config.setCashbackStepList(cashbackStepList.stream().sorted(Comparator.comparing(MkConsumeCashbackStep::getAmount)).collect(Collectors.toList()));
|
||||||
|
for (MkConsumeCashbackStep cashbackStep : cashbackStepList) {
|
||||||
|
if (cashbackStep.getAmount().compareTo(amount) <= 0 ) {
|
||||||
|
MkConsumeCashbackRecord mkConsumeCashbackRecord = new MkConsumeCashbackRecord().setOrderNo(orderNo).setOrderId(orderId)
|
||||||
|
.setMainShopId(mainShopId).setShopId(shopId).setAmount(amount)
|
||||||
|
.setCashbackAmount(cashbackStep.getCashbackAmount()).setUserId(userId)
|
||||||
|
.setShopUserId(shopUser.getId());
|
||||||
|
consumeCashbackRecordService.save(mkConsumeCashbackRecord);
|
||||||
|
shopUserService.updateMoney(new ShopUserMoneyEditDTO().setId(shopUser.getId()).setType(1)
|
||||||
|
.setRelationId(mkConsumeCashbackRecord.getId()).setMoney(cashbackStep.getCashbackAmount()).setBizEnum(ShopUserFlowBizEnum.CASHBACK)
|
||||||
|
.setRemark(StrUtil.format("订单消费: {}, 返现: {}", amount, cashbackStep.getCashbackAmount())));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user