Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/PrepareRecycleTousseManagerImpl.java =================================================================== diff -u -r35709 -r35724 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/PrepareRecycleTousseManagerImpl.java (.../PrepareRecycleTousseManagerImpl.java) (revision 35709) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/PrepareRecycleTousseManagerImpl.java (.../PrepareRecycleTousseManagerImpl.java) (revision 35724) @@ -59,15 +59,21 @@ boolean success = true; String error = "保存成功"; out : if(params != null){ + InvoicePlan plan = get(params.optString("app_id")); + if(plan == null){ + success = false; + error = "申请单不存在"; + break out; + } + //申请单的已有的申请项 + List orginalTousseItemList = plan.getApplicationItems(); + String deleteErr = deleteTousseItem(plan,deletedTdIdList, orginalTousseItemList); + if(StringUtils.isNotBlank(deleteErr)){ + error = deleteErr; + break out; + } JSONArray array = params.optJSONArray("tousseItems"); if(CollectionUtils.isNotEmpty(array)){ - String invoiceplanId = params.optString("app_id"); - InvoicePlan plan = get(invoiceplanId); - if(plan == null){ - success = false; - error = "申请单不存在"; - break out; - } String isContinueStr = params.optString("isContinue");//是否要归还 Boolean isContinue = null;//为空做验证 if("true".equals(isContinueStr)){ @@ -86,7 +92,7 @@ throw new BorrowUnRecturnException(msg); } } - }else if(isContinue != null && isContinue){ + }else if(isContinue){ restApplyTousses = new HashMap<>(); tousseDefIdPrepareRecycleAmountMap = new HashMap(); } @@ -103,24 +109,12 @@ tdIdList.add(tdId); } } - //申请单的已有的申请项 - List orginalTousseItemList = plan.getApplicationItems(); - List delTousseItems = new ArrayList(); //要删除的申请项 - Set delTDids = new HashSet();//找到的要删除的申请项包定义id - if(CollectionUtils.isNotEmpty(deletedTdIdList)){ - for (int i = 0; i < deletedTdIdList.size(); i++) { - delTDids.add(((Number)deletedTdIdList.get(i)).longValue()); - } - } //未提交到后台的申请项 List unSubmitTousseItemList = new ArrayList<>(); for(TousseItem tousseItem : orginalTousseItemList){ if(!tousseItemIdList.contains(tousseItem.getId())){ unSubmitTousseItemList.add(tousseItem); } - if(delTDids.contains(tousseItem.getTousseDefinitionId())){ - delTousseItems.add(tousseItem); - } } if(CollectionUtils.isNotEmpty(unSubmitTousseItemList)){ for(TousseItem ti : unSubmitTousseItemList){ @@ -167,6 +161,9 @@ if(DatabaseUtil.isPoIdValid(tousseItemId)){ //item = tousseItemManager.get(id); item = idToTousseItemMap.get(tousseItemId); + if(item == null){ + throw new SystemException(tousseItemId+"物品已经被删除"); + } } Integer prepareRecycleAmount = obj .optInt("prepareRecycleAmount"); @@ -200,7 +197,7 @@ + TousseDefinition.class.getSimpleName() +" td on td.id=ti.tousseDefinitionId where ti.recyclingApplication_ID=" + plan.getId() - +" and (td.id="+ td_id +" or td.ancestorID="+ td_id +")") > 0){ + +" and td.id="+ td_id) > 0){ success = false; error = "申请单已存在"+td.getName() + ",不可以重复添加"; break out; @@ -274,36 +271,7 @@ if(StringUtils.isNotBlank(handlePrepareRecyleScanBarcodeMsg)){ return JSONUtil.buildJsonObject(false, handlePrepareRecyleScanBarcodeMsg); } - if(CollectionUtils.isNotEmpty(delTousseItems)){ - String compareResult = "申请单单号:" - + plan.getSerialNumber() - + ",通过预回收删除了物品"; - Set delTousseItemIds = new HashSet(); - for (int i = 0; i < delTousseItems.size(); i++) { - TousseItem ti = delTousseItems.get(i); - delTousseItemIds.add(ti.getId()); - if(i == 0){ - compareResult += "\"" +ti.getTousseName() + "\""; - }else{ - compareResult += ",\"" + ti.getTousseName() + "\""; - } - } - compareResult +=";"; - String deletePrepareRecyleScanBarcodeSql = "delete from PrepareRecyleScanBarcode where " - + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseItemId", delTousseItemIds); - objectDao.excuteSQL(deletePrepareRecyleScanBarcodeSql); - String deleteTousseItemSql = "delete from TousseItem where recyclingApplication_ID=" - + invoiceplanId - +" and " - + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", delTousseItemIds); - objectDao.excuteSQL(deleteTousseItemSql); - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_APPLICATION, Log.TYPE_UPDATE, compareResult); - if(plan.getVersion() == null){ - plan.setVersion(1); - }else{ - plan.setVersion(plan.getVersion() + 1); - } - } + plan.setIsPrepareRecycled(InvoicePlan.SIGNED_TRUE); String comfirmor = params.optString("comfirmor"); String operator = params.optString("operator"); @@ -316,16 +284,85 @@ } success = true; }else{ - success = false; - error = "不允许保存空的申请单"; + if(CollectionUtils.isNotEmpty(orginalTousseItemList)){ + for(TousseItem ti : orginalTousseItemList){ + ti.setPrepareRecycleAmount(0); + tousseItemManager.save(ti); + } + } + success = true; } } /*if(1==1){ throw new SystemException("test"); }*/ return JSONUtil.buildJsonObject(success, error); } + /** + * 删除申请项 + * @param plan 申请单 + * @param orginalTousseItemList 申请单原有物品 + * @return + */ + private String deleteTousseItem(InvoicePlan plan, JSONArray deletedTdIdList, List orginalTousseItemList){ + if(CollectionUtils.isEmpty(deletedTdIdList)){ + return null; + } + Set delTDids = new HashSet();//找到的要删除的申请项包定义id + for (int i = 0; i < deletedTdIdList.size(); i++) { + delTDids.add(((Number)deletedTdIdList.get(i)).longValue()); + } + if(orginalTousseItemList.size() >= delTDids.size()){//不能删除整张单的物品 + int i = 0; + for(TousseItem ti : orginalTousseItemList){ + if(delTDids.contains(ti.getTousseDefinitionId())){ + i++; + } + } + if(i == orginalTousseItemList.size()){ + return "预回收单不允许删除全部物品,请在申请单页面进行终止操作;"; + } + } + //要删除的申请项 + List delTousseItems = objectDao.findByHql("select po from " + + TousseItem.class.getSimpleName() + + " po where " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinitionId",delTDids)); + if(CollectionUtils.isEmpty(delTousseItems)){ + return "删除的物品已经不存在"; + } + StringBuffer compareResult = new StringBuffer(); + compareResult.append("申请单单号:" + + plan.getSerialNumber() + + ",通过预回收删除了物品"); + Set delTousseItemIds = new HashSet(); + for (int i = 0; i < delTousseItems.size(); i++) { + TousseItem ti = delTousseItems.get(i); + delTousseItemIds.add(ti.getId()); + if(i == 0){ + compareResult.append("\"" +ti.getTousseName() + "\""); + }else{ + compareResult.append(",\"" + ti.getTousseName() + "\""); + } + } + compareResult.append(";"); + String deletePrepareRecyleScanBarcodeSql = "delete from PrepareRecyleScanBarcode where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseItemId", delTousseItemIds); + objectDao.excuteSQL(deletePrepareRecyleScanBarcodeSql); + String deleteTousseItemSql = "delete from TousseItem where recyclingApplication_ID=" + + plan.getId() + +" and " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", delTousseItemIds); + objectDao.excuteSQL(deleteTousseItemSql); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_APPLICATION, Log.TYPE_UPDATE, compareResult.toString()); + if(plan.getVersion() == null){ + plan.setVersion(1); + }else{ + plan.setVersion(plan.getVersion() + 1); + } + return null; + } + /** * 处理预回收扫码 * @param scanBarcodeInfo 预回收扫码信息 * @param tousseItemIdList 申请项id @@ -350,7 +387,7 @@ + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseItemId", tousseItemIdList)); //数据组装 Map> tousseBarcodesMap = new HashMap>();//所有申请项的预回收扫描的条码 - String error = ""; + StringBuffer error = new StringBuffer(); for (PrepareRecyleScanBarcode prepareRecyleScanBarcode : prepareRecyleScanBarcodes) { Set barcodes = new HashSet(); if(tousseBarcodesMap.containsKey(prepareRecyleScanBarcode.getTousseItemId())){ @@ -362,23 +399,24 @@ barcodes.add(prepareRecyleScanBarcode.getTousseInstanceBarcode()); } //数据校验 - for (String idStr : map.keySet()) { - Long tdId = Long.valueOf(idStr); + for(Entry> entry : map.entrySet()){ + Long tdId = Long.valueOf(entry.getKey()); Long tousseItemId = tdIdToTousseItemIdMap.get(tdId); - List scanBarcodes = map.get(idStr); + List scanBarcodes = entry.getValue(); Set recyedBarcodes = getBarcodesPreRecoveredByOtherTousseItems(scanBarcodes, tousseItemId); if(CollectionUtils.isNotEmpty(recyedBarcodes)){ for (String recyedBarcode : recyedBarcodes) { - error += "," + recyedBarcode; + error.append("," + recyedBarcode); } - return error.substring(1) + "已经被预回收,无法重复预回收"; + error.append("已经被预回收,无法重复预回收"); + return error.substring(1); } } //新增或删除数据 - for (String idStr : map.keySet()) { - Long tdId = Long.valueOf(idStr); + for(Entry> entry : map.entrySet()){ + Long tdId = Long.valueOf(entry.getKey()); Long tousseItemId = tdIdToTousseItemIdMap.get(tdId); - List scanBarcodes = map.get(idStr); + List scanBarcodes = entry.getValue(); Set tousseBarcodes = tousseBarcodesMap.containsKey(tousseItemId)?tousseBarcodesMap.get(tousseItemId):new HashSet(); //要删除的条码 Collection delBarcodes = CollectionUtils.subtract(tousseBarcodes, scanBarcodes); @@ -402,7 +440,7 @@ } } } - return error; + return error.toString(); } /** * 获取被其他申请项预回收的条码 @@ -423,7 +461,7 @@ * @return */ private String getTousseNames(JSONArray array){ - String tousseNames = ""; + StringBuffer tousseNames = new StringBuffer(); for (int i = 0; i < array.size(); i++) { JSONObject obj = array.getJSONObject(i); String id = obj.optString("id"); @@ -441,12 +479,12 @@ throw new RuntimeException(td_id + "包定义不存在"); } } - tousseNames += td.getName() + ";"; + tousseNames.append(td.getName() + ";"); } - if(StringUtils.isNotBlank(tousseNames)){ - tousseNames = tousseNames.substring(0, tousseNames.length() - 1); + if(tousseNames.length() > 0){ + return tousseNames.substring(0,tousseNames.length() - 1); } - return tousseNames; + return ""; } /** * 收集归还需要的信息 @@ -471,8 +509,7 @@ * @param tousseDefIdPrepareRecycleAmountMap 包id和预回收数量map * @param restApplyTousses 包和归还数量的map * @param plan 申请单 - * @param departCode 借物单科室 - * @param tousseAmoutMap 已归还的器械包数量,key为包定义id(不是祖先id,是TousseItem中的包定义id,value为已经归还的数量) + * @param departCode 借物单科室 */ private void returnTousse(Map tousseDefIdPrepareRecycleAmountMap, Map restApplyTousses,InvoicePlan plan, String departCode){ //已归还的器械包数量,key为包定义id(不是祖先id,是TousseItem中的包定义id,value为已经归还的数量) @@ -497,13 +534,14 @@ if(MapUtils.isEmpty(tousseAmoutMap)){ return; } - for(Long tousseDefinitionId : tousseAmoutMap.keySet()){ + for(Entry entry :tousseAmoutMap.entrySet()){ + Long tousseDefinitionId = entry.getKey(); JSONObject modifiedItem = new JSONObject(); TousseItem tousseItem = tousseItemManager.find(plan.getApplicationItems(), tousseDefinitionId); if(tousseItem != null){ JSONUtil.addLogProperty(modifiedItem, "包定义id", tousseDefinitionId); JSONUtil.addLogProperty(modifiedItem, "器械包名称", tousseItem.getTousseName()); - int restAmount = tousseAmoutMap.get(tousseDefinitionId); + int restAmount = entry.getValue(); if(restAmount > 0){ JSONUtil.modifyPropertyLog(modifiedItem, "申请数量", tousseItem.getAmount(), restAmount); tousseItem.setAmount(restAmount);