From 9eb8988d9cce983ab2cee6d299e6819ae1c8ba87 Mon Sep 17 00:00:00 2001 From: DB <2502523450@qq.com> Date: Thu, 19 Oct 2023 21:51:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=9F=8E=E8=A7=92=E8=89=B2=E5=AE=9A?= =?UTF-8?q?=E5=88=B6=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cpop/core/config/SecurityConfig.java | 6 +- .../MiniProgramAuthenticationFilter.java | 2 +- ...UsernamePasswordAuthenticationFilter.java} | 4 +- .../impl/OamStaffDetailsServiceImpl.java | 2 +- Cpop-Mall/pom.xml | 6 ++ .../controller/MallRoleController.java | 7 +- .../cpop/mall/business/entity/RoleBrand.java | 10 +-- .../business/service/RoleBrandService.java | 13 ++- .../service/impl/RoleBrandServiceImpl.java | 82 ++++++++++++++++--- .../cpop/mall/business/vo/MallRolePageVo.java | 9 +- .../com/cpop/system/business/bo/RoleBo.java | 6 ++ 11 files changed, 112 insertions(+), 35 deletions(-) rename Cpop-Core/src/main/java/com/cpop/core/gateway/oam/{OamUsernamePasswordAuthenticationFilter.java => CpopUsernamePasswordAuthenticationFilter.java} (91%) diff --git a/Cpop-Core/src/main/java/com/cpop/core/config/SecurityConfig.java b/Cpop-Core/src/main/java/com/cpop/core/config/SecurityConfig.java index 14601e2..8c0b0ae 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/config/SecurityConfig.java +++ b/Cpop-Core/src/main/java/com/cpop/core/config/SecurityConfig.java @@ -6,7 +6,7 @@ import com.cpop.core.filter.JwtAuthenticationFilter; import com.cpop.core.filter.RepeatableFilter; import com.cpop.core.gateway.miniProgram.MiniProgramAuthenticationFilter; import com.cpop.core.gateway.miniProgram.MiniProgramAuthenticationProvider; -import com.cpop.core.gateway.oam.OamUsernamePasswordAuthenticationFilter; +import com.cpop.core.gateway.oam.CpopUsernamePasswordAuthenticationFilter; import com.cpop.core.gateway.sys.SysAuthenticationFilter; import com.cpop.core.gateway.sys.SysAuthenticationProvider; import com.cpop.core.handler.*; @@ -126,8 +126,8 @@ public class SecurityConfig implements WebMvcConfigurer { * @return OamUsernamePasswordAuthenticationFilter oma管理器 */ @Bean - public OamUsernamePasswordAuthenticationFilter oamLoginFilter(AuthenticationManager authenticationManager) { - OamUsernamePasswordAuthenticationFilter loginFilter = new OamUsernamePasswordAuthenticationFilter(); + public CpopUsernamePasswordAuthenticationFilter oamLoginFilter(AuthenticationManager authenticationManager) { + CpopUsernamePasswordAuthenticationFilter loginFilter = new CpopUsernamePasswordAuthenticationFilter(); loginFilter.setFilterProcessesUrl("/login"); loginFilter.setAuthenticationManager(authenticationManager); loginFilter.setAuthenticationSuccessHandler(loginSuccessHandler); diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java index 49e58ff..f6e9451 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java @@ -23,7 +23,7 @@ public class MiniProgramAuthenticationFilter extends AbstractAuthenticationProce public MiniProgramAuthenticationFilter() { - super(new AntPathRequestMatcher("/miniProgramLogin", "POST")); + super(new AntPathRequestMatcher("/miniLogin", "POST")); } @Override diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/oam/OamUsernamePasswordAuthenticationFilter.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/oam/CpopUsernamePasswordAuthenticationFilter.java similarity index 91% rename from Cpop-Core/src/main/java/com/cpop/core/gateway/oam/OamUsernamePasswordAuthenticationFilter.java rename to Cpop-Core/src/main/java/com/cpop/core/gateway/oam/CpopUsernamePasswordAuthenticationFilter.java index 620419a..b5d047b 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/gateway/oam/OamUsernamePasswordAuthenticationFilter.java +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/oam/CpopUsernamePasswordAuthenticationFilter.java @@ -16,9 +16,9 @@ import java.util.Map; /** * @author DB * @create 2023-04-05 17:38 - * OAM管理系统为基础认证系统,使用默认的过滤认证方式 + * Cpop管理系统为基础认证系统,使用默认的过滤认证方式 */ -public class OamUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter { +public class CpopUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter { @SuppressWarnings("rawtypes") @Override diff --git a/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java b/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java index c3955c7..69cdc08 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java +++ b/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java @@ -39,7 +39,7 @@ public class OamStaffDetailsServiceImpl implements UserDetailsService { * @author DB * @date 2023/09/11 10:57 * @param username 用户名 - * @return org.springframework.security.core.userdetails.UserDetails + * @return org.springframework.security.core.user.details.UserDetails */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { diff --git a/Cpop-Mall/pom.xml b/Cpop-Mall/pom.xml index b5574b6..4bf0859 100644 --- a/Cpop-Mall/pom.xml +++ b/Cpop-Mall/pom.xml @@ -19,10 +19,16 @@ com.cpop Cpop-Core + com.cpop Cpop-System + + + com.cpop + Cpop-Jambox + diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/MallRoleController.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/MallRoleController.java index 8599566..2d15c3c 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/MallRoleController.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/controller/MallRoleController.java @@ -12,7 +12,6 @@ import com.cpop.system.business.bo.RoleStatusBo; import com.cpop.system.business.service.MenuService; import com.cpop.system.business.service.RoleService; import com.cpop.system.business.vo.MenuVo; -import com.cpop.system.business.vo.RolePageVo; import com.mybatisflex.core.paginate.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -67,9 +66,9 @@ public class MallRoleController { @PreAuthorize("@aps.hasPermission('system:role:insert')") @OperationLog(operationLogEnumType = OperationLogEnum.INSERT_OAM_ROLE) @ApiOperation("新增商城角色") - @PostMapping("/insertSysRole") - public R insertSysRole(@RequestBody @Validated RoleBo bo) { - roleService.insertSysRole(bo); + @PostMapping("/insertMallRole") + public R insertMallRole(@RequestBody @Validated RoleBo bo) { + roleBrandService.insertMallRole(bo); return R.ok(); } diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/RoleBrand.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/RoleBrand.java index 90affb7..2657667 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/RoleBrand.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/entity/RoleBrand.java @@ -5,13 +5,11 @@ import com.cpop.core.base.entity.BaseInsertListener; import com.cpop.core.base.entity.BaseUpdateListener; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Table; -import java.io.Serializable; -import java.time.LocalDateTime; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.*; import lombok.experimental.Accessors; +import java.io.Serializable; + /** * 商城-角色-品牌id 实体类。 * @@ -43,8 +41,4 @@ public class RoleBrand extends BaseEntity implements Serializable { */ private String brandId; - - - - } diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/RoleBrandService.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/RoleBrandService.java index 63d4277..2d4c65a 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/RoleBrandService.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/RoleBrandService.java @@ -1,11 +1,11 @@ package com.cpop.mall.business.service; +import com.cpop.mall.business.entity.RoleBrand; import com.cpop.mall.business.vo.MallRolePageVo; +import com.cpop.system.business.bo.RoleBo; import com.cpop.system.business.bo.RolePageBo; -import com.cpop.system.business.vo.RolePageVo; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; -import com.cpop.mall.business.entity.RoleBrand; /** * 商城-角色-品牌id 服务层。 @@ -23,4 +23,13 @@ public interface RoleBrandService extends IService { * @return R> */ Page getMallRolePageList(RolePageBo bo); + + /** + * @descriptions 新增角色 + * @author DB + * @date 2023/10/12 10:48 + * @param bo 请求参数 + * @return: com.cpop.core.base.R + */ + void insertMallRole(RoleBo bo); } diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/RoleBrandServiceImpl.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/RoleBrandServiceImpl.java index 0c47ae4..97c9614 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/RoleBrandServiceImpl.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/RoleBrandServiceImpl.java @@ -1,19 +1,37 @@ package com.cpop.mall.business.service.impl; +import com.alibaba.fastjson.JSONObject; +import com.cpop.common.utils.bean.BeanUtils; import com.cpop.core.base.entity.PageDomain; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; import com.cpop.core.utils.sql.SqlUtils; -import com.cpop.mall.business.vo.MallRolePageVo; -import com.cpop.system.business.bo.RolePageBo; -import com.cpop.system.business.vo.RolePageVo; -import com.mybatisflex.core.paginate.Page; -import com.mybatisflex.core.query.QueryWrapper; -import com.mybatisflex.spring.service.impl.ServiceImpl; import com.cpop.mall.business.entity.RoleBrand; import com.cpop.mall.business.mapper.RoleBrandMapper; import com.cpop.mall.business.service.RoleBrandService; +import com.cpop.mall.business.vo.MallRolePageVo; +import com.cpop.system.business.bo.RoleBo; +import com.cpop.system.business.bo.RolePageBo; +import com.cpop.system.business.entity.Role; +import com.cpop.system.business.entity.RoleMenu; +import com.cpop.system.business.service.RoleMenuService; +import com.cpop.system.business.service.RoleService; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; + +import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND; import static com.cpop.mall.business.entity.table.RoleBrandTableDef.ROLE_BRAND; +import static com.cpop.mall.business.entity.table.StaffTableDef.STAFF; +import static com.cpop.system.business.entity.table.MenuTableDef.MENU; +import static com.cpop.system.business.entity.table.RoleMenuTableDef.ROLE_MENU; +import static com.cpop.system.business.entity.table.RoleTableDef.ROLE; +import static com.mybatisflex.core.query.QueryMethods.groupConcat; /** * 商城-角色-品牌id 服务层实现。 @@ -33,14 +51,58 @@ public class RoleBrandServiceImpl extends ServiceImpl getMallRolePageList(RolePageBo bo) { + //获取当前登录用户信息 + JSONObject staffInfo = SecurityUtils.getInstance().getLoginStaffInfo(); //获取分页参数 PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); - this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), + return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(), QueryWrapper.create() .select(ROLE_BRAND.ALL_COLUMNS) + //角色信息 + .select(ROLE.ROLE_NAME, ROLE.ROLE_VALUE, ROLE.STATUS, ROLE.REMARK, ROLE.ORDER_NO, ROLE.CREATE_TIME) + .select(groupConcat(MENU.ID).as(MallRolePageVo::getMenuIds)) + .leftJoin(STAFF).on(STAFF.ROLE_BRAND_ID.eq(ROLE_BRAND.ID)) + .leftJoin(ROLE).on(ROLE.ID.eq(ROLE_BRAND.ROLE_ID)) + //左联品牌表 + .leftJoin(BRAND).on(ROLE_BRAND.ID.eq(ROLE_BRAND.BRAND_ID)) + //角色菜单中甲表 + .leftJoin(ROLE_MENU).on(ROLE_MENU.ROLE_ID.eq(ROLE_BRAND.ROLE_ID)) + .leftJoin(MENU).on(MENU.ID.eq(ROLE_MENU.MENU_ID)) + .where(STAFF.ID.eq(staffInfo.getString("id"))) + .and(ROLE.ROLE_NAME.like(bo.getRoleName())) + .and(ROLE.STATUS.eq(bo.getStatus())) + .groupBy(ROLE.ID) + .orderBy(ROLE.ORDER_NO.asc()) + , MallRolePageVo.class); + } - ,RolePageVo.class); - - return null; + /** + * @descriptions 新增角色 + * @author DB + * @date 2023/10/12 10:48 + * @param bo 请求参数 + * @return: com.cpop.core.base.R + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertMallRole(RoleBo bo) { + Role role = BeanUtils.mapToClass(bo, Role.class); + SpringUtils.getBean(RoleService.class).save(role); + //将菜单信息录入中间表 + if (!bo.getMenuIds().isEmpty()) { + List roleMenus = new ArrayList<>(); + bo.getMenuIds().forEach(item -> { + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setMenuId(item); + roleMenu.setRoleId(role.getId()); + roleMenus.add(roleMenu); + }); + SpringUtils.getBean(RoleMenuService.class).saveBatch(roleMenus); + } + //录入商城角色品牌表 + RoleBrand roleBrand = new RoleBrand(); + roleBrand.setRoleId(role.getId()) + .setBrandId(bo.getBrandId()); + this.save(roleBrand); } } diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MallRolePageVo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MallRolePageVo.java index 787e348..e72fd2d 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MallRolePageVo.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/vo/MallRolePageVo.java @@ -1,5 +1,6 @@ package com.cpop.mall.business.vo; +import com.cpop.core.annontation.StringArrayConvert; import com.fasterxml.jackson.annotation.JsonFormat; import com.mybatisflex.annotation.Column; import io.swagger.annotations.ApiModel; @@ -8,8 +9,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; -import java.sql.Timestamp; -import java.util.List; +import java.time.LocalDateTime; /** * @author DB @@ -70,12 +70,13 @@ public class MallRolePageVo implements Serializable { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8") @ApiModelProperty("更新时间") - private Timestamp updateTime; + private LocalDateTime updateTime; /** * 角色所属菜单id集合 */ + @StringArrayConvert @ApiModelProperty("角色所属菜单id集合") @Column(ignore = true) - private List menuIds; + private String menuIds; } diff --git a/Cpop-System/src/main/java/com/cpop/system/business/bo/RoleBo.java b/Cpop-System/src/main/java/com/cpop/system/business/bo/RoleBo.java index 68a94dd..2ad28eb 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/bo/RoleBo.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/bo/RoleBo.java @@ -69,4 +69,10 @@ public class RoleBo implements Serializable { @ApiModelProperty("菜单集合") private List menuIds; + /** + * 当前品牌id + */ + @ApiModelProperty("菜单集合") + private String brandId; + }