refactor(system): 重构系统模块的VO类和定时任务处理

This commit is contained in:
2026-01-07 19:18:05 +08:00
parent 394d1409e1
commit da6fe40960
44 changed files with 765 additions and 207 deletions
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.framework.operalog.OperationLog;
@@ -86,7 +87,7 @@ public class SystemQuartzJobController {
@ApiOperation("新增定时任务")
@PostMapping(value = "/createQuartzJob")
@PreAuthorize("@el.check('quartzJob:add')")
public ResponseEntity<Void> createQuartzJob(@Validated @RequestBody SystemQuartzJobTb args) {
public ResponseEntity<Void> createQuartzJob(@Validated @RequestBody SystemQuartzJobVo args) {
systemQuartzJobService.createJob(args);
return ResponseEntity.ok(null);
}
@@ -62,6 +62,5 @@ public class SystemQuartzJobTb extends KitBaseUserTimeTb {
@NotBlank
@ApiModelProperty(value = "备注")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String
description;
private String description;
}
@@ -1,17 +1,71 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemDeptVo extends SystemDeptTb {
public class SystemDeptVo extends KitBaseUserTimeTb {
@NotNull(groups = Update.class)
@ApiModelProperty(value = "ID", hidden = true)
private Long id;
@ApiModelProperty(value = "排序")
private Integer deptSort;
@NotBlank
@ApiModelProperty(value = "部门名称")
private String name;
@NotNull
@ApiModelProperty(value = "是否启用")
private Boolean enabled;
@ApiModelProperty(value = "上级部门")
private Long pid;
@ApiModelProperty(value = "子节点数目", hidden = true)
private Integer subCount = 0;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SystemDeptVo dept = (SystemDeptVo) o;
return Objects.equals(id, dept.id) && Objects.equals(name, dept.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
@ApiModelProperty(value = "是否有子节点")
public Boolean getHasChildren() {
return subCount > 0;
}
@ApiModelProperty(value = "是否为叶子")
public Boolean getLeaf() {
return subCount <= 0;
}
@ApiModelProperty(value = "标签名称")
public String getLabel() {
return name;
}
/**
* 扩展字段
*/
@ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子部门")
@@ -15,16 +15,31 @@
*/
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDictDetailTb;
import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.system.dal.dataobject.SystemDictTb;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemDictDetailVo extends SystemDictDetailTb {
public class SystemDictDetailVo extends KitBaseUserTimeTb {
@NotNull(groups = Update.class)
@ApiModelProperty(value = "ID", hidden = true)
private Long id;
@ApiModelProperty(hidden = true)
private Long dictId;
@ApiModelProperty(value = "字典标签")
private String label;
@ApiModelProperty(value = "字典值")
private String value;
@ApiModelProperty(value = "排序")
private Integer dictSort = 999;
/**
* 扩展字段
*/
@ApiModelProperty(value = "字典")
private SystemDictTb dict;
}
@@ -1,19 +1,84 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
public class SystemMenuVo extends SystemMenuTb {
public class SystemMenuVo extends KitBaseUserTimeTb {
@NotNull(groups = {Update.class})
@ApiModelProperty(value = "ID", hidden = true)
private Long id;
@ApiModelProperty(value = "菜单标题")
private String title;
@ApiModelProperty(value = "菜单组件名称")
private String componentName;
@ApiModelProperty(value = "排序")
private Integer menuSort = 999;
@ApiModelProperty(value = "组件路径")
private String component;
@ApiModelProperty(value = "路由地址")
private String path;
@ApiModelProperty(value = "菜单类型,目录、菜单、按钮")
private Integer type;
@ApiModelProperty(value = "权限标识")
private String permission;
@ApiModelProperty(value = "菜单图标")
private String icon;
@ApiModelProperty(value = "缓存")
private Boolean cache;
@ApiModelProperty(value = "是否隐藏")
private Boolean hidden;
@ApiModelProperty(value = "上级菜单")
private Long pid;
@ApiModelProperty(value = "子节点数目", hidden = true)
private Integer subCount = 0;
@ApiModelProperty(value = "外链菜单")
private Boolean iFrame;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SystemMenuVo menu = (SystemMenuVo) o;
return Objects.equals(id, menu.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@ApiModelProperty(value = "是否有子节点")
public Boolean getHasChildren() {
return subCount > 0;
}
@ApiModelProperty(value = "是否为叶子")
public Boolean getLeaf() {
return subCount <= 0;
}
@ApiModelProperty(value = "标签名称")
public String getLabel() {
return title;
}
/**
* 附加属性
*/
@ApiModelProperty(value = "菜单角色")
private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子菜单")
@@ -15,13 +15,43 @@
*/
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemOssStorageTb;
import cn.odboy.base.KitBaseUserTimeTb;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemOssStorageVo extends SystemOssStorageTb {
public class SystemOssStorageVo extends KitBaseUserTimeTb {
@ApiModelProperty("ID")
private Long id;
@ApiModelProperty("类型,比如minio")
private String serviceType;
@ApiModelProperty("服务地址")
private String endpoint;
@ApiModelProperty("存储桶名称")
private String bucketName;
@ApiModelProperty("完整文件名称")
private String fileName;
@ApiModelProperty("文件大小, 单位:字节")
private Long fileSize;
@ApiModelProperty("文件类型")
private String fileMime;
@ApiModelProperty("短文件名")
private String filePrefix;
@ApiModelProperty("文件后缀")
private String fileSuffix;
@ApiModelProperty("文件md5")
private String fileMd5;
@ApiModelProperty("文件链接")
private String fileUrl;
@ApiModelProperty("文件编码")
private String fileCode;
@ApiModelProperty("对象路径")
private String objectName;
/**
* 扩展字段
*/
private String fileSizeDesc;
}
@@ -1,14 +1,48 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.base.KitBaseUserTimeTb;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemQuartzJobVo extends SystemQuartzJobTb {
public class SystemQuartzJobVo extends KitBaseUserTimeTb {
public static final String JOB_KEY = "JOB_KEY";
@NotNull(groups = {Update.class})
private Long id;
@ApiModelProperty(value = "定时器名称")
private String jobName;
@NotBlank
@ApiModelProperty(value = "Bean名称")
private String beanName;
@NotBlank
@ApiModelProperty(value = "方法名称")
private String methodName;
@ApiModelProperty(value = "参数")
private String params;
@NotBlank
@ApiModelProperty(value = "cron表达式")
private String cronExpression;
@ApiModelProperty(value = "状态:暂停或启动")
private Boolean isPause = false;
@ApiModelProperty(value = "负责人")
private String personInCharge;
@ApiModelProperty(value = "报警邮箱")
private String email;
@ApiModelProperty(value = "子任务")
private String subTask;
@ApiModelProperty(value = "失败后暂停")
private Boolean pauseAfterFailure;
@NotBlank
@ApiModelProperty(value = "备注")
private String description;
/**
* 扩展字段
*/
@ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid;
}
@@ -1,21 +1,59 @@
package cn.odboy.system.dal.model;
import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.system.constant.SystemDataScopeEnum;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb;
import io.swagger.annotations.ApiModelProperty;
import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemRoleVo extends SystemRoleTb {
public class SystemRoleVo extends KitBaseUserTimeTb {
@NotNull(groups = {Update.class})
@ApiModelProperty(value = "ID", hidden = true)
private Long id;
@NotBlank
@ApiModelProperty(value = "名称", hidden = true)
private String name;
@ApiModelProperty(value = "数据权限,全部 、 本级 、 自定义")
private String dataScope = SystemDataScopeEnum.THIS_LEVEL.getValue();
@ApiModelProperty(value = "级别,数值越小,级别越大")
private Integer level = 3;
@ApiModelProperty(value = "描述")
private String description;
/**
* 扩展字段
*/
@ApiModelProperty(value = "用户", hidden = true)
private Set<SystemUserTb> users;
@ApiModelProperty(value = "菜单", hidden = true)
private Set<SystemMenuVo> menus;
@ApiModelProperty(value = "部门", hidden = true)
private Set<SystemDeptTb> depts;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SystemRoleVo role = (SystemRoleVo) o;
return Objects.equals(id, role.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
@@ -19,7 +19,6 @@ import cn.odboy.base.KitObject;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import java.util.Set;
import lombok.Data;
@@ -36,7 +35,6 @@ public class SystemSimpleUserVo extends KitObject {
@ApiModelProperty(value = "用户岗位")
private Set<SystemJobTb> jobs;
private Long deptId;
@TableField(exist = false)
private SystemDeptTb dept;
@ApiModelProperty(value = "用户名称")
private String username;
@@ -1,11 +1,15 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -13,10 +17,65 @@ import lombok.Setter;
@Setter
public class SystemUserVo extends SystemUserTb {
@NotNull(groups = Update.class)
@ApiModelProperty(value = "ID", hidden = true)
private Long id;
@ApiModelProperty(hidden = true)
private Long deptId;
@NotBlank
@ApiModelProperty(value = "用户名称")
private String username;
@NotBlank
@ApiModelProperty(value = "用户昵称")
private String nickName;
@Email
@NotBlank
@ApiModelProperty(value = "邮箱")
private String email;
@NotBlank
@ApiModelProperty(value = "电话号码")
private String phone;
@ApiModelProperty(value = "用户性别")
private String gender;
@ApiModelProperty(value = "头像真实名称", hidden = true)
private String avatarName;
@ApiModelProperty(value = "头像存储的路径", hidden = true)
private String avatarPath;
@ApiModelProperty(value = "密码")
private String password;
@NotNull
@ApiModelProperty(value = "是否启用")
private Boolean enabled;
@ApiModelProperty(value = "是否为admin账号", hidden = true)
private Boolean isAdmin = false;
@ApiModelProperty(value = "最后修改密码的时间", hidden = true)
private Date pwdResetTime;
/**
* 扩展字段
*/
@ApiModelProperty(value = "用户部门")
private SystemDeptTb dept;
private SystemDeptVo dept;
@ApiModelProperty(value = "用户角色")
private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "用户岗位")
private Set<SystemJobTb> jobs;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SystemUserVo user = (SystemUserVo) o;
return Objects.equals(id, user.id) && Objects.equals(username, user.username);
}
@Override
public int hashCode() {
return Objects.hash(id, username);
}
}
@@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.framework.quartz;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.system.service.SystemQuartzJobService;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
@@ -41,7 +40,7 @@ public class ActiveJobRegister implements ApplicationRunner {
*/
@Override
public void run(ApplicationArguments applicationArguments) {
List<SystemQuartzJobTb> quartzJobs = systemQuartzJobService.listEnableQuartzJob();
List<SystemQuartzJobVo> quartzJobs = systemQuartzJobService.listEnableQuartzJob();
quartzJobs.forEach(quartzManage::addJob);
log.info("Timing task injection complete");
}
@@ -114,7 +114,7 @@ public class ExecutionJobBean extends QuartzJobBean {
}
}
private SystemSendEmailArgs taskAlarm(SystemQuartzJobTb quartzJob, String msg) {
private SystemSendEmailArgs taskAlarm(SystemQuartzJobVo quartzJob, String msg) {
SystemSendEmailArgs sendEmailRequest = new SystemSendEmailArgs();
sendEmailRequest.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!");
Map<String, Object> data = new HashMap<>(16);
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.framework.quartz;
import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import jakarta.annotation.Resource;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import java.util.Date;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
@@ -40,32 +40,26 @@ import org.springframework.stereotype.Component;
public class QuartzManage {
private static final String JOB_NAME = "TASK_";
@Resource
private Scheduler scheduler;
public void addJob(SystemQuartzJobTb quartzJob) {
public void addJob(SystemQuartzJobVo quartzJob) {
try {
// 构建job信息
JobDetail jobDetail =
JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build();
// 通过触发器名和cron 表达式创建 Trigger
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(JOB_NAME + quartzJob.getId()).startNow()
.withSchedule(CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression())).build();
trigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob);
// 重置启动时间
((CronTriggerImpl) trigger).setStartTime(new Date());
// 执行定时任务,如果是持久化的,这里会报错,捕获输出
try {
scheduler.scheduleJob(jobDetail, trigger);
} catch (ObjectAlreadyExistsException e) {
log.warn("定时任务已存在,跳过加载");
}
// 暂停任务
if (quartzJob.getIsPause()) {
pauseJob(quartzJob);
@@ -81,7 +75,7 @@ public class QuartzManage {
*
* @param quartzJob /
*/
public void updateJobCron(SystemQuartzJobTb quartzJob) {
public void updateJobCron(SystemQuartzJobVo quartzJob) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -95,7 +89,6 @@ public class QuartzManage {
// 重置启动时间
((CronTriggerImpl) trigger).setStartTime(new Date());
trigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob);
scheduler.rescheduleJob(triggerKey, trigger);
// 暂停任务
if (quartzJob.getIsPause()) {
@@ -128,7 +121,7 @@ public class QuartzManage {
*
* @param quartzJob /
*/
public void resumeJob(SystemQuartzJobTb quartzJob) {
public void resumeJob(SystemQuartzJobVo quartzJob) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -149,7 +142,7 @@ public class QuartzManage {
*
* @param quartzJob /
*/
public void runJobNow(SystemQuartzJobTb quartzJob) {
public void runJobNow(SystemQuartzJobVo quartzJob) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -172,7 +165,7 @@ public class QuartzManage {
*
* @param quartzJob /
*/
public void pauseJob(SystemQuartzJobTb quartzJob) {
public void pauseJob(SystemQuartzJobVo quartzJob) {
try {
JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId());
scheduler.pauseJob(jobKey);
@@ -18,7 +18,6 @@ package cn.odboy.system.service;
import cn.hutool.core.collection.CollUtil;
import cn.odboy.system.constant.SystemDataScopeEnum;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.model.SystemUserVo;
@@ -55,7 +54,7 @@ public class SystemDataService {
// 查询用户角色
List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId());
// 获取对应的部门ID
for (SystemRoleTb role : roleList) {
for (SystemRoleVo role : roleList) {
SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope());
switch (Objects.requireNonNull(dataScopeEnum)) {
case THIS_LEVEL:
@@ -78,7 +77,7 @@ public class SystemDataService {
* @param role 角色
* @return 数据权限ID
*/
private List<Long> queryCustomDataPermissionByArgs(List<Long> deptIds, SystemRoleTb role) {
private List<Long> queryCustomDataPermissionByArgs(List<Long> deptIds, SystemRoleVo role) {
List<SystemDeptTb> deptList = systemRoleDeptService.listDeptByRoleId(role.getId());
for (SystemDeptTb dept : deptList) {
deptIds.add(dept.getId());
@@ -83,7 +83,7 @@ public class SystemDeptService {
@Transactional(rollbackFor = Exception.class)
public void updateDeptById(SystemDeptTb args) {
// 旧的部门
Long oldPid = this.getDeptById(args.getId()).getPid();
Long oldPid = this.getDeptVoById(args.getId()).getPid();
Long newPid = args.getPid();
if (args.getPid() != null && args.getId().equals(args.getPid())) {
throw new BadRequestException("上级不能为自己");
@@ -103,10 +103,10 @@ public class SystemDeptService {
@Transactional(rollbackFor = Exception.class)
public void deleteDeptByIds(Set<Long> ids) {
// 获取部门, 和其所有子部门
Set<SystemDeptTb> depts = this.traverseDeptByIdWithPids(ids);
Set<SystemDeptVo> depts = this.traverseDeptByIdWithPids(ids);
// 验证是否被角色或用户关联
this.verifyBindRelationByIds(depts);
for (SystemDeptTb dept : depts) {
for (SystemDeptVo dept : depts) {
systemDeptMapper.deleteById(dept.getId());
this.updateDeptSubCnt(dept.getPid());
}
@@ -211,8 +211,8 @@ public class SystemDeptService {
* @param id /
* @return /
*/
public SystemDeptTb getDeptById(Long id) {
return systemDeptMapper.selectById(id);
public SystemDeptVo getDeptVoById(Long id) {
return KitBeanUtil.copyToClass(systemDeptMapper.selectById(id), SystemDeptVo.class);
}
/**
@@ -222,8 +222,8 @@ public class SystemDeptService {
* @param depts /
* @return /
*/
private Set<SystemDeptTb> queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptTb> depts) {
for (SystemDeptTb dept : deptTbList) {
private Set<SystemDeptVo> queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptVo> depts) {
for (SystemDeptVo dept : deptTbList) {
depts.add(dept);
List<SystemDeptVo> deptList = this.listDeptByPid(dept.getId());
if (CollUtil.isNotEmpty(deptList)) {
@@ -254,13 +254,13 @@ public class SystemDeptService {
* @param deptList /
* @return /
*/
private List<SystemDeptVo> querySuperiorDeptByPid(SystemDeptTb dept, List<SystemDeptVo> deptList) {
private List<SystemDeptVo> querySuperiorDeptByPid(SystemDeptVo dept, List<SystemDeptVo> deptList) {
if (dept.getPid() == null) {
deptList.addAll(this.listRootDept());
return deptList;
}
deptList.addAll(this.listDeptByPid(dept.getPid()));
return querySuperiorDeptByPid(this.getDeptById(dept.getPid()), deptList);
return querySuperiorDeptByPid(this.getDeptVoById(dept.getPid()), deptList);
}
private List<SystemDeptVo> listRootDept() {
@@ -278,7 +278,7 @@ public class SystemDeptService {
Set<SystemDeptVo> deptSet1 = new LinkedHashSet<>();
for (Long id : ids) {
// 同级数据
SystemDeptTb dept = this.getDeptById(id);
SystemDeptVo dept = this.getDeptVoById(id);
// 上级数据
List<SystemDeptVo> depts = this.querySuperiorDeptByPid(dept, new ArrayList<>());
if (exclude) {
@@ -314,7 +314,7 @@ public class SystemDeptService {
}
if (isChild) {
deptSet.add(dept);
} else if (dept.getPid() != null && !deptNames.contains(this.getDeptById(dept.getPid()).getName())) {
} else if (dept.getPid() != null && !deptNames.contains(this.getDeptVoById(dept.getPid()).getName())) {
deptSet.add(dept);
}
}
@@ -332,8 +332,8 @@ public class SystemDeptService {
*
* @param deptSet /
*/
public void verifyBindRelationByIds(Set<SystemDeptTb> deptSet) {
Set<Long> deptIds = deptSet.stream().map(SystemDeptTb::getId).collect(Collectors.toSet());
public void verifyBindRelationByIds(Set<SystemDeptVo> deptSet) {
Set<Long> deptIds = deptSet.stream().map(SystemDeptVo::getId).collect(Collectors.toSet());
if (systemUserDeptService.countUserByDeptIds(deptIds) > 0) {
throw new BadRequestException("所选部门存在用户关联,请解除后再试!");
}
@@ -353,11 +353,11 @@ public class SystemDeptService {
*
* @param ids /
*/
public Set<SystemDeptTb> traverseDeptByIdWithPids(Set<Long> ids) {
Set<SystemDeptTb> depts = new HashSet<>();
public Set<SystemDeptVo> traverseDeptByIdWithPids(Set<Long> ids) {
Set<SystemDeptVo> depts = new HashSet<>();
for (Long id : ids) {
// 根部门
depts.add(this.getDeptById(id));
depts.add(this.getDeptVoById(id));
// 子部门
List<SystemDeptVo> deptList = this.listDeptByPid(id);
if (CollectionUtil.isNotEmpty(deptList)) {
@@ -109,7 +109,7 @@ public class SystemDictDetailService {
*/
public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, Page<SystemDictDetailTb> page) {
IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> KitBeanUtil.copyToClass(i, SystemDictDetailVo.class));
List<Long> dictIds = iPage.getRecords().stream().map(SystemDictDetailTb::getDictId).collect(Collectors.toList());
List<Long> dictIds = iPage.getRecords().stream().map(SystemDictDetailVo::getDictId).collect(Collectors.toList());
Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i));
for (SystemDictDetailVo record : iPage.getRecords()) {
record.setDict(id2ItemMap.get(record.getDictId()));
@@ -23,7 +23,6 @@ import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.constant.SystemYesOrNoChConst;
import cn.odboy.system.constant.TransferProtocolConst;
import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemMenuExportRowVo;
import cn.odboy.system.dal.model.SystemMenuMetaVo;
import cn.odboy.system.dal.model.SystemMenuRouterVo;
@@ -160,12 +159,12 @@ public class SystemMenuService {
menuSet = this.queryChildMenuByArgs(menuList, menuSet);
}
List<Long> menuIds =
menuSet.stream().map(SystemMenuTb::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
menuSet.stream().map(SystemMenuVo::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(menuIds)) {
systemRoleMenuService.deleteRoleMenuByMenuIds(menuIds);
systemMenuMapper.deleteByIds(menuIds);
}
for (SystemMenuTb menu : menuSet) {
for (SystemMenuVo menu : menuSet) {
this.updateMenuSubCnt(menu.getPid());
}
}
@@ -222,7 +221,7 @@ public class SystemMenuService {
*/
public List<SystemMenuVo> listMenuByUserId(Long currentUserId) {
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(currentUserId);
Set<Long> roleIds = roles.stream().map(SystemRoleTb::getId).collect(Collectors.toSet());
Set<Long> roleIds = roles.stream().map(SystemRoleVo::getId).collect(Collectors.toSet());
return new ArrayList<>(systemRoleMenuService.queryMenuByRoleIds(roleIds));
}
@@ -270,7 +269,7 @@ public class SystemMenuService {
* @param menus /
* @return /
*/
public List<SystemMenuVo> querySuperiorMenuByArgs(SystemMenuTb menu, List<SystemMenuVo> menus) {
public List<SystemMenuVo> querySuperiorMenuByArgs(SystemMenuVo menu, List<SystemMenuVo> menus) {
if (menu.getPid() == null) {
menus.addAll(this.listRootMenu());
return menus;
@@ -364,7 +363,7 @@ public class SystemMenuService {
* @param menuVo /
* @return /
*/
private SystemMenuRouterVo getMenuVo(SystemMenuTb menu, SystemMenuRouterVo menuVo) {
private SystemMenuRouterVo getMenuVo(SystemMenuVo menu, SystemMenuRouterVo menuVo) {
SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo();
menuVo1.setMeta(menuVo.getMeta());
// 非外链
@@ -435,7 +434,7 @@ public class SystemMenuService {
List<SystemMenuVo> menuList = this.listMenuByPid(id);
menuSet.add(this.getMenuVoById(id));
menuSet = this.queryChildMenuByArgs(menuList, menuSet);
return menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet());
return menuSet.stream().map(SystemMenuVo::getId).collect(Collectors.toSet());
}
public List<SystemMenuVo> listMenuSuperior(List<Long> ids) {
@@ -443,7 +442,7 @@ public class SystemMenuService {
List<SystemMenuVo> systemMenuTbs;
if (CollectionUtil.isNotEmpty(ids)) {
menus = new LinkedHashSet<>(this.listMenuByIds(ids));
for (SystemMenuTb menu : menus) {
for (SystemMenuVo menu : menus) {
List<SystemMenuVo> menuList = this.querySuperiorMenuByArgs(menu, new ArrayList<>());
for (SystemMenuVo data : menuList) {
if (data.getId().equals(menu.getPid())) {
@@ -79,7 +79,7 @@ public class SystemQuartzJobService {
* @param args /
*/
@Transactional(rollbackFor = Exception.class)
public void createJob(SystemQuartzJobTb args) {
public void createJob(SystemQuartzJobVo args) {
if (args.getId() != null) {
throw new BadRequestException("无效参数id");
}
@@ -88,7 +88,8 @@ public class SystemQuartzJobService {
if (!CronExpression.isValidExpression(args.getCronExpression())) {
throw new BadRequestException("cron表达式格式错误");
}
systemQuartzJobMapper.insert(args);
SystemQuartzJobTb record = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insert(record);
quartzManage.addJob(args);
}
@@ -110,9 +111,10 @@ public class SystemQuartzJobService {
throw new BadRequestException("子任务中不能添加当前任务ID");
}
}
SystemQuartzJobTb quartzJob = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(quartzJob);
quartzManage.updateJobCron(quartzJob);
SystemQuartzJobTb jobTb = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(jobTb);
SystemQuartzJobVo jobVo = KitBeanUtil.copyToClass(args, SystemQuartzJobVo.class);
quartzManage.updateJobCron(jobVo);
}
/**
@@ -121,7 +123,7 @@ public class SystemQuartzJobService {
* @param quartzJob /
*/
@Transactional(rollbackFor = Exception.class)
public void switchQuartzJobStatus(SystemQuartzJobTb quartzJob) {
public void switchQuartzJobStatus(SystemQuartzJobVo quartzJob) {
// 置换暂停状态
if (quartzJob.getIsPause()) {
quartzManage.resumeJob(quartzJob);
@@ -130,7 +132,8 @@ public class SystemQuartzJobService {
quartzManage.pauseJob(quartzJob);
quartzJob.setIsPause(true);
}
systemQuartzJobMapper.insertOrUpdate(quartzJob);
SystemQuartzJobTb quartzJobTb = KitBeanUtil.copyToClass(quartzJob, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(quartzJobTb);
}
/**
@@ -138,7 +141,7 @@ public class SystemQuartzJobService {
*
* @param quartzJob /
*/
public void startQuartzJob(SystemQuartzJobTb quartzJob) {
public void startQuartzJob(SystemQuartzJobVo quartzJob) {
quartzManage.runJobNow(quartzJob);
}
@@ -263,31 +266,18 @@ public class SystemQuartzJobService {
return systemQuartzLogMapper.selectList(wrapper);
}
public SystemQuartzJobTb getQuartzJobById(Long id) {
return systemQuartzJobMapper.selectById(id);
public SystemQuartzJobVo getQuartzJobById(Long id) {
return KitBeanUtil.copyToClass(systemQuartzJobMapper.selectById(id), SystemQuartzJobVo.class);
}
public List<SystemQuartzJobTb> listEnableQuartzJob() {
public List<SystemQuartzJobVo> listEnableQuartzJob() {
LambdaQueryWrapper<SystemQuartzJobTb> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SystemQuartzJobTb::getIsPause, 0);
return systemQuartzJobMapper.selectList(wrapper);
return KitBeanUtil.copyToList(systemQuartzJobMapper.selectList(wrapper), SystemQuartzJobVo.class);
}
public void exportQuartzJobXlsx(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
List<SystemQuartzJobTb> systemQuartzJobTbs = this.queryQuartzJobByArgs(args);
// KitXlsxExportUtil.exportFile(response, "定时任务数据", systemQuartzJobTbs, SystemQuartzJobExportRowVo.class,
// (dataObject) -> {
// SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo();
// rowVo.setJobName(dataObject.getJobName());
// rowVo.setBeanName(dataObject.getBeanName());
// rowVo.setMethodName(dataObject.getMethodName());
// rowVo.setParams(dataObject.getParams());
// rowVo.setCronExpression(dataObject.getCronExpression());
// rowVo.setIsPause(dataObject.getIsPause() ? "暂停中" : "运行中");
// rowVo.setDescription(dataObject.getDescription());
// rowVo.setCreateTime(dataObject.getCreateTime());
// return CollUtil.newArrayList(rowVo);
// });
List<SystemQuartzJobExportRowVo> rowVos = new ArrayList<>();
for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) {
SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo();
@@ -21,7 +21,6 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemCreateRoleArgs;
@@ -94,7 +93,7 @@ public class SystemRoleService {
@Transactional(rollbackFor = Exception.class)
public void updateRoleById(SystemRoleVo args) {
checkRoleLevels(args.getLevel());
SystemRoleVo role = this.getRoleVoById(args.getId());
SystemRoleTb role = this.getRoleTbById(args.getId());
SystemRoleTb role1 = this.getRoleByName(args.getName());
if (role1 != null && !role1.getId().equals(role.getId())) {
throw new BadRequestException("角色名称已存在");
@@ -102,7 +101,6 @@ public class SystemRoleService {
role.setName(args.getName());
role.setDescription(args.getDescription());
role.setDataScope(args.getDataScope());
role.setDepts(args.getDepts());
role.setLevel(args.getLevel());
// 更新
systemRoleMapper.insertOrUpdate(role);
@@ -114,8 +112,8 @@ public class SystemRoleService {
}
}
private SystemRoleVo getRoleVoById(Long id) {
return KitBeanUtil.copyToClass(systemRoleMapper.selectById(id), SystemRoleVo.class);
private SystemRoleTb getRoleTbById(Long id) {
return systemRoleMapper.selectById(id);
}
/**
@@ -143,7 +141,7 @@ public class SystemRoleService {
*/
@Transactional(rollbackFor = Exception.class)
public void deleteRoleByIds(Set<Long> ids) {
List<Integer> roleLevels = systemRoleMapper.selectByIds(ids).stream().map(SystemRoleTb::getLevel).distinct().toList();
List<Integer> roleLevels = systemRoleMapper.selectByIds(ids).stream().map(SystemRoleTb::getLevel).distinct().collect(Collectors.toList());
for (Integer roleLevel : roleLevels) {
checkRoleLevels(roleLevel);
}
@@ -223,7 +221,7 @@ public class SystemRoleService {
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
}
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(user.getId());
permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuTb::getPermission)
permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuVo::getPermission)
.filter(StrUtil::isNotBlank).collect(Collectors.toSet());
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
}
@@ -271,7 +269,7 @@ public class SystemRoleService {
*/
private int checkRoleLevels(Integer level) {
List<Integer> levels = systemUserRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
.map(SystemRoleTb::getLevel).toList();
.map(SystemRoleVo::getLevel).collect(Collectors.toList());
int min = Collections.min(levels);
if (level != null) {
if (level < min) {
@@ -283,6 +281,14 @@ public class SystemRoleService {
public void exportRoleXlsx(HttpServletResponse response, SystemQueryRoleArgs args) {
List<SystemRoleVo> systemRoleVos = this.queryRoleByArgs(args);
// KitXlsxExportUtil.exportFile(response, "角色数据", systemRoleVos, SystemRoleExportRowVo.class, (dataObject) -> {
// SystemRoleExportRowVo rowVo = new SystemRoleExportRowVo();
// rowVo.setName(dataObject.getName());
// rowVo.setLevel(dataObject.getLevel());
// rowVo.setDescription(dataObject.getDescription());
// rowVo.setCreateTime(dataObject.getCreateTime());
// return CollUtil.newArrayList(rowVo);
// });
List<SystemRoleExportRowVo> rowVos = new ArrayList<>();
for (SystemRoleVo dataObject : systemRoleVos) {
SystemRoleExportRowVo rowVo = new SystemRoleExportRowVo();
@@ -140,7 +140,7 @@ public class SystemUserRoleService {
public void checkLevel(SystemUserVo args) {
Integer currentLevel = Collections.min(
this.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList()));
.map(SystemRoleVo::getLevel).collect(Collectors.toList()));
Integer optLevel = this.getDeptLevelByRoles(args.getRoles());
if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足");
@@ -26,7 +26,6 @@ import cn.odboy.framework.properties.AppProperties;
import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
import cn.odboy.system.constant.SystemCaptchaBizEnum;
import cn.odboy.system.constant.SystemZhConst;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserJobTb;
@@ -34,6 +33,7 @@ import cn.odboy.system.dal.dataobject.SystemUserRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemQueryUserArgs;
import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.model.SystemUpdateUserPasswordArgs;
import cn.odboy.system.dal.model.SystemUserExportRowVo;
import cn.odboy.system.dal.model.SystemUserVo;
@@ -205,9 +205,9 @@ public class SystemUserService {
for (Long id : ids) {
Integer currentLevel = Collections.min(
systemUserRoleService.queryRoleByUsersId(currentUserId).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList()));
.map(SystemRoleVo::getLevel).collect(Collectors.toList()));
Integer optLevel = Collections.min(
systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleTb::getLevel)
systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleVo::getLevel)
.collect(Collectors.toList()));
if (currentLevel > optLevel) {
throw new BadRequestException(
@@ -439,7 +439,7 @@ public class SystemUserService {
SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
// 查询关联的部门信息
if (user.getDeptId() != null) {
SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId());
SystemDeptVo dept = systemDeptService.getDeptVoById(user.getDeptId());
userVo.setDept(dept);
}
// 查询关联的岗位信息