Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r27923 -r27935 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 27923) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 27935) @@ -45,6 +45,7 @@ import com.beust.jcommander.ParameterException; import com.forgon.Constants; +import com.forgon.databaseadapter.service.SqlFunctionsAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.CssdHandleTousses; import com.forgon.directory.model.CssdServiceDepts; @@ -152,7 +153,9 @@ private TousseDefinitionBelongDepartManager tousseDefinitionBelongDepartManager; private DepartmentStockManager departmentStockManager; - + + private SqlFunctionsAdapter sqlFunctionsAdapter; + public void setDepartmentStockManager( DepartmentStockManager departmentStockManager) { this.departmentStockManager = departmentStockManager; @@ -227,6 +230,9 @@ this.tousseDefinitionBelongDepartManager = tousseDefinitionBelongDepartManager; } + public void setSqlFunctionsAdapter(SqlFunctionsAdapter sqlFunctionsAdapter) { + this.sqlFunctionsAdapter = sqlFunctionsAdapter; + } @Override public void saveOrUpdate(TousseDefinition tousseDefinition) { @@ -1204,13 +1210,16 @@ int amount = Integer.parseInt(countOfLI); int index = (Integer.parseInt(pageIndex) - 1) * amount; - if (amount > 0){ + /*if (amount > 0){ // 如果要分页显示,则不能按名字长度排序。因为同样长度的包太多,会导致分页不准确 sql += " order by po.name asc"; }else{ // 不分页显示,按名称的长度排序显示 sql += " order by " + DatabaseUtil.getSqlLengthFunctionName(dbConnection) + "(po.name) asc"; - } + }*/ + //排序语句(GXZYYFY-49 已更换为下面的排序,上面的排序已注释不用) + String orderBy = buildTousseDefinitionSearchOrderBy(simpleSpell,"po"); + sql += orderBy; List tousseDefinitions = objectDao .findBySql(TousseDefinition.class.getSimpleName(), sql, index, amount, null); @@ -1274,7 +1283,26 @@ } return mapList; } - + + /** + * 查询排序(GXZYYFY-49 4.0更新到4.1后,科室申领物品输入物品首字母不会按照正确顺序弹出相应物品。) + * 即没有输入关键字时,按名称升序;有输入关键字时,按名称长度升序、名称升序. + * @param spell 搜索关键字 + * @param tableAlias 表别名 + * @return + */ + private String buildTousseDefinitionSearchOrderBy(String spell, String tableAlias){ + String tableAliasPrefix = ""; + if(StringUtils.isNotBlank(tableAlias)){ + tableAliasPrefix = tableAlias + "."; + } + String orderBy = " order by "+ tableAliasPrefix +"name "; + if(StringUtils.isNotBlank(spell)){ + orderBy = String.format(" order by %s,"+ tableAliasPrefix +"name ",sqlFunctionsAdapter.strlen(tableAliasPrefix +"name")); + } + return orderBy; + } + private List> searchTousseOrDiposableGoodsBySpellAndWbCodeWithStock( String simpleSpell) { List> mapList = new ArrayList>(); @@ -1969,8 +1997,9 @@ sql += String.format(" and po.isTraceable='%s' ", isTraceable); } sql = getWhereSqlForAssetsBelong(useAssetsBelong, sql); - String orderBySql = String.format(" order by %s ", (sortBySpelling ? "spelling" : DatabaseUtil.getSqlLengthFunctionName(dbConnection) + "(name)")); - + //String orderBySql = String.format(" order by %s ", (sortBySpelling ? "spelling" : DatabaseUtil.getSqlLengthFunctionName(dbConnection) + "(name)")); + //排序语句(GXZYYFY-49 已更换为下面的排序,上面的排序已注释不用) + String orderBySql = buildTousseDefinitionSearchOrderBy(keyword, "po"); List> mapList = new ArrayList>(); List tousseDefinitions = objectDao.findBySql(TousseDefinition.class.getSimpleName(), sql + orderBySql); @@ -2395,9 +2424,12 @@ int totalCount = 0; String whereSql = " where fordisplay = 1 and po.id in (select tousseDefinitionId from " + CssdHandleTousses.class.getSimpleName() + " where orgUnitCode = '" + cssdOrgUnit.getOrgUnitCoding() + "')"; - whereSql += " and (spelling like '%" + spell + "%' or wbCode like '%" - + spell + "%' or externalCode like '" + spell - + "%' or name like '%" + spell + "%') and (isDisable is null or isDisable = '"+TousseDefinition.STR_NO+"')"; + if(StringUtils.isNotBlank(spell)){ + whereSql += " and (spelling like '%" + spell + "%' or wbCode like '%" + + spell + "%' or externalCode like '" + spell + + "%' or name like '%" + spell + "%')"; + } + whereSql += " and (isDisable is null or isDisable = '"+TousseDefinition.STR_NO+"')"; if(!predicates.isEmpty()){ for (String predicate : predicates) { whereSql += " and " + predicate; @@ -2413,7 +2445,12 @@ } } whereSql = getWhereSqlForAssetsBelong(useAssetsBelong, whereSql); - String findSql = String.format(" from %s po %s order by spelling ", TousseDefinition.class.getSimpleName(),whereSql); + /* + * 查询排序(GXZYYFY-49 4.0更新到4.1后,科室申领物品输入物品首字母不会按照正确顺序弹出相应物品。) + * 即没有输入关键字时,按名称升序;有输入关键字时,按名称长度升序、名称升序. + */ + String orderBy = buildTousseDefinitionSearchOrderBy(spell,null); + String findSql = String.format(" from %s po %s %s ", TousseDefinition.class.getSimpleName(),whereSql,orderBy); logger.debug("findSql:" + findSql); if(limit > 0){ list = objectDao.findByHql(findSql,start,limit);