优化
This commit is contained in:
@ -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);
|
||||||
|
}
|
@ -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, "订单明细不存在");
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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())
|
||||||
|
Reference in New Issue
Block a user