Commit 6a80d7c75f3ead3a3aa1f48f5ba99d7865bf3721
Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into develop
Showing
14 changed files
with
79 additions
and
14 deletions
sql/mysql/ruoyi-vue-pro.sql
| ... | ... | @@ -1961,7 +1961,7 @@ INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_i |
| 1961 | 1961 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2793, '写作管理', '', 2, 13, 2760, 'write', 'fa:bookmark-o', 'ai/write/manager/index.vue', 'AiWriteManager', 0, b'1', b'1', b'1', '', '2024-07-10 13:24:34', '1', '2024-07-10 21:31:59', b'0'); |
| 1962 | 1962 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2794, 'AI 写作查询', 'ai:write:query', 3, 1, 2793, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-07-10 13:24:34', '', '2024-07-10 13:24:34', b'0'); |
| 1963 | 1963 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2795, 'AI 写作删除', 'ai:write:delete', 3, 4, 2793, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-07-10 13:24:34', '', '2024-07-10 13:24:34', b'0'); |
| 1964 | -INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2796, 'AI 音乐', '', 2, 4, 2758, 'music', 'fa:music', 'ai/music/index/index.vue', 'AiWrite', 0, b'1', b'1', b'1', '1', '2024-07-17 09:21:12', '1', '2024-07-17 09:36:12', b'0'); | |
| 1964 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2796, 'AI 音乐', '', 2, 4, 2758, 'music', 'fa:music', 'ai/music/index/index.vue', 'AiMusic', 0, b'1', b'1', b'1', '1', '2024-07-17 09:21:12', '1', '2024-07-17 09:36:12', b'0'); | |
| 1965 | 1965 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2797, '客服中心', '', 2, 100, 2362, 'kefu', 'fa-solid:user-alt', 'mall/promotion/kefu/index', 'KeFu', 0, b'1', b'1', b'1', '1', '2024-07-17 23:49:05', '1', '2024-07-17 23:49:16', b'0'); |
| 1966 | 1966 | COMMIT; |
| 1967 | 1967 | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyController.java
| ... | ... | @@ -17,7 +17,10 @@ import org.springframework.security.access.prepost.PreAuthorize; |
| 17 | 17 | import org.springframework.validation.annotation.Validated; |
| 18 | 18 | import org.springframework.web.bind.annotation.*; |
| 19 | 19 | |
| 20 | +import java.util.List; | |
| 21 | + | |
| 20 | 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 23 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 21 | 24 | |
| 22 | 25 | @Tag(name = "管理后台 - 商品属性项") |
| 23 | 26 | @RestController |
| ... | ... | @@ -69,4 +72,12 @@ public class ProductPropertyController { |
| 69 | 72 | return success(BeanUtils.toBean(pageResult, ProductPropertyRespVO.class)); |
| 70 | 73 | } |
| 71 | 74 | |
| 75 | + @GetMapping("/simple-list") | |
| 76 | + @Operation(summary = "获得属性项精简列表") | |
| 77 | + public CommonResult<List<ProductPropertyRespVO>> getPropertySimpleList() { | |
| 78 | + List<ProductPropertyDO> list = productPropertyService.getPropertyList(); | |
| 79 | + return success(convertList(list, property -> new ProductPropertyRespVO() // 只返回 id、name 属性 | |
| 80 | + .setId(property.getId()).setName(property.getName()))); | |
| 81 | + } | |
| 82 | + | |
| 72 | 83 | } | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java
| ... | ... | @@ -17,7 +17,11 @@ import org.springframework.security.access.prepost.PreAuthorize; |
| 17 | 17 | import org.springframework.validation.annotation.Validated; |
| 18 | 18 | import org.springframework.web.bind.annotation.*; |
| 19 | 19 | |
| 20 | +import java.util.List; | |
| 21 | + | |
| 20 | 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 23 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 24 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.singleton; | |
| 21 | 25 | |
| 22 | 26 | @Tag(name = "管理后台 - 商品属性值") |
| 23 | 27 | @RestController |
| ... | ... | @@ -69,4 +73,13 @@ public class ProductPropertyValueController { |
| 69 | 73 | return success(BeanUtils.toBean(pageResult, ProductPropertyValueRespVO.class)); |
| 70 | 74 | } |
| 71 | 75 | |
| 76 | + @GetMapping("/simple-list") | |
| 77 | + @Operation(summary = "获得属性值精简列表") | |
| 78 | + @Parameter(name = "propertyId", description = "属性项编号", required = true, example = "1024") | |
| 79 | + public CommonResult<List<ProductPropertyValueRespVO>> getPropertyValueSimpleList(@RequestParam("propertyId") Long propertyId) { | |
| 80 | + List<ProductPropertyValueDO> list = productPropertyValueService.getPropertyValueListByPropertyId(singleton(propertyId)); | |
| 81 | + return success(convertList(list, value -> new ProductPropertyValueRespVO() // 只返回 id、name 属性 | |
| 82 | + .setId(value.getId()).setName(value.getName()))); | |
| 83 | + } | |
| 84 | + | |
| 72 | 85 | } | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/property/ProductPropertyDO.java
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyService.java
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyServiceImpl.java
| ... | ... | @@ -109,4 +109,9 @@ public class ProductPropertyServiceImpl implements ProductPropertyService { |
| 109 | 109 | return productPropertyMapper.selectBatchIds(ids); |
| 110 | 110 | } |
| 111 | 111 | |
| 112 | + @Override | |
| 113 | + public List<ProductPropertyDO> getPropertyList() { | |
| 114 | + return productPropertyMapper.selectList(); | |
| 115 | + } | |
| 116 | + | |
| 112 | 117 | } | ... | ... |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/coupon/CouponDO.java
| ... | ... | @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.promotion.enums.coupon.CouponStatusEnum; |
| 8 | 8 | import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTakeTypeEnum; |
| 9 | 9 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 10 | 10 | import com.baomidou.mybatisplus.annotation.TableField; |
| 11 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 11 | 12 | import com.baomidou.mybatisplus.annotation.TableName; |
| 12 | 13 | import lombok.Data; |
| 13 | 14 | import lombok.EqualsAndHashCode; |
| ... | ... | @@ -30,6 +31,7 @@ public class CouponDO extends BaseDO { |
| 30 | 31 | /** |
| 31 | 32 | * 优惠劵编号 |
| 32 | 33 | */ |
| 34 | + @TableId | |
| 33 | 35 | private Long id; |
| 34 | 36 | /** |
| 35 | 37 | * 优惠劵模板编号 | ... | ... |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
| ... | ... | @@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; |
| 25 | 25 | import org.springframework.validation.annotation.Validated; |
| 26 | 26 | |
| 27 | 27 | import jakarta.annotation.Resource; |
| 28 | + | |
| 28 | 29 | import java.time.LocalDateTime; |
| 29 | 30 | import java.util.*; |
| 30 | 31 | import java.util.stream.Collectors; |
| ... | ... | @@ -132,7 +133,7 @@ public class CouponServiceImpl implements CouponService { |
| 132 | 133 | @Transactional |
| 133 | 134 | public void deleteCoupon(Long id) { |
| 134 | 135 | // 校验存在 |
| 135 | - validateCouponExists(id); | |
| 136 | + CouponDO coupon = validateCouponExists(id); | |
| 136 | 137 | |
| 137 | 138 | // 更新优惠劵 |
| 138 | 139 | int deleteCount = couponMapper.delete(id, |
| ... | ... | @@ -140,8 +141,9 @@ public class CouponServiceImpl implements CouponService { |
| 140 | 141 | if (deleteCount == 0) { |
| 141 | 142 | throw exception(COUPON_DELETE_FAIL_USED); |
| 142 | 143 | } |
| 144 | + | |
| 143 | 145 | // 减少优惠劵模板的领取数量 -1 |
| 144 | - couponTemplateService.updateCouponTemplateTakeCount(id, -1); | |
| 146 | + couponTemplateService.updateCouponTemplateTakeCount(coupon.getTemplateId(), -1); | |
| 145 | 147 | } |
| 146 | 148 | |
| 147 | 149 | @Override |
| ... | ... | @@ -149,10 +151,12 @@ public class CouponServiceImpl implements CouponService { |
| 149 | 151 | return couponMapper.selectListByUserIdAndStatus(userId, status); |
| 150 | 152 | } |
| 151 | 153 | |
| 152 | - private void validateCouponExists(Long id) { | |
| 153 | - if (couponMapper.selectById(id) == null) { | |
| 154 | + private CouponDO validateCouponExists(Long id) { | |
| 155 | + CouponDO coupon = couponMapper.selectById(id); | |
| 156 | + if (coupon == null) { | |
| 154 | 157 | throw exception(COUPON_NOT_EXISTS); |
| 155 | 158 | } |
| 159 | + return coupon; | |
| 156 | 160 | } |
| 157 | 161 | |
| 158 | 162 | @Override | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSalePageReqVO.java
| ... | ... | @@ -21,6 +21,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ |
| 21 | 21 | @ToString(callSuper = true) |
| 22 | 22 | public class AfterSalePageReqVO extends PageParam { |
| 23 | 23 | |
| 24 | + @Schema(description = "用户编号", example = "1024") | |
| 25 | + private Long userId; | |
| 26 | + | |
| 24 | 27 | @Schema(description = "售后流水号", example = "202211190847450020500077") |
| 25 | 28 | private String no; |
| 26 | 29 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/base/spu/AppProductSpuBaseRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/aftersale/AfterSaleMapper.java
| ... | ... | @@ -16,6 +16,7 @@ public interface AfterSaleMapper extends BaseMapperX<AfterSaleDO> { |
| 16 | 16 | |
| 17 | 17 | default PageResult<AfterSaleDO> selectPage(AfterSalePageReqVO reqVO) { |
| 18 | 18 | return selectPage(reqVO, new LambdaQueryWrapperX<AfterSaleDO>() |
| 19 | + .eqIfPresent(AfterSaleDO::getUserId, reqVO.getUserId()) | |
| 19 | 20 | .likeIfPresent(AfterSaleDO::getNo, reqVO.getNo()) |
| 20 | 21 | .eqIfPresent(AfterSaleDO::getStatus, reqVO.getStatus()) |
| 21 | 22 | .eqIfPresent(AfterSaleDO::getType, reqVO.getType()) | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.service.price.calculator; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.lang.Assert; |
| 4 | +import cn.hutool.core.util.StrUtil; | |
| 4 | 5 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 5 | 6 | import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; |
| 6 | 7 | import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; |
| ... | ... | @@ -61,7 +62,7 @@ public class TradePriceCalculatorHelper { |
| 61 | 62 | orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId()) |
| 62 | 63 | .setDeliveryTemplateId(spu.getDeliveryTemplateId()) |
| 63 | 64 | .setGivePoint(spu.getGiveIntegral()).setUsePoint(0); |
| 64 | - if (orderItem.getPicUrl() == null) { | |
| 65 | + if (StrUtil.isBlank(orderItem.getPicUrl())) { | |
| 65 | 66 | orderItem.setPicUrl(spu.getPicUrl()); |
| 66 | 67 | } |
| 67 | 68 | }); |
| ... | ... | @@ -240,7 +241,7 @@ public class TradePriceCalculatorHelper { |
| 240 | 241 | * |
| 241 | 242 | * 和 {@link #dividePrice(List, Integer)} 逻辑一致,只是传入的是 TradeOrderItemDO 对象 |
| 242 | 243 | * |
| 243 | - * @param items 订单项 | |
| 244 | + * @param items 订单项 | |
| 244 | 245 | * @param price 订单支付金额 |
| 245 | 246 | * @return 分摊金额数组,和传入的 orderItems 一一对应 |
| 246 | 247 | */ | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/vo/transaction/PayWalletTransactionPageReqVO.java
| 1 | 1 | package cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.transaction; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 5 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 4 | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | 7 | import lombok.Data; |
| 6 | 8 | |
| ... | ... | @@ -8,7 +10,14 @@ import lombok.Data; |
| 8 | 10 | @Data |
| 9 | 11 | public class PayWalletTransactionPageReqVO extends PageParam { |
| 10 | 12 | |
| 11 | - @Schema(description = "钱包编号", example = "1") | |
| 13 | + @Schema(description = "钱包编号", example = "888") | |
| 12 | 14 | private Long walletId; |
| 13 | 15 | |
| 16 | + @Schema(description = "用户编号", example = "1024") | |
| 17 | + private Long userId; | |
| 18 | + | |
| 19 | + @Schema(description = "用户类型", example = "1") | |
| 20 | + @InEnum(UserTypeEnum.class) | |
| 21 | + private Integer userType; | |
| 22 | + | |
| 14 | 23 | } | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletTransactionServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.pay.service.wallet; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ObjectUtil; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 5 | import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.transaction.PayWalletTransactionPageReqVO; |
| 5 | 6 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO; |
| ... | ... | @@ -11,12 +12,11 @@ import cn.iocoder.yudao.module.pay.dal.mysql.wallet.PayWalletTransactionMapper; |
| 11 | 12 | import cn.iocoder.yudao.module.pay.dal.redis.no.PayNoRedisDAO; |
| 12 | 13 | import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum; |
| 13 | 14 | import cn.iocoder.yudao.module.pay.service.wallet.bo.WalletTransactionCreateReqBO; |
| 15 | +import jakarta.annotation.Resource; | |
| 14 | 16 | import lombok.extern.slf4j.Slf4j; |
| 15 | 17 | import org.springframework.stereotype.Service; |
| 16 | 18 | import org.springframework.validation.annotation.Validated; |
| 17 | 19 | |
| 18 | -import jakarta.annotation.Resource; | |
| 19 | - | |
| 20 | 20 | import java.time.LocalDateTime; |
| 21 | 21 | |
| 22 | 22 | import static cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO.TYPE_EXPENSE; |
| ... | ... | @@ -53,6 +53,16 @@ public class PayWalletTransactionServiceImpl implements PayWalletTransactionServ |
| 53 | 53 | |
| 54 | 54 | @Override |
| 55 | 55 | public PageResult<PayWalletTransactionDO> getWalletTransactionPage(PayWalletTransactionPageReqVO pageVO) { |
| 56 | + // 基于 userId + userType 查询钱包 | |
| 57 | + if (pageVO.getWalletId() == null | |
| 58 | + && ObjectUtil.isAllNotEmpty(pageVO.getUserId(), pageVO.getUserType())) { | |
| 59 | + PayWalletDO wallet = payWalletService.getOrCreateWallet(pageVO.getUserId(), pageVO.getUserType()); | |
| 60 | + if (wallet != null) { | |
| 61 | + pageVO.setWalletId(wallet.getId()); | |
| 62 | + } | |
| 63 | + } | |
| 64 | + | |
| 65 | + // 查询分页 | |
| 56 | 66 | return payWalletTransactionMapper.selectPage(pageVO.getWalletId(), null, pageVO, null); |
| 57 | 67 | } |
| 58 | 68 | ... | ... |