From 12fa1dce426e8e16b4cb0aa302707a55b936f3ec Mon Sep 17 00:00:00 2001 From: dzq Date: Thu, 29 May 2025 10:03:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(role):=20=E6=96=B0=E5=A2=9E=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E8=A7=92=E8=89=B2=E9=94=AE=E8=8E=B7=E5=8F=96=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增getByRoleKey方法用于通过roleKey查询角色信息,并在QywxScheduleJob中使用该方法为新增用户设置默认角色 ``` ```msg feat(user): 重构用户余额统计返回数据结构 将selectTotalBalance方法返回类型从BigDecimal改为QyUserStatsDTO,包含余额和已使用余额字段,便于前端展示 ``` ```msg feat(role): 新增获取全部角色列表接口 在RoleApplicationService中新增getRoleAll方法,并添加对应的控制器接口,用于获取所有角色列表 ``` ```msg fix(shop): 为首页数据接口添加权限校验 在ShopController的stats方法上添加@PreAuthorize权限校验,确保只有拥有welcome:info权限的用户可以访问 --- .../admin/controller/qywx/QyUserController.java | 7 ++++--- .../admin/controller/shop/ShopController.java | 2 ++ .../controller/system/SysRoleController.java | 8 ++++++++ .../customize/service/QywxScheduleJob.java | 9 +++++++-- .../qywx/user/QyUserApplicationService.java | 3 ++- .../domain/qywx/user/db/QyUserMapper.java | 10 +++++----- .../domain/qywx/user/db/QyUserService.java | 3 ++- .../domain/qywx/user/db/QyUserServiceImpl.java | 4 ++-- .../domain/qywx/user/dto/QyUserStatsDTO.java | 17 +++++++++++++++++ .../shop/order/OrderApplicationService.java | 7 ------- .../system/role/RoleApplicationService.java | 5 +++++ .../domain/system/role/db/SysRoleService.java | 2 +- .../system/role/db/SysRoleServiceImpl.java | 8 ++++++++ 13 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/dto/QyUserStatsDTO.java diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/qywx/QyUserController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/qywx/QyUserController.java index 023d198..f55e5c0 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/qywx/QyUserController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/qywx/QyUserController.java @@ -18,6 +18,7 @@ import com.agileboot.domain.qywx.user.command.AddQyUserCommand; import com.agileboot.domain.qywx.user.command.UpdateQyUserCommand; import com.agileboot.domain.qywx.user.db.QyUserEntity; import com.agileboot.domain.qywx.user.dto.QyUserDTO; +import com.agileboot.domain.qywx.user.dto.QyUserStatsDTO; import com.agileboot.domain.qywx.user.query.SearchQyUserQuery; import io.swagger.v3.oas.annotations.Operation; @@ -105,8 +106,8 @@ public class QyUserController extends BaseController { } @GetMapping("/getTotalBalance") - public ResponseDTO getTotalBalance(@RequestParam(required = false) String corpid) { - BigDecimal totalBalance = qyUserApplicationService.selectTotalBalance(corpid); - return ResponseDTO.ok(totalBalance); + public ResponseDTO getTotalBalance(@RequestParam(required = false) String corpid) { + QyUserStatsDTO statsDTO = qyUserApplicationService.selectTotalBalance(corpid); + return ResponseDTO.ok(statsDTO); } } \ No newline at end of file diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java index 7ae03ed..7c57f3b 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java @@ -26,6 +26,7 @@ import java.math.BigDecimal; import java.util.List; import javax.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -50,6 +51,7 @@ public class ShopController extends BaseController { private final MqttService mqttService; @Operation(summary = "首页数据") + @PreAuthorize("@permission.has('welcome:info')") @GetMapping("/Stats") public ResponseDTO stats() { // 创建统计数据DTO对象 diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/system/SysRoleController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/system/SysRoleController.java index 75c12d9..695188d 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/system/SysRoleController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/system/SysRoleController.java @@ -55,6 +55,14 @@ public class SysRoleController extends BaseController { return ResponseDTO.ok(pageDTO); } + @Operation(summary = "全部角色") + @PreAuthorize("@permission.has('system:role:list')") + @GetMapping("/all") + public ResponseDTO> all(RoleQuery query) { + List pageDTO = roleApplicationService.getRoleAll(query); + return ResponseDTO.ok(pageDTO); + } + @Operation(summary = "角色列表导出") @AccessLog(title = "角色管理", businessType = BusinessTypeEnum.EXPORT) @PreAuthorize("@permission.has('system:role:export')") diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java b/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java index 9b8392b..66f16c8 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java @@ -38,6 +38,8 @@ import com.agileboot.domain.qywx.user.db.QyUserEntity; import com.agileboot.domain.qywx.userQySys.SysUserQyUserApplicationService; import com.agileboot.domain.qywx.userQySys.command.AddSysUserQyUserCommand; import com.agileboot.domain.qywx.userQySys.db.SysUserQyUserEntity; +import com.agileboot.domain.system.role.db.SysRoleEntity; +import com.agileboot.domain.system.role.db.SysRoleService; import com.agileboot.domain.system.user.UserApplicationService; import com.agileboot.domain.system.user.command.AddUserCommand; @@ -70,6 +72,7 @@ public class QywxScheduleJob { private final QyUserApplicationService qyUserApplicationService; private final SysUserQyUserApplicationService sysUserQyUserApplicationService; private final UserModelFactory userModelFactory; + private final SysRoleService sysRoleService; // private static final String appid = "QYTONG_YS_WXSHOP"; /** @@ -693,6 +696,7 @@ public class QywxScheduleJob { } }); + SysRoleEntity role = sysRoleService.getByRoleKey("base"); for (AddSysUserQyUserCommand binding : toAdd) { AddUserCommand command = new AddUserCommand(); command.setUsername("qywx" + binding.getQyUserId()); @@ -707,7 +711,7 @@ public class QywxScheduleJob { command.setEmail(phoneNumber + "@qywx.com"); command.setPassword("123456"); command.setStatus(1); - UserModel userModel = addUser(command); + UserModel userModel = addUser(command, role != null ? role.getRoleId() : 0L); binding.setSysUserId(userModel.getUserId()); sysUserQyUserApplicationService.addSysUserQyUser(binding); @@ -717,8 +721,9 @@ public class QywxScheduleJob { } } - private UserModel addUser(AddUserCommand command) { + private UserModel addUser(AddUserCommand command, Long roleId) { UserModel model = userModelFactory.create(); + model.setRoleId(roleId); model.loadAddUserCommand(command); model.checkUsernameIsUnique(); model.checkPhoneNumberIsUnique(); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/QyUserApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/QyUserApplicationService.java index 34cdf7c..ecbfaa3 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/QyUserApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/QyUserApplicationService.java @@ -10,6 +10,7 @@ import com.agileboot.domain.qywx.user.command.UpdateQyUserCommand; import com.agileboot.domain.qywx.user.db.QyUserEntity; import com.agileboot.domain.qywx.user.db.QyUserService; import com.agileboot.domain.qywx.user.dto.QyUserDTO; +import com.agileboot.domain.qywx.user.dto.QyUserStatsDTO; import com.agileboot.domain.qywx.user.model.UserModel; import com.agileboot.domain.qywx.user.model.QyUserModelFactory; import com.agileboot.domain.qywx.user.query.SearchQyUserQuery; @@ -136,7 +137,7 @@ public class QyUserApplicationService { } } - public BigDecimal selectTotalBalance(String corpid) { + public QyUserStatsDTO selectTotalBalance(String corpid) { return userService.selectTotalBalance(corpid); } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java index 5d52a97..764f028 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java @@ -1,11 +1,11 @@ package com.agileboot.domain.qywx.user.db; +import com.agileboot.domain.qywx.user.dto.QyUserStatsDTO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.math.BigDecimal; import java.util.List; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -45,14 +45,14 @@ public interface QyUserMapper extends BaseMapper { "AND sr.role_key = 'admin'") List selectAdminUserIds(); - @Select("SELECT SUM(balance) " + + @Select("SELECT SUM(balance) AS balance, SUM(use_balance) AS useBalance " + "FROM qy_user " + "WHERE deleted = 0") - BigDecimal selectTotalBalance(); + QyUserStatsDTO selectTotalBalance(); - @Select("SELECT SUM(balance) " + + @Select("SELECT SUM(balance) AS balance, SUM(use_balance) AS useBalance " + "FROM qy_user " + "WHERE deleted = 0 AND corpid = #{corpid}") - BigDecimal selectTotalBalanceByCorpid(@Param("corpid") String corpid); + QyUserStatsDTO selectTotalBalanceByCorpid(@Param("corpid") String corpid); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java index 3f70970..7ba029c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java @@ -1,6 +1,7 @@ package com.agileboot.domain.qywx.user.db; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.qywx.user.dto.QyUserStatsDTO; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -25,5 +26,5 @@ public interface QyUserService extends IService { List selectAdminUserIds(); - BigDecimal selectTotalBalance(String corpid); + QyUserStatsDTO selectTotalBalance(String corpid); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java index b5e7868..9311e9a 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java @@ -1,5 +1,6 @@ package com.agileboot.domain.qywx.user.db; +import com.agileboot.domain.qywx.user.dto.QyUserStatsDTO; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -16,7 +17,6 @@ import com.agileboot.common.core.page.AbstractPageQuery; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.math.BigDecimal; import java.util.List; @Service @@ -48,7 +48,7 @@ public class QyUserServiceImpl extends ServiceImpl i } @Override - public BigDecimal selectTotalBalance(String corpid) { + public QyUserStatsDTO selectTotalBalance(String corpid) { if (StringUtils.isBlank(corpid)) { return baseMapper.selectTotalBalance(); } else { diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/dto/QyUserStatsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/dto/QyUserStatsDTO.java new file mode 100644 index 0000000..21e4c69 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/dto/QyUserStatsDTO.java @@ -0,0 +1,17 @@ +package com.agileboot.domain.qywx.user.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +@Getter +@Setter +public class QyUserStatsDTO { + + // 用户余额 + private BigDecimal balance; + + // 已使用余额 + private BigDecimal useBalance; +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java index ab32871..37706f6 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java @@ -10,8 +10,6 @@ import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity; import com.agileboot.domain.cabinet.cell.db.CabinetCellService; import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardService; -import com.agileboot.domain.cabinet.mainboard.model.CabinetMainboardModel; -import com.agileboot.domain.cabinet.mainboard.model.CabinetMainboardModelFactory; import com.agileboot.domain.cabinet.operation.command.AddCabinetCellOperationCommand; import com.agileboot.domain.cabinet.operation.model.CabinetCellOperationModel; import com.agileboot.domain.cabinet.operation.model.CabinetCellOperationModelFactory; @@ -21,7 +19,6 @@ import com.agileboot.domain.common.command.BulkOperationCommand; import com.agileboot.domain.mqtt.MqttService; import com.agileboot.domain.qywx.user.db.QyUserEntity; import com.agileboot.domain.qywx.user.db.QyUserService; -import com.agileboot.domain.qywx.user.model.QyUserModelFactory; import com.agileboot.domain.shop.goods.db.ShopGoodsEntity; import com.agileboot.domain.shop.goods.db.ShopGoodsService; import com.agileboot.domain.shop.order.command.SubmitOrderCommand; @@ -29,7 +26,6 @@ import com.agileboot.domain.shop.order.db.*; import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO; import com.agileboot.domain.shop.order.dto.CreateOrderResult; import com.agileboot.domain.shop.order.dto.GetOrdersByOpenIdDTO; -import com.agileboot.domain.shop.order.dto.ShopOrderDTO; import com.agileboot.domain.shop.order.dto.TopGoodsDTO; import com.agileboot.domain.shop.order.model.OrderModel; import com.agileboot.domain.shop.order.model.OrderModelFactory; @@ -54,8 +50,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.checkerframework.checker.units.qual.s; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -74,7 +68,6 @@ public class OrderApplicationService { private final SmartCabinetService smartCabinetService; private final MqttService mqttService; private final QyUserService userService; - private final QyUserModelFactory qyUserModelFactory; private final CabinetCellOperationModelFactory cabinetCellOperationModelFactory; private final PaymentOperationLogApplicationService paymentOperationLogApplicationService; private final CabinetMainboardService cabinetMainboardService; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/system/role/RoleApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/system/role/RoleApplicationService.java index 46db651..b1a5a19 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/system/role/RoleApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/system/role/RoleApplicationService.java @@ -53,6 +53,11 @@ public class RoleApplicationService { return new PageDTO<>(records, page.getTotal()); } + public List getRoleAll(RoleQuery query) { + return roleService.list(query.toQueryWrapper()) + .stream().map(RoleDTO::new).collect(Collectors.toList()); + } + public RoleDTO getRoleInfo(Long roleId) { SysRoleEntity byId = roleService.getById(roleId); RoleDTO roleDTO = new RoleDTO(byId); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleService.java b/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleService.java index 81b71fe..baf82a4 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleService.java @@ -48,5 +48,5 @@ public interface SysRoleService extends IService { */ List getMenuListByRoleId(Long roleId); - + SysRoleEntity getByRoleKey(String roleKey); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleServiceImpl.java index b8a76c6..195800d 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/system/role/db/SysRoleServiceImpl.java @@ -51,5 +51,13 @@ public class SysRoleServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_key", roleKey) + .eq("deleted", 0); + return this.getOne(queryWrapper); + } + }