From 73f529c5bd47ae5aa308eb1f1994513c4f8327fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 9 Dec 2025 09:17:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/controller/admin/RoleController.java | 14 +++- .../admin/RoleTemplateController.java | 53 +++++++++++++ .../com/czg/account/dto/RoleTemplateDTO.java | 40 ++++++++++ .../account/dto/role/RoleSaveTemplateDTO.java | 12 +++ .../czg/account/service/SysRoleService.java | 4 + .../czg/market/dto/SysRoleTemplateDTO.java | 67 ++++++++++++++++ .../czg/market/entity/SysRoleTemplate.java | 79 +++++++++++++++++++ .../service/SysRoleTemplateService.java | 22 ++++++ .../service/impl/SysRoleServiceImpl.java | 19 +++++ .../market/mapper/SysRoleTemplateMapper.java | 14 ++++ .../impl/SysRoleTemplateServiceImpl.java | 47 +++++++++++ .../mapper/SysRoleTemplateMapper.xml | 7 ++ 12 files changed, 374 insertions(+), 4 deletions(-) create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/RoleTemplateController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/RoleTemplateDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/role/RoleSaveTemplateDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/dto/SysRoleTemplateDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/entity/SysRoleTemplate.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/service/SysRoleTemplateService.java create mode 100644 cash-service/market-service/src/main/java/com/czg/service/market/mapper/SysRoleTemplateMapper.java create mode 100644 cash-service/market-service/src/main/java/com/czg/service/market/service/impl/SysRoleTemplateServiceImpl.java create mode 100644 cash-service/market-service/src/main/resources/mapper/SysRoleTemplateMapper.xml diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleController.java index c09767af7..f67b62856 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleController.java @@ -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 saveByTemplate(@Validated @RequestBody RoleSaveTemplateDTO dto) { + return CzgResult.success(roleService.saveByTemplate(StpKit.USER.getShopId(), dto)); + } + } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleTemplateController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleTemplateController.java new file mode 100644 index 000000000..3d9d52051 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/RoleTemplateController.java @@ -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 save(@RequestBody @Validated RoleTemplateDTO dto) { + return CzgResult.success(roleTemplateService.saveInfo(dto)); + } + + /** + * 删除 + */ + @DeleteMapping + public CzgResult delete(@RequestParam Long id) { + return CzgResult.success(roleTemplateService.removeById(id)); + } + + /** + * 编辑 + */ + @PutMapping + public CzgResult edit(@RequestBody @Validated RoleTemplateDTO dto) { + return CzgResult.success(roleTemplateService.editInfo(dto)); + } + + /** + * 列表 + */ + @GetMapping("/list") + public CzgResult> list() { + return CzgResult.success(roleTemplateService.listInfo()); + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/RoleTemplateDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/RoleTemplateDTO.java new file mode 100644 index 000000000..5c3ddf070 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/RoleTemplateDTO.java @@ -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; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/role/RoleSaveTemplateDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/role/RoleSaveTemplateDTO.java new file mode 100644 index 000000000..26635fa4e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/role/RoleSaveTemplateDTO.java @@ -0,0 +1,12 @@ +package com.czg.account.dto.role; + +import jakarta.validation.constraints.NotBlank; + +import java.util.List; + +public record RoleSaveTemplateDTO( + /* 角色名称 */ + @NotBlank + List roleTemplateIdList +) { +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysRoleService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysRoleService.java index ac486b313..15e94ea69 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysRoleService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysRoleService.java @@ -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 { List getRoleMenu(long loginIdAsLong, Integer id, Integer type); Boolean editPermission(long userId, RolePermissionDTO rolePermissionDTO); + + Boolean saveByTemplate(long shopId, RoleSaveTemplateDTO dto); + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/SysRoleTemplateDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/SysRoleTemplateDTO.java new file mode 100644 index 000000000..d21e32140 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/SysRoleTemplateDTO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/SysRoleTemplate.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/SysRoleTemplate.java new file mode 100644 index 000000000..44fc947b4 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/SysRoleTemplate.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/SysRoleTemplateService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/SysRoleTemplateService.java new file mode 100644 index 000000000..901d03938 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/SysRoleTemplateService.java @@ -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 { + + Boolean saveInfo(RoleTemplateDTO dto); + + List listInfo(); + + Boolean editInfo(RoleTemplateDTO dto); +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java index 2154d1439..8ab1e5cbe 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java @@ -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 impl private SysRolesMenusService sysRolesMenusService; @Resource private CashMenuService cashMenuService; + @Resource + @Lazy + private SysRoleTemplateService roleTemplateService; @Override public List getByUserId(Long id) { @@ -237,6 +244,18 @@ public class SysRoleServiceImpl extends ServiceImpl 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) { diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/mapper/SysRoleTemplateMapper.java b/cash-service/market-service/src/main/java/com/czg/service/market/mapper/SysRoleTemplateMapper.java new file mode 100644 index 000000000..6b954b139 --- /dev/null +++ b/cash-service/market-service/src/main/java/com/czg/service/market/mapper/SysRoleTemplateMapper.java @@ -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 { + +} diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/SysRoleTemplateServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/SysRoleTemplateServiceImpl.java new file mode 100644 index 000000000..b1340152f --- /dev/null +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/SysRoleTemplateServiceImpl.java @@ -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 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 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); + } +} diff --git a/cash-service/market-service/src/main/resources/mapper/SysRoleTemplateMapper.xml b/cash-service/market-service/src/main/resources/mapper/SysRoleTemplateMapper.xml new file mode 100644 index 000000000..9f76411e3 --- /dev/null +++ b/cash-service/market-service/src/main/resources/mapper/SysRoleTemplateMapper.xml @@ -0,0 +1,7 @@ + + + + +