Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/dto/ModifyTousseDefinitionDto.java =================================================================== diff -u -r37438 -r38144 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/dto/ModifyTousseDefinitionDto.java (.../ModifyTousseDefinitionDto.java) (revision 37438) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/dto/ModifyTousseDefinitionDto.java (.../ModifyTousseDefinitionDto.java) (revision 38144) @@ -85,6 +85,11 @@ private String instrumentSetTypeIds; /** + * 包定义可选灭菌程序的id,例如:1;2;3(ZSRY-20\DGSETYY-97) + */ + private String optionalSterilizationIds; + + /** * 积分HBTSGRYY-7(增加批量修改器械包积分系数) */ private Double integral; @@ -271,4 +276,14 @@ this.assetsBelongCode = assetsBelongCode; } + + public String getOptionalSterilizationIds() { + return optionalSterilizationIds; + } + + + public void setOptionalSterilizationIds(String optionalSterilizationIds) { + this.optionalSterilizationIds = optionalSterilizationIds; + } + } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r37973 -r38144 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 37973) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 38144) @@ -86,6 +86,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ForeignTousseCombo; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType_TD; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefOptionalSterilization; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinitionBelongDepart; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinitionNote; @@ -5431,6 +5432,7 @@ String isConvertApplyGoods = modifyTousseDefinitionDto.getIsConvertApplyGoods();//是否转换申请物品 String belongOrgUnitCodes = modifyTousseDefinitionDto.getBelongOrgUnitCodes();//所属科室编码:1;2;3 String instrumentSetTypeIds = modifyTousseDefinitionDto.getInstrumentSetTypeIds();//器械包所属种类ID:1;2;3 + String optionalSterilizationIds = modifyTousseDefinitionDto.getOptionalSterilizationIds();//包定义可选灭菌程序的id,例如:1;2;3 Double integral = modifyTousseDefinitionDto.getIntegral();//积分系数 String registUseRecordAfterSigned = modifyTousseDefinitionDto.getRegistUseRecordAfterSigned();//签收后录入使用记录 Integer printAmount = modifyTousseDefinitionDto.getPrintAmount();//打印份数 @@ -5618,6 +5620,10 @@ modifyDateTime, modifyUserID, session); dataModifyRecordList.addAll(modifyInstrumentSetTypeRecordList); + //批量修改新增批量修改“可选灭菌程序”(ZSRY-20\DGSETYY-97) + List modifyOptionalSterilizationRecordList = batchModifyOptionalSterilization(needModifys, optionalSterilizationIds, + modifyDateTime, modifyUserID, session); + dataModifyRecordList.addAll(modifyOptionalSterilizationRecordList); //保存改动记录 if(CollectionUtils.isNotEmpty(dataModifyRecordList)){ @@ -5658,6 +5664,204 @@ } /** + * 批量修改包定义的可选灭菌程序DGSETYY-97 + * @param needModifys + * @param optionalSterilizationIds + * @param modifyDateTime + * @param modifyUserID + * @param session + * @return + */ + private List batchModifyOptionalSterilization(List needModifys,String optionalSterilizationIds, + Date modifyDateTime, Long modifyUserID, HttpSession session) { + List dataModifyRecordList = new ArrayList(); + boolean enableAvailableSterilizationProgramsOfTousseFunction = + CssdUtils.getSystemSetConfigByNameBool("enableAvailableSterilizationProgramsOfTousseFunction"); + if(!enableAvailableSterilizationProgramsOfTousseFunction){ + return dataModifyRecordList; + } + if(StringUtils.isBlank(optionalSterilizationIds) + || CollectionUtils.isEmpty(needModifys)){ + return dataModifyRecordList; + } + List optionalSterilizationIdList = (List) StringTools.toCollectionIgnoreNullAndBlank(optionalSterilizationIds, Constants.IDS_SEPARATOR); + if(CollectionUtils.isEmpty(optionalSterilizationIdList)){ + return dataModifyRecordList; + } + + String sterilisationSql = String.format("select po from %s po where %s order by po.id ", + Sterilisation.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", optionalSterilizationIdList)); + @SuppressWarnings("unchecked") + List sterilisationList = objectDao.findByHql(sterilisationSql); + if(CollectionUtils.isEmpty(sterilisationList)){ + return dataModifyRecordList; + } + + List tousseDefinitionIds = new ArrayList(); + for (TousseDefinition td : needModifys) { + tousseDefinitionIds.add(td.getId()); + } + + String idColumnName = ""; + String idColumnValue = ""; + if(dbConnection.isOracle()){ + idColumnName = " id, "; + idColumnValue = " HIBERNATE_SEQUENCE.Nextval, "; + } + + //查询原来器械包定义的可选灭菌程序 + Map oldTousseDefinitionIDOptionalSterilizationMap = getOptionalSterilizationMap(tousseDefinitionIds); + + //计算器械包定义的可选灭菌程序记录数: + String optionalSterilizationIdSql = ""; + String countSql = String.format("select count(*) from TousseDefOptionalSterilization where %s ", + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionId", tousseDefinitionIds)); + int count = objectDao.countBySql(countSql); + logger.debug("数据库已经保存的TousseDefOptionalSterilization表数据量:" + count); + logger.debug("需要插入TousseDefOptionalSterilization表数据量:" + optionalSterilizationIdList.size()*tousseDefinitionIds.size()); + //判断是否先删除包定义的可选灭菌程序 + boolean deleteAllRecordBeforeInsert = deleteAllRecordBeforeInsert(count, optionalSterilizationIdList.size()*tousseDefinitionIds.size()); + + if(!deleteAllRecordBeforeInsert){ + //只删除此次不需要保存的可选灭菌程序,保留此次需要保存的可选灭菌程序 + optionalSterilizationIdSql = " and " + SqlUtils.getNonStringFieldNotInCollectionsPredicate("sterilizationId", optionalSterilizationIdList); + } + + //删除器械包定义的可选灭菌程序 + String deleteSql = String.format("delete from TousseDefOptionalSterilization where %s %s ", + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionId", tousseDefinitionIds), + optionalSterilizationIdSql); + setSessionAttribute(session, "删除器械包定义可选灭菌程序"); + long deleteTime = System.currentTimeMillis(); + logger.debug("开始删除器械包定义可选灭菌程序:" + deleteSql); + jdbcTemplate.execute(deleteSql); + logger.debug("完成删除器械包定义可选灭菌程序,执行时间 = " + ((System.currentTimeMillis()-deleteTime) / 1000)); + + if(!deleteAllRecordBeforeInsert){ + //删除此次不需要的可选灭菌程序,保存新增的可选灭菌程序(新保存记录大于原来数据库保存数据的时候,效率高) + setSessionAttribute(session, "保存器械包定义可选灭菌程序"); + //插入器械包定义器械包种类记录 + String insertSql = "insert into TousseDefOptionalSterilization (" + idColumnName + " tousseDefinitionId, sterilizationId) " + + "select " + idColumnValue + " td.id, s.id from TousseDefinition td, Sterilisation s " + + "where 1=1 " + + "and not exists (select istd.tousseDefinitionId from TousseDefOptionalSterilization istd where istd.tousseDefinitionId = td.id and istd.sterilizationId = s.id )" + + " and " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("td.id", tousseDefinitionIds) + + " and " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("s.id", optionalSterilizationIdList); + long insertTime = System.currentTimeMillis(); + logger.debug("开始插入TousseDefOptionalSterilization表记录, insertSql === "+ insertSql); + jdbcTemplate.execute(insertSql); + logger.debug("完成插入TousseDefOptionalSterilization表记录" + ", 执行时间 = " + ((System.currentTimeMillis()-insertTime) / 1000)); + }else{ + //删除包定义的所有可选灭菌程序,再保存此次需要保存的可选灭菌程序(新保存记录小于原来数据库保存数据的时候,效率高) + setSessionAttribute(session, "保存器械包定义可选灭菌程序"); + List tousseDefOptionalSterilizationList = new ArrayList(); + for(TousseDefinition td : needModifys){ + for (String optionalSterilizationId : optionalSterilizationIdList) { + if(DatabaseUtil.isPoIdValid(optionalSterilizationId)){ + TousseDefOptionalSterilization tousseDefOptionalSterilization = new TousseDefOptionalSterilization(); + tousseDefOptionalSterilization.setTousseDefinitionId(td.getId()); + tousseDefOptionalSterilization.setSterilizationId(Long.valueOf(optionalSterilizationId)); + tousseDefOptionalSterilizationList.add(tousseDefOptionalSterilization); + } + } + } + int size = tousseDefOptionalSterilizationList.size(); + String insertSql1 = String.format("insert into TousseDefOptionalSterilization ( %s tousseDefinitionId, sterilizationId) " + + " values (%s ?,?)", + idColumnName, idColumnValue); + + long insertTime = System.currentTimeMillis(); + logger.debug("开始插入TousseDefOptionalSterilization表记录"); + jdbcTemplate.batchUpdate(insertSql1, new BatchPreparedStatementSetter() { + + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + TousseDefOptionalSterilization tousseDefOptionalSterilization = tousseDefOptionalSterilizationList.get(i); + ps.setLong(1, tousseDefOptionalSterilization.getTousseDefinitionId()); + ps.setLong(2, tousseDefOptionalSterilization.getSterilizationId()); + } + + @Override + public int getBatchSize() { + return size; + } + + }); + logger.debug("完成插入TousseDefOptionalSterilization表记录" + ", 执行时间 = " + ((System.currentTimeMillis()-insertTime) / 1000)); + } + + //保存修改记录 + String newSterilisations = ""; + if(CollectionUtils.isNotEmpty(sterilisationList)){ + for (Sterilisation sterilisation : sterilisationList) { + if(StringUtils.isBlank(newSterilisations)){ + newSterilisations = sterilisation.getSterilisation(); + }else{ + newSterilisations += ";" + sterilisation.getSterilisation(); + } + } + } + + for (TousseDefinition tousseDefinition : needModifys) { + String oldValue = oldTousseDefinitionIDOptionalSterilizationMap.get(tousseDefinition.getId()); + if(StringUtils.equals(oldValue, newSterilisations)){ + continue; + } + DataModifyRecord record = new DataModifyRecord(); + record.setModifyDateTime(modifyDateTime); + record.setModifyDetail("可选灭菌程序"); + record.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + record.setModifyType(DataModifyRecord.MODIFY_TYPE_BATCH); + record.setModifyUserID(modifyUserID); + record.setNewValue(newSterilisations); + record.setOldValue(oldValue); + record.setObjectID(tousseDefinition.getId()); + dataModifyRecordList.add(record); + } + return dataModifyRecordList; + } + + /** + * 查询器械包定义可选灭菌程序(用于保存包定义修改记录) + * @param tousseDefinitionIds + * @return + */ + private Map getOptionalSterilizationMap(List tousseDefinitionIds) { + Map result = new HashMap(); + if(CollectionUtils.isEmpty(tousseDefinitionIds)){ + return result; + } + String sql = String.format("select tos.tousseDefinitionId, s.sterilisation, tos.sterilizationId " + + " from %s s join %s tos on s.id = tos.sterilizationId where %s order by s.id", + Sterilisation.class.getSimpleName(), + TousseDefOptionalSterilization.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tos.tousseDefinitionId", tousseDefinitionIds)); + + long deleteTime = System.currentTimeMillis(); + logger.debug("开始查询器械包定义可选灭菌程序:" + sql); + List> resultMapList = jdbcTemplate.queryForList(sql); + logger.debug("完成查询器械包定义可选灭菌程序,执行时间 = " + ((System.currentTimeMillis()-deleteTime) / 1000)); + + if(CollectionUtils.isNotEmpty(resultMapList)){ + for (Map map : resultMapList) { + Number tousseDefinitionId = (Number)map.get("tousseDefinitionId"); + String sterilisation = (String) map.get("sterilisation"); + String sterilisations = result.get(tousseDefinitionId.longValue()); + if(sterilisations == null){ + sterilisations = sterilisation; + }else{ + sterilisations += ";" + sterilisation; + } + result.put(tousseDefinitionId.longValue(), sterilisations); + } + } + return result; + } + + /** * 批量修改器械包种类 * @param needModifys * @param instrumentSetTypeIds