akacd 发表于 2018-4-16 13:39:42

【BUG】online报表使用多数据源搜索问题

1.jeecg项目使用的是mysql数据库,多数据源配置中配置了oracle数据源
2.online报表中配置sql,来查询oracle数据库中的数据。code字段设置为可查询
3.查询后得到报表,首页默认10条数据。但使用code进行筛选的时候出现bug。当报表首页存在目标数据的时候,条件查询生效。如果首页没有目标数据,查询不到结果。

admin 发表于 2018-4-16 13:58:35

截图看下具体问题

akacd 发表于 2018-4-16 14:29:44

admin 发表于 2018-4-16 13:58 static/image/common/back.gif
截图看下具体问题

查询结果,首页:

查询首页中有的基金代码,正常:

查询首页中没有的基金代码,无法搜索到结果。数据库中有这条数据。

akacd 发表于 2018-4-16 14:30:54

admin 发表于 2018-4-16 13:58 static/image/common/back.gif
截图看下具体问题

可能是翻页查询的时候有问题

admin 发表于 2018-4-16 15:27:52

首页指的是第一页?

akacd 发表于 2018-4-16 16:54:04

admin 发表于 2018-4-16 15:27 static/image/common/back.gif
首页指的是第一页?

对。报表默认查出的第一页。

admin 发表于 2018-4-16 17:43:08

你的意思跑到第二页,点击查询有问题?

akacd 发表于 2018-4-16 17:59:37

本帖最后由 akacd 于 2018-4-16 18:01 编辑

admin 发表于 2018-4-16 17:43 static/image/common/back.gif
你的意思跑到第二页,点击查询有问题?
搜索第二页的内容有问题,搜索不到。
搜索当前页已有内容可以得到结果。搜索未展示出来的内容,无法搜到。

akacd 发表于 2018-4-23 13:42:10

本帖最后由 akacd 于 2018-4-23 13:45 编辑

admin 发表于 2018-4-16 17:43 static/image/common/back.gif
你的意思跑到第二页,点击查询有问题?
多数据源动态报表使用到了SqlUtil.java中的jeecgCreatePageSql方法,其中oracle数据库先进行了分页,再加的查询条件。导致无法查询第二页内容。

      if(DATABSE_TYPE_ORACLE.equalsIgnoreCase(databaseType)) {
                sql = MessageFormat.format(ORACLE_SQL, sqlParam); //sqlParam是分页参数
                sql=getFullSql(sql,params);//前端用户输入的参数


查了一下,         sql=getFullSql(sql,params);//前端用户输入的参数是我手动加进去的。不加这一行无法进行输入条件的查询

akacd 发表于 2018-4-23 14:42:56

admin 发表于 2018-4-16 17:43 static/image/common/back.gif
你的意思跑到第二页,点击查询有问题?

在CgReportController.java 中增加即可解决该问题:
if(StringUtils.isNotBlank(dbKey)){
              querySql=SqlUtil.getFullSql(querySql,queryparams);//duchao 20180423 add to support query
            result= DynamicDBUtil.findList(dbKey,SqlUtil.jeecgCreatePageSql(dbKey,querySql,queryparams,p,r));
            Map map=(Map)DynamicDBUtil.findOne(dbKey,SqlUtil.getCountSql(querySql,null));
            if(map.get("COUNT(*)") instanceof BigDecimal){
                    BigDecimal count = (BigDecimal)map.get("COUNT(*)");
                    size = count.longValue();
            }else{
                    size=(Long)map.get("COUNT(*)");
            }
      }else{
            result= cgReportService.queryByCgReportSql(querySql, queryparams, p, r);
            size = cgReportService.countQueryByCgReportSql(querySql, queryparams);
      }
页: [1] 2
查看完整版本: 【BUG】online报表使用多数据源搜索问题