Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r29071 -r29238 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 29071) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 29238) @@ -45,6 +45,7 @@ import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; @@ -6968,8 +6969,9 @@ Set tousseNameSet, Boolean queryUsed, Boolean queryCardinalNum) { ResultSet rs = null; Map> tousseNameToAmountAndStatusMap = new HashMap>(); + String sql = buildSqlOfGetTousseAmountByGroupStatus(departCode, tousseNameSet, queryUsed, queryCardinalNum); try { - rs = objectDao.executeSql(buildSqlOfGetTousseAmountByGroupStatus(departCode, tousseNameSet, queryUsed, queryCardinalNum)); + rs = objectDao.executeSql(sql); while(rs.next()){ Integer amount = rs.getInt("amount"); String status = rs.getString("status"); @@ -7099,12 +7101,29 @@ } sql = String.format("%s union all %s union all %s %s union all %s %s", tiSql, recySql, disinfectedSql, usedSql, sigendSql, cardinalNumSql); }else{//ZJJSRM-34 基数管理功能优化 + OrgUnit orgUnit = new OrgUnit(); + orgUnit.setOrgUnitCoding(departCode); + List wareHouselist = wareHouseManager.getWareHouseListByOrgUnit(orgUnit); + if(CollectionUtils.isEmpty(wareHouselist)){ + throw new RuntimeException("该一级供应室没有仓库,不能计算库存数量"); + } + String wareHouseIdSql = null; + if(wareHouselist.size() == 1){ + wareHouseIdSql = " and ti.wareHouseId =" + wareHouselist.get(0).getId(); + }else{ + Set wareHouseIds = new HashSet(); + for(WareHouse wareHouse : wareHouselist){ + wareHouseIds.add(wareHouse.getId()); + } + wareHouseIdSql = SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.wareHouseId", wareHouseIds); + } //一级供应室只显示库存数量和基数,库存数量为该物品当前在科室(也就是器械包信息列表里的位置)中状态为已灭菌、已消毒的数量 sql = String.format("select count(*) amount,'%s' status,td.name tousseName from %s ti " + "inner join %s td on td.id =ti.tousseDefinition_id " - + "where tousseFixedBarcode=0 and ((location_2 is null and location='%s') or (location_2='%s')) " + + "where tousseFixedBarcode=0 " + + wareHouseIdSql + "and comboTousseInstanceId is null " - + "and (ti.status='%s' or ti.status='%s')" + + "and (ti.status='%s' or ti.status='%s') " + "and %s %s group by td.name ", TousseInstance.STATUS_SIGNED,//页面库存数量显示别名为已签收的数量,所以此处虽然包实例状态是已灭菌或已消毒,但为了显示在库存数量的位置,固定别名为已签收 TousseInstance.class.getSimpleName(),