-
引入依賴
<dependency> <groupId>com.bstek.ureport</groupId> <artifactId>ureport2-console</artifactId> <version>2.2.9</version> </dependency> -
application.properties添加配置
ureport.disableHttpSessionReportCache=false ureport.disableFileProvider=true ureport.fileStoreDir=/WEB-INF/ureportfiles ureport.debug=true -
實體類
import lombok.Data; import javax.persistence.*; import java.io.Serializable; import java.util.Date; @Data @Table(name = "ureport_file_tbl") public class UreportFileEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "id_") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name_") private String name; @Column(name = "content_") private byte[] content; @Column(name = "create_time_") private Date createTime; @Column(name = "update_time_") private Date updateTime; } -
配置存儲器
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.schinta.akt.entity.UreportFileEntity;
import com.schinta.akt.service.UreportFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.bstek.ureport.provider.report.ReportFile;
import com.bstek.ureport.provider.report.ReportProvider;
import lombok.Setter;
/**
* @author 7788
* @description 自定義報表存儲器
*/
@Setter
@Component
@Slf4j
public class MysqlProvider implements ReportProvider {
private static final String NAME = "ureport-provider";
private String prefix = "report-";
private boolean disabled = false;
@Autowired
private UreportFileService ureportFileService;
/**
* 根據報表名加載報表文件
*
* @param file 報表名稱
* @return 返回的InputStream
*/
@Override
public InputStream loadReport(String file) {
UreportFileEntity ureportFileEntity = ureportFileService.queryUreportFileEntityByName(getCorrectName(file));
byte[] content = ureportFileEntity.getContent();
ByteArrayInputStream inputStream = new ByteArrayInputStream(content);
return inputStream;
}
/**
* 根據報表名,刪除指定的報表文件
*
* @param file 報表名稱
*/
@Override
public void deleteReport(String file) {
ureportFileService.deleteReportFileByName(getCorrectName(file));
}
/**
* 獲取所有的報表文件
*
* @return 返回報表文件列表
*/
@Override
public List<ReportFile> getReportFiles() {
List<UreportFileEntity> list = ureportFileService.queryReportFileList();
List<ReportFile> reportList = new ArrayList<>();
for (UreportFileEntity ureportFileEntity : list) {
reportList.add(new ReportFile(ureportFileEntity.getName(), ureportFileEntity.getUpdateTime()));
}
return reportList;
}
/**
* 保存報表文件
*
* @param file 報表名稱
* @param content 報表的XML內容
*/
@Override
public void saveReport(String file, String content) {
file = getCorrectName(file);
UreportFileEntity ureportFileEntity = ureportFileService.queryUreportFileEntityByName(file);
Date currentDate = new Date();
if (ureportFileEntity == null) {
ureportFileEntity = new UreportFileEntity();
ureportFileEntity.setName(file);
ureportFileEntity.setContent(content.getBytes());
ureportFileEntity.setCreateTime(currentDate);
ureportFileEntity.setUpdateTime(currentDate);
ureportFileService.insertReportFile(ureportFileEntity);
} else {
ureportFileEntity.setContent(content.getBytes());
ureportFileEntity.setUpdateTime(currentDate);
ureportFileService.updateReportFile(ureportFileEntity);
}
}
/**
* @return 返回存儲器名稱
*/
@Override
public String getName() {
return NAME;
}
/**
* @return 返回是否禁用
*/
@Override
public boolean disabled() {
return disabled;
}
/**
* @return 返回報表文件名前綴
*/
@Override
public String getPrefix() {
return prefix;
}
/**
* @param name 名稱
* @return String
* 獲取沒有前綴的文件名
*/
private String getCorrectName(String name) {
if (name.startsWith(prefix)) {
name = name.substring(prefix.length());
}
return name;
}
}
- 配置數據源
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.Servlet;
import javax.sql.DataSource;
import com.bstek.ureport.console.UReportServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import com.bstek.ureport.definition.datasource.BuildinDatasource;
/**
* @author 7788
* 內置數據源,實現BuildinDatasource接口
*/
@Configuration
@ImportResource("classpath:ureport-console-context.xml")
public class UreportDataSource implements BuildinDatasource {
private static final String NAME = "UreportDataSource";
private final Logger log = LoggerFactory.getLogger(UreportDataSource.class);
@Autowired
private DataSource dataSource;
@Override
public String name() {
return NAME;
}
@Override
public Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
log.error("Ureport 數據源 獲取連接失敗!");
e.printStackTrace();
}
return null;
}
/**
* 注冊 UReportServlet
* 值為“/ureport/*”的 urlMappings 是一定不能變的,否則系統將無法運行。
*/
@Bean
public ServletRegistrationBean<Servlet> ureportServlet() {
ServletRegistrationBean<Servlet> bean = new ServletRegistrationBean<>(new UReportServlet(), "/ureport/*");
return bean;
}
}
