SQ拼接分页查询问题

public ScResult DisplayWorkInProgress(Map<String, String> valueMap) {
    if (valueMap.size() > 0) {
        String productionNo = valueMap.get("productionNo");
        String processCode = valueMap.get("processCode");
        String startDate = valueMap.get("startDate");
        String endDate = valueMap.get("endDate");
        //当前页
        int page = Integer.parseInt(valueMap.get("page"));
        int limit = Integer.parseInt(valueMap.get("limit"));
        StringBuilder sql = new StringBuilder();
        sql.append("WITH mp AS (SELECT  \n" +
                "info.ID ,\n" +
                "info.CREATED ,\n" +
                "info.LAST_UPDATER ,\n" +
                "info.VERSION ,\n" +
                "info.UPDATED ,\n" +
                "info.BUNDLE_NO, \n" +
                "info.COUNT , \n" +
                "info.ENTRUST_LIST_NO,\n" +
                "info.FINISHING_PLAN_NO,\n" +
                "info.HEAT_NO,\n" +
                "info.INGOT_NO,\n" +
                "info.INGOT_SHAPE,\n" +
                "info.INGOT_WEIGHT,\n" +
                "info.MOTHER_HEAT_NO,\n" +
                "info.ORDER_TYPE,\n" +
                "info.PLAN_NO,\n" +
                "info.PLAN_STEP_NO,\n" +
                "info.POINTS_CARD_NO,\n" +
                "info.PROCESS_CODE,\n" +
                "info.CRAFT_PRC_CODE,\n" +
                "info.PRODUCT_CLASS,\n" +
                "info.PRODUCT_CODE,\n" +
                "info.PRODUCT_NAME,\n" +
                "info.PRODUCT_SHAPE,\n" +
                "info.PRODUCTION_NO,\n" +
                "info.SIZE_FLAG,\n" +
                "info.SLAB_SOURCE,\n" +
                "info.SLAB_WEIGHT,\n" +
                "info.SPEC_VAL1,\n" +
                "info.SPEC_VAL2,\n" +
                "info.SPEC_VAL3,\n" +
                "info.STEEL_TYPE,\n" +
                "info.STOCK_AREA,\n" +
                "info.STOCK_LOCATION,\n" +
                "info.TECHNICAL_STANDARD,\n" +
                "info.TIMES_FLAG,\n" +
                "info.UNIT_CODE,\n" +
                "info.WEIGHT,\n" +
                "info.WORK_SHOP_CODE,\n" +
                "info.CUT_FLAG,\n" +
                "info.ENTRUST_STATUS,\n" +
                "info.HEATING_NAME,\n" +
                "info.HEATING_NO,\n" +
                "info.IS_CLEAN,\n" +
                "info.IS_LINE,\n" +
                "info.LOCK_COUNT,\n" +
                "info.LOCK_WEIGHT,\n" +
                "info.LOCK_SLAB_WEIGHT,\n" +
                "info.LOCK_INGOT_WEIGHT,\n" +
                "info.LOCK_TYPE,\n" +
                "info.LOCK_REASON,\n" +
                "info.LOCK_NOTE,\n" +
                "info.NO_FLAG,\n" +
                "info.ORG_BUNDLE_NO,\n" +
                "info.ORG_INGOT_NO,\n" +
                "info.POSITION_CODE,\n" +
                "info.QUTITY_CODE,\n" +
                "info.SURFACE_STATUS,\n" +
                "info.FINISHING_SN,\n" +
                "info.SPARE1,\n" +
                "info.NOTE,\n" +
                "info.PCH,\n" +
                "info.SYH,\n" +
                "info.YH,\n" +
                "info.GROUP_HEAT_NO,\n" +
                "sn .STEEL_NO_CODE  STEEL_NO, sn.STEEL_NO_NAME  STEEL_NO_NAME\n" +
                "FROM  STEEL_NO sn inner JOIN PROCESS_MATERIAL_INFO info ON sn.STEEL_NO_CODE = info.STEEL_NO\n" +
                "WHERE info.POSITION_CODE='3' AND  info.COUNT >0 ");

        if (productionNo != null && !productionNo.isEmpty()) {
            sql.append(String.format("and instr( PRODUCTION_NO,'%s')>0  ", productionNo));
        }
        if (processCode != null && !processCode.isEmpty()) {
            sql.append(String.format("AND  info.PROCESS_CODE='%s'  ", processCode));
        }
---  时间查询
        if (startDate != null && !startDate.isEmpty() && endDate != null && !endDate.isEmpty()) {
            sql.append(String.format("AND info.CREATED >= TO_DATE( '%s', 'yyyy-mm-dd hh24:mi:ss' )  ", startDate));
            sql.append(String.format("AND info.CREATED <= TO_DATE( '%s', 'yyyy-mm-dd hh24:mi:ss' ) ", endDate));
        }
        sql.append(" ) ");
----  分页
        sql.append(", data AS(SELECT mp.*,count(mp.PRODUCTION_NO) over() total,ROWNUM row_num FROM mp)SELECT data.* FROM data WHERE row_num BETWEEN   ");
        sql.append(String.format("%d AND %d", (page - 1) * limit + 1, page * limit));

        List<Map<String, Object>> list = MyUtil.traverseReplaceMapKeyObj(this.nativeQuery(sql.toString()));
        Map<String, Object> returnMap = new HashMap<>(list.size());
        returnMap.put("totalElements", MyUtil.getTotal(list));
        returnMap.put("data", list);
        return ScResult.set(returnMap, "查询成功");
    }
    return ScResult.err("参数不能为空");
}

public static List<Map<String, Object>> traverseReplaceMapKeyObj(List<Map> list) {
    List<Map<String, Object>> listAfterChange = new ArrayList<>();
    list.forEach(item -> {
        Map<String, Object> newMap = new HashMap<>();
        item.keySet().forEach(obj -> {
            newMap.put(MyUtil.camelName(obj.toString()), item.get(obj));
        });
        listAfterChange.add(newMap);
    });
    list.clear();
    return listAfterChange;
}

/**
 * 映射数据库列名字到实体类属性
 *
 * @param name 数据库字段
 * @return
 */
public static String camelName(String name) {
    StringBuilder result = new StringBuilder();
    // 快速检查
    if (name == null || name.isEmpty()) {
        // 没必要转换
        return "";
    } else if (!name.contains("_")) {
        // 不含下划线,仅将首字母小写
        return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase();
    }
    // 用下划线将原始字符串分割
    String[] camels = name.split("_");
    for (String camel : camels) {
        // 跳过原始字符串中开头、结尾的下换线或双重下划线
        if (camel.isEmpty()) {
            continue;
        }
        // 处理真正的驼峰片段
        if (result.length() == 0) {
            // 第一个驼峰片段,全部字母都小写
            result.append(camel.toLowerCase());
        } else {
            // 其他的驼峰片段,首字母大写
            result.append(camel.substring(0, 1).toUpperCase());
            result.append(camel.substring(1).toLowerCase());
        }
    }
    return result.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值