From 6d1eb5a72a352fc5e049d47653e584aea9f16895 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Mon, 2 Feb 2026 17:24:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AE=E6=92=AD=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrated/vo/banner/SysBannerAppVo.java | 39 +++++ .../vo/banner/SysBannerDetailVo.java | 21 +++ .../internalpage/SysInternalPageSelectVo.java | 27 +++ .../controller/SysBannerController.java | 158 ++++++++++++++++++ .../controller/SysInternalPageController.java | 114 +++++++++++++ .../integrated/entity/SysBannerEntity.java | 145 ++++++++++++++++ .../entity/SysInternalPageEntity.java | 67 ++++++++ .../integrated/mapper/SysBannerMapper.java | 15 ++ .../mapper/SysInternalPageMapper.java | 15 ++ .../integrated/service/SysBannerService.java | 22 +++ .../service/SysInternalPageService.java | 20 +++ .../service/impl/SysBannerServiceImpl.java | 33 ++++ .../impl/SysInternalPageServiceImpl.java | 31 ++++ .../main/resources/mapper/SysBannerMapper.xml | 27 +++ .../mapper/SysInternalPageMapper.xml | 20 +++ 15 files changed, 754 insertions(+) create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerAppVo.java create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerDetailVo.java create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/internalpage/SysInternalPageSelectVo.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysBannerController.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysInternalPageController.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysBannerEntity.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysInternalPageEntity.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysBannerMapper.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysInternalPageMapper.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysBannerService.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysInternalPageService.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysBannerServiceImpl.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysInternalPageServiceImpl.java create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysBannerMapper.xml create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysInternalPageMapper.xml diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerAppVo.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerAppVo.java new file mode 100644 index 000000000..69fb5186f --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerAppVo.java @@ -0,0 +1,39 @@ +package com.bsd.pjcloud.integrated.vo.banner; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * App端/外部系统轮播图VO + * + * @author pjcloud + * @date 2025-01-27 + */ +@Data +@Schema(description = "App端轮播图VO") +public class SysBannerAppVo { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "标题") + private String title; + + @Schema(description = "图片地址") + private String imageUrl; + + @Schema(description = "跳转类型:1-内部页面 2-外部链接 3-不跳转") + private Integer jumpType; + + @Schema(description = "跳转值(页面路径/外部链接)") + private String jumpValue; + + @Schema(description = "跳转参数JSON格式") + private String params; + + @Schema(description = "富文本内容(跳转到自编辑富文本页面时使用)") + private String richTextContent; + + @Schema(description = "排序序号") + private Integer sortOrder; +} diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerDetailVo.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerDetailVo.java new file mode 100644 index 000000000..ac268f7f9 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/banner/SysBannerDetailVo.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.integrated.vo.banner; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 轮播图详情VO(标题+富文本) + * + * @author pjcloud + * @date 2025-01-27 + */ +@Data +@Schema(description = "轮播图详情VO-标题与富文本") +public class SysBannerDetailVo { + + @Schema(description = "标题") + private String title; + + @Schema(description = "富文本内容") + private String richTextContent; +} diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/internalpage/SysInternalPageSelectVo.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/internalpage/SysInternalPageSelectVo.java new file mode 100644 index 000000000..929abeacc --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/internalpage/SysInternalPageSelectVo.java @@ -0,0 +1,27 @@ +package com.bsd.pjcloud.integrated.vo.internalpage; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 内部页面下拉选项VO + * + * @author pjcloud + * @date 2025-01-27 + */ +@Data +@Schema(description = "内部页面下拉选项") +public class SysInternalPageSelectVo { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "页面全路径(选后填到轮播图 jump_value)") + private String path; + + @Schema(description = "页面名称/显示名") + private String name; + + @Schema(description = "所属模块/分包名称") + private String moduleLabel; +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysBannerController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysBannerController.java new file mode 100644 index 000000000..c3e1ac996 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysBannerController.java @@ -0,0 +1,158 @@ +package com.bsd.pjcloud.integrated.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.integrated.config.ExternalAppConfig; +import com.bsd.pjcloud.integrated.entity.SysBannerEntity; +import com.bsd.pjcloud.integrated.service.SysBannerService; +import com.bsd.pjcloud.integrated.vo.banner.SysBannerAppVo; +import com.bsd.pjcloud.integrated.vo.banner.SysBannerDetailVo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 轮播图管理 + * + * @author pjcloud + * @date 2025-01-27 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/sysBanner") +@Tag(description = "sysBanner", name = "轮播图管理") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class SysBannerController { + + private final SysBannerService sysBannerService; + private final ExternalAppConfig externalAppConfig; + + /** + * 分页查询 + */ + @Operation(summary = "分页查询", description = "分页查询轮播图") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('integrated_sysBanner_view')") + public R getPage(@ParameterObject Page page, @ParameterObject SysBannerEntity sysBanner) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.like(StrUtil.isNotBlank(sysBanner.getTitle()), SysBannerEntity::getTitle, sysBanner.getTitle()) + .eq(sysBanner.getStatus() != null, SysBannerEntity::getStatus, sysBanner.getStatus()) + .orderByAsc(SysBannerEntity::getSortOrder) + .orderByDesc(SysBannerEntity::getCreateTime); + return R.ok(sysBannerService.page(page, wrapper)); + } + + /** + * 通过id查询 + */ + @Operation(summary = "通过id查询", description = "通过id查询轮播图") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('integrated_sysBanner_view')") + public R getById(@PathVariable("id") Long id) { + return R.ok(sysBannerService.getById(id)); + } + + /** + * 根据轮播图id查询标题和富文本详情 + */ + @Operation(summary = "轮播图详情", description = "根据轮播图id查询标题和富文本内容") + @GetMapping("/detail/{id}") + public R getDetailById(@PathVariable("id") Long id) { + SysBannerEntity entity = sysBannerService.getById(id); + if (entity == null) { + return R.failed("轮播图不存在"); + } + SysBannerDetailVo vo = new SysBannerDetailVo(); + vo.setTitle(entity.getTitle()); + vo.setRichTextContent(entity.getRichTextContent()); + return R.ok(vo); + } + + /** + * 新增 + */ + @Operation(summary = "新增轮播图", description = "新增轮播图") + @SysLog("新增轮播图") + @PostMapping + @PreAuthorize("@pms.hasPermission('integrated_sysBanner_add')") + public R save(@RequestBody SysBannerEntity sysBanner) { + return R.ok(sysBannerService.save(sysBanner)); + } + + /** + * 修改 + */ + @Operation(summary = "修改轮播图", description = "修改轮播图") + @SysLog("修改轮播图") + @PutMapping + @PreAuthorize("@pms.hasPermission('integrated_sysBanner_edit')") + public R updateById(@RequestBody SysBannerEntity sysBanner) { + return R.ok(sysBannerService.updateById(sysBanner)); + } + + /** + * 通过id删除 + */ + @Operation(summary = "通过id删除", description = "通过id删除轮播图") + @SysLog("通过id删除轮播图") + @DeleteMapping + @PreAuthorize("@pms.hasPermission('integrated_sysBanner_del')") + public R removeById(@RequestBody Long[] ids) { + return R.ok(sysBannerService.removeByIds(java.util.Arrays.asList(ids))); + } + + /** + * 外部系统/App端轮播图接口 + * 提供安全的API访问,用于其他系统或App展示轮播图 + * @param appId 应用ID + * @param appSecret 应用密钥 + * @return R + */ + @Operation(summary = "外部系统轮播图接口", description = "提供安全的API访问,用于其他系统或App展示轮播图") + @GetMapping("/app/list") + @Inner(value = false) + public R> appList( + @RequestHeader(value = "X-App-Id", required = false) String appId, + @RequestHeader(value = "X-App-Secret", required = false) String appSecret) { + + // 验证应用ID和密钥 + if (!isValidAppCredentials(appId, appSecret)) { + return R.failed("无效的应用ID或密钥"); + } + + List list = sysBannerService.listAppBanners(); + List voList = list.stream() + .map(e -> BeanUtils.toBean(e, SysBannerAppVo.class)) + .collect(Collectors.toList()); + return R.ok(voList); + } + + /** + * 验证应用ID和密钥 + */ + private boolean isValidAppCredentials(String appId, String appSecret) { + if (StrUtil.isBlank(appId) || StrUtil.isBlank(appSecret)) { + return false; + } + if (externalAppConfig.getApps() != null) { + return externalAppConfig.getApps().stream() + .filter(ExternalAppConfig.AppCredential::getEnabled) + .anyMatch(app -> appId.equals(app.getAppId()) && appSecret.equals(app.getAppSecret())); + } + return false; + } +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysInternalPageController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysInternalPageController.java new file mode 100644 index 000000000..2c16d7e5d --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/SysInternalPageController.java @@ -0,0 +1,114 @@ +package com.bsd.pjcloud.integrated.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.integrated.entity.SysInternalPageEntity; +import com.bsd.pjcloud.integrated.service.SysInternalPageService; +import com.bsd.pjcloud.integrated.vo.internalpage.SysInternalPageSelectVo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 内部页面配置(供轮播图等选择内部跳转路径) + * + * @author pjcloud + * @date 2025-01-27 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/sysInternalPage") +@Tag(description = "sysInternalPage", name = "内部页面配置") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class SysInternalPageController { + + private final SysInternalPageService sysInternalPageService; + + /** + * 下拉列表:供轮播图等选择内部页面路径 + */ + @Operation(summary = "内部页面下拉列表", description = "供轮播图配置内部跳转时下拉选择,返回 path/name,选后 path 填到 jump_value") + @GetMapping("/select") + @PreAuthorize("@pms.hasPermission('integrated_sysInternalPage_view')") + public R> selectList() { + List list = sysInternalPageService.listForSelect(); + List voList = list.stream() + .map(e -> BeanUtils.toBean(e, SysInternalPageSelectVo.class)) + .collect(Collectors.toList()); + return R.ok(voList); + } + + /** + * 分页查询 + */ + @Operation(summary = "分页查询", description = "分页查询内部页面配置") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('integrated_sysInternalPage_view')") + public R getPage(@ParameterObject Page page, @ParameterObject SysInternalPageEntity sysInternalPage) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.like(StrUtil.isNotBlank(sysInternalPage.getPath()), SysInternalPageEntity::getPath, sysInternalPage.getPath()) + .like(StrUtil.isNotBlank(sysInternalPage.getName()), SysInternalPageEntity::getName, sysInternalPage.getName()) + .eq(StrUtil.isNotBlank(sysInternalPage.getModuleLabel()), SysInternalPageEntity::getModuleLabel, sysInternalPage.getModuleLabel()) + .eq(sysInternalPage.getStatus() != null, SysInternalPageEntity::getStatus, sysInternalPage.getStatus()) + .orderByAsc(SysInternalPageEntity::getModuleLabel) + .orderByAsc(SysInternalPageEntity::getSortOrder) + .orderByAsc(SysInternalPageEntity::getId); + return R.ok(sysInternalPageService.page(page, wrapper)); + } + + /** + * 通过id查询 + */ + @Operation(summary = "通过id查询", description = "通过id查询内部页面配置") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('integrated_sysInternalPage_view')") + public R getById(@PathVariable("id") Long id) { + return R.ok(sysInternalPageService.getById(id)); + } + + /** + * 新增 + */ + @Operation(summary = "新增内部页面", description = "新增内部页面配置") + @SysLog("新增内部页面配置") + @PostMapping + @PreAuthorize("@pms.hasPermission('integrated_sysInternalPage_add')") + public R save(@RequestBody SysInternalPageEntity sysInternalPage) { + return R.ok(sysInternalPageService.save(sysInternalPage)); + } + + /** + * 修改 + */ + @Operation(summary = "修改内部页面", description = "修改内部页面配置") + @SysLog("修改内部页面配置") + @PutMapping + @PreAuthorize("@pms.hasPermission('integrated_sysInternalPage_edit')") + public R updateById(@RequestBody SysInternalPageEntity sysInternalPage) { + return R.ok(sysInternalPageService.updateById(sysInternalPage)); + } + + /** + * 通过id删除 + */ + @Operation(summary = "通过id删除", description = "通过id删除内部页面配置") + @SysLog("通过id删除内部页面配置") + @DeleteMapping + @PreAuthorize("@pms.hasPermission('integrated_sysInternalPage_del')") + public R removeById(@RequestBody Long[] ids) { + return R.ok(sysInternalPageService.removeByIds(java.util.Arrays.asList(ids))); + } +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysBannerEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysBannerEntity.java new file mode 100644 index 000000000..0e2f7bb5c --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysBannerEntity.java @@ -0,0 +1,145 @@ +package com.bsd.pjcloud.integrated.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.bsd.pjcloud.common.core.util.TenantTable; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * 轮播图管理 + * + * @author pjcloud + * @date 2025-01-27 + */ +@Data +@TenantTable +@TableName("sys_banner") +@EqualsAndHashCode(callSuper = true) +@Schema(description = "轮播图管理") +public class SysBannerEntity extends Model { + + /** + * 主键ID + */ + @TableId(type = IdType.AUTO) + @Schema(description = "主键ID") + private Long id; + + /** + * 标题 + */ + @Schema(description = "标题") + private String title; + + /** + * 图片地址 + */ + @Schema(description = "图片地址") + private String imageUrl; + + /** + * 跳转类型:1-内部页面 2-外部链接 3-不跳转 + */ + @Schema(description = "跳转类型:1-内部页面 2-外部链接 3-不跳转") + private Integer jumpType; + + /** + * 跳转值(页面路径/外部链接) + */ + @Schema(description = "跳转值(页面路径/外部链接)") + private String jumpValue; + + /** + * 跳转参数JSON格式 + */ + @Schema(description = "跳转参数JSON格式") + private String params; + + /** + * 富文本内容(跳转到自编辑富文本页面时使用) + */ + @Schema(description = "富文本内容") + private String richTextContent; + + /** + * 排序序号 + */ + @Schema(description = "排序序号") + private Integer sortOrder; + + /** + * 状态:0-禁用 1-启用 + */ + @Schema(description = "状态:0-禁用 1-启用") + private Integer status; + + /** + * 生效时间 + */ + @Schema(description = "生效时间") + private LocalDateTime startTime; + + /** + * 失效时间 + */ + @Schema(description = "失效时间") + private LocalDateTime endTime; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建者") + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建时间") + private LocalDateTime createTime; + + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新者") + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新时间") + private LocalDateTime updateTime; + + /** + * 是否删除 + */ + @TableLogic + @TableField(fill = FieldFill.INSERT) + @Schema(description = "是否删除") + private String delFlag; + + /** + * 租户编号 + */ + @Schema(description = "租户编号") + private Long tenantId; + + /** + * 部门id + */ + @Schema(description = "部门id") + private Long deptId; + + /** + * 备注 + */ + @Schema(description = "备注") + private String remark; +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysInternalPageEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysInternalPageEntity.java new file mode 100644 index 000000000..24901c6fb --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/SysInternalPageEntity.java @@ -0,0 +1,67 @@ +package com.bsd.pjcloud.integrated.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.bsd.pjcloud.common.core.util.TenantTable; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * 内部页面配置(移动端页面路径,供轮播图等下拉选择) + * + * @author pjcloud + * @date 2025-01-27 + */ +@Data +@TenantTable +@TableName("sys_internal_page") +@EqualsAndHashCode(callSuper = true) +@Schema(description = "内部页面配置") +public class SysInternalPageEntity extends Model { + + @TableId(type = IdType.AUTO) + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "页面全路径") + private String path; + + @Schema(description = "页面名称/显示名") + private String name; + + @Schema(description = "所属模块/分包名称") + private String moduleLabel; + + @Schema(description = "排序序号") + private Integer sortOrder; + + @Schema(description = "状态:0-禁用 1-启用") + private Integer status; + + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建者") + private String createBy; + + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新者") + private String updateBy; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "更新时间") + private LocalDateTime updateTime; + + @TableLogic + @TableField(fill = FieldFill.INSERT) + @Schema(description = "是否删除") + private String delFlag; + + @Schema(description = "租户编号") + private Long tenantId; +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysBannerMapper.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysBannerMapper.java new file mode 100644 index 000000000..ab6979632 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysBannerMapper.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.integrated.mapper; + +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.integrated.entity.SysBannerEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 轮播图管理 + * + * @author pjcloud + * @date 2025-01-27 + */ +@Mapper +public interface SysBannerMapper extends PjcloudBaseMapper { +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysInternalPageMapper.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysInternalPageMapper.java new file mode 100644 index 000000000..6f7ed2005 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/mapper/SysInternalPageMapper.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.integrated.mapper; + +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.integrated.entity.SysInternalPageEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 内部页面配置 + * + * @author pjcloud + * @date 2025-01-27 + */ +@Mapper +public interface SysInternalPageMapper extends PjcloudBaseMapper { +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysBannerService.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysBannerService.java new file mode 100644 index 000000000..652e528a5 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysBannerService.java @@ -0,0 +1,22 @@ +package com.bsd.pjcloud.integrated.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.integrated.entity.SysBannerEntity; + +import java.util.List; + +/** + * 轮播图管理 + * + * @author pjcloud + * @date 2025-01-27 + */ +public interface SysBannerService extends IService { + + /** + * App端获取启用的轮播图列表(在有效期内,按排序序号升序) + * + * @return 轮播图列表 + */ + List listAppBanners(); +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysInternalPageService.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysInternalPageService.java new file mode 100644 index 000000000..e980e7b3a --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/SysInternalPageService.java @@ -0,0 +1,20 @@ +package com.bsd.pjcloud.integrated.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.integrated.entity.SysInternalPageEntity; + +import java.util.List; + +/** + * 内部页面配置 + * + * @author pjcloud + * @date 2025-01-27 + */ +public interface SysInternalPageService extends IService { + + /** + * 下拉用:启用的内部页面列表,按模块和排序 + */ + List listForSelect(); +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysBannerServiceImpl.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysBannerServiceImpl.java new file mode 100644 index 000000000..228472248 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysBannerServiceImpl.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.integrated.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.integrated.entity.SysBannerEntity; +import com.bsd.pjcloud.integrated.mapper.SysBannerMapper; +import com.bsd.pjcloud.integrated.service.SysBannerService; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 轮播图管理 + * + * @author pjcloud + * @date 2025-01-27 + */ +@Service +public class SysBannerServiceImpl extends ServiceImpl implements SysBannerService { + + @Override + public List listAppBanners() { + LocalDateTime now = LocalDateTime.now(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(SysBannerEntity::getStatus, 1) + .and(w -> w.isNull(SysBannerEntity::getStartTime).or().le(SysBannerEntity::getStartTime, now)) + .and(w -> w.isNull(SysBannerEntity::getEndTime).or().ge(SysBannerEntity::getEndTime, now)) + .orderByAsc(SysBannerEntity::getSortOrder); + return list(wrapper); + } +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysInternalPageServiceImpl.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysInternalPageServiceImpl.java new file mode 100644 index 000000000..4ef93ca16 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/SysInternalPageServiceImpl.java @@ -0,0 +1,31 @@ +package com.bsd.pjcloud.integrated.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.integrated.entity.SysInternalPageEntity; +import com.bsd.pjcloud.integrated.mapper.SysInternalPageMapper; +import com.bsd.pjcloud.integrated.service.SysInternalPageService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 内部页面配置 + * + * @author pjcloud + * @date 2025-01-27 + */ +@Service +public class SysInternalPageServiceImpl extends ServiceImpl implements SysInternalPageService { + + @Override + public List listForSelect() { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(SysInternalPageEntity::getStatus, 1) + .orderByAsc(SysInternalPageEntity::getModuleLabel) + .orderByAsc(SysInternalPageEntity::getSortOrder) + .orderByAsc(SysInternalPageEntity::getId); + return list(wrapper); + } +} diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysBannerMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysBannerMapper.xml new file mode 100644 index 000000000..feb625c86 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysBannerMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysInternalPageMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysInternalPageMapper.xml new file mode 100644 index 000000000..905ff9d95 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/SysInternalPageMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +