From 7abaa2d05e6ee892c2f2a20979a5b275003b4461 Mon Sep 17 00:00:00 2001 From: zengtao01 Date: Wed, 9 Oct 2024 15:51:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/module/member/api/card/CardApi.java | 13 +++++++ .../member/enums/ErrorCodeConstants.java | 1 + .../module/member/api/card/CardApiImpl.java | 36 +++++++++++++++++++ .../app/card/AppCardController.java | 3 +- .../rechargeamount/RechargeAmountService.java | 2 ++ .../RechargeAmountServiceImpl.java | 26 +++++++++++++- .../admin/notify/PayNotifyController.java | 13 ++++--- .../service/order/PayOrderServiceImpl.java | 8 +++-- 8 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApi.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApiImpl.java diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApi.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApi.java new file mode 100644 index 00000000..3b88a406 --- /dev/null +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApi.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.member.api.card; + +import java.math.BigDecimal; + +/** + * @author zt + * @description + * @since 2024/10/9 + */ +public interface CardApi { + + Boolean recharge(BigDecimal money); +} diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index bb93ac23..bc4c7e57 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -62,6 +62,7 @@ public interface ErrorCodeConstants { ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_004_013_001, "订单不存在"); 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_ALREADY_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_PREFERENCE_NOT_EXISTS = new ErrorCode(1_004_013_006, "订单明细不存在"); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApiImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApiImpl.java new file mode 100644 index 00000000..a647b2c9 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/card/CardApiImpl.java @@ -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 + * @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); + } +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/card/AppCardController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/card/AppCardController.java index d73eaff1..98aa98bf 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/card/AppCardController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/card/AppCardController.java @@ -100,7 +100,8 @@ public class AppCardController { //@PreAuthorize("@ss.hasPermission('member:card:update')") public CommonResult recharge(BigDecimal money,BigDecimal giftMoney) { //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); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountService.java index 7a45c368..c496f394 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountService.java @@ -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 javax.validation.Valid; +import java.math.BigDecimal; import java.util.List; /** @@ -55,4 +56,5 @@ public interface RechargeAmountService { List getAmount(); + RechargeAmountDO getRecharge(BigDecimal money); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountServiceImpl.java index 88abc036..c51207fc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/rechargeamount/RechargeAmountServiceImpl.java @@ -1,5 +1,6 @@ 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.util.object.BeanUtils; 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 javax.annotation.Resource; - +import java.math.BigDecimal; import java.util.List; 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; /** @@ -34,6 +36,7 @@ public class RechargeAmountServiceImpl implements RechargeAmountService { // 插入 RechargeAmountDO rechargeAmount = BeanUtils.toBean(createReqVO, RechargeAmountDO.class); rechargeAmountMapper.insert(rechargeAmount); + check(rechargeAmount.getMoney()); // 返回 return rechargeAmount.getId(); } @@ -78,4 +81,25 @@ public class RechargeAmountServiceImpl implements RechargeAmountService { .orderByAsc(RechargeAmountDO::getMoney)); return list; } + + @Override + public RechargeAmountDO getRecharge(BigDecimal money) { + List rechargeAmountDOS = rechargeAmountMapper.selectList(Wrappers.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 list =rechargeAmountMapper.selectList(Wrappers.lambdaQuery() + .eq(RechargeAmountDO::getMoney, money)); + if(CollectionUtil.isNotEmpty(list)){ + throw exception(RECHARGE_AMOUNT_ALREADY_EXISTS); + } + } } \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/notify/PayNotifyController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/notify/PayNotifyController.java index 607cae6d..c0ed4c3e 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/notify/PayNotifyController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/notify/PayNotifyController.java @@ -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.enums.divide.PayDivideRefundStatusRespEnum; 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.PayNotifyTaskPageReqVO; 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.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.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.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.wxrefund.WxRefundMapper; 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.security.PermitAll; import javax.validation.Valid; -import java.util.ArrayList; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -87,6 +85,8 @@ public class PayNotifyController { private WxOrderMapper wxOrderMapper; @Resource private StringRedisTemplate notifyRedisTemplate; + @Resource + private CardApi cardApi; @PostMapping(value = "/order/{channelId}") @Operation(summary = "支付渠道的统一【支付】回调") @@ -106,6 +106,11 @@ public class PayNotifyController { // 2. 解析通知数据 PayOrderRespDTO notify = payClient.parseOrderNotify(params, body); 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"; } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java index aee2a556..8a01c730 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java @@ -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.dto.order.PayOrderRespDTO; 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.tenant.core.util.TenantUtils; 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.PayOrderPageReqVO; 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 com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -86,6 +85,9 @@ public class PayOrderServiceImpl implements PayOrderService { @Resource private WxOrderService wxOrderService; + @Resource + private StringRedisTemplate payRedis; + @Override public PayOrderDO getOrder(Long id) { @@ -315,6 +317,8 @@ public class PayOrderServiceImpl implements PayOrderService { // .setChannelUserId(payOrderDO.getChannelUserId()); // divideService.createDivide(divideSaveReqVO); + payRedis.opsForValue().set("ADD"+payOrderDO.getNo(),payOrderDO.getPrice().toString()); + WxOrderSaveReqVO wxOrderSaveReqVO = new WxOrderSaveReqVO(); wxOrderSaveReqVO.setChannelId(channel.getId()) .setChannelCode(channel.getCode())