Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/PrepareRecycleTousseManagerImpl.java =================================================================== diff -u -r35525 -r35531 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/PrepareRecycleTousseManagerImpl.java (.../PrepareRecycleTousseManagerImpl.java) (revision 35525) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/PrepareRecycleTousseManagerImpl.java (.../PrepareRecycleTousseManagerImpl.java) (revision 35531) @@ -9,7 +9,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.stream.Collectors; import net.sf.json.JSONArray; @@ -54,74 +53,8 @@ //如果保存成功,返回{succesee:true},否则返回{succesee:false,message:"具体的消息"} //以下代码为原serviceManager实现方法的代码,现已移值到此manager实现类中,在此基础上做新增的需求内容 boolean success = false; - boolean enablePrerecycleAmountScanToAddOrDeleteAmountFunction = CssdUtils.getSystemSetConfigByNameBool("enablePrerecycleAmountScanToAddOrDeleteAmountFunction", false); String error = ""; - out : if(enablePrerecycleAmountScanToAddOrDeleteAmountFunction && StringUtils.isNotBlank(scanBarcodeInfo)){ - Gson gson = new Gson(); - Map> map = new HashMap>(); - map = gson.fromJson(scanBarcodeInfo, map.getClass()); - if(MapUtils.isEmpty(map)){ - break out; - } - //数据收集 - List prepareRecyleScanBarcodes = objectDao.findByHql("select po from " - + PrepareRecyleScanBarcode.class.getSimpleName() - + " where " - + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseItemId", map.keySet())); - //数据组装 - Map> tousseBarcodesMap = new HashMap>(); - for (PrepareRecyleScanBarcode prepareRecyleScanBarcode : prepareRecyleScanBarcodes) { - Set barcodes = new HashSet(); - if(tousseBarcodesMap.containsKey(prepareRecyleScanBarcode.getTousseItemId())){ - barcodes = tousseBarcodesMap.get(prepareRecyleScanBarcode.getTousseItemId()); - }else{ - barcodes = new HashSet(); - } - barcodes.add(prepareRecyleScanBarcode.getTousseInstanceBarcode()); - } - //数据校验 - for (String idStr : map.keySet()) { - Long id = Long.valueOf(idStr); - List scanBarcodes = map.get(id); - Set recyedBarcodes = getBarcodesPreRecoveredByOtherTousseItems(scanBarcodes, id); - if(CollectionUtils.isNotEmpty(recyedBarcodes)){ - for (String recyedBarcode : recyedBarcodes) { - error += "," + recyedBarcode; - } - error = error.substring(1) + "已经被预回收,无法重复预回收"; - break out; - } - } - //新增或删除数据 - for (String idStr : map.keySet()) { - Long tousseItemId = Long.valueOf(idStr); - List scanBarcodes = map.get(tousseItemId); - Set tousseBarcodes = tousseBarcodesMap.get(tousseItemId); - //要删除的条码 - Collection delBarcodes = CollectionUtils.subtract(tousseBarcodes, scanBarcodes); - if(CollectionUtils.isNotEmpty(delBarcodes)){ - String delSql = "delete from " - + PrepareRecyleScanBarcode.class.getSimpleName() - + " where " - + SqlUtils.getStringFieldInLargeCollectionsPredicate("tousseInstanceBarcode", delBarcodes) - + " and tousseItemId=" - + tousseItemId; - objectDao.excuteSQL(delSql); - } - //要添加的条码 - Collection addBarcodes = CollectionUtils.subtract(tousseBarcodes, scanBarcodes); - if(CollectionUtils.isNotEmpty(addBarcodes)){ - for (String addBarcode : addBarcodes) { - PrepareRecyleScanBarcode prepareRecyleScanBarcode = new PrepareRecyleScanBarcode(); - prepareRecyleScanBarcode.setTousseInstanceBarcode(addBarcode); - prepareRecyleScanBarcode.setTousseItemId(tousseItemId); - objectDao.save(prepareRecyleScanBarcode); - } - } - } - } - - if(params != null && StringUtils.isBlank(error)){ + if(params != null){ JSONArray array = params.optJSONArray("tousseItems"); if(CollectionUtils.isNotEmpty(array)){ String invoiceplanId = params.optString("app_id"); @@ -194,6 +127,7 @@ throw new SystemException("未找到包定义id为"+ tdId +"的器械包包定义,请检查提交参数是否有误."); } }); + Map tdIdToTousseItemIdMap = new HashMap(); for (int i = 0; i < array.size(); i++) { JSONObject obj = array.optJSONObject(i); Long tousseItemId = obj.optLong("id"); @@ -301,7 +235,13 @@ } tousseItemManager.save(item); objectDao.flush(); + tousseItemIdList.add(item.getId()); + tdIdToTousseItemIdMap.put(item.getTousseDefinitionId(), item.getId()); } + error = handlePrepareRecyleScanBarcode(scanBarcodeInfo, tousseItemIdList, tdIdToTousseItemIdMap); + if(StringUtils.isNotBlank(error)){ + return JSONUtil.buildJsonObject(false, error); + } if (plan != null) { plan.setIsPrepareRecycled(InvoicePlan.SIGNED_TRUE); String comfirmor = params.optString("comfirmor"); @@ -327,15 +267,94 @@ return JSONUtil.buildJsonObject(success, error); } /** + * 处理预回收扫码 + * @param scanBarcodeInfo 预回收扫码信息 + * @param tousseItemIdList 申请项id + * @param tdIdToTousseItemIdMap key:tdId value:tousseItemId + * @return + */ + private String handlePrepareRecyleScanBarcode(String scanBarcodeInfo, List tousseItemIdList, Map tdIdToTousseItemIdMap){ + boolean enablePrerecycleAmountScanToAddOrDeleteAmountFunction = CssdUtils.getSystemSetConfigByNameBool("enablePrerecycleAmountScanToAddOrDeleteAmountFunction", false); + if(!enablePrerecycleAmountScanToAddOrDeleteAmountFunction || StringUtils.isBlank(scanBarcodeInfo)){ + return null; + } + Gson gson = new Gson(); + Map> map = new HashMap>(); + map = gson.fromJson(scanBarcodeInfo, map.getClass()); + if(MapUtils.isEmpty(map)){ + return null; + } + //数据收集 + List prepareRecyleScanBarcodes = objectDao.findByHql(" from " + + PrepareRecyleScanBarcode.class.getSimpleName() + + " where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseItemId", tousseItemIdList)); + //数据组装 + Map> tousseBarcodesMap = new HashMap>();//所有申请项的预回收扫描的条码 + String error = ""; + for (PrepareRecyleScanBarcode prepareRecyleScanBarcode : prepareRecyleScanBarcodes) { + Set barcodes = new HashSet(); + if(tousseBarcodesMap.containsKey(prepareRecyleScanBarcode.getTousseItemId())){ + barcodes = tousseBarcodesMap.get(prepareRecyleScanBarcode.getTousseItemId()); + }else{ + barcodes = new HashSet(); + tousseBarcodesMap.put(prepareRecyleScanBarcode.getTousseItemId(), barcodes); + } + barcodes.add(prepareRecyleScanBarcode.getTousseInstanceBarcode()); + } + //数据校验 + for (String idStr : map.keySet()) { + Long tdId = Long.valueOf(idStr); + Long tousseItemId = tdIdToTousseItemIdMap.get(tdId); + List scanBarcodes = map.get(tdId); + Set recyedBarcodes = getBarcodesPreRecoveredByOtherTousseItems(scanBarcodes, tousseItemId); + if(CollectionUtils.isNotEmpty(recyedBarcodes)){ + for (String recyedBarcode : recyedBarcodes) { + error += "," + recyedBarcode; + } + return error.substring(1) + "已经被预回收,无法重复预回收"; + } + } + //新增或删除数据 + for (String idStr : map.keySet()) { + Long tdId = Long.valueOf(idStr); + Long tousseItemId = tdIdToTousseItemIdMap.get(tdId); + List scanBarcodes = map.containsKey(tdId)?map.get(tdId):new ArrayList(); + Set tousseBarcodes = tousseBarcodesMap.containsKey(tousseItemId)?tousseBarcodesMap.get(tousseItemId):new HashSet(); + //要删除的条码 + Collection delBarcodes = CollectionUtils.subtract(tousseBarcodes, scanBarcodes); + if(CollectionUtils.isNotEmpty(delBarcodes)){ + String delSql = "delete from " + + PrepareRecyleScanBarcode.class.getSimpleName() + + " where " + + SqlUtils.getStringFieldInLargeCollectionsPredicate("tousseInstanceBarcode", delBarcodes) + + " and tousseItemId=" + + tdId; + objectDao.excuteSQL(delSql); + } + //要添加的条码 + Collection addBarcodes = CollectionUtils.subtract(tousseBarcodes, scanBarcodes); + if(CollectionUtils.isNotEmpty(addBarcodes)){ + for (String addBarcode : addBarcodes) { + PrepareRecyleScanBarcode prepareRecyleScanBarcode = new PrepareRecyleScanBarcode(); + prepareRecyleScanBarcode.setTousseInstanceBarcode(addBarcode); + prepareRecyleScanBarcode.setTousseItemId(tdId); + objectDao.save(prepareRecyleScanBarcode); + } + } + } + return error; + } + /** * 获取被其他申请项预回收的条码 * @param barcodes 包实例条码 * @param tousseItemId 申请项id * @return */ private Set getBarcodesPreRecoveredByOtherTousseItems(List barcodes, Long tousseItemId){ - String sql = "select po.tousseInstanceBarcode from "+ PrepareRecyleScanBarcode.class.getSimpleName() +" p where " + String sql = "select po.tousseInstanceBarcode from "+ PrepareRecyleScanBarcode.class.getSimpleName() +" po where " + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.tousseInstanceBarcode", barcodes) - + " and p.tousseItemId<>" + + " and po.tousseItemId<>" + tousseItemId; return objectDao.getStringSet(sql, ""); }