diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/controller/PortalUserAppController.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/controller/PortalUserAppController.java new file mode 100644 index 000000000..c536d0265 --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/controller/PortalUserAppController.java @@ -0,0 +1,101 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.controller; + +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.sys.modular.userapp.entity.PortalUserApp; +import cn.stylefeng.roses.kernel.sys.modular.userapp.pojo.request.PortalUserAppRequest; +import cn.stylefeng.roses.kernel.sys.modular.userapp.service.PortalUserAppService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 用户常用功能控制器 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +@RestController +@ApiResource(name = "用户常用功能") +public class PortalUserAppController { + + @Resource + private PortalUserAppService portalUserAppService; + + /** + * 添加 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + @PostResource(name = "添加", path = "/portalUserApp/add") + public ResponseData add(@RequestBody @Validated(PortalUserAppRequest.add.class) PortalUserAppRequest portalUserAppRequest) { + portalUserAppService.add(portalUserAppRequest); + return new SuccessResponseData<>(); + } + + /** + * 删除 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + @PostResource(name = "删除", path = "/portalUserApp/delete") + public ResponseData delete(@RequestBody @Validated(PortalUserAppRequest.delete.class) PortalUserAppRequest portalUserAppRequest) { + portalUserAppService.del(portalUserAppRequest); + return new SuccessResponseData<>(); + } + + /** + * 编辑 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + @PostResource(name = "编辑", path = "/portalUserApp/edit") + public ResponseData edit(@RequestBody @Validated(PortalUserAppRequest.edit.class) PortalUserAppRequest portalUserAppRequest) { + portalUserAppService.edit(portalUserAppRequest); + return new SuccessResponseData<>(); + } + + /** + * 查看详情 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + @GetResource(name = "查看详情", path = "/portalUserApp/detail") + public ResponseData detail(@Validated(PortalUserAppRequest.detail.class) PortalUserAppRequest portalUserAppRequest) { + return new SuccessResponseData<>(portalUserAppService.detail(portalUserAppRequest)); + } + + /** + * 获取列表 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + @GetResource(name = "获取列表", path = "/portalUserApp/list") + public ResponseData> list(PortalUserAppRequest portalUserAppRequest) { + return new SuccessResponseData<>(portalUserAppService.findList(portalUserAppRequest)); + } + + /** + * 获取列表(带分页) + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + @GetResource(name = "分页查询", path = "/portalUserApp/page") + public ResponseData> page(PortalUserAppRequest portalUserAppRequest) { + return new SuccessResponseData<>(portalUserAppService.findPage(portalUserAppRequest)); + } + +} diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/entity/PortalUserApp.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/entity/PortalUserApp.java new file mode 100644 index 000000000..0fbd6b539 --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/entity/PortalUserApp.java @@ -0,0 +1,51 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.entity; + +import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户常用功能实例类 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +@TableName("portal_user_app") +@Data +@EqualsAndHashCode(callSuper = true) +public class PortalUserApp extends BaseEntity { + + /** + * 主键id + */ + @TableId(value = "app_link_id", type = IdType.ASSIGN_ID) + @ChineseDescription("主键id") + private Long appLinkId; + + /** + * 冗余字段,菜单所属的应用id + */ + @TableField("app_id") + @ChineseDescription("冗余字段,菜单所属的应用id") + private Long appId; + + /** + * 关联的菜单id + */ + @TableField("menu_id") + @ChineseDescription("关联的菜单id") + private Long menuId; + + /** + * 租户id + */ + @TableField("tenant_id") + @ChineseDescription("租户id") + private Long tenantId; + +} diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/enums/PortalUserAppExceptionEnum.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/enums/PortalUserAppExceptionEnum.java new file mode 100644 index 000000000..96a1d7910 --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/enums/PortalUserAppExceptionEnum.java @@ -0,0 +1,36 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.enums; + +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; +import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum; +import lombok.Getter; + +/** + * 用户常用功能异常相关枚举 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +@Getter +public enum PortalUserAppExceptionEnum implements AbstractExceptionEnum { + + /** + * 查询结果不存在 + */ + PORTAL_USER_APP_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"); + + /** + * 错误编码 + */ + private final String errorCode; + + /** + * 提示用户信息 + */ + private final String userTip; + + PortalUserAppExceptionEnum(String errorCode, String userTip) { + this.errorCode = errorCode; + this.userTip = userTip; + } + +} \ No newline at end of file diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/mapper/PortalUserAppMapper.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/mapper/PortalUserAppMapper.java new file mode 100644 index 000000000..98d5620f5 --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/mapper/PortalUserAppMapper.java @@ -0,0 +1,14 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.mapper; + +import cn.stylefeng.roses.kernel.sys.modular.userapp.entity.PortalUserApp; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 用户常用功能 Mapper 接口 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +public interface PortalUserAppMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/mapper/mapping/PortalUserAppMapper.xml b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/mapper/mapping/PortalUserAppMapper.xml new file mode 100644 index 000000000..734958b81 --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/mapper/mapping/PortalUserAppMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/pojo/request/PortalUserAppRequest.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/pojo/request/PortalUserAppRequest.java new file mode 100644 index 000000000..a06095b1f --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/pojo/request/PortalUserAppRequest.java @@ -0,0 +1,45 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.pojo.request; + +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +/** + * 用户常用功能封装类 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class PortalUserAppRequest extends BaseRequest { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {edit.class, delete.class}) + @ChineseDescription("主键id") + private Long appLinkId; + + /** + * 冗余字段,菜单所属的应用id + */ + @ChineseDescription("冗余字段,菜单所属的应用id") + private Long appId; + + /** + * 关联的菜单id + */ + @ChineseDescription("关联的菜单id") + private Long menuId; + + /** + * 租户id + */ + @ChineseDescription("租户id") + private Long tenantId; + +} diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/service/PortalUserAppService.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/service/PortalUserAppService.java new file mode 100644 index 000000000..16d7dbdad --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/service/PortalUserAppService.java @@ -0,0 +1,74 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.service; + +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.sys.modular.userapp.entity.PortalUserApp; +import cn.stylefeng.roses.kernel.sys.modular.userapp.pojo.request.PortalUserAppRequest; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 用户常用功能 服务类 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +public interface PortalUserAppService extends IService { + + /** + * 新增 + * + * @param portalUserAppRequest 请求参数 + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + void add(PortalUserAppRequest portalUserAppRequest); + + /** + * 删除 + * + * @param portalUserAppRequest 请求参数 + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + void del(PortalUserAppRequest portalUserAppRequest); + + /** + * 编辑 + * + * @param portalUserAppRequest 请求参数 + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + void edit(PortalUserAppRequest portalUserAppRequest); + + /** + * 查询详情 + * + * @param portalUserAppRequest 请求参数 + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + PortalUserApp detail(PortalUserAppRequest portalUserAppRequest); + + /** + * 获取列表 + * + * @param portalUserAppRequest 请求参数 + * @return List 返回结果 + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + List findList(PortalUserAppRequest portalUserAppRequest); + + /** + * 获取列表(带分页) + * + * @param portalUserAppRequest 请求参数 + * @return PageResult 返回结果 + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + PageResult findPage(PortalUserAppRequest portalUserAppRequest); + +} \ No newline at end of file diff --git a/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/service/impl/PortalUserAppServiceImpl.java b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/service/impl/PortalUserAppServiceImpl.java new file mode 100644 index 000000000..384b671b1 --- /dev/null +++ b/kernel-s-sys/sys-business-portal/src/main/java/cn/stylefeng/roses/kernel/sys/modular/userapp/service/impl/PortalUserAppServiceImpl.java @@ -0,0 +1,104 @@ +package cn.stylefeng.roses.kernel.sys.modular.userapp.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; +import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import cn.stylefeng.roses.kernel.sys.modular.userapp.entity.PortalUserApp; +import cn.stylefeng.roses.kernel.sys.modular.userapp.enums.PortalUserAppExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.userapp.mapper.PortalUserAppMapper; +import cn.stylefeng.roses.kernel.sys.modular.userapp.pojo.request.PortalUserAppRequest; +import cn.stylefeng.roses.kernel.sys.modular.userapp.service.PortalUserAppService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户常用功能业务实现层 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ +@Service +public class PortalUserAppServiceImpl extends ServiceImpl implements PortalUserAppService { + + @Override + public void add(PortalUserAppRequest portalUserAppRequest) { + PortalUserApp portalUserApp = new PortalUserApp(); + BeanUtil.copyProperties(portalUserAppRequest, portalUserApp); + this.save(portalUserApp); + } + + @Override + public void del(PortalUserAppRequest portalUserAppRequest) { + PortalUserApp portalUserApp = this.queryPortalUserApp(portalUserAppRequest); + this.removeById(portalUserApp.getAppLinkId()); + } + + @Override + public void edit(PortalUserAppRequest portalUserAppRequest) { + PortalUserApp portalUserApp = this.queryPortalUserApp(portalUserAppRequest); + BeanUtil.copyProperties(portalUserAppRequest, portalUserApp); + this.updateById(portalUserApp); + } + + @Override + public PortalUserApp detail(PortalUserAppRequest portalUserAppRequest) { + return this.queryPortalUserApp(portalUserAppRequest); + } + + @Override + public PageResult findPage(PortalUserAppRequest portalUserAppRequest) { + LambdaQueryWrapper wrapper = createWrapper(portalUserAppRequest); + Page sysRolePage = this.page(PageFactory.defaultPage(), wrapper); + return PageResultFactory.createPageResult(sysRolePage); + } + + @Override + public List findList(PortalUserAppRequest portalUserAppRequest) { + LambdaQueryWrapper wrapper = this.createWrapper(portalUserAppRequest); + return this.list(wrapper); + } + + /** + * 获取信息 + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + private PortalUserApp queryPortalUserApp(PortalUserAppRequest portalUserAppRequest) { + PortalUserApp portalUserApp = this.getById(portalUserAppRequest.getAppLinkId()); + if (ObjectUtil.isEmpty(portalUserApp)) { + throw new ServiceException(PortalUserAppExceptionEnum.PORTAL_USER_APP_NOT_EXISTED); + } + return portalUserApp; + } + + /** + * 创建查询wrapper + * + * @author fengshuonan + * @date 2023/06/26 21:25 + */ + private LambdaQueryWrapper createWrapper(PortalUserAppRequest portalUserAppRequest) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + Long appLinkId = portalUserAppRequest.getAppLinkId(); + Long appId = portalUserAppRequest.getAppId(); + Long menuId = portalUserAppRequest.getMenuId(); + Long tenantId = portalUserAppRequest.getTenantId(); + + queryWrapper.eq(ObjectUtil.isNotNull(appLinkId), PortalUserApp::getAppLinkId, appLinkId); + queryWrapper.eq(ObjectUtil.isNotNull(appId), PortalUserApp::getAppId, appId); + queryWrapper.eq(ObjectUtil.isNotNull(menuId), PortalUserApp::getMenuId, menuId); + queryWrapper.eq(ObjectUtil.isNotNull(tenantId), PortalUserApp::getTenantId, tenantId); + + return queryWrapper; + } + +} \ No newline at end of file