Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/instrumentsettype/service/InstrumentSetTypeManagerImpl.java =================================================================== diff -u -r34270 -r34278 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/instrumentsettype/service/InstrumentSetTypeManagerImpl.java (.../InstrumentSetTypeManagerImpl.java) (revision 34270) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/instrumentsettype/service/InstrumentSetTypeManagerImpl.java (.../InstrumentSetTypeManagerImpl.java) (revision 34278) @@ -369,8 +369,7 @@ @Override public List getFirstGradeInstrumentSetTypeList() { - - return null; + return this.getByProperty("parentId", InstrumentSetType.THTreeNodeRootId); } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r34270 -r34278 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 34270) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 34278) @@ -44,9 +44,11 @@ import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.departmentgroup.service.DepartmentGroupManager; import com.forgon.disinfectsystem.basedatamanager.invoice.service.InvoiceUtils; import com.forgon.disinfectsystem.basedatamanager.sterilisation.service.SterilisationManager; @@ -62,13 +64,18 @@ import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; import com.forgon.disinfectsystem.entity.basedatamanager.supplier.ExpensiveGoodsSupplier; import com.forgon.disinfectsystem.entity.basedatamanager.supplier.RegistrationCertification; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType_TD; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.expensivegoodsapplication.ExpensiveGoodsApplication; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; +import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -193,7 +200,13 @@ protected WareHouseManager wareHouseManager; private ProjectManager projectManager; + + private BarcodeManager barcodeManager; + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + public void setProjectManager(ProjectManager projectManager) { this.projectManager = projectManager; } @@ -3143,17 +3156,163 @@ @Override public List getAwaitForRecyclingInvoicePlanList(String orgUnitCodings, String departmentGroupId, String barcode, Long instrumentSetTypeId) { - // TODO Auto-generated method stub - return null; + String sql = "where (po.recyclingStatus = '" + + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + + "' or po.recyclingStatus = '" + + InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE + + "') and po.committedStatus=true"; + + //科室编码查询条件 + if (StringUtils.isNotBlank(orgUnitCodings)) { + // orgUnitCodings字段为字符串,需要加单引号查询 + if (!orgUnitCodings.startsWith("'")){ + orgUnitCodings = "'" + orgUnitCodings + "'"; + } + + sql += " and po.departCoding in (" + orgUnitCodings + ")"; + } + + //回收科室分组DepartmentGroup查询条件 + if(DatabaseUtil.isPoIdValid(departmentGroupId)){ + DepartmentGroup group = departmentGroupManager.get((long)Double.parseDouble(departmentGroupId)); + if(group != null){ + String deptCodes = group.getDepartCodes(); + deptCodes = deptCodes.replaceAll(";", "','"); + sql += " and po.departCoding in ('" + deptCodes + "')"; + } + } + + //barcode条码(支持手术间条码、科室条码、标识牌条码,若为其它类型条码或非法条码直接抛异常) + if(StringUtils.isNotBlank(barcode)){ + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); + + if(barcodeDevice == null){ + throw new SystemException("请扫描手术间条码、科室条码、标识牌条码"); + } + + if(barcodeDevice != null){ + if (StringUtils.equals(barcodeDevice.getType(), BarcodeDevice.BARCODE_TYPE_OPERATIONROOM)){ + //手术间条码 + String hql = "where po.barcodeDevice.barcode = '" + barcode + "'"; + OperationRoom opr = (OperationRoom) objectDao.getBySql(OperationRoom.class.getSimpleName(), hql); + if(opr != null){ + sql += " and po.operationRoom = '" + opr.getOperationRoomName() + "' "; + } + }else if(StringUtils.equals(barcodeDevice.getType(), BarcodeDevice.BARCODE_TYPE_ORGUNIT)){ + //科室条码 + String hql = "where po.barcodeDevice.barcode = '" + barcode + "'"; + OrgUnit orgUnit = (OrgUnit) objectDao.getBySql(OrgUnit.class.getSimpleName(), hql); + if(orgUnit != null){ + sql += " and po.departCoding = '" + orgUnit.getOrgUnitCoding() + "' "; + } + }else if(barcodeDevice instanceof IDCardInstance){ + //标识牌条码 + IDCardInstance IDCardInstance = (IDCardInstance) barcodeDevice; + IDCardDefinition IDCardDefinition = IDCardInstance.getIDCardDefinition(objectDao); + if(IDCardDefinition != null){ + sql += " and po.id in (select invoicePlan.id from TousseItem where ancestorID =" + IDCardDefinition.getTousseDefinitionID() + ") "; + } + }else{ + throw new SystemException("请扫描手术间条码、科室条码、标识牌条码"); + } + } + } + + //器械包种类ID查询条件 + if(DatabaseUtil.isPoIdValid(instrumentSetTypeId)){ + sql += String.format(" and po.id in (select invoicePlan.id from TousseItem where ancestorID in (select tousseDefinitionId from %s where instrumentSetTypeId = %s)) ", + InstrumentSetType_TD.class.getSimpleName(), + instrumentSetTypeId); + } + + String handleDepartCoding = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); + if (StringUtils.isNotBlank(handleDepartCoding)) { + sql += String.format(" and po.handleDepartCoding='%s'", handleDepartCoding); + } + // 此处是触摸屏回收待回收列表调用,而触摸屏回收不处理外来器械包,所以要加上过滤 + sql += " and po.type != '" + InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION + + "'"; + sql += " and ( po.includeRecyclingItems is null or po.includeRecyclingItems = " + + InvoicePlan.SIGNED_TRUE + " )"; + sql += " order by po.sequence,po.departCoding,po.submitTime"; + return getWaitingforRecyclingInvoicePlans(sql); } + @SuppressWarnings("unchecked") @Override public List getSortedTousseItemListByInvoicePlanIdAndInstrumentSetTypeId( Long invoicePlanId, Long instrumentSetTypeId) { - // TODO Auto-generated method stub - return null; + if(!DatabaseUtil.isPoIdValid(invoicePlanId)){ + throw new SystemException("申请单ID不能为空"); + } + String hql = String.format("select po from %s po where po.invoicePlan.id = %s", + TousseItem.class.getSimpleName(), + invoicePlanId); + + if(DatabaseUtil.isPoIdValid(instrumentSetTypeId)){ + hql += String.format(" and po.ancestorID in (select tousseDefinitionId from %s where instrumentSetTypeId = %s)", + InstrumentSetType_TD.class.getSimpleName(), + instrumentSetTypeId); + } + + List tousseItemList = objectDao.findByHql(hql); + // 1)当配置值为“0”或没有该配置项时“PDA回收模块的待回收申请单内的物品排序方式为默认顺序。(默认顺序为当前系统的排序方式) + // 2)当配置值为”1“时,”PDA回收模块的待回收申请单内的物品“根据”器械包种类“排序编号排序。(当一个器械包同时属于多个种类时,排序号取所属种类中的最小序号排列) + int sortingModeOfTousseItemsInPDAApplicationFormToBeRecycled = + ConfigUtils.getSystemSetConfigByNameInt("sortingModeOfTousseItemsInPDAApplicationFormToBeRecycled", 0); + if(sortingModeOfTousseItemsInPDAApplicationFormToBeRecycled == 1){ + tousseItemList = sortTousseItemsByInstrumentSetTypeSequenceNumber(tousseItemList); + } + + return tousseItemList; } + /** + * 按照器械包种类排序编号排序(当一个器械包同时属于多个种类时,排序号取所属种类中的最小序号排列) + * @param tousseItemList + * @return + */ + private List sortTousseItemsByInstrumentSetTypeSequenceNumber(List tousseItemList) { + if(CollectionUtils.isEmpty(tousseItemList)){ + return tousseItemList; + } + List sortTousseItems = new ArrayList(); + Map> tousseItemIDMap = new HashMap>(); + List ancestorIDList = new ArrayList(); + for (TousseItem tousseItem : tousseItemList) { + List tiList = tousseItemIDMap.get(tousseItem.getAncestorID()); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseItem); + tousseItemIDMap.put(tousseItem.getAncestorID(), tiList); + ancestorIDList.add(tousseItem.getAncestorID()); + } + String sql = String.format("select typeTd.tousseDefinitionId, min(t.sequenceNumber) seq from %s typeTd " + + "join %s t on typeTd.instrumentSetTypeId = t.id " + + "where %s group by typeTd.tousseDefinitionId " + + "order by seq ", + InstrumentSetType_TD.class.getSimpleName(), + InstrumentSetType.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("typeTd.tousseDefinitionId", ancestorIDList)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long ancestorID = rs.getLong("tousseDefinitionId"); + List tiList = tousseItemIDMap.get(ancestorID); + if(tiList != null){ + sortTousseItems.addAll(tiList); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return sortTousseItems; + } + @Override public List getWaitTransitionInvoicePlans(String orgUnitCodings){ String sql = "where (po.recyclingStatus = '"