Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r34769 -r34770 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 34769) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 34770) @@ -4031,6 +4031,7 @@ if (isBorrowingApplicationForm) { vo.setAlsoAmount(item.getAlreadySignedAmount()); } + vo.setPackageStatus(item.getPackageStatus()); itemVOs.add(vo); } } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r33915 -r34770 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 33915) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 34770) @@ -118,7 +118,7 @@ * @param sourceId 外来器械申请单id * @return */ - public PackingTask getForeignToussePackingTask(Long sourceId); + public List getForeignToussePackingTask(Long sourceId); public List findAllUnfinishedTask(String spell); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java =================================================================== diff -u -r34570 -r34770 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 34570) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 34770) @@ -8,6 +8,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.tools.hibernate.BasePoManager; /** @@ -53,7 +54,24 @@ * @param foreignTousseApplication 外来器械包申请单 */ public void foreignTousseReturn(ForeignTousseApplication foreignTousseApplication); + /** + * 确认归还 + * @param foreignTousseApplication + * @param tousseItemList + */ + public void confirmReturnPartOfTousseItem(ForeignTousseApplication foreignTousseApplication, List tousseItemList); + + /** + * 提前归还:提前归还的外来器械包,必须为已接收的状态, + * 1、在装配前提前归还的删除对应的装配任务及发货计划, + * 2、在装配后提前归还的废弃对应的已装配的器械包及删除发货计划 + * @param foreignTousseApplication + * @param tousseItems + */ + public void earlyReturnPartOfTousseItem(ForeignTousseApplication foreignTousseApplication, List tousseItems); + + /** * 判断外来器械包申请单关联的器械包实例是否已经使用。如果有一个器械包实例被使用了,则认为已经使用 * @param foreignTousseApplication * @return @@ -80,9 +98,21 @@ * @param returneeOfSupplier 外来器械供应商联系人(开启enableReturneeOfForeignTousseSupplier配置项时需要传) * @param returnMan 供应室归还人(开启enableReturneeOfForeignTousseSupplier配置项时需要传) */ - public void comfirmReturnOrEarlyReturn(List ids, String returnType, String returneeOfSupplier, String returnMan); + public void confirmReturnOrEarlyReturn(List ids, String returnType, String returneeOfSupplier, String returnMan); /** + * 批量确认归还或者提前归还,支持部分物品归还 + * @param id 需要归还的外来申请单id + * @param tousseItemIds 需要归还的外来申请单申请项TousseItem的id的集合 + * @param returnType 归还的类型(值有两种情况:“确认归还”、“提前归还”) + * @param returneeOfSupplier 外来器械供应商联系人(开启enableReturneeOfForeignTousseSupplier配置项时需要传) + * @param returnMan 供应室归还人(开启enableReturneeOfForeignTousseSupplier配置项时需要传) + */ + public void confirmReturnOrEarlyReturnPartOfTousseItem(Long id, + List asList, String returnType, String returneeOfSupplier, + String returnMan); + + /** * 更改外来器械申请单的病人信息; * 如果更改了(住院号和病人姓名)或(诊疗号和病人姓名),并且没用勾选全部外来器械包, * 则需要将更改后器械包从原申请单中拆分出来,生成新的外来器械申请单;(GDSZYY-91) Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r34640 -r34770 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 34640) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 34770) @@ -6864,12 +6864,12 @@ } @Override - public PackingTask getForeignToussePackingTask(Long sourceId) { + public List getForeignToussePackingTask(Long sourceId) { if(DatabaseUtil.isPoIdValid(sourceId)){ String hql = "where po.tousseDefinition.tousseType='" + TousseDefinition.PACKAGE_TYPE_FOREIGN + "'"; hql += " and po.tousseDefinition.invoicePlanID = " + sourceId; hql += " and po.taskType=" + PackingTask.TASK_RECYCLINGRECORD; - return (PackingTask) objectDao.getBySql(PackingTask.class.getSimpleName(), hql); + return objectDao.findBySql(PackingTask.class.getSimpleName(), hql); } return null; } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java =================================================================== diff -u -r33781 -r34770 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java (.../ForeignTousseApplication.java) (revision 33781) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java (.../ForeignTousseApplication.java) (revision 34770) @@ -10,6 +10,7 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; @@ -23,6 +24,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.security.acls.AclFieldsObject; import com.forgon.tools.hibernate.ObjectDao; @@ -400,6 +402,31 @@ this.recylingTime = recylingTime; } + /** + * 根据外来器械包申请单物品计算归还状态 + * @return + */ + public String calReturnStatus() { + List applicationItems = this.getApplicationItems(); + if(CollectionUtils.isNotEmpty(applicationItems)){ + int returnAmount = 0; + for (TousseItem tousseItem : applicationItems) { + if(StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_RETURNED) + || StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_INADVANCERETURNED) + || (tousseItem.getIsTerminated() != null && tousseItem.getIsTerminated())){ + returnAmount++; + } + } + if(returnAmount == applicationItems.size()){ + return ForeignTousseApplication.RETURN_STATUS_RETURNED; + }else if(returnAmount > 0 && returnAmount < applicationItems.size()){ + return ForeignTousseApplication.RETURN_STATUS_PARTIALLY_RETURNED; + } + } + + return ForeignTousseApplication.RETURN_STATUS_UNRETURNED; + } + public String getPackageStatus() { return packageStatus; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/dwr/table/ForeignTousseApplicationTableManager.java =================================================================== diff -u -r31074 -r34770 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/dwr/table/ForeignTousseApplicationTableManager.java (.../ForeignTousseApplicationTableManager.java) (revision 31074) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/dwr/table/ForeignTousseApplicationTableManager.java (.../ForeignTousseApplicationTableManager.java) (revision 34770) @@ -186,12 +186,12 @@ ForeignTousseApplication ftApplication = foreignTousseApplicationManager.get(id); if (ftApplication != null && ftApplication.recyclingStatusRecycled() && - !ForeignTousseApplication.APPLICATION_STATUS_RETRUN.equals(ftApplication.getPackageStatus())) { + !ForeignTousseApplication.APPLICATION_STATUS_RETRUN.equals(ftApplication.calReturnStatus())) { disableReturn = false; } if(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE.equals(ftApplication.getRecyclingStatus()) || - ForeignTousseApplication.APPLICATION_STATUS_RETRUN.equals(ftApplication.getPackageStatus())){ + ForeignTousseApplication.APPLICATION_STATUS_RETRUN.equals(ftApplication.calReturnStatus())){ disableEarlyReturn = true; } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java =================================================================== diff -u -r34570 -r34770 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java (.../ForeignTousseApplicationAction.java) (revision 34570) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/action/ForeignTousseApplicationAction.java (.../ForeignTousseApplicationAction.java) (revision 34770) @@ -291,6 +291,7 @@ jsonobj.put("tousseDefinitionId", td.getId()); jsonobj.put("supplierName", tousseItem.getSupplierName()); jsonobj.put("oldSupplierName", tousseItem.getSupplierName()); + jsonobj.put("packageStatus", tousseItem.getPackageStatus()); jsonobj.put("amount", tousseItem.getAmount()); jsonobj.put("includeImplant", ""); jsonobj.put("price", td.getPrice() == null ? 0 : td.getPrice()); @@ -661,14 +662,33 @@ if (StringTools.isNotBlank(ids)) { JSONObject result = JSONUtil.buildJsonObject(true, String.format("%s成功!", returnType)); try { - foreignTousseApplicationManager.comfirmReturnOrEarlyReturn(Arrays.asList(ids.split(";")), returnType, returneeOfSupplier, returnMan); + foreignTousseApplicationManager.confirmReturnOrEarlyReturn(Arrays.asList(ids.split(";")), returnType, returneeOfSupplier, returnMan); } catch (Exception e) { e.printStackTrace(); result = JSONUtil.buildJsonObject(false, e.getMessage()); } StrutsResponseUtils.output(result); } } + + /** + * 外来器械包申请单确认归还或者提前归还,支持部分归还. + */ + public void comfirmReturnOrEarlyReturnPartOfTousseItem() { + Long id = StrutsParamUtils.getPraramLongValue("id", null); + String returnType = StrutsParamUtils.getPraramValue("returnType", ""); + String returneeOfSupplier = StrutsParamUtils.getPraramValue("returneeOfSupplier1", ""); + String returnMan = StrutsParamUtils.getPraramValue("returnMan1", ""); + String tousseItemIds = StrutsParamUtils.getPraramValue("tousseItemIds", ""); + JSONObject result = JSONUtil.buildJsonObject(true, String.format("%s成功!", returnType)); + try { + foreignTousseApplicationManager.confirmReturnOrEarlyReturnPartOfTousseItem(id, Arrays.asList(tousseItemIds.split(";")), returnType, returneeOfSupplier, returnMan); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + StrutsResponseUtils.output(result); + } /** * 外来器械申请单拆分检查 @@ -712,11 +732,21 @@ List foreignTousseApplications = foreignTousseApplicationManager.findForeignTousseApplication(tousseName, supplierName); if(CollectionUtils.isNotEmpty(foreignTousseApplications)){ JSONObject result = JSONUtil.buildJsonObject(true); - for (ForeignTousseApplication foreignTousseApplication : foreignTousseApplications) { + /*for (ForeignTousseApplication foreignTousseApplication : foreignTousseApplications) { if(!StringUtils.equals(ForeignTousseApplication.APPLICATION_STATUS_RETRUN, foreignTousseApplication.getPackageStatus())){ result = JSONUtil.buildJsonObject(false, "该外来器械上次申请后未归还,请及时归还"); break; } + }*/ + for (ForeignTousseApplication foreignTousseApplication : foreignTousseApplications) { + for (TousseItem tousseItem : foreignTousseApplication.getApplicationItems()) { + if(!StringUtils.equals(ForeignTousseApplication.APPLICATION_STATUS_RETRUN, tousseItem.getPackageStatus()) + && StringUtils.equals(tousseName, tousseItem.getTousseName()) + && StringUtils.equals(supplierName, tousseItem.getSupplierName())){ + result = JSONUtil.buildJsonObject(false, "该外来器械上次申请后未归还,请及时归还"); + break; + } + } } StrutsResponseUtils.output(result); }else{ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ApplicationItemVO.java =================================================================== diff -u -r26310 -r34770 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ApplicationItemVO.java (.../ApplicationItemVO.java) (revision 26310) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ApplicationItemVO.java (.../ApplicationItemVO.java) (revision 34770) @@ -75,6 +75,11 @@ * 加急等级 */ private String urgentLevel; + + /** + * 外来器械包包状态HBTSGRYY-11 + */ + private String packageStatus; public String getName() { return name; @@ -236,6 +241,14 @@ this.urgentLevel = urgentLevel; } + public String getPackageStatus() { + return packageStatus; + } + + public void setPackageStatus(String packageStatus) { + this.packageStatus = packageStatus; + } + @Override public String toString() { return "ApplicationItemVO{" + Index: ssts-web/src/main/webapp/dataUpdater/sqls/5.0.2_5.0.3.sql =================================================================== diff -u --- ssts-web/src/main/webapp/dataUpdater/sqls/5.0.2_5.0.3.sql (revision 0) +++ ssts-web/src/main/webapp/dataUpdater/sqls/5.0.2_5.0.3.sql (revision 34770) @@ -0,0 +1 @@ +update TousseItem set packageStatus = (select packageStatus from ForeignTousseApplication where id = TousseItem.recyclingApplication_ID) where recyclingApplication_ID in (select id from ForeignTousseApplication) and packageStatus is null; \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/tousseitem/TousseItem.java =================================================================== diff -u -r33819 -r34770 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/tousseitem/TousseItem.java (.../TousseItem.java) (revision 33819) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/tousseitem/TousseItem.java (.../TousseItem.java) (revision 34770) @@ -23,6 +23,7 @@ import com.forgon.Constants; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.idpredicate.IDAble; @@ -359,6 +360,11 @@ */ private String remarkOfApplyGoods; + /** + * 包状态(HBTSGRYY-11外来器械申请单单上的外来器械包新增字段“包状态”) + */ + private String packageStatus; + public String getSpelling() { return spelling; } @@ -1158,7 +1164,14 @@ this.remarkOfApplyGoods = remarkOfApplyGoods; } - + public String getPackageStatus() { + return packageStatus; + } + + public void setPackageStatus(String packageStatus) { + this.packageStatus = packageStatus; + } + @Override public String toString() { return "{id:" + id + ", tousseName:'" + tousseName Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestForeignTousseGoodRecyclingApplication.java =================================================================== diff -u -r31795 -r34770 --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestForeignTousseGoodRecyclingApplication.java (.../TestForeignTousseGoodRecyclingApplication.java) (revision 31795) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestForeignTousseGoodRecyclingApplication.java (.../TestForeignTousseGoodRecyclingApplication.java) (revision 34770) @@ -155,7 +155,7 @@ //断言申请单的状态 assertEquals(result.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); - assertEquals(result.getPackageStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); + //assertEquals(result.getPackageStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r34582 -r34770 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 34582) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 34770) @@ -700,6 +700,8 @@ } }else{ tousseItem = new TousseItem(); + //外来器械包初始回收状态为“待接收”; + tousseItem.setPackageStatus(ForeignTousseApplication.RECYCLINGSTATUS_AWAITRECEIVE); } if(obj.optInt("amount") <= 0){ throw new RuntimeException("外来器械数量错误!"); @@ -1462,66 +1464,38 @@ @Override public void foreignTousseReturn( ForeignTousseApplication foreignTousseApplication) { - if(foreignTousseApplication != null){ - Date now = new Date(); - String oldStatus = foreignTousseApplication.getPackageStatus(); - foreignTousseApplication.setReturnTime(now); - //归还人外来器械包优化: enableReturneeOfForeignTousseSupplier,配置项值为true时,原来归还人命名改为供应室归还人, - //取自前台输入的用户名称;否则取当前登录用户名称 - Boolean enableReturneeOfForeignTousseSupplier = - ConfigUtils.getSystemSetConfigByNameBool("enableReturneeOfForeignTousseSupplier"); - if(!enableReturneeOfForeignTousseSupplier){ - foreignTousseApplication.setReturnMan(AcegiHelper.getLoginUserFullName()); + List unReturnTousseItemList = new ArrayList(); + List applicationItems = foreignTousseApplication.getApplicationItems(); + if(CollectionUtils.isNotEmpty(applicationItems)){ + for (TousseItem tousseItem : applicationItems) { + if(!StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_RETURNED) + && !StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_INADVANCERETURNED) + && (tousseItem.getIsTerminated() == null || !tousseItem.getIsTerminated())){ + unReturnTousseItemList.add(tousseItem); + } } - foreignTousseApplication.setPackageStatus(ForeignTousseApplication.APPLICATION_STATUS_RETRUN); + } + if(CollectionUtils.isNotEmpty(unReturnTousseItemList)){ - String[] discardStatus = new String[]{ - TousseInstance.STATUS_PACKED ,TousseInstance.STATUS_REVIEWED ,TousseInstance.STATUS_STERILED, - TousseInstance.STATUS_SHIPPED ,TousseInstance.STATUS_SIGNED ,TousseInstance.STATUS_STERILING , - TousseInstance.STATUS_RECYCLED ,TousseInstance.STATUS_WAIT_FOR_RECALL, - TousseInstance.STATUS_RECALLED}; - //对器械包的处理,需要废弃 - List goodsStockList = new LinkedList(); - for(TousseInstance tousseInstance : foreignTousseApplication.getTousseInstanceList(objectDao)){ - if(ArrayUtils.contains(discardStatus, tousseInstance.getStatus())){ - tousseInstanceManager.discardTousseInstance(tousseInstance, AcegiHelper.getLoginUserFullName(), - ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN, now); - goodsStockManager.addToList(goodsStockList, tousseInstance, wareHouseManager.getWareHouseById(tousseInstance.getWareHouseId())); - //GoodsStock gs = TousseInstanceUtils.newGoodsStock(tousseInstance, wareHouseManager.getWareHouseById(tousseInstance.getWareHouseId())); -// if(gs != null){ -// goodsStockList.add(gs); -// } + List returnTousseItems = new ArrayList(); + List earlyReturnTousseItems = new ArrayList(); + + for (TousseItem tousseItem : unReturnTousseItemList) { + if(StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RECYCLINGSTATUS_SECRECYCLED) + || StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RECYCLINGSTATUS_RECYCLED)){ + returnTousseItems.add(tousseItem); + }else{ + earlyReturnTousseItems.add(tousseItem); } } - //扣减仓库库存 - if(CollectionUtils.isNotEmpty(goodsStockList)){ - goodsStockManager.saveOrUpdateGoodsStock(goodsStockList, GoodsStockManager.MODE_OUTSTOCK); + + if(CollectionUtils.isNotEmpty(returnTousseItems)){ + this.confirmReturnPartOfTousseItem(foreignTousseApplication, returnTousseItems); } - //有发货计划,要终止发货计划 - String[] terminateStatus = new String[]{ - ForeignTousseApplication.APPLICATION_STATUS_SHIPPED, - ForeignTousseApplication.APPLICATION_STATUS_SIGNED, - ForeignTousseApplication.APPLICATION_STATUS_WAHS - }; - if(ArrayUtils.contains(terminateStatus, oldStatus)){ - invoicePlanManager.terminateInvoicePlan(foreignTousseApplication, AcegiHelper.getLoginUserFullName(), ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN); - //删除对应的装配任务。由于invoicePlanManager.terminateInvoicePlan方法没有删除外来器械对应的装配任务,所以此处再处理一下 - PackingTask task = packingManager.getForeignToussePackingTask(foreignTousseApplication.getId()); - if(task != null && task.getUnPackAmount() > 0){ - packingManager.delete(task,ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN); - } - }else if(TousseInstance.STATUS_USED.equals(oldStatus)){ - //DGSETYY-19 外来器械提前归还 回收状态变为已提前归还 - foreignTousseApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_RETURNEDINADVANCE); - //删除对应的装配任务。由于invoicePlanManager.terminateInvoicePlan方法没有删除外来器械对应的装配任务,所以此处再处理一下 - PackingTask task = packingManager.getForeignToussePackingTask(foreignTousseApplication.getId()); - if(task != null && task.getUnPackAmount() > 0){ - packingManager.delete(task,ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN); - } - objectDao.saveOrUpdate(foreignTousseApplication); + + if(CollectionUtils.isNotEmpty(earlyReturnTousseItems)){ + this.earlyReturnPartOfTousseItem(foreignTousseApplication, earlyReturnTousseItems); } - //【归还后释放清洗篮筐】值为“是”:在外来器械包申请单管理界面,将外来器械包归还之后,释放外来器械包所在的清洗篮筐,清洗篮筐的状态变为空闲。SZSDSRMYY-83 - releaseBasketAfterReturn(foreignTousseApplication); } } @@ -1601,7 +1575,7 @@ } @Override - public void comfirmReturnOrEarlyReturn(List ids, String returnType, String returneeOfSupplier, String returnMan) { + public void confirmReturnOrEarlyReturn(List ids, String returnType, String returneeOfSupplier, String returnMan) { if (CollectionUtils.isNotEmpty(ids) && (ForeignTousseApplication.ACTION_TYPE_CONFIRM_RETURN.equals(returnType) || ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN.equals(returnType))) { @@ -1634,8 +1608,29 @@ foreignTousseApplication.setReturnMan(returnMan); } } - for (ForeignTousseApplication foreignTousseApplication : list) { - this.foreignTousseReturn(foreignTousseApplication); + try { + for (ForeignTousseApplication foreignTousseApplication : list) { + List tousseItemList = new ArrayList(); + List applicationItems = foreignTousseApplication.getApplicationItems(); + if(CollectionUtils.isNotEmpty(applicationItems)){ + for (TousseItem tousseItem : applicationItems) { + if(!StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_RETURNED) + && !StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_INADVANCERETURNED) + && (tousseItem.getIsTerminated() == null || !tousseItem.getIsTerminated())){ + tousseItemList.add(tousseItem); + } + } + } + if(CollectionUtils.isNotEmpty(tousseItemList)){ + if(ForeignTousseApplication.ACTION_TYPE_CONFIRM_RETURN.equals(returnType)){ + this.confirmReturnPartOfTousseItem(foreignTousseApplication, tousseItemList); + }else if(ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN.equals(returnType)){ + this.earlyReturnPartOfTousseItem(foreignTousseApplication, tousseItemList); + } + } + } + } catch (Exception e) { + throw new RuntimeException(String.format("部分申请单不能%s!", returnType)); } } } @@ -2054,7 +2049,7 @@ String recyclingStatus = ForeignTousseApplication.RECYCLINGSTATUS_AWAITRECEIVE; // 部分接收的器械包申请单需要重新设置包状态和回收状态: - if(StringUtils.equals(ForeignTousseApplication.RECYCLINGSTATUS_PARTAWAITRECEIVE, splitApplication.getPackageStatus())){ + if(StringUtils.equals(ForeignTousseApplication.RECYCLINGSTATUS_PARTAWAITRECEIVE, splitApplication.getRecyclingStatus())){ int recyclingAmount = 0; List applicationItems = splitApplication.getApplicationItems(); for (TousseItem tousseItem : applicationItems) { @@ -2721,4 +2716,235 @@ return result; } + @Override + public void confirmReturnOrEarlyReturnPartOfTousseItem(Long foreignTousseApplicationId, + List tousseItemIds, String returnType, String returneeOfSupplier, + String returnMan) { + if(!DatabaseUtil.isPoIdValid(foreignTousseApplicationId)){ + throw new SystemException("申请单ID无效!"); + } + if(CollectionUtils.isEmpty(tousseItemIds)){ + throw new SystemException("请先勾选需要归还的器械包后再进行操作!"); + } + + ForeignTousseApplication foreignTousseApplication = this.get(foreignTousseApplicationId); + if(foreignTousseApplication == null){ + throw new SystemException("申请单不存在或者已经被删除!"); + } + + @SuppressWarnings("unchecked") + List tousseItemList = objectDao.findByIds(TousseItem.class.getSimpleName(), tousseItemIds); + if(CollectionUtils.isEmpty(tousseItemList)){ + throw new SystemException("请先勾选需要归还的器械包后再进行操作!"); + } + + // enableReturneeOfForeignTousseSupplier 启用外来器械厂家归还人, 增加厂家归还人字段,并将现有的归还人改为供应室归还人 + Boolean enableReturneeOfForeignTousseSupplier = + ConfigUtils.getSystemSetConfigByNameBool("enableReturneeOfForeignTousseSupplier"); + if(enableReturneeOfForeignTousseSupplier){ + // 批量确认归还和批量提前归还时,必须选择同一厂家进行归还 + foreignTousseApplication.setReturneeOfSupplier(returneeOfSupplier); + foreignTousseApplication.setReturnMan(returnMan); + } + + if (ForeignTousseApplication.ACTION_TYPE_CONFIRM_RETURN.equals(returnType)) { + this.confirmReturnPartOfTousseItem(foreignTousseApplication, tousseItemList); + } else if (ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN.equals(returnType)){ + this.earlyReturnPartOfTousseItem(foreignTousseApplication, tousseItemList); + } else { + throw new SystemException("returnType参数无效!"); + } + + } + + /** + * 提前归还:提前归还的外来器械包,必须为已接收的状态, + * 1、在装配前提前归还的删除对应的装配任务及发货计划, + * 2、在装配后提前归还的废弃对应的已装配的器械包及删除发货计划 + * @param foreignTousseApplication + * @param tousseItems + */ + @Override + public void earlyReturnPartOfTousseItem( + ForeignTousseApplication foreignTousseApplication, + List tousseItems) { + + if(foreignTousseApplication != null && CollectionUtils.isNotEmpty(tousseItems)){ + + if(StringUtils.equals(foreignTousseApplication.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE)){ + throw new SystemException("申请单的回收状态是“" + InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE + "”状态,无法提前归还。"); + } + + for (TousseItem tousseItem : tousseItems) { + if(StringUtils.equals(tousseItem.getPackageStatus(), InvoicePlan.RETURN_STATUS_RETURNED) + || StringUtils.equals(tousseItem.getPackageStatus(), InvoicePlan.RETURN_STATUS_INADVANCERETURNED)){ + throw new SystemException(String.format("%s的包状态为“%s”,无法再进行归还。", tousseItem.getTousseName(), tousseItem.getPackageStatus())); + } + if(tousseItem.getIsTerminated() != null && tousseItem.getIsTerminated()){ + throw new SystemException(String.format("%s的已终止,无法再进行归还。", tousseItem.getTousseName())); + } + } + + //即将归还的物品 + Map returnTousseItemMap = new HashMap(); + List willReturnTousseItems = new ArrayList(); + if(CollectionUtils.isNotEmpty(tousseItems)){ + for (TousseItem tousseItem : tousseItems) { + InvoicePlan ip = tousseItem.getInvoicePlan(); + if(ip != null && ip.getId() != null && foreignTousseApplication.getId() != null + && ip.getId().longValue() == foreignTousseApplication.getId().longValue()){ + returnTousseItemMap.put(tousseItem.getTousseDefinitionId(), tousseItem); + willReturnTousseItems.add(tousseItem); + } + } + } + + if(MapUtils.isEmpty(returnTousseItemMap)){ + throw new SystemException("需要归还的器械包不存在或者已经删除"); + } + + //废弃器械包 + Date returnDate = new Date(); + String[] discardStatus = new String[]{ + TousseInstance.STATUS_PACKED ,TousseInstance.STATUS_REVIEWED ,TousseInstance.STATUS_STERILED, + TousseInstance.STATUS_SHIPPED ,TousseInstance.STATUS_SIGNED ,TousseInstance.STATUS_STERILING , + TousseInstance.STATUS_RECYCLED ,TousseInstance.STATUS_WAIT_FOR_RECALL, + TousseInstance.STATUS_RECALLED}; + //对器械包的处理,需要废弃 + List goodsStockList = new LinkedList(); + for(TousseInstance tousseInstance : foreignTousseApplication.getTousseInstanceList(objectDao)){ + if(ArrayUtils.contains(discardStatus, tousseInstance.getStatus())){ + if(returnTousseItemMap.get(tousseInstance.getTousseDefinition().getId()) != null){ + tousseInstanceManager.discardTousseInstance(tousseInstance, AcegiHelper.getLoginUserFullName(), + ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN, returnDate); + goodsStockManager.addToList(goodsStockList, tousseInstance, wareHouseManager.getWareHouseById(tousseInstance.getWareHouseId())); + } + } + } + //扣减仓库库存 + if(CollectionUtils.isNotEmpty(goodsStockList)){ + goodsStockManager.saveOrUpdateGoodsStock(goodsStockList, GoodsStockManager.MODE_OUTSTOCK); + } + //删除对应的装配任务。由于invoicePlanManager.terminateInvoicePlan方法没有删除外来器械对应的装配任务,所以此处再处理一下 + List taskList = packingManager.getForeignToussePackingTask(foreignTousseApplication.getId()); + if(CollectionUtils.isNotEmpty(taskList)){ + for (PackingTask task : taskList) { + TousseDefinition td = task.getTousseDefinition(); + if(returnTousseItemMap.get(td.getId()) != null){ + if(task.getUnPackAmount() > 0){ + packingManager.delete(task,ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN); + } + } + } + } + //修改申请项的包状态为“已归还”,并终止申请项 + if(CollectionUtils.isNotEmpty(willReturnTousseItems)){ + List willTerminateTousseItems = new ArrayList(); + for (TousseItem tousseItem : willReturnTousseItems) { + if(!StringUtils.equals(tousseItem.getPackageStatus(), InvoicePlan.RETURN_STATUS_RETURNED) + && !StringUtils.equals(tousseItem.getPackageStatus(), InvoicePlan.RETURN_STATUS_INADVANCERETURNED)){ + tousseItem.setPackageStatus(InvoicePlan.RETURN_STATUS_INADVANCERETURNED); + objectDao.saveOrUpdate(tousseItem); + //终止申请项 + if(!StringUtils.equals(tousseItem.getPackageStatus(), TousseInstance.STATUS_USED)){ + //已使用的物品不终止 + willTerminateTousseItems.add(tousseItem); + } + } + } + if(CollectionUtils.isNotEmpty(willTerminateTousseItems)){ + invoicePlanManager.terminateTousseItems(willTerminateTousseItems); + } + } + //设置外来器械包申请单的归还信息 + returnForeignTousseApplication(foreignTousseApplication, ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN, returnDate); + } + } + + /** + * 确认归还 + * @param foreignTousseApplication + * @param tousseItemList + */ + @Override + public void confirmReturnPartOfTousseItem( + ForeignTousseApplication foreignTousseApplication, + List tousseItemList) { + + if(!StringUtils.equals(foreignTousseApplication.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_RECYCLED) + && !StringUtils.equals(foreignTousseApplication.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_SECRECYCLED) + && !StringUtils.equals(foreignTousseApplication.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE)){ + throw new SystemException(String.format("申请单的回收状态不是“%s”、“%s”和“%s”,无法进行归还", + InvoicePlan.RECYCLINGSTATUS_RECYCLED, + InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE, + InvoicePlan.RECYCLINGSTATUS_SECRECYCLED)); + } + + for (TousseItem tousseItem : tousseItemList) { + if(StringUtils.equals(tousseItem.getPackageStatus(), InvoicePlan.RETURN_STATUS_RETURNED) + || StringUtils.equals(tousseItem.getPackageStatus(), InvoicePlan.RETURN_STATUS_INADVANCERETURNED)){ + throw new SystemException(String.format("%s的包状态为“%s”,无法再进行归还。", tousseItem.getTousseName(), tousseItem.getPackageStatus())); + } + if(tousseItem.getIsTerminated() != null && tousseItem.getIsTerminated()){ + throw new SystemException(String.format("%s的已终止,无法再进行归还。", tousseItem.getTousseName())); + } + } + + for (TousseItem tousseItem : tousseItemList) { + tousseItem.setPackageStatus(ForeignTousseApplication.RETURN_STATUS_RETURNED); + objectDao.saveOrUpdate(tousseItem); + } + //设置外来器械包申请单的归还信息 + returnForeignTousseApplication(foreignTousseApplication, ForeignTousseApplication.ACTION_TYPE_CONFIRM_RETURN, new Date()); + } + + /** + * 设置外来器械包申请单的归还信息:归还人、归还日期;如果是提前归还,并且整单物品都已经归还,回收状态要设置为“已提前归还” + * @param foreignTousseApplication 外来器械包申请单 + * @param actionType 归还类型:确认归还或者提前归还 + * @param returnDate 归还日期 + */ + private void returnForeignTousseApplication( + ForeignTousseApplication foreignTousseApplication, String actionType, Date returnDate) { + foreignTousseApplication.setReturnTime(returnDate); + //归还人外来器械包优化: enableReturneeOfForeignTousseSupplier,配置项值为true时,原来归还人命名改为供应室归还人, + //取自前台输入的用户名称;否则取当前登录用户名称 + Boolean enableReturneeOfForeignTousseSupplier = + ConfigUtils.getSystemSetConfigByNameBool("enableReturneeOfForeignTousseSupplier"); + if(!enableReturneeOfForeignTousseSupplier){ + String returnMan = foreignTousseApplication.getReturnMan(); + if(StringUtils.isNotBlank(returnMan)){ + returnMan = returnMan + ";" + AcegiHelper.getLoginUserFullName(); + }else{ + returnMan = AcegiHelper.getLoginUserFullName(); + } + foreignTousseApplication.setReturnMan(returnMan); + } + //如果是提前归还,并且整单物品都已经归还,回收状态要设置为“已提前归还” + if(StringUtils.equals(actionType, ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN)){ + List applicationItems = foreignTousseApplication.getApplicationItems(); + int returnTousseAmount = 0; + if(CollectionUtils.isNotEmpty(applicationItems)){ + for (TousseItem tousseItem : applicationItems) { + if(StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_RETURNED) + || StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_INADVANCERETURNED) + || (tousseItem.getIsTerminated() != null && tousseItem.getIsTerminated())){ + //已经归还或者已终止的物品都不能算是待归还物品 + returnTousseAmount++; + } + } + if(returnTousseAmount == applicationItems.size()){ + foreignTousseApplication.setRecyclingStatus(ForeignTousseApplication.RECYCLINGSTATUS_RETURNEDINADVANCE); + String remark = "【该申请单在" + + DateTools.getFormatDateStr(returnDate, DateTools.COMMON_DATE_HMS) + "被" + foreignTousseApplication.getReturnMan() + + "终止,原因:" + ForeignTousseApplication.ACTION_TYPE_EARLY_RETURN + "】"; + CssdUtils.appendRemarkOfInvoicePlan(foreignTousseApplication, remark); + } + } + } + objectDao.saveOrUpdate(foreignTousseApplication); + //【归还后释放清洗篮筐】值为“是”:在外来器械包申请单管理界面,将外来器械包归还之后,释放外来器械包所在的清洗篮筐,清洗篮筐的状态变为空闲。SZSDSRMYY-83 + releaseBasketAfterReturn(foreignTousseApplication); + } + } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java =================================================================== diff -u -r31763 -r34770 --- ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 31763) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 34770) @@ -2649,7 +2649,7 @@ AssertJUnit.assertTrue(ra.getTousseBarcodes().contains(foreignTousseInstance.getBarcode())); AssertJUnit.assertEquals(tousseItemList.size(), 2); AssertJUnit.assertEquals(foreignTousseApplication.getRecyclingStatus() , InvoicePlan.RECYCLINGSTATUS_RECYCLED); - AssertJUnit.assertEquals(foreignTousseApplication.getPackageStatus() , ForeignTousseApplication.APPLICATION_STATUS_RETRUN); + //AssertJUnit.assertEquals(foreignTousseApplication.getPackageStatus() , ForeignTousseApplication.APPLICATION_STATUS_RETRUN); }else{ AssertJUnit.assertFalse(ra.getTousseBarcodes().contains(foreignTousseInstance.getBarcode())); AssertJUnit.assertEquals(tousseItemList.size(), 1); Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java =================================================================== diff -u -r29175 -r34770 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java (.../ForeignProxyDisinfectionAction.java) (revision 29175) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java (.../ForeignProxyDisinfectionAction.java) (revision 34770) @@ -439,7 +439,7 @@ JsonConfig config = new JsonConfig(); config.setExcludes(new String[] { "foreignProxyItems", - "applicationItems", "invoice","foreignProxyDisinfection" }); + "applicationItems", "invoice","foreignProxyDisinfection", "adverseEventRecords" }); config.registerDefaultValueProcessor(Integer.class, new DefaultValueProcessor() { @Override Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r34769 -r34770 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 34769) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 34770) @@ -195,6 +195,10 @@ public final static String RETURN_STATUS_UNRETURNED = "未归还"; public final static String RETURN_STATUS_PARTIALLY_RETURNED = "部分归还"; public final static String RETURN_STATUS_RETURNED = "已归还"; + /** + * 已提前归还的器械包的包状态:提前归还HBTSGRYY-11 + */ + public final static String RETURN_STATUS_INADVANCERETURNED = "提前归还"; public final static String RETURN_STATUS_AWAITCONFIRM = "归还待确认"; /** Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r34723 -r34770 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 34723) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 34770) @@ -2894,7 +2894,7 @@ } // 当外来器械包登记了病人使用记录之后,那么包状态变为已使用 - updateForeignTousseApplication(invoicePlanIdMap); + updateForeignTousseApplication(invoicePlanIdMap, tousseInstanceList); // 添加器械实例使用记录GYEY-779 if(CollectionUtils.isNotEmpty(iDCardInstaceIdList)){ @SuppressWarnings("unchecked") @@ -2910,7 +2910,7 @@ * 当外来器械包登记了病人使用记录之后,那么申请单包状态变为已使用 * @param invoicePlanIdMap */ - private void updateForeignTousseApplication(Map> invoicePlanIdMap) { + private void updateForeignTousseApplication(Map> invoicePlanIdMap, List tousseInstanceList) { if(invoicePlanIdMap == null || invoicePlanIdMap.isEmpty()){ return; } @@ -2922,9 +2922,34 @@ if(CollectionUtils.isNotEmpty(appList)){ for (ForeignTousseApplication foreignTousseApplication : appList) { foreignTousseApplication.setPackageStatus(TousseInstance.STATUS_USED); + objectDao.saveOrUpdate(foreignTousseApplication); } - objectDao.batchSaveOrUpdate(appList); } + //更新外来器械包申请单上物品TousseItem的包状态 + if(CollectionUtils.isNotEmpty(tousseInstanceList) + && CollectionUtils.isNotEmpty(invoicePlanIdList)){ + List foreignTousseDefinitionIDList = new ArrayList(); + for (TousseInstance ti : tousseInstanceList) { + // 获取器械包的祖先包 + TousseDefinition tousseDefinition = ti.getTousseDefinition(); + if(!tousseDefinition.isForeignOrSplitTousse()){ + continue; + } + if(tousseDefinition.isSplit()){ + foreignTousseDefinitionIDList.add(tousseDefinition.getParentID()); + }else{ + foreignTousseDefinitionIDList.add(tousseDefinition.getId()); + } + } + if(CollectionUtils.isNotEmpty(foreignTousseDefinitionIDList)){ + String updateSql = String.format("update %s set packageStatus = '%s' where %s and %s ", + TousseItem.class.getSimpleName(), + TousseInstance.STATUS_USED, + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("recyclingApplication_ID", invoicePlanIdList), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionId", foreignTousseDefinitionIDList)); + objectDao.excuteSQL(updateSql); + } + } } /** @@ -3312,12 +3337,29 @@ } ForeignTousseApplication foreignTousseApplication = null; + TousseItem tousseItem = null; //使用记录转换成申请单的时候把外来器械的申请单“回收状态”改为“待回收” if(tousseInstance.getForeignTousseApp_id() != null){ foreignTousseApplication = (ForeignTousseApplication) objectDao .getByProperty(ForeignTousseApplication.class .getSimpleName(), "id", tousseInstance .getForeignTousseApp_id()); + if(foreignTousseApplication != null){ + Long tousseDefinitionId = tousseDefinition.getId(); + if(tousseDefinition.isSplit()){ + tousseDefinitionId = tousseDefinition.getParentID(); + } + List applicationItems = foreignTousseApplication.getApplicationItems(); + if(CollectionUtils.isNotEmpty(applicationItems)){ + for (TousseItem tousseItem2 : applicationItems) { + if(tousseItem2.getTousseDefinitionId() != null && tousseDefinitionId != null + && tousseItem2.getTousseDefinitionId().longValue() == tousseDefinitionId.longValue()){ + tousseItem = tousseItem2; + break; + } + } + } + } } //如果外来器械转换申请单要与其它的包合并时,后续会重新生成的新的申请单,且原申请单需要将状态调整 @@ -3377,8 +3419,17 @@ objectDao.saveOrUpdate(foreignTousseApplication); //再对该申请单进行确认归还处理(先判断外来器械申请单是否已经归还) - if(!StringUtils.equals(ForeignTousseApplication.APPLICATION_STATUS_RETRUN, foreignTousseApplication.getPackageStatus())){ - foreignTousseApplicationManager.foreignTousseReturn(foreignTousseApplication); + if(tousseItem != null && !StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_RETURNED) + && !StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RETURN_STATUS_INADVANCERETURNED) + && !(tousseItem.getIsTerminated() != null && tousseItem.getIsTerminated())){ + List tousseItems = new ArrayList(); + tousseItems.add(tousseItem); + if(StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RECYCLINGSTATUS_RECYCLED) + || StringUtils.equals(tousseItem.getPackageStatus(), ForeignTousseApplication.RECYCLINGSTATUS_SECRECYCLED)){ + foreignTousseApplicationManager.confirmReturnPartOfTousseItem(foreignTousseApplication, tousseItems); + } else { + foreignTousseApplicationManager.earlyReturnPartOfTousseItem(foreignTousseApplication, tousseItems); + } } } }else{ @@ -3410,6 +3461,10 @@ } objectDao.saveOrUpdate(foreignTousseApplication); } + if(tousseItem != null && StringUtils.equals(tousseItem.getPackageStatus(), TousseInstance.STATUS_USED)){ + //转换申请单时,外来器械包包状态由“已使用”转换为“待二次回收”HBTSGRYY-11 + tousseItem.setPackageStatus(InvoicePlan.RECYCLINGSTATUS_AWAIT_SECOND_RECEIVE); + } } } else if (tousseDefinition.isCustomTousse()) { applyCustomTousseMap.put(tousseDefinition.getId(), Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r34740 -r34770 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 34740) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 34770) @@ -27,7 +27,7 @@ "4.9.25","4.9.26","4.9.27","4.9.28","4.9.29","4.9.30","4.9.31","4.9.32","4.9.33","4.9.34","4.9.35","4.9.36","4.9.37","4.9.38","4.9.39","4.9.40","4.9.41","4.9.42","4.9.43","4.9.44", "4.9.45","4.9.46","4.9.47","4.9.48","4.9.49","4.9.50","4.9.51","4.9.52","4.9.53","4.9.54","4.9.55","4.9.56","4.9.57","4.9.58","4.9.59","4.9.60","4.9.61","4.9.62", "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", - "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2"}; + "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] {