Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r20058 -r20095 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 20058) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 20095) @@ -1525,18 +1525,7 @@ } } - // 锁定器械包,目前直接锁定所有的扫描项,因为所有要处理的器械包实例一定要包含在扫描项里面,所以不必对每个申请单做判断处理 - private void lockTousseInstances(Map barcodeTousseInstanceMap,Set barcodesScanned){ - String barcodes = SqlUtils.joinToWhereInConditionForStringProperties(barcodesScanned); - String tousseInstancesIdsSql = String.format(" where po.barcode in (%s)", barcodes); - List tousseInstanceList = tousseInstanceManager.getBySql_ForUpdate(tousseInstancesIdsSql); - // 获取所有相关的器械包 - if(tousseInstanceList != null ){ - for (TousseInstance tousseInstance : tousseInstanceList) { - barcodeTousseInstanceMap.put(tousseInstance.getBarcode(), tousseInstance); - } - } - } + /** * 优化速度改为批量获取器械包实例以及对应的包定义 * @param submitInvoiceContext @@ -1617,35 +1606,7 @@ scannedBarcodes.add(barcode); } } - // 锁定并获取一次性物品 - private void lockDiposableGoods(Map barcodeDiposableGoodsMap,Map barcodeDiposableGoodBatchStockMap, - Set barcodesScanned) { - // 根据条码查找批次id,然后查找到对应的一次性物品ID TODO - String barcodes = SqlUtils.joinToWhereInConditionForStringProperties(barcodesScanned); -// String batchStockIdsSql = String.format("select bd.id from %s bd where bd.type='%s' and bd.barcode in (%s)", BarcodeDevice.class.getSimpleName(),BarcodeDevice.BARCODE_TYPE_DIPOSABLEGOODS,barcodes); -// String diposableGoodsIdsSql = String.format("select b.diposableGoods.id from %s b where b.id in (%s) ", DiposableGoodBatchStock.class.getSimpleName(),batchStockIdsSql); - String batchStockIdsSql = String.format(" select DISTINCT bd.diposableGoods.id from %s bd where bd.barcode in (%s)", DisposableGoodsBatchStock.class.getSimpleName(),barcodes); - String diposableGoodsIdsSql = String.format(" where po.id in (%s) ", batchStockIdsSql); - List diposableGoodsList = diposableGoodsManager.getDiposableGoodsBySql_ForUpdate(diposableGoodsIdsSql); -// if(diposableGoodsList != null ){ -// for (DiposableGoods diposableGoods : diposableGoodsList) { -// //barcodeTousseInstanceMap.put(tousseInstance.getBarcode(), diposableGoods); -// } -// } - // 获取所有的批次对象 - String diposableGoodBatchStockListSql = String.format(" where po.barcode in (%s)", barcodes); - List disposableGoodsBatchStockList = diposableGoodBatchStockManager.getDisposableGoodsBatchStockBySql(diposableGoodBatchStockListSql); - if(disposableGoodsBatchStockList != null){ - for (DisposableGoodsBatchStock disposableGoodsBatchStock : disposableGoodsBatchStockList) { - String barcode = disposableGoodsBatchStock.getBarcode(); - DisposableGoodsStock diposableGoods = disposableGoodsBatchStock.getDiposableGoods(); -// if(diposableGoodsList.contains(diposableGoods)){ - barcodeDiposableGoodBatchStockMap.put(barcode, disposableGoodsBatchStock); - barcodeDiposableGoodsMap.put(barcode, diposableGoods); -// } - } - } - } + /** * 获取发货的目标仓库 * @param submitInvoiceContext @@ -1944,15 +1905,8 @@ } return true; } - // 根据实际扫描的物品增加过滤申请单的sql - private String getFilterInvoicePlanSqlByScannedItems(){ - StringBuilder sb = new StringBuilder(); - // 代理灭菌单处理 - sb.append(String.format(" and ( (po.id in(select ti.proxyDisinfection_id from %s where ti.barcode in (%s)))", TousseInstance.class.getSimpleName())); - // 外部代理灭菌单处理 - return sb.toString(); - } + private Set parseInvoicePlanIDs(JSONObject params) { Set invoicePlanIDs = new HashSet(); if (params.containsKey("invoicePlanIDs")) { @@ -3242,28 +3196,6 @@ return totalPrice; } - private void updateGoodsStock(Map> updateStockInfo) { - updateTousseStock(updateStockInfo);// 更新每个器械包总库存 - // 按申请单类型过滤 - Map> filteredUpdateStockInfo = new HashMap>(); - for (Map.Entry> entry : updateStockInfo.entrySet()) { - Invoice invoice = entry.getKey(); - String type = invoice - .getInvoicePlanType(); - if (InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM.equals(type) - || InvoicePlan.TYPE_TOUSSE_EXPANSION_FORM.equals(type) - || InvoicePlan.TYPE_BORROWINGSINGLE.equals(type) - || InvoicePlan.TYPE_PROXYDISINFECTION.equals(type) - || InvoicePlan.TYPE_COMBO_FORM.equals(type)) { - filteredUpdateStockInfo.put(entry.getKey(), entry.getValue()); - } - } - Map tdMap = getTousseDefinitionMap(filteredUpdateStockInfo); - // 更新一级供应室库存 - updateFirstSupplyRoomTousseStock(filteredUpdateStockInfo,tdMap); - // 更新各科室库存 - updateDepartmentStock(filteredUpdateStockInfo,tdMap); - } private void updateTousseInstanceStockInwareHouse(Map> updateStockInfo,SubmitInvoiceContext submitInvoiceContext){ if(updateStockInfo != null){ WareHouse wareHouse = submitInvoiceContext.getSourceWarehouse(); @@ -3343,366 +3275,7 @@ // String updateSql = String.format("update %s set status='%s' where %s", TousseInstance.class.getSimpleName(),TousseInstance.STATUS_SHIPPED,SqlUtils.getNonStringFieldInCollectionsPredicate("id", comboTousseInstanceIdSet)); // objectDao.excuteSQL(updateSql); } - // 更新每个器械包总库存 - private void updateTousseStock(Map> updateStockInfo){ - Set tousseInstancesToUpdate = new HashSet(); - for (Collection tousseInstances : updateStockInfo.values()) { - tousseInstancesToUpdate.addAll(tousseInstances); - } - Map tousseMap = new HashMap(); - for (TousseInstance tousseInstance : tousseInstancesToUpdate) { - //外部代理灭菌物品、不追溯的物品不修改库存(修复库存为负数问题) - if (tousseInstance.getForeignProxyItem_id() != null - || TousseDefinition.STR_NO.equals(tousseInstance - .getTousseDefinition().getIsPacking())) { - continue; - } - String tousseName = tousseInstance.getTousseName(); - Integer amount = tousseMap.get(tousseName); - tousseMap.put(tousseName, (amount == null ? 0 : amount) + 1); - } - Set tousseNameSet = tousseMap.keySet(); - if(tousseNameSet == null || tousseNameSet.size() == 0){ - return; - } - String sql = String.format(" where po.tousseName in(%s)", SqlUtils.joinToWhereInConditionForStringProperties(tousseNameSet)); - List stocklist = objectDao.findBySql(TousseStock.class.getSimpleName(), sql); - if(stocklist != null){ - for (TousseStock tousseStock : stocklist) { - Integer changedAmount = tousseMap.get(tousseStock.getTousseName()); - int amount = 0; - Integer currentAmount = tousseStock.getTousseAmount(); - if(changedAmount < currentAmount){ - amount = currentAmount - changedAmount; - } - String updateSql = String.format("update %s set tousseAmount =%s where id = %s", TousseStock.class.getSimpleName(),amount,tousseStock.getId()); - objectDao.excuteSQL(updateSql); - } - } - } - // 更新一级供应室器械包库存 - private void updateFirstSupplyRoomTousseStock(Map> updateStockInfo,Map tdMap){ - SupplyRoomConfig firstSupplyRoom = supplyRoomConfigManager - .getFirstSupplyRoomConfig(); - if(firstSupplyRoom == null){ - return; - } - String orgUnitCoding = firstSupplyRoom.getOrgUnitCoding(); - if(StringUtils.isBlank(orgUnitCoding)){ - return; - } - Map tousseChangedAmountMap = new HashMap(); - for (Map.Entry> entry : updateStockInfo.entrySet()) { - Invoice invoice = entry.getKey(); - for (InvoiceItem invoiceItem : invoice.getInvoiceItem()) { - String tousseName = invoiceItem.getTousseName(); - // 敷料包不做处理 - TousseDefinition td = tdMap.get(tousseName); - if (td != null && td.isDressing()) { - continue; - } - Integer amount = tousseChangedAmountMap.get(tousseName); - Integer changedAmount = invoiceItem.getAmount(); - if(amount == null){ - amount = 0; - } - tousseChangedAmountMap.put(tousseName, amount + changedAmount); - } - } - - Set tousseNameSet = tousseChangedAmountMap.keySet(); - if(tousseNameSet == null || tousseNameSet.size() == 0){ - return; - } - String sql = String.format(" where po.departCoding='%s' and po.tousseName in(%s)", orgUnitCoding,SqlUtils.joinToWhereInConditionForStringProperties(tousseNameSet)); - List stocklist = objectDao.findBySql(DepartmentStock.class.getSimpleName(), sql); - if(stocklist != null){ - for (DepartmentStock tousseStock : stocklist) { - Integer changedAmount = tousseChangedAmountMap.get(tousseStock.getTousseName()); - int amount = 0; - Integer currentAmount = tousseStock.getAmount(); - if(changedAmount < currentAmount){ - amount = currentAmount - changedAmount; - } - String updateSql = String.format("update %s set amount =%s where id = %s", DepartmentStock.class.getSimpleName(),amount,tousseStock.getId()); - objectDao.excuteSQL(updateSql); - } - } - } - private DepartmentStock getDepartmentStock(Map> departmentCodeAndTousseNameToDepartmentStockMap,String departmentCoding,String tousseName){ - Map tousseNameToDepartmentStockMap = departmentCodeAndTousseNameToDepartmentStockMap.get(departmentCoding); - if(tousseNameToDepartmentStockMap != null){ - return tousseNameToDepartmentStockMap.get(tousseName); - } - return null; - } - private void putDepartmentStock(Map> departmentCodeAndTousseNameToDepartmentStockMap,String departmentCoding,String tousseName,DepartmentStock departmentStock){ - Map tousseNameToDepartmentStockMap = departmentCodeAndTousseNameToDepartmentStockMap.get(departmentCoding); - if(tousseNameToDepartmentStockMap == null){ - tousseNameToDepartmentStockMap = new HashMap(); - departmentCodeAndTousseNameToDepartmentStockMap.put(departmentCoding, tousseNameToDepartmentStockMap); - } - tousseNameToDepartmentStockMap.put(tousseName, departmentStock); - } - // 更新各科室库存 - private void updateDepartmentStock(Map> updateStockInfo,Map tdMap){ - Map> departmentCodeToTousseNamesMap = new HashMap>(); - for (Map.Entry> entry : updateStockInfo.entrySet()) { - Invoice invoice = entry.getKey(); - String departmentCoding = invoice.getDepartCoding(); - String departmentName = invoice.getDepart(); - for (InvoiceItem invoiceItem : invoice.getInvoiceItem()) { - String tousseName = invoiceItem.getTousseName(); - // 敷料包不做处理 - TousseDefinition td = tdMap.get(tousseName); - if (td != null && td.isDressing()) { - continue; - } - Set tousseNamesSet = departmentCodeToTousseNamesMap.get(departmentCoding); - if(tousseNamesSet == null){ - tousseNamesSet = new HashSet(); - departmentCodeToTousseNamesMap.put(departmentCoding, tousseNamesSet); - } - tousseNamesSet.add(tousseName); - } - } - // 科室名称->器械包名称->库存对象 - // 获取科室库存对象 - Map> departmentCodeAndTousseNameToDepartmentStockMap = new HashMap>(); - for (Map.Entry> entry : departmentCodeToTousseNamesMap.entrySet()) { - String departmentCoding = entry.getKey(); - Set tousseNamesSet = entry.getValue(); - if(tousseNamesSet == null || tousseNamesSet.size() == 0){ - continue; - } - String sql = String.format(" where po.departCoding='%s' and po.tousseName in(%s)", departmentCoding,SqlUtils.joinToWhereInConditionForStringProperties(tousseNamesSet)); - List stocklist = objectDao.findBySql(DepartmentStock.class.getSimpleName(), sql); - if(stocklist != null && stocklist.size() > 0){ - Map tousseNameToDepartmentStockMap = departmentCodeAndTousseNameToDepartmentStockMap.get(departmentCoding); - if(tousseNameToDepartmentStockMap == null){ - tousseNameToDepartmentStockMap = new HashMap(); - departmentCodeAndTousseNameToDepartmentStockMap.put(departmentCoding, tousseNameToDepartmentStockMap); - } - for (DepartmentStock departmentStock : stocklist) { - tousseNameToDepartmentStockMap.put(departmentStock.getTousseName(), departmentStock); - } - } - } - // 开始更新库存 - for (Map.Entry> entry : updateStockInfo.entrySet()) { - Invoice invoice = entry.getKey(); - String departmentCoding = invoice.getDepartCoding(); - String departmentName = invoice.getDepart(); - for (InvoiceItem invoiceItem : invoice.getInvoiceItem()) { - String tousseName = invoiceItem.getTousseName(); - // 敷料包不做处理 - TousseDefinition td = tdMap.get(tousseName); - if (td != null && td.isDressing()) { - continue; - } - DepartmentStock departmentStock = getDepartmentStock(departmentCodeAndTousseNameToDepartmentStockMap,departmentCoding,tousseName); - if(departmentStock == null){ - departmentStock = new DepartmentStock(); - departmentStock.setAmount(invoiceItem.getAmount()); - departmentStock.setDepartCoding(departmentCoding); - departmentStock.setDepartName(departmentName); - departmentStock.setCardinalNum(0); - departmentStock.setUsedAmount(0); - departmentStock.setTousseName(tousseName); - objectDao.saveOrUpdate(departmentStock); - putDepartmentStock(departmentCodeAndTousseNameToDepartmentStockMap, departmentCoding, tousseName, departmentStock); - }else{ - departmentStock.setAmount(departmentStock.getAmount() + invoiceItem.getAmount()); - objectDao.saveOrUpdate(departmentStock); - } - } - } - // 设置器械包和库存对象的关联 - for (Map.Entry> entry : updateStockInfo.entrySet()) { - Invoice invoice = entry.getKey(); - String departmentCoding = invoice.getDepartCoding(); - Map tousseNameToDepartmentStockMap = departmentCodeAndTousseNameToDepartmentStockMap.get(departmentCoding); - if(tousseNameToDepartmentStockMap == null){ - continue; - } - for (TousseInstance tousseInstance : updateStockInfo.get(invoice)) { - String tousseName = tousseInstance.getTousseName(); - // 敷料包不做处理 - TousseDefinition td = tdMap.get(tousseName); - if (td != null && td.isDressing()) { - continue; - } - DepartmentStock departmentStock = tousseNameToDepartmentStockMap.get(tousseName); - if(departmentStock == null){ - continue; - } - tousseInstance.setDepartmentStock_id(departmentStock.getId()); - } - } - } - - private Map getTousseDefinitionMap(Map> updateStockInfo){ - Map map = new HashMap(); - - Set tousseNameSet = new HashSet(); - for (Invoice invoice : updateStockInfo.keySet()) { - for (InvoiceItem invoiceItem : invoice.getInvoiceItem()) { - String tousseName = invoiceItem.getTousseName(); - tousseNameSet.add(tousseName); - } - } - if(tousseNameSet.size() > 0){ - String sql = String.format(" where po.name in(%s)",SqlUtils.joinToWhereInConditionForStringProperties(tousseNameSet)); - List tousseDefinitions = objectDao.findBySql(TousseDefinition.class.getSimpleName(), sql); - if(tousseDefinitions != null){ - for (TousseDefinition tousseDefinition : tousseDefinitions) { - map.put(tousseDefinition.getName(), tousseDefinition); - } - } - } - return map; - } - /** - * 修改库存数量 - * - * @param invoice - */ - private void updateGoodsStock(Invoice invoice,Collection tousseInstances) { - - if (tousseInstances != null) { - Map tousseMap = new HashMap(); - for (TousseInstance ti : tousseInstances) { - //外部代理灭菌物品、不追溯的物品不修改库存(修复库存为负数问题) - if (ti.getForeignProxyItem_id() != null - || TousseDefinition.STR_NO.equals(ti - .getTousseDefinition().getIsPacking())) { - continue; - } - String tousseName = ti.getTousseName(); - Integer amount = tousseMap.get(tousseName); - tousseMap.put(tousseName, (amount == null ? 0 : amount) + 1); - } - Iterator itr = tousseMap.keySet().iterator(); - while (itr.hasNext()) { - String tousseName = itr.next(); - TousseStock tousseStock = tousseStockManager - .getTousseStockByTousseName(tousseName); - if (tousseStock != null) { - tousseStock.setTousseAmount(tousseStock.getTousseAmount() - - tousseMap.get(tousseName)); - tousseStockManager.saveOrUpdateTousseStock(tousseStock); - } - } - // 更新科室库存 - updateDepartmentStock(invoice,tousseInstances); - } - } - - @Deprecated // 未做速度优化 - private void updateDepartmentStock(Invoice invoice,Collection tousseInstances) { - // 普通器械包 - String type = invoice - .getInvoicePlanType(); - if (InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM.equals(type) - || InvoicePlan.TYPE_TOUSSE_EXPANSION_FORM.equals(type) - || InvoicePlan.TYPE_BORROWINGSINGLE.equals(type) - || InvoicePlan.TYPE_PROXYDISINFECTION.equals(type) - || InvoicePlan.TYPE_COMBO_FORM.equals(type)) { - String departmentCoding = invoice.getDepartCoding(); - String departmentName = invoice.getDepart(); - SupplyRoomConfig firstSupplyRoom = supplyRoomConfigManager - .getFirstSupplyRoomConfig(); - for (InvoiceItem invoiceItem : invoice.getInvoiceItem()) { - String tousseName = invoiceItem.getTousseName(); - DepartmentStock departmentStock = departmentStockManager - .getByDepartCodingAndTousseName(departmentCoding, - tousseName); - // 敷料包不做处理 - TousseDefinition td = tousseDefinitionManager - .getTousseDefinitionByName(tousseName); - if (td != null - && TousseDefinition.PACKAGE_TYPE_DRESSING.equals(td - .getTousseType())) { - continue; - } - DepartmentStock supplyRoomStock = null; - if (firstSupplyRoom != null) { - supplyRoomStock = departmentStockManager - .getByDepartCodingAndTousseName( - firstSupplyRoom.getOrgUnitCoding(), - tousseName); - } - if (departmentStock != null - && (departmentStock.getAmount() != null || departmentStock - .getAmount() >= 0)) { - departmentStock.setAmount(departmentStock.getAmount() - + invoiceItem.getAmount()); - } else { - departmentStock = new DepartmentStock(); - departmentStock.setAmount(invoiceItem.getAmount()); - departmentStock.setDepartCoding(departmentCoding); - departmentStock.setDepartName(departmentName); - departmentStock.setCardinalNum(0); - departmentStock.setUsedAmount(0); - departmentStock.setTousseName(tousseName); - } - - for (TousseInstance tousseInstance : tousseInstances) { - if (tousseInstance.getTousseName().equals(tousseName)) { - tousseInstance.setDepartmentStock_id(departmentStock.getId()); - } - } - - // 加入供应室的库存管理 - if (supplyRoomStock != null) { - supplyRoomStock.setAmount(supplyRoomStock.getAmount() - - invoiceItem.getAmount()); - if (supplyRoomStock.getAmount() < 0) { - supplyRoomStock.setAmount(0); - } else { - /* - * List tousseList = - * invoice.getTousseInstances(); if(tousseList != null){ - * for (TousseInstance tousseInstance : tousseList) { - * tousseInstance.setDepartmentStock(null); - * tousseInstanceManager.saveOrUpdate(tousseInstance); } - * } - */ - - - } - } else { - supplyRoomStock = new DepartmentStock(); - supplyRoomStock.setAmount(0); - supplyRoomStock.setCardinalNum(0); - supplyRoomStock.setDepartCoding(firstSupplyRoom - .getOrgUnitCoding()); - supplyRoomStock.setDepartName(firstSupplyRoom - .getOrgUnitName()); - supplyRoomStock.setTousseName(tousseName); - supplyRoomStock.setUsedAmount(0); - } - departmentStockManager.saveOrUpdata(departmentStock); - departmentStockManager.saveOrUpdata(supplyRoomStock); - } - } - } - - private String getInvoiceDepartCoding(InvoicePlan invoicePlan,SubmitInvoiceContext submitInvoiceContext){ - String departCoding = submitInvoiceContext.getDepartCode(); - if (invoicePlan != null) { - departCoding = invoicePlan.getDepartCoding(); - } - return departCoding; - } - private String getInvoiceDepart(InvoicePlan invoicePlan,SubmitInvoiceContext submitInvoiceContext){ - String depart = submitInvoiceContext.getDepart(); - if (invoicePlan != null) { - depart = invoicePlan.getDepart(); - } - return depart; - } private String getInvoiceSettleAccountsDepartCoding(InvoicePlan invoicePlan,SubmitInvoiceContext submitInvoiceContext){ String settleAccountsDepartCoding = submitInvoiceContext.getDepartCode(); if (invoicePlan != null) { @@ -3898,51 +3471,7 @@ return result; } - /** - * 根据首尾器械包实例查询 - * @param tousseInstance - * @param tousseInstanceEnd - * @return - */ - private JsonObject buildJSONObjectForTousseInstanceByRange( - TousseInstance tousseInstance,TousseInstance tousseInstanceEnd) { - JsonObject result = new JsonObject(); - String goodsName = tousseInstance.getTousseDefinition() - .getName(); - result.addProperty("tousseName", goodsName); - result.addProperty("showTousseName", goodsName); - result.addProperty("barcode", tousseInstance.getBarcode()); - Double price = tousseInstance.getPrice(); - if(price == null){ - price = 0.0d; - } - result.addProperty("price", price); - Double fluctuationPrice = tousseInstance.getFluctuationPrice(); - if(fluctuationPrice == null){ - fluctuationPrice = 0.0d; - } - result.addProperty("fluctuationPrice",fluctuationPrice); - - String sterileEndTime = tousseInstance.getSterileEndTime(); - result.addProperty("sterileEndTime", sterileEndTime); - - // 构造批次/灭菌日期属性,便于在某些地方显示 - String batchNumber = ""; - if (StringUtils.isNotBlank(sterileEndTime) && sterileEndTime.length() >= 10){ - batchNumber = sterileEndTime.substring(0, 10); - } - result.addProperty("batchNumber", batchNumber); - - - TousseDefinition td = tousseInstance.getTousseDefinition(); - if(TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td.getTousseType()) - && !td.applyEntireTousse()){ - // 非整包申请的消毒物品,显示材料数量 - result.addProperty("materialAmount", CssdUtils.getMaterialTotalAmount(td,false)); - } - return result; - } - + private JsonArray buildJSONArrayForTousseInstances( Collection tousseInstances,String departCodeOfInvoicePlan) { JsonArray datasJSONArray = new JsonArray(); @@ -4001,39 +3530,12 @@ return false; } - // 根据固定条码的消毒物品包实例获取能发货的包实例 - private Collection getCanInvoiceTousseInstancesByFixedDisinfectionTousseInstance(InvoicePlan invoicePlan, TousseInstance fixedBarcodeTousseInstance,int amount){ - List list = new ArrayList<>(1); - list.add(invoicePlan); - Collection resultTousseInstanceList = getDisinfectionTousseInstance( - list, fixedBarcodeTousseInstance.getTousseDefinition(),amount); - - return resultTousseInstanceList; - } - private void logScannedTousse(JsonObject dataJSONObject){ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVOICE, "发货扫描数据", dataJSONObject.toString()); } private void logScannedTousses(JsonArray datasJSONArray){ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVOICE, "发货扫描数据", datasJSONArray.toString()); } - /** - * 根据固定条码的包实例获取能发货的包实例 - * @param fixedBarcodeTousseInstance - * @return - */ - private Collection getCanInvoiceTousseInstancesByFixedTousseInstance(TousseInstance fixedBarcodeTousseInstance){ - Collection sqlWheres = buildCanInvoiceTousseInstanceSqlWhere(); - sqlWheres.add(String.format(" %s ",getValidUntilPredicate(dateQueryAdapter, "po.validUntil"))); - sqlWheres.add(String.format(" %s ",getWorningPredicate(dateQueryAdapter, "po.warningUntil"))); - // 非可追溯器械包,返回多个器械包实例 - Collection tousseInstanceList = tousseInstanceManager - .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( - fixedBarcodeTousseInstance.getTousseDefinition(), - sqlWheres - ); - return tousseInstanceList; - } private int getCanInvoiceTousseInstancesAmountByFixedTousseInstance(TousseInstance fixedBarcodeTousseInstance){ Collection sqlWheres = buildCanInvoiceTousseInstanceSqlWhere(); @@ -4140,21 +3642,8 @@ needAmount); return tousseInstanceList; } - private JsonObject getFixedBarcodeInfo( - TousseInstance fixedBarcodeTousseInstance, - Collection tousseInstanceList) { - JsonObject obj = new JsonObject(); - int stock = 0; - if (tousseInstanceList != null) { - stock = tousseInstanceList.size(); - } - obj.addProperty("barcode", fixedBarcodeTousseInstance.getBarcode()); - obj.addProperty("stock", stock); - obj.addProperty("tousseName", - fixedBarcodeTousseInstance.getTousseName()); - return obj; - } + // 过滤器械包 private void filterTousseInstanceByInvoiceType(String invoiceType, Collection tousseInstanceList) { @@ -4712,15 +4201,7 @@ return result; } - // 限定包实例的状态为已消毒,否则会找出来很多,导致查询非常慢 - private List getDisinfectionTousseInstance( - List invoicePlans, TousseDefinition tousseDefinition) { - String sql = getDisinfectionTousseInstanceSql(invoicePlans, tousseDefinition); - sql += " order by po.validUntil asc "; - List result = tousseInstanceManager - .getTousseInstanceBySql(sql); - return result; - } + private List getDisinfectionTousseInstanceAndTousseDefinition( List invoicePlans,Set scannedTousseInstances, TousseDefinition tousseDefinition) { String whereSql = getDisinfectionTousseInstanceSql(invoicePlans, tousseDefinition); @@ -4730,14 +4211,6 @@ List result = objectDao.findByHql(hql); 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) { @@ -5815,15 +5288,6 @@ } } - // 获取固定条码的消毒物品能发货的数量 - // 判断是否是固定条码 - private boolean isFixedDisinfection(String tousseName,Map barcodeObjMap){ - TousseInstance tousseInstance = getFixedDisinfectionTousseInstance(tousseName, barcodeObjMap); - if(tousseInstance != null){ - return true; - } - return false; - } private TousseInstance getFixedDisinfectionTousseInstance(String tousseName,Map barcodeObjMap){ for (BarcodeDevice barcodeDevice : barcodeObjMap.values()) { if (!(barcodeDevice instanceof TousseInstance)) { @@ -5840,54 +5304,7 @@ } return null; } - private List getFixedDisinfectionTousseInstances(InvoicePlan invoicePlan,TousseItem applicationItem,SubmitInvoiceContext submitInvoiceContext,int amount){ - String tousseName = applicationItem.getTousseName(); - List tousseInstances = new LinkedList(); - TousseInstance fixedDisinfectionTousseInstance = getFixedDisinfectionTousseInstance(tousseName, submitInvoiceContext.getBarcodeToBarcodeDeviceMap()); - List disinfectionTousseInstances = submitInvoiceContext.getFixedBarcodeTousseIdToAffiliatedTousseInstanceMap().get(fixedDisinfectionTousseInstance.getId()); - int addedAmount = 0; - Map tousseDefinitionIdToTousseDefinitionMap = submitInvoiceContext.getTousseDefinitionIdToTousseDefinitionMap(); - Long tousseDefinitionId = applicationItem.getTousseDefinitionId(); - if(!DatabaseUtil.isPoIdValid(tousseDefinitionId)){ - throw new RuntimeException(String.format("申请单[%s]%s的包定义id为空", invoicePlan.getSerialNumber(),tousseName)); - } - TousseDefinition appTD = tousseDefinitionIdToTousseDefinitionMap.get(tousseDefinitionId); - if(appTD == null){ - throw new RuntimeException(String.format("%s的包定义已不存在!", tousseName)); - } - for (TousseInstance tousseInstance : disinfectionTousseInstances) { - if(addedAmount >= amount){ - break; - } - if(tousseInstance.getTousseFixedBarcode()){ - continue;// 跳过固定条码 - } - if(!tousseInstance.canInvoice()){ - continue; - } - String tousseInstanceName = tousseInstance.getTousseName(); -// if(StringUtils.equals(tousseName, tousseInstanceName)){ -// ++addedAmount; -// tousseInstances.add(tousseInstance); -// continue; -// } -// String rawTousseInstanceName = TousseDefinitionUtils.getTousseRawName(tousseInstanceName); - TousseDefinition td2 = tousseInstance.getTousseDefinition(); - if(td2 == null){ - continue; - } - String materialsMD5 = appTD.getMaterialsMD5(); - if(StringUtils.isBlank(materialsMD5)){ - continue; - } - if(StringUtils.equals(tousseInstanceName, tousseName) && StringUtils.equals(materialsMD5, td2.getMaterialsMD5())){ - tousseInstances.add(tousseInstance); - ++addedAmount; - } - } - disinfectionTousseInstances.removeAll(tousseInstances); - return tousseInstances; - } + private List getFixedDisinfectionTousseInstances2(InvoicePlan invoicePlan,TousseItem applicationItem,SubmitInvoiceContext submitInvoiceContext,int amount){ String tousseName = applicationItem.getTousseName(); List tousseInstances = new LinkedList(); @@ -6602,21 +6019,6 @@ saveInvoice(invoice); }*/ } - private SterilizationRecord loadTousseSterilizationRecord(TousseInstance tousseInstance){ - // 获取灭菌成功的灭菌记录 - - if(tousseInstance == null){ - return null; - } - SterilizationRecord record = tousseInstance.getSterilizationRecord(objectDao); - if(record != null){ - if(!SterilizationRecord.STERILIZATION_STATUS_END - .equals(record.getStatus())){ - return null; - } - } - return record; - } private InvoicePrintVo findInvoicePrintVoForTousseMerge( List list, TousseInstance tousseInstance, @@ -7119,87 +6521,7 @@ return voList; } - /** - * 获取发货单器械包打印数据 - */ - @Deprecated - private Collection loadToussePrintData_old(Collection invoices){ - if(CollectionUtils.isEmpty(invoices)) - return CollectionUtils.emptyCollection(); - SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager - .getSystemParamsObj(); - int mergeTousseRuleForInvoiceBatchPrint = SupplyRoomConfig.MERGETOUSSERULE_FOR_INVOICEBATCHPRINT_0; - if(supplyRoomConfig != null){ - mergeTousseRuleForInvoiceBatchPrint = supplyRoomConfig.getMergeTousseRuleForInvoiceBatchPrint(); - } - - Map> map = new HashMap>(); - for (Invoice invoice : invoices) { - List tousseList = invoice.getTousseInstances(objectDao); - for (TousseInstance tousseInstance : tousseList) { - TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); - if(tousseDefinition.isDisinfection()){ - continue; - } - String sterilizationdate = "";// 灭菌日期 - String sterilizerName = tousseInstance.getSterilizerName();// 灭菌炉 - String frequency = tousseInstance.getSterileFrequency();// 炉次 - String tousseName = tousseInstance.getTousseName(); - List voList = map.get(tousseName); - if(voList == null){ - voList = new ArrayList(); - map.put(tousseName, voList); - } - InvoicePrintVo tempVo = null; - for (InvoicePrintVo vo : voList) { - if (StringUtils.equals(vo.getFrequency(),frequency) - && StringUtils.equals(vo.getSterilizationdate(),sterilizationdate) - && StringUtils.equals(vo.getSterilizerName(),sterilizerName)) { - tempVo = vo; - break; - } - } - if (tempVo != null) { - tempVo.setAmount(tempVo.getAmount() + 1); - tempVo.setTotalPrice(tempVo.getTotalPrice() - + tousseInstance.getPrice()); - } else { - String endDate = tousseInstance.getSterileEndTime(); - if(StringUtils.isBlank(endDate)){ - endDate = ""; - } - if (endDate.length() > 10){ - endDate = endDate.substring(0, 10); - } - String expireDateStr = tousseInstance.getValidUntilStr(Constants.SIMPLEDATEFORMAT_YYYYMMDD);; - - tempVo = new InvoicePrintVo(); - tempVo.setAmount(1); - tempVo.setFrequency(frequency); - tempVo.setName(tousseInstance.getTousseName()); - tempVo.setUnit(tousseDefinition.getUnit()); - tempVo.setPrice(tousseInstance.getFluctuationPrice()); - tempVo.setSterilizationdate(endDate); - tempVo.setBatchNumber(endDate); - tempVo.setExpireDate(expireDateStr); - tempVo.setSterilizerName(sterilizerName); - tempVo.setTotalPrice(tousseInstance.getPrice()); - voList.add(tempVo); - } - } - } - - Iterator iterator = map.keySet().iterator(); - List returnList = new ArrayList(); - while (iterator.hasNext()) { - String tousseName = iterator.next(); - List voList = map.get(tousseName); - for (InvoicePrintVo invoicePrintVo : voList) { - returnList.add(invoicePrintVo); - } - } - return returnList; - } + @Override public Collection loadToussePrintData( String[] invoiceIds) { @@ -7217,19 +6539,7 @@ return loadToussePrintData(list); } - private TousseActualRecyclingAmount find(List recycleAmountInfo, - Long ancestorID){ - if(CollectionUtils.isNotEmpty(recycleAmountInfo) && ancestorID != null){ - for(TousseActualRecyclingAmount tara : recycleAmountInfo){ - if(tara != null){ - if(tara.getAncestorID().longValue() == ancestorID.longValue()){ - return tara; - } - } - } - } - return null; - } + private Integer getTousseActualRecycleAmount(Map recycleAmountInfo, TousseDefinition td){ if(td != null && DatabaseUtil.isPoIdValid(td.getAncestorID())){