Commit 91240351ed55fdf89a9b2e6c49f7b0274a98143a
1 parent
5c3a9604
【代码优化】商城: 完成代码评审 TODO
Showing
9 changed files
with
50 additions
and
124 deletions
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/dto/ProductSpuRespDTO.java
| @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.product.api.spu.dto; | @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.product.api.spu.dto; | ||
| 3 | import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; | 3 | import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 6 | /** | 8 | /** |
| 7 | * 商品 SPU 信息 Response DTO | 9 | * 商品 SPU 信息 Response DTO |
| 8 | * | 10 | * |
| @@ -69,6 +71,13 @@ public class ProductSpuRespDTO { | @@ -69,6 +71,13 @@ public class ProductSpuRespDTO { | ||
| 69 | // ========== 物流相关字段 ========= | 71 | // ========== 物流相关字段 ========= |
| 70 | 72 | ||
| 71 | /** | 73 | /** |
| 74 | + * 配送方式数组 | ||
| 75 | + * | ||
| 76 | + * 对应 DeliveryTypeEnum 枚举 | ||
| 77 | + */ | ||
| 78 | + private List<Integer> deliveryTypes; | ||
| 79 | + | ||
| 80 | + /** | ||
| 72 | * 物流配置模板编号 | 81 | * 物流配置模板编号 |
| 73 | * | 82 | * |
| 74 | * 对应 TradeDeliveryExpressTemplateDO 的 id 编号 | 83 | * 对应 TradeDeliveryExpressTemplateDO 的 id 编号 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java
| @@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil; | @@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil; | ||
| 6 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | 6 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 7 | import cn.iocoder.yudao.module.member.api.address.MemberAddressApi; | 7 | import cn.iocoder.yudao.module.member.api.address.MemberAddressApi; |
| 8 | import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; | 8 | import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO; |
| 9 | +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; | ||
| 10 | +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; | ||
| 9 | import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; | 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; |
| 10 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO; | 12 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO; |
| 11 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryExpressChargeModeEnum; | 13 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryExpressChargeModeEnum; |
| @@ -17,18 +19,19 @@ import cn.iocoder.yudao.module.trade.service.delivery.bo.DeliveryExpressTemplate | @@ -17,18 +19,19 @@ import cn.iocoder.yudao.module.trade.service.delivery.bo.DeliveryExpressTemplate | ||
| 17 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; | 19 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 18 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; | 20 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 19 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO.OrderItem; | 21 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO.OrderItem; |
| 22 | +import jakarta.annotation.Resource; | ||
| 20 | import lombok.extern.slf4j.Slf4j; | 23 | import lombok.extern.slf4j.Slf4j; |
| 21 | import org.springframework.core.annotation.Order; | 24 | import org.springframework.core.annotation.Order; |
| 22 | import org.springframework.stereotype.Component; | 25 | import org.springframework.stereotype.Component; |
| 23 | 26 | ||
| 24 | -import jakarta.annotation.Resource; | ||
| 25 | import java.util.List; | 27 | import java.util.List; |
| 26 | import java.util.Map; | 28 | import java.util.Map; |
| 27 | import java.util.Set; | 29 | import java.util.Set; |
| 28 | 30 | ||
| 29 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 31 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 30 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; | 32 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| 31 | -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; | 33 | +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PICK_UP_STORE_NOT_EXISTS; |
| 34 | +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND; | ||
| 32 | 35 | ||
| 33 | /** | 36 | /** |
| 34 | * 运费的 {@link TradePriceCalculator} 实现类 | 37 | * 运费的 {@link TradePriceCalculator} 实现类 |
| @@ -49,13 +52,20 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { | @@ -49,13 +52,20 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { | ||
| 49 | private DeliveryExpressTemplateService deliveryExpressTemplateService; | 52 | private DeliveryExpressTemplateService deliveryExpressTemplateService; |
| 50 | @Resource | 53 | @Resource |
| 51 | private TradeConfigService tradeConfigService; | 54 | private TradeConfigService tradeConfigService; |
| 55 | + @Resource | ||
| 56 | + private ProductSpuApi productSpuApi; | ||
| 52 | 57 | ||
| 53 | @Override | 58 | @Override |
| 54 | public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { | 59 | public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { |
| 55 | if (param.getDeliveryType() == null) { | 60 | if (param.getDeliveryType() == null) { |
| 56 | return; | 61 | return; |
| 57 | } | 62 | } |
| 58 | - // TODO @puhui999:需要校验,是不是存在商品不能门店自提,或者不能快递发货的情况。就是说,配送方式不匹配哈 | 63 | + // 校验是不是存在商品不能门店自提,或者不能快递发货的情况。就是说,配送方式不匹配哈 |
| 64 | + List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(convertSet(result.getItems(), OrderItem::getSpuId)); | ||
| 65 | + if (anyMatch(spuList, item -> !item.getDeliveryTypes().contains(param.getDeliveryType()))) { | ||
| 66 | + return; | ||
| 67 | + } | ||
| 68 | + | ||
| 59 | if (DeliveryTypeEnum.PICK_UP.getType().equals(param.getDeliveryType())) { | 69 | if (DeliveryTypeEnum.PICK_UP.getType().equals(param.getDeliveryType())) { |
| 60 | calculateByPickUp(param); | 70 | calculateByPickUp(param); |
| 61 | } else if (DeliveryTypeEnum.EXPRESS.getType().equals(param.getDeliveryType())) { | 71 | } else if (DeliveryTypeEnum.EXPRESS.getType().equals(param.getDeliveryType())) { |
| @@ -124,7 +134,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { | @@ -124,7 +134,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { | ||
| 124 | Map<Long, List<OrderItem>> template2ItemMap = convertMultiMap(selectedSkus, OrderItem::getDeliveryTemplateId); | 134 | Map<Long, List<OrderItem>> template2ItemMap = convertMultiMap(selectedSkus, OrderItem::getDeliveryTemplateId); |
| 125 | // 依次计算快递运费 | 135 | // 依次计算快递运费 |
| 126 | for (Map.Entry<Long, List<OrderItem>> entry : template2ItemMap.entrySet()) { | 136 | for (Map.Entry<Long, List<OrderItem>> entry : template2ItemMap.entrySet()) { |
| 127 | - Long templateId = entry.getKey(); | 137 | + Long templateId = entry.getKey(); |
| 128 | List<OrderItem> orderItems = entry.getValue(); | 138 | List<OrderItem> orderItems = entry.getValue(); |
| 129 | DeliveryExpressTemplateRespBO templateBO = expressTemplateMap.get(templateId); | 139 | DeliveryExpressTemplateRespBO templateBO = expressTemplateMap.get(templateId); |
| 130 | if (templateBO == null) { | 140 | if (templateBO == null) { |
| @@ -144,8 +154,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { | @@ -144,8 +154,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { | ||
| 144 | /** | 154 | /** |
| 145 | * 按配送方式来计算运费 | 155 | * 按配送方式来计算运费 |
| 146 | * | 156 | * |
| 147 | - * @param orderItems SKU 商品项目 | ||
| 148 | - * @param chargeMode 配送计费方式 | 157 | + * @param orderItems SKU 商品项目 |
| 158 | + * @param chargeMode 配送计费方式 | ||
| 149 | * @param templateCharge 快递运费配置 | 159 | * @param templateCharge 快递运费配置 |
| 150 | */ | 160 | */ |
| 151 | private void calculateExpressFeeByChargeMode(List<OrderItem> orderItems, Integer chargeMode, | 161 | private void calculateExpressFeeByChargeMode(List<OrderItem> orderItems, Integer chargeMode, |
yudao-module-member/yudao-module-member-biz/pom.xml
| @@ -33,12 +33,6 @@ | @@ -33,12 +33,6 @@ | ||
| 33 | <artifactId>yudao-module-infra-api</artifactId> | 33 | <artifactId>yudao-module-infra-api</artifactId> |
| 34 | <version>${revision}</version> | 34 | <version>${revision}</version> |
| 35 | </dependency> | 35 | </dependency> |
| 36 | - <!-- TODO @puhui999:不在 MemberUserController 提供接口,而是 PayWalletController 增加。不然 member 耦合 pay 拉。 --> | ||
| 37 | - <dependency> | ||
| 38 | - <groupId>cn.iocoder.boot</groupId> | ||
| 39 | - <artifactId>yudao-module-pay-api</artifactId> | ||
| 40 | - <version>${revision}</version> | ||
| 41 | - </dependency> | ||
| 42 | 36 | ||
| 43 | <!-- 业务组件 --> | 37 | <!-- 业务组件 --> |
| 44 | <dependency> | 38 | <dependency> |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.member.controller.admin.user; | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.member.controller.admin.user; | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 7 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; | 6 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; |
| 8 | import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; | 7 | import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; |
| 9 | import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; | 8 | import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; |
| @@ -16,8 +15,6 @@ import cn.iocoder.yudao.module.member.service.level.MemberLevelService; | @@ -16,8 +15,6 @@ import cn.iocoder.yudao.module.member.service.level.MemberLevelService; | ||
| 16 | import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; | 15 | import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; |
| 17 | import cn.iocoder.yudao.module.member.service.tag.MemberTagService; | 16 | import cn.iocoder.yudao.module.member.service.tag.MemberTagService; |
| 18 | import cn.iocoder.yudao.module.member.service.user.MemberUserService; | 17 | import cn.iocoder.yudao.module.member.service.user.MemberUserService; |
| 19 | -import cn.iocoder.yudao.module.pay.api.wallet.PayWalletApi; | ||
| 20 | -import cn.iocoder.yudao.module.pay.api.wallet.dto.PayWalletUpdateBalanceReqDTO; | ||
| 21 | import io.swagger.v3.oas.annotations.Operation; | 18 | import io.swagger.v3.oas.annotations.Operation; |
| 22 | import io.swagger.v3.oas.annotations.Parameter; | 19 | import io.swagger.v3.oas.annotations.Parameter; |
| 23 | import io.swagger.v3.oas.annotations.tags.Tag; | 20 | import io.swagger.v3.oas.annotations.tags.Tag; |
| @@ -53,8 +50,6 @@ public class MemberUserController { | @@ -53,8 +50,6 @@ public class MemberUserController { | ||
| 53 | private MemberGroupService memberGroupService; | 50 | private MemberGroupService memberGroupService; |
| 54 | @Resource | 51 | @Resource |
| 55 | private MemberPointRecordService memberPointRecordService; | 52 | private MemberPointRecordService memberPointRecordService; |
| 56 | - @Resource | ||
| 57 | - private PayWalletApi payWalletApi; | ||
| 58 | 53 | ||
| 59 | @PutMapping("/update") | 54 | @PutMapping("/update") |
| 60 | @Operation(summary = "更新会员用户") | 55 | @Operation(summary = "更新会员用户") |
| @@ -81,15 +76,6 @@ public class MemberUserController { | @@ -81,15 +76,6 @@ public class MemberUserController { | ||
| 81 | return success(true); | 76 | return success(true); |
| 82 | } | 77 | } |
| 83 | 78 | ||
| 84 | - @PutMapping("/update-balance") | ||
| 85 | - @Operation(summary = "更新会员用户余额") | ||
| 86 | - @PreAuthorize("@ss.hasPermission('member:user:update-balance')") | ||
| 87 | - public CommonResult<Boolean> updateUserBalance(@Valid @RequestBody MemberUserUpdateBalanceReqVO updateReqVO) { | ||
| 88 | - payWalletApi.updateBalance(BeanUtils.toBean(updateReqVO, PayWalletUpdateBalanceReqDTO.class) | ||
| 89 | - .setUserId(updateReqVO.getId())); | ||
| 90 | - return success(true); | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | @GetMapping("/get") | 79 | @GetMapping("/get") |
| 94 | @Operation(summary = "获得会员用户") | 80 | @Operation(summary = "获得会员用户") |
| 95 | @Parameter(name = "id", description = "编号", required = true, example = "1024") | 81 | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/wallet/PayWalletApi.java deleted
| 1 | -package cn.iocoder.yudao.module.pay.api.wallet; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.module.pay.api.wallet.dto.PayWalletUpdateBalanceReqDTO; | ||
| 4 | - | ||
| 5 | -// TODO @puhui999:不在 MemberUserController 提供接口,而是 PayWalletController 增加。不然 member 耦合 pay 拉。 | ||
| 6 | -/** | ||
| 7 | - * 会员钱包 API 接口 | ||
| 8 | - * | ||
| 9 | - * @author HUIHUI | ||
| 10 | - */ | ||
| 11 | -public interface PayWalletApi { | ||
| 12 | - | ||
| 13 | - /** | ||
| 14 | - * 更新钱包余额 | ||
| 15 | - * | ||
| 16 | - * @param reqDTO 请求 | ||
| 17 | - */ | ||
| 18 | - void updateBalance(PayWalletUpdateBalanceReqDTO reqDTO); | ||
| 19 | - | ||
| 20 | -} |
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/wallet/dto/PayWalletUpdateBalanceReqDTO.java deleted
| 1 | -package cn.iocoder.yudao.module.pay.api.wallet.dto; | ||
| 2 | - | ||
| 3 | -import jakarta.validation.constraints.NotNull; | ||
| 4 | -import lombok.Data; | ||
| 5 | - | ||
| 6 | -// TODO @puhui999:不在 MemberUserController 提供接口,而是 PayWalletController 增加。不然 member 耦合 pay 拉。 | ||
| 7 | -/** | ||
| 8 | - * 钱包余额更新 Request DTO | ||
| 9 | - * | ||
| 10 | - * @author HUIHUI | ||
| 11 | - */ | ||
| 12 | -@Data | ||
| 13 | -public class PayWalletUpdateBalanceReqDTO { | ||
| 14 | - | ||
| 15 | - @NotNull(message = "用户编号不能为空") | ||
| 16 | - private Long userId; | ||
| 17 | - | ||
| 18 | - /** | ||
| 19 | - * 变动余额,正数为增加,负数为减少 | ||
| 20 | - */ | ||
| 21 | - @NotNull(message = "变动余额不能为空") | ||
| 22 | - private Integer balance; | ||
| 23 | - | ||
| 24 | -} |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/wallet/PayWalletApiImpl.java deleted
| 1 | -package cn.iocoder.yudao.module.pay.api.wallet; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.module.pay.api.wallet.dto.PayWalletUpdateBalanceReqDTO; | ||
| 4 | -import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; | ||
| 5 | -import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum; | ||
| 6 | -import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; | ||
| 7 | -import jakarta.annotation.Resource; | ||
| 8 | -import lombok.extern.slf4j.Slf4j; | ||
| 9 | -import org.springframework.stereotype.Service; | ||
| 10 | -import org.springframework.validation.annotation.Validated; | ||
| 11 | - | ||
| 12 | -import static cn.iocoder.yudao.framework.common.enums.UserTypeEnum.MEMBER; | ||
| 13 | -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 14 | -import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_NOT_FOUND; | ||
| 15 | - | ||
| 16 | -// @puhui999:不在 MemberUserController 提供接口,而是 PayWalletController 增加。不然 member 耦合 pay 拉。 | ||
| 17 | -/** | ||
| 18 | - * 会员钱包 API 实现类 | ||
| 19 | - * | ||
| 20 | - * @author HUIHUI | ||
| 21 | - */ | ||
| 22 | -@Service | ||
| 23 | -@Validated | ||
| 24 | -@Slf4j | ||
| 25 | -public class PayWalletApiImpl implements PayWalletApi { | ||
| 26 | - | ||
| 27 | - @Resource | ||
| 28 | - private PayWalletService payWalletService; | ||
| 29 | - | ||
| 30 | - @Override | ||
| 31 | - public void updateBalance(PayWalletUpdateBalanceReqDTO reqDTO) { | ||
| 32 | - // 获得用户钱包 | ||
| 33 | - PayWalletDO wallet = payWalletService.getOrCreateWallet(reqDTO.getUserId(), MEMBER.getValue()); | ||
| 34 | - if (wallet == null) { | ||
| 35 | - log.error("[updateBalance],reqDTO({}) 用户钱包不存在.", reqDTO); | ||
| 36 | - throw exception(WALLET_NOT_FOUND); | ||
| 37 | - } | ||
| 38 | - | ||
| 39 | - // 更新钱包余额 | ||
| 40 | - payWalletService.addWalletBalance(wallet.getId(), String.valueOf(reqDTO.getUserId()), | ||
| 41 | - PayWalletBizTypeEnum.UPDATE_BALANCE, reqDTO.getBalance()); | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | -} |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletController.java
| @@ -4,9 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; | @@ -4,9 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO; | 5 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO; |
| 6 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletRespVO; | 6 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletRespVO; |
| 7 | +import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUpdateBalanceReqVO; | ||
| 7 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserReqVO; | 8 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserReqVO; |
| 8 | import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletConvert; | 9 | import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletConvert; |
| 9 | import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; | 10 | import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; |
| 11 | +import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum; | ||
| 10 | import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; | 12 | import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; |
| 11 | import io.swagger.v3.oas.annotations.Operation; | 13 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | import io.swagger.v3.oas.annotations.tags.Tag; | 14 | import io.swagger.v3.oas.annotations.tags.Tag; |
| @@ -15,12 +17,12 @@ import jakarta.validation.Valid; | @@ -15,12 +17,12 @@ import jakarta.validation.Valid; | ||
| 15 | import lombok.extern.slf4j.Slf4j; | 17 | import lombok.extern.slf4j.Slf4j; |
| 16 | import org.springframework.security.access.prepost.PreAuthorize; | 18 | import org.springframework.security.access.prepost.PreAuthorize; |
| 17 | import org.springframework.validation.annotation.Validated; | 19 | import org.springframework.validation.annotation.Validated; |
| 18 | -import org.springframework.web.bind.annotation.GetMapping; | ||
| 19 | -import org.springframework.web.bind.annotation.RequestMapping; | ||
| 20 | -import org.springframework.web.bind.annotation.RestController; | 20 | +import org.springframework.web.bind.annotation.*; |
| 21 | 21 | ||
| 22 | import static cn.iocoder.yudao.framework.common.enums.UserTypeEnum.MEMBER; | 22 | import static cn.iocoder.yudao.framework.common.enums.UserTypeEnum.MEMBER; |
| 23 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 23 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 24 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 25 | +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_NOT_FOUND; | ||
| 24 | 26 | ||
| 25 | @Tag(name = "管理后台 - 用户钱包") | 27 | @Tag(name = "管理后台 - 用户钱包") |
| 26 | @RestController | 28 | @RestController |
| @@ -48,6 +50,21 @@ public class PayWalletController { | @@ -48,6 +50,21 @@ public class PayWalletController { | ||
| 48 | return success(PayWalletConvert.INSTANCE.convertPage(pageResult)); | 50 | return success(PayWalletConvert.INSTANCE.convertPage(pageResult)); |
| 49 | } | 51 | } |
| 50 | 52 | ||
| 51 | - // TODO @puhui999:修改钱包余额,权限标识,记得加下噢 | 53 | + @PutMapping("/update-balance") |
| 54 | + @Operation(summary = "更新会员用户余额") | ||
| 55 | + @PreAuthorize("@ss.hasPermission('pay:wallet:update-balance')") | ||
| 56 | + public CommonResult<Boolean> updateWalletBalance(@Valid @RequestBody PayWalletUpdateBalanceReqVO updateReqVO) { | ||
| 57 | + // 获得用户钱包 | ||
| 58 | + PayWalletDO wallet = payWalletService.getOrCreateWallet(updateReqVO.getUserId(), MEMBER.getValue()); | ||
| 59 | + if (wallet == null) { | ||
| 60 | + log.error("[updateWalletBalance],updateReqVO({}) 用户钱包不存在.", updateReqVO); | ||
| 61 | + throw exception(WALLET_NOT_FOUND); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + // 更新钱包余额 | ||
| 65 | + payWalletService.addWalletBalance(wallet.getId(), String.valueOf(updateReqVO.getUserId()), | ||
| 66 | + PayWalletBizTypeEnum.UPDATE_BALANCE, updateReqVO.getBalance()); | ||
| 67 | + return success(true); | ||
| 68 | + } | ||
| 52 | 69 | ||
| 53 | } | 70 | } |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserUpdateBalanceReqVO.java renamed to yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/vo/wallet/PayWalletUpdateBalanceReqVO.java
| 1 | -package cn.iocoder.yudao.module.member.controller.admin.user.vo; | 1 | +package cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import jakarta.validation.constraints.NotNull; | 4 | import jakarta.validation.constraints.NotNull; |
| 5 | import lombok.Data; | 5 | import lombok.Data; |
| 6 | -import lombok.ToString; | ||
| 7 | 6 | ||
| 8 | -@Schema(description = "管理后台 - 用户修改余额 Request VO") | 7 | +@Schema(description = "管理后台 - 修改钱包余额 Request VO") |
| 9 | @Data | 8 | @Data |
| 10 | -@ToString(callSuper = true) | ||
| 11 | -public class MemberUserUpdateBalanceReqVO { | 9 | +public class PayWalletUpdateBalanceReqVO { |
| 12 | 10 | ||
| 13 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788") | 11 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23788") |
| 14 | @NotNull(message = "用户编号不能为空") | 12 | @NotNull(message = "用户编号不能为空") |
| 15 | - private Long id; | 13 | + private Long userId; |
| 16 | 14 | ||
| 17 | @Schema(description = "变动余额,正数为增加,负数为减少", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") | 15 | @Schema(description = "变动余额,正数为增加,负数为减少", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") |
| 18 | @NotNull(message = "变动余额不能为空") | 16 | @NotNull(message = "变动余额不能为空") |