Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16499 -r16508 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16499) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16508) @@ -90,6 +90,7 @@ import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.MathTools; +import com.forgon.tools.MyCollectionUtils; import com.forgon.tools.Path; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.SqlBuilder; @@ -722,37 +723,42 @@ if (basket != null && basket.size() > 0) { Set newTousseInstances = new HashSet(); for(ReviewedBasket reviewedBasket : basket){ - Set tousseInstances = reviewedBasket.getTousseInstances(objectDao); - if (tousseInstances == null) { - logger.debug("篮筐Id:" + reviewedBasket.getId() - + ",篮筐内有0个器械包"); - } else { - logger.debug("篮筐Id:" - + reviewedBasket.getId() - + ",过滤前篮筐内有" - + tousseInstances - .size() + "个器械包"); - - //过滤掉篮筐中器械包状态不为已装配的包 - for(TousseInstance tousseInstance : tousseInstances){ - if(TousseInstance.STATUS_REVIEWED.equals(tousseInstance.getStatus())){ - newTousseInstances.add(tousseInstance); - } - } - logger.debug("篮筐Id:" - + reviewedBasket.getId() - + ",过滤后篮筐内有" - + newTousseInstances - .size() + "个器械包"); - } - logger.debug(barcode + "篮筐全部过滤后篮筐内有" - + newTousseInstances - .size() + "个器械包"); + Set reviewedTousseInstances = getReviewedTousseInstance(reviewedBasket); + MyCollectionUtils.addAllIgnoreNull(newTousseInstances, reviewedTousseInstances); + newTousseInstances.addAll(reviewedTousseInstances); } + logger.debug(barcode + "篮筐全部过滤后篮筐内有" + + newTousseInstances + .size() + "个器械包"); return newTousseInstances; } return new HashSet(); } + @Override + public Set getReviewedTousseInstance(ReviewedBasket reviewedBasket) { + if(reviewedBasket == null){ + return null; + } + Set newTousseInstances = new HashSet<>(); + Set tousseInstances = reviewedBasket.getTousseInstances(objectDao); + if (tousseInstances == null) { + logger.debug("篮筐Id:" + reviewedBasket.getId() + + ",篮筐内有0个器械包"); + } else { + logger.debug("篮筐Id:"+ reviewedBasket.getId()+ ",过滤前篮筐内有" + + tousseInstances.size() + "个器械包"); + + //过滤掉篮筐中器械包状态不为已装配的包 + for(TousseInstance tousseInstance : tousseInstances){ + if(TousseInstance.STATUS_REVIEWED.equals(tousseInstance.getStatus())){ + newTousseInstances.add(tousseInstance); + } + } + logger.debug("篮筐Id:"+ reviewedBasket.getId()+ ",过滤后篮筐内有" + + newTousseInstances.size() + "个器械包"); + } + return newTousseInstances; + } /*** * Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/proxyDisinfectionView.js =================================================================== diff -u -r16233 -r16508 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/proxyDisinfectionView.js (.../proxyDisinfectionView.js) (revision 16233) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/proxyDisinfectionView.js (.../proxyDisinfectionView.js) (revision 16508) @@ -55,7 +55,52 @@ rootNode.insertBefore(tousseNode,rootNode.item(0)); top.Ext.getCmp('totalAmountOfTousses').setValue(parseInt(top.Ext.getCmp('totalAmountOfTousses').getValue(),10)+1); } - +/** + * 将器械包实例绑定到篮筐。如果篮筐还没有创建节点,则需要创建节点,如果包实例已经有节点了,就将对应的节点与篮筐绑定 + */ +function bindTousseToBaseket(reviewedBasketId,basketBarcode,reviewedBasketName,tousses){ + if(!basketBarcode || !tousses || tousses.length <= 0){ + return; + } + var rootNode = top.Ext.getCmp('proxyDisinfectionTree').getRootNode(); + var basketNode = null; + var tousseNodes = []; + rootNode.eachChild(function(pNode){ + if(pNode.attributes.type == '容器' && pNode.attributes.barcode == basketBarcode){ + basketNode = pNode; + }else if(pNode.attributes.type == '器械包'){ + for(var i = 0;i < tousses.length;++i){ + if(pNode.attributes.barcode == tousses[i].barcode){ + tousses[i].tousseNode = pNode; + } + } + } + }); + for(var i = 0;i < tousses.length;++i){ + var tousseNode = tousses[i].tousseNode; + if(!tousseNode){ + tousseNode = createNode(false,tousses[i].id,tousses[i].barcode,tousses[i].name,'器械包',tousses[i].status); + } + tousseNodes.push(tousseNode); + } + if(basketNode == null){ + basketNode = createNode(true,reviewedBasketId,basketBarcode,reviewedBasketName,'容器',''); + } + rootNode.insertBefore(basketNode,rootNode.item(0)); + basketNode.appendChild(tousseNodes); + top.Ext.getCmp('totalAmountOfTousses').setValue(parseInt(top.Ext.getCmp('totalAmountOfTousses').getValue(),10)+tousseNodes.length); +} +function checkEmptyBasket(){ + var rootNode = top.Ext.getCmp('proxyDisinfectionTree').getRootNode(); + var basketNode = null; + var tousseNodes = new Array(); + rootNode.eachChild(function(pNode){ + if(pNode.attributes.type == '容器' && pNode.childNodes.length <= 0){ + return pNode.attributes.name; + } + }); + return null; +} function putTousseInBasket(){ var basketBarcode = top.Ext.getCmp('basketBarcode').getValue(); if(basketBarcode == null || basketBarcode == ''){ @@ -605,9 +650,9 @@ return false; } - - if(top.Ext.getCmp('basketName').getValue() != ''){ - var msg = top.Ext.getCmp('basketName').getValue() + "中还未放入任何器械包,是否提交?"; + var basketName = checkEmptyBasket(); + if(basketName){ + var msg = basketName + "中还未放入任何器械包,是否提交?"; var r = confirm(msg) if (r != true) { @@ -668,7 +713,16 @@ } }] }); - + function clearGoodsGrid(){ + top.Ext.getCmp('totalAmountOfTousses').setValue('0'); + var childNodes = top.Ext.getCmp('proxyDisinfectionTree').getRootNode().childNodes; + //并清空器械包明细列表 + if(childNodes && childNodes.length > 0){ + for(var len=childNodes.length-1;len>=0;len--){ + childNodes[len].remove(); + } + } + } //根据条码获取包信息 function loadBasketOrTousseInstance() { var barcode = top.Ext.getCmp('package1').getValue(); @@ -691,24 +745,18 @@ }else{ var orgUnitCode = result.produceDeptCode; var orgUnitName = result.produceDeptName; - if(top.Ext.getCmp('departCoding').getValue() == ''){ - top.Ext.getCmp('departCoding').setValue(orgUnitCode); + var departCodingCmp = top.Ext.getCmp('departCoding'); + if(departCodingCmp.getValue() == ''){ + departCodingCmp.setValue(orgUnitCode); top.Ext.getCmp('depart').setValue(orgUnitName); addTousseInstance(result.id,barcode,result.name,result.status); - }else if(top.Ext.getCmp('departCoding').getValue() != orgUnitCode){ + }else if(departCodingCmp.getValue() != orgUnitCode){ top.Ext.MessageBox.confirm("请确认","该器械包属于"+orgUnitName+",是否将申请科室改为"+orgUnitName+"并清空器械包明细列表?", function(button, text) { if ("yes" == button){ top.Ext.getCmp('departCoding').setValue(orgUnitCode); top.Ext.getCmp('depart').setValue(orgUnitName); - top.Ext.getCmp('totalAmountOfTousses').setValue('0'); - var childNodes = top.Ext.getCmp('proxyDisinfectionTree').getRootNode().childNodes; - //并清空器械包明细列表 - if(childNodes && childNodes.length > 0){ - for(var len=childNodes.length-1;len>=0;len--){ - childNodes[len].remove(); - } - } + clearGoodsGrid(); addTousseInstance(result.id,barcode,result.name,result.status); } } @@ -720,12 +768,34 @@ }else if(result.type == "容器"){ var containerType = result.purpose; if(containerType == '灭菌筐'){ + var orgUnitCode = result.produceDeptCode; + var orgUnitName = result.produceDeptName; + var departCodingCmp = top.Ext.getCmp('departCoding'); top.Ext.getCmp('basketBarcode').setValue(barcode); var remark = top.Ext.getCmp('remark').getValue(); remark = barcode+";"+remark; top.Ext.getCmp('remark').setValue(remark); top.Ext.getCmp('reviewedBasketId').setValue(result.basketId); top.Ext.getCmp('basketName').setValue(result.containerName); + + if(departCodingCmp.getValue() == ''){ + departCodingCmp.setValue(orgUnitCode); + top.Ext.getCmp('depart').setValue(orgUnitName); + bindTousseToBaseket(result.basketId,barcode,result.containerName,result.instances); + }else if(departCodingCmp.getValue() != orgUnitCode){ + top.Ext.MessageBox.confirm("请确认","该灭菌筐属于"+orgUnitName+",是否将申请科室改为"+orgUnitName+"并清空器械包明细列表?", + function(button, text) { + if ("yes" == button){ + departCodingCmp.setValue(orgUnitCode); + top.Ext.getCmp('depart').setValue(orgUnitName); + clearGoodsGrid(); + bindTousseToBaseket(result.basketId,barcode,result.containerName,result.instances); + } + } + ); + }else{ + bindTousseToBaseket(result.basketId,barcode,result.containerName,result.instances); + } }else{ showResult('代理灭菌入筐只能使用灭菌筐。'); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java =================================================================== diff -u -r16233 -r16508 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java (.../ProxyDisinfectionAction.java) (revision 16233) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java (.../ProxyDisinfectionAction.java) (revision 16508) @@ -45,6 +45,7 @@ import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; import com.forgon.tools.json.JsonPropertyFilter; import com.forgon.tools.string.StringTools; import com.opensymphony.xwork2.ModelDriven; @@ -281,12 +282,7 @@ if (!TousseInstance.STATUS_REVIEWED.equals(ti.getStatus())){ editMode = false; } - TousseInstanceVo vo = new TousseInstanceVo(); - vo.setId(ti.getId()); - vo.setBarcode(ti.getBarcode()); - vo.setName(ti.getTousseDefinition().getName()); - vo.setStatus(ti.getStatus()); - basketVo.getInstances().add(vo); + proxyDisinfectionManager.addTousseInstance(basketVo.getInstances(), ti); } } basketVos.add(basketVo); @@ -297,12 +293,7 @@ if (!TousseInstance.STATUS_REVIEWED.equals(ti.getStatus())){ editMode = false; } - TousseInstanceVo vo = new TousseInstanceVo(); - vo.setId(ti.getId()); - vo.setBarcode(ti.getBarcode()); - vo.setName(ti.getTousseDefinition().getName()); - vo.setStatus(ti.getStatus()); - instanceVos.add(vo); + proxyDisinfectionManager.addTousseInstance(instanceVos,ti); } JsonConfig config = new JsonConfig(); PropertyFilter propertyFilter = new JsonPropertyFilter(new String[] { @@ -381,37 +372,47 @@ JSONObject json = new JSONObject(); boolean success = true; + String message = null; if (StringUtils.isNotBlank(barcode)) { BarcodeDevice barcodeDevice = barcodeManager .getBarcodeByBarcode(barcode); if (barcodeDevice != null && barcodeDevice instanceof TousseInstance) { TousseInstance tousseInstance = (TousseInstance) barcodeDevice; - // 验证器械包状态(已装配或已审核) - String status = tousseInstance.getStatus(); - if (TousseInstance.STATUS_PACKED.equals(status) - || TousseInstance.STATUS_REVIEWED.equals(status)) { - Long id = tousseInstance.getId(); - String name = tousseInstance.getTousseDefinition() - .getName(); + String departCodeOfTousse = tousseInstance.getDepartCoding(); + if (StringUtils.isNotEmpty(departCodeOfTousse) + && StringUtils.equals(departCodeOfTousse, AcegiHelper.getCurrentOrgUnitCode())) { + message = "此器械包为本科室装配,无需录入代理灭菌记录"; + success = false; + }else if(!tousseInstance.isPacked() && !tousseInstance.isReviewed()){ + // 验证器械包状态(已装配或已审核) + message = "只能录入已装配或者已审核的器械包"; + success = false; + }else{ boolean isProxyed = false; if (tousseInstance.getProxyDisinfection_id() != null) { if (StringUtils.isNotBlank(proxyDisinfectionId) && tousseInstance.getProxyDisinfection_id() - .equals(Long - .valueOf(proxyDisinfectionId))) { + .equals(Long.valueOf(proxyDisinfectionId))) { isProxyed = false; } else { isProxyed = true; } } - json.put("id", id); - json.put("name", name); - json.put("produceDeptCode", tousseInstance.getOrgUnitCoding()); - json.put("produceDeptName", tousseInstance.getOrgUnitName()); - json.put("status", tousseInstance.getStatus()); - json.put("isProxyed", isProxyed); - json.put("type", "器械包"); + if(isProxyed){ + success = false; + message = "该器械包已经申请代理灭菌,不能重复申请。"; + }else{ + Long id = tousseInstance.getId(); + String name = tousseInstance.getTousseDefinition() + .getName(); + json.put("id", id); + json.put("name", name); + json.put("produceDeptCode", tousseInstance.getOrgUnitCoding()); + json.put("produceDeptName", tousseInstance.getOrgUnitName()); + json.put("status", tousseInstance.getStatus()); + json.put("type", BarcodeDevice.BARCODE_TYPE_PACKAGE); + } } } else if (barcodeDevice != null && barcodeDevice instanceof Container) { @@ -422,24 +423,25 @@ if(basket != null){ basketId = basket.getId(); } + List tousses = proxyDisinfectionManager.buildReviewedTousseInstanceVos(basket); json.put("containerName", container.getContainerName()); json.put("purpose", container.getPurpose()); + json.put("produceDeptCode", container.getDepartCode()); + json.put("produceDeptName", container.getDepartName()); json.put("basketId", basketId); json.put("type", "容器"); + json.put("instances", tousses); }else{ + message = "请扫描器械包或者篮筐条码!"; success = false; } }else{ + message = "请扫描器械包或者篮筐条码!"; success = false; } - json.put("success", success); - try { - HttpServletResponse response = StrutsParamUtils.getResponse(); - response.setCharacterEncoding("UTF-8"); - response.getWriter().println(json.toString()); - } catch (IOException e) { - e.printStackTrace(); - } + JSONUtil.addMessage(json, message); + JSONUtil.addSuccess(json, success); + StrutsResponseUtils.output(json); } /** Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java =================================================================== diff -u -r16233 -r16508 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 16233) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 16508) @@ -3,6 +3,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -31,6 +32,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; +import com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.vo.TousseInstanceVo; import com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.vo.TousseItenInfo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.log.model.Log; @@ -615,4 +617,36 @@ } + @Override + public void addTousseInstance(Collection coll, + TousseInstance tousseInstance) { + if(tousseInstance == null || coll == null){ + return; + } + TousseInstanceVo vo = new TousseInstanceVo(); + vo.setId(tousseInstance.getId()); + vo.setBarcode(tousseInstance.getBarcode()); + vo.setName(tousseInstance.getTousseDefinition().getName()); + vo.setStatus(tousseInstance.getStatus()); + coll.add(vo); + } + + @Override + public List buildReviewedTousseInstanceVos( + ReviewedBasket reviewedBasket) { + Set tis = tousseInstanceManager.getReviewedTousseInstance(reviewedBasket); + if(CollectionUtils.isNotEmpty(tis)){ + String orgUnitCode = AcegiHelper.getCurrentOrgUnitCode(); + List list = new ArrayList(); + for(TousseInstance ti : tis){ + if(!StringTools.equals(orgUnitCode, ti.getOrgUnitCoding())){ + //当前登录用户不能代理灭菌自己科室处理的包 + addTousseInstance(list,ti); + } + } + return list; + } + return null; + } + } \ No newline at end of file Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r16499 -r16508 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16499) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16508) @@ -76,6 +76,12 @@ * @return */ public Set getReviewedTousseInstanceByBasket(String barcode); + /** + * 获取篮筐中所有已审核的器械包 + * @param reviewedBasket + * @return + */ + public Set getReviewedTousseInstance(ReviewedBasket reviewedBasket); public List getTodayReviewedTousseInstanceWithOutBasket( String orgUnitCode); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/ReviewedBasket.java =================================================================== diff -u -r15253 -r16508 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/ReviewedBasket.java (.../ReviewedBasket.java) (revision 15253) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/ReviewedBasket.java (.../ReviewedBasket.java) (revision 16508) @@ -18,6 +18,7 @@ import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.Table; +import javax.persistence.Transient; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @@ -105,6 +106,15 @@ List sterilizationRecords) { this.sterilizationRecords = sterilizationRecords; } - - + /** + * 获取容器的条码 + * @return + */ + @Transient + public String getBarcode(){ + if(container != null){ + return container.getBarcode(); + } + return null; + } } Index: forgon-tools/src/main/java/com/forgon/tools/MyCollectionUtils.java =================================================================== diff -u --- forgon-tools/src/main/java/com/forgon/tools/MyCollectionUtils.java (revision 0) +++ forgon-tools/src/main/java/com/forgon/tools/MyCollectionUtils.java (revision 16508) @@ -0,0 +1,42 @@ +package com.forgon.tools; + +import java.util.ArrayList; +import java.util.Collection; + +public class MyCollectionUtils { + private MyCollectionUtils(){} + /** + * 将另一个集合中的元素添加到指定的集合中。源集合中的null元素将被忽略 + * @param collection 目标集合,如果为null,则在others不为null并且包含非null元素时,创建新的集合 + * @param others 源集合,其中的元素将被添加到目录集合中。可以为null,元素也可以包含null,但是null元素将不被添加到目标集合 + */ + public static Collection addAllIgnoreNull(Collection collection,Collection others){ + if(!isEmptyOrOnlyNull(others)){ + if(collection == null){ + collection = new ArrayList(); + } + for(T o : others){ + if(o != null){ + collection.add(o); + } + } + } + return collection; + } + /** + * 判断集合是否为空。如果集合为null或者不包含元素或者只包含null的元素,返回true; + * @param coll + * @return + */ + public static boolean isEmptyOrOnlyNull(final Collection coll) { + if(coll == null || coll.isEmpty()){ + return true; + } + for(Object o : coll){ + if(o != null){ + return false; + } + } + return true; + } +} Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManager.java =================================================================== diff -u -r15003 -r16508 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManager.java (.../ProxyDisinfectionManager.java) (revision 15003) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManager.java (.../ProxyDisinfectionManager.java) (revision 16508) @@ -1,11 +1,14 @@ package com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.service; +import java.util.Collection; import java.util.List; import net.sf.json.JSONArray; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.packing.ReviewedBasket; import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; +import com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.vo.TousseInstanceVo; /** * @author WangYi @@ -41,4 +44,15 @@ * @param resendout 是否二次发货的新的值,可能是无效值(不是"是",也不是"否")。此处的处理,这个值只能是"是"或者是"否",否则都会抛出异常 */ public void changeResendout(String proxyDisinfectionId,String resendout); + /** + * 创建器械包Vo对象,并添加到集合中 + * @param coll + * @param tousseInstance + */ + public void addTousseInstance(Collection coll,TousseInstance tousseInstance); + /** + * 篮筐实例中已审核的器械包,创建vo对象 + * @param reviewedBasket + */ + public List buildReviewedTousseInstanceVos(ReviewedBasket reviewedBasket); }