Browse Source

feat(app): 添加首页轮播图功能

- 新增 AppBanner 实体类,用于首页轮播图管理
- 添加 AppBannerMapper、AppBannerService 和 AppHomeController
- 实现轮播图查询接口,返回 AppBannerVO 列表- 移除 Swagger2Config 类
SheepHy 3 weeks ago
parent
commit
720ed3cc95
11 changed files with 196 additions and 188 deletions
  1. 0 188
      national-motion-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
  2. 29 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/AppHomeController.java
  3. 79 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/entity/AppBanner.java
  4. 14 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/mapper/AppBannerMapper.java
  5. 18 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IAppBannerService.java
  6. 29 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/AppBannerServiceImpl.java
  7. 27 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/AppBannerVO.java
  8. 0 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/AppBannerMapper.xml
  9. 0 0
      national-motion-module-system/national-motion-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/AppBannerMapper.xml
  10. 0 0
      national-motion-module-system/national-motion-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/AppBannerMapper.xml
  11. 0 0
      national-motion-module/national-motion-module-airag/src/main/java/org/jeecg/modules/airag/llm/mapper/xml/AppBannerMapper.xml

+ 0 - 188
national-motion-base-core/src/main/java/org/jeecg/config/Swagger2Config.java

@@ -1,188 +0,0 @@
-//package org.jeecg.config;
-//
-//
-//import io.swagger.v3.oas.annotations.Operation;
-//import org.jeecg.common.constant.CommonConstant;
-//import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
-//import org.springframework.beans.BeansException;
-//import org.springframework.beans.factory.config.BeanPostProcessor;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.context.annotation.Import;
-//import org.springframework.util.ReflectionUtils;
-//import org.springframework.web.bind.annotation.RestController;
-//import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-//import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
-//import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
-//import springfox.documentation.builders.ApiInfoBuilder;
-//import springfox.documentation.builders.ParameterBuilder;
-//import springfox.documentation.builders.PathSelectors;
-//import springfox.documentation.builders.RequestHandlerSelectors;
-//import springfox.documentation.schema.ModelRef;
-//import springfox.documentation.service.*;
-//import springfox.documentation.spi.DocumentationType;
-//import springfox.documentation.spi.service.contexts.SecurityContext;
-//import springfox.documentation.spring.web.plugins.Docket;
-//import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
-//import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
-//
-//import java.lang.reflect.Field;
-//import java.util.ArrayList;
-//import java.util.Collections;
-//import java.util.List;
-//import java.util.stream.Collectors;
-//
-///**
-// * @Author scott
-// */
-//@Configuration
-//@EnableSwagger2WebMvc
-//@Import(BeanValidatorPluginsConfiguration.class)
-//public class Swagger2Config implements WebMvcConfigurer {
-//
-//    /**
-//     *
-//     * 显示swagger-ui.html文档展示页,还必须注入swagger资源:
-//     *
-//     * @param registry
-//     */
-//    @Override
-//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
-//        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
-//        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
-//        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
-//    }
-//
-//    /**
-//     * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
-//     *
-//     * @return Docket
-//     */
-//    @Bean(value = "defaultApi2")
-//    public Docket defaultApi2() {
-//        return new Docket(DocumentationType.SWAGGER_2)
-//                .apiInfo(apiInfo())
-//                .select()
-//                //此包路径下的类,才生成接口文档
-//                .apis(RequestHandlerSelectors.basePackage("org.jeecg"))
-//                //加了ApiOperation注解的类,才生成接口文档
-//                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
-//                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
-//                .paths(PathSelectors.any())
-//                .build()
-//                .securitySchemes(Collections.singletonList(securityScheme()))
-//                .securityContexts(securityContexts())
-//                .globalOperationParameters(setHeaderToken());
-//    }
-//
-//    /***
-//     * oauth2配置
-//     * 需要增加swagger授权回调地址
-//     * http://localhost:8888/webjars/springfox-swagger-ui/o2c.html
-//     * @return
-//     */
-//    @Bean
-//    SecurityScheme securityScheme() {
-//        return new ApiKey(CommonConstant.X_ACCESS_TOKEN, CommonConstant.X_ACCESS_TOKEN, "header");
-//    }
-//    /**
-//     * JWT token
-//     * @return
-//     */
-//    private List<Parameter> setHeaderToken() {
-//        ParameterBuilder tokenPar = new ParameterBuilder();
-//        List<Parameter> pars = new ArrayList<>();
-//        tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
-//        pars.add(tokenPar.build());
-//        //update-begin-author:liusq---date:2024-08-15--for:  开启多租户时,全局参数增加租户id
-//        if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
-//            ParameterBuilder tenantPar = new ParameterBuilder();
-//            tenantPar.name(CommonConstant.TENANT_ID).description("租户ID").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
-//            pars.add(tenantPar.build());
-//        }
-//        //update-end-author:liusq---date:2024-08-15--for: 开启多租户时,全局参数增加租户id
-//
-//        return pars;
-//    }
-//
-//    /**
-//     * api文档的详细信息函数,注意这里的注解引用的是哪个
-//     *
-//     * @return
-//     */
-//    private ApiInfo apiInfo() {
-//        return new ApiInfoBuilder()
-//                // //大标题
-//                .title("JeecgBoot 后台服务API接口文档")
-//                // 版本号
-//                .version("1.0")
-////				.termsOfServiceUrl("NO terms of service")
-//                // 描述
-//                .description("后台API接口")
-//                // 作者
-//                .contact(new Contact("北京国炬信息技术有限公司","www.jeccg.com","jeecgos@163.com"))
-//                .license("The Apache License, Version 2.0")
-//                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
-//                .build();
-//    }
-//
-//    /**
-//     * 新增 securityContexts 保持登录状态
-//     */
-//    private List<SecurityContext> securityContexts() {
-//        return new ArrayList(
-//                Collections.singleton(SecurityContext.builder()
-//                        .securityReferences(defaultAuth())
-//                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
-//                        .build())
-//        );
-//    }
-//
-//    private List<SecurityReference> defaultAuth() {
-//        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
-//        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
-//        authorizationScopes[0] = authorizationScope;
-//        return new ArrayList(
-//                Collections.singleton(new SecurityReference(CommonConstant.X_ACCESS_TOKEN, authorizationScopes)));
-//    }
-//
-//    /**
-//     * 解决springboot2.6 和springfox不兼容问题
-//     * @return
-//     */
-//    @Bean
-//    public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
-//        return new BeanPostProcessor() {
-//
-//            @Override
-//            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
-//                if (bean instanceof WebMvcRequestHandlerProvider) {
-//                    customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
-//                }
-//                return bean;
-//            }
-//
-//            private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
-//                List<T> copy = mappings.stream()
-//                        .filter(mapping -> mapping.getPatternParser() == null)
-//                        .collect(Collectors.toList());
-//                mappings.clear();
-//                mappings.addAll(copy);
-//            }
-//
-//            @SuppressWarnings("unchecked")
-//            private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
-//                try {
-//                    Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
-//                    field.setAccessible(true);
-//                    return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
-//                } catch (IllegalArgumentException | IllegalAccessException e) {
-//                    throw new IllegalStateException(e);
-//                }
-//            }
-//        };
-//    }
-//
-//
-//}

+ 29 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/AppHomeController.java

@@ -0,0 +1,29 @@
+package org.jeecg.modules.app.controller;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.app.service.IAppBannerService;
+import org.jeecg.modules.app.vo.AppBannerVO;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Slf4j
+@Tag(name = "App首页相关接口")
+@RestController
+@RequestMapping("/app/home")
+public class AppHomeController {
+    @Resource
+    private IAppBannerService appBannerService;
+
+    @GetMapping("/queryBanner")
+    @Operation(summary = "查询首页轮播图")
+    public Result<List<AppBannerVO>> queryBanner() {
+        return Result.ok(appBannerService.queryBanner());
+    }
+}

+ 79 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/entity/AppBanner.java

@@ -0,0 +1,79 @@
+package org.jeecg.modules.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 首页轮播图管理
+ * @Version: V1.0
+ */
+@Data
+@TableName("hm_app_banner")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="首页轮播图管理")
+public class AppBanner implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "主键id")
+    private String id;
+	/**事件类型(0: 网页链接, 1: 内部页面跳转)*/
+	@Excel(name = "事件类型(0: 网页链接, 1: 内部页面跳转)", width = 15, dicCode = "event_type")
+	@Dict(dicCode = "event_type")
+    @Schema(description = "事件类型(0: 网页链接, 1: 内部页面跳转)")
+    private String eventType;
+	/**事件值*/
+	@Excel(name = "事件值", width = 15)
+    @Schema(description = "事件值")
+    private String eventValue;
+	/**图片地址*/
+	@Excel(name = "图片地址", width = 15)
+    @Schema(description = "图片地址")
+    private String imageUrl;
+	/**是否启用(0: 否,1: 是)*/
+	@Excel(name = "是否启用(0: 否,1: 是)", width = 15)
+    @Schema(description = "是否启用(0: 否,1: 是)")
+    private String isEnabled;
+	/**排序*/
+	@Excel(name = "排序", width = 15)
+    @Schema(description = "排序")
+    private Integer sortOrder;
+	/**创建人*/
+    @Schema(description = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+    @Schema(description = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+    @Schema(description = "所属部门")
+    private String sysOrgCode;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @Schema(description = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+}

+ 14 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/mapper/AppBannerMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.jeecg.modules.app.entity.AppBanner;
+
+/**
+ * @Description: 首页轮播图管理
+ * @Version: V1.0
+ */
+@Mapper
+public interface AppBannerMapper extends BaseMapper<AppBanner> {
+
+}

+ 18 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IAppBannerService.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.app.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.app.entity.AppBanner;
+import org.jeecg.modules.app.vo.AppBannerVO;
+
+import java.util.List;
+
+public interface IAppBannerService extends IService<AppBanner> {
+
+    /**
+     * @Author SheepHy
+     * @Description banner查询
+     * @Date 11:01 2025/7/2
+     * @return {@link AppBannerVO}
+     **/
+    List<AppBannerVO> queryBanner();
+}

+ 29 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/AppBannerServiceImpl.java

@@ -0,0 +1,29 @@
+package org.jeecg.modules.app.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.app.entity.AppBanner;
+import org.jeecg.modules.app.mapper.AppBannerMapper;
+import org.jeecg.modules.app.service.IAppBannerService;
+import org.jeecg.modules.app.vo.AppBannerVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class AppBannerServiceImpl extends ServiceImpl<AppBannerMapper, AppBanner> implements IAppBannerService {
+    @Override
+    public List<AppBannerVO> queryBanner() {
+        List<AppBanner> appBanners = this.getBaseMapper().selectList(Wrappers.<AppBanner>lambdaQuery()
+                .eq(AppBanner::getDelFlag, 0));
+        return appBanners.stream()
+                .map(banner -> new AppBannerVO()
+                        .setId(banner.getId())
+                        .setEventType(banner.getEventType())
+                        .setEventValue(banner.getEventValue())
+                        .setSortOrder(banner.getSortOrder())
+                        .setImageUrl(banner.getImageUrl()))
+                .collect(Collectors.toList());
+    }
+}

+ 27 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/AppBannerVO.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="首页轮播图管理")
+public class AppBannerVO {
+    @Schema(description = "主键id")
+    private String id;
+    /**事件类型(0: 网页链接, 1: 内部页面跳转)*/
+    @Dict(dicCode = "event_type")
+    @Schema(description = "事件类型(0: 网页链接, 1: 内部页面跳转)")
+    private String eventType;
+    /**事件值*/
+    @Schema(description = "事件值")
+    private String eventValue;
+    /**图片地址*/
+    @Schema(description = "图片地址")
+    private String imageUrl;
+    @Schema(description = "排序")
+    private Integer sortOrder;
+}

+ 0 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserTenantMapper.xml → national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/AppBannerMapper.xml


+ 0 - 0
national-motion-module-system/national-motion-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml → national-motion-module-system/national-motion-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/AppBannerMapper.xml


+ 0 - 0
national-motion-module-system/national-motion-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml → national-motion-module-system/national-motion-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/AppBannerMapper.xml


+ 0 - 0
national-motion-module/national-motion-module-airag/src/main/java/org/jeecg/modules/airag/llm/mapper/xml/AiragKnowledgeDocMapper.xml → national-motion-module/national-motion-module-airag/src/main/java/org/jeecg/modules/airag/llm/mapper/xml/AppBannerMapper.xml