Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r12938 -r12976 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12938) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12976) @@ -1819,7 +1819,7 @@ Collection tousseInstanceList; if(tousseInstance.getTousseDefinition().isDisinfection()){ // 消毒物品,要获取本发货计划的包实例 - tousseInstanceList = getCanInvoiceTousseInstancesByFixedDisinfectionTousseInstance(invoicePlan,tousseInstance); + tousseInstanceList = getCanInvoiceTousseInstancesByFixedDisinfectionTousseInstance(invoicePlan,tousseInstance,invoiceItem.getAmount()); }else{ // 普通的器械包 tousseInstanceList = getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance); @@ -2561,21 +2561,11 @@ } // 根据固定条码的消毒物品包实例获取能发货的包实例 - private Collection getCanInvoiceTousseInstancesByFixedDisinfectionTousseInstance(InvoicePlan invoicePlan, TousseInstance fixedBarcodeTousseInstance){ + private Collection getCanInvoiceTousseInstancesByFixedDisinfectionTousseInstance(InvoicePlan invoicePlan, TousseInstance fixedBarcodeTousseInstance,int amount){ List list = new ArrayList<>(1); list.add(invoicePlan); Collection resultTousseInstanceList = getDisinfectionTousseInstance( - list, fixedBarcodeTousseInstance.getTousseDefinition()); - // 过滤(扫固定条码的器械包无失效期) - resultTousseInstanceList = CollectionUtils.select( - resultTousseInstanceList, AllPredicate.allPredicate( - checkStatusForInvoice, - /* - * TousseInstanceManagerImpl .isNotExpire(new - * Date()), - */ - tousseInstanceManager - .checkTousseInstanceHasNotRecall())); + list, fixedBarcodeTousseInstance.getTousseDefinition(),amount); return resultTousseInstanceList; } @@ -2702,22 +2692,13 @@ if (!inPlan) return buildErrorMsgJsonResult("此物品不在发货计划内"); - Collection resultTousseInstanceList = getDisinfectionTousseInstance( + long tousseInstanceAmount = getDisinfectionTousseInstanceAmount( departCodeOfInvoicePlan, tousseDefinition); - // 过滤(扫固定条码的器械包无失效期) - resultTousseInstanceList = CollectionUtils.select( - resultTousseInstanceList, AllPredicate.allPredicate( - checkStatusForInvoice, - /* - * TousseInstanceManagerImpl .isNotExpire(new - * Date()), - */ - tousseInstanceManager - .checkTousseInstanceHasNotRecall())); - if (CollectionUtils.isEmpty(resultTousseInstanceList)) + + if (tousseInstanceAmount <= 0) return buildErrorMsgJsonResult("该物品库存不足"); - tousseInstance.setStockForFixedBarcode(new Long(resultTousseInstanceList.size())); + tousseInstance.setStockForFixedBarcode(new Long(tousseInstanceAmount)); JsonObject result = new JsonObject(); result.addProperty("success", true); result.addProperty("barcode", barcode); @@ -3058,22 +3039,13 @@ if (tousseInstance.getTousseFixedBarcode() && TousseDefinition.PACKAGE_TYPE_DISINFECTION .equals(tousseDefinition.getTousseType())) { - Collection resultTousseInstanceList = getDisinfectionTousseInstance( + long tousseInstanceAmount = getDisinfectionTousseInstanceAmount( departCodeOfInvoicePlan, tousseDefinition); - // 过滤(扫固定条码的器械包无失效期) - resultTousseInstanceList = CollectionUtils.select( - resultTousseInstanceList, AllPredicate.allPredicate( - checkStatusForInvoice, - /* - * TousseInstanceManagerImpl .isNotExpire(new - * Date()), - */ - tousseInstanceManager - .checkTousseInstanceHasNotRecall())); - if (CollectionUtils.isEmpty(resultTousseInstanceList)) + + if (tousseInstanceAmount <= 0) return buildErrorMsgJsonResult("该物品库存不足"); - tousseInstance.setStockForFixedBarcode(new Long(resultTousseInstanceList.size())); + tousseInstance.setStockForFixedBarcode(new Long(tousseInstanceAmount)); JsonObject result = new JsonObject(); result.addProperty("success", true); result.addProperty("barcode", barcode); @@ -3352,7 +3324,19 @@ Collection result = getDisinfectionTousseInstance(invoicePlans, tousseDefinition); return result; } - + // 获取待发货消毒物品的数量 + public long getDisinfectionTousseInstanceAmount( + String orgUnitCoding, TousseDefinition tousseDefinition) { + if (!TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseDefinition + .getTousseType())) + return 0; + if (!TousseDefinition.STR_NO.equals(tousseDefinition + .getIsTraceable())) + return 0; + List invoicePlans = invoicePlanManager.getInvoicePlanByOrgUnitCoding(orgUnitCoding); + long result = getDisinfectionTousseInstanceAmount(invoicePlans, tousseDefinition); + return result; + } public Collection getDisinfectionTousseInstance( Long invoicePlanID, TousseDefinition tousseDefinition) { if (invoicePlanID == null) { @@ -3370,8 +3354,39 @@ return result; } + // 限定包实例的状态为已消毒,否则会找出来很多,导致查询非常慢 private Collection getDisinfectionTousseInstance( List invoicePlans, TousseDefinition tousseDefinition) { + String sql = getDisinfectionTousseInstanceSql(invoicePlans, tousseDefinition); + + Collection result = tousseInstanceManager + .getTousseInstanceBySql(sql); + return result; + } + // 限定包实例的状态为已消毒,否则会找出来很多,导致查询非常慢 + private Collection getDisinfectionTousseInstance( + List invoicePlans, TousseDefinition tousseDefinition,int amount) { + String sql = getDisinfectionTousseInstanceSql(invoicePlans, tousseDefinition); + Collection result = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql, 0, amount,""); + return result; + } + + + private long getDisinfectionTousseInstanceAmount( + List invoicePlans, TousseDefinition tousseDefinition) { + String sql = getDisinfectionTousseInstanceSql(invoicePlans, + tousseDefinition); + return objectDao.countObjectBySql(TousseInstance.class.getSimpleName(),sql); + } + + /** + * @param invoicePlans + * @param tousseDefinition + * @return + */ + public String getDisinfectionTousseInstanceSql(List invoicePlans, + TousseDefinition tousseDefinition) { + String tousseDefinitionName = tousseDefinition.getName(); Set invoicePlanIDSet = new HashSet(); if (invoicePlans != null) { @@ -3384,17 +3399,15 @@ } String sql = null; sql = String - .format(" where (%s and po.tousseFixedBarcode=false and po.tousseDefinition.materialsMD5 in(select t.materialsMD5 from %s t where %s and %s))", + .format(" where %s and (%s and po.tousseFixedBarcode=false and po.tousseDefinition.materialsMD5 in(select t.materialsMD5 from %s t where t.materialsMD5 is not null and %s and %s))", + SqlUtils.getStringFieldPredicate("po.status", TousseInstance.STATUS_DISINFECTED), SqlUtils.getStringFieldPredicate("po.tousseName", tousseDefinitionName), TousseDefinition.class .getSimpleName(), SqlUtils .getStringFieldPredicate("t.name",tousseDefinitionName), SqlUtils .getNonStringFieldInCollectionsPredicate( "t.invoicePlanID", invoicePlanIDSet)); - - Collection result = tousseInstanceManager - .getTousseInstanceBySql(sql); - return result; + return sql; } // 重新排序待发货物品