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.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; 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.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs; import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.framework.operalog.OperationLog; import cn.odboy.system.framework.operalog.OperationLog;
@@ -86,7 +87,7 @@ public class SystemQuartzJobController {
@ApiOperation("新增定时任务") @ApiOperation("新增定时任务")
@PostMapping(value = "/createQuartzJob") @PostMapping(value = "/createQuartzJob")
@PreAuthorize("@el.check('quartzJob:add')") @PreAuthorize("@el.check('quartzJob:add')")
public ResponseEntity<Void> createQuartzJob(@Validated @RequestBody SystemQuartzJobTb args) { public ResponseEntity<Void> createQuartzJob(@Validated @RequestBody SystemQuartzJobVo args) {
systemQuartzJobService.createJob(args); systemQuartzJobService.createJob(args);
return ResponseEntity.ok(null); return ResponseEntity.ok(null);
} }
@@ -62,6 +62,5 @@ public class SystemQuartzJobTb extends KitBaseUserTimeTb {
@NotBlank @NotBlank
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
@TableField(updateStrategy = FieldStrategy.ALWAYS) @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String private String description;
description;
} }
@@ -1,17 +1,71 @@
package cn.odboy.system.dal.model; 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 cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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 = "角色") @ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子部门") @ApiModelProperty(value = "子部门")
@@ -15,16 +15,31 @@
*/ */
package cn.odboy.system.dal.model; 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 cn.odboy.system.dal.dataobject.SystemDictTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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 = "字典") @ApiModelProperty(value = "字典")
private SystemDictTb dict; private SystemDictTb dict;
} }
@@ -1,19 +1,84 @@
package cn.odboy.system.dal.model; 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 cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import lombok.EqualsAndHashCode; import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode(callSuper = true) public class SystemMenuVo extends KitBaseUserTimeTb {
public class SystemMenuVo extends SystemMenuTb {
@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 = "菜单角色") @ApiModelProperty(value = "菜单角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子菜单") @ApiModelProperty(value = "子菜单")
@@ -15,13 +15,43 @@
*/ */
package cn.odboy.system.dal.model; 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.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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; private String fileSizeDesc;
} }
@@ -1,14 +1,48 @@
package cn.odboy.system.dal.model; package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.base.KitBaseUserTimeTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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) @ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid; private String uuid;
} }
@@ -1,21 +1,59 @@
package cn.odboy.system.dal.model; 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.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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) @ApiModelProperty(value = "用户", hidden = true)
private Set<SystemUserTb> users; private Set<SystemUserTb> users;
@ApiModelProperty(value = "菜单", hidden = true) @ApiModelProperty(value = "菜单", hidden = true)
private Set<SystemMenuVo> menus; private Set<SystemMenuVo> menus;
@ApiModelProperty(value = "部门", hidden = true) @ApiModelProperty(value = "部门", hidden = true)
private Set<SystemDeptTb> depts; 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.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Set; import java.util.Set;
import lombok.Data; import lombok.Data;
@@ -36,7 +35,6 @@ public class SystemSimpleUserVo extends KitObject {
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
private Set<SystemJobTb> jobs; private Set<SystemJobTb> jobs;
private Long deptId; private Long deptId;
@TableField(exist = false)
private SystemDeptTb dept; private SystemDeptTb dept;
@ApiModelProperty(value = "用户名称") @ApiModelProperty(value = "用户名称")
private String username; private String username;
@@ -1,11 +1,15 @@
package cn.odboy.system.dal.model; 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.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -13,10 +17,65 @@ import lombok.Setter;
@Setter @Setter
public class SystemUserVo extends SystemUserTb { 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 = "用户部门") @ApiModelProperty(value = "用户部门")
private SystemDeptTb dept; private SystemDeptVo dept;
@ApiModelProperty(value = "用户角色") @ApiModelProperty(value = "用户角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
private Set<SystemJobTb> jobs; 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 * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.system.framework.quartz; 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 cn.odboy.system.service.SystemQuartzJobService;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -41,7 +40,7 @@ public class ActiveJobRegister implements ApplicationRunner {
*/ */
@Override @Override
public void run(ApplicationArguments applicationArguments) { public void run(ApplicationArguments applicationArguments) {
List<SystemQuartzJobTb> quartzJobs = systemQuartzJobService.listEnableQuartzJob(); List<SystemQuartzJobVo> quartzJobs = systemQuartzJobService.listEnableQuartzJob();
quartzJobs.forEach(quartzManage::addJob); quartzJobs.forEach(quartzManage::addJob);
log.info("Timing task injection complete"); 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(); SystemSendEmailArgs sendEmailRequest = new SystemSendEmailArgs();
sendEmailRequest.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!"); sendEmailRequest.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!");
Map<String, Object> data = new HashMap<>(16); Map<String, Object> data = new HashMap<>(16);
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.system.framework.quartz; package cn.odboy.system.framework.quartz;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import jakarta.annotation.Resource; import cn.odboy.system.dal.model.SystemQuartzJobVo;
import java.util.Date; import java.util.Date;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.quartz.CronScheduleBuilder; import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger; import org.quartz.CronTrigger;
@@ -40,32 +40,26 @@ import org.springframework.stereotype.Component;
public class QuartzManage { public class QuartzManage {
private static final String JOB_NAME = "TASK_"; private static final String JOB_NAME = "TASK_";
@Resource @Resource
private Scheduler scheduler; private Scheduler scheduler;
public void addJob(SystemQuartzJobTb quartzJob) { public void addJob(SystemQuartzJobVo quartzJob) {
try { try {
// 构建job信息 // 构建job信息
JobDetail jobDetail = JobDetail jobDetail =
JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build(); JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build();
// 通过触发器名和cron 表达式创建 Trigger // 通过触发器名和cron 表达式创建 Trigger
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(JOB_NAME + quartzJob.getId()).startNow() Trigger trigger = TriggerBuilder.newTrigger().withIdentity(JOB_NAME + quartzJob.getId()).startNow()
.withSchedule(CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression())).build(); .withSchedule(CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression())).build();
trigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob); trigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob);
// 重置启动时间 // 重置启动时间
((CronTriggerImpl) trigger).setStartTime(new Date()); ((CronTriggerImpl) trigger).setStartTime(new Date());
// 执行定时任务,如果是持久化的,这里会报错,捕获输出 // 执行定时任务,如果是持久化的,这里会报错,捕获输出
try { try {
scheduler.scheduleJob(jobDetail, trigger); scheduler.scheduleJob(jobDetail, trigger);
} catch (ObjectAlreadyExistsException e) { } catch (ObjectAlreadyExistsException e) {
log.warn("定时任务已存在,跳过加载"); log.warn("定时任务已存在,跳过加载");
} }
// 暂停任务 // 暂停任务
if (quartzJob.getIsPause()) { if (quartzJob.getIsPause()) {
pauseJob(quartzJob); pauseJob(quartzJob);
@@ -81,7 +75,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void updateJobCron(SystemQuartzJobTb quartzJob) { public void updateJobCron(SystemQuartzJobVo quartzJob) {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -95,7 +89,6 @@ public class QuartzManage {
// 重置启动时间 // 重置启动时间
((CronTriggerImpl) trigger).setStartTime(new Date()); ((CronTriggerImpl) trigger).setStartTime(new Date());
trigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob); trigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob);
scheduler.rescheduleJob(triggerKey, trigger); scheduler.rescheduleJob(triggerKey, trigger);
// 暂停任务 // 暂停任务
if (quartzJob.getIsPause()) { if (quartzJob.getIsPause()) {
@@ -128,7 +121,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void resumeJob(SystemQuartzJobTb quartzJob) { public void resumeJob(SystemQuartzJobVo quartzJob) {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -149,7 +142,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void runJobNow(SystemQuartzJobTb quartzJob) { public void runJobNow(SystemQuartzJobVo quartzJob) {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -172,7 +165,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void pauseJob(SystemQuartzJobTb quartzJob) { public void pauseJob(SystemQuartzJobVo quartzJob) {
try { try {
JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId());
scheduler.pauseJob(jobKey); scheduler.pauseJob(jobKey);
@@ -18,7 +18,6 @@ package cn.odboy.system.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.system.constant.SystemDataScopeEnum; import cn.odboy.system.constant.SystemDataScopeEnum;
import cn.odboy.system.dal.dataobject.SystemDeptTb; 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.SystemDeptVo;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.model.SystemUserVo;
@@ -55,7 +54,7 @@ public class SystemDataService {
// 查询用户角色 // 查询用户角色
List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId()); List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId());
// 获取对应的部门ID // 获取对应的部门ID
for (SystemRoleTb role : roleList) { for (SystemRoleVo role : roleList) {
SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope()); SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope());
switch (Objects.requireNonNull(dataScopeEnum)) { switch (Objects.requireNonNull(dataScopeEnum)) {
case THIS_LEVEL: case THIS_LEVEL:
@@ -78,7 +77,7 @@ public class SystemDataService {
* @param role 角色 * @param role 角色
* @return 数据权限ID * @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()); List<SystemDeptTb> deptList = systemRoleDeptService.listDeptByRoleId(role.getId());
for (SystemDeptTb dept : deptList) { for (SystemDeptTb dept : deptList) {
deptIds.add(dept.getId()); deptIds.add(dept.getId());
@@ -83,7 +83,7 @@ public class SystemDeptService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateDeptById(SystemDeptTb args) { public void updateDeptById(SystemDeptTb args) {
// 旧的部门 // 旧的部门
Long oldPid = this.getDeptById(args.getId()).getPid(); Long oldPid = this.getDeptVoById(args.getId()).getPid();
Long newPid = args.getPid(); Long newPid = args.getPid();
if (args.getPid() != null && args.getId().equals(args.getPid())) { if (args.getPid() != null && args.getId().equals(args.getPid())) {
throw new BadRequestException("上级不能为自己"); throw new BadRequestException("上级不能为自己");
@@ -103,10 +103,10 @@ public class SystemDeptService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteDeptByIds(Set<Long> ids) { public void deleteDeptByIds(Set<Long> ids) {
// 获取部门, 和其所有子部门 // 获取部门, 和其所有子部门
Set<SystemDeptTb> depts = this.traverseDeptByIdWithPids(ids); Set<SystemDeptVo> depts = this.traverseDeptByIdWithPids(ids);
// 验证是否被角色或用户关联 // 验证是否被角色或用户关联
this.verifyBindRelationByIds(depts); this.verifyBindRelationByIds(depts);
for (SystemDeptTb dept : depts) { for (SystemDeptVo dept : depts) {
systemDeptMapper.deleteById(dept.getId()); systemDeptMapper.deleteById(dept.getId());
this.updateDeptSubCnt(dept.getPid()); this.updateDeptSubCnt(dept.getPid());
} }
@@ -211,8 +211,8 @@ public class SystemDeptService {
* @param id / * @param id /
* @return / * @return /
*/ */
public SystemDeptTb getDeptById(Long id) { public SystemDeptVo getDeptVoById(Long id) {
return systemDeptMapper.selectById(id); return KitBeanUtil.copyToClass(systemDeptMapper.selectById(id), SystemDeptVo.class);
} }
/** /**
@@ -222,8 +222,8 @@ public class SystemDeptService {
* @param depts / * @param depts /
* @return / * @return /
*/ */
private Set<SystemDeptTb> queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptTb> depts) { private Set<SystemDeptVo> queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptVo> depts) {
for (SystemDeptTb dept : deptTbList) { for (SystemDeptVo dept : deptTbList) {
depts.add(dept); depts.add(dept);
List<SystemDeptVo> deptList = this.listDeptByPid(dept.getId()); List<SystemDeptVo> deptList = this.listDeptByPid(dept.getId());
if (CollUtil.isNotEmpty(deptList)) { if (CollUtil.isNotEmpty(deptList)) {
@@ -254,13 +254,13 @@ public class SystemDeptService {
* @param deptList / * @param deptList /
* @return / * @return /
*/ */
private List<SystemDeptVo> querySuperiorDeptByPid(SystemDeptTb dept, List<SystemDeptVo> deptList) { private List<SystemDeptVo> querySuperiorDeptByPid(SystemDeptVo dept, List<SystemDeptVo> deptList) {
if (dept.getPid() == null) { if (dept.getPid() == null) {
deptList.addAll(this.listRootDept()); deptList.addAll(this.listRootDept());
return deptList; return deptList;
} }
deptList.addAll(this.listDeptByPid(dept.getPid())); deptList.addAll(this.listDeptByPid(dept.getPid()));
return querySuperiorDeptByPid(this.getDeptById(dept.getPid()), deptList); return querySuperiorDeptByPid(this.getDeptVoById(dept.getPid()), deptList);
} }
private List<SystemDeptVo> listRootDept() { private List<SystemDeptVo> listRootDept() {
@@ -278,7 +278,7 @@ public class SystemDeptService {
Set<SystemDeptVo> deptSet1 = new LinkedHashSet<>(); Set<SystemDeptVo> deptSet1 = new LinkedHashSet<>();
for (Long id : ids) { for (Long id : ids) {
// 同级数据 // 同级数据
SystemDeptTb dept = this.getDeptById(id); SystemDeptVo dept = this.getDeptVoById(id);
// 上级数据 // 上级数据
List<SystemDeptVo> depts = this.querySuperiorDeptByPid(dept, new ArrayList<>()); List<SystemDeptVo> depts = this.querySuperiorDeptByPid(dept, new ArrayList<>());
if (exclude) { if (exclude) {
@@ -314,7 +314,7 @@ public class SystemDeptService {
} }
if (isChild) { if (isChild) {
deptSet.add(dept); 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); deptSet.add(dept);
} }
} }
@@ -332,8 +332,8 @@ public class SystemDeptService {
* *
* @param deptSet / * @param deptSet /
*/ */
public void verifyBindRelationByIds(Set<SystemDeptTb> deptSet) { public void verifyBindRelationByIds(Set<SystemDeptVo> deptSet) {
Set<Long> deptIds = deptSet.stream().map(SystemDeptTb::getId).collect(Collectors.toSet()); Set<Long> deptIds = deptSet.stream().map(SystemDeptVo::getId).collect(Collectors.toSet());
if (systemUserDeptService.countUserByDeptIds(deptIds) > 0) { if (systemUserDeptService.countUserByDeptIds(deptIds) > 0) {
throw new BadRequestException("所选部门存在用户关联,请解除后再试!"); throw new BadRequestException("所选部门存在用户关联,请解除后再试!");
} }
@@ -353,11 +353,11 @@ public class SystemDeptService {
* *
* @param ids / * @param ids /
*/ */
public Set<SystemDeptTb> traverseDeptByIdWithPids(Set<Long> ids) { public Set<SystemDeptVo> traverseDeptByIdWithPids(Set<Long> ids) {
Set<SystemDeptTb> depts = new HashSet<>(); Set<SystemDeptVo> depts = new HashSet<>();
for (Long id : ids) { for (Long id : ids) {
// 根部门 // 根部门
depts.add(this.getDeptById(id)); depts.add(this.getDeptVoById(id));
// 子部门 // 子部门
List<SystemDeptVo> deptList = this.listDeptByPid(id); List<SystemDeptVo> deptList = this.listDeptByPid(id);
if (CollectionUtil.isNotEmpty(deptList)) { if (CollectionUtil.isNotEmpty(deptList)) {
@@ -109,7 +109,7 @@ public class SystemDictDetailService {
*/ */
public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, Page<SystemDictDetailTb> page) { public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, Page<SystemDictDetailTb> page) {
IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> KitBeanUtil.copyToClass(i, SystemDictDetailVo.class)); 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)); Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i));
for (SystemDictDetailVo record : iPage.getRecords()) { for (SystemDictDetailVo record : iPage.getRecords()) {
record.setDict(id2ItemMap.get(record.getDictId())); 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.SystemYesOrNoChConst;
import cn.odboy.system.constant.TransferProtocolConst; import cn.odboy.system.constant.TransferProtocolConst;
import cn.odboy.system.dal.dataobject.SystemMenuTb; 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.SystemMenuExportRowVo;
import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuMetaVo;
import cn.odboy.system.dal.model.SystemMenuRouterVo; import cn.odboy.system.dal.model.SystemMenuRouterVo;
@@ -160,12 +159,12 @@ public class SystemMenuService {
menuSet = this.queryChildMenuByArgs(menuList, menuSet); menuSet = this.queryChildMenuByArgs(menuList, menuSet);
} }
List<Long> menuIds = 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)) { if (CollUtil.isNotEmpty(menuIds)) {
systemRoleMenuService.deleteRoleMenuByMenuIds(menuIds); systemRoleMenuService.deleteRoleMenuByMenuIds(menuIds);
systemMenuMapper.deleteByIds(menuIds); systemMenuMapper.deleteByIds(menuIds);
} }
for (SystemMenuTb menu : menuSet) { for (SystemMenuVo menu : menuSet) {
this.updateMenuSubCnt(menu.getPid()); this.updateMenuSubCnt(menu.getPid());
} }
} }
@@ -222,7 +221,7 @@ public class SystemMenuService {
*/ */
public List<SystemMenuVo> listMenuByUserId(Long currentUserId) { public List<SystemMenuVo> listMenuByUserId(Long currentUserId) {
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(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)); return new ArrayList<>(systemRoleMenuService.queryMenuByRoleIds(roleIds));
} }
@@ -270,7 +269,7 @@ public class SystemMenuService {
* @param menus / * @param menus /
* @return / * @return /
*/ */
public List<SystemMenuVo> querySuperiorMenuByArgs(SystemMenuTb menu, List<SystemMenuVo> menus) { public List<SystemMenuVo> querySuperiorMenuByArgs(SystemMenuVo menu, List<SystemMenuVo> menus) {
if (menu.getPid() == null) { if (menu.getPid() == null) {
menus.addAll(this.listRootMenu()); menus.addAll(this.listRootMenu());
return menus; return menus;
@@ -364,7 +363,7 @@ public class SystemMenuService {
* @param menuVo / * @param menuVo /
* @return / * @return /
*/ */
private SystemMenuRouterVo getMenuVo(SystemMenuTb menu, SystemMenuRouterVo menuVo) { private SystemMenuRouterVo getMenuVo(SystemMenuVo menu, SystemMenuRouterVo menuVo) {
SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo(); SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo();
menuVo1.setMeta(menuVo.getMeta()); menuVo1.setMeta(menuVo.getMeta());
// 非外链 // 非外链
@@ -435,7 +434,7 @@ public class SystemMenuService {
List<SystemMenuVo> menuList = this.listMenuByPid(id); List<SystemMenuVo> menuList = this.listMenuByPid(id);
menuSet.add(this.getMenuVoById(id)); menuSet.add(this.getMenuVoById(id));
menuSet = this.queryChildMenuByArgs(menuList, menuSet); 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) { public List<SystemMenuVo> listMenuSuperior(List<Long> ids) {
@@ -443,7 +442,7 @@ public class SystemMenuService {
List<SystemMenuVo> systemMenuTbs; List<SystemMenuVo> systemMenuTbs;
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
menus = new LinkedHashSet<>(this.listMenuByIds(ids)); menus = new LinkedHashSet<>(this.listMenuByIds(ids));
for (SystemMenuTb menu : menus) { for (SystemMenuVo menu : menus) {
List<SystemMenuVo> menuList = this.querySuperiorMenuByArgs(menu, new ArrayList<>()); List<SystemMenuVo> menuList = this.querySuperiorMenuByArgs(menu, new ArrayList<>());
for (SystemMenuVo data : menuList) { for (SystemMenuVo data : menuList) {
if (data.getId().equals(menu.getPid())) { if (data.getId().equals(menu.getPid())) {
@@ -79,7 +79,7 @@ public class SystemQuartzJobService {
* @param args / * @param args /
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void createJob(SystemQuartzJobTb args) { public void createJob(SystemQuartzJobVo args) {
if (args.getId() != null) { if (args.getId() != null) {
throw new BadRequestException("无效参数id"); throw new BadRequestException("无效参数id");
} }
@@ -88,7 +88,8 @@ public class SystemQuartzJobService {
if (!CronExpression.isValidExpression(args.getCronExpression())) { if (!CronExpression.isValidExpression(args.getCronExpression())) {
throw new BadRequestException("cron表达式格式错误"); throw new BadRequestException("cron表达式格式错误");
} }
systemQuartzJobMapper.insert(args); SystemQuartzJobTb record = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insert(record);
quartzManage.addJob(args); quartzManage.addJob(args);
} }
@@ -110,9 +111,10 @@ public class SystemQuartzJobService {
throw new BadRequestException("子任务中不能添加当前任务ID"); throw new BadRequestException("子任务中不能添加当前任务ID");
} }
} }
SystemQuartzJobTb quartzJob = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class); SystemQuartzJobTb jobTb = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(quartzJob); systemQuartzJobMapper.insertOrUpdate(jobTb);
quartzManage.updateJobCron(quartzJob); SystemQuartzJobVo jobVo = KitBeanUtil.copyToClass(args, SystemQuartzJobVo.class);
quartzManage.updateJobCron(jobVo);
} }
/** /**
@@ -121,7 +123,7 @@ public class SystemQuartzJobService {
* @param quartzJob / * @param quartzJob /
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void switchQuartzJobStatus(SystemQuartzJobTb quartzJob) { public void switchQuartzJobStatus(SystemQuartzJobVo quartzJob) {
// 置换暂停状态 // 置换暂停状态
if (quartzJob.getIsPause()) { if (quartzJob.getIsPause()) {
quartzManage.resumeJob(quartzJob); quartzManage.resumeJob(quartzJob);
@@ -130,7 +132,8 @@ public class SystemQuartzJobService {
quartzManage.pauseJob(quartzJob); quartzManage.pauseJob(quartzJob);
quartzJob.setIsPause(true); 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 / * @param quartzJob /
*/ */
public void startQuartzJob(SystemQuartzJobTb quartzJob) { public void startQuartzJob(SystemQuartzJobVo quartzJob) {
quartzManage.runJobNow(quartzJob); quartzManage.runJobNow(quartzJob);
} }
@@ -263,31 +266,18 @@ public class SystemQuartzJobService {
return systemQuartzLogMapper.selectList(wrapper); return systemQuartzLogMapper.selectList(wrapper);
} }
public SystemQuartzJobTb getQuartzJobById(Long id) { public SystemQuartzJobVo getQuartzJobById(Long id) {
return systemQuartzJobMapper.selectById(id); return KitBeanUtil.copyToClass(systemQuartzJobMapper.selectById(id), SystemQuartzJobVo.class);
} }
public List<SystemQuartzJobTb> listEnableQuartzJob() { public List<SystemQuartzJobVo> listEnableQuartzJob() {
LambdaQueryWrapper<SystemQuartzJobTb> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SystemQuartzJobTb> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SystemQuartzJobTb::getIsPause, 0); wrapper.eq(SystemQuartzJobTb::getIsPause, 0);
return systemQuartzJobMapper.selectList(wrapper); return KitBeanUtil.copyToList(systemQuartzJobMapper.selectList(wrapper), SystemQuartzJobVo.class);
} }
public void exportQuartzJobXlsx(HttpServletResponse response, SystemQueryQuartzJobArgs args) { public void exportQuartzJobXlsx(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
List<SystemQuartzJobTb> systemQuartzJobTbs = this.queryQuartzJobByArgs(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<>(); List<SystemQuartzJobExportRowVo> rowVos = new ArrayList<>();
for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) { for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) {
SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo(); SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo();
@@ -21,7 +21,6 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException; 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.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemCreateRoleArgs; import cn.odboy.system.dal.model.SystemCreateRoleArgs;
@@ -94,7 +93,7 @@ public class SystemRoleService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateRoleById(SystemRoleVo args) { public void updateRoleById(SystemRoleVo args) {
checkRoleLevels(args.getLevel()); checkRoleLevels(args.getLevel());
SystemRoleVo role = this.getRoleVoById(args.getId()); SystemRoleTb role = this.getRoleTbById(args.getId());
SystemRoleTb role1 = this.getRoleByName(args.getName()); SystemRoleTb role1 = this.getRoleByName(args.getName());
if (role1 != null && !role1.getId().equals(role.getId())) { if (role1 != null && !role1.getId().equals(role.getId())) {
throw new BadRequestException("角色名称已存在"); throw new BadRequestException("角色名称已存在");
@@ -102,7 +101,6 @@ public class SystemRoleService {
role.setName(args.getName()); role.setName(args.getName());
role.setDescription(args.getDescription()); role.setDescription(args.getDescription());
role.setDataScope(args.getDataScope()); role.setDataScope(args.getDataScope());
role.setDepts(args.getDepts());
role.setLevel(args.getLevel()); role.setLevel(args.getLevel());
// 更新 // 更新
systemRoleMapper.insertOrUpdate(role); systemRoleMapper.insertOrUpdate(role);
@@ -114,8 +112,8 @@ public class SystemRoleService {
} }
} }
private SystemRoleVo getRoleVoById(Long id) { private SystemRoleTb getRoleTbById(Long id) {
return KitBeanUtil.copyToClass(systemRoleMapper.selectById(id), SystemRoleVo.class); return systemRoleMapper.selectById(id);
} }
/** /**
@@ -143,7 +141,7 @@ public class SystemRoleService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteRoleByIds(Set<Long> ids) { 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) { for (Integer roleLevel : roleLevels) {
checkRoleLevels(roleLevel); checkRoleLevels(roleLevel);
} }
@@ -223,7 +221,7 @@ public class SystemRoleService {
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
} }
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(user.getId()); 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()); .filter(StrUtil::isNotBlank).collect(Collectors.toSet());
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
} }
@@ -271,7 +269,7 @@ public class SystemRoleService {
*/ */
private int checkRoleLevels(Integer level) { private int checkRoleLevels(Integer level) {
List<Integer> levels = systemUserRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream() List<Integer> levels = systemUserRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
.map(SystemRoleTb::getLevel).toList(); .map(SystemRoleVo::getLevel).collect(Collectors.toList());
int min = Collections.min(levels); int min = Collections.min(levels);
if (level != null) { if (level != null) {
if (level < min) { if (level < min) {
@@ -283,6 +281,14 @@ public class SystemRoleService {
public void exportRoleXlsx(HttpServletResponse response, SystemQueryRoleArgs args) { public void exportRoleXlsx(HttpServletResponse response, SystemQueryRoleArgs args) {
List<SystemRoleVo> systemRoleVos = this.queryRoleByArgs(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<>(); List<SystemRoleExportRowVo> rowVos = new ArrayList<>();
for (SystemRoleVo dataObject : systemRoleVos) { for (SystemRoleVo dataObject : systemRoleVos) {
SystemRoleExportRowVo rowVo = new SystemRoleExportRowVo(); SystemRoleExportRowVo rowVo = new SystemRoleExportRowVo();
@@ -140,7 +140,7 @@ public class SystemUserRoleService {
public void checkLevel(SystemUserVo args) { public void checkLevel(SystemUserVo args) {
Integer currentLevel = Collections.min( Integer currentLevel = Collections.min(
this.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream() this.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList())); .map(SystemRoleVo::getLevel).collect(Collectors.toList()));
Integer optLevel = this.getDeptLevelByRoles(args.getRoles()); Integer optLevel = this.getDeptLevelByRoles(args.getRoles());
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足"); throw new BadRequestException("角色权限不足");
@@ -26,7 +26,6 @@ import cn.odboy.framework.properties.AppProperties;
import cn.odboy.framework.server.core.KitFileLocalUploadHelper; import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
import cn.odboy.system.constant.SystemCaptchaBizEnum; import cn.odboy.system.constant.SystemCaptchaBizEnum;
import cn.odboy.system.constant.SystemZhConst; 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.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserJobTb; 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.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemDeptVo; import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemQueryUserArgs; 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.SystemUpdateUserPasswordArgs;
import cn.odboy.system.dal.model.SystemUserExportRowVo; import cn.odboy.system.dal.model.SystemUserExportRowVo;
import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.model.SystemUserVo;
@@ -205,9 +205,9 @@ public class SystemUserService {
for (Long id : ids) { for (Long id : ids) {
Integer currentLevel = Collections.min( Integer currentLevel = Collections.min(
systemUserRoleService.queryRoleByUsersId(currentUserId).stream() systemUserRoleService.queryRoleByUsersId(currentUserId).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList())); .map(SystemRoleVo::getLevel).collect(Collectors.toList()));
Integer optLevel = Collections.min( Integer optLevel = Collections.min(
systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleTb::getLevel) systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleVo::getLevel)
.collect(Collectors.toList())); .collect(Collectors.toList()));
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException( throw new BadRequestException(
@@ -439,7 +439,7 @@ public class SystemUserService {
SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class); SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
// 查询关联的部门信息 // 查询关联的部门信息
if (user.getDeptId() != null) { if (user.getDeptId() != null) {
SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId()); SystemDeptVo dept = systemDeptService.getDeptVoById(user.getDeptId());
userVo.setDept(dept); userVo.setDept(dept);
} }
// 查询关联的岗位信息 // 查询关联的岗位信息
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy; package cn.odboy;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.model.SystemUserVo;
import cn.odboy.system.service.SystemUserService; import cn.odboy.system.service.SystemUserService;
import java.util.Set; import java.util.Set;
@@ -36,19 +35,19 @@ public class SystemApplicationTests {
@Autowired @Autowired
private SystemUserService systemUserService; private SystemUserService systemUserService;
public static void main(String[] args) {
}
@Test @Test
public void contextLoads() { public void contextLoads() {
SystemDeptTb systemDept = new SystemDeptTb(); SystemDeptVo systemDept = new SystemDeptVo();
systemDept.setId(2L); systemDept.setId(2L);
SystemJobTb systemJob = new SystemJobTb(); SystemJobTb systemJob = new SystemJobTb();
systemJob.setId(11L); systemJob.setId(11L);
Set<SystemJobTb> systemJobs = CollUtil.newHashSet(systemJob); Set<SystemJobTb> systemJobs = CollUtil.newHashSet(systemJob);
SystemRoleTb systemRole = new SystemRoleTb(); SystemRoleTb systemRole = new SystemRoleTb();
systemRole.setId(2L); systemRole.setId(2L);
Set<SystemRoleTb> systemRoles = CollUtil.newHashSet(systemRole); Set<SystemRoleTb> systemRoles = CollUtil.newHashSet(systemRole);
String pwd = passwordEncoder.encode("123456"); String pwd = passwordEncoder.encode("123456");
for (int i = 100; i < 200; i++) { for (int i = 100; i < 200; i++) {
SystemUserVo systemUser = new SystemUserVo(); SystemUserVo systemUser = new SystemUserVo();
@@ -64,4 +63,3 @@ public class SystemApplicationTests {
} }
} }
} }
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; 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.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs; import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.framework.operalog.OperationLog; import cn.odboy.system.framework.operalog.OperationLog;
@@ -86,7 +87,7 @@ public class SystemQuartzJobController {
@ApiOperation("新增定时任务") @ApiOperation("新增定时任务")
@PostMapping(value = "/createQuartzJob") @PostMapping(value = "/createQuartzJob")
@PreAuthorize("@el.check('quartzJob:add')") @PreAuthorize("@el.check('quartzJob:add')")
public ResponseEntity<Void> createQuartzJob(@Validated @RequestBody SystemQuartzJobTb args) { public ResponseEntity<Void> createQuartzJob(@Validated @RequestBody SystemQuartzJobVo args) {
systemQuartzJobService.createJob(args); systemQuartzJobService.createJob(args);
return ResponseEntity.ok(null); return ResponseEntity.ok(null);
} }
@@ -62,6 +62,5 @@ public class SystemQuartzJobTb extends KitBaseUserTimeTb {
@NotBlank @NotBlank
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
@TableField(updateStrategy = FieldStrategy.ALWAYS) @TableField(updateStrategy = FieldStrategy.ALWAYS)
private String private String description;
description;
} }
@@ -1,17 +1,71 @@
package cn.odboy.system.dal.model; 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 cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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 = "角色") @ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子部门") @ApiModelProperty(value = "子部门")
@@ -15,16 +15,31 @@
*/ */
package cn.odboy.system.dal.model; 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 cn.odboy.system.dal.dataobject.SystemDictTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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 = "字典") @ApiModelProperty(value = "字典")
private SystemDictTb dict; private SystemDictTb dict;
} }
@@ -1,17 +1,84 @@
package cn.odboy.system.dal.model; 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 cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
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 = "菜单角色") @ApiModelProperty(value = "菜单角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子菜单") @ApiModelProperty(value = "子菜单")
@@ -15,13 +15,43 @@
*/ */
package cn.odboy.system.dal.model; 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.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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; private String fileSizeDesc;
} }
@@ -1,14 +1,48 @@
package cn.odboy.system.dal.model; package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.base.KitBaseUserTimeTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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) @ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid; private String uuid;
} }
@@ -1,21 +1,59 @@
package cn.odboy.system.dal.model; 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.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @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) @ApiModelProperty(value = "用户", hidden = true)
private Set<SystemUserTb> users; private Set<SystemUserTb> users;
@ApiModelProperty(value = "菜单", hidden = true) @ApiModelProperty(value = "菜单", hidden = true)
private Set<SystemMenuVo> menus; private Set<SystemMenuVo> menus;
@ApiModelProperty(value = "部门", hidden = true) @ApiModelProperty(value = "部门", hidden = true)
private Set<SystemDeptTb> depts; 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.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Set; import java.util.Set;
import lombok.Data; import lombok.Data;
@@ -36,7 +35,6 @@ public class SystemSimpleUserVo extends KitObject {
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
private Set<SystemJobTb> jobs; private Set<SystemJobTb> jobs;
private Long deptId; private Long deptId;
@TableField(exist = false)
private SystemDeptTb dept; private SystemDeptTb dept;
@ApiModelProperty(value = "用户名称") @ApiModelProperty(value = "用户名称")
private String username; private String username;
@@ -1,11 +1,15 @@
package cn.odboy.system.dal.model; 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.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -13,10 +17,65 @@ import lombok.Setter;
@Setter @Setter
public class SystemUserVo extends SystemUserTb { 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 = "用户部门") @ApiModelProperty(value = "用户部门")
private SystemDeptTb dept; private SystemDeptVo dept;
@ApiModelProperty(value = "用户角色") @ApiModelProperty(value = "用户角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
private Set<SystemJobTb> jobs; 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);
}
} }
@@ -15,7 +15,7 @@
*/ */
package cn.odboy.system.framework.quartz; 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 cn.odboy.system.service.SystemQuartzJobService;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -40,7 +40,7 @@ public class ActiveJobRegister implements ApplicationRunner {
*/ */
@Override @Override
public void run(ApplicationArguments applicationArguments) { public void run(ApplicationArguments applicationArguments) {
List<SystemQuartzJobTb> quartzJobs = systemQuartzJobService.listEnableQuartzJob(); List<SystemQuartzJobVo> quartzJobs = systemQuartzJobService.listEnableQuartzJob();
quartzJobs.forEach(quartzManage::addJob); quartzJobs.forEach(quartzManage::addJob);
log.info("Timing task injection complete"); 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(); SystemSendEmailArgs sendEmailRequest = new SystemSendEmailArgs();
sendEmailRequest.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!"); sendEmailRequest.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!");
Map<String, Object> data = new HashMap<>(16); Map<String, Object> data = new HashMap<>(16);
@@ -17,6 +17,7 @@ package cn.odboy.system.framework.quartz;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import java.util.Date; import java.util.Date;
import javax.annotation.Resource; import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -42,7 +43,7 @@ public class QuartzManage {
@Resource @Resource
private Scheduler scheduler; private Scheduler scheduler;
public void addJob(SystemQuartzJobTb quartzJob) { public void addJob(SystemQuartzJobVo quartzJob) {
try { try {
// 构建job信息 // 构建job信息
JobDetail jobDetail = JobDetail jobDetail =
@@ -74,7 +75,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void updateJobCron(SystemQuartzJobTb quartzJob) { public void updateJobCron(SystemQuartzJobVo quartzJob) {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -120,7 +121,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void resumeJob(SystemQuartzJobTb quartzJob) { public void resumeJob(SystemQuartzJobVo quartzJob) {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -141,7 +142,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void runJobNow(SystemQuartzJobTb quartzJob) { public void runJobNow(SystemQuartzJobVo quartzJob) {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
@@ -164,7 +165,7 @@ public class QuartzManage {
* *
* @param quartzJob / * @param quartzJob /
*/ */
public void pauseJob(SystemQuartzJobTb quartzJob) { public void pauseJob(SystemQuartzJobVo quartzJob) {
try { try {
JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId());
scheduler.pauseJob(jobKey); scheduler.pauseJob(jobKey);
@@ -18,7 +18,6 @@ package cn.odboy.system.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.system.constant.SystemDataScopeEnum; import cn.odboy.system.constant.SystemDataScopeEnum;
import cn.odboy.system.dal.dataobject.SystemDeptTb; 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.SystemDeptVo;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.model.SystemUserVo;
@@ -55,7 +54,7 @@ public class SystemDataService {
// 查询用户角色 // 查询用户角色
List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId()); List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId());
// 获取对应的部门ID // 获取对应的部门ID
for (SystemRoleTb role : roleList) { for (SystemRoleVo role : roleList) {
SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope()); SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope());
switch (Objects.requireNonNull(dataScopeEnum)) { switch (Objects.requireNonNull(dataScopeEnum)) {
case THIS_LEVEL: case THIS_LEVEL:
@@ -78,7 +77,7 @@ public class SystemDataService {
* @param role 角色 * @param role 角色
* @return 数据权限ID * @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()); List<SystemDeptTb> deptList = systemRoleDeptService.listDeptByRoleId(role.getId());
for (SystemDeptTb dept : deptList) { for (SystemDeptTb dept : deptList) {
deptIds.add(dept.getId()); deptIds.add(dept.getId());
@@ -83,7 +83,7 @@ public class SystemDeptService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateDeptById(SystemDeptTb args) { public void updateDeptById(SystemDeptTb args) {
// 旧的部门 // 旧的部门
Long oldPid = this.getDeptById(args.getId()).getPid(); Long oldPid = this.getDeptVoById(args.getId()).getPid();
Long newPid = args.getPid(); Long newPid = args.getPid();
if (args.getPid() != null && args.getId().equals(args.getPid())) { if (args.getPid() != null && args.getId().equals(args.getPid())) {
throw new BadRequestException("上级不能为自己"); throw new BadRequestException("上级不能为自己");
@@ -103,10 +103,10 @@ public class SystemDeptService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteDeptByIds(Set<Long> ids) { public void deleteDeptByIds(Set<Long> ids) {
// 获取部门, 和其所有子部门 // 获取部门, 和其所有子部门
Set<SystemDeptTb> depts = this.traverseDeptByIdWithPids(ids); Set<SystemDeptVo> depts = this.traverseDeptByIdWithPids(ids);
// 验证是否被角色或用户关联 // 验证是否被角色或用户关联
this.verifyBindRelationByIds(depts); this.verifyBindRelationByIds(depts);
for (SystemDeptTb dept : depts) { for (SystemDeptVo dept : depts) {
systemDeptMapper.deleteById(dept.getId()); systemDeptMapper.deleteById(dept.getId());
this.updateDeptSubCnt(dept.getPid()); this.updateDeptSubCnt(dept.getPid());
} }
@@ -211,8 +211,8 @@ public class SystemDeptService {
* @param id / * @param id /
* @return / * @return /
*/ */
public SystemDeptTb getDeptById(Long id) { public SystemDeptVo getDeptVoById(Long id) {
return systemDeptMapper.selectById(id); return KitBeanUtil.copyToClass(systemDeptMapper.selectById(id), SystemDeptVo.class);
} }
/** /**
@@ -222,8 +222,8 @@ public class SystemDeptService {
* @param depts / * @param depts /
* @return / * @return /
*/ */
private Set<SystemDeptTb> queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptTb> depts) { private Set<SystemDeptVo> queryRelationDeptByArgs(List<SystemDeptVo> deptTbList, Set<SystemDeptVo> depts) {
for (SystemDeptTb dept : deptTbList) { for (SystemDeptVo dept : deptTbList) {
depts.add(dept); depts.add(dept);
List<SystemDeptVo> deptList = this.listDeptByPid(dept.getId()); List<SystemDeptVo> deptList = this.listDeptByPid(dept.getId());
if (CollUtil.isNotEmpty(deptList)) { if (CollUtil.isNotEmpty(deptList)) {
@@ -254,13 +254,13 @@ public class SystemDeptService {
* @param deptList / * @param deptList /
* @return / * @return /
*/ */
private List<SystemDeptVo> querySuperiorDeptByPid(SystemDeptTb dept, List<SystemDeptVo> deptList) { private List<SystemDeptVo> querySuperiorDeptByPid(SystemDeptVo dept, List<SystemDeptVo> deptList) {
if (dept.getPid() == null) { if (dept.getPid() == null) {
deptList.addAll(this.listRootDept()); deptList.addAll(this.listRootDept());
return deptList; return deptList;
} }
deptList.addAll(this.listDeptByPid(dept.getPid())); deptList.addAll(this.listDeptByPid(dept.getPid()));
return querySuperiorDeptByPid(this.getDeptById(dept.getPid()), deptList); return querySuperiorDeptByPid(this.getDeptVoById(dept.getPid()), deptList);
} }
private List<SystemDeptVo> listRootDept() { private List<SystemDeptVo> listRootDept() {
@@ -278,7 +278,7 @@ public class SystemDeptService {
Set<SystemDeptVo> deptSet1 = new LinkedHashSet<>(); Set<SystemDeptVo> deptSet1 = new LinkedHashSet<>();
for (Long id : ids) { for (Long id : ids) {
// 同级数据 // 同级数据
SystemDeptTb dept = this.getDeptById(id); SystemDeptVo dept = this.getDeptVoById(id);
// 上级数据 // 上级数据
List<SystemDeptVo> depts = this.querySuperiorDeptByPid(dept, new ArrayList<>()); List<SystemDeptVo> depts = this.querySuperiorDeptByPid(dept, new ArrayList<>());
if (exclude) { if (exclude) {
@@ -314,7 +314,7 @@ public class SystemDeptService {
} }
if (isChild) { if (isChild) {
deptSet.add(dept); 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); deptSet.add(dept);
} }
} }
@@ -332,8 +332,8 @@ public class SystemDeptService {
* *
* @param deptSet / * @param deptSet /
*/ */
public void verifyBindRelationByIds(Set<SystemDeptTb> deptSet) { public void verifyBindRelationByIds(Set<SystemDeptVo> deptSet) {
Set<Long> deptIds = deptSet.stream().map(SystemDeptTb::getId).collect(Collectors.toSet()); Set<Long> deptIds = deptSet.stream().map(SystemDeptVo::getId).collect(Collectors.toSet());
if (systemUserDeptService.countUserByDeptIds(deptIds) > 0) { if (systemUserDeptService.countUserByDeptIds(deptIds) > 0) {
throw new BadRequestException("所选部门存在用户关联,请解除后再试!"); throw new BadRequestException("所选部门存在用户关联,请解除后再试!");
} }
@@ -353,11 +353,11 @@ public class SystemDeptService {
* *
* @param ids / * @param ids /
*/ */
public Set<SystemDeptTb> traverseDeptByIdWithPids(Set<Long> ids) { public Set<SystemDeptVo> traverseDeptByIdWithPids(Set<Long> ids) {
Set<SystemDeptTb> depts = new HashSet<>(); Set<SystemDeptVo> depts = new HashSet<>();
for (Long id : ids) { for (Long id : ids) {
// 根部门 // 根部门
depts.add(this.getDeptById(id)); depts.add(this.getDeptVoById(id));
// 子部门 // 子部门
List<SystemDeptVo> deptList = this.listDeptByPid(id); List<SystemDeptVo> deptList = this.listDeptByPid(id);
if (CollectionUtil.isNotEmpty(deptList)) { if (CollectionUtil.isNotEmpty(deptList)) {
@@ -109,7 +109,7 @@ public class SystemDictDetailService {
*/ */
public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, Page<SystemDictDetailTb> page) { public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, Page<SystemDictDetailTb> page) {
IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> KitBeanUtil.copyToClass(i, SystemDictDetailVo.class)); 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)); Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i));
for (SystemDictDetailVo record : iPage.getRecords()) { for (SystemDictDetailVo record : iPage.getRecords()) {
record.setDict(id2ItemMap.get(record.getDictId())); 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.SystemYesOrNoChConst;
import cn.odboy.system.constant.TransferProtocolConst; import cn.odboy.system.constant.TransferProtocolConst;
import cn.odboy.system.dal.dataobject.SystemMenuTb; 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.SystemMenuExportRowVo;
import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuMetaVo;
import cn.odboy.system.dal.model.SystemMenuRouterVo; import cn.odboy.system.dal.model.SystemMenuRouterVo;
@@ -160,12 +159,12 @@ public class SystemMenuService {
menuSet = this.queryChildMenuByArgs(menuList, menuSet); menuSet = this.queryChildMenuByArgs(menuList, menuSet);
} }
List<Long> menuIds = 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)) { if (CollUtil.isNotEmpty(menuIds)) {
systemRoleMenuService.deleteRoleMenuByMenuIds(menuIds); systemRoleMenuService.deleteRoleMenuByMenuIds(menuIds);
systemMenuMapper.deleteByIds(menuIds); systemMenuMapper.deleteByIds(menuIds);
} }
for (SystemMenuTb menu : menuSet) { for (SystemMenuVo menu : menuSet) {
this.updateMenuSubCnt(menu.getPid()); this.updateMenuSubCnt(menu.getPid());
} }
} }
@@ -222,7 +221,7 @@ public class SystemMenuService {
*/ */
public List<SystemMenuVo> listMenuByUserId(Long currentUserId) { public List<SystemMenuVo> listMenuByUserId(Long currentUserId) {
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(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)); return new ArrayList<>(systemRoleMenuService.queryMenuByRoleIds(roleIds));
} }
@@ -270,7 +269,7 @@ public class SystemMenuService {
* @param menus / * @param menus /
* @return / * @return /
*/ */
public List<SystemMenuVo> querySuperiorMenuByArgs(SystemMenuTb menu, List<SystemMenuVo> menus) { public List<SystemMenuVo> querySuperiorMenuByArgs(SystemMenuVo menu, List<SystemMenuVo> menus) {
if (menu.getPid() == null) { if (menu.getPid() == null) {
menus.addAll(this.listRootMenu()); menus.addAll(this.listRootMenu());
return menus; return menus;
@@ -364,7 +363,7 @@ public class SystemMenuService {
* @param menuVo / * @param menuVo /
* @return / * @return /
*/ */
private SystemMenuRouterVo getMenuVo(SystemMenuTb menu, SystemMenuRouterVo menuVo) { private SystemMenuRouterVo getMenuVo(SystemMenuVo menu, SystemMenuRouterVo menuVo) {
SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo(); SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo();
menuVo1.setMeta(menuVo.getMeta()); menuVo1.setMeta(menuVo.getMeta());
// 非外链 // 非外链
@@ -435,7 +434,7 @@ public class SystemMenuService {
List<SystemMenuVo> menuList = this.listMenuByPid(id); List<SystemMenuVo> menuList = this.listMenuByPid(id);
menuSet.add(this.getMenuVoById(id)); menuSet.add(this.getMenuVoById(id));
menuSet = this.queryChildMenuByArgs(menuList, menuSet); 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) { public List<SystemMenuVo> listMenuSuperior(List<Long> ids) {
@@ -443,7 +442,7 @@ public class SystemMenuService {
List<SystemMenuVo> systemMenuTbs; List<SystemMenuVo> systemMenuTbs;
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
menus = new LinkedHashSet<>(this.listMenuByIds(ids)); menus = new LinkedHashSet<>(this.listMenuByIds(ids));
for (SystemMenuTb menu : menus) { for (SystemMenuVo menu : menus) {
List<SystemMenuVo> menuList = this.querySuperiorMenuByArgs(menu, new ArrayList<>()); List<SystemMenuVo> menuList = this.querySuperiorMenuByArgs(menu, new ArrayList<>());
for (SystemMenuVo data : menuList) { for (SystemMenuVo data : menuList) {
if (data.getId().equals(menu.getPid())) { if (data.getId().equals(menu.getPid())) {
@@ -79,7 +79,7 @@ public class SystemQuartzJobService {
* @param args / * @param args /
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void createJob(SystemQuartzJobTb args) { public void createJob(SystemQuartzJobVo args) {
if (args.getId() != null) { if (args.getId() != null) {
throw new BadRequestException("无效参数id"); throw new BadRequestException("无效参数id");
} }
@@ -88,7 +88,8 @@ public class SystemQuartzJobService {
if (!CronExpression.isValidExpression(args.getCronExpression())) { if (!CronExpression.isValidExpression(args.getCronExpression())) {
throw new BadRequestException("cron表达式格式错误"); throw new BadRequestException("cron表达式格式错误");
} }
systemQuartzJobMapper.insert(args); SystemQuartzJobTb record = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insert(record);
quartzManage.addJob(args); quartzManage.addJob(args);
} }
@@ -110,9 +111,10 @@ public class SystemQuartzJobService {
throw new BadRequestException("子任务中不能添加当前任务ID"); throw new BadRequestException("子任务中不能添加当前任务ID");
} }
} }
SystemQuartzJobTb quartzJob = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class); SystemQuartzJobTb jobTb = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(quartzJob); systemQuartzJobMapper.insertOrUpdate(jobTb);
quartzManage.updateJobCron(quartzJob); SystemQuartzJobVo jobVo = KitBeanUtil.copyToClass(args, SystemQuartzJobVo.class);
quartzManage.updateJobCron(jobVo);
} }
/** /**
@@ -121,7 +123,7 @@ public class SystemQuartzJobService {
* @param quartzJob / * @param quartzJob /
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void switchQuartzJobStatus(SystemQuartzJobTb quartzJob) { public void switchQuartzJobStatus(SystemQuartzJobVo quartzJob) {
// 置换暂停状态 // 置换暂停状态
if (quartzJob.getIsPause()) { if (quartzJob.getIsPause()) {
quartzManage.resumeJob(quartzJob); quartzManage.resumeJob(quartzJob);
@@ -130,7 +132,8 @@ public class SystemQuartzJobService {
quartzManage.pauseJob(quartzJob); quartzManage.pauseJob(quartzJob);
quartzJob.setIsPause(true); 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 / * @param quartzJob /
*/ */
public void startQuartzJob(SystemQuartzJobTb quartzJob) { public void startQuartzJob(SystemQuartzJobVo quartzJob) {
quartzManage.runJobNow(quartzJob); quartzManage.runJobNow(quartzJob);
} }
@@ -263,31 +266,18 @@ public class SystemQuartzJobService {
return systemQuartzLogMapper.selectList(wrapper); return systemQuartzLogMapper.selectList(wrapper);
} }
public SystemQuartzJobTb getQuartzJobById(Long id) { public SystemQuartzJobVo getQuartzJobById(Long id) {
return systemQuartzJobMapper.selectById(id); return KitBeanUtil.copyToClass(systemQuartzJobMapper.selectById(id), SystemQuartzJobVo.class);
} }
public List<SystemQuartzJobTb> listEnableQuartzJob() { public List<SystemQuartzJobVo> listEnableQuartzJob() {
LambdaQueryWrapper<SystemQuartzJobTb> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SystemQuartzJobTb> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SystemQuartzJobTb::getIsPause, 0); wrapper.eq(SystemQuartzJobTb::getIsPause, 0);
return systemQuartzJobMapper.selectList(wrapper); return KitBeanUtil.copyToList(systemQuartzJobMapper.selectList(wrapper), SystemQuartzJobVo.class);
} }
public void exportQuartzJobXlsx(HttpServletResponse response, SystemQueryQuartzJobArgs args) { public void exportQuartzJobXlsx(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
List<SystemQuartzJobTb> systemQuartzJobTbs = this.queryQuartzJobByArgs(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<>(); List<SystemQuartzJobExportRowVo> rowVos = new ArrayList<>();
for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) { for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) {
SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo(); SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo();
@@ -21,7 +21,6 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException; 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.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemCreateRoleArgs; import cn.odboy.system.dal.model.SystemCreateRoleArgs;
@@ -94,7 +93,7 @@ public class SystemRoleService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateRoleById(SystemRoleVo args) { public void updateRoleById(SystemRoleVo args) {
checkRoleLevels(args.getLevel()); checkRoleLevels(args.getLevel());
SystemRoleVo role = this.getRoleVoById(args.getId()); SystemRoleTb role = this.getRoleTbById(args.getId());
SystemRoleTb role1 = this.getRoleByName(args.getName()); SystemRoleTb role1 = this.getRoleByName(args.getName());
if (role1 != null && !role1.getId().equals(role.getId())) { if (role1 != null && !role1.getId().equals(role.getId())) {
throw new BadRequestException("角色名称已存在"); throw new BadRequestException("角色名称已存在");
@@ -102,7 +101,6 @@ public class SystemRoleService {
role.setName(args.getName()); role.setName(args.getName());
role.setDescription(args.getDescription()); role.setDescription(args.getDescription());
role.setDataScope(args.getDataScope()); role.setDataScope(args.getDataScope());
role.setDepts(args.getDepts());
role.setLevel(args.getLevel()); role.setLevel(args.getLevel());
// 更新 // 更新
systemRoleMapper.insertOrUpdate(role); systemRoleMapper.insertOrUpdate(role);
@@ -114,8 +112,8 @@ public class SystemRoleService {
} }
} }
private SystemRoleVo getRoleVoById(Long id) { private SystemRoleTb getRoleTbById(Long id) {
return KitBeanUtil.copyToClass(systemRoleMapper.selectById(id), SystemRoleVo.class); return systemRoleMapper.selectById(id);
} }
/** /**
@@ -223,7 +221,7 @@ public class SystemRoleService {
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
} }
List<SystemRoleVo> roles = systemUserRoleService.queryRoleByUsersId(user.getId()); 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()); .filter(StrUtil::isNotBlank).collect(Collectors.toSet());
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
} }
@@ -271,7 +269,7 @@ public class SystemRoleService {
*/ */
private int checkRoleLevels(Integer level) { private int checkRoleLevels(Integer level) {
List<Integer> levels = systemUserRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream() List<Integer> levels = systemUserRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList()); .map(SystemRoleVo::getLevel).collect(Collectors.toList());
int min = Collections.min(levels); int min = Collections.min(levels);
if (level != null) { if (level != null) {
if (level < min) { if (level < min) {
@@ -18,7 +18,6 @@ package cn.odboy.system.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserRoleTb; import cn.odboy.system.dal.dataobject.SystemUserRoleTb;
import cn.odboy.system.dal.model.SystemMenuVo; import cn.odboy.system.dal.model.SystemMenuVo;
@@ -141,7 +140,7 @@ public class SystemUserRoleService {
public void checkLevel(SystemUserVo args) { public void checkLevel(SystemUserVo args) {
Integer currentLevel = Collections.min( Integer currentLevel = Collections.min(
this.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream() this.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList())); .map(SystemRoleVo::getLevel).collect(Collectors.toList()));
Integer optLevel = this.getDeptLevelByRoles(args.getRoles()); Integer optLevel = this.getDeptLevelByRoles(args.getRoles());
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足"); throw new BadRequestException("角色权限不足");
@@ -26,7 +26,6 @@ import cn.odboy.framework.properties.AppProperties;
import cn.odboy.framework.server.core.KitFileLocalUploadHelper; import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
import cn.odboy.system.constant.SystemCaptchaBizEnum; import cn.odboy.system.constant.SystemCaptchaBizEnum;
import cn.odboy.system.constant.SystemZhConst; 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.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserJobTb; 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.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemDeptVo; import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemQueryUserArgs; 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.SystemUpdateUserPasswordArgs;
import cn.odboy.system.dal.model.SystemUserExportRowVo; import cn.odboy.system.dal.model.SystemUserExportRowVo;
import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.model.SystemUserVo;
@@ -205,9 +205,9 @@ public class SystemUserService {
for (Long id : ids) { for (Long id : ids) {
Integer currentLevel = Collections.min( Integer currentLevel = Collections.min(
systemUserRoleService.queryRoleByUsersId(currentUserId).stream() systemUserRoleService.queryRoleByUsersId(currentUserId).stream()
.map(SystemRoleTb::getLevel).collect(Collectors.toList())); .map(SystemRoleVo::getLevel).collect(Collectors.toList()));
Integer optLevel = Collections.min( Integer optLevel = Collections.min(
systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleTb::getLevel) systemUserRoleService.queryRoleByUsersId(id).stream().map(SystemRoleVo::getLevel)
.collect(Collectors.toList())); .collect(Collectors.toList()));
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException( throw new BadRequestException(
@@ -439,7 +439,7 @@ public class SystemUserService {
SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class); SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
// 查询关联的部门信息 // 查询关联的部门信息
if (user.getDeptId() != null) { if (user.getDeptId() != null) {
SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId()); SystemDeptVo dept = systemDeptService.getDeptVoById(user.getDeptId());
userVo.setDept(dept); userVo.setDept(dept);
} }
// 查询关联的岗位信息 // 查询关联的岗位信息
@@ -16,9 +16,9 @@
package cn.odboy; package cn.odboy;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.model.SystemUserVo;
import cn.odboy.system.service.SystemUserService; import cn.odboy.system.service.SystemUserService;
import java.util.Set; import java.util.Set;
@@ -40,7 +40,7 @@ public class SystemApplicationTests {
@Test @Test
public void contextLoads() { public void contextLoads() {
SystemDeptTb systemDept = new SystemDeptTb(); SystemDeptVo systemDept = new SystemDeptVo();
systemDept.setId(2L); systemDept.setId(2L);
SystemJobTb systemJob = new SystemJobTb(); SystemJobTb systemJob = new SystemJobTb();
systemJob.setId(11L); systemJob.setId(11L);