Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/service/ImportBasedataManagerImpl.java =================================================================== diff -u -r14532 -r14571 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/service/ImportBasedataManagerImpl.java (.../ImportBasedataManagerImpl.java) (revision 14532) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/service/ImportBasedataManagerImpl.java (.../ImportBasedataManagerImpl.java) (revision 14571) @@ -227,6 +227,9 @@ // 导入 "一次性物品管理" totalCount.set(importDiposableGoodsBasedata(re, wb.getSheet("一次性物品管理"), msg, totalCount.intValue())); + // 导入"外来器械包"数据 + totalCount.set(importForeignTousseData(wb.getSheet("外来器械包管理"), msg, + totalCount.intValue())); // 导入"器械包管理"基础数据 totalCount.set(importTousseBasedata(wb.getSheet("器械包管理"), msg, totalCount.intValue(), packageTypes, sterilingMethods)); @@ -1300,7 +1303,172 @@ msg.put("材料管理", successCount + "#" + failureCount + "#" + sb.toString()); return totalCount; } + /** + * 外来器械包的导入 + * @param tousseSheet + * @param msg + * @param totalCount + * @return + */ + private int importForeignTousseData(HSSFSheet foreignTousseSheet, + Map msg, int totalCount){ + if (foreignTousseSheet == null) { + return totalCount; + } + int successCount = 0, failureCount = 0; + StringBuffer sb = new StringBuffer(); + try{ + Map nameToIndexMap = ExcelUtils.autoDetectSheepAndCreateColumnNameToIndexMap(foreignTousseSheet); + int lastRowNum = foreignTousseSheet.getLastRowNum(); + int tousseNameIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "器械包名称"); + int companyIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "公司名称"); + int materialDefinitionNameIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "器械包明细(含可拆卸的工具)"); + int materialSpecificationIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "规格"); + int materialDefinitionAmountIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "数量"); + int includeImplantIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "工具/植入物"); + int dismantleAmountIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "可拆卸数量"); + + TousseDefinition tousseDefinition = null; + List materialInstanceList = null; + List tousseDefinitionMaterials = null; + for (int i = 1; i <= lastRowNum; i++) { + HSSFRow row = foreignTousseSheet.getRow(i); + int currentRowNum = i + 1; + if (row == null || ParerUtils.isBlankRow(row)) { + continue; + } + String name = ParerUtils.getCellFormatValue(row, tousseNameIndex); + if (StringUtils.isNotBlank(name)) { + if (tousseDefinition != null) { + TousseDefinition persistenceTousseDefinition = tousseDefinitionManager + .getTousseDefinitionByName(tousseDefinition + .getName()); + if (persistenceTousseDefinition != null) { + deleteMaterialInstanceByTousseDefinition(persistenceTousseDefinition); + tousseDefinition = setPersistenceTousseDefinitionPropertyValueWithOtherTousseDefinition( + persistenceTousseDefinition, tousseDefinition); + } + bindTousseDefinition(materialInstanceList, tousseDefinition); + tousseDefinition.setMaterialInstances(materialInstanceList); + // 类型是外来器械包 + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); + // 设置材料的顺序 + TousseDefinitionUtils.resetTousseDefinitionMaterialSequence(tousseDefinitionMaterials); + totalCount = saveOrUpdateAndClearCache(totalCount, + tousseDefinition); + tousseDefinition.setAncestorID(tousseDefinition.getId()); + successCount++; + materialInstanceList = null; + tousseDefinitionMaterials = null; + tousseDefinition = null; + } + materialInstanceList = new ArrayList(); + tousseDefinitionMaterials = new LinkedList(); + tousseDefinition = new TousseDefinition(); + // 器械包名称 + tousseDefinition.setName(name); + tousseDefinition.setForDisplay(true); + // 供应商 + String company = ParerUtils.getCellFormatValue(row, companyIndex); + tousseDefinition.setSupplierName(company); + // 材料名称 + String materialDefinitionName = ParerUtils.getCellFormatValue(row, materialDefinitionNameIndex); + // 材料规格 + String specification = ParerUtils.getCellFormatValue(row, materialSpecificationIndex); + + // 材料数量 + String materialDefinitionNumStr = ParerUtils.getCellFormatValue(row, materialDefinitionAmountIndex); + // 是否植入物 + String includePlant = ParerUtils.getCellFormatValue(row, includeImplantIndex); + // 可拆卸数量 + String dismantleAmount = ParerUtils.getCellFormatValue(row, dismantleAmountIndex); + + if (StringUtils.isNotBlank(materialDefinitionName)) { + int errorCode = validateAndAddForeignMaterialInstance( + materialInstanceList, + materialDefinitionName, + materialDefinitionNumStr, specification, + includePlant,dismantleAmount,tousseDefinitionMaterials); + if (errorCode != 0) { + // 若在数据库中找不到该材料,或录入的数量有误或该材料已经存在列表中,则此时该器械包插入失败 + failureCount = appendFailureRowNumAndRecordFailureNum( + failureCount, sb, currentRowNum,materialDefinitionNameIndex,errorCode); + tousseDefinition = null; + continue; + } + } + }else { + // 器械包里面的材料 + if (tousseDefinition == null) { + continue; + } else { + // 材料名称 + String materialDefinitionName = ParerUtils.getCellFormatValue(row, materialDefinitionNameIndex); + + // 材料规格 + String specification = ParerUtils.getCellFormatValue(row, materialSpecificationIndex); + + // 材料数量 + String materialDefinitionNumStr = ParerUtils.getCellFormatValue(row, materialDefinitionAmountIndex); + // 是否植入物 + String includePlant = ParerUtils.getCellFormatValue(row, includeImplantIndex); + // 可拆卸数量 + String dismantleAmount = ParerUtils.getCellFormatValue(row, dismantleAmountIndex); + + if (StringUtils.isNotBlank(materialDefinitionName)) { + int errorCode = validateAndAddForeignMaterialInstance( + materialInstanceList, + materialDefinitionName, + materialDefinitionNumStr, specification, + includePlant,dismantleAmount,tousseDefinitionMaterials); + if (errorCode != 0) { + // 若在数据库中找不到该材料,或录入的数量有误或该材料已经存在列表中,则此时该器械包插入失败 + failureCount = appendFailureRowNumAndRecordFailureNum( + failureCount, sb, currentRowNum,materialDefinitionNameIndex,errorCode); + tousseDefinition = null; + continue; + } + } + } + } + } + // 如果是最后一个 + if (tousseDefinition != null) { + TousseDefinition persistenceTousseDefinition = tousseDefinitionManager + .getTousseDefinitionByName(tousseDefinition + .getName()); + if (persistenceTousseDefinition != null) { + deleteMaterialInstanceByTousseDefinition(persistenceTousseDefinition); + tousseDefinition = setPersistenceTousseDefinitionPropertyValueWithOtherTousseDefinition( + persistenceTousseDefinition, tousseDefinition); + } + bindTousseDefinition(materialInstanceList, tousseDefinition); + tousseDefinition.setMaterialInstances(materialInstanceList); + // 类型是外来器械包 + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); + // 设置材料的顺序 + TousseDefinitionUtils.resetTousseDefinitionMaterialSequence(tousseDefinitionMaterials); + totalCount = saveOrUpdateAndClearCache(totalCount, + tousseDefinition); + tousseDefinition.setAncestorID(tousseDefinition.getId()); + successCount++; + } + // 格式:成功插入数量#插入失败数量#失败行1,失败行2... + msg.put("外来器械包管理", + successCount + "#" + failureCount + "#" + sb.toString()); + return totalCount; + }catch(Exception e){ + e.printStackTrace(); + if (sb.length() > 0) { + sb.append("|"); + } + sb.append(e.getMessage()); + msg.put("外来器械包管理", + successCount + "#" + failureCount + "#" + sb.toString()); + } + return totalCount; + } /** * 导入或更新 器械包基础定义excel数据 * @@ -1991,7 +2159,55 @@ // else{否则找不到该材料} return com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_NOT_DEFINED; } + + private int validateAndAddForeignMaterialInstance( + List existingMaterialInstanceList, + String newMaterialDefinitionName, String newMaterialDefinitionNumStr, + String specification,String includePlant,String dismantleAmount,List tousseDefinitionMaterials) { + int materialDefinitionNum = 0; + if (StringUtils.isNotBlank(newMaterialDefinitionNumStr)) { + try { + materialDefinitionNum = Integer + .parseInt(newMaterialDefinitionNumStr); + } catch (Exception e) { + return com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_IS_NOT_NUMBER; + } + } else { + return com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_IS_BLANK; + } + String isIncludePlant = includePlant; + if(StringUtils.isNotBlank(includePlant) && includePlant.equals("植入物")){ + isIncludePlant = "是"; + }else{ + isIncludePlant = "否"; + } + // 从材料里加载 + MaterialDefinition materialDefinition = materialDefinitionManager + .getMaterialDefinitionByName(newMaterialDefinitionName, + specification); + if (materialDefinition != null && "是".equals(materialDefinition.getIsForeignMaterial())) { + for (MaterialInstance instance : existingMaterialInstanceList) { + if (materialDefinition.getId().equals( + instance.getMaterialDefinition().getId())) { + return com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_DUPLICATE;// 查重 + } + } + MaterialInstance materialInstance = new MaterialInstance(); + materialInstance.setMaterialDefinition(materialDefinition); + materialInstance.setCount(materialDefinitionNum); + materialInstance.setMaterialName(newMaterialDefinitionName); + materialInstance.setIncludeImplant(isIncludePlant); + materialInstance.setMinDismantleAmount(dismantleAmount); + // materialInstance.setTousse(tousseDefinition); + existingMaterialInstanceList.add(materialInstance); + tousseDefinitionMaterials.add(materialInstance); + return 0;// 添加成功 + } + // else{否则找不到该材料} + return com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_NOT_DEFINED; + } + private Rinser setPersistenceRinserPropertyValueWithOtherRinser( Rinser persistenceRinser, Rinser tempRinser) { setRinserWithPropertyValue(persistenceRinser,