Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r14125 -r14143 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 14125) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 14143) @@ -3508,4 +3508,15 @@ } return "success"; } + + @Override + public PackingTask getForeignToussePackingTask(Long sourceId) { + if(DatabaseUtil.isPoIdValid(sourceId)){ + String hql = "where po.tousseDefinition.tousseType='" + TousseDefinition.PACKAGE_TYPE_FOREIGN + "'"; + hql += " and po.sourceId=" + sourceId; + hql += " and po.taskType=" + PackingTask.TASK_APPLICATION; + return (PackingTask) objectDao.getBySql(PackingTask.class.getSimpleName(), hql); + } + return null; + } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java =================================================================== diff -u -r14122 -r14143 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 14122) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManager.java (.../ForeignTousseApplicationManager.java) (revision 14143) @@ -4,6 +4,7 @@ import net.sf.json.JSONObject; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; @@ -36,4 +37,10 @@ * @param foreignTousseApplication 外来器械包申请单 */ public void foreignTousseReturn(ForeignTousseApplication foreignTousseApplication); + /** + * 判断外来器械包申请单关联的器械包实例是否已经使用。如果有一个器械包实例被使用了,则认为已经使用 + * @param foreignTousseApplication + * @return + */ + public boolean isForeignTousseInstanceUsed(ForeignTousseApplication foreignTousseApplication); } Index: ssts-web/src/main/webapp/disinfectsystem/foreigntousseapplication/foreignTousseInfoForm.js =================================================================== diff -u -r14131 -r14143 --- ssts-web/src/main/webapp/disinfectsystem/foreigntousseapplication/foreignTousseInfoForm.js (.../foreignTousseInfoForm.js) (revision 14131) +++ ssts-web/src/main/webapp/disinfectsystem/foreigntousseapplication/foreignTousseInfoForm.js (.../foreignTousseInfoForm.js) (revision 14143) @@ -616,10 +616,10 @@ } }] }else if(formType == 'recycle'){ - + var preReturn = false; //是否提前归还 var isReceive = false; var isRecycling = false; - var isReturn = false; + var canReturn = false; //能否归还 var hideRecycling = true; var hideReturn = true; var status = ''; @@ -630,37 +630,46 @@ status = result; if(result == "待接收"){ isRecycling = true; - isReturn = true; + canReturn = false; includeImplantUsedAmountHidden = true; }else if(result == "已发货"){ isReceive = true; isRecycling = false; confirmRecycle = true; - isReturn = false; + canReturn = true; hideRecycling = false; hideReturn = true; hideUsedAmount = false; + preReturn = true; + }else if(result == '已使用'){ + isReceive = true; + isRecycling = false; + confirmRecycle = true; + canReturn = false; + hideRecycling = false; + hideReturn = true; + hideUsedAmount = false; }else if(result == "已归还"){ isReceive = true; isRecycling = true; - isReturn = true; + canReturn = false; hideRecycling = false; hideReturn = false; hideUsedAmount = false; }else if(result == "已回收"){ isReceive = true; isRecycling = true; - isReturn = false; + canReturn = true; hideRecycling = false; hideReturn = false; hideUsedAmount = false; }else{//已接收、未发货状态 isReceive = true; isRecycling = true; - isReturn = false; + canReturn = true; + preReturn = true; hideRecycling = true; hideReturn = true; - } } }); @@ -705,12 +714,12 @@ } } },{ - text : '确认归还', + text : preReturn ? '提前归还' : '确认归还', id : 'returnBtn', - disabled : isReturn, + disabled : !canReturn, handler : function(){ var b = this; - top.Ext4.MessageBox.confirm("请确认","是否提交"+entityName+"信息?",function(btn) { + top.Ext4.MessageBox.confirm("请确认",preReturn ? "提前归还会终止申请单,并删除装配任务,是否要提交归还?":"是否提交"+entityName+"信息?",function(btn) { if(btn=='yes') { b.disable(); if(!foreignTousseForm.getForm().isValid()){ Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/dwr/table/ForeignTousseApplicationTableManager.java =================================================================== diff -u -r14112 -r14143 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/dwr/table/ForeignTousseApplicationTableManager.java (.../ForeignTousseApplicationTableManager.java) (revision 14112) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/dwr/table/ForeignTousseApplicationTableManager.java (.../ForeignTousseApplicationTableManager.java) (revision 14143) @@ -114,6 +114,12 @@ if (foreignTousseApplication != null && InvoicePlan.DELIVERSTATUS_DELIVERED .equals(foreignTousseApplication.getDeliverStatus())) { + if(foreignTousseApplicationManager.isForeignTousseInstanceUsed(foreignTousseApplication)){ + if(!ForeignTousseApplication.APPLICATION_STATUS_RECYCLING.equals(foreignTousseApplication.getPackageStatus())){ + //已发货 未回收 已使用的状态 + return TousseInstance.STATUS_USED; + } + } if (ForeignTousseApplication.APPLICATION_STATUS_SIGNED .equals(foreignTousseApplication.getPackageStatus())) { return InvoicePlan.DELIVERSTATUS_DELIVERED; Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r14123 -r14143 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 14123) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 14143) @@ -4,12 +4,14 @@ import java.util.Calendar; import java.util.Date; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.hibernate.Query; @@ -20,7 +22,10 @@ import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.BeCleanItemManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ContainerManager; +import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; @@ -30,10 +35,12 @@ import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.packing.PackingTask; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.packing.service.PackingManager; +import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; @@ -73,6 +80,24 @@ private TousseInstanceManager tousseInstanceManager; + private WareHouseManager wareHouseManager; + + private GoodsStockManager goodsStockManager; + + private InvoicePlanManager invoicePlanManager; + + public void setInvoicePlanManager(InvoicePlanManager invoicePlanManager) { + this.invoicePlanManager = invoicePlanManager; + } + + public void setGoodsStockManager(GoodsStockManager goodsStockManager) { + this.goodsStockManager = goodsStockManager; + } + + public void setWareHouseManager(WareHouseManager wareHouseManager) { + this.wareHouseManager = wareHouseManager; + } + public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { this.tousseInstanceManager = tousseInstanceManager; } @@ -589,6 +614,7 @@ ForeignTousseApplication foreignTousseApplication) { if(foreignTousseApplication != null){ Date now = new Date(); + String oldStatus = foreignTousseApplication.getPackageStatus(); foreignTousseApplication.setReturnTime(now); foreignTousseApplication.setReturnMan(AcegiHelper.getLoginUserFullName()); foreignTousseApplication.setPackageStatus(ForeignTousseApplication.APPLICATION_STATUS_RETRUN); @@ -599,13 +625,47 @@ 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.APPLICATION_STATUS_RETRUN, now); + "提前归还", now); + GoodsStock gs = TousseInstanceUtils.newGoodsStock(tousseInstance, wareHouseManager.getWareHouseById(tousseInstance.getWareHouseId())); + if(gs != null){ + goodsStockList.add(gs); + } } } + //扣减仓库库存 + if(CollectionUtils.isNotEmpty(goodsStockList)){ + goodsStockManager.saveOrUpdateGoodsStock(goodsStockList, GoodsStockManager.MODE_OUTSTOCK); + } + //有发货计划,要终止发货计划 + 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(), "提前归还"); + //删除对应的装配任务。由于invoicePlanManager.terminateInvoicePlan方法没有删除外来器械对应的装配任务,所以此处再处理一下 + PackingTask task = packingManager.getForeignToussePackingTask(foreignTousseApplication.getId()); + if(task != null && task.getUnPackAmount() > 0){ + packingManager.delete(task); + } + } } } + @Override + public boolean isForeignTousseInstanceUsed( + ForeignTousseApplication foreignTousseApplication) { + for(TousseInstance tousseInstance : foreignTousseApplication.getTousseInstanceList(objectDao)){ + if(tousseInstance != null && tousseInstance.isUsed()){ + return true; + } + } + return false; + } + } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r13807 -r14143 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 13807) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 14143) @@ -69,6 +69,13 @@ public PackingTask getPackingTaskByNameAndSupplierName(String tousseName, String supplierName); + + /** + * 获取数据库中,外来器械申请单对应的装配任务 + * @param sourceId 外来器械申请单id + * @return + */ + public PackingTask getForeignToussePackingTask(Long sourceId); public void save(PackingTask task);