fit():修改sysMenu菜单新增,修改ddd模型

boot3.0
yangchaoshun 2025-02-24 12:20:11 +08:00
parent 11d790a0f4
commit b813bf2c6e
10 changed files with 493 additions and 31 deletions

View File

@ -88,7 +88,7 @@ public class SysLogininforController extends BaseController {
return success();
}
@InnerAuth
/*@InnerAuth*/
@PostMapping
public Result add (@RequestBody SysLogininforAddReq logininforAddReq) {
logininforService.insertLogininfor(SysLogininforAddModel.of(logininforAddReq));

View File

@ -9,8 +9,12 @@ import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.system.domain.SysMenu;
import com.muyu.system.domain.model.SysMenuAddModel;
import com.muyu.system.domain.model.SysMenuListModel;
import com.muyu.system.domain.model.SysMenuUpdModel;
import com.muyu.system.domain.rep.SysMenuAddReq;
import com.muyu.system.domain.rep.SysMenuListReq;
import com.muyu.system.domain.rep.SysMenuUpdReq;
import com.muyu.system.domain.resp.RoleMenuTreeResp;
import com.muyu.system.domain.resp.SysMenuListResp;
import com.muyu.system.service.SysMenuService;
@ -84,14 +88,16 @@ public class SysMenuController extends BaseController {
@RequiresPermissions("system:menu:add")
@Log(title = "菜单管理", businessType = BusinessType.INSERT)
@PostMapping
public Result add (@Validated @RequestBody SysMenu menu) {
if (!menuService.checkMenuNameUnique(menu)) {
return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
} else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
return error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
public Result add (@Validated @RequestBody SysMenuAddReq sysMenuAddReq) {
SysMenuAddModel sysMenuAddModel = SysMenuAddModel.of(sysMenuAddReq);
if (!menuService.checkMenuNameUnique(sysMenuAddModel)) {
return error("新增菜单'" + sysMenuAddModel.getMenuName() + "'失败,菜单名称已存在");
} else if (UserConstants.YES_FRAME.equals(sysMenuAddModel.getIsFrame()) && !StringUtils.ishttp(sysMenuAddModel.getPath())) {
return error("新增菜单'" + sysMenuAddModel.getMenuName() + "'失败地址必须以http(s)://开头");
}
SysMenu menu = SysMenu.buildSysMenu(sysMenuAddReq);
menu.setCreateBy(SecurityUtils.getUsername());
menuService.insertMenu(menu);
menuService.insertMenu(SysMenuAddModel.of(sysMenuAddReq));
return Result.success();
}
@ -101,16 +107,17 @@ public class SysMenuController extends BaseController {
@RequiresPermissions("system:menu:edit")
@Log(title = "菜单管理", businessType = BusinessType.UPDATE)
@PutMapping
public Result edit (@Validated @RequestBody SysMenu menu) {
if (!menuService.checkMenuNameUnique(menu)) {
return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
} else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
return error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
} else if (menu.getMenuId().equals(menu.getParentId())) {
return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
public Result edit (@Validated @RequestBody SysMenuUpdReq sysMenuUpdReq) {
SysMenuAddModel sysMenuAddModel = SysMenuAddModel.buildSysMenuAddModel(sysMenuUpdReq);
if (!menuService.checkMenuNameUnique(sysMenuAddModel)) {
return error("新增菜单'" + sysMenuAddModel.getMenuName() + "'失败,菜单名称已存在");
} else if (UserConstants.YES_FRAME.equals(sysMenuAddModel.getIsFrame()) && !StringUtils.ishttp(sysMenuAddModel.getPath())) {
return error("新增菜单'" + sysMenuAddModel.getMenuName() + "'失败地址必须以http(s)://开头");
}
SysMenu menu = SysMenu.buildSysMenu(sysMenuAddModel);
menu.setCreateBy(SecurityUtils.getUsername());
menu.setUpdateBy(SecurityUtils.getUsername());
menuService.updateMenu(menu);
menuService.updateMenu(SysMenuUpdModel.of(sysMenuUpdReq));
return Result.success();
}

View File

@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.common.core.web.domain.BaseEntity;
import com.muyu.system.domain.model.SysMenuAddModel;
import com.muyu.system.domain.model.SysMenuListModel;
import com.muyu.system.domain.model.SysMenuUpdModel;
import com.muyu.system.domain.rep.SysMenuAddReq;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
@ -123,6 +126,7 @@ public class SysMenu extends BaseEntity {
*
*/
@Builder.Default
@TableField(exist = false)
private List<SysMenu> children = new ArrayList<SysMenu>();
@NotBlank(message = "菜单名称不能为空")
@ -197,4 +201,65 @@ public class SysMenu extends BaseEntity {
.children(sysMenuListModel.getChildren())
.build();
}
public static SysMenu buildSysMenu(SysMenuAddReq sysMenuAddReq) {
return SysMenu.builder()
.menuId(sysMenuAddReq.getMenuId())
.menuName(sysMenuAddReq.getMenuName())
.parentName(sysMenuAddReq.getParentName())
.parentId(sysMenuAddReq.getParentId())
.orderNum(sysMenuAddReq.getOrderNum())
.path(sysMenuAddReq.getPath())
.component(sysMenuAddReq.getComponent())
.query(sysMenuAddReq.getQuery())
.isFrame(sysMenuAddReq.getIsFrame())
.isCache(sysMenuAddReq.getIsCache())
.menuType(sysMenuAddReq.getMenuType())
.visible(sysMenuAddReq.getVisible())
.status(sysMenuAddReq.getStatus())
.perms(sysMenuAddReq.getPerms())
.icon(sysMenuAddReq.getIcon())
.children(sysMenuAddReq.getChildren())
.build();
}
public static SysMenu buildSysMenu(SysMenuAddModel sysMenuAddModel) {
return SysMenu.builder()
.menuName(sysMenuAddModel.getMenuName())
.parentId(sysMenuAddModel.getParentId())
.orderNum(sysMenuAddModel.getOrderNum())
.path(sysMenuAddModel.getPath())
.component(sysMenuAddModel.getComponent())
.query(sysMenuAddModel.getQuery())
.isFrame(sysMenuAddModel.getIsFrame())
.isCache(sysMenuAddModel.getIsCache())
.menuType(sysMenuAddModel.getMenuType())
.visible(sysMenuAddModel.getVisible())
.status(sysMenuAddModel.getStatus())
.perms(sysMenuAddModel.getPerms())
.icon(sysMenuAddModel.getIcon())
.children(sysMenuAddModel.getChildren())
.build();
}
public static SysMenu buildSysMenu(SysMenuUpdModel sysMenuUpdModel) {
return SysMenu.builder()
.menuId(sysMenuUpdModel.getMenuId())
.menuName(sysMenuUpdModel.getMenuName())
.parentId(sysMenuUpdModel.getParentId())
.orderNum(sysMenuUpdModel.getOrderNum())
.path(sysMenuUpdModel.getPath())
.component(sysMenuUpdModel.getComponent())
.query(sysMenuUpdModel.getQuery())
.isFrame(sysMenuUpdModel.getIsFrame())
.isCache(sysMenuUpdModel.getIsCache())
.menuType(sysMenuUpdModel.getMenuType())
.visible(sysMenuUpdModel.getVisible())
.status(sysMenuUpdModel.getStatus())
.perms(sysMenuUpdModel.getPerms())
.icon(sysMenuUpdModel.getIcon())
.children(sysMenuUpdModel.getChildren())
.build();
}
}

View File

@ -0,0 +1,140 @@
package com.muyu.system.domain.model;
import com.muyu.system.domain.SysMenu;
import com.muyu.system.domain.rep.SysMenuAddReq;
import com.muyu.system.domain.rep.SysMenuUpdReq;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author yangchoashun
* @date 2025/2/23 17:24
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysMenuAddModel {
/**
* ID
*/
private Long menuId;
/**
*
*/
private String menuName;
/**
* ID
*/
private Long parentId;
/**
*
*/
private Integer orderNum;
/**
*
*/
private String path;
/**
*
*/
private String component;
/**
*
*/
private String query;
/**
* 0 1
*/
private String isFrame;
/**
* 0 1
*/
private String isCache;
/**
* M C F
*/
private String menuType;
/**
* 0 1
*/
private String visible;
/**
* 0 1
*/
private String status;
/**
*
*/
private String perms;
/**
*
*/
private String icon;
/**
*
*/
private List<SysMenu> children = new ArrayList<SysMenu>();
public static SysMenuAddModel of(SysMenuAddReq sysMenuAddReq) {
return SysMenuAddModel.builder()
.menuName(sysMenuAddReq.getMenuName())
.parentId(sysMenuAddReq.getParentId())
.orderNum(sysMenuAddReq.getOrderNum())
.path(sysMenuAddReq.getPath())
.component(sysMenuAddReq.getComponent())
.query(sysMenuAddReq.getQuery())
.isFrame(sysMenuAddReq.getIsFrame())
.isCache(sysMenuAddReq.getIsCache())
.menuType(sysMenuAddReq.getMenuType())
.visible(sysMenuAddReq.getVisible())
.status(sysMenuAddReq.getStatus())
.perms(sysMenuAddReq.getPerms())
.icon(sysMenuAddReq.getIcon())
.children(sysMenuAddReq.getChildren())
.build();
}
public static SysMenuAddModel buildSysMenuAddModel(SysMenuUpdReq sysMenuUpdReq){
return SysMenuAddModel.builder()
.menuName(sysMenuUpdReq.getMenuName())
.parentId(sysMenuUpdReq.getParentId())
.orderNum(sysMenuUpdReq.getOrderNum())
.path(sysMenuUpdReq.getPath())
.component(sysMenuUpdReq.getComponent())
.query(sysMenuUpdReq.getQuery())
.isFrame(sysMenuUpdReq.getIsFrame())
.isCache(sysMenuUpdReq.getIsCache())
.menuType(sysMenuUpdReq.getMenuType())
.visible(sysMenuUpdReq.getVisible())
.status(sysMenuUpdReq.getStatus())
.perms(sysMenuUpdReq.getPerms())
.icon(sysMenuUpdReq.getIcon())
.children(sysMenuUpdReq.getChildren())
.build();
}
}

View File

@ -0,0 +1,119 @@
package com.muyu.system.domain.model;
import com.muyu.system.domain.SysMenu;
import com.muyu.system.domain.rep.SysMenuAddReq;
import com.muyu.system.domain.rep.SysMenuUpdReq;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author yangchoashun
* @date 2025/2/23 17:24
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysMenuUpdModel {
/**
* ID
*/
private Long menuId;
/**
*
*/
private String menuName;
/**
* ID
*/
private Long parentId;
/**
*
*/
private Integer orderNum;
/**
*
*/
private String path;
/**
*
*/
private String component;
/**
*
*/
private String query;
/**
* 0 1
*/
private String isFrame;
/**
* 0 1
*/
private String isCache;
/**
* M C F
*/
private String menuType;
/**
* 0 1
*/
private String visible;
/**
* 0 1
*/
private String status;
/**
*
*/
private String perms;
/**
*
*/
private String icon;
/**
*
*/
private List<SysMenu> children = new ArrayList<SysMenu>();
public static SysMenuUpdModel of(SysMenuUpdReq sysMenuUpdReq) {
return SysMenuUpdModel.builder()
.menuName(sysMenuUpdReq.getMenuName())
.parentId(sysMenuUpdReq.getParentId())
.orderNum(sysMenuUpdReq.getOrderNum())
.path(sysMenuUpdReq.getPath())
.component(sysMenuUpdReq.getComponent())
.query(sysMenuUpdReq.getQuery())
.isFrame(sysMenuUpdReq.getIsFrame())
.isCache(sysMenuUpdReq.getIsCache())
.menuType(sysMenuUpdReq.getMenuType())
.visible(sysMenuUpdReq.getVisible())
.status(sysMenuUpdReq.getStatus())
.perms(sysMenuUpdReq.getPerms())
.icon(sysMenuUpdReq.getIcon())
.children(sysMenuUpdReq.getChildren())
.build();
}
}

View File

@ -1,6 +1,8 @@
package com.muyu.system.domain.rep;
import com.muyu.system.domain.SysMenu;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -25,6 +27,7 @@ public class SysMenuAddReq {
/**
*
*/
@NotBlank(message = "菜单名称不能为空")
private String menuName;
/**
@ -41,19 +44,19 @@ public class SysMenuAddReq {
/**
*
*/
@NotNull(message = "显示顺序不能为空")
private Integer orderNum;
/**
*
*/
@NotBlank(message = "路由地址不能为空")
private String path;
/**
*
*/
@NotBlank(message = "组件路径不能为空")
private String component;
/**
@ -64,26 +67,31 @@ public class SysMenuAddReq {
/**
* 0 1
*/
@NotBlank(message = "是否为外链不能为空")
private String isFrame;
/**
* 0 1
*/
@NotBlank(message = "是否缓存不能为空")
private String isCache;
/**
* M C F
*/
@NotBlank(message = "类型不能为空")
private String menuType;
/**
* 0 1
*/
@NotBlank(message = "显示状态不能为空")
private String visible;
/**
* 0 1
*/
@NotBlank(message = "菜单状态不能为空")
private String status;
/**
@ -94,10 +102,12 @@ public class SysMenuAddReq {
/**
*
*/
@NotBlank(message = "菜单图标不能为空")
private String icon;
/**
*
*/
private List<SysMenu> children = new ArrayList<SysMenu>();
}

View File

@ -0,0 +1,113 @@
package com.muyu.system.domain.rep;
import com.muyu.system.domain.SysMenu;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author yangchoashun
* @date 2025/2/23 17:24
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysMenuUpdReq {
private Long menuId;
/**
*
*/
@NotBlank(message = "菜单名称不能为空")
private String menuName;
/**
*
*/
private String parentName;
/**
* ID
*/
private Long parentId;
/**
*
*/
@NotNull(message = "显示顺序不能为空")
private Integer orderNum;
/**
*
*/
@NotBlank(message = "路由地址不能为空")
private String path;
/**
*
*/
@NotBlank(message = "组件路径不能为空")
private String component;
/**
*
*/
private String query;
/**
* 0 1
*/
@NotBlank(message = "是否为外链不能为空")
private String isFrame;
/**
* 0 1
*/
@NotBlank(message = "是否缓存不能为空")
private String isCache;
/**
* M C F
*/
@NotBlank(message = "类型不能为空")
private String menuType;
/**
* 0 1
*/
@NotBlank(message = "显示状态不能为空")
private String visible;
/**
* 0 1
*/
@NotBlank(message = "菜单状态不能为空")
private String status;
/**
*
*/
private String perms;
/**
*
*/
@NotBlank(message = "菜单图标不能为空")
private String icon;
/**
*
*/
private List<SysMenu> children = new ArrayList<SysMenu>();
}

View File

@ -2,7 +2,9 @@ package com.muyu.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.system.domain.SysMenu;
import com.muyu.system.domain.model.SysMenuAddModel;
import com.muyu.system.domain.model.SysMenuListModel;
import com.muyu.system.domain.model.SysMenuUpdModel;
import com.muyu.system.domain.vo.RouterVo;
import com.muyu.system.domain.vo.TreeSelect;
@ -127,16 +129,16 @@ public interface SysMenuService extends IService<SysMenu> {
/**
*
*
* @param menu
* @param sysMenuAddModel
*/
public void insertMenu (SysMenu menu);
public void insertMenu (SysMenuAddModel sysMenuAddModel);
/**
*
*
* @param menu
* @param sysMenuUpdModel
*/
public void updateMenu (SysMenu menu);
public void updateMenu (SysMenuUpdModel sysMenuUpdModel);
/**
*
@ -148,10 +150,10 @@ public interface SysMenuService extends IService<SysMenu> {
/**
*
*
* @param menu
* @param sysMenuAddModel
*
* @return
*/
public boolean checkMenuNameUnique (SysMenu menu);
public boolean checkMenuNameUnique (SysMenuAddModel sysMenuAddModel);
}

View File

@ -15,6 +15,7 @@ import com.muyu.system.service.SysLogininforService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
@ -36,6 +37,7 @@ public class SysLogininforServiceImpl extends ServiceImpl<SysLogininforMapper, S
@Override
public void insertLogininfor (SysLogininforAddModel logininforAddModel) {
SysLogininfor logininfor = SysLogininforAddModel.of(logininforAddModel);
logininfor.setAccessTime(new Date());
this.save(logininfor);
}

View File

@ -9,7 +9,9 @@ import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser;
import com.muyu.system.domain.SysMenu;
import com.muyu.system.domain.model.SysMenuAddModel;
import com.muyu.system.domain.model.SysMenuListModel;
import com.muyu.system.domain.model.SysMenuUpdModel;
import com.muyu.system.domain.vo.MetaVo;
import com.muyu.system.domain.vo.RouterVo;
import com.muyu.system.domain.vo.TreeSelect;
@ -301,25 +303,26 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/**
*
*
* @param menu
* @param sysMenuAddModel
*
* @return
*/
@Override
public void insertMenu (SysMenu menu) {
public void insertMenu (SysMenuAddModel sysMenuAddModel) {
SysMenu menu = SysMenu.buildSysMenu(sysMenuAddModel);
this.save(menu);
}
/**
*
*
* @param menu
* @param sysMenuUpdModel
*
* @return
*/
@Override
public void updateMenu (SysMenu menu) {
this.updateById(menu);
public void updateMenu (SysMenuUpdModel sysMenuUpdModel) {
this.updateById(SysMenu.buildSysMenu(sysMenuUpdModel));
}
/**
@ -337,12 +340,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/**
*
*
* @param menu
* @param sysMenuAddModel
*
* @return
*/
@Override
public boolean checkMenuNameUnique (SysMenu menu) {
public boolean checkMenuNameUnique (SysMenuAddModel sysMenuAddModel) {
SysMenu menu = SysMenu.buildSysMenu(sysMenuAddModel);
LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(SysMenu::getMenuName, menu.getMenuName());
lambdaQueryWrapper.ne(menu.getMenuId() != null, SysMenu::getParentId, menu.getParentId());