若依微服务版本集成积木报表

这篇具有很好参考价值的文章主要介绍了若依微服务版本集成积木报表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、项目结构

新建报表微服务模块,这是我的项目结构图。

二、执行初始化数据脚本

运行积木报表的初始化脚本,创建相关表结构,github速度太慢,推荐使用 gitee地址。选择你要建表的数据库,我是跟业务库放到了一起,执行完后会新增以下这几张表。

三、pom中引入积木报表依赖

在顶级父pom中声明积木报表的版本号:

<properties>
    <jeccg.jimureport.version>1.5.6</jeccg.jimureport.version>
</properties>

在报表微服务模块添加积木报表的依赖:

<!-- JimuReport -->
<dependency>
    <groupId>org.jeecgframework.jimureport</groupId>
    <artifactId>jimureport-spring-boot-starter</artifactId>
    <version>${jeccg.jimureport.version}</version>
</dependency>

四、启动类添加积木扫描目录

在报表微服务启动类上添加积木报表扫描注解,@SpringBootApplication(exclude = {MongoAutoConfiguration.class},
scanBasePackages = {"org.jeecg.modules.jmreport", "com.iotings.report"}),下面是完整的启动类代码块:

package com.iotings.report;

import com.iotings.common.security.annotation.EnableCustomConfig;
import com.iotings.common.security.annotation.EnableRyFeignClients;
import com.iotings.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;

/**
 * @description: 报表中心模块
 * @author: wzlUp
 * @date: 2023/06/16 17:05
 * @motto: Done is better than perfect.
 */
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication(exclude = {MongoAutoConfiguration.class},
        scanBasePackages = {"org.jeecg.modules.jmreport", "com.iotings.report"})
public class IotingsReportApplication {

    public static void main(String[] args) {
        SpringApplication.run(IotingsReportApplication.class, args);
        System.out.println(
                "  .------------------------------------. \n" +
                " :     __                               :\n" +
                " :  =='_))  __-:!:-                     :\n" +
                " :    ,.' .'  ))-:!:-                   :\n" +
                " :   ((_,'  .'-:!:-  - Report Started - :\n" +
                " :  ~^~~~^~~^~~~^~                      :\n" +
                "  `------------------------------------' ");
    }
}

五、配置积木报表数据源

使用代码方式进行数据源的配置:

package com.iotings.report.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
 * @description: 数据源配置类
 * @author: wzlUp
 * @date: 2023/06/25 16:17
 * @motto: Done is better than perfect.
 */
@Configuration
public class DataSourceConfig{
    /**
     *  1、bean的名称必须为minidaoDataSource,否则不生效
     *  2、jeecg.minidao-datasource对应的是yml中的jeecg下的minidao-datasource,可自定义
     */
    @Bean(name="minidaoDataSource")
    @ConfigurationProperties(prefix = "jeecg.minidao-datasource")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }
}

六、报表微服务配置

在 nacos 中新建 iotings-report-dev.yml 配置文件

以下是我的完整配置数据项:

# spring配置
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
  
#Minidao配置
minidao :
  base-package: org.jeecg.modules.jmreport.*  

jeecg:
  minidao-datasource:
    jdbc-url: jdbc:mysql://127.0.0.1:3306/ry-cloud?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2b8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      # 连接池最大连接数
      maximum-pool-size: 400
      # 空闲时保持最小连接数
      minimum-idle: 20
      # 空闲连接存活时间
      idle-timeout: 30000
      # 连接超时时间
      connection-timeout: 1800000
      #池中连接最长生命周期
      max-lifetime: 1800000
  jmreport:
    #数据字典是否进行saas数据隔离(限制只能看自己的字典)
    saas: false
    #是否 禁用导出PDF和图片的按钮 默认为false
    exportDisabled: false
    #是否自动保存
    autoSave: false
    #自动保存间隔时间毫秒
    interval: 20000
    # 列索引
    col: 300
    #自定义项目前缀
    customPrePath: /report
    # 自定义API接口的前缀 #{api_base_path}的值
    # apiBasePath: http://10.10.0.138:83/
    #预览分页自定义
    pageSize:
      - 10
      - 20
      - 50
      - 100
    #打印纸张自定义
    printPaper:
      - title: 标签打印
        size:
          - 140
          - 100        
    #接口超时设置(毫秒)
    connect-timeout: 1800000
    #Excel导出模式(fast/快、primary/精致模式,默认fast)
    export-excel-pattern: fast
    #Excel导出数据每个sheet的行数,每个sheet最大1048576行
    page-size-number: 1048576
    #excel样式超过多少行显示默认样式(只在fast模式下有效)
    excel-style-row: 1048576
    #预览页面的工具条 是否显示 默认true
    viewToolbar: true
    #设计页面表格的线是否显示 默认true
    line: true
    #sql数据源不写字典下拉框显示条数 版本1.4.2之后被放弃
    select-show-total: 10  

# mybatis配置
mybatis:
    # 搜索指定包别名
    typeAliasesPackage: com.iotings.report
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mapper/**/*.xml

# knife4j配置
knife4j:
  enable: true
#   basic:
#     enable: true
#     username: iotings
#     password: iotings2023

# swagger配置
swagger:
  version: 1.0.0
  title: 报表中心接口文档
  basePackage: com.iotings.report
  termsOfServiceUrl: iotings-center
  description: 报表中心系统接口的说明文档
  contact:
    name: xxx

注意事项:

  • customPrePath路径配置:需要跟网关的断言【predicates】报表关键字保持一致,否则无法进行正确的路由

七、网关微服务配置

在 iotings-gateway-dev.yml 配置文件中添加报表微服务的路由:

routes:
    # 报表中心服务
    - id: iotings-report
      uri: lb://iotings-report
      predicates:
        - Path=/report/**
      filters:
        - StripPrefix=1

在 iotings-gateway-dev.yml 配置文件中添加积木报表的安全配置和不校验白名单:

# 安全配置
security:
  # 验证码
  captcha:
    enabled: true
    type: math
  # 防止XSS攻击
  xss:
    enabled: true
    excludeUrls:
      - /system/notice
      - /report/jmreport/**
  # 不校验白名单
  ignore:
    whites:
      - /auth/logout
      - /auth/login
      - /auth/register
      - /*/v2/api-docs
      - /csrf
      - /message/websocket/**
      - /report/**

八、扩展:Token权限控制

package com.iotings.report.service.impl;

import com.iotings.common.core.utils.DateUtils;
import com.iotings.common.core.utils.StringUtils;
import com.iotings.common.security.service.TokenService;
import com.iotings.common.security.utils.SecurityUtils;
import com.iotings.system.api.model.LoginUser;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * @description: 自定义报表鉴权(如果不进行自定义, 则所有请求不做权限控制)
 * @author: wzlUp
 * @date: 2023/06/25 16:37
 * @motto: Done is better than perfect.
 */
@Component
public class JimuReportTokenServiceImpl implements JmReportTokenServiceI {

    @Autowired
    private TokenService tokenService;

    /**
     * 通过请求获取Token
     */
    @Override
    public String getToken(HttpServletRequest request) {
        String token = request.getParameter("token");
        String jmToken = request.getHeader("token");
        if (token == null || token.length() == 0) {
            token = jmToken;
        }
        LoginUser loginUser = tokenService.getLoginUser(token);
        if (loginUser != null) {
            return token;
        }
        return "";
    }

    /**
     * 获取登录人用户名
     */
    @Override
    public String getUsername(String s) {
        LoginUser loginUser = tokenService.getLoginUser(s);
        return loginUser.getUsername();
    }

    /**
     * Token校验
     */
    @Override
    public Boolean verifyToken(String s) {
        if (s != null && s.length() > 0) {
            LoginUser loginUser = tokenService.getLoginUser(s);
            return loginUser != null;
        }
        return false;
    }


    /**
     *  自定义请求头
     */
    @Override
    public HttpHeaders customApiHeader() {
        HttpHeaders header = new HttpHeaders();
        header.add("X-Access-Token", SecurityUtils.getToken());
        return header;
    }

    /**
     * 获取多租户id
     * @return tenantId
     */
    public String getTenantId() {
        String token = SecurityUtils.getCurrentRequestInfo().getParameter("token");
        String header = SecurityUtils.getCurrentRequestInfo().getHeader("X-Access-Token");
        LoginUser loginUser = null;
        if (StringUtils.isNotBlank(token)) {
            loginUser = tokenService.getLoginUser(token);
        } else if (StringUtils.isNotBlank(header)) {
            loginUser = tokenService.getLoginUser(header);
        } else {
            //都不具备则不能访问
            return "NO";
        }
        //具备admin或者管理员权限才可访问所有报表
        if (SecurityUtils.isAdmin(loginUser.getUserid())
                || loginUser.getRoles().contains("it")
                || loginUser.getRoles().contains("manger")) {
            return "";
        }
        return loginUser.getUsername();
    }

    @Override
    public Map<String, Object> getUserInfo(String token) {
        // 将所有信息存放至map 解析sql会根据map的键值解析,可自定义其他值
        Map<String, Object> map = new HashMap<>(20);
        LoginUser loginUser = tokenService.getLoginUser(token);
        map.put("sysUserCode", loginUser.getUsername());
        //设置当前日期(年月日)
        map.put("sysData", DateUtils.getDate());
        //设置昨天日期(年月日)
        map.put("sysYesterDay", DateUtils.getYesterday());
        //设置当前登录用户昵称
        map.put("sysUserName", loginUser.getSysUser().getNickName());
        //设置当前登录用户部门ID
        map.put("deptId", loginUser.getSysUser().getDeptId());
        //设置当前登录用户描述
//        map.put("describe", loginUser.getSysUser().getDept().getDescribes());
        map.put("describe", loginUser.getSysUser().getDept().getRemark());
        return map;
    }
}

九、前端页面配置

在前端页面中新建 jimureport 文件夹,新建以下vue文件

1、jimu.vue

<template>
  <i-frame :src="openUrl" id="jimuReportFrame"></i-frame>
</template>
<script>
  import { getToken } from '@/utils/auth'
  import iFrame from '@/components/iFrame/index'
  export default {
    name: "Jimu",
    components: {iFrame},
    data() {
      return {
        // 这里写暴露的统一的网关地址
        openUrl: "http://127.0.0.1:8080/report/jmreport/list?token=" + getToken(),
      };
    },
    mounted: function() {

    }
  };
</script>

2、view.vue

<template>
  <i-frame :src="openUrl"/>
</template>

<script>
import {getToken} from '@/utils/auth'
import iFrame from "@/components/iFrame/index";

export default {
  name: 'jimuview',
  components: {iFrame},
  props: {
    reportID: {
      type: [String],
      required: false,
      default: ''
    },
  },
  data() {
    return {
      serverUrl: 'http://127.0.0.1:8080',
      openUrl: '',
    }
  },
  created() {
    if (this.reportID.length != 0) {
      this.openUrl = this.serverUrl + '/report/jmreport/view/' + this.reportID + '?token=' +  getToken()
    } else {
      this.openUrl = this.serverUrl + '/report/jmreport/view/' + this.$route.path.substring(this.$route.path.lastIndexOf("/") + 1) + '?token=' + getToken()
    }
    console.log(this.openUrl)
  }
}
</script>

<style scoped>

</style>

十、配置报表菜单

先新建一个主类目,我是建立了一个二级菜单,这个可以自定义,随意配置

添加二级目录

十一、集成效果展示

集成后的页面

模板案例页面

报表的设计页面

预览页面文章来源地址https://www.toymoban.com/news/detail-500889.html

十二、参考资料

  • 若依微服务版本
  • 若依cloud集成积木报表
  • 若依cloud微服务集成积木报表
  • ruoyi vue版集成积木报表
  • 关于报表访问权限认证方案

到了这里,关于若依微服务版本集成积木报表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 若依微服务集成CAS,实现单点登录

    若依(RuoYi)微服务是一款基于Spring Cloud Alibaba开发的企业级微服务框架,采用前后端分离方式,使用了常用的微服务组件,如Feign、Nacos、Sentinel、Seata等,提供了丰富的微服务治理功能,如服务注册、发现、路由、负载均衡、熔断降级、限流等。借助若依微服务框架可以让我

    2024年02月12日
    浏览(32)
  • 若依微服务 + seata1.5.2版本分布式事务(安装配置nacos+部署)

    若依官方使用的1.4.0版本seata,版本较低配置相对更麻烦一些 一、seata服务端下载,下载方式介绍两种入口,如下: 1、找到对应版本,下载 binary 即可。 下载包名为:seata-server-1.5.2.zip 2. github上下载   Releases · seata/seata · GitHub  找到对应的1.5.2版本,每个版本下都有一个缩放

    2024年02月09日
    浏览(38)
  • Docker容器化部署若依微服务ruoyi-cloud项目

    接下来的内容以 Ubuntu 22.04.1 操作系统为例。 验证版本信息 Note: 在 CentOS7 上使用上述 yum 方式安装的 Docker ,默认自带了Docker Compose Plugin,不过命令是 docker compose 。 docker pull docker run docker images docker ps docker logs docker start docker stop docker restart docker rmi docker rm docker exec docker netwo

    2024年02月04日
    浏览(32)
  • 若依前后端分离项目集成CAS 5.3实现单点登录

    一.获取CAS5.3项目资源 GitHub - apereo/cas-overlay-template at 5.3 cas5.3.x还是基于jdk8运行,下一个版本6.0.x就基于jdk9了,随着cas版本升级要求jdk版本也越来越高,官网上和github上都有每个版本基本运行条件的说明,根据实际情况选择版本。 二.tomcat部署 利用maven-package打war包 2.将war包放

    2024年02月02日
    浏览(73)
  • 若依项目的介绍(前后端分离版本)

    目录 一、若依介绍 (一)简单介绍  (二)若依版本 (三)Git远程拉取步骤  二、项目的技术介绍 (一)后端技术 1.spring boot 2.Spring Security安全控制 3.MyBatis 4.MySQL和Redis (二)前端技术 1.vue 2.vue-router 3.axios  4.element-ui 5.node 6.ES6 7.Nginx反向代理服务器 三、项目结构介绍 1.总体

    2024年02月12日
    浏览(35)
  • 若依系统(微服务版本)部署流程

    此处做最基本的部署,后续需要可根据系统需要添加功能。 微服务版本源码地址:https://gitee.com/y_project/RuoYi-Cloud 若依系统官网:http://www.ruoyi.vip/ 此处只部署基础模块:gateway网关模块,auth认证模块,system系统模块。其他模块可根据需要自行部署。 MySQL 此处使用mysql做数据存

    2024年02月10日
    浏览(19)
  • 【若依】-代码生成器-微服务版本

    代码生成器可以快速的构建单表的CRUD操作,甚至提供了前端,可谓良心 说明:我默认你已经部署了微服务版本的若依项目,并将前后端已经运行 下面的内容是关于-单表CRUD-的代码生成器使用步骤 这里的表可以直接从若依的官网拿,改表名就可以,改一下表名,导入数据库

    2024年02月04日
    浏览(38)
  • 若依RuoYi-Vue项目部署(前后端分离版本)

    RuoYi 是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。 若依是作者给女儿取的名字(寓意:你若不离不弃,我必生死相依) 在线体验 若

    2023年04月08日
    浏览(39)
  • 若依框架(RuoYi-Cloud 微服务版本)134节视频教程

    RuoYi-Cloud 是一个 Java EE 分布式微服务架构平台,基于经典技术组合(Spring Boot、Spring Cloud Alibaba、Vue、Element),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。 在线体验 若依

    2024年02月13日
    浏览(35)
  • 若依开源框架-微服务版本(ruoyi-Cloud)使用说明-超详细

    JDK 1.8 Mysql 5.7以上 Nacos 2.0.3 Node 14 版本以上 打开网站: RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|J

    2024年02月04日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包