Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r17305 -r17315 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 17305) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 17315) @@ -41,13 +41,12 @@ /** * 保存器械包定义 - * @param tousseDefinition - * @param upload + * @param tousseDefinition 器械包定义 * @param materialInstanceStr 所有材料的json字符串 * @param ancestorID 祖先id */ public void saveTousseDefinition(TousseDefinition tousseDefinition, - File upload,String materialInstanceStr,Long ancestorID); + String materialInstanceStr, Long ancestorID); public boolean isExistDuplicateTousseDefinition(String id, String name, String companyName); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java =================================================================== diff -u -r17168 -r17315 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java (.../CssdUtils.java) (revision 17168) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java (.../CssdUtils.java) (revision 17315) @@ -107,6 +107,11 @@ return null; } + /** + * 解析材料(一次性物品的或者器械)的名称和规格 + * @param materialName 带规格的材料名称 + * @return 返回值格式如:{materialName:不带规格的名称,specification:规格} + */ public static JSONObject getGoodsNameAndSp(String materialName){ JSONObject obj = new JSONObject(); if(StringUtils.isNotBlank(materialName)){ Index: ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/toussedefinition/service/SaveOrUpdateTousseDefinitionTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/toussedefinition/service/SaveOrUpdateTousseDefinitionTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/toussedefinition/service/SaveOrUpdateTousseDefinitionTest.java (revision 17315) @@ -0,0 +1,603 @@ +package test.forgon.disinfectsystem.basedatamanager.toussedefinition.service; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.hibernate.Session; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.tools.string.StringTools; + +import static org.testng.Assert.*; +import test.forgon.disinfectsystem.AbstractCSSDTest; +/** + * 测试保存或者修改器械包定义 + * @author Chenjiaru 2017-03-09 + * + */ +public class SaveOrUpdateTousseDefinitionTest extends AbstractCSSDTest { + + /** + 缝合包_器械包的部分属性: + forDisplay=true tousseType=器械包 isApplyEntireTousse=是 + isCleanedEntirely=是 price=1 proxyDisinfectionPrice=1 + printAmount=1 isCustomPacking=是 isDisable=否 + isSterile=是 + 缝合包_器械包的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + + 模拟以下3个操作场景:(触发的位置:器械包定义管理) + 1、保存缝合包_器械包 + 2、再填加2个一次性物品材料(注射器[20ML]) + 3、再修改缝合包_器械包为缝合包2_器械包 + */ + @Test + public void testINSIDE() { + initCSSDData(); + + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_器械包"); + td1.setForDisplay(true); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + td1.setIsApplyEntireTousse(Constants.STR_YES); + td1.setIsCleanedEntirely(Constants.STR_YES); + td1.setPrice(1D); + td1.setProxyDisinfectionPrice(1D); + td1.setPrintAmount(new Integer(1)); + td1.setIsCustomPacking(Constants.STR_YES); + td1.setIsDisable(Constants.STR_NO); + td1.setIsSterile(Constants.STR_YES); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", "2"); + obj1.put("sequence", 1); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + obj2.put("sequence", 2); + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + TousseDefinition td_缝合包_器械包 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_器械包"); + assertEquals(td_缝合包_器械包.getName(), "缝合包_器械包"); + assertEquals(td_缝合包_器械包.getForDisplay(), true); //允许显示 + assertEquals(td_缝合包_器械包.getTousseType(), TousseDefinition.PACKAGE_TYPE_INSIDE); + assertEquals(td_缝合包_器械包.getIsApplyEntireTousse(), Constants.STR_YES); + assertEquals(td_缝合包_器械包.getIsCleanedEntirely(), Constants.STR_YES); + assertEquals(td_缝合包_器械包.getPrice(), 1D); + assertEquals(td_缝合包_器械包.getProxyDisinfectionPrice(), 1D); + assertEquals(td_缝合包_器械包.getPrintAmount(), new Integer(1)); + assertEquals(td_缝合包_器械包.getIsCustomPacking(), Constants.STR_YES); + assertEquals(td_缝合包_器械包.getIsDisable(), Constants.STR_NO); + assertEquals(td_缝合包_器械包.getIsSterile(), Constants.STR_YES); + + List mis = td_缝合包_器械包.getMaterialInstances(); + MaterialInstance mi1 = mis.get(0); + MaterialDefinition md1 = mi1.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md1.getName(), "Test镊子"); + AssertJUnit.assertTrue(StringTools.isBlank(md1.getSpecification())); + + MaterialInstance mi2 = mis.get(1); + MaterialDefinition md2 = mi2.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md2.getName(), "Test静脉拉钩"); + assertEquals(md2.getSpecification(), "1对"); + + JSONObject obj3 = new JSONObject(); + obj3.put("name", "注射器[20ML]"); + obj3.put("tousseType", "一次性物品"); + obj3.put("count", 2); + obj3.put("sequence", 3); + array.add(obj3); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + List dgis = td_缝合包_器械包.getDiposableGoodsItems(); + DiposableGoodsInstance dgi1 = dgis.get(0); + DisposableGoods dg1 = dgi1.getDiposableGoods(); + assertEquals(dgi1.getAmount(), new Integer(2)); + assertEquals(dg1.getName(), "注射器"); + assertEquals(dg1.getSpecification(), "20ML"); + + td1.setName("缝合包2_器械包"); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); //保存包实例 + assertEquals(td_缝合包_器械包.getName(), "缝合包2_器械包"); + } + + /** + 缝合包_敷料包的部分属性: + forDisplay=true tousseType=敷料包 isApplyEntireTousse=是 + isCleanedEntirely=是 price=1 proxyDisinfectionPrice=1 + printAmount=1 isCustomPacking=是 isDisable=否 + isSterile=是 + 缝合包_敷料包的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + + 模拟以下3个操作场景:(触发的位置:器械包定义管理) + 1、保存缝合包_敷料包 + 2、再填加2个一次性物品材料(注射器[20ML]) + 3、再修改缝合包_敷料包为缝合包2_敷料包 + */ + @Test + public void testDRESSING() { + initCSSDData(); + + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_敷料包"); + td1.setForDisplay(true); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_DRESSING); + td1.setIsApplyEntireTousse(Constants.STR_YES); + td1.setIsCleanedEntirely(Constants.STR_YES); + td1.setPrice(1D); + td1.setProxyDisinfectionPrice(1D); + td1.setPrintAmount(new Integer(1)); + td1.setIsCustomPacking(Constants.STR_YES); + td1.setIsDisable(Constants.STR_NO); + td1.setIsSterile(Constants.STR_YES); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", "2"); + obj1.put("sequence", 1); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + obj2.put("sequence", 2); + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + TousseDefinition td_缝合包_敷料包 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_敷料包"); + assertEquals(td_缝合包_敷料包.getName(), "缝合包_敷料包"); + assertEquals(td_缝合包_敷料包.getForDisplay(), true); //允许显示 + assertEquals(td_缝合包_敷料包.getTousseType(), TousseDefinition.PACKAGE_TYPE_DRESSING); + assertEquals(td_缝合包_敷料包.getIsApplyEntireTousse(), Constants.STR_YES); + assertEquals(td_缝合包_敷料包.getIsCleanedEntirely(), Constants.STR_YES); + assertEquals(td_缝合包_敷料包.getPrice(), 1D); + assertEquals(td_缝合包_敷料包.getProxyDisinfectionPrice(), 1D); + assertEquals(td_缝合包_敷料包.getPrintAmount(), new Integer(1)); + assertEquals(td_缝合包_敷料包.getIsCustomPacking(), Constants.STR_YES); + assertEquals(td_缝合包_敷料包.getIsDisable(), Constants.STR_NO); + assertEquals(td_缝合包_敷料包.getIsSterile(), Constants.STR_YES); + + List mis = td_缝合包_敷料包.getMaterialInstances(); + MaterialInstance mi1 = mis.get(0); + MaterialDefinition md1 = mi1.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md1.getName(), "Test镊子"); + AssertJUnit.assertTrue(StringTools.isBlank(md1.getSpecification())); + + MaterialInstance mi2 = mis.get(1); + MaterialDefinition md2 = mi2.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md2.getName(), "Test静脉拉钩"); + assertEquals(md2.getSpecification(), "1对"); + + JSONObject obj3 = new JSONObject(); + obj3.put("name", "注射器[20ML]"); + obj3.put("tousseType", "一次性物品"); + obj3.put("count", 2); + obj3.put("sequence", 3); + array.add(obj3); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + List dgis = td_缝合包_敷料包.getDiposableGoodsItems(); + DiposableGoodsInstance dgi1 = dgis.get(0); + DisposableGoods dg1 = dgi1.getDiposableGoods(); + assertEquals(dgi1.getAmount(), new Integer(2)); + assertEquals(dg1.getName(), "注射器"); + assertEquals(dg1.getSpecification(), "20ML"); + + td1.setName("缝合包2_敷料包"); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + assertEquals(td_缝合包_敷料包.getName(), "缝合包2_敷料包"); + } + + /** + 缝合包_消毒物品的部分属性: + forDisplay=true tousseType=消毒物品 isApplyEntireTousse=是 + isCleanedEntirely=是 price=1 proxyDisinfectionPrice=1 + printAmount=1 isCustomPacking=是 isDisable=否 + isSterile=否 + 缝合包_敷料包的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + + 模拟以下3个操作场景:(触发的位置:器械包定义管理) + 1、保存缝合包_消毒物品 + 2、再填加2个一次性物品材料(注射器[20ML]) + 3、再修改缝合包_消毒物品为缝合包2_消毒物品,并且把(isApplyEntireTousse改为否、isSterile改为是) + */ + @Test + public void testDISINFECTION() { + initCSSDData(); + + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_消毒物品"); + td1.setForDisplay(true); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_DISINFECTION); + td1.setIsApplyEntireTousse(Constants.STR_YES); + td1.setIsCleanedEntirely(Constants.STR_YES); + td1.setPrice(1D); + td1.setProxyDisinfectionPrice(1D); + td1.setPrintAmount(new Integer(1)); + td1.setIsCustomPacking(Constants.STR_YES); + td1.setIsDisable(Constants.STR_NO); + td1.setIsSterile(Constants.STR_NO); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", "2"); + obj1.put("sequence", 1); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + obj2.put("sequence", 2); + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + TousseDefinition td_缝合包_消毒物品 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_消毒物品"); + assertEquals(td_缝合包_消毒物品.getName(), "缝合包_消毒物品"); + assertEquals(td_缝合包_消毒物品.getForDisplay(), true); //允许显示 + assertEquals(td_缝合包_消毒物品.getTousseType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION); + assertEquals(td_缝合包_消毒物品.getIsApplyEntireTousse(), Constants.STR_YES); + assertEquals(td_缝合包_消毒物品.getIsCleanedEntirely(), Constants.STR_YES); + assertEquals(td_缝合包_消毒物品.getPrice(), 1D); + assertEquals(td_缝合包_消毒物品.getProxyDisinfectionPrice(), 1D); + assertEquals(td_缝合包_消毒物品.getPrintAmount(), new Integer(1)); + assertEquals(td_缝合包_消毒物品.getIsCustomPacking(), Constants.STR_YES); + assertEquals(td_缝合包_消毒物品.getIsDisable(), Constants.STR_NO); + assertEquals(td_缝合包_消毒物品.getIsSterile(), Constants.STR_NO); + + List mis = td_缝合包_消毒物品.getMaterialInstances(); + MaterialInstance mi1 = mis.get(0); + MaterialDefinition md1 = mi1.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md1.getName(), "Test镊子"); + AssertJUnit.assertTrue(StringTools.isBlank(md1.getSpecification())); + + MaterialInstance mi2 = mis.get(1); + MaterialDefinition md2 = mi2.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md2.getName(), "Test静脉拉钩"); + assertEquals(md2.getSpecification(), "1对"); + + JSONObject obj3 = new JSONObject(); + obj3.put("name", "注射器[20ML]"); + obj3.put("tousseType", "一次性物品"); + obj3.put("count", 2); + obj3.put("sequence", 3); + array.add(obj3); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + List dgis = td_缝合包_消毒物品.getDiposableGoodsItems(); + DiposableGoodsInstance dgi1 = dgis.get(0); + DisposableGoods dg1 = dgi1.getDiposableGoods(); + assertEquals(dgi1.getAmount(), new Integer(2)); + assertEquals(dg1.getName(), "注射器"); + assertEquals(dg1.getSpecification(), "20ML"); + + td1.setName("缝合包2_消毒物品"); + td1.setIsSterile(Constants.STR_YES); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + assertEquals(td_缝合包_消毒物品.getName(), "缝合包2_消毒物品"); + assertEquals(td_缝合包_消毒物品.getIsSterile(), Constants.STR_YES); + } + + /** + 缝合包_外部代理灭菌的部分属性: + forDisplay=true tousseType=外部代理灭菌 isApplyEntireTousse=是 + isCleanedEntirely=是 price=1 proxyDisinfectionPrice=1 + printAmount=1 isCustomPacking=是 isDisable=否 + isSterile=是 + 缝合包_外部代理灭菌的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + + 模拟以下3个操作场景:(触发的位置:器械包定义管理) + 1、保存缝合包_外部代理灭菌 + 2、再填加2个一次性物品材料(注射器[20ML]) + 3、再修改缝合包_外部代理灭菌为缝合包2_外部代理灭菌 + */ + @Test + public void testFOREIGNPROXY() { + initCSSDData(); + + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_外部代理灭菌"); + td1.setForDisplay(true); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY); + td1.setIsApplyEntireTousse(Constants.STR_YES); + td1.setIsCleanedEntirely(Constants.STR_YES); + td1.setPrice(1D); + td1.setProxyDisinfectionPrice(1D); + td1.setPrintAmount(new Integer(1)); + td1.setIsCustomPacking(Constants.STR_YES); + td1.setIsDisable(Constants.STR_NO); + td1.setIsSterile(Constants.STR_YES); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", "2"); + obj1.put("sequence", 1); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + obj2.put("sequence", 2); + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + TousseDefinition td_缝合包_外部代理灭菌 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_外部代理灭菌"); + assertEquals(td_缝合包_外部代理灭菌.getName(), "缝合包_外部代理灭菌"); + assertEquals(td_缝合包_外部代理灭菌.getForDisplay(), true); //允许显示 + assertEquals(td_缝合包_外部代理灭菌.getTousseType(), TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY); + assertEquals(td_缝合包_外部代理灭菌.getIsApplyEntireTousse(), Constants.STR_YES); + assertEquals(td_缝合包_外部代理灭菌.getIsCleanedEntirely(), Constants.STR_YES); + assertEquals(td_缝合包_外部代理灭菌.getPrice(), 1D); + assertEquals(td_缝合包_外部代理灭菌.getProxyDisinfectionPrice(), 1D); + assertEquals(td_缝合包_外部代理灭菌.getPrintAmount(), new Integer(1)); + assertEquals(td_缝合包_外部代理灭菌.getIsCustomPacking(), Constants.STR_YES); + assertEquals(td_缝合包_外部代理灭菌.getIsDisable(), Constants.STR_NO); + assertEquals(td_缝合包_外部代理灭菌.getIsSterile(), Constants.STR_YES); + + List mis = td_缝合包_外部代理灭菌.getMaterialInstances(); + MaterialInstance mi1 = mis.get(0); + MaterialDefinition md1 = mi1.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md1.getName(), "Test镊子"); + AssertJUnit.assertTrue(StringTools.isBlank(md1.getSpecification())); + + MaterialInstance mi2 = mis.get(1); + MaterialDefinition md2 = mi2.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md2.getName(), "Test静脉拉钩"); + assertEquals(md2.getSpecification(), "1对"); + + JSONObject obj3 = new JSONObject(); + obj3.put("name", "注射器[20ML]"); + obj3.put("tousseType", "一次性物品"); + obj3.put("count", 2); + obj3.put("sequence", 3); + array.add(obj3); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + List dgis = td_缝合包_外部代理灭菌.getDiposableGoodsItems(); + DiposableGoodsInstance dgi1 = dgis.get(0); + DisposableGoods dg1 = dgi1.getDiposableGoods(); + assertEquals(dgi1.getAmount(), new Integer(2)); + assertEquals(dg1.getName(), "注射器"); + assertEquals(dg1.getSpecification(), "20ML"); + + td1.setName("缝合包2_外部代理灭菌"); + td1.setIsSterile(Constants.STR_YES); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + assertEquals(td_缝合包_外部代理灭菌.getName(), "缝合包2_外部代理灭菌"); + assertEquals(td_缝合包_外部代理灭菌.getIsSterile(), Constants.STR_YES); + } + + /** + 缝合包_外来器械包的部分属性: + forDisplay=true tousseType=外来器械包 supplierName=外包供应商1 + packageType=棉布 barcodePaperType=大标签 printAmount=1 + 缝合包_外来器械包的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + + 模拟以下2个操作场景:(触发的位置:外来器械包管理) + 1、保存缝合包_外来器械包 + 2、再修改缝合包_外来器械包为缝合包2_外来器械包并且把packageType改为纸塑 + */ + @Test + public void testFOREIGN() { + initCSSDData(); + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_外来器械包"); + td1.setForDisplay(true); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); + td1.setSupplierName("外包供应商1"); + td1.setPackageType("棉布"); + td1.setBarcodePaperType("大标签"); + td1.setPrintAmount(new Integer(1)); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", 2); + obj1.put("includeImplant", Constants.STR_NO); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + obj2.put("includeImplant", Constants.STR_NO); + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + + TousseDefinition td_缝合包_外来器械包 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_外来器械包"); + assertEquals(td_缝合包_外来器械包.getName(), "缝合包_外来器械包"); + assertEquals(td_缝合包_外来器械包.getForDisplay(), true); //允许显示 + assertEquals(td_缝合包_外来器械包.getTousseType(), TousseDefinition.PACKAGE_TYPE_FOREIGN); + assertEquals(td_缝合包_外来器械包.getSupplierName(), "外包供应商1"); + assertEquals(td_缝合包_外来器械包.getPackageType(), "棉布"); + assertEquals(td_缝合包_外来器械包.getBarcodePaperType(), "大标签"); + assertEquals(td_缝合包_外来器械包.getPrintAmount(), new Integer(1)); + + List mis = td_缝合包_外来器械包.getMaterialInstances(); + MaterialInstance mi1 = mis.get(0); + MaterialDefinition md1 = mi1.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md1.getName(), "Test镊子"); + AssertJUnit.assertTrue(StringTools.isBlank(md1.getSpecification())); + + MaterialInstance mi2 = mis.get(1); + MaterialDefinition md2 = mi2.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md2.getName(), "Test静脉拉钩"); + assertEquals(md2.getSpecification(), "1对"); + + td1.setName("缝合包2_外来器械包"); + td1.setPackageType("纸塑"); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); + assertEquals(td_缝合包_外来器械包.getName(), "缝合包2_外来器械包"); + assertEquals(td_缝合包_外来器械包.getPackageType(), "纸塑"); + } + + /** + 缝合包_消毒物品的部分属性: + forDisplay=false tousseType=消毒物品 + 缝合包_敷料包的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + 注射器 20ML 2 一次性物品 + + 模拟以下1个操作场景:(触发的位置:科室申领) + 1、保存缝合包_消毒物品,只看此消毒物品的价格是否正确,其他的上面已经测试过(因为消毒物品申请单里面的的消毒物品的价格是材料的总价格) + */ + @Test + public void testDISINFECTION2() { + initCSSDData(); + Session session = objectDao.getHibernateSession(); + + MaterialDefinition md_Test镊子 = materialDefinitionManager.getMaterialDefinitionByName("Test镊子", null); + MaterialDefinition md_Test静脉拉钩 = materialDefinitionManager.getMaterialDefinitionByName("Test静脉拉钩", "1对"); + DisposableGoods dg_注射器 = diposableGoodsManager.getDisposableGoodsByName("注射器", "20ML"); + md_Test镊子.setDisinfectionPrice(2D); + md_Test静脉拉钩.setDisinfectionPrice(2D); + dg_注射器.setReferencePrice(2D); + + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_消毒物品"); + td1.setForDisplay(false); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_DISINFECTION); + session.flush(); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", 2); + obj1.put("groupNum", ""); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + obj2.put("groupNum", ""); + JSONObject obj3 = new JSONObject(); + obj3.put("name", "注射器[20ML]"); + obj3.put("tousseType", "一次性物品"); + obj3.put("count", 2); + obj3.put("groupNum", ""); + + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + array.add(obj3); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), td1.getId()); + + TousseDefinition td_缝合包_消毒物品 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_消毒物品"); + assertEquals(td_缝合包_消毒物品.getName(), "缝合包_消毒物品"); + assertEquals(td_缝合包_消毒物品.getForDisplay(), false); //不允许显示 + assertEquals(td_缝合包_消毒物品.getTousseType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION); + assertEquals(td_缝合包_消毒物品.getPrice(), 12D); + } + + /** + 缝合包_自定义器械包的部分属性: + forDisplay=false tousseType=自定义器械包 + 缝合包_自定义器械包的材料清单: + 名称 规格 数量 材料类型 + Test镊子 2 器械 + Test静脉拉钩 1对 2 器械 + 注射器 20ML 2 一次性物品 + + 模拟以下1个操作场景:(触发的位置:科室申领) + 1、保存缝合包_自定义器械包 + */ + @Test + public void testCUSTOM() { + initCSSDData(); + + TousseDefinition td1 = new TousseDefinition(); + td1.setName("缝合包_自定义器械包"); + td1.setForDisplay(false); + td1.setTousseType(TousseDefinition.PACKAGE_TYPE_CUSTOM); + + JSONObject obj1 = new JSONObject(); + obj1.put("name", "Test镊子"); + obj1.put("tousseType", "器械"); + obj1.put("count", 2); + JSONObject obj2 = new JSONObject(); + obj2.put("name", "Test静脉拉钩[1对]"); + obj2.put("tousseType", "器械"); + obj2.put("count", 2); + JSONObject obj3 = new JSONObject(); + obj3.put("name", "注射器[20ML]"); + obj3.put("tousseType", "一次性物品"); + obj3.put("count", 2); + + JSONArray array = new JSONArray(); + array.add(obj1); + array.add(obj2); + array.add(obj3); + tousseDefinitionManager.saveTousseDefinition(td1, array.toString(), null); //保存包实例 + + TousseDefinition td_缝合包_自定义器械包 = tousseDefinitionManager.getTousseDefinitionByName("缝合包_自定义器械包"); + assertEquals(td_缝合包_自定义器械包.getName(), "缝合包_自定义器械包"); + assertEquals(td_缝合包_自定义器械包.getForDisplay(), false); //不允许显示 + assertEquals(td_缝合包_自定义器械包.getTousseType(), TousseDefinition.PACKAGE_TYPE_CUSTOM); + + List mis = td_缝合包_自定义器械包.getMaterialInstances(); + MaterialInstance mi1 = mis.get(0); + MaterialDefinition md1 = mi1.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md1.getName(), "Test镊子"); + AssertJUnit.assertTrue(StringTools.isBlank(md1.getSpecification())); + + MaterialInstance mi2 = mis.get(1); + MaterialDefinition md2 = mi2.getMaterialDefinition(); + assertEquals(mi1.getCount(), 2); + assertEquals(md2.getName(), "Test静脉拉钩"); + assertEquals(md2.getSpecification(), "1对"); + + List dgis = td_缝合包_自定义器械包.getDiposableGoodsItems(); + DiposableGoodsInstance dgi1 = dgis.get(0); + DisposableGoods dg1 = dgi1.getDiposableGoods(); + assertEquals(dgi1.getAmount(), new Integer(2)); + assertEquals(dg1.getName(), "注射器"); + assertEquals(dg1.getSpecification(), "20ML"); + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r17238 -r17315 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 17238) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 17315) @@ -2034,11 +2034,6 @@ return null; } - /** - * 获取器械包定义固定条码 - * @param tousseDefinitionId 器械包定义id - * @return - */ @Override public String getTousseDefinitionFixedBarcode(Long tousseDefinitionId) { if (DatabaseUtil.isPoIdValid(tousseDefinitionId)) { Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/basedatamanager/AllTests.xml =================================================================== diff -u -r16829 -r17315 --- ssts-web/src/test/resources/test/forgon/disinfectsystem/basedatamanager/AllTests.xml (.../AllTests.xml) (revision 16829) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/basedatamanager/AllTests.xml (.../AllTests.xml) (revision 17315) @@ -6,6 +6,8 @@ + + Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/CustomRecyclingApplicationAction.java =================================================================== diff -u -r17029 -r17315 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/CustomRecyclingApplicationAction.java (.../CustomRecyclingApplicationAction.java) (revision 17029) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/CustomRecyclingApplicationAction.java (.../CustomRecyclingApplicationAction.java) (revision 17315) @@ -169,8 +169,10 @@ tousseDefinition.setDiscountPrice(price); } try{ - tousseDefinitionManager - .saveTousseDefinition(tousseDefinition, null,null,null); + String materialDefinitionConfigResult = StrutsParamUtils.getPraramValue( + "materialDefinitionConfigResult", ""); + tousseDefinitionManager + .saveTousseDefinition(tousseDefinition,materialDefinitionConfigResult,null); } catch(Exception e){ e.printStackTrace(); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/toussedefinition/service/DeleteTousseDefinitionTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/toussedefinition/service/DeleteTousseDefinitionTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/basedatamanager/toussedefinition/service/DeleteTousseDefinitionTest.java (revision 17315) @@ -0,0 +1,94 @@ +package test.forgon.disinfectsystem.basedatamanager.toussedefinition.service; + +import org.hibernate.Session; +import org.testng.annotations.Test; + +import com.forgon.directory.model.CssdHandleTousses; + +import test.forgon.constant.Constants; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.tools.db.DatabaseUtil; + +import test.forgon.disinfectsystem.AbstractCSSDTest; +import static org.testng.Assert.*; +/** + * 测试保存或者修改器械包定义 + * @author Chenjiaru 2017-03-09 + * + */ +public class DeleteTousseDefinitionTest extends AbstractCSSDTest { + + + /** + 删除Test开胸包场景1、还未产生了实例(即:在TousseInstance表没有相应的记录了,固定条码除外),并且还没被申请过(即:在TousseItem表,没有相应的记录), + 预期结果:则删除成功,并且将会删除此器械包对应的固定条码和在CssdHandleTousses配置的记录 + + */ + @Test + public void testDeleteTousseDefinition1() { + initCSSDData(); + + TousseDefinition td_Test开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + + CssdHandleTousses cht = new CssdHandleTousses(); + cht.setOrgUnitName(Constants.ORG_UNIT_NAME_CSSD); + cht.setOrgUnitCode(Constants.ORG_UNIT_CODE_CSSD); + cht.setTousseDefinitionId(td_Test开胸包.getId()); + objectDao.saveOrUpdate(cht); + + assertTrue(DatabaseUtil.isPoIdValid(cht.getId())); + TousseInstance ti_Test开胸包1 = new TousseInstance(); + ti_Test开胸包1.setTousseDefinition(td_Test开胸包); + ti_Test开胸包1.setTousseName(td_Test开胸包.getName()); + ti_Test开胸包1.setTousseFixedBarcode(true); + tousseInstanceManager.saveOrUpdate(ti_Test开胸包1); + assertTrue(tousseDefinitionManager.delete(td_Test开胸包)); + + int count = objectDao.countBySql(String.format("select count(*) from CssdHandleTousses cht where cht.id=%s", cht.getId())); + assertEquals(count, 0); + } + + /** + 删除Test开胸包场景2、已经产生了实例(即:在TousseInstance表已经有相应的记录了,固定条码除外),预期结果:则删除失败 + */ + @Test + public void testDeleteTousseDefinition2() { + initCSSDData(); + + TousseDefinition td_Test开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseInstance ti_Test开胸包1 = new TousseInstance(); + ti_Test开胸包1.setTousseDefinition(td_Test开胸包); + ti_Test开胸包1.setTousseName(td_Test开胸包.getName()); + ti_Test开胸包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_Test开胸包1.setTousseFixedBarcode(true); + tousseInstanceManager.saveOrUpdate(ti_Test开胸包1); + + TousseInstance ti_Test开胸包2 = new TousseInstance(); + ti_Test开胸包2.setTousseDefinition(td_Test开胸包); + ti_Test开胸包2.setTousseName(td_Test开胸包.getName()); + ti_Test开胸包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_Test开胸包2.setTousseFixedBarcode(false); + tousseInstanceManager.saveOrUpdate(ti_Test开胸包2); + + assertFalse(tousseDefinitionManager.delete(td_Test开胸包)); + } + + /** + 删除Test开胸包场景3、已经被申请过(即:在TousseItem表已经有相应的记录了),预期结果:则删除失败 + */ + @Test + public void testDeleteTousseDefinition3() { + initCSSDData(); + + TousseDefinition td_Test开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseItem ti1 = new TousseItem(); + ti1.setTousseDefinitionId(td_Test开胸包.getId()); + objectDao.saveOrUpdate(ti1); + assertFalse(tousseDefinitionManager.delete(td_Test开胸包)); + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r17238 -r17315 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 17238) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 17315) @@ -229,7 +229,7 @@ public String getTousseDefinitionFixedBarcode(String tousseName); /** - * 获取器械包定义固定条码 + * 根据器械包定义id获取对应的固定条码,如果没有则创建之(注意:前提条件是存在此器械包定义,若不存在则直接return null). * @param tousseDefinitionId 器械包定义id * @return */ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/service/VideoFileManager.java =================================================================== diff -u -r12331 -r17315 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/service/VideoFileManager.java (.../VideoFileManager.java) (revision 12331) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/service/VideoFileManager.java (.../VideoFileManager.java) (revision 17315) @@ -20,6 +20,10 @@ public void downloadVideo(HttpServletRequest request,HttpServletResponse response, String objectId,String videoName); public String deleteLocalFile(String uuidName, String realPath); + + /** + * 上传视频后删除本地的临时文件 + */ public void deleteTempFile(); public long getVideosCount(String objectId,String videoType); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java =================================================================== diff -u -r17305 -r17315 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 17305) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 17315) @@ -327,7 +327,7 @@ return operationDescription; } /** - * 保存 + * 保存器械包定义 */ public void saveTousseDefinition() { JSONObject tip = tousseDefinitionManager.judgeCanUpdate(tousseDefinition); @@ -359,7 +359,7 @@ } if (tousseDefinition != null) { - if(tousseDefinition.isForeignTousse()){ + if(tousseDefinition.isForeignTousse()){ //是外来外来器械包(处理科室编码、处理科室名称、是否审核三个属性以科室供应室配置的为准) SupplyRoomConfig systemConfig = supplyRoomConfigManager.getSystemParamsObj(); tousseDefinition.setHandlerDepartCode(systemConfig == null?"":systemConfig.getDptCodeOfForeignTousse()); tousseDefinition.setHandlerDepartName(systemConfig == null?"":systemConfig.getDptNameOfForeignTousse()); @@ -391,10 +391,11 @@ tousseDefinition.setHandlerDepartName(null); tousseDefinition.setHandlerDepartCode(null); } + String materialDefinitionConfigResult = StrutsParamUtils.getPraramValue( + "materialDefinitionConfigResult", ""); tousseDefinitionManager.saveTousseDefinition(tousseDefinition, - upload,null,null); + materialDefinitionConfigResult,null); //保存器械包定义 - if (TousseDefinition.PACKAGE_TYPE_COMBO.equals(tousseType)){ //聚合包的所属科室用了handlerDepartName和handlerCode,所以聚合包的处理科室用cssdCode和cssdName来传值 String cssdCode = StrutsParamUtils.getPraramValue("cssdCode", null); @@ -453,13 +454,8 @@ e.printStackTrace(); } } - try { - videoFileManager.deleteTempFile(); - StrutsParamUtils.getResponse().setContentType("text/html;charset=UTF-8"); - StrutsParamUtils.getResponse().getWriter().print(msg); - } catch (IOException e) { - e.printStackTrace(); - } + videoFileManager.deleteTempFile(); + StrutsResponseUtils.output(msg); } /** @@ -924,14 +920,7 @@ message = "{success:false,cause:'器械包定义已有操作记录,无法删除。'}"; e.printStackTrace(); } - HttpServletResponse httpServletResponse = StrutsParamUtils - .getResponse(); - httpServletResponse.setCharacterEncoding("UTF-8"); - try { - httpServletResponse.getWriter().print(message); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(message); } /** Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r17305 -r17315 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 17305) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 17315) @@ -211,26 +211,36 @@ TousseDefinition.class.getSimpleName(), "id", Long.valueOf(id)); } + /** + * 删除器械包定义 + * 注意此器械包还没有产生业务才能删除成功,即TousseItem和TousseInstance找不到相对应的记录,固定条码除外
+ * 如果符合删除的条件,将会删除此器械包对应的固定条码和在CssdHandleTousses配置的记录 + * @param tousseDefinition 将要被删除的器械包 + * @return + */ @Override public boolean delete(TousseDefinition tousseDefinition) { - String sql = "where tousseName = '"+tousseDefinition.getName()+"'"; - @SuppressWarnings("unchecked") - List tousseInstanceList = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql); - if(tousseInstanceList != null && tousseInstanceList.size()>0){ - @SuppressWarnings("unchecked") - List tousseItemList = objectDao.findByProperty(TousseItem.class.getSimpleName(), "tousseDefinitionId", tousseDefinition.getId() + ""); - if(tousseInstanceList.size() == 1 && (tousseItemList == null || tousseItemList.size() <= 0)){ - TousseInstance tousseInstance = tousseInstanceList.get(0); - if(tousseInstance.getTousseFixedBarcode()){ - tousseInstanceManager.delete(tousseInstance); - return doDelete(tousseDefinition); - } - } + List tousseItemList = objectDao.findByProperty(TousseItem.class.getSimpleName(), + "tousseDefinitionId", tousseDefinition.getId() + ""); + + List tousseInstanceList = objectDao.findBySql(TousseInstance.class.getSimpleName(), + String.format("where tousseName='%s'", tousseDefinition.getName())); + + if (CollectionUtils.isNotEmpty(tousseItemList)) { return false; - }else{ - return doDelete(tousseDefinition); + } else if (CollectionUtils.isNotEmpty(tousseInstanceList)) { + if ((tousseInstanceList.size() == 1 && !tousseInstanceList.get(0).getTousseFixedBarcode()) + || tousseInstanceList.size() > 1) { //1、只产生了一条包实例说明是固定条码(为了保险,还是加一个判断确认他是固定条码才可以删除) 2、产生的包实例数量大于1 + return false; + } } + return doDelete(tousseDefinition); } + /** + * 执行删除器械包(并且删除在此器械包在CssdHandleTousses配置的记录) + * @param tousseDefinition 将要被删除的器械包 + * @return + */ private boolean doDelete(TousseDefinition tousseDefinition){ if( tousseDefinition != null){ // 删除供应室处理器械包配置 @@ -349,17 +359,11 @@ } return isExist; } - /** - * 保存器械包定义 - * @param tousseDefinition - * @param upload - * @param materialInstanceStr 所有材料的json字符串 - * @param ancestorID 祖先id - */ + @Override public void saveTousseDefinition(TousseDefinition td, - File upload,String materialInstanceStr,Long ancestorID) { - boolean save = true; + String materialInstanceStr,Long ancestorID) { + boolean save = true; //是否新增 if(DatabaseUtil.isPoIdValid(td.getId())){ save = false; } @@ -372,82 +376,62 @@ materialInstanceList.clear(); List diposableGoodsItems = td.getDiposableGoodsItems(); - if (diposableGoodsItems != null - && diposableGoodsItems.size() > 0) { + if (CollectionUtils.isNotEmpty(diposableGoodsItems)) { objectDao.deleteAll(diposableGoodsItems); diposableGoodsItems.clear(); - td.setDiposableGoodsItems(null); } String tousseType = td.getTousseType(); - if (TousseDefinition.PACKAGE_TYPE_CUSTOM.equals(tousseType)) {// 自定义器械包默认装配组 td.setTaskGroup(supplyRoomConfigManager .getCustomTousseDefaultTaskGroup()); } Double price = 0.0; - // 配置材料信息 - String materialDefinitionConfigResult = ""; - //测试用例时会报错 - //TODO:不应该在Manager类中,获取HttpRequest里面的参数,应改为参数传递方式,Terry Kwan,2016-07-10 - try { - materialDefinitionConfigResult = StrutsParamUtils.getPraramValue( - "materialDefinitionConfigResult", ""); - } catch (Exception e) { - - } - if(StringUtils.isBlank(materialDefinitionConfigResult)){ - materialDefinitionConfigResult = materialInstanceStr; - } - - if (StringUtils.isNotBlank(materialDefinitionConfigResult)) { - - if (materialDefinitionConfigResult.startsWith("\"")){ - materialDefinitionConfigResult = materialDefinitionConfigResult.substring(1,materialDefinitionConfigResult.length() - 1); - - materialDefinitionConfigResult = materialDefinitionConfigResult.replace("\\\\", "\\"); - materialDefinitionConfigResult = materialDefinitionConfigResult.replace("\\\"", "\""); - + if (StringUtils.isNotBlank(materialInstanceStr)) { + if (materialInstanceStr.startsWith("\"")){ + materialInstanceStr = materialInstanceStr.substring(1,materialInstanceStr.length() - 1); + materialInstanceStr = materialInstanceStr.replace("\\\\", "\\"); + materialInstanceStr = materialInstanceStr.replace("\\\"", "\""); } - JSONArray jsonArray = JSONArray.fromObject(materialDefinitionConfigResult); - + JSONArray jsonArray = JSONArray.fromObject(materialInstanceStr); List materialInstances = new ArrayList(); List diposableGoodsInstances = new ArrayList(); Integer includeImplantFlag = TousseDefinition.UNINCLUDE_IMPLANT; //判断是否包含植入物(cjr) for (int i = 0; i < jsonArray.size(); i++) { JSONObject obj = jsonArray.getJSONObject(i); String name = obj.optString("name"); + JSONObject materialobj = CssdUtils.getGoodsNameAndSp(name); + String goodsName = materialobj.optString("materialName"); + String specification = materialobj.optString("specification"); String type = obj.optString("tousseType"); String count = obj.optString("count"); Integer sequence = JSONUtil.optInteger(obj, "sequence", 0); if ("器械".equals(type)) { MaterialInstance materialInstance = new MaterialInstance(); - JSONObject materialobj = CssdUtils.getGoodsNameAndSp(name); - String materialName = materialobj.optString("materialName"); - String specification = materialobj.optString("specification"); + MaterialDefinition materialDefinition = null; if(td.isForeignTousse()){ String includeImplant = obj.optString("includeImplant"); String washClassifyType = obj.optString("washClassifyType"); materialInstance.setWashClassifyType(washClassifyType); - materialDefinition = materialDefinitionManager.getForeignTousseMaterialDefinition(materialName, specification); + materialDefinition = materialDefinitionManager.getForeignTousseMaterialDefinition(goodsName, specification); if(materialDefinition == null){ materialDefinition = new MaterialDefinition(); - materialDefinition.setName(materialName); + materialDefinition.setName(goodsName); materialDefinition.setSpecification(StringUtils.isBlank(specification) ? null : specification); - materialDefinition.setSpelling(GB2Alpha.string2Alpha(materialName)); - materialDefinition.setWbCode(GB2WB.getWBCode(materialName)); + materialDefinition.setSpelling(GB2Alpha.string2Alpha(goodsName)); + materialDefinition.setWbCode(GB2WB.getWBCode(goodsName)); materialDefinition.setIsForeignMaterial(Constants.STR_YES); if(StringUtils.isNotBlank(includeImplant)){ materialDefinition.setIsImplant(includeImplant); } materialDefinitionManager.saveOrUpdate(materialDefinition); } }else{ - materialDefinition = materialDefinitionManager.getMaterialDefinitionByName(materialName,specification); + materialDefinition = materialDefinitionManager.getMaterialDefinitionByName(goodsName,specification); if(materialDefinition == null){ //1、怕并发问题 2、他在定义材料是的材料名字就带有规格如出现(一次性针头[4F])那么这里就有可能查不出来 throw new RuntimeException(name + "已经不存在了!"); } @@ -457,7 +441,7 @@ includeImplantFlag = TousseDefinition.INCLUDE_IMPLANT; } materialInstance.setMaterialDefinition(materialDefinition); - materialInstance.setMaterialName(materialName); + materialInstance.setMaterialName(goodsName); materialInstance.setTousse(td); materialInstance.setSequence(sequence); //外来器械材料申请数量和回收数量分开 @@ -475,40 +459,26 @@ } materialInstances.add(materialInstance); - // 给器械包添加价格如果是消毒物品则加上消毒价格,如果需要灭菌则加上灭菌价格 + // 给器械包添加价格如果是消毒物品则加上消毒价格 Double materialPrice = 0.0; if (TousseDefinition.PACKAGE_TYPE_DISINFECTION .equals(tousseType) && materialDefinition.getDisinfectionPrice() != null) { materialPrice = materialDefinition .getDisinfectionPrice(); - } else if (TousseDefinition.PACKAGE_TYPE_STERILIZATION - .equals(tousseType) - && materialDefinition.getSterilizationPrice() != null) { - materialPrice = materialDefinition - .getSterilizationPrice(); } price = new BigDecimal(price.toString()).add( new BigDecimal(count).multiply(new BigDecimal( materialPrice.toString()))).doubleValue(); } else if ("一次性物品".equals(type)) { DiposableGoodsInstance diposableGoodsInstance = new DiposableGoodsInstance(); - - String goodsName = name; - String specification = null; - if (goodsName.lastIndexOf("[") >= 0) { - specification = goodsName.substring( - goodsName.lastIndexOf("[") + 1, - goodsName.length() - 1); - goodsName = goodsName.substring(0, - goodsName.lastIndexOf("[")); - } DisposableGoods disposableGoods = diposableGoodsManager .getDisposableGoodsByName(goodsName, specification); diposableGoodsInstance.setDiposableGoods(disposableGoods); diposableGoodsInstance.setAmount(Integer.valueOf(count)); diposableGoodsInstance.setSequence(sequence); diposableGoodsInstances.add(diposableGoodsInstance); + Double referencePrice = 0.0; if (disposableGoods != null && disposableGoods.getReferencePrice() != null) { referencePrice = disposableGoods.getReferencePrice(); @@ -518,82 +488,52 @@ referencePrice.toString()))).doubleValue(); } } - td.setIncludeImplant(includeImplantFlag); td.setMaterialInstances(materialInstances); - // 如果isTraceble这个字段为是,则将一次性物品明细插入器械包定义中 - // 如果isTraceble这个字段为否,则将价格计算出来放入器械包定义中 - // 消毒物品申请单的保存以及器械包定义的保存都会调用此方法。 - if (td.getForDisplay() - || TousseDefinition.PACKAGE_TYPE_CUSTOM - .equals(tousseType)) { - td.setDiposableGoodsItems(diposableGoodsInstances); - } else { - if (diposableGoodsItems != null) { - for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsItems) { - DisposableGoods disposableGoods = diposableGoodsInstance - .getDiposableGoods(); - diposableGoodsInstance.setAmount(diposableGoodsInstance - .getAmount()); - Double referencePrice = 0.0; - if (disposableGoods.getReferencePrice() != null) { - referencePrice = disposableGoods.getReferencePrice(); - } else { - price = td.getPrice(); - } - price = new BigDecimal(price.toString()).add( - new BigDecimal(diposableGoodsInstance - .getAmount().toString()) - .multiply(new BigDecimal(referencePrice - .toString()))).doubleValue(); - } - } + td.setDiposableGoodsItems(diposableGoodsInstances); + + //消毒物品申请单保存的每一个消毒物品的价格 = 此消毒物品里面的材料的总价(注:如果材料类型为器械以“材料的消毒价格”为准,如果是一次性物品则以“一次性物品的参考价”为准) + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) + && !td.getForDisplay()) { td.setPrice(price); } } - int workloadAmount = getWorkloadAmount(td); - - td.setTousseAmount(workloadAmount); - + td.setTousseAmount(getWorkloadAmount(td)); if(ancestorID != null){ td.setAncestorID(ancestorID); } saveOrUpdate(td); //改为不管器械是否追溯,都创建一个固定条码的实例,由不追溯改为追溯时也不删除此固定条码的器械包实例 -// if(TousseDefinition.STR_NO.equals(td.getIsTraceable())){ - if(td.getForDisplay()){ - String oldBarcode = tousseInstanceManager.getTousseDefinitionFixedBarcode(td.getId()); - if(StringUtils.isBlank(oldBarcode)){ - TousseInstance tousseInstance = new TousseInstance(); - tousseInstance.setTousseName(td.getName()); - tousseInstance.setTousseDefinition(td); - String barcodeStr = serialNumManager - .getSerialNumberStr(SerialNum.TYPE_BARCODE); - tousseInstance.setBarcode(barcodeStr); - tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); - tousseInstance.setUnTraceableTousse(true); - tousseInstance.setTousseFixedBarcode(true); - objectDao.saveOrUpdate(tousseInstance); - } + if(td.getForDisplay()){ + String oldBarcode = tousseInstanceManager.getTousseDefinitionFixedBarcode(td.getId()); + if(StringUtils.isBlank(oldBarcode)){ + TousseInstance tousseInstance = new TousseInstance(); + tousseInstance.setTousseName(td.getName()); + tousseInstance.setTousseDefinition(td); + String barcodeStr = serialNumManager + .getSerialNumberStr(SerialNum.TYPE_BARCODE); + tousseInstance.setBarcode(barcodeStr); + tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); + tousseInstance.setUnTraceableTousse(true); + tousseInstance.setTousseFixedBarcode(true); + objectDao.saveOrUpdate(tousseInstance); } -// } + } - if(!save){ - //如果修改前的名称与修改后的名称不一致,则修改器械包定义的器械包名称为相应修改其它相关表的器械包名称 - if(td.getOrginalName() != null && !td.getOrginalName().equals(td.getName())){ - if(TousseDefinition.PACKAGE_TYPE_INSIDE.equals(td.getTousseType()) - || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(td.getTousseType()) - || TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(td.getTousseType()) - || td.isDisinfection() || td.isComboTousse()){ - updateOtherEntityTousseName(td.getOrginalName() , td); - } - //器械包定义名称修改输出到日志 - appLogManager.saveLog(AcegiHelper.getLoginUser(), - Log.MODEL_TOUSSEDEFINITION, Log.TYPE_UPDATE, "id:" + td.getId() + - ",oldName:"+ td.getOrginalName() + ",newName:"+ td.getName()); + //如果是修改操作,并且修改前与修改后的名称不一致,则与此器械包定义相关联的业务表的器械包名称,需要同步修改 + if(!save && StringTools.equals(td.getOrginalName(), td.getName())){ + if(TousseDefinition.PACKAGE_TYPE_INSIDE.equals(td.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_DRESSING.equals(td.getTousseType()) + || TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(td.getTousseType()) + || td.isDisinfection() || td.isComboTousse()){ + updateOtherEntityTousseName(td.getOrginalName() , td); } + //器械包定义名称修改输出到日志 + appLogManager.saveLog(AcegiHelper.getLoginUser(), + Log.MODEL_TOUSSEDEFINITION, Log.TYPE_UPDATE, "id:" + td.getId() + + ",oldName:"+ td.getOrginalName() + ",newName:"+ td.getName()); } } @@ -2442,8 +2382,6 @@ /** * 添加供应室处理器械包配置,根据器械包定义的处理科室及任务组 * @param tousseDefinition - * @param upload - * @param materialInstanceStr */ public void addCssdHandleToussesConfig(TousseDefinition tousseDefinition){ CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); @@ -2677,8 +2615,7 @@ } td.setDiposableGoodsItems(diposableGoodsItems); - saveTousseDefinition(td, null, - materialItemsJson.toString(),ancestorTD.getId()); + saveTousseDefinition(td,materialItemsJson.toString(),ancestorTD.getId()); } @Override