Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java =================================================================== diff -u -r37587 -r37732 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 37587) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 37732) @@ -419,9 +419,11 @@ //通过在器械包下拉里输入但未从下拉选项选中的物品名称(采用模糊匹配) String tousseNameFuzzy = sqlWhereParamMap.get("tousseNameFuzzy"); if (StringUtils.isNotBlank(tousseName)) { - sqlBuilder.append(" AND po.tousseDefinition.name = '" + tousseName + "'"); + String tousseNameFuzzySql = SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("po.tousseName", tousseName, ";"); + sqlBuilder.append(tousseNameFuzzySql); }else if (StringUtils.isNotBlank(tousseNameFuzzy)) { - sqlBuilder.append(" AND po.tousseDefinition.name like '%" + tousseNameFuzzy + "%'"); + String tousseNameFuzzySql = SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("po.tousseName", tousseNameFuzzy, ";"); + sqlBuilder.append(tousseNameFuzzySql); } //器械包状态 String tousseStatus = sqlWhereParamMap.get("tousseStatus"); @@ -662,7 +664,29 @@ int totalResults = objectDao.countObjectBySql(TousseInstance.class.getSimpleName(), sql); List list = new ArrayList(); if(totalResults > 0){ - list = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql, start,pageSize, orderStr); + //list = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql, start,pageSize, orderStr); + //排序语句 + String orderby = buildOrderby(orderStr); + //先查ID + String idHql = String.format("select po.id from %s po %s %s ", TousseInstance.class.getSimpleName(), sql, orderby); + List idList = objectDao.findByHql(idHql, start,pageSize); + //根据ID查询 + String hql = String.format("select po from %s po, %s bd where bd.id = po.id and %s ", + TousseInstance.class.getSimpleName(), + BarcodeDevice.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("bd.id", idList)); + List dbList = objectDao.findByHql(hql); + //再根据id顺序排序 + if(CollectionUtils.isNotEmpty(idList)){ + for (Object idObj : idList) { + Long id = (Long)idObj; + for (TousseInstance ti : dbList) { + if(ti.getId().longValue() == id.longValue()){ + list.add(ti); + } + } + } + } } Map map = new HashMap(); map.put("totalResults", totalResults); @@ -756,6 +780,28 @@ } /** + * 排序语句 + * @param orderStr + * @return + */ + private String buildOrderby(String orderStr) { + String orderby = ""; + if (StringUtils.isNotBlank(orderStr)) { + //如果排序语句是以case开头的则不用加po. + if(orderStr.startsWith("case")){ + orderby = " order by " + orderStr + " "; + }else{ + if (orderStr.startsWith("po.")) + orderby = " order by " + orderStr + " "; + else + orderby = " order by po." + orderStr + " "; + } + } + return orderby; + } + + + /** * 判断配置项是否包含相应的元素名称 * @param configName 配置项名称 * @param fieldName 元素名称