Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java =================================================================== diff -u -r37811 -r37874 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 37811) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 37874) @@ -100,8 +100,6 @@ public String recyclingOverdueTousse(RecyclingRecord record,String ids, String basketName, String basketBarcode); - public JSONObject recycleTousseIntoBasket(String materials, String tousseDefinitionId, Integer amount, String idCardBarcode, - String params,String tousseIntoBasketInfo,Long recyclingApplicationId); /** * * @param materials 修改后的材料信息 格式:[{ @@ -119,11 +117,10 @@ * @param params * @param tousseIntoBasketInfo * @param recyclingApplicationId - * @param foreignTousseInvoicedAndNoUse 外来器械未使用 发货后直接二次回收 * @return */ public JSONObject recycleTousseIntoBasket(String materials, String tousseDefinitionId, Integer amount, String idCardBarcode, - String params,String tousseIntoBasketInfo,Long recyclingApplicationId, boolean foreignTousseInvoicedAndNoUse); + String params,String tousseIntoBasketInfo,Long recyclingApplicationId); /** * * @param materials 修改后的材料信息 格式:[{ Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r37811 -r37874 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 37811) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 37874) @@ -7534,7 +7534,7 @@ @Override public OpenToBeRecycledRecordVo getOpenToBeRecycledRecordVo( InvoicePlan invoicePlan, boolean sort, - Map specialInfectionMap, boolean foreignTousseInvoicedAndNoUse) { + Map specialInfectionMap) { OpenToBeRecycledRecordVo vo = null; if(invoicePlan != null){ vo = new OpenToBeRecycledRecordVo(); @@ -7603,6 +7603,7 @@ Map> tousseItemIdMapTousseInstances = tousseInstanceManager.groupByTousseItemId(tousseInstances); Map useRecordMap = getUseRecordByTousseInstances(tousseInstances); + boolean enableSecondRecyclingAfterInvoiceFunction = CssdUtils.getSystemSetConfigByNameBool("enableSecondRecyclingAfterInvoiceFunction", false); if(CollectionUtils.isNotEmpty(applicationItems)){ for (TousseItem tousseItem : applicationItems) { if(BooleanUtils.isTrue(tousseItem.getIsTerminated())) @@ -7615,7 +7616,7 @@ if(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE.equals(invoicePlan.getRecyclingStatus()) || InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE.equals(invoicePlan.getRecyclingStatus())){ if(!(InvoicePlan.RECYCLINGSTATUS_AWAIT_SECOND_RECEIVE.equals(tousseItem.getPackageStatus()) || ForeignTousseApplication.APPLICATION_STATUS_TOBERETURNED.equals(tousseItem.getPackageStatus()) - || foreignTousseInvoicedAndNoUse && ForeignTousseApplication.APPLICATION_STATUS_SIGNED.equals(tousseItem.getPackageStatus()) + || enableSecondRecyclingAfterInvoiceFunction && ForeignTousseApplication.APPLICATION_STATUS_SIGNED.equals(tousseItem.getPackageStatus()) || ForeignTousseApplication.APPLICATION_STATUS_RETRUN.equals(tousseItem.getPackageStatus()))){ continue; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r37811 -r37874 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 37811) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 37874) @@ -450,7 +450,7 @@ * @param specialInfectionMap * @return */ - public OpenToBeRecycledRecordVo getOpenToBeRecycledRecordVo(InvoicePlan invoicePlan,boolean sort,Map specialInfectionMap, boolean foreignTousseInvoicedAndNoUse); + public OpenToBeRecycledRecordVo getOpenToBeRecycledRecordVo(InvoicePlan invoicePlan,boolean sort,Map specialInfectionMap); /** * 根据科室编码分组 * @param invoicePlans 待分组的申请单 Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r37859 -r37874 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 37859) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 37874) @@ -408,14 +408,12 @@ TousseInstance tousseInstance = null; InvoicePlan application = null; boolean foreignTousseInvoicedAndNoUse = false; - String tiStatus = null; if (barcodeDevice != null){ // 是否器械包实例 if (barcodeDevice instanceof TousseInstance) { tousseInstance = (TousseInstance) barcodeDevice; isTousseInstanceBarcode = true; - tiStatus = tousseInstance.getStatus(); // 是否器械包标识牌实例 }else if (barcodeDevice instanceof IDCardInstance) { isIdCardBarcode = true; @@ -598,7 +596,6 @@ } jsonObject.put("success", true); if(application != null && foreignTousseInvoicedAndNoUse && StringUtils.isBlank(message)){ - jsonObject.put("foreignTousseInvoicedAndNoUse", foreignTousseInvoicedAndNoUse); jsonObject.put("id", application.getId()); } else if(application != null && application.needRecycling()){ jsonObject.put("id", id); @@ -610,7 +607,6 @@ jsonObject.put("orgUnitCoding", orgUnitCoding); jsonObject.put("isIdCardBarcode", isIdCardBarcode); jsonObject.put("isTousseInstanceBarcode", isTousseInstanceBarcode); - jsonObject.put("tiStatus", tiStatus); String result = jsonObject.toString(); StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r37864 -r37874 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 37864) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 37874) @@ -1689,47 +1689,40 @@ } } } - // 一条回收记录只能有一个对应的回收申请单/器械包申请单 - if (recyclingRecord.getId() == null && application != null - && application.getRecyclingRecord(objectDao) != null - &&(!application.isForeignTousseAppliaction() || (application.isForeignTousseAppliaction() && (application.recyclingStatusReceived() && !recyclingContext.getForeignTousseInvoicedAndNoUse() ||application.recyclingStatusRecycled())))) { - //外来器械待回收状态,是可以再回收的,即使已经回收过了。因为有二次回收 - throw new SystemException("当前申请单已回收,不能重复回收!"); - }else{ - save(recyclingRecord,recyclingContext); - //如果回收页显示保存并打印或保存打印并新建,则设置打印数据 - if(CssdUtils.getSystemSetConfigByNameBool("showRecyclingSaveAndPrintActionButton") || CssdUtils.getSystemSetConfigByNameBool("showRecyclingPrintDetail") || CssdUtils.getSystemSetConfigByNameBool("showRecyclingSaveAndPrintAndNewActionButton")){ - recyclingContext.setRecyclingPrintData(loadRecyclingPrintData(recyclingRecord , recyclingContext.getNeedPrint())); - } - if(CssdUtils.getSystemSetConfigByNameBool("modifyRemarkInRecycling")){ - if(recyclingRecord.getRecyclingApplication() != null && DatabaseUtil.isPoIdValid(recyclingRecord.getRecyclingApplication().getId())){ - InvoicePlan ip = (InvoicePlan)objectDao.getById(InvoicePlan.class.getSimpleName(), recyclingRecord.getRecyclingApplication().getId()); - if(ip != null){ - ip.setRemark(recyclingContext.getRemark()); - objectDao.save(ip); - } + + save(recyclingRecord,recyclingContext); + //如果回收页显示保存并打印或保存打印并新建,则设置打印数据 + if(CssdUtils.getSystemSetConfigByNameBool("showRecyclingSaveAndPrintActionButton") || CssdUtils.getSystemSetConfigByNameBool("showRecyclingPrintDetail") || CssdUtils.getSystemSetConfigByNameBool("showRecyclingSaveAndPrintAndNewActionButton")){ + recyclingContext.setRecyclingPrintData(loadRecyclingPrintData(recyclingRecord , recyclingContext.getNeedPrint())); + } + if(CssdUtils.getSystemSetConfigByNameBool("modifyRemarkInRecycling")){ + if(recyclingRecord.getRecyclingApplication() != null && DatabaseUtil.isPoIdValid(recyclingRecord.getRecyclingApplication().getId())){ + InvoicePlan ip = (InvoicePlan)objectDao.getById(InvoicePlan.class.getSimpleName(), recyclingRecord.getRecyclingApplication().getId()); + if(ip != null){ + ip.setRemark(recyclingContext.getRemark()); + objectDao.save(ip); } } - - //设置此次回收自动加急的物品信息(返回给前台对用户进行提示) - recyclingContext.setVoluntarilyUrgentItems(recyclingContext.getJsonParamObject().optJSONArray("voluntarilyUrgentItems")); - addBindingUnrecyclingTousse(recyclingRecord,recyclingContext.getUnrecycleTousseItemArray()); - if(!recyclingContext.getRecyclingAmountConfirm() && !recyclingRecord.recyclingApplicationRecord()){ - //验证回收数量跟申请数量是不是一致,如果不一致那要设置待确认 - if(invoicePlanManager.allRecycled(recyclingRecord.getRecyclingApplication()) || recyclingRecord.statusComfirmed()){ - //回收数量跟申请数量相同,或者已经确认了(丢失报损确认后不能再修改回收记录) - recyclingRecord.setRecycleAmountNeedConfirm(Constants.STR_NO); - }else{ - if(recyclingContext.isAnyRecyclingAmountChanged()){ - recyclingRecord.setRecycleAmountNeedConfirm(Constants.STR_YES); - } - } - }else{ - //历史回收记录,或者回收申请单,那设置为已确认 + } + + //设置此次回收自动加急的物品信息(返回给前台对用户进行提示) + recyclingContext.setVoluntarilyUrgentItems(recyclingContext.getJsonParamObject().optJSONArray("voluntarilyUrgentItems")); + addBindingUnrecyclingTousse(recyclingRecord,recyclingContext.getUnrecycleTousseItemArray()); + if(!recyclingContext.getRecyclingAmountConfirm() && !recyclingRecord.recyclingApplicationRecord()){ + //验证回收数量跟申请数量是不是一致,如果不一致那要设置待确认 + if(invoicePlanManager.allRecycled(recyclingRecord.getRecyclingApplication()) || recyclingRecord.statusComfirmed()){ + //回收数量跟申请数量相同,或者已经确认了(丢失报损确认后不能再修改回收记录) recyclingRecord.setRecycleAmountNeedConfirm(Constants.STR_NO); + }else{ + if(recyclingContext.isAnyRecyclingAmountChanged()){ + recyclingRecord.setRecycleAmountNeedConfirm(Constants.STR_YES); + } } - objectDao.saveOrUpdate(recyclingRecord); + }else{ + //历史回收记录,或者回收申请单,那设置为已确认 + recyclingRecord.setRecycleAmountNeedConfirm(Constants.STR_NO); } + objectDao.saveOrUpdate(recyclingRecord); // throw new RuntimeException("测试"); } @@ -1891,6 +1884,61 @@ recyclingSumInfoVo.setRecyclingItemIdOfhaveErrorOrDamage(recyclingItemIdOfhaveErrorOrDamage); } + /** + * 获取外来器械已发货但是未录使用记录直接回收的器械包信息 + * @param enableSecondRecyclingAfterInvoiceFunction + * @param basketItemJson + * @param invoicePlanID + */ + private StringBuffer getInfoOfForeignTousseInvoicedButNoUse(boolean enableSecondRecyclingAfterInvoiceFunction, List basketItemJson, InvoicePlan invoicePlan){ + if(!enableSecondRecyclingAfterInvoiceFunction){ + return null; + } + if(invoicePlan == null || !InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(invoicePlan.getType())){ + return null; + } + StringBuffer ipRemark = new StringBuffer(); + Set tousseDefinitionIds = new HashSet(); + for (RecyclingBasketItemVo vo : basketItemJson) { + if(DatabaseUtil.isPoIdValid(vo.getTousseDefinitionID())){ + tousseDefinitionIds.add(vo.getTousseDefinitionID()); + } + } + if(CollectionUtils.isNotEmpty(tousseDefinitionIds)){ + String sql = "select td.name,bd.barcode,case when td.tousseType='外来器械拆分小包' then td.parentID else td.id end tdId,bd.barcode,ti.status " + + " from "+ TousseInstance.class.getSimpleName() +" ti " + + " join "+ BarcodeDevice.class.getSimpleName() +" bd on bd.id=ti.id " + + " join "+ TousseDefinition.class.getSimpleName() +" td on td.id=ti.tousseDefinition_id " + + " where td.invoicePlanID="+ invoicePlan.getId() +" and (1=1 " + + SqlUtils.getInLongListSql("td.id", tousseDefinitionIds) + + " or 1=1 " + + SqlUtils.getInLongListSql("td.parentID", tousseDefinitionIds) + + " ) " + + " and ti.useRecord_id is null"; + ResultSet rs = null; + String errorMsg = null; + try { + rs = objectDao.executeSql(sql); + while (rs.next()){ + String status = rs.getString("status"); + String name = rs.getString("name"); + if(!(TousseInstance.STATUS_SHIPPED.equals(status) || TousseInstance.STATUS_SIGNED.equals(status))){ + errorMsg = name+"状态为"+status+",不能直接二次回收"; + break; + } + ipRemark.append(name).append("(").append(rs.getString("barcode")).append(")").append("、"); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + if(StringUtils.isNotBlank(errorMsg)){ + throw new RuntimeException(errorMsg); + } + } + return ipRemark; + } @Override @Activity(name = AmountControl.RECYCLING) public void save(RecyclingRecord record, RecyclingContext recyclingContext) { @@ -1900,56 +1948,38 @@ if(confirmation && RecyclingRecord.STATUS_SAVED.equals(record.getStatus())){ throw new RuntimeException("该回收记录已被修改,请刷新后再操作!"); } + //放入篮筐的物品 + List basketItemJson = JSONUtil.fromJson(params.optJSONArray("tousseJson"), RecyclingBasketItemVo.class) ; + //校验点击清点确认按钮时,篮筐中的物品 + //validateRecyclingBasketItemVo(recyclingContext, basketItemJson); + boolean enableSecondRecyclingAfterInvoiceFunction = CssdUtils.getSystemSetConfigByNameBool("enableSecondRecyclingAfterInvoiceFunction", false); + StringBuffer ipRemark = getInfoOfForeignTousseInvoicedButNoUse(enableSecondRecyclingAfterInvoiceFunction, basketItemJson, record.getRecyclingApplication()); + //是否外来器械申请单 + InvoicePlan application = record.getRecyclingApplication(); + if (record.getId() == null && application != null + && application.getRecyclingRecord(objectDao) != null + &&(!application.isForeignTousseAppliaction() + || application.isForeignTousseAppliaction() && (ipRemark == null || ipRemark.length() ==0))) { + //外来器械待回收状态,是可以再回收的,即使已经回收过了。因为有二次回收 + throw new SystemException("当前申请单已回收,不能重复回收!"); + } RecyclingSumInfoVo recyclingSumInfoVo = new RecyclingSumInfoVo(); setHaveErrorOrDamageInfo(record, recyclingSumInfoVo); if(!DatabaseUtil.isPoIdValid(record.getId())){ recyclingContext.setNewRecyclingRecord(true); }else{ recyclingContext.setNewRecyclingRecord(false); } - //放入篮筐的物品 - List basketItemJson = JSONUtil.fromJson(params.optJSONArray("tousseJson"), RecyclingBasketItemVo.class) ; - //校验点击清点确认按钮时,篮筐中的物品 - //validateRecyclingBasketItemVo(recyclingContext, basketItemJson); //未入篮筐删掉的物品 JSONArray deleteTousseItems = params.optJSONArray("delToussItems"); - boolean enableSecondRecyclingAfterInvoiceFunction = CssdUtils.getSystemSetConfigByNameBool("enableSecondRecyclingAfterInvoiceFunction", false); - StringBuffer ipRemark = new StringBuffer(); + boolean isForeignTousseApplication = (application == null) ? false : application.isForeignTousseAppliaction(); + //是否外来器械申请单二次回收 + boolean isSecondRecycleForForeignTousse = (application == null) ? false : application.isSecondRecycleForForeignTousse(recyclingContext.getForeignTousseInvoicedAndNoUse()); + recyclingContext.setForeignTousseInvoicedAndNoUse(false); if(enableSecondRecyclingAfterInvoiceFunction){ - InvoicePlan invoicePlan = record.getRecyclingApplication(); - if(MathTools.equals(record.getRecyclingTimes(), RecyclingRecord.RECYCLINGTIMES_TWO) - && invoicePlan != null && InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(invoicePlan.getType())){ - recyclingContext.setForeignTousseInvoicedAndNoUse(true);//部分回收时,可能打开申请单回收 - } - if(recyclingContext.getForeignTousseInvoicedAndNoUse() != null && recyclingContext.getForeignTousseInvoicedAndNoUse()){ - //发货直接回收时 要修改包数据 - if(CollectionUtils.isNotEmpty(basketItemJson) - && record.getRecyclingApplication() != null - && InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(record.getRecyclingApplication().getType())){ - Set tousseDefinitionIds = new HashSet(); - Long invociePlanId = record.getRecyclingApplication().getId(); - for (RecyclingBasketItemVo vo : basketItemJson) { - if(DatabaseUtil.isPoIdValid(vo.getTousseDefinitionID())){ - tousseDefinitionIds.add(vo.getTousseDefinitionID()); - } - } - if(CollectionUtils.isNotEmpty(tousseDefinitionIds)){ - List tis = tousseInstanceManager.getByHql(" po.tousseDefinition.invoicePlanID= " - + invociePlanId - + SqlUtils.getInLongListSql("po.tousseDefinition.id", tousseDefinitionIds) - + ""); - if(CollectionUtils.isNotEmpty(tis)){ - //器械包名称1(器械包条码)、器械包名称2(器械包条码)发货后直接回收。 - for (TousseInstance ti : tis) { - if(!(TousseInstance.STATUS_SHIPPED.equals(ti.getStatus()) || TousseInstance.STATUS_SIGNED.equals(ti.getStatus()))){ - throw new RuntimeException(ti.getTousseDefinitionName()+"状态为"+ti.getStatus()+",不能直接二次回收"); - } - ipRemark.append(ti.getTousseDefinitionName()).append("(").append(ti.getBarcode()).append(")").append("、"); - } - } - } - } - }else{ + if(ipRemark != null && ipRemark.length() > 0){//说明有外来器械已发货但是未录使用记录直接回收 + recyclingContext.setForeignTousseInvoicedAndNoUse(true); + }else if(!isSecondRecycleForForeignTousse){ splitForeignTousseApplication(record, record.getRecyclingApplication(), basketItemJson, deleteTousseItems); } }else{ @@ -1986,7 +2016,7 @@ //已归还的器械包数量,key为包定义id(不是祖先id,是TousseItem中的包定义id,value为已经归还的数量) Map returnedTousseAmount = new HashMap<>(); ReturnGoodVo returnGoodsVo = null; - InvoicePlan application = record.getRecyclingApplication(); + boolean autoReturnTheBorrowingTousse = recyclingContext.getAutoReturnTheBorrowingTousse(); if(autoReturnTheBorrowingTousse){ //没有未归还的数据,不进行归还 SSTS-412 如果供应室在回收时的自动归还物品的过程中,临床科室点击了归还物品,导致该回收申请单没有了需要归还的物品,那么该回收申请单保存后不应再生成还物的备注信息 @@ -2084,10 +2114,6 @@ voluntarilyUrgent(record.getDepart(),tousseItemJson, urgentTousseItems, params, tousseDefIdTousseItemVoMap,tousseDefinitions); } - //是否外来器械申请单 - boolean isForeignTousseApplication = (application == null) ? false : application.isForeignTousseAppliaction(); - //是否外来器械申请单二次回收 - boolean isSecondRecycleForForeignTousse = (application == null) ? false : application.isSecondRecycleForForeignTousse(recyclingContext.getForeignTousseInvoicedAndNoUse()); //收集tousseItem改动前的加急数量,用来判断是否有改动 Map tousseItemIdAndUrgentAmountMap = new HashMap();//改动前的申请物品的加急数量 if(application != null){ @@ -3931,24 +3957,6 @@ if(StringUtils.isBlank(basketBarcode)){ throw new RecyclingRecordException("参数错误,保存失败!"); } - TousseItem tousseItem = tousseItemManager.find(applicationItems, tousseDefinitionID); - if(mergeForeign && isUserecordApplication && tousseDefinition.isForeignOrSplitTousse() - && tousseItem != null && !tousseItem.needInvoice()){ - //不需要装配任务 - continue; - } - thisTimeTds.add(tousseDefinitionID); - String [] barcodeArray = basketBarcode.split(";"); - //回收拆包清洗且包定义的器械材料的清洗分类类型种类只有一种时,如果放入的篮筐的材料刚好能组成整数个器械包(无剩余器械),那么就要每个清洗篮筐对应创建1条装配任务,数量为篮筐材料组合起来的整数个; - Map barcodeAndAmount = new HashMap(); - if(!tousseDefinition.cleanedEntirely() && barcodeArray.length > 1){ - //获取每个清洗篮筐可组合的数量 - barcodeAndAmount = canBeIntegratedIntoTousseMap(tousseDefinition, barcodeArray, recyclingRecord.getId()); - } - if(MapUtils.isEmpty(barcodeAndAmount)){ - barcodeAndAmount.put(basketBarcode, json.getAmount()); - } - StringBuffer basketName = new StringBuffer(); String idCardBarcode = json.getIdCardBarcode(); IDCardInstance idCardInstance = null; TousseInstance idCardTousseInstance = null; @@ -3972,6 +3980,24 @@ if(noPassIDCardInstances.size() > 0){//有不符合条件的标识牌 没有必要再走下去 但需要继续循环找出其它不符合条件的标识牌 continue; } + TousseItem tousseItem = tousseItemManager.find(applicationItems, tousseDefinitionID); + if(mergeForeign && isUserecordApplication && tousseDefinition.isForeignOrSplitTousse() + && tousseItem != null && !tousseItem.needInvoice()){ + //不需要装配任务 + continue; + } + thisTimeTds.add(tousseDefinitionID); + String [] barcodeArray = basketBarcode.split(";"); + //回收拆包清洗且包定义的器械材料的清洗分类类型种类只有一种时,如果放入的篮筐的材料刚好能组成整数个器械包(无剩余器械),那么就要每个清洗篮筐对应创建1条装配任务,数量为篮筐材料组合起来的整数个; + Map barcodeAndAmount = new HashMap(); + if(!tousseDefinition.cleanedEntirely() && barcodeArray.length > 1){ + //获取每个清洗篮筐可组合的数量 + barcodeAndAmount = canBeIntegratedIntoTousseMap(tousseDefinition, barcodeArray, recyclingRecord.getId()); + } + if(MapUtils.isEmpty(barcodeAndAmount)){ + barcodeAndAmount.put(basketBarcode, json.getAmount()); + } + StringBuffer basketName = new StringBuffer(); for (Entry entry : barcodeAndAmount.entrySet()) { basketBarcode = entry.getKey(); Integer amount = entry.getValue(); @@ -6798,7 +6824,7 @@ */ @Override public JSONObject recycleTousseIntoBasket(String materialsInfo, String tousseDefinitionId, Integer amount, String idCardBarcode, - String params,String tousseIntoBasketInfo,Long recyclingApplicationId, boolean foreignTousseInvoicedAndNoUse){ + String params,String tousseIntoBasketInfo,Long recyclingApplicationId){ String msg = ""; JSONObject data = new JSONObject(); @@ -6838,13 +6864,13 @@ return JSONUtil.buildJsonObject(false, td.getName() + "已被终止!"); } isSecondRecycleForForeignTousse = ip.isSecondRecycleForForeignTousse(); - if(foreignTousseInvoicedAndNoUse){ - isSecondRecycleForForeignTousse = true; - } } int packAmount = 0;//已装配数量 int invoiceAmount = 0;//已发货数量 - if(amount < 0 || foreignTousseInvoicedAndNoUse){ + boolean enableSecondRecyclingAfterInvoiceFunction = CssdUtils.getSystemSetConfigByNameBool("enableSecondRecyclingAfterInvoiceFunction", false); + JSONArray foreignTousseInvoicedAndNoUseInfo = null; + if(amount < 0 && DatabaseUtil.isPoIdValid(recyclingApplicationId) + || enableSecondRecyclingAfterInvoiceFunction && ip != null && ip.isForeignTousseAppliaction()){ if(DatabaseUtil.isPoIdValid(recyclingApplicationId)){ List tousseInstances = objectDao.findBySql( TousseInstance.class.getSimpleName(), String.format("where invoicePlanID=%s and tousseDefinition.id=%s ", @@ -6857,12 +6883,24 @@ } if (CollectionUtils.isNotEmpty(tousseInstances)) { packAmount = tousseInstances.size(); //已装配数量 + foreignTousseInvoicedAndNoUseInfo = new JSONArray(); for (TousseInstance tousseInstance : tousseInstances) { if (DatabaseUtil.isPoIdValid(tousseInstance.getInvoice_id())) { ++invoiceAmount; } - if(foreignTousseInvoicedAndNoUse && !(TousseInstance.STATUS_SHIPPED.equals(tousseInstance.getStatus()) || TousseInstance.STATUS_SIGNED.equals(tousseInstance.getStatus()))){ - return JSONUtil.buildJsonObject(false,tousseInstance.getTousseDefinitionName()+"状态为"+tousseInstance.getStatus()+",不能直接二次回收"); + if(enableSecondRecyclingAfterInvoiceFunction + && ip.isForeignTousseAppliaction() + && !DatabaseUtil.isPoIdValid(tousseInstance.getUseRecord_id())){ + if(TousseInstance.STATUS_SHIPPED.equals(tousseInstance.getStatus()) || TousseInstance.STATUS_SIGNED.equals(tousseInstance.getStatus())){ + isSecondRecycleForForeignTousse = true; + JSONObject tiVo = new JSONObject(); + tiVo.put("tousseName", tousseInstance.getTousseName()); + tiVo.put("barcode", tousseInstance.getBarcode()); + tiVo.put("status", tousseInstance.getStatus()); + foreignTousseInvoicedAndNoUseInfo.add(tiVo); + }else{ + return JSONUtil.buildJsonObject(false,tousseInstance.getTousseDefinitionName()+"状态为"+tousseInstance.getStatus()+",不能直接二次回收"); + } } } } @@ -7097,6 +7135,7 @@ } } JSONObject obj = JSONUtil.buildJsonObject(true, msg); + obj.put("foreignTousseInvoicedAndNoUseInfo", foreignTousseInvoicedAndNoUseInfo); obj.put("data", data); return obj; } @@ -10422,7 +10461,10 @@ * @param deleteTousseItems 未入筐就删除的包 */ private void splitForeignTousseApplication(RecyclingRecord record, InvoicePlan invoicePlan, List basketItemJson, JSONArray deleteTousseItems){ - out : if(invoicePlan != null && InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(invoicePlan.getType()) && CollectionUtils.isNotEmpty(basketItemJson)){ + out : if(invoicePlan != null && InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(invoicePlan.getType()) + && + (InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE.equals(invoicePlan.getRecyclingStatus()) || InvoicePlan.RECYCLINGSTATUS_PARTAWAITRECEIVE.equals(invoicePlan.getRecyclingStatus())) + && CollectionUtils.isNotEmpty(basketItemJson)){ ForeignTousseApplication oldFta = (ForeignTousseApplication)invoicePlan; List items = oldFta.getApplicationItems(); if(CollectionUtils.isEmpty(items)){ @@ -10547,11 +10589,4 @@ } } } - @Override - public JSONObject recycleTousseIntoBasket(String materials, - String tousseDefinitionId, Integer amount, String idCardBarcode, - String params, String tousseIntoBasketInfo, - Long recyclingApplicationId) { - return recycleTousseIntoBasket(materials, tousseDefinitionId, amount, idCardBarcode, params, tousseIntoBasketInfo, recyclingApplicationId, false); - } } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/dwr/table/RecyclingRecordTableManager.java =================================================================== diff -u -r37831 -r37874 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/dwr/table/RecyclingRecordTableManager.java (.../RecyclingRecordTableManager.java) (revision 37831) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/dwr/table/RecyclingRecordTableManager.java (.../RecyclingRecordTableManager.java) (revision 37874) @@ -372,8 +372,8 @@ * 篮筐是否装满 * @return */ - public String getTousseIntoBasketAmount(String materials, String tousseDefinitionId ,Integer amount, String idCardBarcode, String params,String tousseIntoBasketInfo,Long recyclingApplicationId, boolean foreignTousseInvoicedAndNoUse){ - JSONObject result= recyclingRecordManager.recycleTousseIntoBasket(materials, tousseDefinitionId, amount, idCardBarcode, params,tousseIntoBasketInfo,recyclingApplicationId,foreignTousseInvoicedAndNoUse); + public String getTousseIntoBasketAmount(String materials, String tousseDefinitionId ,Integer amount, String idCardBarcode, String params,String tousseIntoBasketInfo,Long recyclingApplicationId){ + JSONObject result= recyclingRecordManager.recycleTousseIntoBasket(materials, tousseDefinitionId, amount, idCardBarcode, params,tousseIntoBasketInfo,recyclingApplicationId); return result.toString(); } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java =================================================================== diff -u -r37811 -r37874 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java (.../RecyclingApplicationTableManager.java) (revision 37811) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java (.../RecyclingApplicationTableManager.java) (revision 37874) @@ -454,7 +454,7 @@ return jsonObject.toString(); } - public OpenToBeRecycledRecordVo getRecyclingApplicationForRecycle(String id, boolean foreignTousseInvoicedAndNoUse) { + public OpenToBeRecycledRecordVo getRecyclingApplicationForRecycle(String id) { InvoicePlan invoicePlan = invoicePlanManager.get(id); if (invoicePlan != null && invoicePlan.getCommittedStatus() && !invoicePlan.readed()) { @@ -463,7 +463,7 @@ } String operationInfo = ""; Map specialInfectionMap = specialInfectionManager.getSpecialInfectionMap(); - OpenToBeRecycledRecordVo resultVo = invoicePlanManager.getOpenToBeRecycledRecordVo(invoicePlan,true,specialInfectionMap,foreignTousseInvoicedAndNoUse); + OpenToBeRecycledRecordVo resultVo = invoicePlanManager.getOpenToBeRecycledRecordVo(invoicePlan,true,specialInfectionMap); if(resultVo != null){ operationInfo = String.format("打开了待回收列表的%s,单号:%s", resultVo.getType(),resultVo.getSerialNumber()); List items = resultVo.getApplicationItems();