Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java =================================================================== diff -u -r21817 -r22288 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java (.../ForeignProxyDisinfectionAction.java) (revision 21817) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java (.../ForeignProxyDisinfectionAction.java) (revision 22288) @@ -272,7 +272,6 @@ } } } catch (Exception e) { - message = "{success:false,msg:'" + e.getMessage() + "'}"; e.printStackTrace(); message = e.getMessage(); } @@ -285,6 +284,23 @@ } StrutsResponseUtils.output(obj); } + + public void terminateByInvoicePlanIdAndItemIds() { + String id = StrutsParamUtils.getPraramValue("id", ""); + String itemIds = StrutsParamUtils.getPraramValue("itemIds", ""); + JSONObject obj = new JSONObject(); + String message = ""; + obj.put("success", false); + try { + foreignProxyDisinfectionManager.terminateByInvoicePlanIdAndItemIds(id, itemIds); + obj.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + message = e.getMessage(); + } + obj.put("message", message); + StrutsResponseUtils.output(obj); + } // 合并打印 public void mergeLoadToussePrintData() { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyItem.java =================================================================== diff -u -r20892 -r22288 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyItem.java (.../ForeignProxyItem.java) (revision 20892) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyItem.java (.../ForeignProxyItem.java) (revision 22288) @@ -13,6 +13,7 @@ import javax.persistence.Table; import javax.persistence.Transient; +import org.apache.commons.lang3.BooleanUtils; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @@ -63,6 +64,11 @@ private Date warningUntil;//预警期 + /** + * 是否已终止 + */ + private Boolean isTerminated = false; + @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { @@ -194,6 +200,20 @@ this.warningUntil = warningUntil; } + public Boolean getIsTerminated() { + return isTerminated; + } + @Transient + public boolean terminated(){ + if(BooleanUtils.isTrue(isTerminated)){ + return true; + } + return false; + } + + public void setIsTerminated(Boolean isTerminated) { + this.isTerminated = isTerminated; + } } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/foreignProxyDisinfectionView.js =================================================================== diff -u -r22133 -r22288 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/foreignProxyDisinfectionView.js (.../foreignProxyDisinfectionView.js) (revision 22133) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/foreignProxyDisinfectionView.js (.../foreignProxyDisinfectionView.js) (revision 22288) @@ -321,6 +321,7 @@ {name : 'basketName'}, {name : 'basketBarcode'}, {name : 'count'}, + {name : 'isTerminated'}, {name : 'tousseName'} ] }); @@ -537,7 +538,8 @@ }else{ gridEditable = true; } - var cm = new top.Ext.grid.ColumnModel([{ + var selectModel = new top.Ext.grid.CheckboxSelectionModel(); + var cm = new top.Ext.grid.ColumnModel([selectModel,{ id : 'id', dataIndex : 'id', hidden : true @@ -1124,18 +1126,21 @@ id : 'foreignProxyDisinfectionGrid', store : foreignItemStore, bodyStyle : 'border:1px solid #afd7af', + sm: selectModel, cm : cm, width :974, height : 315, viewConfig: { - forceFit: true + forceFit: true, + getRowClass : function(record,rowIndex,rowParams,store){ + if(record.data.isTerminated){ + return 'my_row_red'; + } + } }, border : true, frame : false, clicksToEdit : 1,// 设置点击几次才可编辑 - selModel : new top.Ext.grid.RowSelectionModel({ - singleSelect : false - }), tbar : [{ text : '物品名称:' },{ @@ -1539,6 +1544,13 @@ }); } },{ + id :'terminateItems', + text : '终止选中物品', + hidden: true, + handler : function(){ + terminateSelectedItems(id); + } + },{ text : '取消', handler : function() { foreignProxyDisinfectionFormWindow.close(); @@ -1596,6 +1608,7 @@ if(id != null && id != ""){ top.Ext.getCmp('depart').disable(); // top.Ext.getCmp('departBarcode').disable(); + top.Ext.getCmp('terminateItems').show(); } if(!id){ @@ -2050,7 +2063,55 @@ }); foreignItemStore.add(tousseInstance); } +function terminateSelectedItems(id){ + var rows = top.Ext.getCmp('foreignProxyDisinfectionGrid').getSelectionModel().getSelections(); + if(rows.length == 0){ + showResult("请选择要终止的物品!"); + return; + } + top.Ext.MessageBox.confirm("请确认", "要终止选中的物品吗?", + function(btn) { + if (btn == 'yes') { + var itemIds = null; + for ( var i = 0; i < rows.length; i++) { + var goods = rows[i].data; + if(itemIds == null){ + itemIds = goods.id; + }else{ + itemIds += ','+ goods.id; + } + } + terminateByInvoicePlanIdAndItemIds(id,itemIds); + } + }); +} +function terminateByInvoicePlanIdAndItemIds(id,itemIds){ + top.Ext.Msg.wait('处理中,请稍候...', '提示'); //进度条等待 + Ext.Ajax.request({ + timeout :30*1000,//超时时间 + url : WWWROOT + '/disinfectSystem/foreignProxyDisinfectionAction!terminateByInvoicePlanIdAndItemIds.do', + params : {id: id,itemIds: itemIds}, + success : function(response, options) { + top.Ext.Msg.hide(); + var result = Ext.decode(response.responseText); + var success = result.success; + if (true != success) { + top.MsgTip.msg('提示', result.message,true,3); + return; + } else { + showResult("终止成功!"); + foreignItemStore.reload(); + grid.dwrReload(); + } + }, + failure : function(response, options) { + top.Ext.Msg.hide(); + var result = Ext.decode(response.responseText); + MsgTip.msg('提示', result.cause,true,3); + } + }); +} Ext.onReady(function() { Ext.QuickTips.init(); Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManager.java =================================================================== diff -u -r21817 -r22288 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManager.java (.../ForeignProxyDisinfectionManager.java) (revision 21817) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManager.java (.../ForeignProxyDisinfectionManager.java) (revision 22288) @@ -60,6 +60,8 @@ public void getPrintInfo(JSONObject obj,JSONObject params); public void endForeignProxyDisinfection(String id); + + public void terminateByInvoicePlanIdAndItemIds(String id,String itemIds); public boolean checkToussesInForeignProxyItemIsPackingAndPrint(Long id); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java =================================================================== diff -u -r22247 -r22288 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 22247) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 22288) @@ -1359,7 +1359,18 @@ return false; } + @Transient + public boolean discarded() { + if (StringUtils.equals(STATUS_DISCARD, status)) { + return true; + } + if(wasteDate != null){ + return true; + } + return false; + } + @Transient public boolean isDiscarded() { if (StringUtils.equals(STATUS_DISCARD, status)) { return true; Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java =================================================================== diff -u -r21817 -r22288 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java (.../ForeignProxyDisinfectionManagerImpl.java) (revision 21817) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java (.../ForeignProxyDisinfectionManagerImpl.java) (revision 22288) @@ -8,6 +8,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -154,6 +155,86 @@ String userName = AcegiHelper.getLoginUser().getUserFullName(); invoicePlanManager.terminateInvoicePlan(foreignProxyDisinfection, userName, ""); } + @Override + public void terminateByInvoicePlanIdAndItemIds(String id,String itemIds){ + if(StringUtils.isBlank(id)){ + throw new RuntimeException("申请单id为空!"); + } + if(StringUtils.isBlank(itemIds)){ + throw new RuntimeException("申请项id为空!"); + } + ForeignProxyDisinfection foreignProxyDisinfection = getByID_ForUpdate(Long.valueOf(id)); + if(foreignProxyDisinfection == null){ + throw new RuntimeException("申请单已被删除!"); + } + if(foreignProxyDisinfection.delivered()){ + throw new RuntimeException(String.format("该申请单已经发货完成!")); + } + if(foreignProxyDisinfection.deliverEnd()){ + throw new RuntimeException(String.format("该申请单已经被终止!")); + } + String endCase = "终止外部代理灭菌申请单"; + Set foreignProxyItemIds = new HashSet(); + Set tousseItemIds = new HashSet(); + String[] itemIdsArr = itemIds.split(","); + for (String itemId : itemIdsArr) { + foreignProxyItemIds.add(Long.valueOf(itemId)); + } + List foreignProxyItems = foreignProxyDisinfection.getForeignProxyItems(); + if(foreignProxyItems == null){ + throw new RuntimeException(String.format("申请单申请项为空!")); + } + Set tousseInstances = new HashSet(); + boolean allItemsTerminated = true; + boolean anyItemsTerminated = false; + for (ForeignProxyItem foreignProxyItem : foreignProxyItems) { + if(foreignProxyItemIds.contains(foreignProxyItem.getId())){ + if(DatabaseUtil.isPoIdValid(foreignProxyItem.getTousseItemId())){ + tousseItemIds.add(foreignProxyItem.getTousseItemId()); + } + foreignProxyItem.setIsTerminated(true); + if(!foreignProxyItem.terminated()){ + allItemsTerminated = false; + }else{ + anyItemsTerminated = true; + } + List list = foreignProxyItem.getTousseInstanceList(objectDao); + if(!CollectionUtils.isEmpty(list)){ + for (TousseInstance tousseInstance : list) { + if(tousseInstance.hasShipped()){ + continue; + } + if(tousseInstance.discarded()){ + continue; + } + tousseInstances.add(tousseInstance); + } + } + objectDao.update(foreignProxyItem); + } + } + if(!tousseItemIds.isEmpty()){ + invoicePlanManager.terminateTousseItemByIds(tousseItemIds, endCase); + } + if(allItemsTerminated){ + if(!foreignProxyDisinfection.deliverEnd()){ + foreignProxyDisinfection.setDeliverStatus(InvoicePlan.STATUS_END); + } + if(!foreignProxyDisinfection.ended()){ + foreignProxyDisinfection.setEndStatus(InvoicePlan.STATUS_END); + } + objectDao.update(foreignProxyDisinfection); + }else if(anyItemsTerminated){ + if(StringUtils.isBlank(foreignProxyDisinfection.getDeliverStatus())){ + foreignProxyDisinfection.setDeliverStatus(InvoicePlan.STATUS_PART_END); + } + if(StringUtils.isBlank(foreignProxyDisinfection.getEndStatus())){ + foreignProxyDisinfection.setEndStatus(InvoicePlan.STATUS_PART_END); + } + objectDao.update(foreignProxyDisinfection); + } + tousseInstanceManager.discardTousseInstance(tousseInstances, endCase); + } @Override public void deleteById(String id) { @@ -665,6 +746,9 @@ List printTousseInstances = new LinkedList(); for (ForeignProxyItem proxyItem : proxyItems) { + if(proxyItem.terminated()){ + continue; + } TousseItem tousseItem = new TousseItem(); applicationList.add(tousseItem); // if(tousseItemId != null){装配之前不会创建tousseItem