Index: forgon-core/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r17380 -r17423 --- forgon-core/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 17380) +++ forgon-core/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 17423) @@ -20,7 +20,7 @@ "4.0.5","4.0.6","4.0.44","4.0.45","4.1.0","4.1.1","4.1.2","4.1.3","4.1.4","4.1.5","4.1.6","4.1.7","4.1.8","4.1.9","4.2.0","4.2.1","4.2.2", "4.2.3","4.2.4","4.2.5","4.2.6","4.2.7","4.2.8","4.2.9","4.3.0","4.3.1","4.3.2","4.3.3","4.3.4","4.3.5","4.3.6","4.3.7","4.3.8","4.3.9", "4.4.0","4.4.1","4.4.2","4.4.3","4.4.4","4.4.5","4.4.6","4.4.7","4.4.8","4.4.9","4.5.0","4.5.1","4.5.2","4.5.3","4.5.4","4.5.5","4.5.6","4.5.7","4.5.8", - "4.5.9","4.6.0","4.6.1","4.6.2","4.6.3","4.6.4","4.6.5","4.6.6","4.6.7","4.6.8","4.6.9","4.7.0","4.7.1","4.7.2","4.7.3"};// 版本列表 + "4.5.9","4.6.0","4.6.1","4.6.2","4.6.3","4.6.4","4.6.5","4.6.6","4.6.7","4.6.8","4.6.9","4.7.0","4.7.1","4.7.2","4.7.3","4.7.4"};// 版本列表 public final static List SOFTWARE_VERSION_LIST = Arrays .asList(SOFTWARE_VERSION_ARRAY); public final static String SOFTWARE_VERSION = SOFTWARE_VERSION_ARRAY[SOFTWARE_VERSION_ARRAY.length - 1];// 软件最新版本 Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/supplyroomtype/supplyRoomTypeForm.js =================================================================== diff -u -r17399 -r17423 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/supplyroomtype/supplyRoomTypeForm.js (.../supplyRoomTypeForm.js) (revision 17399) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/supplyroomtype/supplyRoomTypeForm.js (.../supplyRoomTypeForm.js) (revision 17423) @@ -1272,7 +1272,7 @@ columnWidth : .25, items : [{ xtype : 'combo', - fieldLabel : '二级供应室是否自动发货', + fieldLabel : '二级供应室自动发货', id : 'isSecondSupplyRoomAutoInvoice', name : 'isSecondSupplyRoomAutoInvoice', valueField : 'name', @@ -1282,7 +1282,7 @@ editable : false, store : new Ext.data.SimpleStore( { fields : [ 'name'], - data : [['否'],['是']] + data : [['不启用'],['仅对回收自本科室的器械包'],['对回收自所有科室的物品']] }), forceSelection : true, allowBlank : false, Index: ssts-web/src/main/webapp/dataUpdater/sqls/4.7.3_4.7.4.sql =================================================================== diff -u --- ssts-web/src/main/webapp/dataUpdater/sqls/4.7.3_4.7.4.sql (revision 0) +++ ssts-web/src/main/webapp/dataUpdater/sqls/4.7.3_4.7.4.sql (revision 17423) @@ -0,0 +1,2 @@ +update SupplyRoomConfig set isSecondSupplyRoomAutoInvoice='不启用' where isSecondSupplyRoomAutoInvoice is null or isSecondSupplyRoomAutoInvoice<>'是'; +update SupplyRoomConfig set isSecondSupplyRoomAutoInvoice='对回收自所有科室的物品' where isSecondSupplyRoomAutoInvoice='是'; \ No newline at end of file Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r17412 -r17423 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 17412) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 17423) @@ -347,9 +347,6 @@ String orgUnitCode,String finishOperater,String finishComfirmer,boolean needFinishConfirm) { SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager .getSupplyRoomConfigByOrgUnitCoding(orgUnitCode); - //判断该科室是否为一级供应室 - boolean isFirstSupplyRoomUser = supplyRoomConfig != null - && supplyRoomConfig.getSupplyRoomType() == SupplyRoomConfig.SUPPLYROOM_TYPE_1; // Map tousseMap = new HashMap(); // Map> tousseListMap = new HashMap>(); @@ -442,12 +439,15 @@ tousseInstanceManager.saveOrUpdate(tousseInstance); } - if (!isFirstSupplyRoomUser) { + //判断该科室是否为二级供应室 + boolean isSecondSupplyRoomUser = supplyRoomConfig != null + && supplyRoomConfig.getSupplyRoomType() == SupplyRoomConfig.SUPPLYROOM_TYPE_2; + if (isSecondSupplyRoomUser) { SupplyRoomConfig supplyRoomConfigParams = supplyRoomConfigManager.getSystemParamsObj(); - //判断如果配置二级供应室是否自动发货不为否才自动发货,否则不自动发货 - if(!SupplyRoomConfig.RECYCLING_PACKING_NO.equals(supplyRoomConfigParams.getIsSecondSupplyRoomAutoInvoice())){ + //判断如果配置二级供应室是否自动发货不为否并且不需要灭菌完成确认时才自动发货,否则不自动发货 + if(supplyRoomConfigParams.enableSecondSupplyRoomAutoInvoice() && needFinishConfirm == false){ //二级供应室 - generateInvoiceForSecondSupplyRoom(sterilizationRecord); + generateInvoiceForSecondSupplyRoom(sterilizationRecord , orgUnitCode ,supplyRoomConfigParams.getIsSecondSupplyRoomAutoInvoice()); } } else { // for (TousseInstance tousseInstance : allTousseInstancesOfSterile) { @@ -625,6 +625,21 @@ sterilizationRecord.setSrSituationComfirmTime(new Date()); sterilizationRecord.setIsSituationComfirm(true); saveOrUpdate(sterilizationRecord); + + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager + .getSupplyRoomConfigByOrgUnitCoding(orgUnitCode); + //判断该科室是否为二级供应室 + boolean isSecondSupplyRoomUser = supplyRoomConfig != null + && supplyRoomConfig.getSupplyRoomType() == SupplyRoomConfig.SUPPLYROOM_TYPE_2; + if (isSecondSupplyRoomUser) { + SupplyRoomConfig supplyRoomConfigParams = supplyRoomConfigManager.getSystemParamsObj(); + //判断如果配置二级供应室是否自动发货不为否并且不需要灭菌完成确认时才自动发货,否则不自动发货 + if(supplyRoomConfigParams.enableSecondSupplyRoomAutoInvoice()){ + //二级供应室 + generateInvoiceForSecondSupplyRoom(sterilizationRecord , orgUnitCode , supplyRoomConfigParams.getIsSecondSupplyRoomAutoInvoice()); + } + } + if(isConfirmShowUnload == true){ msg = "灭菌卸载完成。"; }else{ @@ -1321,35 +1336,37 @@ } sterilizationRecord.setTousseInstanceList(tousseInstanceList); - // 设置新篮筐列表 - List newReviewedBaskets = new ArrayList( - containerBarcodes.size()); - for (String barcode : containerBarcodes) { - /*ReviewedBasket reviewedBasket = reviewedBasketManager - .getReviewedBasketForSterilizeRecord(barcode, - originalSterilizationRecordId);*/ - //调用新的方法,如灭菌单id为空,即新建灭菌单,则可以从灭菌失败的灭菌单中关联篮筐实例 - ReviewedBasket reviewedBasket = reviewedBasketManager - .getReviewedBasketForSterilizeRecordNew(barcode, - originalSterilizationRecordId); - if (reviewedBasket == null) { - continue; - } - // 设置篮筐位置 - if(barcodePositionMap != null){ - String positoin = barcodePositionMap.get(barcode); - if(StringUtils.isNotBlank(positoin)){ - reviewedBasket.setSterilizerPosition(positoin); + if(CollectionUtils.isNotEmpty(containerBarcodes)){ + // 设置新篮筐列表 + List newReviewedBaskets = new ArrayList( + containerBarcodes.size()); + for (String barcode : containerBarcodes) { + /*ReviewedBasket reviewedBasket = reviewedBasketManager + .getReviewedBasketForSterilizeRecord(barcode, + originalSterilizationRecordId);*/ + //调用新的方法,如灭菌单id为空,即新建灭菌单,则可以从灭菌失败的灭菌单中关联篮筐实例 + ReviewedBasket reviewedBasket = reviewedBasketManager + .getReviewedBasketForSterilizeRecordNew(barcode, + originalSterilizationRecordId); + if (reviewedBasket == null) { + continue; } + // 设置篮筐位置 + if(barcodePositionMap != null){ + String positoin = barcodePositionMap.get(barcode); + if(StringUtils.isNotBlank(positoin)){ + reviewedBasket.setSterilizerPosition(positoin); + } + } + newReviewedBaskets.add(reviewedBasket); + // 篮筐状态改为[灭菌中] + reviewedBasket.getContainer().setStatus( + Container.CONTAINER_STATUS_STERILIZING); + objectDao.saveOrUpdate(reviewedBasket.getContainer()); + objectDao.saveOrUpdate(reviewedBasket); } - newReviewedBaskets.add(reviewedBasket); - // 篮筐状态改为[灭菌中] - reviewedBasket.getContainer().setStatus( - Container.CONTAINER_STATUS_STERILIZING); - objectDao.saveOrUpdate(reviewedBasket.getContainer()); - objectDao.saveOrUpdate(reviewedBasket); + sterilizationRecord.setReviewedBaskets(newReviewedBaskets); } - sterilizationRecord.setReviewedBaskets(newReviewedBaskets); // 获取新的所有器械包,包括直接隶属的器械包和在篮筐里的器械包 Collection allNewTousseInstances = sterilizationRecord @@ -1656,17 +1673,27 @@ /** * 为二级供应室生成发货单 * @param sterilizationRecord + * @param currentOrgUnitCode 当前处理科室 + * @param secondSupplyRoomAutoInvoice 二级供应室自动发货策略:对所有科室回收的物品或仅对自己科室回收的器械包 * 2014-8-14 * forgonvoid */ private void generateInvoiceForSecondSupplyRoom( - SterilizationRecord sterilizationRecord) { + SterilizationRecord sterilizationRecord , String currentOrgUnitCode , String secondSupplyRoomAutoInvoice) { //普通器械包的list List tousseInstances = new ArrayList(); //外来器械包的list List foreignTousseInstances = new ArrayList(); for (TousseInstance tousseInstance : sterilizationRecord .getTousseInstanceList()) { + + //如果配置为仅对回收自本科室的器械包时,且(包类型不为器械包,或不是回收本科室的器械包时)增加过滤 + if(StringUtils.equals(SupplyRoomConfig.SECONDSUPPLYROOM_AUTOINVOICE_FROMCURRENTORG, secondSupplyRoomAutoInvoice) + && (!tousseInstance.getTousseDefinition().isInsideTousse() || !StringUtils.equals(currentOrgUnitCode,tousseInstance.getDepartCoding()))){ + + continue; + } + TousseDefinition td = tousseInstance.getTousseDefinition(); if (td.isForeignTousse() || td.isSplit()) { foreignTousseInstances.add(tousseInstance); @@ -1841,7 +1868,9 @@ invoice.setSender(AcegiHelper.getLoginUser().getUserFullName()); invoice.setSendTime(new Date()); invoice.setDepart(deptName); + invoice.setDepartCoding(deptCode); invoice.setSettleAccountsDepart(deptName); + invoice.setSettleAccountsDepartCoding(deptCode); invoice.setOrgUnitCoding(AcegiHelper.getLoginUser() .getCurrentOrgUnitCode()); invoice.setStatus(Invoice.STATUS_DELIVERED); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java =================================================================== diff -u -r16622 -r17423 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 16622) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 17423) @@ -10,7 +10,9 @@ import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.Table; +import javax.persistence.Transient; +import org.apache.commons.lang.StringUtils; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @@ -124,14 +126,18 @@ //外来器械包打印标签 private String barcodePaperType = BARCODEPAPERTYPE_BIG; - public static final String RECYCLING_PACKING_YES = "是"; - public static final String RECYCLING_PACKING_NO = "否"; + + //二级供应室自动发货 + public static final String SECONDSUPPLYROOM_AUTOINVOICE_DISABLE = "不启用"; + public static final String SECONDSUPPLYROOM_AUTOINVOICE_FROMCURRENTORG = "仅对回收自本科室的器械包"; + public static final String SECONDSUPPLYROOM_AUTOINVOICE_FROMALLORG = "对回收自所有科室的物品"; + public static final String BARCODEPAPERTYPE_BIG = "大标签"; public static final String BARCODEPAPERTYPE_SMALL = "小标签"; private Integer sequence;// 排序 private Boolean isSecondSupplyRoomNeedRecycle = false; // 二级供应室是否需要回收 - private String isSecondSupplyRoomAutoInvoice = RECYCLING_PACKING_YES; // 二级供应室是否自动发货 + private String isSecondSupplyRoomAutoInvoice = SECONDSUPPLYROOM_AUTOINVOICE_DISABLE; // 二级供应室是否自动发货 private Boolean printUserFullName = true;//在装配打印的时候打印用户全名还是登录名,默认打印全名 private String dptCodeOfForeignTousse; //外来器械包的处理科室code @@ -430,6 +436,18 @@ String isSecondSupplyRoomAutoInvoice) { this.isSecondSupplyRoomAutoInvoice = isSecondSupplyRoomAutoInvoice; } + + /** + * 是否启用二级供应室自动发货的功能,设置为对回收自本科室的器械包及回收自所有科室的物品则返回true,否则返回false + */ + @Transient + public boolean enableSecondSupplyRoomAutoInvoice(){ + if(StringUtils.equals(SupplyRoomConfig.SECONDSUPPLYROOM_AUTOINVOICE_FROMALLORG, isSecondSupplyRoomAutoInvoice) + || StringUtils.equals(SupplyRoomConfig.SECONDSUPPLYROOM_AUTOINVOICE_FROMCURRENTORG, isSecondSupplyRoomAutoInvoice)){ + return true; + } + return false; + } public String getDptCodeOfForeignTousse() { return dptCodeOfForeignTousse; Index: ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java =================================================================== diff -u -r17339 -r17423 --- ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17339) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17423) @@ -461,30 +461,30 @@ } /** - * 初始化供应室处理器械包配置 + * 初始化供应室处理器械包配置(供应室和手术室分别能处理所有的器械包) */ private void initCssdHandleTousses(){ List tdList = objectDao.findBySql(TousseDefinition.class.getSimpleName(), "where forDisplay=true"); for(TousseDefinition td : tdList){ - CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); - cssdHandleTousses.setOrgUnitCode(td.getHandlerDepartCode()); - cssdHandleTousses.setOrgUnitName(td.getHandlerDepartName()); - cssdHandleTousses.setTaskGroup(td.getTaskGroup()); - cssdHandleTousses.setTousseDefinitionId(td.getAncestorID()); - cssdHandleTousses.setTousseName(td.getName()); - objectDao.save(cssdHandleTousses); + //测试供应室 + CssdHandleTousses cssdHandleToussesForCssd = new CssdHandleTousses(); + cssdHandleToussesForCssd.setOrgUnitCode(Constants.ORG_UNIT_CODE_CSSD); + cssdHandleToussesForCssd.setOrgUnitName(Constants.ORG_UNIT_NAME_CSSD); + cssdHandleToussesForCssd.setTaskGroup(td.getTaskGroup()); + cssdHandleToussesForCssd.setTousseDefinitionId(td.getAncestorID()); + cssdHandleToussesForCssd.setTousseName(td.getName()); + objectDao.save(cssdHandleToussesForCssd); - //手工配置测试供应室处理呼吸机的配置 - if("呼吸机".equals(td.getName())){ - CssdHandleTousses cssdHandleTousses1 = new CssdHandleTousses(); - cssdHandleTousses1.setOrgUnitCode(Constants.ORG_UNIT_CODE_CSSD); - cssdHandleTousses1.setOrgUnitName(Constants.ORG_UNIT_NAME_CSSD); - cssdHandleTousses1.setTaskGroup("常规组"); - cssdHandleTousses1.setTousseDefinitionId(td.getAncestorID()); - cssdHandleTousses1.setTousseName(td.getName()); - objectDao.save(cssdHandleTousses1); - } + //测试手术室 + CssdHandleTousses cssdHandleToussesForOr = new CssdHandleTousses(); + cssdHandleToussesForOr.setOrgUnitCode(Constants.ORG_UNIT_CODE_OR); + cssdHandleToussesForOr.setOrgUnitName(Constants.ORG_UNIT_NAME_OR); + cssdHandleToussesForOr.setTaskGroup(td.getTaskGroup()); + cssdHandleToussesForOr.setTousseDefinitionId(td.getAncestorID()); + cssdHandleToussesForOr.setTousseName(td.getName()); + objectDao.save(cssdHandleToussesForOr); + } } @@ -1012,7 +1012,7 @@ * 初始化基础数据 * 任务组:【常规组】(测试供应室)、【术科组】(测试供应室)、【器械组】(测试手术室) * 一次性物品类型:【注射器】、【纱块】 - * 仓库 + * 系统参数(科室供应室配置)、仓库、篮筐、灭菌炉等 */ public void initBaseData() { initSerialNum();