Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r36775 -r36777 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36775) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36777) @@ -3443,11 +3443,14 @@ virtualBasketNameList.add(reviewedBasket.getContainer().getContainerName()); } Set oldReviewBasketIds = new HashSet();//包实例中VirtualBasketSeqNum为空的篮筐id 数据中是有这种虚拟筐的 - Map toolAndImplantAmountMap = new HashMap(); - Map disinfectItemArrayMap = new HashMap(); + List isNotTraceables = new ArrayList();//不追溯的祖先包定义id List tousses = new ArrayList();//拷贝数据,批量进行修改提高效率 对查询出来的tousses2的修改不是批量修改 速度较慢 Set packageTypes = new HashSet(); + Set tdIdsOfDisinfection = new HashSet(); + Set tdIdsOfForeignTousse = new HashSet(); + Set idCardInstanceIDs = new HashSet(); + for (TousseInstance tousseInstance : notUpdateTousses) { TousseDefinition td = tousseInstance.getTousseDefinition(); if (TousseDefinition.STR_NO.equals(td.getIsTraceable()) && !isNotTraceables.contains(td.getAncestorID())) { @@ -3461,12 +3464,23 @@ if(StringUtils.isNotBlank(tousseInstance.getPackageType())){ packageTypes.add(tousseInstance.getPackageType()); } + if(td.isDisinfection()){ + tdIdsOfDisinfection.add(td.getId()); + }else if(td.isForeignTousse() || td.isSplit()){ + tdIdsOfForeignTousse.add(td.getId()); + } + if(DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())){ + idCardInstanceIDs.add(tousseInstance.getIdCardInstanceID()); + } } Map tdIdToFixBarcodeMap = null; if(isNotTraceables.size() > 0){ tdIdToFixBarcodeMap = tousseDefinitionManager.getTousseDefinitionFixedBarcodeMap(isNotTraceables); } Map expirationDateInfoMap = getExpirationDateInfoMap(packageTypes); + Map disinfectItemArrayMap = tousseDefinitionManager.getMaterialsOfDisinfectionGoods(tdIdsOfDisinfection); + Map toolAndImplantAmountMap = tousseDefinitionManager.getToolAndImplantAmount(tdIdsOfForeignTousse); + Map idCardInstanceInfoMap = getIdCardInstanceInfoMap(idCardInstanceIDs); Map increaseStockByTousseNameMap = new HashMap(); for (TousseInstance tousseInstance : tousses) { if(DatabaseUtil.isPoIdValid(tousseInstance.getPackingRecord_id())){ @@ -3495,7 +3509,7 @@ } boolean isDisinfectionGoods = false; - JSONArray disinfectItemArray = new JSONArray(); + JSONArray disinfectItemArray = null; TousseDefinition td = tousseInstance @@ -3507,10 +3521,8 @@ if(disinfectItemArrayMap.containsKey(td.getId())){ disinfectItemArray = disinfectItemArrayMap.get(td.getId()); }else{ - disinfectItemArray = tousseDefinitionManager.getMaterialsOfDisinfectionGoods(td); - disinfectItemArrayMap.put(td.getId(), disinfectItemArray); + disinfectItemArray = new JSONArray(); } - // 更新包状态 tousseInstance .setStatus(TousseInstance.STATUS_DISINFECTED); @@ -3558,6 +3570,7 @@ } // 非消毒物品(器械包或者外来器械包等) else{ + disinfectItemArray = new JSONArray(); tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); //如果灭菌篮筐不为空,则将审核篮筐实例的id设置为传入的灭菌篮筐的id,再将其虚拟篮筐的名称置空 @@ -3636,11 +3649,14 @@ } JSONObject toolAndImplantAmount = null; + Integer toolAmount = 0; + Integer implantAmount = 0; if(toolAndImplantAmountMap.containsKey(td.getId())){ toolAndImplantAmount = toolAndImplantAmountMap.get(td.getId()); - }else{ - toolAndImplantAmount = tousseDefinitionManager.getToolAndImplantAmount(td); - toolAndImplantAmountMap.put(td.getId(), toolAndImplantAmount); + if(toolAndImplantAmount != null){ + toolAmount = toolAndImplantAmount.optInt("toolAmount"); + implantAmount = toolAndImplantAmount.optInt("implantAmount"); + } } String validUntilDateToPrint = ""; @@ -3677,17 +3693,19 @@ } // 器械包的标识牌的属性赋值 - Long idCardDefinitionUseAmount = 0L; - String idCardDefinitionIdNumber = ""; - String idCardDefinitionDescription = ""; - - IDCardDefinition idCardDefinition = getIDCardDefinition(tousseInstance.getIdCardInstanceID()); - if (idCardDefinition != null){ - idCardDefinitionUseAmount = idCardDefinition.getUseAmount(); - idCardDefinitionIdNumber = idCardDefinition.getIdNumber(); - idCardDefinitionDescription = idCardDefinition.getDescription(); + Long idCardDefinitionUseAmount = null; + String idCardDefinitionIdNumber = null; + String idCardDefinitionDescription = null; + if(idCardInstanceInfoMap.containsKey(tousseInstance.getIdCardInstanceID())){ + JSONObject obj = idCardInstanceInfoMap.get(tousseInstance.getIdCardInstanceID()); + idCardDefinitionUseAmount = obj.optLong("useAmount"); + idCardDefinitionIdNumber = obj.optString("idNumber"); + idCardDefinitionDescription = obj.optString("description"); + }else{ + idCardDefinitionUseAmount = 0L; + idCardDefinitionIdNumber = ""; + idCardDefinitionDescription = ""; } - String packageTypeAbbreviation = packageTypeMap.get(packageType); if(packageTypeAbbreviation == null){ packageTypeAbbreviation = ""; @@ -3703,8 +3721,8 @@ isDisinfectionGoodsPrintExpirationDate, isPrint, isReview, isTraceable, bigPackage, fixedBarcode, disinfectItemArray, foreignTousseApp_id, supplierName, - toolAndImplantAmount.optInt("toolAmount"), - toolAndImplantAmount.optInt("implantAmount"),TousseInstanceUtils.getTousseInstanceDepartForPrint(tousseInstance) , td.getPrintOrgSource(), + toolAmount, + implantAmount,TousseInstanceUtils.getTousseInstanceDepartForPrint(tousseInstance) , td.getPrintOrgSource(), idCardDefinitionUseAmount,idCardDefinitionIdNumber,idCardDefinitionDescription,objectDao,td.getBarcodePaperType(),tousseInstance.getWashOperator(),tousseInstance.getWashOperatorCode(), tousseInstance.getWeight(),tousseInstance.getRemark(),td.getPrintAmountForPrint(objectDao),BooleanUtils.toBooleanDefaultIfNull(tousseInstance.getHaveUnSupplementMaterials(), false),tousseInstance.getIsUrgentTousse(),tousseInstance.getTousseInstancesAmountBelongToThisComboTousse(objectDao));// TODO 需要确认审核后打印,是否也支持打印多份 obj.put("tousseDefinitionId", td.getId()); @@ -3921,6 +3939,35 @@ return json; } /** + * 获取标识牌相关信息 + * @param idCardInstanceIDs + * @return + */ + private Map getIdCardInstanceInfoMap(Set idCardInstanceIDs){ + Map idCardInstanceInfoMap = new HashMap(); + if(CollectionUtils.isNotEmpty(idCardInstanceIDs)){ + ResultSet rs = null; + try { + StringBuffer sql = new StringBuffer(); + sql.append("select ii.id,d.useAmount,d.idNumber,d.description from IDCardInstance ii join IDCardDefinition d on d.id=ii.idCardDefinitionID where 1=1 " + + SqlUtils.getInLongListSql("ii.id", idCardInstanceIDs)); + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + JSONObject obj = new JSONObject(); + obj.put("useAmount", rs.getLong(2)); + obj.put("idNumber", rs.getString(3)); + obj.put("description", rs.getString(4)); + idCardInstanceInfoMap.put(rs.getLong(1), obj); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + return idCardInstanceInfoMap; + } + /** * 获取包装类型对应的ExpirationDateInfo,封装成map返回 * @param packageTypes * @return ExpirationDateInfo.getPackageType() value:ExpirationDateInfo Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r36710 -r36777 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 36710) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 36777) @@ -2372,8 +2372,68 @@ } return jsonArray; } - @Override + public Map getMaterialsOfDisinfectionGoods(Set tdIds) { + Map disinfectItemArrayMap = new HashMap(); + if(CollectionUtils.isNotEmpty(tdIds)){ + StringBuffer sbf = new StringBuffer(); + sbf.append("select td.id,md.disinfectionPrice,md.name,md.specification,mi.materialDefinition_id,mi.count " + + "from TousseDefinition td " + + "join MaterialInstance mi on mi.tousse_id=td.id " + + "join MaterialDefinition md on mi.materialDefinition_id=md.id " + + "where 1=1 " + SqlUtils.getInLongListSql("td.id", tdIds)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sbf.toString()); + + while(rs.next()){ + Long tdId = rs.getLong("id"); + JSONArray jsonArray = null; + if(disinfectItemArrayMap.containsKey(tdId)){ + jsonArray = disinfectItemArrayMap.get(tdId); + }else{ + jsonArray = new JSONArray(); + disinfectItemArrayMap.put(tdId, jsonArray); + } + Double disinfectionPrice = rs.getDouble("disinfectionPrice"); + double price = MathTools.object2Double(disinfectionPrice); + String specification = rs.getString("specification"); + String name = null; + if (StringUtils.isNotBlank(specification)) { + name = rs.getString("name") + ("[" + specification + "]"); + }else{ + name = rs.getString("name"); + } + + JSONObject obj = new JSONObject(); + obj.put("name", name); + obj.put("materialDefinitionId", rs.getLong("materialDefinition_id")); //材料id + obj.put("tousseType", MaterialInstance.MATERIAL_TYPE_INSTRUMENT); + obj.put("isDiposable", "否"); + + int count = rs.getInt("count"); + + double totalPrice = MathTools.mul(price, count).doubleValue(); + obj.put("count", count); + obj.put("countBackup", count); //申请的数量备份起来 + obj.put("totalPrice", totalPrice); + + // 为兼容某些页面的代码,主要是打印的配置,将数量同时输出为amount属性,Terry Kwan, 2015-11-28 + obj.put("amount", count); + + obj.put("price", price); + obj.put("leaf", true); + jsonArray.add(obj); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + return disinfectItemArrayMap; + } + @Override public JSONArray getMaterialsOfTousseDefinition( TousseDefinition td){ JSONArray array = new JSONArray(); @@ -2480,8 +2540,64 @@ obj.put("implantAmount", implantAmount); return obj; } - @Override + public Map getToolAndImplantAmount(Set tdIds) { + Map toolAndImplantAmountMap = new HashMap(); + if(CollectionUtils.isEmpty(tdIds)){ + return toolAndImplantAmountMap; + } + ResultSet rs = null; + try { + StringBuffer sql = new StringBuffer(); + sql.append("select * from (select td.id,mi.isImplant,md.isImplant mdisImplant,mi.count amount, '材料' type from TousseDefinition td " + + "join MaterialInstance mi on mi.tousse_id=td.id " + + "join MaterialDefinition md on md.id=mi.materialDefinition_id " + + "union all " + + "select td.id,null isImplant,null mdisImplant,sum(d.amount) amount, '一次性物品' type from TousseDefinition td " + + "join DiposableGoodsInstance d on d.tousseDefinition_id=td.id group by td.id) t where 1=1" + + SqlUtils.getInLongListSql("t.id", tdIds)); + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + Long tdId = rs.getLong(1); + JSONObject obj = null; + if(toolAndImplantAmountMap.containsKey(tdId)){ + obj = toolAndImplantAmountMap.get(tdId); + }else{ + obj = new JSONObject(); + toolAndImplantAmountMap.put(tdId, obj); + } + Integer count = rs.getInt(4); + String type = rs.getString(5); + if("材料".equals(type)){ + String isImplant = null; + String miIsImplant = rs.getString(2); + if (StringUtils.isNotBlank(miIsImplant)) { + isImplant = miIsImplant; + } else{ + String mdisImplant = rs.getString(3); + if (StringUtils.isNotBlank(mdisImplant)) { + isImplant = mdisImplant; + } else { + isImplant = Constants.STR_NO; + } + } + if("是".equals(isImplant)){ + obj.put("implantAmount", MathTools.add(count, obj.optInt("implantAmount")).intValue()); + }else{ + obj.put("toolAmount", MathTools.add(count, obj.optInt("toolAmount")).intValue()); + } + }else{ + obj.put("toolAmount", MathTools.add(count, obj.optInt("toolAmount")).intValue()); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + return toolAndImplantAmountMap; + } + @Override public List> searchTousseByKeywordAndTousseTypeArr( String keyword, String[] tousseTypeArr, boolean showDisableGoods, boolean sortBySpelling, boolean useAssetsBelong, String isTraceable, boolean onlySearchCssdHandleTousses) { Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r36710 -r36777 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 36710) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 36777) @@ -267,8 +267,13 @@ * @return 返回格式:[{name:带规格的名字,tousseType:器械,isDiposable:否,count:数量,totalPrice:某种材料的总价,amount:数量:price:单价,leaf:true},{},...] */ public JSONArray getMaterialsOfDisinfectionGoods(TousseDefinition td); - /** + * 批量获取"消毒物品"的材料信息 + * @param tdIds + * @return + */ + public Map getMaterialsOfDisinfectionGoods(Set tdIds); + /** * 获取某个器械包的所有材料(器械材料和一次性物品材料). * @param td * @return @@ -277,12 +282,17 @@ TousseDefinition td); /** - * 获取外来器械包的工具和植入物的数量. + * 获取外来器械包的工具和植入物的数量.(不推荐使用 查询了太多不需要的东西) * @param td * @return */ public JSONObject getToolAndImplantAmount(TousseDefinition td); - + /** + * 获取外来器械包的工具和植入物的数量. + * @param tdIds 外来器械包或外来器械拆分小包定义id + * @return + */ + public Map getToolAndImplantAmount(Set tdIds); public List getTousseDefinitionByFatherTousseId(Long id); /** * 根据器械包名称和器械包类型获取器械包定义.