jeecg datagraid 分页查询速度优化备份

@RequestMapping(params = "datagridsbgf")
    public void datagridsbgf(LdcCommonStateEntity ldcCommonState, HttpServletRequest request,
            HttpServletResponse response, DataGrid dataGrid) {

        CriteriaQuery cq = new CriteriaQuery(LdcCommonStateEntity.class, dataGrid);
        //查询条件组装器
        org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, ldcCommonState, request.getParameterMap());
        cq.add();

        //分页
        int row = dataGrid.getRows();
        int page = dataGrid.getPage();
        int firstRow = row*(page-1);
        int endrow=row+firstRow;

        StringBuilder where = new StringBuilder();
        String sysOrgCode = request.getParameter("sysOrgCode");
        if(StringUtils.isNotEmpty(sysOrgCode)) {
            where.append(" and d.sys_Org_Code like '"+sysOrgCode+"%'");
        }

        // 当核注清单回执和数据订阅回执会插入大量数据到state_comment字段中,这边过滤state_operator !='系统'不然会报错
        where.append(" and state_operator !='系统' ");

        TSUser user = ResourceUtil.getSessionUser();

        //2.获取用户的角色
        List<TSRoleUser> rUsers1 = systemService.findByProperty(TSRoleUser.class, "TSUser.id", user.getId());
        boolean isture=true;
        for (TSRoleUser ru : rUsers1) {
            System.out.println(ru.getTSRole().getRoleName());
            if(ru.getTSRole().getRoleName().equals("通富管理员")||ru.getTSRole().getRoleName().equals("管理员")){
                isture=false;
            }
        }
        if(isture){
        String orgcode=jdbcTemplate.queryForObject(" select  ORG_CODE from T_S_DEPART where ID=?", String.class,user.getDepartid())    ;
        where.append(" and d.sys_Org_Code like '"+orgcode+"%'");
        }






        // 报关单号
        String entryid1 = request.getParameter("entryid1");
        if(StringUtils.isNotEmpty(entryid1)) {
            where.append(" and entry_id like '%"+entryid1+"%'");
        }
        // 业务编号
        String clientno = request.getParameter("clientno");
        if(StringUtils.isNotEmpty(clientno)) {
            where.append(" and d.client_no like '%"+clientno+"%'");
        }

        // 申报日期开始
        String declarationDataBegin = request.getParameter("declarationData_begin");
        // 申报日期结束
        String declarationDataEnd = request.getParameter("declarationData_end");

        if(StringUtils.isNotEmpty(declarationDataBegin)) {
            where.append(" and d.declaration_data >= '"+declarationDataBegin+"'");
        }
        if(StringUtils.isNotEmpty(declarationDataEnd)) {
            StringBuffer plsb = new StringBuffer(declarationDataEnd);
            plsb.append(" 23:59:59");
            where.append(" and d.declaration_data <= '"+plsb.toString()+"'");
        }

        // 进口/出口
        String ieFlag = request.getParameter("ieFlag");
        if(StringUtils.isNotEmpty(ieFlag)) {
            where.append(" and d.ieFlag like '%"+ieFlag+"%'");
        }

        // 操作
        String state = request.getParameter("state");
        if(StringUtils.isNotEmpty(state)) {
            where.append(" and to_char(state_comment) like '%"+state+"%'");
        }else{
            where.append(" and (to_char(state_comment) like '%审核通过%'  or to_char(state_comment) like '%审核不通过%')   ");
        }

        /*String sql ="SELECT d.id,entry_id as entryId,d.client_no as clientNo,d.bill_no as billNo,d.voy_no as voyNo,d.declaration_data as declarationData,"
                + "d.ieFlag,lcs.state_pname as statePname,lcs.state_comment as stateComment,lcs.state_operator as stateOperator,lcs.state_time as stateTime,lcs.state_pid as statePid "
                + " FROM ldc_common_state lcs LEFT JOIN dec_main d ON d.id = lcs.state_fid  "
                + " where d.id is not null and lcs.state_pid is not null "+where.toString()+" and rownum>= "+firstRow+" and rownum<="+firstRow+row;
*/
        String sql="SELECT  sysOrgCode,ID, entryId, clientNo, billNo, voyNo, declarationData, ieFlag, statePname, stateComment, stateOperator, stateTime, statePid, rn from( SELECT D.sys_Org_Code  as sysOrgCode,D.ID, entry_id AS entryId, D.client_no AS clientNo, D.bill_no AS billNo, D.voy_no AS voyNo, D.declaration_data AS declarationData, D.ieFlag, lcs.state_pname AS statePname, lcs.state_comment AS stateComment, lcs.state_operator AS stateOperator, lcs.state_time AS stateTime, lcs.state_pid AS statePid, rownum rn FROM ldc_common_state lcs LEFT JOIN dec_main D ON D.ID = lcs.state_fid WHERE D.ID IS NOT NULL AND lcs.state_pid IS NOT NULL "
                +where.toString()+"and rownum"
                + " <= "+endrow+"   ) where rn > "+firstRow;

        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);

        // 节点名通过state_pid取重新查找,进度情况包含操作和备注,需要拆分
        for (Map map2 : list) {
            // 节点名
            String pid = (String) map2.get("statePid");
            if(StringUtils.isNotBlank(pid)) {
                String num = "Select count(*) from ldc_common_state where id = '"+pid+"' ";
                num = jdbcTemplate.queryForObject(num, String.class);
                if("1".equals(num)) {
                    String statePname = "Select state_pname as statePname from ldc_common_state where id = '"+pid+"' ";
                    statePname = jdbcTemplate.queryForObject(statePname, String.class);
                    map2.put("statePname", statePname);
                }
            }
            // 操作和备注+++++状态放在第一行,审核不通过为Y其他都为N
            String stateComment = (String) map2.get("stateComment");
            if(StringUtils.isNotBlank(stateComment)) {
                if(stateComment.contains("_")) {
                    String[] stateComments = stateComment.split("_");
                    // 获取第一个_之前的字符串
                    map2.put("state", stateComments[0]);
                    // 获取第一个_之后的字符串
                    map2.put("comment", stateComment.substring(stateComment.indexOf("_")+1));
                    if(stateComments[0].equals("审核不通过")) {
                        map2.put("zhuangtai", "N");
                    }else {
                        map2.put("zhuangtai", "Y");
                    }
                }else {
                    map2.put("state", stateComment);
                    if(stateComment.equals("审核不通过")) {
                        map2.put("zhuangtai", "N");
                    }else {
                        map2.put("zhuangtai", "Y");
                    }
                }
            }
        }

        String sql1 = "SELECT count(*) "
                + " FROM ldc_common_state lcs LEFT JOIN dec_main d ON d.id = lcs.state_fid  "
                + " where d.id is not null and lcs.state_pid is not null "+where.toString();

        int count= jdbcTemplate.queryForObject(sql1, Integer.class);
        dataGrid.setTotal(count);
        dataGrid.setResults(list);
        TagUtil.datagrid(response, dataGrid);
    }
原文地址:https://www.cnblogs.com/xueblvip/p/14512190.html