Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r15122 -r15153 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 15122) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 15153) @@ -481,7 +481,6 @@ JSONObject obj = jsonArray.optJSONObject(i); String tousseName = obj.optString("tousseName"); String supplierName = obj.optString("supplierName"); - String tousseDefinitionId = obj.optString("tousseDefinitionId"); Double price = obj.optDouble("price"); String recyclingStatus = obj.optString("recyclingStatus"); Long appid = foreignTousseApplication.getId(); @@ -492,8 +491,7 @@ throw new RuntimeException("外来器械包供应商不能为空!"); } - TousseDefinition tousseDefinition = tousseDefinitionManager - .getForeignTousseDefinition(tousseDefinitionId, "" + appid); + TousseDefinition tousseDefinition = getForeignTousseDefinition(tousseName,supplierName,InvoicePlan.SIGNED_FALSE,appid);; // 已存在的外来器械包明细信息(干预外来器械保存) if (tousseDefinition != null) { tousseDefinition.setSupplierName(supplierName); @@ -568,47 +566,45 @@ tousseDefinition.setMaterialInstances(foreignMaterialDefinitions); objectDao.deleteAll(deleteForeignMaterialDefinitions); } else {// 新的外来器械包信息 - tousseDefinition = newForeignTousseDefinition(config, - cleanedEntirely, obj, tousseName, supplierName, appid); + tousseDefinition = newForeignTousseDefinition(config,cleanedEntirely, obj, tousseName, supplierName, appid,false); } tousseDefinition.setPrice(price==0?config.getForeignToussePrice():price); - Long parentID = null; - Long ancestorID = null; + TousseDefinition ancestorTD = getForeignTousseDefinition(tousseName,supplierName,InvoicePlan.SIGNED_TRUE,null); //申请单上新添加的包定义 创建一个祖先类包定义 - if(!DatabaseUtil.isPoIdValid(tousseDefinitionId)){ - TousseDefinition ancestorTD = newForeignTousseDefinition(config,cleanedEntirely, obj, tousseName, supplierName, appid); - ancestorTD.setForDisplay(true); - ancestorTD.setInvoicePlanID(null); + if(ancestorTD == null){ + ancestorTD = newForeignTousseDefinition(config,cleanedEntirely, obj, tousseName, supplierName, null,true); tousseDefinitionManager.saveOrUpdate(ancestorTD); ancestorTD.setParentID(ancestorTD.getId()); ancestorTD.setAncestorID(ancestorTD.getId()); - parentID = ancestorTD.getId(); - ancestorID = ancestorTD.getId(); - }else{ - TousseDefinition parentTD = tousseDefinitionManager.getTousseDefinitionById(tousseDefinitionId); - if(parentTD == null){ - throw new RuntimeException("ID=" + tousseDefinitionId + "的器械包定义已不存在!"); - } - parentID = parentTD.getId(); - ancestorID = (parentTD.getAncestorID() != null ? parentTD.getAncestorID() : parentTD.getId()); } - tousseDefinition.setParentID(parentID); - tousseDefinition.setAncestorID(ancestorID); + tousseDefinition.setAncestorID(ancestorTD.getId()); tousseDefinitionManager.saveOrUpdate(tousseDefinition); obj.put("tousseDefinitionId", tousseDefinition.getId()); } } + + private TousseDefinition getForeignTousseDefinition(String tousseName ,String supplierName,Integer isForDisplay,Long invoicePlanId){ + String sql = String + .format(" where po.name = '%s' and po.supplierName = '%s' and po.forDisplay = %s and po.tousseType = '%s'", + tousseName, supplierName,isForDisplay,TousseDefinition.PACKAGE_TYPE_FOREIGN); + if(DatabaseUtil.isPoIdValid(invoicePlanId)){ + sql += " and po.invoicePlanID = " + invoicePlanId; + }else{ + sql += " and po.invoicePlanID is null"; + } + return tousseDefinitionManager.getTousseDefinitionBySql(sql); + } private TousseDefinition newForeignTousseDefinition( SupplyRoomConfig config, String cleanedEntirely, JSONObject obj, - String tousseName, String supplierName, Long appid) { + String tousseName, String supplierName, Long appid,boolean forDisplay) { TousseDefinition tousseDefinition; tousseDefinition = new TousseDefinition(); tousseDefinition.setName(tousseName); tousseDefinition.setInvoicePlanID(appid); - tousseDefinition.setForDisplay(false); + tousseDefinition.setForDisplay(forDisplay); tousseDefinition.setWorkLoadStatisticalMethod(TousseDefinition.WORKLOAD_STATISTICAL_METHOD_MATERIAL_AND_DIPOSABLES); tousseDefinition.setSupplierName(supplierName); tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN);