This commit is contained in:
zengtao01
2024-10-09 15:51:58 +08:00
parent a1ac698daf
commit 7abaa2d05e
8 changed files with 94 additions and 8 deletions

View File

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.member.api.card;
import java.math.BigDecimal;
/**
* @author zt
* @description <description class purpose>
* @since 2024/10/9
*/
public interface CardApi {
Boolean recharge(BigDecimal money);
}

View File

@ -62,6 +62,7 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_004_013_001, "订单不存在"); ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_004_013_001, "订单不存在");
ErrorCode ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_004_013_002, "订单明细不存在"); ErrorCode ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_004_013_002, "订单明细不存在");
ErrorCode RECHARGE_AMOUNT_NOT_EXISTS = new ErrorCode(1_004_013_003, "订单明细不存在"); ErrorCode RECHARGE_AMOUNT_NOT_EXISTS = new ErrorCode(1_004_013_003, "订单明细不存在");
ErrorCode RECHARGE_AMOUNT_ALREADY_EXISTS = new ErrorCode(1_004_013_004, "该金额已存在");
//ErrorCode DINING_PLATES_NOT_EXISTS = new ErrorCode(1_004_013_004, "订单明细不存在"); //ErrorCode DINING_PLATES_NOT_EXISTS = new ErrorCode(1_004_013_004, "订单明细不存在");
ErrorCode USER_EXPAND_NOT_EXISTS = new ErrorCode(1_004_013_005, "订单明细不存在"); ErrorCode USER_EXPAND_NOT_EXISTS = new ErrorCode(1_004_013_005, "订单明细不存在");
ErrorCode USER_PREFERENCE_NOT_EXISTS = new ErrorCode(1_004_013_006, "订单明细不存在"); ErrorCode USER_PREFERENCE_NOT_EXISTS = new ErrorCode(1_004_013_006, "订单明细不存在");

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.member.api.card;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.rechargeamount.RechargeAmountDO;
import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.rechargeamount.RechargeAmountService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
/**
* @author zt
* @description <description class purpose>
* @since 2024/10/9
*/
@Service
public class CardApiImpl implements CardApi{
@Resource
private CardService cardService;
@Resource
private RechargeAmountService rechargeAmountService;
@Override
public Boolean recharge(BigDecimal money){
RechargeAmountDO recharge = rechargeAmountService.getRecharge(money);
BigDecimal giftMoney = BigDecimal.ZERO;
if(ObjectUtil.isNotEmpty(recharge.getDonateMoney())){
giftMoney = giftMoney.add(recharge.getDonateMoney());
}
money = money.divide(new BigDecimal("100"));
return cardService.recharge(money, CardDO.ADD,giftMoney);
}
}

View File

@ -100,7 +100,8 @@ public class AppCardController {
//@PreAuthorize("@ss.hasPermission('member:card:update')") //@PreAuthorize("@ss.hasPermission('member:card:update')")
public CommonResult<Boolean> recharge(BigDecimal money,BigDecimal giftMoney) { public CommonResult<Boolean> recharge(BigDecimal money,BigDecimal giftMoney) {
//BigDecimal bigDecimal = money.divide(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); //BigDecimal bigDecimal = money.divide(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP);
return success(cardService.recharge(money,CardDO.ADD,giftMoney)); //cardService.recharge(money,CardDO.ADD,giftMoney);
return success(true);
} }

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.member.controller.admin.rechargeamount.vo.Recharg
import cn.iocoder.yudao.module.member.dal.dataobject.rechargeamount.RechargeAmountDO; import cn.iocoder.yudao.module.member.dal.dataobject.rechargeamount.RechargeAmountDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -55,4 +56,5 @@ public interface RechargeAmountService {
List<RechargeAmountDO> getAmount(); List<RechargeAmountDO> getAmount();
RechargeAmountDO getRecharge(BigDecimal money);
} }

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.service.rechargeamount; package cn.iocoder.yudao.module.member.service.rechargeamount;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.rechargeamount.vo.RechargeAmountPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.rechargeamount.vo.RechargeAmountPageReqVO;
@ -11,10 +12,11 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.RECHARGE_AMOUNT_ALREADY_EXISTS;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.RECHARGE_AMOUNT_NOT_EXISTS; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.RECHARGE_AMOUNT_NOT_EXISTS;
/** /**
@ -34,6 +36,7 @@ public class RechargeAmountServiceImpl implements RechargeAmountService {
// 插入 // 插入
RechargeAmountDO rechargeAmount = BeanUtils.toBean(createReqVO, RechargeAmountDO.class); RechargeAmountDO rechargeAmount = BeanUtils.toBean(createReqVO, RechargeAmountDO.class);
rechargeAmountMapper.insert(rechargeAmount); rechargeAmountMapper.insert(rechargeAmount);
check(rechargeAmount.getMoney());
// 返回 // 返回
return rechargeAmount.getId(); return rechargeAmount.getId();
} }
@ -78,4 +81,25 @@ public class RechargeAmountServiceImpl implements RechargeAmountService {
.orderByAsc(RechargeAmountDO::getMoney)); .orderByAsc(RechargeAmountDO::getMoney));
return list; return list;
} }
@Override
public RechargeAmountDO getRecharge(BigDecimal money) {
List<RechargeAmountDO> rechargeAmountDOS = rechargeAmountMapper.selectList(Wrappers.<RechargeAmountDO>lambdaQuery()
.eq(RechargeAmountDO::getMoney, money)
.eq(RechargeAmountDO::getStatus, RechargeAmountDO.ON)
.orderByDesc(RechargeAmountDO::getCreateTime));
if(CollectionUtil.isNotEmpty(rechargeAmountDOS)){
return rechargeAmountDOS.get(0);
}
return new RechargeAmountDO();
}
public void check(BigDecimal money){
List<RechargeAmountDO> list =rechargeAmountMapper.selectList(Wrappers.<RechargeAmountDO>lambdaQuery()
.eq(RechargeAmountDO::getMoney, money));
if(CollectionUtil.isNotEmpty(list)){
throw exception(RECHARGE_AMOUNT_ALREADY_EXISTS);
}
}
} }

View File

@ -10,18 +10,16 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundRespDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundRespDTO;
import cn.iocoder.yudao.framework.pay.core.enums.divide.PayDivideRefundStatusRespEnum; import cn.iocoder.yudao.framework.pay.core.enums.divide.PayDivideRefundStatusRespEnum;
import cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum; import cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum;
import cn.iocoder.yudao.module.member.api.card.CardApi;
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskDetailRespVO; import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskDetailRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskPageReqVO; import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskPageReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskRespVO; import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskRespVO;
import cn.iocoder.yudao.module.pay.convert.notify.PayNotifyTaskConvert; import cn.iocoder.yudao.module.pay.convert.notify.PayNotifyTaskConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO; import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.divide.DivideDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO; import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyTaskDO; import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyTaskDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.refundrecord.RefundRecordDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.wxorder.WxOrderDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wxorder.WxOrderDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.wxrefund.WxRefundDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wxrefund.WxRefundDO;
import cn.iocoder.yudao.module.pay.dal.mysql.refundrecord.RefundRecordMapper;
import cn.iocoder.yudao.module.pay.dal.mysql.wxorder.WxOrderMapper; import cn.iocoder.yudao.module.pay.dal.mysql.wxorder.WxOrderMapper;
import cn.iocoder.yudao.module.pay.dal.mysql.wxrefund.WxRefundMapper; import cn.iocoder.yudao.module.pay.dal.mysql.wxrefund.WxRefundMapper;
import cn.iocoder.yudao.module.pay.service.app.PayAppService; import cn.iocoder.yudao.module.pay.service.app.PayAppService;
@ -51,7 +49,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.annotation.security.PermitAll; import javax.annotation.security.PermitAll;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.ArrayList; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -87,6 +85,8 @@ public class PayNotifyController {
private WxOrderMapper wxOrderMapper; private WxOrderMapper wxOrderMapper;
@Resource @Resource
private StringRedisTemplate notifyRedisTemplate; private StringRedisTemplate notifyRedisTemplate;
@Resource
private CardApi cardApi;
@PostMapping(value = "/order/{channelId}") @PostMapping(value = "/order/{channelId}")
@Operation(summary = "支付渠道的统一【支付】回调") @Operation(summary = "支付渠道的统一【支付】回调")
@ -106,6 +106,11 @@ public class PayNotifyController {
// 2. 解析通知数据 // 2. 解析通知数据
PayOrderRespDTO notify = payClient.parseOrderNotify(params, body); PayOrderRespDTO notify = payClient.parseOrderNotify(params, body);
orderService.notifyOrder(channelId, notify); orderService.notifyOrder(channelId, notify);
String re = notifyRedisTemplate.opsForValue().get("ADD" + notify.getOutTradeNo());
if(StringUtils.isNotBlank(re)){
cardApi.recharge(new BigDecimal(re));
notifyRedisTemplate.delete("ADD" + notify.getOutTradeNo());
}
return "success"; return "success";
} }

View File

@ -10,11 +10,9 @@ import cn.iocoder.yudao.framework.common.util.number.MoneyUtils;
import cn.iocoder.yudao.framework.pay.core.client.PayClient; import cn.iocoder.yudao.framework.pay.core.client.PayClient;
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
import cn.iocoder.yudao.framework.pay.core.enums.divide.PayDivideStatusRespEnum;
import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum; import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum;
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
import cn.iocoder.yudao.module.pay.controller.admin.divide.vo.DivideSaveReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitReqVO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitReqVO;
@ -38,6 +36,7 @@ import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService;
import cn.iocoder.yudao.module.pay.service.wxorder.WxOrderService; import cn.iocoder.yudao.module.pay.service.wxorder.WxOrderService;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -86,6 +85,9 @@ public class PayOrderServiceImpl implements PayOrderService {
@Resource @Resource
private WxOrderService wxOrderService; private WxOrderService wxOrderService;
@Resource
private StringRedisTemplate payRedis;
@Override @Override
public PayOrderDO getOrder(Long id) { public PayOrderDO getOrder(Long id) {
@ -315,6 +317,8 @@ public class PayOrderServiceImpl implements PayOrderService {
// .setChannelUserId(payOrderDO.getChannelUserId()); // .setChannelUserId(payOrderDO.getChannelUserId());
// divideService.createDivide(divideSaveReqVO); // divideService.createDivide(divideSaveReqVO);
payRedis.opsForValue().set("ADD"+payOrderDO.getNo(),payOrderDO.getPrice().toString());
WxOrderSaveReqVO wxOrderSaveReqVO = new WxOrderSaveReqVO(); WxOrderSaveReqVO wxOrderSaveReqVO = new WxOrderSaveReqVO();
wxOrderSaveReqVO.setChannelId(channel.getId()) wxOrderSaveReqVO.setChannelId(channel.getId())
.setChannelCode(channel.getCode()) .setChannelCode(channel.getCode())