角色模板

This commit is contained in:
张松
2025-12-09 09:17:34 +08:00
parent 7dcd9d471a
commit 998bf2e052
12 changed files with 374 additions and 4 deletions

View File

@@ -1,10 +1,7 @@
package com.czg.controller.admin;
import com.czg.account.dto.PageDTO;
import com.czg.account.dto.role.RoleAddDTO;
import com.czg.account.dto.role.RoleEditDTO;
import com.czg.account.dto.role.RolePermissionDTO;
import com.czg.account.dto.role.RoleRemoveDTO;
import com.czg.account.dto.role.*;
import com.czg.account.entity.SysRole;
import com.czg.account.service.SysRoleService;
import com.czg.annotation.SaAdminCheckPermission;
@@ -102,4 +99,13 @@ public class RoleController {
}
return CzgResult.success(roleService.removeById(roleRemoveDTO.id()));
}
/**
* 根据模板保存角色
*/
@PostMapping("/saveByTemplate")
public CzgResult<Boolean> saveByTemplate(@Validated @RequestBody RoleSaveTemplateDTO dto) {
return CzgResult.success(roleService.saveByTemplate(StpKit.USER.getShopId(), dto));
}
}

View File

@@ -0,0 +1,53 @@
package com.czg.controller.admin;
import com.czg.account.dto.RoleTemplateDTO;
import com.czg.market.entity.SysRoleTemplate;
import com.czg.market.service.SysRoleTemplateService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 角色模板
*/
@RestController
@RequestMapping("/admin/roleTemplate")
public class RoleTemplateController {
@Resource
private SysRoleTemplateService roleTemplateService;
/**
* 添加
*/
@PostMapping
public CzgResult<Boolean> save(@RequestBody @Validated RoleTemplateDTO dto) {
return CzgResult.success(roleTemplateService.saveInfo(dto));
}
/**
* 删除
*/
@DeleteMapping
public CzgResult<Boolean> delete(@RequestParam Long id) {
return CzgResult.success(roleTemplateService.removeById(id));
}
/**
* 编辑
*/
@PutMapping
public CzgResult<Boolean> edit(@RequestBody @Validated RoleTemplateDTO dto) {
return CzgResult.success(roleTemplateService.editInfo(dto));
}
/**
* 列表
*/
@GetMapping("/list")
public CzgResult<List<SysRoleTemplate>> list() {
return CzgResult.success(roleTemplateService.listInfo());
}
}

View File

@@ -0,0 +1,40 @@
package com.czg.account.dto;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class RoleTemplateDTO {
private Integer id;
/**
* 模板名称
*/
@NotBlank(message = "模板名称不能为空")
private String name;
/**
* 是否启用
*/
private Integer isEnable;
/**
* 排序
*/
private Integer sort;
/**
* 角色id列表
*/
private Integer roleId;
/**
* 上级id
*/
private Integer pid;
}

View File

@@ -0,0 +1,12 @@
package com.czg.account.dto.role;
import jakarta.validation.constraints.NotBlank;
import java.util.List;
public record RoleSaveTemplateDTO(
/* 角色名称 */
@NotBlank
List<Integer> roleTemplateIdList
) {
}

View File

@@ -4,6 +4,7 @@ import com.czg.account.dto.PageDTO;
import com.czg.account.dto.role.RoleAddDTO;
import com.czg.account.dto.role.RoleEditDTO;
import com.czg.account.dto.role.RolePermissionDTO;
import com.czg.account.dto.role.RoleSaveTemplateDTO;
import com.czg.account.entity.SysRole;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
@@ -29,4 +30,7 @@ public interface SysRoleService extends IService<SysRole> {
List<Long> getRoleMenu(long loginIdAsLong, Integer id, Integer type);
Boolean editPermission(long userId, RolePermissionDTO rolePermissionDTO);
Boolean saveByTemplate(long shopId, RoleSaveTemplateDTO dto);
}

View File

@@ -0,0 +1,67 @@
package com.czg.market.dto;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.experimental.Accessors;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 角色模板 实体类。
*
* @author zs
* @since 2025-12-08
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class SysRoleTemplateDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Integer id;
/**
* 模板名称
*/
private String name;
/**
* 是否启用
*/
private Integer isEnable;
/**
* 排序
*/
private Integer sort;
/**
* 操作人
*/
private String opUser;
/**
* 创建人
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 修改时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 角色id列表
*/
private String roleIdList;
}

View File

@@ -0,0 +1,79 @@
package com.czg.market.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 角色模板 实体类。
*
* @author zs
* @since 2025-12-08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("sys_role_template")
public class SysRoleTemplate implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 模板名称
*/
private String name;
/**
* 是否启用
*/
private Integer isEnable;
/**
* 排序
*/
private Integer sort;
/**
* 操作人
*/
private String opUser;
private Long opSysUserId;
/**
* 创建人
*/
@Column(onInsertValue = "now()")
private LocalDateTime createTime;
/**
* 修改时间
*/
@Column(onInsertValue = "now()", onUpdateValue = "now()")
private LocalDateTime updateTime;
/**
* 角色id列表
*/
private String roleId;
/**
* 上级id
*/
private Integer pid;
}

View File

@@ -0,0 +1,22 @@
package com.czg.market.service;
import com.czg.account.dto.RoleTemplateDTO;
import com.mybatisflex.core.service.IService;
import com.czg.market.entity.SysRoleTemplate;
import java.util.List;
/**
* 角色模板 服务层。
*
* @author zs
* @since 2025-12-08
*/
public interface SysRoleTemplateService extends IService<SysRoleTemplate> {
Boolean saveInfo(RoleTemplateDTO dto);
List<SysRoleTemplate> listInfo();
Boolean editInfo(RoleTemplateDTO dto);
}

View File

@@ -9,18 +9,22 @@ import com.czg.account.dto.menu.MenuApiInfoItemDTO;
import com.czg.account.dto.role.RoleAddDTO;
import com.czg.account.dto.role.RoleEditDTO;
import com.czg.account.dto.role.RolePermissionDTO;
import com.czg.account.dto.role.RoleSaveTemplateDTO;
import com.czg.account.entity.*;
import com.czg.account.service.CashMenuService;
import com.czg.account.service.SysMenuService;
import com.czg.account.service.SysRoleService;
import com.czg.account.service.SysRolesMenusService;
import com.czg.exception.CzgException;
import com.czg.market.entity.SysRoleTemplate;
import com.czg.market.service.SysRoleTemplateService;
import com.czg.sa.StpKit;
import com.czg.service.account.mapper.SysRoleMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -43,6 +47,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
private SysRolesMenusService sysRolesMenusService;
@Resource
private CashMenuService cashMenuService;
@Resource
@Lazy
private SysRoleTemplateService roleTemplateService;
@Override
public List<SysRole> getByUserId(Long id) {
@@ -237,6 +244,18 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
throw new CzgException("保存失败");
}
@Override
public Boolean saveByTemplate(long shopId, RoleSaveTemplateDTO dto) {
roleTemplateService.list(new QueryWrapper().in(SysRoleTemplate::getId, dto.roleTemplateIdList())).forEach(item -> {
SysRole role = getById(item.getRoleId());
role.setShopId(shopId);
role.setCreateTime(null);
role.setId(null);
save(role);
});
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean edit(RoleEditDTO roleEditDTO) {

View File

@@ -0,0 +1,14 @@
package com.czg.service.market.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.SysRoleTemplate;
/**
* 角色模板 映射层。
*
* @author zs
* @since 2025-12-08
*/
public interface SysRoleTemplateMapper extends BaseMapper<SysRoleTemplate> {
}

View File

@@ -0,0 +1,47 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.czg.account.dto.RoleTemplateDTO;
import com.czg.account.service.SysRoleService;
import com.czg.sa.StpKit;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.market.entity.SysRoleTemplate;
import com.czg.market.service.SysRoleTemplateService;
import com.czg.service.market.mapper.SysRoleTemplateMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 角色模板 服务层实现。
*
* @author zs
* @since 2025-12-08
*/
@Service
public class SysRoleTemplateServiceImpl extends ServiceImpl<SysRoleTemplateMapper, SysRoleTemplate> implements SysRoleTemplateService{
@Resource
private SysRoleService roleService;
@Override
public Boolean saveInfo(RoleTemplateDTO dto) {
SysRoleTemplate roleTemplate = BeanUtil.copyProperties(dto, SysRoleTemplate.class, "roleIdList");
roleTemplate.setOpUser(StpKit.USER.getAccount());
roleTemplate.setOpSysUserId(StpKit.USER.getLoginIdAsLong());
return save(roleTemplate);
}
@Override
public List<SysRoleTemplate> listInfo() {
return list();
}
@Override
public Boolean editInfo(RoleTemplateDTO dto) {
SysRoleTemplate roleTemplate = BeanUtil.copyProperties(dto, SysRoleTemplate.class);
roleTemplate.setOpUser(StpKit.USER.getAccount());
roleTemplate.setOpSysUserId(StpKit.USER.getLoginIdAsLong());
return updateById(roleTemplate);
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.market.mapper.SysRoleTemplateMapper">
</mapper>